skyloom 1.14.8 → 1.15.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/.github/workflows/ci.yml +2 -2
- package/.github/workflows/publish.yml +51 -4
- package/CONVERSION_PLAN.md +191 -191
- package/config/default.yaml +46 -43
- package/config/models.yaml +928 -155
- package/config/providers.yaml +109 -6
- package/dist/agents/snow.d.ts +2 -0
- package/dist/agents/snow.d.ts.map +1 -1
- package/dist/agents/snow.js +36 -5
- package/dist/agents/snow.js.map +1 -1
- package/dist/cli/loom_chat.d.ts.map +1 -1
- package/dist/cli/loom_chat.js +207 -1
- package/dist/cli/loom_chat.js.map +1 -1
- package/dist/cli/main.js +190 -40
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui.d.ts.map +1 -1
- package/dist/cli/tui.js +6 -31
- package/dist/cli/tui.js.map +1 -1
- package/dist/core/agent.d.ts +6 -4
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +61 -20
- package/dist/core/agent.js.map +1 -1
- package/dist/core/catalog.d.ts.map +1 -1
- package/dist/core/catalog.js +30 -9
- package/dist/core/catalog.js.map +1 -1
- package/dist/core/commands.d.ts +110 -0
- package/dist/core/commands.d.ts.map +1 -0
- package/dist/core/commands.js +633 -0
- package/dist/core/commands.js.map +1 -0
- package/dist/core/concurrency.d.ts +38 -0
- package/dist/core/concurrency.d.ts.map +1 -0
- package/dist/core/concurrency.js +65 -0
- package/dist/core/concurrency.js.map +1 -0
- package/dist/core/factory.js +16 -16
- package/dist/core/file_checkpoint.d.ts +9 -0
- package/dist/core/file_checkpoint.d.ts.map +1 -1
- package/dist/core/file_checkpoint.js +33 -1
- package/dist/core/file_checkpoint.js.map +1 -1
- package/dist/core/llm.d.ts.map +1 -1
- package/dist/core/llm.js +66 -13
- package/dist/core/llm.js.map +1 -1
- package/dist/core/memory.js +51 -51
- package/dist/core/schemas.d.ts +16 -0
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +32 -0
- package/dist/core/schemas.js.map +1 -1
- package/dist/core/security.d.ts.map +1 -1
- package/dist/core/security.js +27 -0
- package/dist/core/security.js.map +1 -1
- package/dist/core/skymd.js +14 -14
- package/dist/core/trace.d.ts +105 -0
- package/dist/core/trace.d.ts.map +1 -0
- package/dist/core/trace.js +213 -0
- package/dist/core/trace.js.map +1 -0
- package/dist/tools/builtin.d.ts +2 -6
- package/dist/tools/builtin.d.ts.map +1 -1
- package/dist/tools/builtin.js +18 -111
- package/dist/tools/builtin.js.map +1 -1
- package/dist/tools/extra.d.ts +13 -0
- package/dist/tools/extra.d.ts.map +1 -0
- package/dist/tools/extra.js +827 -0
- package/dist/tools/extra.js.map +1 -0
- package/dist/tools/guards.d.ts +12 -0
- package/dist/tools/guards.d.ts.map +1 -0
- package/dist/tools/guards.js +143 -0
- package/dist/tools/guards.js.map +1 -0
- package/dist/tools/model_tool.d.ts.map +1 -1
- package/dist/tools/model_tool.js +24 -4
- package/dist/tools/model_tool.js.map +1 -1
- package/dist/web/markdown.d.ts +32 -0
- package/dist/web/markdown.d.ts.map +1 -0
- package/dist/web/markdown.js +202 -0
- package/dist/web/markdown.js.map +1 -0
- package/dist/web/server.d.ts +4 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +14 -582
- package/dist/web/server.js.map +1 -1
- package/dist/web/ui.d.ts +31 -0
- package/dist/web/ui.d.ts.map +1 -0
- package/dist/web/ui.js +1009 -0
- package/dist/web/ui.js.map +1 -0
- package/docs/AESTHETIC_DESIGN.md +152 -152
- package/docs/OPTIMIZATION_PLAN.md +178 -178
- package/package.json +1 -1
- package/src/agents/snow.ts +38 -5
- package/src/cli/commands_md.ts +112 -112
- package/src/cli/input_macros.ts +83 -83
- package/src/cli/loom.ts +1041 -1041
- package/src/cli/loom_chat.ts +772 -603
- package/src/cli/main.ts +853 -723
- package/src/cli/tui.ts +264 -289
- package/src/core/agent/guard.ts +133 -133
- package/src/core/agent/task.ts +100 -100
- package/src/core/agent.ts +1630 -1590
- package/src/core/agent_helpers.ts +500 -500
- package/src/core/bus.ts +221 -221
- package/src/core/cache.ts +153 -153
- package/src/core/catalog.ts +199 -178
- package/src/core/circuit_breaker.ts +119 -119
- package/src/core/commands.ts +704 -0
- package/src/core/concurrency.ts +73 -0
- package/src/core/config.ts +365 -365
- package/src/core/constants.ts +95 -95
- package/src/core/factory.ts +656 -656
- package/src/core/file_checkpoint.ts +163 -136
- package/src/core/hooks.ts +126 -126
- package/src/core/llm.ts +972 -915
- package/src/core/logger.ts +143 -143
- package/src/core/mcp.ts +1001 -1001
- package/src/core/memory.ts +1201 -1201
- package/src/core/middleware.ts +350 -350
- package/src/core/model_config.ts +159 -159
- package/src/core/pipelines.ts +424 -424
- package/src/core/schemas.ts +319 -282
- package/src/core/security.ts +27 -0
- package/src/core/semantic.ts +211 -211
- package/src/core/skill.ts +384 -384
- package/src/core/skymd.ts +143 -143
- package/src/core/theme.ts +65 -65
- package/src/core/tool.ts +457 -457
- package/src/core/trace.ts +236 -0
- package/src/core/verify.ts +71 -71
- package/src/plugins/loader.ts +91 -91
- package/src/skills/loader.ts +75 -75
- package/src/tools/builtin.ts +571 -642
- package/src/tools/computer.ts +279 -279
- package/src/tools/extra.ts +662 -0
- package/src/tools/guards.ts +82 -0
- package/src/tools/model_tool.ts +93 -74
- package/src/tools/todo.ts +76 -76
- package/src/web/markdown.ts +193 -0
- package/src/web/server.ts +117 -693
- package/src/web/ui.ts +949 -0
- package/tests/agent.test.ts +211 -159
- package/tests/agent_helpers.test.ts +48 -48
- package/tests/catalog.test.ts +86 -86
- package/tests/checkpoint_commands.test.ts +124 -124
- package/tests/claude_compat.test.ts +110 -110
- package/tests/commands.test.ts +103 -0
- package/tests/concurrency.test.ts +102 -0
- package/tests/config.test.ts +41 -41
- package/tests/extra_tools.test.ts +212 -0
- package/tests/fence_plugin.test.ts +52 -52
- package/tests/guard.test.ts +75 -75
- package/tests/loom.test.ts +337 -337
- package/tests/memory.test.ts +170 -170
- package/tests/model_config.test.ts +109 -109
- package/tests/skymd.test.ts +146 -146
- package/tests/ssrf.test.ts +38 -38
- package/tests/structured_retry.test.ts +87 -0
- package/tests/task.test.ts +60 -60
- package/tests/todo_toolstats.test.ts +94 -94
- package/tests/trace.test.ts +128 -0
- package/tests/tui.test.ts +67 -67
- package/tests/web.test.ts +169 -0
- package/tsconfig.json +38 -38
|
@@ -0,0 +1,633 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 天空织机 · 命令注册中心 — Centralized Slash Command Registry
|
|
4
|
+
*
|
|
5
|
+
* Inspired by opencode's command architecture:
|
|
6
|
+
* - Each command has a name, aliases, description, category, and hints
|
|
7
|
+
* - Commands are organized by category for better UX
|
|
8
|
+
* - The registry provides list(), get(), and search() methods
|
|
9
|
+
* - Supports argument hints auto-detection from templates
|
|
10
|
+
*
|
|
11
|
+
* This registry is the single source of truth for the slash-command surface:
|
|
12
|
+
* the TUI palette and tab-completer derive their list from `slashItems()`, so
|
|
13
|
+
* adding a command here makes it show up everywhere — no parallel hand-kept
|
|
14
|
+
* arrays to drift out of sync.
|
|
15
|
+
*
|
|
16
|
+
* Two command types:
|
|
17
|
+
* 1. TUI commands — execute UI actions directly (undo, compact, etc.)
|
|
18
|
+
* 2. Prompt commands — expand to LLM prompt templates (init, review, etc.)
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.registry = exports.CommandRegistry = exports.BUILTIN_COMMANDS = void 0;
|
|
22
|
+
/**
|
|
23
|
+
* All built-in slash commands for Skyloom.
|
|
24
|
+
* Organized by category.
|
|
25
|
+
*/
|
|
26
|
+
exports.BUILTIN_COMMANDS = [
|
|
27
|
+
// ── Session ─
|
|
28
|
+
{
|
|
29
|
+
name: 'new',
|
|
30
|
+
aliases: [],
|
|
31
|
+
description: 'Start a new session',
|
|
32
|
+
label: '开始新会话',
|
|
33
|
+
category: 'session',
|
|
34
|
+
hints: [],
|
|
35
|
+
takesArgs: false,
|
|
36
|
+
source: 'builtin',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'sessions',
|
|
40
|
+
aliases: [],
|
|
41
|
+
description: 'List and switch sessions',
|
|
42
|
+
label: '会话列表',
|
|
43
|
+
category: 'session',
|
|
44
|
+
hints: ['<index|id>'],
|
|
45
|
+
takesArgs: true,
|
|
46
|
+
source: 'builtin',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'resume',
|
|
50
|
+
aliases: [],
|
|
51
|
+
description: 'Resume a previous session',
|
|
52
|
+
label: '恢复会话(序号/id)',
|
|
53
|
+
category: 'session',
|
|
54
|
+
hints: ['<index|id>'],
|
|
55
|
+
takesArgs: true,
|
|
56
|
+
argRequired: true,
|
|
57
|
+
source: 'builtin',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'export',
|
|
61
|
+
aliases: [],
|
|
62
|
+
description: 'Export conversation to Markdown',
|
|
63
|
+
label: '导出对话为 Markdown',
|
|
64
|
+
category: 'session',
|
|
65
|
+
hints: ['[filename]'],
|
|
66
|
+
takesArgs: true,
|
|
67
|
+
source: 'builtin',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'share',
|
|
71
|
+
aliases: [],
|
|
72
|
+
description: 'Share current session',
|
|
73
|
+
label: '分享当前会话',
|
|
74
|
+
category: 'session',
|
|
75
|
+
hints: [],
|
|
76
|
+
takesArgs: false,
|
|
77
|
+
hidden: true,
|
|
78
|
+
source: 'builtin',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'unshare',
|
|
82
|
+
aliases: [],
|
|
83
|
+
description: 'Unshare current session',
|
|
84
|
+
label: '取消分享',
|
|
85
|
+
category: 'session',
|
|
86
|
+
hints: [],
|
|
87
|
+
takesArgs: false,
|
|
88
|
+
hidden: true,
|
|
89
|
+
source: 'builtin',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'move',
|
|
93
|
+
aliases: [],
|
|
94
|
+
description: 'Move session to another project directory',
|
|
95
|
+
label: '移动会话到项目目录',
|
|
96
|
+
category: 'session',
|
|
97
|
+
hints: ['<path>'],
|
|
98
|
+
takesArgs: true,
|
|
99
|
+
source: 'builtin',
|
|
100
|
+
},
|
|
101
|
+
// ── Agent ──
|
|
102
|
+
{
|
|
103
|
+
name: 'fog',
|
|
104
|
+
aliases: [],
|
|
105
|
+
description: 'Fog — research & insight',
|
|
106
|
+
label: '≋ 雾 · 探索洞察',
|
|
107
|
+
category: 'agent',
|
|
108
|
+
hints: [],
|
|
109
|
+
takesArgs: false,
|
|
110
|
+
source: 'builtin',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'rain',
|
|
114
|
+
aliases: [],
|
|
115
|
+
description: 'Rain — creation & codegen',
|
|
116
|
+
label: '⸽ 雨 · 创造产出',
|
|
117
|
+
category: 'agent',
|
|
118
|
+
hints: [],
|
|
119
|
+
takesArgs: false,
|
|
120
|
+
source: 'builtin',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'frost',
|
|
124
|
+
aliases: [],
|
|
125
|
+
description: 'Frost — review & quality',
|
|
126
|
+
label: '✱ 霜 · 精炼品质',
|
|
127
|
+
category: 'agent',
|
|
128
|
+
hints: [],
|
|
129
|
+
takesArgs: false,
|
|
130
|
+
source: 'builtin',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: 'snow',
|
|
134
|
+
aliases: [],
|
|
135
|
+
description: 'Snow — planning & architecture',
|
|
136
|
+
label: '❉ 雪 · 架构规划',
|
|
137
|
+
category: 'agent',
|
|
138
|
+
hints: [],
|
|
139
|
+
takesArgs: false,
|
|
140
|
+
source: 'builtin',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'dew',
|
|
144
|
+
aliases: [],
|
|
145
|
+
description: 'Dew — devops & reliability',
|
|
146
|
+
label: '∘ 露 · 可靠守护',
|
|
147
|
+
category: 'agent',
|
|
148
|
+
hints: [],
|
|
149
|
+
takesArgs: false,
|
|
150
|
+
source: 'builtin',
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
name: 'fair',
|
|
154
|
+
aliases: [],
|
|
155
|
+
description: 'Fair — companion & warmth',
|
|
156
|
+
label: '☼ 晴 · 情感陪伴',
|
|
157
|
+
category: 'agent',
|
|
158
|
+
hints: [],
|
|
159
|
+
takesArgs: false,
|
|
160
|
+
source: 'builtin',
|
|
161
|
+
},
|
|
162
|
+
// ── Model ──
|
|
163
|
+
{
|
|
164
|
+
name: 'model',
|
|
165
|
+
aliases: [],
|
|
166
|
+
description: 'Model info & switch',
|
|
167
|
+
label: '查看/切换模型(独立/统一)',
|
|
168
|
+
category: 'model',
|
|
169
|
+
hints: ['<id>', 'unified <id>', 'reset', 'key <key>'],
|
|
170
|
+
takesArgs: true,
|
|
171
|
+
source: 'builtin',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
name: 'models',
|
|
175
|
+
aliases: [],
|
|
176
|
+
description: 'Browse all available models',
|
|
177
|
+
label: '浏览全部可用模型',
|
|
178
|
+
category: 'model',
|
|
179
|
+
hints: ['[provider]'],
|
|
180
|
+
takesArgs: true,
|
|
181
|
+
source: 'builtin',
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: 'connect',
|
|
185
|
+
aliases: [],
|
|
186
|
+
description: 'Add or configure a provider',
|
|
187
|
+
label: '添加/配置提供商',
|
|
188
|
+
category: 'model',
|
|
189
|
+
hints: ['<provider>'],
|
|
190
|
+
takesArgs: true,
|
|
191
|
+
source: 'builtin',
|
|
192
|
+
},
|
|
193
|
+
// ── Memory ──
|
|
194
|
+
{
|
|
195
|
+
name: 'memory',
|
|
196
|
+
aliases: [],
|
|
197
|
+
description: 'Memory stats',
|
|
198
|
+
label: '记忆状态',
|
|
199
|
+
category: 'memory',
|
|
200
|
+
hints: ['clear'],
|
|
201
|
+
takesArgs: true,
|
|
202
|
+
source: 'builtin',
|
|
203
|
+
},
|
|
204
|
+
// ── Context & Diagnostics ──
|
|
205
|
+
{
|
|
206
|
+
name: 'status',
|
|
207
|
+
aliases: [],
|
|
208
|
+
description: 'Agent overview',
|
|
209
|
+
label: '状态总览',
|
|
210
|
+
category: 'context',
|
|
211
|
+
hints: [],
|
|
212
|
+
takesArgs: false,
|
|
213
|
+
source: 'builtin',
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: 'cost',
|
|
217
|
+
aliases: [],
|
|
218
|
+
description: 'Usage & cost',
|
|
219
|
+
label: '费用统计',
|
|
220
|
+
category: 'context',
|
|
221
|
+
hints: ['reset'],
|
|
222
|
+
takesArgs: true,
|
|
223
|
+
source: 'builtin',
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
name: 'context',
|
|
227
|
+
aliases: [],
|
|
228
|
+
description: 'Token usage breakdown',
|
|
229
|
+
label: '上下文占用明细',
|
|
230
|
+
category: 'context',
|
|
231
|
+
hints: [],
|
|
232
|
+
takesArgs: false,
|
|
233
|
+
source: 'builtin',
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
name: 'tools',
|
|
237
|
+
aliases: [],
|
|
238
|
+
description: 'Tool call statistics',
|
|
239
|
+
label: '工具调用统计',
|
|
240
|
+
category: 'context',
|
|
241
|
+
hints: [],
|
|
242
|
+
takesArgs: false,
|
|
243
|
+
source: 'builtin',
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: 'trace',
|
|
247
|
+
aliases: [],
|
|
248
|
+
description: 'Run trace of the last turn (span tree)',
|
|
249
|
+
label: '本轮运行追踪(span 树)',
|
|
250
|
+
category: 'context',
|
|
251
|
+
hints: [],
|
|
252
|
+
takesArgs: false,
|
|
253
|
+
source: 'builtin',
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
name: 'workspace',
|
|
257
|
+
aliases: [],
|
|
258
|
+
description: 'Workspace info',
|
|
259
|
+
label: '工作空间',
|
|
260
|
+
category: 'context',
|
|
261
|
+
hints: [],
|
|
262
|
+
takesArgs: false,
|
|
263
|
+
source: 'builtin',
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: 'version',
|
|
267
|
+
aliases: [],
|
|
268
|
+
description: 'Version info',
|
|
269
|
+
label: '版本信息',
|
|
270
|
+
category: 'context',
|
|
271
|
+
hints: [],
|
|
272
|
+
takesArgs: false,
|
|
273
|
+
source: 'builtin',
|
|
274
|
+
},
|
|
275
|
+
// ─ Workflow ──
|
|
276
|
+
{
|
|
277
|
+
name: 'compact',
|
|
278
|
+
aliases: ['summarize'],
|
|
279
|
+
description: 'Compress/summarize context',
|
|
280
|
+
label: '压缩上下文',
|
|
281
|
+
category: 'workflow',
|
|
282
|
+
hints: [],
|
|
283
|
+
takesArgs: false,
|
|
284
|
+
source: 'builtin',
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
name: 'retry',
|
|
288
|
+
aliases: [],
|
|
289
|
+
description: 'Resend last message',
|
|
290
|
+
label: '重发上一条消息',
|
|
291
|
+
category: 'workflow',
|
|
292
|
+
hints: [],
|
|
293
|
+
takesArgs: false,
|
|
294
|
+
hidden: true,
|
|
295
|
+
source: 'builtin',
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
name: 'task',
|
|
299
|
+
aliases: [],
|
|
300
|
+
description: 'Multi-agent orchestration',
|
|
301
|
+
label: '多 Agent 编排',
|
|
302
|
+
category: 'workflow',
|
|
303
|
+
hints: ['<goal>'],
|
|
304
|
+
takesArgs: true,
|
|
305
|
+
argRequired: true,
|
|
306
|
+
source: 'builtin',
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
name: 'init',
|
|
310
|
+
aliases: [],
|
|
311
|
+
description: 'Generate SKY.md project memory',
|
|
312
|
+
label: '扫描项目生成 SKY.md',
|
|
313
|
+
category: 'workflow',
|
|
314
|
+
hints: [],
|
|
315
|
+
takesArgs: false,
|
|
316
|
+
source: 'builtin',
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: 'review',
|
|
320
|
+
aliases: [],
|
|
321
|
+
description: 'Code review of changes',
|
|
322
|
+
label: '审查代码改动',
|
|
323
|
+
category: 'workflow',
|
|
324
|
+
hints: ['[commit|branch|pr]'],
|
|
325
|
+
takesArgs: true,
|
|
326
|
+
subtask: true,
|
|
327
|
+
source: 'builtin',
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
name: 'verify',
|
|
331
|
+
aliases: [],
|
|
332
|
+
description: 'Run verification commands',
|
|
333
|
+
label: '运行项目验证命令',
|
|
334
|
+
category: 'workflow',
|
|
335
|
+
hints: [],
|
|
336
|
+
takesArgs: false,
|
|
337
|
+
source: 'builtin',
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
name: 'plan',
|
|
341
|
+
aliases: [],
|
|
342
|
+
description: 'Enter plan mode (read-only tools)',
|
|
343
|
+
label: '切换计划模式(只读出方案)',
|
|
344
|
+
category: 'workflow',
|
|
345
|
+
hints: [],
|
|
346
|
+
takesArgs: false,
|
|
347
|
+
source: 'builtin',
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
name: 'auto',
|
|
351
|
+
aliases: [],
|
|
352
|
+
description: 'Enter auto mode (no approval)',
|
|
353
|
+
label: '自动模式(免审批)',
|
|
354
|
+
category: 'workflow',
|
|
355
|
+
hints: [],
|
|
356
|
+
takesArgs: false,
|
|
357
|
+
source: 'builtin',
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
name: 'default',
|
|
361
|
+
aliases: [],
|
|
362
|
+
description: 'Return to default mode',
|
|
363
|
+
label: '返回默认模式',
|
|
364
|
+
category: 'workflow',
|
|
365
|
+
hints: [],
|
|
366
|
+
takesArgs: false,
|
|
367
|
+
source: 'builtin',
|
|
368
|
+
},
|
|
369
|
+
// ── File & Checkpoint ──
|
|
370
|
+
{
|
|
371
|
+
name: 'rewind',
|
|
372
|
+
aliases: ['undo'],
|
|
373
|
+
description: 'Undo last turn (revert file changes)',
|
|
374
|
+
label: '回退本轮文件改动',
|
|
375
|
+
category: 'file',
|
|
376
|
+
hints: ['[n]'],
|
|
377
|
+
takesArgs: true,
|
|
378
|
+
source: 'builtin',
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
name: 'redo',
|
|
382
|
+
aliases: [],
|
|
383
|
+
description: 'Redo a previously undone turn',
|
|
384
|
+
label: '重做已撤销的回合',
|
|
385
|
+
category: 'file',
|
|
386
|
+
hints: [],
|
|
387
|
+
takesArgs: false,
|
|
388
|
+
source: 'builtin',
|
|
389
|
+
},
|
|
390
|
+
// ── Config ──
|
|
391
|
+
{
|
|
392
|
+
name: 'setup',
|
|
393
|
+
aliases: [],
|
|
394
|
+
description: 'Setup wizard (provider, key, model)',
|
|
395
|
+
label: '配置向导',
|
|
396
|
+
category: 'config',
|
|
397
|
+
hints: [],
|
|
398
|
+
takesArgs: false,
|
|
399
|
+
source: 'builtin',
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
name: 'apikey',
|
|
403
|
+
aliases: [],
|
|
404
|
+
description: 'Manage API keys',
|
|
405
|
+
label: '管理 API 密钥',
|
|
406
|
+
category: 'config',
|
|
407
|
+
hints: ['set <provider> <key>'],
|
|
408
|
+
takesArgs: true,
|
|
409
|
+
source: 'builtin',
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
name: 'mcp',
|
|
413
|
+
aliases: [],
|
|
414
|
+
description: 'MCP server status',
|
|
415
|
+
label: 'MCP 服务器',
|
|
416
|
+
category: 'config',
|
|
417
|
+
hints: [],
|
|
418
|
+
takesArgs: false,
|
|
419
|
+
source: 'builtin',
|
|
420
|
+
},
|
|
421
|
+
// ── UI ──
|
|
422
|
+
{
|
|
423
|
+
name: 'clear',
|
|
424
|
+
aliases: [],
|
|
425
|
+
description: 'Clear the screen',
|
|
426
|
+
label: '清屏',
|
|
427
|
+
category: 'ui',
|
|
428
|
+
hints: [],
|
|
429
|
+
takesArgs: false,
|
|
430
|
+
source: 'builtin',
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
name: 'help',
|
|
434
|
+
aliases: [],
|
|
435
|
+
description: 'Show all commands',
|
|
436
|
+
label: '查看所有命令',
|
|
437
|
+
category: 'ui',
|
|
438
|
+
hints: [],
|
|
439
|
+
takesArgs: false,
|
|
440
|
+
source: 'builtin',
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
name: 'thinking',
|
|
444
|
+
aliases: [],
|
|
445
|
+
description: 'Toggle reasoning block visibility',
|
|
446
|
+
label: '切换思考过程显示',
|
|
447
|
+
category: 'ui',
|
|
448
|
+
hints: [],
|
|
449
|
+
takesArgs: false,
|
|
450
|
+
source: 'builtin',
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
name: 'details',
|
|
454
|
+
aliases: [],
|
|
455
|
+
description: 'Toggle tool execution details',
|
|
456
|
+
label: '切换工具执行详情',
|
|
457
|
+
category: 'ui',
|
|
458
|
+
hints: [],
|
|
459
|
+
takesArgs: false,
|
|
460
|
+
source: 'builtin',
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
name: 'skills',
|
|
464
|
+
aliases: [],
|
|
465
|
+
description: 'Browse available skills',
|
|
466
|
+
label: '浏览可用技能',
|
|
467
|
+
category: 'ui',
|
|
468
|
+
hints: [],
|
|
469
|
+
takesArgs: false,
|
|
470
|
+
source: 'builtin',
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
name: 'warp',
|
|
474
|
+
aliases: [],
|
|
475
|
+
description: 'Change workspace for this session',
|
|
476
|
+
label: '切换本会话工作区',
|
|
477
|
+
category: 'ui',
|
|
478
|
+
hints: ['<path>'],
|
|
479
|
+
takesArgs: true,
|
|
480
|
+
source: 'builtin',
|
|
481
|
+
},
|
|
482
|
+
// ─ System ──
|
|
483
|
+
{
|
|
484
|
+
name: 'quit',
|
|
485
|
+
aliases: ['exit'],
|
|
486
|
+
description: 'Exit chat',
|
|
487
|
+
label: '退出',
|
|
488
|
+
category: 'system',
|
|
489
|
+
hints: [],
|
|
490
|
+
takesArgs: false,
|
|
491
|
+
source: 'builtin',
|
|
492
|
+
},
|
|
493
|
+
];
|
|
494
|
+
/**
|
|
495
|
+
* Command registry — provides lookup, listing, and search.
|
|
496
|
+
*/
|
|
497
|
+
class CommandRegistry {
|
|
498
|
+
constructor() {
|
|
499
|
+
this.commands = new Map();
|
|
500
|
+
this.handlers = new Map();
|
|
501
|
+
// Register all built-in commands
|
|
502
|
+
for (const cmd of exports.BUILTIN_COMMANDS) {
|
|
503
|
+
this.register(cmd);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
/** Register a command. */
|
|
507
|
+
register(info, handler) {
|
|
508
|
+
this.commands.set(info.name, info);
|
|
509
|
+
for (const alias of info.aliases) {
|
|
510
|
+
this.commands.set(alias, { ...info, name: alias });
|
|
511
|
+
}
|
|
512
|
+
if (handler) {
|
|
513
|
+
this.handlers.set(info.name, handler);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
/** Get command info by name or alias. */
|
|
517
|
+
get(name) {
|
|
518
|
+
return this.commands.get(name);
|
|
519
|
+
}
|
|
520
|
+
/** Get handler for a command. */
|
|
521
|
+
getHandler(name) {
|
|
522
|
+
const info = this.commands.get(name);
|
|
523
|
+
if (!info)
|
|
524
|
+
return undefined;
|
|
525
|
+
return this.handlers.get(info.name);
|
|
526
|
+
}
|
|
527
|
+
/** Register a handler for an existing command. */
|
|
528
|
+
setHandler(name, handler) {
|
|
529
|
+
this.handlers.set(name, handler);
|
|
530
|
+
}
|
|
531
|
+
/** List all commands, optionally filtered by category. */
|
|
532
|
+
list(category) {
|
|
533
|
+
const seen = new Set();
|
|
534
|
+
const result = [];
|
|
535
|
+
for (const cmd of exports.BUILTIN_COMMANDS) {
|
|
536
|
+
if (category && cmd.category !== category)
|
|
537
|
+
continue;
|
|
538
|
+
if (seen.has(cmd.name))
|
|
539
|
+
continue;
|
|
540
|
+
seen.add(cmd.name);
|
|
541
|
+
result.push(cmd);
|
|
542
|
+
}
|
|
543
|
+
return result;
|
|
544
|
+
}
|
|
545
|
+
/** List commands grouped by category. */
|
|
546
|
+
listByCategory() {
|
|
547
|
+
const groups = new Map();
|
|
548
|
+
for (const cmd of this.list()) {
|
|
549
|
+
const existing = groups.get(cmd.category) || [];
|
|
550
|
+
existing.push(cmd);
|
|
551
|
+
groups.set(cmd.category, existing);
|
|
552
|
+
}
|
|
553
|
+
return groups;
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Build the `[token, label]` pairs the TUI palette + tab-completer consume.
|
|
557
|
+
*
|
|
558
|
+
* - Hidden (catalogued-but-unwired) commands are omitted so the palette only
|
|
559
|
+
* advertises commands that actually run.
|
|
560
|
+
* - Argument-required commands get a trailing space in the token; the loom
|
|
561
|
+
* palette keys off that to fill the input and wait for the argument instead
|
|
562
|
+
* of executing on Enter.
|
|
563
|
+
* - `lang: 'zh'` uses the localized label (the default, product language);
|
|
564
|
+
* `'en'` uses the English description.
|
|
565
|
+
*/
|
|
566
|
+
slashItems(lang = 'zh') {
|
|
567
|
+
// Lead with the agent switches — the most common action — then the rest in
|
|
568
|
+
// catalog order. This keeps the agents prominent at the top of the palette.
|
|
569
|
+
const visible = this.list().filter(c => !c.hidden);
|
|
570
|
+
const ordered = [
|
|
571
|
+
...visible.filter(c => c.category === 'agent'),
|
|
572
|
+
...visible.filter(c => c.category !== 'agent'),
|
|
573
|
+
];
|
|
574
|
+
return ordered.map((cmd) => {
|
|
575
|
+
const token = '/' + cmd.name + (cmd.argRequired ? ' ' : '');
|
|
576
|
+
const label = lang === 'zh' ? (cmd.label ?? cmd.description) : cmd.description;
|
|
577
|
+
return [token, label];
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
/** Search commands by query (fuzzy match on name + description + label). */
|
|
581
|
+
search(query) {
|
|
582
|
+
if (!query)
|
|
583
|
+
return this.list();
|
|
584
|
+
const q = query.toLowerCase();
|
|
585
|
+
const seen = new Set();
|
|
586
|
+
const result = [];
|
|
587
|
+
for (const cmd of exports.BUILTIN_COMMANDS) {
|
|
588
|
+
if (seen.has(cmd.name))
|
|
589
|
+
continue;
|
|
590
|
+
const nameMatch = cmd.name.toLowerCase().includes(q);
|
|
591
|
+
const descMatch = cmd.description.toLowerCase().includes(q);
|
|
592
|
+
const labelMatch = (cmd.label || '').toLowerCase().includes(q);
|
|
593
|
+
const aliasMatch = cmd.aliases.some(a => a.toLowerCase().includes(q));
|
|
594
|
+
if (nameMatch || descMatch || labelMatch || aliasMatch) {
|
|
595
|
+
seen.add(cmd.name);
|
|
596
|
+
result.push(cmd);
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
return result;
|
|
600
|
+
}
|
|
601
|
+
/** Get all command names (for autocomplete). */
|
|
602
|
+
names() {
|
|
603
|
+
const seen = new Set();
|
|
604
|
+
const result = [];
|
|
605
|
+
for (const cmd of exports.BUILTIN_COMMANDS) {
|
|
606
|
+
if (seen.has(cmd.name))
|
|
607
|
+
continue;
|
|
608
|
+
seen.add(cmd.name);
|
|
609
|
+
result.push(cmd.name);
|
|
610
|
+
}
|
|
611
|
+
return result;
|
|
612
|
+
}
|
|
613
|
+
/** Get category display label. */
|
|
614
|
+
static categoryLabel(cat) {
|
|
615
|
+
const labels = {
|
|
616
|
+
session: '会话管理',
|
|
617
|
+
agent: 'Agent 切换',
|
|
618
|
+
model: '模型配置',
|
|
619
|
+
memory: '记忆操作',
|
|
620
|
+
context: '上下文与诊断',
|
|
621
|
+
workflow: '工作流',
|
|
622
|
+
file: '文件与检查点',
|
|
623
|
+
config: '配置',
|
|
624
|
+
ui: '界面',
|
|
625
|
+
system: '系统',
|
|
626
|
+
};
|
|
627
|
+
return labels[cat] || cat;
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
exports.CommandRegistry = CommandRegistry;
|
|
631
|
+
/** Singleton registry instance. */
|
|
632
|
+
exports.registry = new CommandRegistry();
|
|
633
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/core/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded-concurrency task runner with cooperative cancellation.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists: the agent tool-execution loop previously fired every tool
|
|
5
|
+
* call in a round at once via `Promise.all`. With Skyloom's now-large tool
|
|
6
|
+
* surface, a single LLM round can request many parallel side-effecting tools
|
|
7
|
+
* (http_request, download_file, port_check, file writes) — unbounded, that can
|
|
8
|
+
* exhaust sockets, file descriptors, or CPU on the host. This caps how many run
|
|
9
|
+
* at once while preserving result order.
|
|
10
|
+
*
|
|
11
|
+
* Cancellation is *cooperative*: JavaScript can't preempt a running promise, so
|
|
12
|
+
* when the AbortSignal fires we stop *starting* queued tasks. In-flight tasks
|
|
13
|
+
* are left to settle. The worker is told, per item, whether the signal had
|
|
14
|
+
* already aborted when its turn came up, so the caller can short-circuit a
|
|
15
|
+
* not-yet-started unit to a "cancelled" result instead of executing it.
|
|
16
|
+
*
|
|
17
|
+
* Pure and dependency-free → fully unit-testable.
|
|
18
|
+
*/
|
|
19
|
+
export interface BoundedOptions {
|
|
20
|
+
/** Maximum tasks running at once. Values < 1 are clamped to 1. */
|
|
21
|
+
concurrency: number;
|
|
22
|
+
/** When aborted, queued (not-yet-started) tasks receive `aborted: true`. */
|
|
23
|
+
signal?: AbortSignal;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Map `items` through `worker` with at most `concurrency` running concurrently,
|
|
27
|
+
* preserving input order in the returned array.
|
|
28
|
+
*
|
|
29
|
+
* `worker(item, index, aborted)` — `aborted` is the signal's state checked
|
|
30
|
+
* immediately before this item is dispatched. A worker that respects it can
|
|
31
|
+
* return a cancelled placeholder for queued items once the user interrupts.
|
|
32
|
+
*/
|
|
33
|
+
export declare function mapBounded<T, R>(items: T[], worker: (item: T, index: number, aborted: boolean) => Promise<R>, opts: BoundedOptions): Promise<R[]>;
|
|
34
|
+
/** Default parallel-tool cap when none is configured. Conservative but not serial. */
|
|
35
|
+
export declare const DEFAULT_TOOL_CONCURRENCY = 4;
|
|
36
|
+
/** Resolve a sane concurrency limit from a possibly-undefined config value. */
|
|
37
|
+
export declare function resolveConcurrency(raw: unknown, fallback?: number): number;
|
|
38
|
+
//# sourceMappingURL=concurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/core/concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,CAAC,EACnC,KAAK,EAAE,CAAC,EAAE,EACV,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EAChE,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,CAAC,EAAE,CAAC,CAuBd;AAED,sFAAsF;AACtF,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,SAA2B,GAAG,MAAM,CAK5F"}
|