dsh-super-code 0.1.2 → 0.1.4
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 +34 -78
- package/client/index.js +132 -32
- package/cordis.patch.yml +63 -16
- package/lib/dsh/preset-installation.d.ts +48 -4
- package/lib/dsh/preset-installation.d.ts.map +1 -1
- package/lib/dsh/preset-installation.js +176 -9
- package/lib/dsh/preset-installation.js.map +1 -1
- package/lib/dsh/preset-metadata.d.ts +15 -0
- package/lib/dsh/preset-metadata.d.ts.map +1 -0
- package/lib/dsh/preset-metadata.js +83 -0
- package/lib/dsh/preset-metadata.js.map +1 -0
- package/package.json +11 -11
package/README.md
CHANGED
|
@@ -1,110 +1,66 @@
|
|
|
1
1
|
# dsh-super-code
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
一个更快、更节省、更聪明的 DeepSeek Harness 编码插件。它会根据任务选择调研、设计、开发、验证和优化方法:简单任务直接完成,复杂任务按需组织工作。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
A faster, more efficient, smarter coding plugin for DeepSeek Harness. It selects research, design, development, verification, and optimization methods to fit the task: straightforward work stays simple, while complex work is coordinated as needed.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
在选定的 SWE-bench Pro hard-100 评测中,`0.1.2` 相比 DSH minimal 平均回答耗时减少约 38%,每题输入 token 减少约 14%,正确率提高 8 个百分点。[评测方法与完整结果](docs/EvaluationResults.md)
|
|
8
8
|
|
|
9
|
-
On the selected SWE-bench Pro hard-100
|
|
9
|
+
On the selected SWE-bench Pro hard-100 tasks, `0.1.2` reduced average response time by about 38% and input tokens per task by about 14% versus DSH minimal, while accuracy increased by 8 percentage points. [Methods and full results](docs/EvaluationResults.md)
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 开始使用 · Get Started
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
需要 DeepSeek Harness 0.1.5-alpha.1 或更高版本。三步就能开始:
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
You'll need DeepSeek Harness 0.1.5-alpha.1 or later. To get started:
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
1. **安装插件:** 在 `dsh-market` 搜索 `dsh-super-code`,或运行下面的命令。
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
**Install the plugin:** Search for `dsh-super-code` in `dsh-market`, or run:
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
```bash
|
|
22
|
+
dsh plugin --profile web add dsh-super-code
|
|
23
|
+
```
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
2. **选中预设:** 打开 Harness“设置”→“Agent 预设”,选择 `super-code`。
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
**Select the preset:** In Harness, open “Settings” → “Agent Presets” and select `super-code`.
|
|
26
28
|
|
|
27
|
-
|
|
28
|
-
dsh plugin --profile web add dsh-super-code
|
|
29
|
-
```
|
|
29
|
+
3. **开始对话:** 新建会话,直接描述你要完成的编码任务。
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
**Start a conversation:** Open a new conversation and describe the coding task you want done.
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
没看到 `super-code`?打开“设置”→“插件”→“插件配置”→ **Super Code** 查看状态并手动安装。标识符已被占用时可换一个,不会覆盖已有预设。[排查与预设管理](docs/UsageGuide.md)
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
If the preset is missing, the plugin attempts a one-time user-preset installation on first load. Open **Super Code** under “Settings” → “Plugins” → “Plugin configuration” to check its status or install manually. Choose another name if it is taken. Existing presets are preserved; user copies are not automatically updated or reinstalled after deletion.
|
|
38
|
-
|
|
39
|
-
[版本记录 · Changelog](docs/CHANGELOG.md)
|
|
35
|
+
Can't find `super-code`? Open “Settings” → “Plugins” → “Plugin configuration” → **Super Code** to check its status and install it manually. If the identifier is taken, choose another; existing presets are left untouched. [Troubleshooting and preset management](docs/UsageGuide.md)
|
|
40
36
|
|
|
41
37
|
[](docs/images/preset-settings.png)
|
|
42
38
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
The current version has no three-pool model configuration. Configure a provider under Harness “Settings” → “Models”, then select the model and reasoning effort below the message input. Existing working settings can be reused. The plugin follows the current session model, and child Agents inherit their parent's selection unless explicitly overridden.
|
|
46
|
-
|
|
47
|
-
## 效果 · Results
|
|
48
|
-
|
|
49
|
-
SWE-bench Pro hard-100,使用 `deepseek-v4.1-flash`、reasoning `high`、原生 DSH Web RPC 和官方评分器。
|
|
50
|
-
|
|
51
|
-
SWE-bench Pro hard-100 with `deepseek-v4.1-flash`, reasoning `high`, native DSH Web RPC, and the official grader.
|
|
52
|
-
|
|
53
|
-
> 提示:
|
|
54
|
-
> SWE-bench Pro 是面向真实软件工程任务的高难度评测集。每道题都来自真实开源仓库,通常需要理解现有代码、修改多个文件、运行测试并根据失败结果继续修复,评测结果以官方测试是否通过为准。这里选取其中难度最高的 100 道题,重点观察长任务中的正确率、调用次数、token 和耗时。
|
|
55
|
-
>
|
|
56
|
-
> SWE-bench Pro is a challenging benchmark for real-world software engineering tasks. Each task comes from a real open-source repository and typically requires understanding existing code, editing multiple files, running tests, and iterating on failures. The official test result is the pass criterion. This evaluation uses the 100 hardest selected tasks to measure accuracy, model calls, token usage, and elapsed time on long-running tasks.
|
|
57
|
-
>
|
|
58
|
-
> 经过预评测,`DSH minimal` 预设和 `deepseek-v4.1-flash` 的 `high` 思考强度取得了最高正确率,因此将它们作为统一比较基准。
|
|
59
|
-
>
|
|
60
|
-
> In preliminary runs, the `DSH minimal` preset with `deepseek-v4.1-flash` at `high` reasoning achieved the highest accuracy, so it is used as the common baseline.
|
|
61
|
-
|
|
62
|
-
这批结果来自 `0.0.9` 候选;`0.1.0` 沿用该历史基准,未重新执行完整 100 题评测。
|
|
39
|
+
模型、推理等级、权限和工具沿用 Harness 的设置;子 Agent 默认继承父 Agent 的模型选择,不用再配置一套。
|
|
63
40
|
|
|
64
|
-
|
|
41
|
+
Models, reasoning effort, permissions, and tools come from Harness. Child Agents inherit the parent Agent's model choice by default, so there's no second set of settings to manage.
|
|
65
42
|
|
|
66
|
-
|
|
67
|
-
|---|---:|---:|---:|
|
|
68
|
-
| 有效评分 / Valid scores | 100/100 | 100/100 | **持平 / 0%** |
|
|
69
|
-
| 通过题数 / Passed | 41 | 46 | **+12.2%** |
|
|
70
|
-
| 正确率 / Accuracy | 41% | 46% | **+5 个百分点 / +5 pp** |
|
|
71
|
-
| 平均模型调用/题 / Model calls per task | 124.85 | 92.78 | **-25.7%** |
|
|
72
|
-
| 平均工具调用/题 / Tool calls per task | 126.54 | 115.41 | **-8.9%** |
|
|
73
|
-
| 每题平均总输入 token / Average total input tokens per task | 11,477,170 | 9,525,316 | **-17.0%** |
|
|
74
|
-
| 每题平均总输出 token / Average total output tokens per task | 100,877 | 97,901 | **-3.0%** |
|
|
75
|
-
| 缓存命中率 / Cache hit rate | 99.360% | 99.329% | **-0.031%** |
|
|
76
|
-
| 平均测试时长 / Average test time | 25.49 分钟 / min | 16.27 分钟 / min | **-36.2%** |
|
|
77
|
-
|
|
78
|
-
> 因为输入和输出 token 均有减少,因此缓存命中率略微下降是可以接受的,属于正常波动范围。
|
|
79
|
-
>
|
|
80
|
-
> Since both input and output token usage decrease, the slight drop in cache hit rate is acceptable and within normal variation.
|
|
81
|
-
|
|
82
|
-
> Token 指标按每道题的历史明细计算:先分别合计该题已记录模型调用的输入(含缓存)和输出 token,再对 100 道题取平均,包含多轮调用和上下文增长;未返回用量的请求不作估算,不代表完整账单费用。
|
|
83
|
-
>
|
|
84
|
-
> Token metrics are calculated from task histories: input (including cached tokens) and output tokens are summed separately across recorded model calls for each task, then averaged over 100 tasks. This includes multi-turn calls and context growth. Requests without reported usage are not estimated; these figures do not represent complete billing costs.
|
|
85
|
-
|
|
86
|
-
测试题号和每题明细见 [`eval/results/swebench-pro-final-100/`](eval/results/swebench-pro-final-100/),详细文档见 [`docs/`](docs/)。
|
|
87
|
-
|
|
88
|
-
Task IDs and per-task details are available in [`eval/results/swebench-pro-final-100/`](eval/results/swebench-pro-final-100); detailed documentation is in [`docs/`](docs/).
|
|
43
|
+
任务开始后,可以在右侧 Agent 执行树查看每个 Agent 的状态与用量。拖动空白处平移,滚轮或按钮缩放;点一个节点,就能在侧栏标签中查看详情。[界面说明](docs/UsageGuide.md)
|
|
89
44
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
安装后,在 DeepSeek Harness 的“设置”→“Agent 预设”中选择 `super-code`。创建任务后,插件会按任务复杂度组织调研、实现和验证;复杂任务可在右侧 Agent 执行树中查看进度,点击节点查看对应的执行内容和用量。
|
|
93
|
-
|
|
94
|
-
After installation, select `super-code` under “Settings” → “Agent Presets” in DeepSeek Harness. The plugin organizes research, implementation, and verification according to task complexity; for complex tasks, use the Agent execution tree on the right to inspect progress, execution details, and usage.
|
|
45
|
+
Once a task is running, the Agent tree on the right shows each Agent's status and usage. Drag empty space to pan, zoom with the wheel or buttons, and click a node to see its details in a sidebar tab. [Interface guide](docs/UsageGuide.md)
|
|
95
46
|
|
|
96
47
|
[](docs/images/agent-tree.png)
|
|
97
48
|
|
|
98
|
-
|
|
49
|
+
## 效果 · Results
|
|
99
50
|
|
|
100
|
-
|
|
51
|
+
这组成绩来自选定的 SWE-bench Pro hard-100,使用 `deepseek-v4.1-flash`、`high` 推理等级、原生 DSH Web RPC 和官方评分器。两组都完成了 100/100 题评分。
|
|
101
52
|
|
|
102
|
-
|
|
53
|
+
These results come from the selected SWE-bench Pro hard-100 tasks, using `deepseek-v4.1-flash`, `high` reasoning, native DSH Web RPC, and the official grader. Both runs received scores for all 100 tasks.
|
|
103
54
|
|
|
104
|
-
|
|
55
|
+
| 指标 / Metric | DSH minimal | super-code 0.1.2 | 变化 / Change |
|
|
56
|
+
|---|---:|---:|---:|
|
|
57
|
+
| 正确率 / Accuracy | 41% | **49%** | **+8 个百分点 / +8 pp** |
|
|
58
|
+
| 平均模型调用/题 / Model calls per task | 124.85 | 99.78 | -20.1% |
|
|
59
|
+
| 平均输入 token/题 / Input tokens per task | 11,477,170 | 9,840,383 | -14.3% |
|
|
60
|
+
| 平均回答耗时 / Response time | 25.69 分钟 / min | 16.01 分钟 / min | -37.7% |
|
|
105
61
|
|
|
106
|
-
|
|
62
|
+
两次运行使用不同的 Harness 提交,不能将全部差异归因于插件。完整指标、回退题目、统计口径和逐题证据见[评测文档](docs/EvaluationResults.md)。
|
|
107
63
|
|
|
108
|
-
|
|
64
|
+
The runs used different Harness commits, so not every difference can be attributed to the plugin. See the [evaluation details](docs/EvaluationResults.md) for all metrics, regressions, calculation methods, and per-task evidence.
|
|
109
65
|
|
|
110
|
-
|
|
66
|
+
[使用说明 · Usage guide](docs/UsageGuide.md) · [评测详情 · Evaluation details](docs/EvaluationResults.md) · [版本记录 · Changelog](docs/Changelog.md)
|
package/client/index.js
CHANGED
|
@@ -18,14 +18,20 @@ const zh = {
|
|
|
18
18
|
'preset.description': '更快、更省、更聪明的编码模式。', 'preset.refresh': '刷新状态', 'preset.expand': '展开设置', 'preset.collapse': '收起设置',
|
|
19
19
|
'preset.state.available': '预设可用', 'preset.state.installed': '用户预设已安装', 'preset.state.conflict': '已有同名预设',
|
|
20
20
|
'preset.state.missing': '尚未安装', 'preset.state.broken': '预设不可用',
|
|
21
|
-
'preset.availableHint': '
|
|
22
|
-
'preset.installHint': '
|
|
23
|
-
'preset.userConflict': '
|
|
21
|
+
'preset.availableHint': '可在新对话中选择此预设。升级仅更新未修改的默认名称和描述。',
|
|
22
|
+
'preset.installHint': '安装一份用户预设;已有内容会保留,标识符冲突时请换个标识符。',
|
|
23
|
+
'preset.userConflict': '用户目录中已有相同标识符的预设,已保留。可更换标识符安装独立副本。',
|
|
24
24
|
'preset.readonly': '此宿主未提供用户预设目录,无法安装副本。',
|
|
25
|
-
'preset.name': '
|
|
25
|
+
'preset.displayName': '显示名称', 'preset.displayNameHint': '支持中文和空格,最多 120 个字符,例如 Super Code 模式。', 'preset.name': '预设标识符', 'preset.nameHint': '用于安装目录,通常保留 super-code 即可。以小写字母或数字开头,仅含小写字母、数字和连字符,最多 64 个字符。',
|
|
26
|
+
'preset.confirmTitle': '确认重新安装预设',
|
|
27
|
+
'preset.confirmHint': '以下是通过本插件安装的预设,将会被移除并按照新名称重新安装,旧内容会保留恢复备份。对于需要保留的预设可以手动在列表中移除。',
|
|
28
|
+
'preset.confirmEmpty': '没有需要重装的预设。', 'preset.remove': '从列表移除', 'preset.cancel': '取消', 'preset.confirm': '确认重装',
|
|
29
|
+
'preset.reinstall': '重新安装预设', 'preset.reinstallHint': '使用下方名称和标识符重新安装,移除旧预设并保留恢复备份。',
|
|
30
|
+
'preset.error.ownership-unverified': '无法确认旧预设归属(可能来自旧版本或目录已被替换),未删除任何预设。',
|
|
26
31
|
'preset.install': '安装用户预设', 'preset.working': '处理中…',
|
|
27
|
-
'preset.error.invalid-name': '
|
|
28
|
-
'preset.error.name
|
|
32
|
+
'preset.error.invalid-name': '标识符须以小写字母或数字开头,仅含小写字母、数字和连字符,最多 64 个字符。',
|
|
33
|
+
'preset.error.invalid-display-name': '显示名称不能为空或全为空格,最多 120 个字符;支持中文和空格。',
|
|
34
|
+
'preset.error.name-taken': '该标识符已被占用,原预设未改动。请更换标识符。',
|
|
29
35
|
'preset.error.no-user-root': '此宿主没有可写的用户预设目录。',
|
|
30
36
|
'preset.error.install-failed': '安装未完成,请检查预设目录的写入权限后重试。',
|
|
31
37
|
'preset.error.connection': '暂时无法读取预设状态,请刷新重试。',
|
|
@@ -47,14 +53,20 @@ const en = {
|
|
|
47
53
|
'preset.description': 'A faster, more efficient, smarter coding mode.', 'preset.refresh': 'Refresh status', 'preset.expand': 'Show settings', 'preset.collapse': 'Hide settings',
|
|
48
54
|
'preset.state.available': 'Preset available', 'preset.state.installed': 'User preset installed', 'preset.state.conflict': 'Preset name already exists',
|
|
49
55
|
'preset.state.missing': 'Not installed', 'preset.state.broken': 'Preset unavailable',
|
|
50
|
-
'preset.availableHint': 'Select this preset in a new conversation.
|
|
51
|
-
'preset.installHint': 'Install a user copy. Existing content is preserved; choose another
|
|
52
|
-
'preset.userConflict': 'A user preset with this
|
|
56
|
+
'preset.availableHint': 'Select this preset in a new conversation. Upgrades update only unchanged default names and descriptions.',
|
|
57
|
+
'preset.installHint': 'Install a user copy. Existing content is preserved; choose another identifier if it is taken.',
|
|
58
|
+
'preset.userConflict': 'A user preset with this identifier already exists and was preserved. Choose another identifier for a separate copy.',
|
|
53
59
|
'preset.readonly': 'This host does not provide a user preset directory.',
|
|
54
|
-
'preset.
|
|
60
|
+
'preset.displayName': 'Display name', 'preset.displayNameHint': 'Supports Chinese characters and spaces, up to 120 characters, e.g. Super Code 模式.', 'preset.name': 'Preset identifier', 'preset.nameHint': 'Used for the installation directory; usually keep super-code. Start with a lowercase letter or digit; use only lowercase letters, digits and hyphens, up to 64 characters.',
|
|
61
|
+
'preset.confirmTitle': 'Confirm preset reinstallation',
|
|
62
|
+
'preset.confirmHint': 'These presets were installed by this plugin. They will be removed and reinstalled with the new names shown, and recovery backups will be kept. Remove any preset you want to keep from the list.',
|
|
63
|
+
'preset.confirmEmpty': 'No presets selected for reinstallation.', 'preset.remove': 'Remove from list', 'preset.cancel': 'Cancel', 'preset.confirm': 'Confirm reinstall',
|
|
64
|
+
'preset.reinstall': 'Reinstall preset', 'preset.reinstallHint': 'Reinstall with the name and identifier below, removing the old preset and keeping a recovery backup.',
|
|
65
|
+
'preset.error.ownership-unverified': 'Cannot verify ownership of the old preset (it may come from an older version or a replaced directory). No presets were deleted.',
|
|
55
66
|
'preset.install': 'Install user preset', 'preset.working': 'Working…',
|
|
56
|
-
'preset.error.invalid-name': '
|
|
57
|
-
'preset.error.name
|
|
67
|
+
'preset.error.invalid-name': 'The identifier must start with a lowercase letter or digit and contain only lowercase letters, digits and hyphens, up to 64 characters.',
|
|
68
|
+
'preset.error.invalid-display-name': 'The display name cannot be empty or whitespace-only and must be at most 120 characters. Chinese characters and spaces are supported.',
|
|
69
|
+
'preset.error.name-taken': 'This identifier is taken. The existing preset was preserved. Choose another identifier.',
|
|
58
70
|
'preset.error.no-user-root': 'This host has no writable user preset directory.',
|
|
59
71
|
'preset.error.install-failed': 'Installation failed. Check directory write permissions and retry.',
|
|
60
72
|
'preset.error.connection': 'Preset status is unavailable. Refresh to try again.',
|
|
@@ -796,33 +808,85 @@ function AgentDetail({ useTabInfo, useSessions, createInspector, detailStates, t
|
|
|
796
808
|
}
|
|
797
809
|
|
|
798
810
|
// Explicit public Remote contribution; no model tools or private transport hooks.
|
|
811
|
+
const remoteStringCodec = { mode: 'strict', typeSymbol: 'string', schema: {
|
|
812
|
+
parse(value) {
|
|
813
|
+
if (typeof value !== 'string') throw new TypeError('Expected a string')
|
|
814
|
+
return value
|
|
815
|
+
},
|
|
816
|
+
} }
|
|
799
817
|
const presetRemoteContribution = {
|
|
800
818
|
package: 'dsh-super-code',
|
|
801
|
-
descriptors: ['status', 'installPreset'].map(method => ({
|
|
819
|
+
descriptors: ['status', 'installPreset', 'reinstallPreset', 'synchronize'].map(method => ({
|
|
802
820
|
id: `dsh-super-code:superCodePresets/${method}`, service: 'superCodePresets',
|
|
803
821
|
namespace: 'superCodePresets', method, invocation: { kind: 'direct' },
|
|
804
|
-
parameters: method === '
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
} } } }] : [],
|
|
822
|
+
parameters: (method === 'reinstallPreset' ? ['previousId', 'id', 'name'] : method === 'installPreset' ? ['id', 'name'] : method === 'synchronize' ? ['language'] : []).map(name => ({
|
|
823
|
+
name, wire: name, source: 'json', codec: remoteStringCodec,
|
|
824
|
+
})),
|
|
808
825
|
result: { mode: 'src-json' },
|
|
809
826
|
})),
|
|
810
827
|
}
|
|
811
828
|
|
|
829
|
+
// Old hosts render file metadata. Synchronize through our own Remote, then
|
|
830
|
+
// reload their cached roster only when a managed field actually changed.
|
|
831
|
+
function synchronizePresetDisplay(api, locale, reload, onError) {
|
|
832
|
+
let disposed = false, running = false, pending = '', last = '', needsReload = false
|
|
833
|
+
const changed = () => {
|
|
834
|
+
pending = locale.getSnapshot().active
|
|
835
|
+
if (running || pending === last) return
|
|
836
|
+
running = true
|
|
837
|
+
void (async () => {
|
|
838
|
+
try {
|
|
839
|
+
while (!disposed && pending !== last) {
|
|
840
|
+
const language = pending
|
|
841
|
+
const result = await api.synchronize(language)
|
|
842
|
+
if (!result.ok) throw new Error('Preset display synchronization failed')
|
|
843
|
+
last = language
|
|
844
|
+
needsReload ||= result.value.changed
|
|
845
|
+
if (!disposed && needsReload && pending === language) { reload(); return }
|
|
846
|
+
}
|
|
847
|
+
} catch (error) { if (!disposed) onError(error) }
|
|
848
|
+
finally { running = false }
|
|
849
|
+
})()
|
|
850
|
+
}
|
|
851
|
+
const unsubscribe = locale.subscribe(changed)
|
|
852
|
+
changed()
|
|
853
|
+
return () => { disposed = true; unsubscribe() }
|
|
854
|
+
}
|
|
855
|
+
|
|
812
856
|
function PresetSettings({ api, t }) {
|
|
813
|
-
const [status, setStatus] = useState(null), [
|
|
857
|
+
const [status, setStatus] = useState(null), [customId, setCustomId] = useState(null)
|
|
858
|
+
const name = customId ?? (status?.state === 'installed' ? status.id : 'super-code')
|
|
859
|
+
const [customDisplayName, setCustomDisplayName] = useState(null)
|
|
860
|
+
const displayName = customDisplayName ?? (status?.state === 'installed' ? status.name || t('preset.title') : t('preset.title'))
|
|
814
861
|
const [busy, setBusy] = useState(true), [error, setError] = useState(''), [open, setOpen] = useState(false)
|
|
862
|
+
const [confirmation, setConfirmation] = useState(null)
|
|
863
|
+
const dialog = useRef(null)
|
|
815
864
|
const alive = useRef(false), pending = useRef(false)
|
|
816
|
-
|
|
865
|
+
useEffect(() => {
|
|
866
|
+
if (!confirmation || !dialog.current) return
|
|
867
|
+
const element = dialog.current
|
|
868
|
+
element.showModal()
|
|
869
|
+
element.querySelector('[data-super-code-cancel]')?.focus()
|
|
870
|
+
return () => { if (element.open) element.close() }
|
|
871
|
+
}, [confirmation !== null])
|
|
872
|
+
const run = async (install, confirmed = null) => {
|
|
817
873
|
if (pending.current) return
|
|
818
874
|
pending.current = true; setBusy(true); setError('')
|
|
819
875
|
try {
|
|
820
|
-
const
|
|
876
|
+
const installName = customDisplayName === null ? '' : displayName.trim()
|
|
877
|
+
const response = !install ? await api.status() : confirmed
|
|
878
|
+
? await api.reinstallPreset(confirmed.previousId, confirmed.id, confirmed.name)
|
|
879
|
+
: await api.installPreset(name.trim(), installName)
|
|
821
880
|
if (!response.ok) throw new Error('Remote unavailable')
|
|
822
881
|
if (!alive.current) return
|
|
823
882
|
const value = response.value
|
|
824
883
|
setStatus(install ? value.status : value)
|
|
825
884
|
if (install && !value.ok) setError(`preset.error.${value.error}`)
|
|
885
|
+
if (!install || value.ok) {
|
|
886
|
+
const synced = await api.synchronize(localeCode(t))
|
|
887
|
+
if (!synced.ok) throw new Error('Preset display synchronization failed')
|
|
888
|
+
if (install || synced.value.changed) window.location.reload()
|
|
889
|
+
}
|
|
826
890
|
} catch {
|
|
827
891
|
if (alive.current) setError('preset.error.connection')
|
|
828
892
|
} finally {
|
|
@@ -831,6 +895,13 @@ function PresetSettings({ api, t }) {
|
|
|
831
895
|
}
|
|
832
896
|
}
|
|
833
897
|
useEffect(() => { alive.current = true; run(false); return () => { alive.current = false } }, [api])
|
|
898
|
+
const submit = () => {
|
|
899
|
+
if (busy || pending.current || !displayName.trim() || !/^[a-z0-9][a-z0-9-]{0,63}$/.test(name.trim())) return
|
|
900
|
+
if (status?.state === 'installed') {
|
|
901
|
+
setConfirmation([{ previousId: status.id, id: name.trim(),
|
|
902
|
+
name: customDisplayName === null && displayName === t('preset.title') ? '' : displayName.trim(), label: displayName.trim() }])
|
|
903
|
+
} else run(true)
|
|
904
|
+
}
|
|
834
905
|
const available = status && ['available', 'installed'].includes(status.state)
|
|
835
906
|
return React.createElement('li', { className: `dsh-super-code-settings${open ? ' dsh-super-code-settings-open' : ''}` },
|
|
836
907
|
React.createElement('button', { type: 'button', className: 'dsh-super-code-settings-header', 'aria-expanded': open,
|
|
@@ -840,22 +911,47 @@ function PresetSettings({ api, t }) {
|
|
|
840
911
|
React.createElement('span', { className: 'dsh-super-code-settings-description' }, t('preset.description'))),
|
|
841
912
|
React.createElement(IconChevronDownOutline14, { className: `dsh-super-code-settings-chevron${open ? ' dsh-super-code-settings-chevron-open' : ''}`, 'aria-hidden': true })),
|
|
842
913
|
open && React.createElement('div', { className: 'dsh-super-code-settings-body' },
|
|
843
|
-
React.createElement('div', { className: 'dsh-super-code-settings-actions' },
|
|
844
|
-
React.createElement('button', { type: 'button', disabled: busy, onClick: () => run(false), 'aria-label': t('preset.refresh') }, t('preset.refresh'))),
|
|
845
914
|
status && React.createElement('p', { className: 'dsh-super-code-preset-status', role: 'status', 'data-available': available },
|
|
846
915
|
React.createElement('span', { 'aria-hidden': true }, '●'), ' ', t(`preset.state.${status.state}`), ' · ', status.id),
|
|
916
|
+
React.createElement('div', { className: 'dsh-super-code-settings-actions' },
|
|
917
|
+
React.createElement('button', { type: 'button', disabled: busy, onClick: () => run(false), 'aria-label': t('preset.refresh') }, t('preset.refresh'))),
|
|
847
918
|
status && React.createElement('p', null, t(available ? 'preset.availableHint' : 'preset.installHint')),
|
|
919
|
+
status?.state === 'installed' && React.createElement('p', null, t('preset.reinstallHint')),
|
|
848
920
|
status?.userConflict && status.state !== 'conflict' && React.createElement('p', null, t('preset.userConflict')),
|
|
849
921
|
status && !status.authorable && React.createElement('p', { role: 'note' }, t('preset.readonly')),
|
|
850
|
-
status?.authorable && React.createElement('form', { onSubmit: event => { event.preventDefault();
|
|
922
|
+
status?.authorable && React.createElement('form', { onSubmit: event => { event.preventDefault(); submit() } },
|
|
923
|
+
React.createElement('label', { htmlFor: 'super-code-display-name' }, t('preset.displayName')),
|
|
924
|
+
React.createElement('input', { id: 'super-code-display-name', value: displayName, maxLength: 120, required: true, disabled: busy, 'aria-describedby': 'super-code-display-name-hint', onChange: event => setCustomDisplayName(event.target.value) }),
|
|
925
|
+
React.createElement('small', { id: 'super-code-display-name-hint' }, t('preset.displayNameHint')),
|
|
851
926
|
React.createElement('label', { htmlFor: 'super-code-preset-name' }, t('preset.name')),
|
|
852
927
|
React.createElement('div', { className: 'dsh-super-code-install-row' },
|
|
853
928
|
React.createElement('input', { id: 'super-code-preset-name', value: name, maxLength: 64, disabled: busy,
|
|
854
929
|
pattern: '[a-z0-9][a-z0-9\\-]{0,63}', required: true, autoComplete: 'off', spellCheck: false,
|
|
855
|
-
'aria-describedby': 'super-code-preset-name-hint', onChange: event =>
|
|
856
|
-
React.createElement('button', { type: 'submit', disabled: busy || !/^[a-z0-9][a-z0-9-]{0,63}$/.test(name.trim()) }, t(busy ? 'preset.working' : 'preset.install'))),
|
|
930
|
+
'aria-describedby': 'super-code-preset-name-hint', onChange: event => setCustomId(event.target.value) }),
|
|
931
|
+
React.createElement('button', { type: 'submit', disabled: busy || !displayName.trim() || !/^[a-z0-9][a-z0-9-]{0,63}$/.test(name.trim()) }, t(busy ? 'preset.working' : status?.state === 'installed' ? 'preset.reinstall' : 'preset.install'))),
|
|
857
932
|
React.createElement('small', { id: 'super-code-preset-name-hint' }, t('preset.nameHint'))),
|
|
858
|
-
error && React.createElement('p', { role: 'alert' }, t(error)))
|
|
933
|
+
error && React.createElement('p', { role: 'alert' }, t(error))),
|
|
934
|
+
confirmation && React.createElement('dialog', { ref: dialog, className: 'dsh-super-code-confirm',
|
|
935
|
+
'aria-labelledby': 'super-code-confirm-title', 'aria-describedby': 'super-code-confirm-hint',
|
|
936
|
+
onKeyDown: event => { if (event.key === 'Escape') event.stopPropagation() },
|
|
937
|
+
onCancel: event => { event.preventDefault(); event.stopPropagation(); setConfirmation(null) } },
|
|
938
|
+
React.createElement('h3', { id: 'super-code-confirm-title' }, t('preset.confirmTitle')),
|
|
939
|
+
React.createElement('p', { id: 'super-code-confirm-hint' }, t('preset.confirmHint')),
|
|
940
|
+
confirmation.length ? React.createElement('ul', null, ...confirmation.map(item =>
|
|
941
|
+
React.createElement('li', { key: item.previousId },
|
|
942
|
+
React.createElement('span', null, `${item.previousId} → ${item.label} · ${item.id}`),
|
|
943
|
+
React.createElement('button', { type: 'button', 'aria-label': `${t('preset.remove')}: ${item.previousId}`,
|
|
944
|
+
onClick: () => setConfirmation(items => items.filter(row => row.previousId !== item.previousId)) }, t('preset.remove')))))
|
|
945
|
+
: React.createElement('p', { role: 'status' }, t('preset.confirmEmpty')),
|
|
946
|
+
React.createElement('div', { className: 'dsh-super-code-confirm-actions' },
|
|
947
|
+
React.createElement('button', { type: 'button', autoFocus: true, 'data-super-code-cancel': true, onClick: () => setConfirmation(null) }, t('preset.cancel')),
|
|
948
|
+
React.createElement('button', { type: 'button', disabled: busy || !confirmation.length,
|
|
949
|
+
onClick: () => {
|
|
950
|
+
if (busy || pending.current || !confirmation.length) return
|
|
951
|
+
const selected = confirmation[0]
|
|
952
|
+
setConfirmation(null)
|
|
953
|
+
run(true, selected)
|
|
954
|
+
} }, t('preset.confirm')))))
|
|
859
955
|
}
|
|
860
956
|
|
|
861
957
|
const inject = [
|
|
@@ -867,13 +963,16 @@ function apply(ctx) {
|
|
|
867
963
|
const locale = ctx.locale || { register: () => () => {}, bind: () => key => zh[key] || key }
|
|
868
964
|
ctx.effect(() => locale.register(LOCALE_NS, { zh, en }), 'dsh-super-code: dictionaries')
|
|
869
965
|
const t = locale.bind(LOCALE_NS)
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
966
|
+
// $mount creates a lifecycle effect on this same fiber; awaiting it from
|
|
967
|
+
// another effect would stall the namespace and the settings contribution.
|
|
968
|
+
void ctx.remote.$mount(presetRemoteContribution).catch(error => console.warn('Super Code preset Remote:', error))
|
|
969
|
+
ctx.inject(['remote.superCodePresets'], ready => {
|
|
970
|
+
ready.effect(() => synchronizePresetDisplay(ready.remote.superCodePresets, locale,
|
|
971
|
+
() => window.location.reload(), error => console.warn('Super Code preset display:', error)), 'super-code: preset display')
|
|
972
|
+
return ready.slots.inject('settings.plugin.item', () => ready.slots.register({
|
|
874
973
|
name: 'settings.plugin.item', key: 'super-code', locale: LOCALE_NS,
|
|
875
974
|
inject: () => ({ api: ready.remote.superCodePresets }),
|
|
876
|
-
}, PresetSettings))
|
|
975
|
+
}, PresetSettings))
|
|
877
976
|
})
|
|
878
977
|
ctx.effect(() => {
|
|
879
978
|
const style = document.createElement('style')
|
|
@@ -884,6 +983,7 @@ function apply(ctx) {
|
|
|
884
983
|
.dsh-super-code-settings-header{width:100%;appearance:none;border:0;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer;display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:12px}
|
|
885
984
|
.dsh-super-code-settings-head-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.dsh-super-code-settings-name{font-size:15px;font-weight:600;line-height:1.4;color:var(--dsw-alias-label-primary,inherit)}
|
|
886
985
|
.dsh-super-code-settings-description{font-size:13px;line-height:1.5;color:var(--dsw-alias-label-tertiary,#70757d)}.dsh-super-code-settings-chevron{flex:none;color:var(--dsw-alias-label-tertiary,#70757d);transition:transform .16s}.dsh-super-code-settings-chevron-open{transform:rotate(180deg)}
|
|
986
|
+
.dsh-super-code-confirm{box-sizing:border-box;width:min(560px,calc(100vw - 48px));max-height:80vh;overflow:auto;border:1px solid var(--dsw-alias-border-l2,#dedfe3);border-radius:8px;padding:24px;color:var(--dsw-alias-label-primary,#202126);background:var(--dsw-alias-bg-layer-1,#fff);font-size:13px;line-height:1.6}.dsh-super-code-confirm::backdrop{background:#0006}.dsh-super-code-confirm h3{font-size:16px;margin:0 0 12px}.dsh-super-code-confirm p{margin:0 0 14px}.dsh-super-code-confirm ul{padding:0;margin:0 0 18px;list-style:none}.dsh-super-code-confirm li{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:12px 0;overflow-wrap:anywhere}.dsh-super-code-confirm-actions{display:flex;justify-content:flex-end;gap:8px}.dsh-super-code-confirm button{font:inherit;color:inherit;border:1px solid var(--dsw-alias-border-l1,#dedfe3);border-radius:6px;background:transparent;padding:7px 10px;min-height:34px;cursor:pointer}.dsh-super-code-confirm button:disabled{opacity:.45;cursor:default}.dsh-super-code-confirm button:focus-visible{outline:2px solid var(--dsw-color-primary,#3276dc);outline-offset:2px}
|
|
887
987
|
.dsh-super-code-settings-body{border-top:.5px solid var(--dsw-alias-border-l2,#dedfe3);margin:0 16px;padding:12px 0 14px}.dsh-super-code-settings-actions{display:flex;justify-content:flex-end}
|
|
888
988
|
.dsh-super-code-settings p{margin:8px 0;color:var(--dsw-alias-label-secondary,#70757d)}
|
|
889
989
|
.dsh-super-code-settings-body button,.dsh-super-code-settings input{font:inherit;color:inherit;border:1px solid var(--dsw-alias-border-l1,#dedfe3);border-radius:7px;background:transparent;padding:7px 10px;min-height:34px}
|
|
@@ -1065,5 +1165,5 @@ function apply(ctx) {
|
|
|
1065
1165
|
ctx.effect(() => disposeDetailType, 'super-code: Agent detail tab')
|
|
1066
1166
|
}
|
|
1067
1167
|
|
|
1068
|
-
return { inject, apply, buildAgentView, visibleAgentRows, agentTreeDisplay, agentTreeTotals, agentTreeLayout, agentExecutionStatus, agentDetailAddress, agentDetailTarget, agentPath, detailRecord, createAgentInspector, agentHistoryRange, agentHistoryRows, agentHistoryWindow }
|
|
1168
|
+
return { inject, apply, synchronizePresetDisplay, buildAgentView, visibleAgentRows, agentTreeDisplay, agentTreeTotals, agentTreeLayout, agentExecutionStatus, agentDetailAddress, agentDetailTarget, agentPath, detailRecord, createAgentInspector, agentHistoryRange, agentHistoryRows, agentHistoryWindow }
|
|
1069
1169
|
} })
|
package/cordis.patch.yml
CHANGED
|
@@ -1,19 +1,66 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
# Harness 0.1.7 declares presets through bundle rows. Earlier hosts retain a
|
|
2
|
+
# directory roster; the host plugin copies the bundled preset into its user root.
|
|
3
|
+
- insert:
|
|
4
|
+
- id: preset-super-code
|
|
5
|
+
name: '@deepseek-ai/dsh-agent-preset'
|
|
6
|
+
disabled: !!js >-
|
|
7
|
+
(() => { try {
|
|
8
|
+
process.getBuiltinModule('node:module').createRequire(process.argv[1]).resolve('@deepseek-ai/dsh-agent-preset')
|
|
9
|
+
return false
|
|
10
|
+
} catch { return true } })()
|
|
11
|
+
config:
|
|
12
|
+
id: super-code
|
|
13
|
+
name: Super Code
|
|
14
|
+
description: A faster, more efficient, smarter coding mode.
|
|
15
|
+
order: 5
|
|
16
|
+
plugins:
|
|
17
|
+
- id: super-code
|
|
18
|
+
name: dsh-super-code/super-code
|
|
19
|
+
- id: compaction
|
|
20
|
+
name: cordis:group
|
|
21
|
+
group: true
|
|
22
|
+
isolate:
|
|
23
|
+
compaction: true
|
|
24
|
+
config:
|
|
25
|
+
- id: compaction-basic
|
|
26
|
+
name: '@deepseek-ai/dsh-compaction-basic'
|
|
27
|
+
- id: command-compact
|
|
28
|
+
name: '@deepseek-ai/dsh-command-compact'
|
|
29
|
+
- id: agent-instructions
|
|
30
|
+
name: '@deepseek-ai/dsh-agent-instructions'
|
|
31
|
+
config:
|
|
32
|
+
maxBytes: 65536
|
|
33
|
+
- id: tool-bash
|
|
34
|
+
name: '@deepseek-ai/dsh-tool-bash'
|
|
35
|
+
disabled: !!js process.platform === 'win32'
|
|
36
|
+
- id: tool-pwsh
|
|
37
|
+
name: '@deepseek-ai/dsh-tool-pwsh'
|
|
38
|
+
disabled: !!js process.platform !== 'win32'
|
|
39
|
+
- id: tool-fs
|
|
40
|
+
name: '@deepseek-ai/dsh-tool-fs'
|
|
41
|
+
- id: tool-fs-search
|
|
42
|
+
name: '@deepseek-ai/dsh-tool-fs-search'
|
|
43
|
+
config:
|
|
44
|
+
sampleOverCapGlobResults: false
|
|
45
|
+
- id: tool-jobs
|
|
46
|
+
name: '@deepseek-ai/dsh-tool-jobs'
|
|
47
|
+
- id: tool-web
|
|
48
|
+
name: '@deepseek-ai/dsh-tool-web'
|
|
49
|
+
config:
|
|
50
|
+
searchTimeoutMs: 60000
|
|
51
|
+
- id: tool-subagent-control
|
|
52
|
+
name: '@deepseek-ai/dsh-tool-subagent-control'
|
|
53
|
+
- id: tool-subagent
|
|
54
|
+
name: '@deepseek-ai/dsh-tool-subagent'
|
|
55
|
+
config:
|
|
56
|
+
provider: spawn
|
|
57
|
+
toolName: subagent
|
|
58
|
+
backgroundMode: continuable
|
|
59
|
+
maxDepth: 1
|
|
60
|
+
- id: skill-filesystem
|
|
61
|
+
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
62
|
+
- id: tool-skill
|
|
63
|
+
name: '@deepseek-ai/dsh-tool-skill'
|
|
17
64
|
|
|
18
65
|
# Register host projections and discover the browser contribution.
|
|
19
66
|
- insert:
|
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
import type { Context } from '@deepseek-ai/cordis';
|
|
2
2
|
import { type AgentPresets } from '@deepseek-ai/dsh-agent-presets';
|
|
3
|
+
import { type DisplayBaseline } from './preset-metadata.js';
|
|
3
4
|
import type { SettingsScope } from '@deepseek-ai/dsh-settings';
|
|
4
5
|
import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
5
6
|
interface InstallationSettings {
|
|
6
7
|
checked: boolean;
|
|
7
8
|
installedId: string;
|
|
9
|
+
installation?: {
|
|
10
|
+
id: string;
|
|
11
|
+
path: string;
|
|
12
|
+
token: string;
|
|
13
|
+
dev: number;
|
|
14
|
+
ino: number;
|
|
15
|
+
};
|
|
16
|
+
display?: Record<string, DisplayBaseline>;
|
|
17
|
+
pendingDisplay?: Record<string, DisplayBaseline>;
|
|
8
18
|
}
|
|
9
19
|
export interface PresetInstallationStatus {
|
|
10
20
|
state: 'available' | 'installed' | 'conflict' | 'missing' | 'broken';
|
|
11
21
|
id: string;
|
|
22
|
+
name?: string;
|
|
12
23
|
authorable: boolean;
|
|
13
24
|
userConflict: boolean;
|
|
14
25
|
}
|
|
15
26
|
export interface PresetInstallationResult {
|
|
16
27
|
ok: boolean;
|
|
17
28
|
status: PresetInstallationStatus;
|
|
18
|
-
error?: 'invalid-name' | 'name-taken' | 'no-user-root' | 'install-failed';
|
|
29
|
+
error?: 'ownership-unverified' | 'invalid-name' | 'invalid-display-name' | 'name-taken' | 'no-user-root' | 'install-failed';
|
|
19
30
|
}
|
|
20
31
|
/** Serialized writes protect double clicks; mkdir claims only an unoccupied name. */
|
|
21
32
|
export declare class PresetInstaller {
|
|
@@ -27,16 +38,49 @@ export declare class PresetInstaller {
|
|
|
27
38
|
constructor(roster: Pick<AgentPresets, 'list' | 'roots'>, settings: SettingsScope<InstallationSettings>, bundledRoot?: string, baseUrl?: string);
|
|
28
39
|
status(): Promise<PresetInstallationStatus>;
|
|
29
40
|
initialize(): Promise<void>;
|
|
30
|
-
|
|
41
|
+
synchronize(language: string): Promise<{
|
|
42
|
+
changed: boolean;
|
|
43
|
+
}>;
|
|
44
|
+
install(id: unknown, name?: string): Promise<PresetInstallationResult>;
|
|
45
|
+
reinstall(previousId: string, id: unknown, name?: string): Promise<PresetInstallationResult>;
|
|
31
46
|
private occupied;
|
|
32
47
|
private installNow;
|
|
33
48
|
private enqueue;
|
|
34
49
|
}
|
|
50
|
+
interface InstallationController {
|
|
51
|
+
status(): Promise<PresetInstallationStatus>;
|
|
52
|
+
install(id: unknown, name?: string): Promise<PresetInstallationResult>;
|
|
53
|
+
reinstall(previousId: string, id: unknown, name?: string): Promise<PresetInstallationResult>;
|
|
54
|
+
synchronize(language: string): Promise<{
|
|
55
|
+
changed: boolean;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
/** The 0.1.7 registry owns declarations; this package never writes its profile. */
|
|
59
|
+
export declare class DeclaredPresetStatus implements InstallationController {
|
|
60
|
+
private readonly registry;
|
|
61
|
+
constructor(registry: {
|
|
62
|
+
list(): Promise<readonly {
|
|
63
|
+
id: string;
|
|
64
|
+
name?: string;
|
|
65
|
+
broken?: string;
|
|
66
|
+
}[]>;
|
|
67
|
+
});
|
|
68
|
+
status(): Promise<PresetInstallationStatus>;
|
|
69
|
+
install(_id: unknown, _name?: string): Promise<PresetInstallationResult>;
|
|
70
|
+
reinstall(_previousId: string, _id: unknown, _name?: string): Promise<PresetInstallationResult>;
|
|
71
|
+
synchronize(_language: string): Promise<{
|
|
72
|
+
changed: boolean;
|
|
73
|
+
}>;
|
|
74
|
+
}
|
|
35
75
|
export declare class SuperCodePresets extends TypertRemoteService {
|
|
36
76
|
private readonly installer;
|
|
37
|
-
constructor(ctx: Context, installer:
|
|
77
|
+
constructor(ctx: Context, installer: InstallationController);
|
|
38
78
|
status(): Promise<PresetInstallationStatus>;
|
|
39
|
-
installPreset(id: unknown): Promise<PresetInstallationResult>;
|
|
79
|
+
installPreset(id: unknown, name?: string): Promise<PresetInstallationResult>;
|
|
80
|
+
reinstallPreset(previousId: string, id: unknown, name?: string): Promise<PresetInstallationResult>;
|
|
81
|
+
synchronize(language: string): Promise<{
|
|
82
|
+
changed: boolean;
|
|
83
|
+
}>;
|
|
40
84
|
}
|
|
41
85
|
export declare function applyPresetInstallation(ctx: Context): void;
|
|
42
86
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset-installation.d.ts","sourceRoot":"","sources":["../../src/dsh/preset-installation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preset-installation.d.ts","sourceRoot":"","sources":["../../src/dsh/preset-installation.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,13 +33,16 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
|
|
|
33
33
|
done = true;
|
|
34
34
|
};
|
|
35
35
|
/** Host-only preset discovery repair; never part of a model's tool surface. */
|
|
36
|
-
import { cp, lstat, mkdir, mkdtemp, readdir, rm } from 'node:fs/promises';
|
|
36
|
+
import { cp, lstat, mkdir, mkdtemp, readdir, rm, readFile, writeFile, rename, realpath } from 'node:fs/promises';
|
|
37
|
+
import { randomUUID } from 'node:crypto';
|
|
37
38
|
import { join, resolve } from 'node:path';
|
|
38
39
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
39
40
|
import s from '@deepseek-ai/schemastery';
|
|
40
41
|
import { copyComposition, discoverPresets, writableRoot } from '@deepseek-ai/dsh-agent-presets';
|
|
42
|
+
import { displayCopy, migrateMetadata } from './preset-metadata.js';
|
|
41
43
|
import { Remote, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
42
44
|
const sourceRoot = fileURLToPath(new URL('../../presets/', import.meta.url));
|
|
45
|
+
const ownershipFile = '.super-code-installation.json';
|
|
43
46
|
const validId = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
44
47
|
async function exists(path) {
|
|
45
48
|
try {
|
|
@@ -75,7 +78,7 @@ export class PresetInstaller {
|
|
|
75
78
|
const userConflict = occupied && this.settings.get().installedId !== id;
|
|
76
79
|
if (preset) {
|
|
77
80
|
const owned = preset.trust === 'system' && resolve(preset.path) === join(this.bundledRoot, 'super-code', 'agent.cordis.yml');
|
|
78
|
-
return { id, authorable, userConflict, state: preset.broken ? 'broken' : owned ? 'available'
|
|
81
|
+
return { id, name: preset.name, authorable, userConflict, state: preset.broken ? 'broken' : owned ? 'available'
|
|
79
82
|
: preset.trust === 'user' && this.settings.get().installedId === id ? 'installed' : 'conflict' };
|
|
80
83
|
}
|
|
81
84
|
return { id, authorable, userConflict, state: occupied ? 'conflict' : 'missing' };
|
|
@@ -92,8 +95,116 @@ export class PresetInstaller {
|
|
|
92
95
|
await this.installNow('super-code');
|
|
93
96
|
});
|
|
94
97
|
}
|
|
95
|
-
async
|
|
96
|
-
|
|
98
|
+
async synchronize(language) {
|
|
99
|
+
if (!/^[a-z]{2,8}(?:-[a-z0-9]{1,8})*$/i.test(language))
|
|
100
|
+
throw new Error('Invalid language');
|
|
101
|
+
return await this.enqueue(async () => {
|
|
102
|
+
const stored = this.settings.get();
|
|
103
|
+
const display = { ...stored.display };
|
|
104
|
+
const pendingDisplay = { ...stored.pendingDisplay };
|
|
105
|
+
let changed = false;
|
|
106
|
+
for (const preset of await this.roster.list()) {
|
|
107
|
+
const bundled = preset.trust === 'system' && resolve(preset.path) === join(this.bundledRoot, 'super-code', 'agent.cordis.yml');
|
|
108
|
+
const owned = preset.trust === 'user' && (preset.id === stored.installedId || Object.hasOwn(display, preset.path));
|
|
109
|
+
if (!bundled && !owned)
|
|
110
|
+
continue;
|
|
111
|
+
if ((await lstat(join(preset.path, '..'))).isSymbolicLink())
|
|
112
|
+
continue;
|
|
113
|
+
const metadata = join(preset.path, '..', 'preset.yml');
|
|
114
|
+
let previous = display[preset.path];
|
|
115
|
+
const pending = pendingDisplay[preset.path];
|
|
116
|
+
if (previous && pending) {
|
|
117
|
+
previous = { ...previous };
|
|
118
|
+
for (const field of ['name', 'description']) {
|
|
119
|
+
if (pending[field] !== undefined && preset[field] === pending[field])
|
|
120
|
+
previous[field] = pending[field];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const result = await migrateMetadata(metadata, preset.id, preset, previous, displayCopy(language), async (baseline) => {
|
|
124
|
+
pendingDisplay[preset.path] = baseline;
|
|
125
|
+
await this.settings.update({ pendingDisplay: { ...pendingDisplay } });
|
|
126
|
+
});
|
|
127
|
+
changed ||= result.changed;
|
|
128
|
+
display[preset.path] = result.baseline;
|
|
129
|
+
delete pendingDisplay[preset.path];
|
|
130
|
+
}
|
|
131
|
+
if (JSON.stringify(display) !== JSON.stringify(stored.display ?? {}) || JSON.stringify(pendingDisplay) !== JSON.stringify(this.settings.get().pendingDisplay ?? {})) {
|
|
132
|
+
await this.settings.update({ display, pendingDisplay });
|
|
133
|
+
}
|
|
134
|
+
return { changed };
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
async install(id, name) {
|
|
138
|
+
return await this.enqueue(() => this.installNow(id, name));
|
|
139
|
+
}
|
|
140
|
+
async reinstall(previousId, id, name) {
|
|
141
|
+
return await this.enqueue(async () => {
|
|
142
|
+
const reject = async (error) => ({ ok: false, error, status: await this.status() });
|
|
143
|
+
if (typeof id !== 'string' || !validId.test(id))
|
|
144
|
+
return reject('invalid-name');
|
|
145
|
+
if (name !== undefined && (typeof name !== 'string' || !name.trim() || name.length > 120))
|
|
146
|
+
return reject('invalid-display-name');
|
|
147
|
+
const stored = this.settings.get(), installation = stored.installation;
|
|
148
|
+
if (!installation || previousId !== stored.installedId || installation.id !== previousId)
|
|
149
|
+
return reject('ownership-unverified');
|
|
150
|
+
const roots = this.roster.roots.filter(root => root.trust === 'user');
|
|
151
|
+
const expected = await Promise.all(roots
|
|
152
|
+
.map(async (root) => {
|
|
153
|
+
try {
|
|
154
|
+
return join(await realpath(writableRoot([root], previousId)), previousId);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return '';
|
|
158
|
+
}
|
|
159
|
+
}));
|
|
160
|
+
if (!expected.includes(installation.path))
|
|
161
|
+
return reject('ownership-unverified');
|
|
162
|
+
const originalPath = join(writableRoot([roots[expected.indexOf(installation.path)]], previousId), previousId);
|
|
163
|
+
let backup = '';
|
|
164
|
+
try {
|
|
165
|
+
const directory = await lstat(installation.path);
|
|
166
|
+
const markerPath = join(installation.path, ownershipFile);
|
|
167
|
+
const markerStat = await lstat(markerPath);
|
|
168
|
+
if (!directory.isDirectory() || directory.isSymbolicLink() || !markerStat.isFile() || markerStat.isSymbolicLink()
|
|
169
|
+
|| await realpath(installation.path) !== installation.path
|
|
170
|
+
|| directory.dev !== installation.dev || directory.ino !== installation.ino)
|
|
171
|
+
return reject('ownership-unverified');
|
|
172
|
+
const marker = JSON.parse(await readFile(markerPath, 'utf8'));
|
|
173
|
+
if (marker.plugin !== 'dsh-super-code' || marker.token !== installation.token || marker.id !== previousId)
|
|
174
|
+
return reject('ownership-unverified');
|
|
175
|
+
if (id !== previousId && ((await this.roster.list()).some(row => row.id === id) || await this.occupied(id)))
|
|
176
|
+
return reject('name-taken');
|
|
177
|
+
// A container without agent.cordis.yml is not a discoverable preset.
|
|
178
|
+
// Retain it after success as a recovery copy of the removed preset.
|
|
179
|
+
backup = await mkdtemp(join(installation.path, '..', '.super-code-backup-'));
|
|
180
|
+
await rename(installation.path, join(backup, previousId));
|
|
181
|
+
const moved = await lstat(join(backup, previousId));
|
|
182
|
+
if (!moved.isDirectory() || moved.dev !== installation.dev || moved.ino !== installation.ino) {
|
|
183
|
+
if (!await exists(installation.path))
|
|
184
|
+
await rename(join(backup, previousId), installation.path);
|
|
185
|
+
return reject('ownership-unverified');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return reject('ownership-unverified');
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
const result = await this.installNow(id, name, originalPath);
|
|
193
|
+
if (result.ok)
|
|
194
|
+
return result;
|
|
195
|
+
if (await exists(installation.path))
|
|
196
|
+
return reject('install-failed');
|
|
197
|
+
await rename(join(backup, previousId), installation.path);
|
|
198
|
+
await rm(backup, { recursive: true, force: true });
|
|
199
|
+
return { ...result, status: await this.status() };
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
// Never overwrite a directory created by another actor during repair.
|
|
203
|
+
if (!await exists(installation.path))
|
|
204
|
+
await rename(join(backup, previousId), installation.path);
|
|
205
|
+
return reject('install-failed');
|
|
206
|
+
}
|
|
207
|
+
});
|
|
97
208
|
}
|
|
98
209
|
async occupied(id) {
|
|
99
210
|
for (const root of this.roster.roots.filter(root => root.trust === 'user')) {
|
|
@@ -102,11 +213,13 @@ export class PresetInstaller {
|
|
|
102
213
|
}
|
|
103
214
|
return false;
|
|
104
215
|
}
|
|
105
|
-
async installNow(value) {
|
|
216
|
+
async installNow(value, name, replacedPath) {
|
|
106
217
|
const reject = async (error) => ({ ok: false, error, status: await this.status() });
|
|
107
218
|
if (typeof value !== 'string' || !validId.test(value))
|
|
108
219
|
return reject('invalid-name');
|
|
109
220
|
const id = value;
|
|
221
|
+
if (name !== undefined && (typeof name !== 'string' || !name.trim() || name.length > 120))
|
|
222
|
+
return reject('invalid-display-name');
|
|
110
223
|
if (!this.roster.roots.some(root => root.trust === 'user'))
|
|
111
224
|
return reject('no-user-root');
|
|
112
225
|
if ((await this.roster.list()).some(row => row.id === id) || await this.occupied(id))
|
|
@@ -124,15 +237,31 @@ export class PresetInstaller {
|
|
|
124
237
|
staging = await mkdtemp(join(root, '.super-code-install-'));
|
|
125
238
|
// The host copy helper can clean up its destination on failure. Isolate
|
|
126
239
|
// it from user-owned paths, then exclusively claim the final directory.
|
|
127
|
-
const prepared = await copyComposition([{ path: staging, trust: 'user' }], source, id,
|
|
240
|
+
const prepared = await copyComposition([{ path: staging, trust: 'user' }], source, id, name?.trim() ?? 'Super Code');
|
|
128
241
|
await mkdir(target, { mode: 0o700 });
|
|
129
242
|
claimed = true;
|
|
130
243
|
for (const entry of await readdir(prepared)) {
|
|
131
244
|
await cp(join(prepared, entry), join(target, entry), { recursive: true, force: false, errorOnExist: true });
|
|
132
245
|
}
|
|
133
|
-
|
|
246
|
+
const token = randomUUID();
|
|
247
|
+
await writeFile(join(target, ownershipFile), JSON.stringify({ plugin: 'dsh-super-code', id, token }), { flag: 'wx', mode: 0o600 });
|
|
248
|
+
const directory = await lstat(target);
|
|
249
|
+
const installation = { id, path: await realpath(target), token, dev: directory.dev, ino: directory.ino };
|
|
250
|
+
const display = { ...this.settings.get().display }, pendingDisplay = { ...this.settings.get().pendingDisplay };
|
|
251
|
+
if (replacedPath) {
|
|
252
|
+
delete display[join(replacedPath, 'agent.cordis.yml')];
|
|
253
|
+
delete pendingDisplay[join(replacedPath, 'agent.cordis.yml')];
|
|
254
|
+
}
|
|
255
|
+
const status = { id, authorable: true, userConflict: false, state: 'installed' };
|
|
256
|
+
await this.settings.update({ checked: true, installedId: id, installation, pendingDisplay, display: {
|
|
257
|
+
...display,
|
|
258
|
+
[join(target, 'agent.cordis.yml')]: {
|
|
259
|
+
...(name === undefined ? { name: 'Super Code' } : {}),
|
|
260
|
+
...(source.description === undefined ? {} : { description: source.description }),
|
|
261
|
+
},
|
|
262
|
+
} });
|
|
134
263
|
claimed = false;
|
|
135
|
-
return { ok: true, status
|
|
264
|
+
return { ok: true, status };
|
|
136
265
|
}
|
|
137
266
|
catch (error) {
|
|
138
267
|
if (claimed)
|
|
@@ -150,18 +279,43 @@ export class PresetInstaller {
|
|
|
150
279
|
return next;
|
|
151
280
|
}
|
|
152
281
|
}
|
|
282
|
+
/** The 0.1.7 registry owns declarations; this package never writes its profile. */
|
|
283
|
+
export class DeclaredPresetStatus {
|
|
284
|
+
registry;
|
|
285
|
+
constructor(registry) {
|
|
286
|
+
this.registry = registry;
|
|
287
|
+
}
|
|
288
|
+
async status() {
|
|
289
|
+
const preset = (await this.registry.list()).find(row => row.id === 'super-code');
|
|
290
|
+
return { id: 'super-code', name: preset?.name, authorable: false, userConflict: false,
|
|
291
|
+
state: preset ? preset.broken ? 'broken' : 'available' : 'missing' };
|
|
292
|
+
}
|
|
293
|
+
async install(_id, _name) {
|
|
294
|
+
return { ok: false, error: 'no-user-root', status: await this.status() };
|
|
295
|
+
}
|
|
296
|
+
async reinstall(_previousId, _id, _name) {
|
|
297
|
+
return { ok: false, error: 'no-user-root', status: await this.status() };
|
|
298
|
+
}
|
|
299
|
+
async synchronize(_language) { return { changed: false }; }
|
|
300
|
+
}
|
|
153
301
|
let SuperCodePresets = (() => {
|
|
154
302
|
let _classSuper = TypertRemoteService;
|
|
155
303
|
let _instanceExtraInitializers = [];
|
|
156
304
|
let _status_decorators;
|
|
157
305
|
let _installPreset_decorators;
|
|
306
|
+
let _reinstallPreset_decorators;
|
|
307
|
+
let _synchronize_decorators;
|
|
158
308
|
return class SuperCodePresets extends _classSuper {
|
|
159
309
|
static {
|
|
160
310
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
161
311
|
_status_decorators = [Remote];
|
|
162
312
|
_installPreset_decorators = [Remote];
|
|
313
|
+
_reinstallPreset_decorators = [Remote];
|
|
314
|
+
_synchronize_decorators = [Remote];
|
|
163
315
|
__esDecorate(this, null, _status_decorators, { kind: "method", name: "status", static: false, private: false, access: { has: obj => "status" in obj, get: obj => obj.status }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
164
316
|
__esDecorate(this, null, _installPreset_decorators, { kind: "method", name: "installPreset", static: false, private: false, access: { has: obj => "installPreset" in obj, get: obj => obj.installPreset }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
317
|
+
__esDecorate(this, null, _reinstallPreset_decorators, { kind: "method", name: "reinstallPreset", static: false, private: false, access: { has: obj => "reinstallPreset" in obj, get: obj => obj.reinstallPreset }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
318
|
+
__esDecorate(this, null, _synchronize_decorators, { kind: "method", name: "synchronize", static: false, private: false, access: { has: obj => "synchronize" in obj, get: obj => obj.synchronize }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
165
319
|
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
166
320
|
}
|
|
167
321
|
installer = __runInitializers(this, _instanceExtraInitializers);
|
|
@@ -170,20 +324,33 @@ let SuperCodePresets = (() => {
|
|
|
170
324
|
this.installer = installer;
|
|
171
325
|
}
|
|
172
326
|
status() { return this.installer.status(); }
|
|
173
|
-
installPreset(id) { return this.installer.install(id); }
|
|
327
|
+
installPreset(id, name) { return this.installer.install(id, name === '' ? undefined : name); }
|
|
328
|
+
reinstallPreset(previousId, id, name) { return this.installer.reinstall(previousId, id, name === '' ? undefined : name); }
|
|
329
|
+
synchronize(language) { return this.installer.synchronize(language); }
|
|
174
330
|
};
|
|
175
331
|
})();
|
|
176
332
|
export { SuperCodePresets };
|
|
177
333
|
export function applyPresetInstallation(ctx) {
|
|
178
334
|
ctx.inject(['agentPresets', 'settings'], async (owner) => {
|
|
335
|
+
const registry = owner.agentPresets;
|
|
336
|
+
if (!Array.isArray(registry.roots)) {
|
|
337
|
+
new SuperCodePresets(owner, new DeclaredPresetStatus(registry));
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
179
340
|
const settings = owner.settings.register('super-code', s.object({
|
|
180
341
|
checked: s.boolean().default(false),
|
|
181
342
|
installedId: s.string().default(''),
|
|
343
|
+
installation: s.object({ id: s.string(), path: s.string(), token: s.string(), dev: s.number(), ino: s.number() }).required(false),
|
|
344
|
+
pendingDisplay: s.dict(s.object({ name: s.string().required(false), description: s.string().required(false) })).default({}),
|
|
345
|
+
display: s.dict(s.object({ name: s.string().required(false), description: s.string().required(false) })).default({}),
|
|
182
346
|
}));
|
|
183
347
|
const installer = new PresetInstaller(owner.agentPresets, settings, sourceRoot, owner.baseUrl);
|
|
184
348
|
new SuperCodePresets(owner, installer);
|
|
185
349
|
try {
|
|
186
350
|
await installer.initialize();
|
|
351
|
+
const language = owner.settings.get('locale');
|
|
352
|
+
if (language?.preference)
|
|
353
|
+
await installer.synchronize(language.preference);
|
|
187
354
|
}
|
|
188
355
|
catch {
|
|
189
356
|
owner.logger.warn('Super Code preset installation unavailable; retry in plugin settings.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset-installation.js","sourceRoot":"","sources":["../../src/dsh/preset-installation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"preset-installation.js","sourceRoot":"","sources":["../../src/dsh/preset-installation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface DisplayBaseline {
|
|
2
|
+
name?: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface DisplayCopy {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function displayCopy(language: string): DisplayCopy;
|
|
10
|
+
export interface MetadataMigration {
|
|
11
|
+
changed: boolean;
|
|
12
|
+
baseline: DisplayBaseline;
|
|
13
|
+
}
|
|
14
|
+
export declare function migrateMetadata(path: string, id: string, current: DisplayBaseline, previous: DisplayBaseline | undefined, copy: DisplayCopy, beforeWrite?: (baseline: DisplayBaseline) => Promise<void>): Promise<MetadataMigration>;
|
|
15
|
+
//# sourceMappingURL=preset-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset-metadata.d.ts","sourceRoot":"","sources":["../../src/dsh/preset-metadata.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AACD,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE;AAClE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAIzD;AAQD,MAAM,WAAW,iBAAiB;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE;AAClF,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GAAG,SAAS,EAAE,IAAI,EAAE,WAAW,EAC5G,WAAW,GAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAkB,GACzE,OAAO,CAAC,iBAAiB,CAAC,CAgD5B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/** Update only recognized or previously managed display fields, preserving YAML around them. */
|
|
2
|
+
import { lstat, readFile, open, mkdtemp, rename, rm } from 'node:fs/promises';
|
|
3
|
+
import { constants } from 'node:fs';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { readPresetMetadata } from '@deepseek-ai/dsh-agent-presets';
|
|
6
|
+
export function displayCopy(language) {
|
|
7
|
+
return language.toLowerCase().startsWith('zh')
|
|
8
|
+
? { name: 'Super Code 模式', description: '更快、更省、更聪明的编码模式。' }
|
|
9
|
+
: { name: 'Super Code', description: 'A faster, more efficient, smarter coding mode.' };
|
|
10
|
+
}
|
|
11
|
+
const legacyDescriptions = [
|
|
12
|
+
'Coding with on-demand research, design, development, testing and optimization expertise.',
|
|
13
|
+
'A faster, more efficient, smarter coding mode.',
|
|
14
|
+
'更快、更省、更聪明的编码模式。',
|
|
15
|
+
'按需协同调研、设计、开发、测试与优化的编码助手。',
|
|
16
|
+
];
|
|
17
|
+
export async function migrateMetadata(path, id, current, previous, copy, beforeWrite = async () => { }) {
|
|
18
|
+
const baseline = {};
|
|
19
|
+
let original;
|
|
20
|
+
try {
|
|
21
|
+
if (!(await lstat(path)).isFile())
|
|
22
|
+
return { changed: false, baseline: previous ?? {} };
|
|
23
|
+
original = await readFile(path, 'utf8');
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.code === 'ENOENT')
|
|
27
|
+
return { changed: false, baseline: previous ?? {} };
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
// Discovery may predate a user edit; re-read the metadata before deciding ownership.
|
|
31
|
+
current = await readPresetMetadata(dirname(path));
|
|
32
|
+
let updated = original;
|
|
33
|
+
for (const field of ['name', 'description']) {
|
|
34
|
+
const value = current[field];
|
|
35
|
+
const managed = previous === undefined
|
|
36
|
+
? value !== undefined && (field === 'name'
|
|
37
|
+
? [id, 'Super Code', 'Super Code 模式', '超级编码'].includes(value)
|
|
38
|
+
: legacyDescriptions.includes(value))
|
|
39
|
+
: previous[field] !== undefined && value === previous[field];
|
|
40
|
+
if (!managed)
|
|
41
|
+
continue;
|
|
42
|
+
// A single top-level scalar only: preserve comments/unknown fields; leave
|
|
43
|
+
// aliases, multiline values and duplicate keys untouched for user review.
|
|
44
|
+
const pattern = new RegExp(`^${field}:[ \\t]*([^\\r\\n]*)$`, 'gm');
|
|
45
|
+
const matches = [...updated.matchAll(pattern)];
|
|
46
|
+
const match = matches[0];
|
|
47
|
+
if (matches.length !== 1 || !match || /^[>|&*]/.test(match[1].trim()))
|
|
48
|
+
continue;
|
|
49
|
+
baseline[field] = copy[field];
|
|
50
|
+
if (value === copy[field])
|
|
51
|
+
continue;
|
|
52
|
+
const comment = match[1].match(/\s+#.*$/)?.[0] ?? '';
|
|
53
|
+
updated = updated.replace(pattern, () => `${field}: ${JSON.stringify(copy[field])}${comment}`);
|
|
54
|
+
}
|
|
55
|
+
if (updated === original)
|
|
56
|
+
return { changed: false, baseline };
|
|
57
|
+
// Stage beside the original so interruption cannot leave a partial YAML file.
|
|
58
|
+
const staging = await mkdtemp(join(dirname(path), '.super-code-metadata-'));
|
|
59
|
+
try {
|
|
60
|
+
const temporary = join(staging, 'preset.yml');
|
|
61
|
+
const file = await open(temporary, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
|
|
62
|
+
try {
|
|
63
|
+
await file.writeFile(updated);
|
|
64
|
+
await file.sync();
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
await file.close();
|
|
68
|
+
}
|
|
69
|
+
if (!(await lstat(path)).isFile() || await readFile(path, 'utf8') !== original) {
|
|
70
|
+
throw new Error('Preset metadata changed during migration');
|
|
71
|
+
}
|
|
72
|
+
await beforeWrite(baseline);
|
|
73
|
+
// Persistence can await I/O; check once more before replacing the file.
|
|
74
|
+
if (await readFile(path, 'utf8') !== original)
|
|
75
|
+
throw new Error('Preset metadata changed during migration');
|
|
76
|
+
await rename(temporary, path);
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
await rm(staging, { recursive: true, force: true });
|
|
80
|
+
}
|
|
81
|
+
return { changed: true, baseline };
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=preset-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset-metadata.js","sourceRoot":"","sources":["../../src/dsh/preset-metadata.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-super-code",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "One super-code preset with specialist teams and durable task memory for DeepSeek Harness.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -46,18 +46,18 @@
|
|
|
46
46
|
"zod": "^4.4.3"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@deepseek-ai/dsh-agent": "^0.1.5-alpha.1",
|
|
50
|
-
"@deepseek-ai/dsh-agent-presets": "^0.1.5-alpha.1",
|
|
49
|
+
"@deepseek-ai/dsh-agent": "^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1",
|
|
50
|
+
"@deepseek-ai/dsh-agent-presets": "^0.1.5-alpha.1 || ^0.1.6-alpha.1",
|
|
51
51
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
52
|
-
"@deepseek-ai/dsh-llm": "^0.1.5-alpha.1",
|
|
53
|
-
"@deepseek-ai/dsh-session": "^0.1.5-alpha.1",
|
|
54
|
-
"@deepseek-ai/dsh-session-projection": "^0.1.5-alpha.1",
|
|
55
|
-
"@deepseek-ai/dsh-scope": "^0.1.5-alpha.1",
|
|
56
|
-
"@deepseek-ai/dsh-system-prompt": "^0.1.5-alpha.1",
|
|
57
|
-
"@deepseek-ai/dsh-tools": "^0.1.5-alpha.1",
|
|
52
|
+
"@deepseek-ai/dsh-llm": "^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1",
|
|
53
|
+
"@deepseek-ai/dsh-session": "^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1",
|
|
54
|
+
"@deepseek-ai/dsh-session-projection": "^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1",
|
|
55
|
+
"@deepseek-ai/dsh-scope": "^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1",
|
|
56
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1",
|
|
57
|
+
"@deepseek-ai/dsh-tools": "^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1",
|
|
58
58
|
"@deepseek-ai/schemastery": "^3.18.2",
|
|
59
|
-
"@deepseek-ai/dsh-settings": "^0.1.5-alpha.1",
|
|
60
|
-
"@deepseek-ai/dsh-typert-protocol": "^0.1.5-alpha.1"
|
|
59
|
+
"@deepseek-ai/dsh-settings": "^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1",
|
|
60
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1"
|
|
61
61
|
},
|
|
62
62
|
"peerDependenciesMeta": {
|
|
63
63
|
"@deepseek-ai/cordis": {
|