claude-code-workflow 6.3.24 → 6.3.26
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/.claude/commands/issue/discover-by-prompt.md +764 -0
- package/.claude/skills/text-formatter/SKILL.md +196 -0
- package/.claude/skills/text-formatter/phases/01-input-collection.md +111 -0
- package/.claude/skills/text-formatter/phases/02-content-analysis.md +248 -0
- package/.claude/skills/text-formatter/phases/03-format-transform.md +245 -0
- package/.claude/skills/text-formatter/phases/04-output-preview.md +183 -0
- package/.claude/skills/text-formatter/specs/callout-types.md +293 -0
- package/.claude/skills/text-formatter/specs/element-mapping.md +226 -0
- package/.claude/skills/text-formatter/specs/format-rules.md +273 -0
- package/.claude/skills/text-formatter/templates/bbcode-template.md +350 -0
- package/ccw/dist/core/routes/help-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/help-routes.js +43 -7
- package/ccw/dist/core/routes/help-routes.js.map +1 -1
- package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/litellm-api-routes.js +31 -5
- package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
- package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/memory-routes.js +73 -0
- package/ccw/dist/core/routes/memory-routes.js.map +1 -1
- package/ccw/dist/core/routes/status-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/status-routes.js +36 -4
- package/ccw/dist/core/routes/status-routes.js.map +1 -1
- package/ccw/dist/core/server.d.ts.map +1 -1
- package/ccw/dist/core/server.js +58 -0
- package/ccw/dist/core/server.js.map +1 -1
- package/ccw/dist/core/services/api-key-tester.d.ts.map +1 -1
- package/ccw/dist/core/services/api-key-tester.js +8 -3
- package/ccw/dist/core/services/api-key-tester.js.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.d.ts +7 -0
- package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.js +11 -1
- package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
- package/ccw/dist/tools/cli-executor-core.d.ts +11 -0
- package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor-core.js +89 -2
- package/ccw/dist/tools/cli-executor-core.js.map +1 -1
- package/ccw/dist/tools/codex-lens.d.ts +2 -1
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens.js +51 -8
- package/ccw/dist/tools/codex-lens.js.map +1 -1
- package/ccw/dist/tools/index.d.ts.map +1 -1
- package/ccw/dist/tools/index.js +2 -0
- package/ccw/dist/tools/index.js.map +1 -1
- package/ccw/dist/tools/litellm-client.d.ts +6 -0
- package/ccw/dist/tools/litellm-client.d.ts.map +1 -1
- package/ccw/dist/tools/litellm-client.js +22 -1
- package/ccw/dist/tools/litellm-client.js.map +1 -1
- package/ccw/dist/tools/litellm-executor.js +2 -2
- package/ccw/dist/tools/litellm-executor.js.map +1 -1
- package/ccw/dist/tools/memory-update-queue.d.ts +172 -0
- package/ccw/dist/tools/memory-update-queue.d.ts.map +1 -0
- package/ccw/dist/tools/memory-update-queue.js +431 -0
- package/ccw/dist/tools/memory-update-queue.js.map +1 -0
- package/ccw/src/core/routes/help-routes.ts +46 -7
- package/ccw/src/core/routes/litellm-api-routes.ts +35 -4
- package/ccw/src/core/routes/memory-routes.ts +84 -0
- package/ccw/src/core/routes/status-routes.ts +39 -4
- package/ccw/src/core/server.ts +62 -0
- package/ccw/src/core/services/api-key-tester.ts +9 -3
- package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +45 -0
- package/ccw/src/templates/dashboard-js/components/cli-status.js +36 -5
- package/ccw/src/templates/dashboard-js/components/hook-manager.js +42 -81
- package/ccw/src/templates/dashboard-js/components/mcp-manager.js +170 -28
- package/ccw/src/templates/dashboard-js/components/notifications.js +14 -4
- package/ccw/src/templates/dashboard-js/i18n.js +26 -0
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +72 -2
- package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +11 -1
- package/ccw/src/tools/claude-cli-tools.ts +17 -1
- package/ccw/src/tools/cli-executor-core.ts +103 -2
- package/ccw/src/tools/codex-lens.ts +63 -8
- package/ccw/src/tools/index.ts +2 -0
- package/ccw/src/tools/litellm-client.ts +25 -3
- package/ccw/src/tools/litellm-executor.ts +2 -2
- package/ccw/src/tools/memory-update-queue.js +499 -0
- package/package.json +91 -91
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
# BBCode Template
|
|
2
|
+
|
|
3
|
+
论坛优化的 BBCode + Markdown 混合模板(像素级字号)。
|
|
4
|
+
|
|
5
|
+
## 核心规则
|
|
6
|
+
|
|
7
|
+
### 字号体系 (Pixels)
|
|
8
|
+
|
|
9
|
+
| 元素 | Size | 说明 |
|
|
10
|
+
|------|------|------|
|
|
11
|
+
| 主标题 | 150 | 文档标题 |
|
|
12
|
+
| 章节标题 | 120 | H2 级别 |
|
|
13
|
+
| 子标题 | 100 | H3 级别 |
|
|
14
|
+
| 正文 | (默认) | 不指定 |
|
|
15
|
+
| 备注 | 80 | 灰色小字 |
|
|
16
|
+
|
|
17
|
+
### 禁止使用
|
|
18
|
+
|
|
19
|
+
- `[align]` - 不渲染
|
|
20
|
+
- `[hr]` - 不渲染,用 `---`
|
|
21
|
+
- `[table]` - 支持有限
|
|
22
|
+
- HTML 标签
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 文档模板
|
|
27
|
+
|
|
28
|
+
### 基础文档结构
|
|
29
|
+
|
|
30
|
+
```bbcode
|
|
31
|
+
[size=150][color=#2196F3][b]{{title}}[/b][/color][/size]
|
|
32
|
+
|
|
33
|
+
[size=80][color=gray]{{metadata}}[/color][/size]
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
{{introduction}}
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
[size=120][color=#2196F3][b]{{section1_title}}[/b][/color][/size]
|
|
42
|
+
|
|
43
|
+
{{section1_content}}
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
[size=120][color=#2196F3][b]{{section2_title}}[/b][/color][/size]
|
|
48
|
+
|
|
49
|
+
{{section2_content}}
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
[size=80][color=gray]— 全文完 —[/color][/size]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 带目录的文档
|
|
57
|
+
|
|
58
|
+
```bbcode
|
|
59
|
+
[size=150][color=#2196F3][b]{{title}}[/b][/color][/size]
|
|
60
|
+
|
|
61
|
+
[size=80][color=gray]{{author}} | {{date}}[/color][/size]
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
[size=100][b]📋 目录[/b][/size]
|
|
66
|
+
|
|
67
|
+
• {{section1_title}}
|
|
68
|
+
• {{section2_title}}
|
|
69
|
+
• {{section3_title}}
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
[size=120][color=#2196F3][b]{{section1_title}}[/b][/color][/size]
|
|
74
|
+
|
|
75
|
+
{{section1_content}}
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
[size=120][color=#2196F3][b]{{section2_title}}[/b][/color][/size]
|
|
80
|
+
|
|
81
|
+
{{section2_content}}
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
[size=120][color=#2196F3][b]{{section3_title}}[/b][/color][/size]
|
|
86
|
+
|
|
87
|
+
{{section3_content}}
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
[size=80][color=gray]— 全文完 —[/color][/size]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Callout 模板
|
|
97
|
+
|
|
98
|
+
### 提示 (Note/Info)
|
|
99
|
+
|
|
100
|
+
```bbcode
|
|
101
|
+
[quote]
|
|
102
|
+
[size=100][color=#2196F3][b]📝 {{title}}[/b][/color][/size]
|
|
103
|
+
|
|
104
|
+
{{content}}
|
|
105
|
+
[/quote]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 技巧 (Tip/Hint)
|
|
109
|
+
|
|
110
|
+
```bbcode
|
|
111
|
+
[quote]
|
|
112
|
+
[size=100][color=#4CAF50][b]💡 {{title}}[/b][/color][/size]
|
|
113
|
+
|
|
114
|
+
{{content}}
|
|
115
|
+
[/quote]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 成功 (Success)
|
|
119
|
+
|
|
120
|
+
```bbcode
|
|
121
|
+
[quote]
|
|
122
|
+
[size=100][color=#4CAF50][b]✅ {{title}}[/b][/color][/size]
|
|
123
|
+
|
|
124
|
+
{{content}}
|
|
125
|
+
[/quote]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 警告 (Warning/Caution)
|
|
129
|
+
|
|
130
|
+
```bbcode
|
|
131
|
+
[quote]
|
|
132
|
+
[size=100][color=#FF9800][b]⚠️ {{title}}[/b][/color][/size]
|
|
133
|
+
|
|
134
|
+
{{content}}
|
|
135
|
+
[/quote]
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 危险/错误 (Danger/Error)
|
|
139
|
+
|
|
140
|
+
```bbcode
|
|
141
|
+
[quote]
|
|
142
|
+
[size=100][color=#F44336][b]❌ {{title}}[/b][/color][/size]
|
|
143
|
+
|
|
144
|
+
{{content}}
|
|
145
|
+
[/quote]
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### 示例 (Example)
|
|
149
|
+
|
|
150
|
+
```bbcode
|
|
151
|
+
[quote]
|
|
152
|
+
[size=100][color=#9C27B0][b]📋 {{title}}[/b][/color][/size]
|
|
153
|
+
|
|
154
|
+
{{content}}
|
|
155
|
+
[/quote]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 问题 (Question/FAQ)
|
|
159
|
+
|
|
160
|
+
```bbcode
|
|
161
|
+
[quote]
|
|
162
|
+
[size=100][color=#FF9800][b]❓ {{title}}[/b][/color][/size]
|
|
163
|
+
|
|
164
|
+
{{content}}
|
|
165
|
+
[/quote]
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 重要 (Important)
|
|
169
|
+
|
|
170
|
+
```bbcode
|
|
171
|
+
[quote]
|
|
172
|
+
[size=100][color=#F44336][b]⭐ {{title}}[/b][/color][/size]
|
|
173
|
+
|
|
174
|
+
{{content}}
|
|
175
|
+
[/quote]
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 代码展示模板
|
|
181
|
+
|
|
182
|
+
### 单代码块
|
|
183
|
+
|
|
184
|
+
```bbcode
|
|
185
|
+
[size=100][color=#9C27B0][b]代码示例[/b][/color][/size]
|
|
186
|
+
|
|
187
|
+
[code]
|
|
188
|
+
{{code}}
|
|
189
|
+
[/code]
|
|
190
|
+
|
|
191
|
+
[size=80][color=gray]说明: {{description}}[/color][/size]
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### 带标题的代码
|
|
195
|
+
|
|
196
|
+
```bbcode
|
|
197
|
+
[size=100][b]{{code_title}}[/b][/size]
|
|
198
|
+
|
|
199
|
+
[code]
|
|
200
|
+
{{code}}
|
|
201
|
+
[/code]
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 特性展示模板
|
|
207
|
+
|
|
208
|
+
### 特性列表
|
|
209
|
+
|
|
210
|
+
```bbcode
|
|
211
|
+
[size=120][color=#2196F3][b]功能特性[/b][/color][/size]
|
|
212
|
+
|
|
213
|
+
• [color=#4CAF50][b]✨ {{feature1}}[/b][/color] — {{desc1}}
|
|
214
|
+
• [color=#2196F3][b]🚀 {{feature2}}[/b][/color] — {{desc2}}
|
|
215
|
+
• [color=#FF9800][b]⚡ {{feature3}}[/b][/color] — {{desc3}}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### 详细特性卡片
|
|
219
|
+
|
|
220
|
+
```bbcode
|
|
221
|
+
[size=120][color=#2196F3][b]功能特性[/b][/color][/size]
|
|
222
|
+
|
|
223
|
+
[quote]
|
|
224
|
+
[size=100][color=#4CAF50][b]✨ {{feature1_title}}[/b][/color][/size]
|
|
225
|
+
|
|
226
|
+
{{feature1_description}}
|
|
227
|
+
|
|
228
|
+
[size=80][color=gray]适用场景: {{feature1_use_case}}[/color][/size]
|
|
229
|
+
[/quote]
|
|
230
|
+
|
|
231
|
+
[quote]
|
|
232
|
+
[size=100][color=#2196F3][b]🚀 {{feature2_title}}[/b][/color][/size]
|
|
233
|
+
|
|
234
|
+
{{feature2_description}}
|
|
235
|
+
|
|
236
|
+
[size=80][color=gray]适用场景: {{feature2_use_case}}[/color][/size]
|
|
237
|
+
[/quote]
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 步骤指南模板
|
|
243
|
+
|
|
244
|
+
```bbcode
|
|
245
|
+
[size=120][color=#2196F3][b]操作步骤[/b][/color][/size]
|
|
246
|
+
|
|
247
|
+
[size=100][color=#2196F3][b]步骤 1: {{step1_title}}[/b][/color][/size]
|
|
248
|
+
|
|
249
|
+
{{step1_content}}
|
|
250
|
+
|
|
251
|
+
[quote]
|
|
252
|
+
[size=100][color=#FF9800][b]💡 提示[/b][/color][/size]
|
|
253
|
+
|
|
254
|
+
{{step1_tip}}
|
|
255
|
+
[/quote]
|
|
256
|
+
|
|
257
|
+
[size=100][color=#2196F3][b]步骤 2: {{step2_title}}[/b][/color][/size]
|
|
258
|
+
|
|
259
|
+
{{step2_content}}
|
|
260
|
+
|
|
261
|
+
[size=100][color=#2196F3][b]步骤 3: {{step3_title}}[/b][/color][/size]
|
|
262
|
+
|
|
263
|
+
{{step3_content}}
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
[color=#4CAF50][b]✅ 完成![/b][/color] {{completion_message}}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 版本更新模板
|
|
273
|
+
|
|
274
|
+
```bbcode
|
|
275
|
+
[size=150][color=#673AB7][b]🎉 版本 {{version}} 更新日志[/b][/color][/size]
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
[size=120][color=#4CAF50][b]✨ 新功能[/b][/color][/size]
|
|
280
|
+
|
|
281
|
+
• [b]{{new_feature1}}[/b]: {{new_feature1_desc}}
|
|
282
|
+
• [b]{{new_feature2}}[/b]: {{new_feature2_desc}}
|
|
283
|
+
|
|
284
|
+
[size=120][color=#2196F3][b]🔧 改进[/b][/color][/size]
|
|
285
|
+
|
|
286
|
+
• {{improvement1}}
|
|
287
|
+
• {{improvement2}}
|
|
288
|
+
|
|
289
|
+
[size=120][color=#F44336][b]🐛 修复[/b][/color][/size]
|
|
290
|
+
|
|
291
|
+
• {{bugfix1}}
|
|
292
|
+
• {{bugfix2}}
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
[url={{download_url}}][b]📥 立即下载[/b][/url]
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## FAQ 模板
|
|
302
|
+
|
|
303
|
+
```bbcode
|
|
304
|
+
[size=120][color=#2196F3][b]❓ 常见问题[/b][/color][/size]
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
[size=100][color=#333][b]Q: {{question1}}[/b][/color][/size]
|
|
309
|
+
|
|
310
|
+
[b]A:[/b] {{answer1}}
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
[size=100][color=#333][b]Q: {{question2}}[/b][/color][/size]
|
|
315
|
+
|
|
316
|
+
[b]A:[/b] {{answer2}}
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
[size=100][color=#333][b]Q: {{question3}}[/b][/color][/size]
|
|
321
|
+
|
|
322
|
+
[b]A:[/b] {{answer3}}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## 转换检查清单
|
|
328
|
+
|
|
329
|
+
### 必须检查
|
|
330
|
+
|
|
331
|
+
- [ ] 标题使用像素值 (150/120/100)
|
|
332
|
+
- [ ] 分隔线使用 `---`
|
|
333
|
+
- [ ] 未使用 `[align]`
|
|
334
|
+
- [ ] 未使用 `[hr]`
|
|
335
|
+
- [ ] 未使用 HTML 标签
|
|
336
|
+
- [ ] Callout 标题 size=100
|
|
337
|
+
- [ ] 灰色备注 size=80
|
|
338
|
+
|
|
339
|
+
### 颜色规范
|
|
340
|
+
|
|
341
|
+
| 用途 | 颜色 |
|
|
342
|
+
|------|------|
|
|
343
|
+
| 主标题 | #2196F3 |
|
|
344
|
+
| 章节标题 | #2196F3 |
|
|
345
|
+
| 子标题 | #333 |
|
|
346
|
+
| 成功/提示 | #4CAF50 |
|
|
347
|
+
| 警告 | #FF9800 |
|
|
348
|
+
| 错误/危险 | #F44336 |
|
|
349
|
+
| 示例 | #9C27B0 |
|
|
350
|
+
| 备注 | gray |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-routes.d.ts","sourceRoot":"","sources":["../../../src/core/routes/help-routes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"help-routes.d.ts","sourceRoot":"","sources":["../../../src/core/routes/help-routes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsK/C;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CA+J1E"}
|
|
@@ -5,6 +5,26 @@
|
|
|
5
5
|
import { readFileSync, existsSync, watch } from 'fs';
|
|
6
6
|
import { join } from 'path';
|
|
7
7
|
import { homedir } from 'os';
|
|
8
|
+
/**
|
|
9
|
+
* Get the ccw-help index directory path (pure function)
|
|
10
|
+
* Priority: project path (.claude/skills/ccw-help/index) > user path (~/.claude/skills/ccw-help/index)
|
|
11
|
+
* @param projectPath - The project path to check first
|
|
12
|
+
*/
|
|
13
|
+
function getIndexDir(projectPath) {
|
|
14
|
+
// Try project path first
|
|
15
|
+
if (projectPath) {
|
|
16
|
+
const projectIndexDir = join(projectPath, '.claude', 'skills', 'ccw-help', 'index');
|
|
17
|
+
if (existsSync(projectIndexDir)) {
|
|
18
|
+
return projectIndexDir;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// Fall back to user path
|
|
22
|
+
const userIndexDir = join(homedir(), '.claude', 'skills', 'ccw-help', 'index');
|
|
23
|
+
if (existsSync(userIndexDir)) {
|
|
24
|
+
return userIndexDir;
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
8
28
|
const cache = new Map();
|
|
9
29
|
const CACHE_TTL = 300000; // 5 minutes
|
|
10
30
|
/**
|
|
@@ -45,13 +65,14 @@ function invalidateCache(key) {
|
|
|
45
65
|
let watchersInitialized = false;
|
|
46
66
|
/**
|
|
47
67
|
* Initialize file watchers for JSON indexes
|
|
68
|
+
* @param projectPath - The project path to resolve index directory
|
|
48
69
|
*/
|
|
49
|
-
function initializeFileWatchers() {
|
|
70
|
+
function initializeFileWatchers(projectPath) {
|
|
50
71
|
if (watchersInitialized)
|
|
51
72
|
return;
|
|
52
|
-
const indexDir =
|
|
53
|
-
if (!
|
|
54
|
-
console.warn(`
|
|
73
|
+
const indexDir = getIndexDir(projectPath);
|
|
74
|
+
if (!indexDir) {
|
|
75
|
+
console.warn(`ccw-help index directory not found in project or user paths`);
|
|
55
76
|
return;
|
|
56
77
|
}
|
|
57
78
|
try {
|
|
@@ -125,12 +146,17 @@ function groupCommandsByCategory(commands) {
|
|
|
125
146
|
* @returns true if route was handled, false otherwise
|
|
126
147
|
*/
|
|
127
148
|
export async function handleHelpRoutes(ctx) {
|
|
128
|
-
const { pathname, url, req, res } = ctx;
|
|
149
|
+
const { pathname, url, req, res, initialPath } = ctx;
|
|
129
150
|
// Initialize file watchers on first request
|
|
130
|
-
initializeFileWatchers();
|
|
131
|
-
const indexDir =
|
|
151
|
+
initializeFileWatchers(initialPath);
|
|
152
|
+
const indexDir = getIndexDir(initialPath);
|
|
132
153
|
// API: Get all commands with optional search
|
|
133
154
|
if (pathname === '/api/help/commands') {
|
|
155
|
+
if (!indexDir) {
|
|
156
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
157
|
+
res.end(JSON.stringify({ error: 'ccw-help index directory not found' }));
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
134
160
|
const searchQuery = url.searchParams.get('q') || '';
|
|
135
161
|
const filePath = join(indexDir, 'all-commands.json');
|
|
136
162
|
let commands = getCachedData('all-commands', filePath);
|
|
@@ -155,6 +181,11 @@ export async function handleHelpRoutes(ctx) {
|
|
|
155
181
|
}
|
|
156
182
|
// API: Get workflow command relationships
|
|
157
183
|
if (pathname === '/api/help/workflows') {
|
|
184
|
+
if (!indexDir) {
|
|
185
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
186
|
+
res.end(JSON.stringify({ error: 'ccw-help index directory not found' }));
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
158
189
|
const filePath = join(indexDir, 'command-relationships.json');
|
|
159
190
|
const relationships = getCachedData('command-relationships', filePath);
|
|
160
191
|
if (!relationships) {
|
|
@@ -168,6 +199,11 @@ export async function handleHelpRoutes(ctx) {
|
|
|
168
199
|
}
|
|
169
200
|
// API: Get commands by category
|
|
170
201
|
if (pathname === '/api/help/commands/by-category') {
|
|
202
|
+
if (!indexDir) {
|
|
203
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
204
|
+
res.end(JSON.stringify({ error: 'ccw-help index directory not found' }));
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
171
207
|
const filePath = join(indexDir, 'by-category.json');
|
|
172
208
|
const byCategory = getCachedData('by-category', filePath);
|
|
173
209
|
if (!byCategory) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-routes.js","sourceRoot":"","sources":["../../../src/core/routes/help-routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"help-routes.js","sourceRoot":"","sources":["../../../src/core/routes/help-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"litellm-api-routes.d.ts","sourceRoot":"","sources":["../../../src/core/routes/litellm-api-routes.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAuF/C,wBAAgB,0BAA0B,SAGzC;AA8ED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"litellm-api-routes.d.ts","sourceRoot":"","sources":["../../../src/core/routes/litellm-api-routes.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAuF/C,wBAAgB,0BAA0B,SAGzC;AA8ED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CA8wChF"}
|
|
@@ -37,7 +37,6 @@ const __dirname = dirname(__filename);
|
|
|
37
37
|
const PACKAGE_ROOT = pathJoin(__dirname, '..', '..', '..', '..');
|
|
38
38
|
import { getAllProviders, getProvider, addProvider, updateProvider, deleteProvider, getAllEndpoints, getEndpoint, addEndpoint, updateEndpoint, deleteEndpoint, getDefaultEndpoint, setDefaultEndpoint, getGlobalCacheSettings, updateGlobalCacheSettings, loadLiteLLMApiConfig, saveLiteLLMYamlConfig, generateLiteLLMYamlConfig, getCodexLensEmbeddingRotation, updateCodexLensEmbeddingRotation, getEmbeddingProvidersForRotation, generateRotationEndpoints, syncCodexLensConfig, getEmbeddingPoolConfig, updateEmbeddingPoolConfig, discoverProvidersForModel, getModelPools, getModelPool, addModelPool, updateModelPool, deleteModelPool, getAvailableModelsForType, } from '../../config/litellm-api-config-manager.js';
|
|
39
39
|
import { getContextCacheStore } from '../../tools/context-cache-store.js';
|
|
40
|
-
import { getLiteLLMClient } from '../../tools/litellm-client.js';
|
|
41
40
|
import { testApiKeyConnection, getDefaultApiBase } from '../services/api-key-tester.js';
|
|
42
41
|
// Cache for ccw-litellm status check
|
|
43
42
|
let ccwLitellmStatusCache = {
|
|
@@ -246,11 +245,38 @@ export async function handleLiteLLMApiRoutes(ctx) {
|
|
|
246
245
|
res.end(JSON.stringify({ success: false, error: 'Provider is disabled' }));
|
|
247
246
|
return true;
|
|
248
247
|
}
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
|
|
248
|
+
// Get the API key to test (prefer first key from apiKeys array, fall back to default apiKey)
|
|
249
|
+
let apiKeyValue = null;
|
|
250
|
+
if (provider.apiKeys && provider.apiKeys.length > 0) {
|
|
251
|
+
apiKeyValue = provider.apiKeys[0].key;
|
|
252
|
+
}
|
|
253
|
+
else if (provider.apiKey) {
|
|
254
|
+
apiKeyValue = provider.apiKey;
|
|
255
|
+
}
|
|
256
|
+
if (!apiKeyValue) {
|
|
257
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
258
|
+
res.end(JSON.stringify({ success: false, error: 'No API key configured for this provider' }));
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
// Resolve environment variables in the API key
|
|
262
|
+
const { resolveEnvVar } = await import('../../config/litellm-api-config-manager.js');
|
|
263
|
+
const resolvedKey = resolveEnvVar(apiKeyValue);
|
|
264
|
+
if (!resolvedKey) {
|
|
265
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
266
|
+
res.end(JSON.stringify({ success: false, error: 'API key is empty or environment variable not set' }));
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
// Determine API base URL
|
|
270
|
+
const apiBase = provider.apiBase || getDefaultApiBase(provider.type);
|
|
271
|
+
// Test the API key connection
|
|
272
|
+
const testResult = await testApiKeyConnection(provider.type, apiBase, resolvedKey);
|
|
252
273
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
253
|
-
res.end(JSON.stringify({
|
|
274
|
+
res.end(JSON.stringify({
|
|
275
|
+
success: testResult.valid,
|
|
276
|
+
provider: provider.type,
|
|
277
|
+
latencyMs: testResult.latencyMs,
|
|
278
|
+
error: testResult.error,
|
|
279
|
+
}));
|
|
254
280
|
}
|
|
255
281
|
catch (err) {
|
|
256
282
|
res.writeHead(500, { 'Content-Type': 'application/json' });
|