@chatcode/chatcode-cli 3.0.4 → 3.0.5-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +6 -6
- package/README.md +10 -4
- package/README.zh.md +10 -4
- package/lib/bin.js +23 -9
- package/lib/{command-errors-Ca64Lgba.js → command-errors-CsRCh0gk.js} +12 -12
- package/lib/{command-trees-CVc4Xu_z.js → command-trees-CD_43rxX.js} +2 -2
- package/lib/{component-identity-6aEut5Yt.js → component-identity-DGA2-TeB.js} +3 -3
- package/lib/{dump-config-ZzrfvtnX.js → dump-config-D8kXfdTs.js} +1 -1
- package/lib/dump-config-DuCc-QB7.js +2 -0
- package/lib/{dump-config-schema-BlO-eZ-J.js → dump-config-schema-CtZbroi6.js} +2 -2
- package/lib/{extension-events-C7MUpqVE.js → extension-events-D0BjYRqT.js} +21 -21
- package/lib/{host-access-CLbyAGT5.js → host-access-DLJjuR07.js} +1 -1
- package/lib/{keymap-82JwLLHe.js → keymap-C4cs2IBN.js} +2 -2
- package/lib/{plugin-BlQlWIR5.js → plugin-CGtTByud.js} +801 -456
- package/lib/{plugin-BZdazFXS.js → plugin-CYw-MBRn.js} +1 -1
- package/lib/{profile-boot-B0aEEQIR.js → profile-boot-CffsubnV.js} +7 -7
- package/lib/profile-boot.js +1 -1
- package/lib/{scenes-BNS0ZFyQ.js → scenes-CbAGK5Uy.js} +3 -3
- package/lib/{settings-sections-CXH24cu5.js → settings-sections-DYKDa04e.js} +3 -3
- package/lib/{statusBarSettings-BAMzn8fX.js → statusBarSettings-T1m8xad4.js} +3 -3
- package/lib/{themes-DXUIvP7m.js → themes-BY2ui1Dv.js} +12 -12
- package/lib/tui-compat-command-trees.js +1 -1
- package/lib/tui-compat-extensions.js +3 -3
- package/lib/tui-compat-plugin-host.js +5 -5
- package/lib/tui-compat-scenes.js +1 -1
- package/lib/tui-compat-settings-sections.js +1 -1
- package/lib/tui-compat-working-activity.js +1 -1
- package/lib/tui-compat-workspaces.js +1 -1
- package/lib/tui-compat.js +7 -7
- package/lib/types/bin.d.ts +9 -0
- package/lib/types/tui-compat.d.ts +1 -1
- package/lib/types/web-instance-process.d.ts +20 -0
- package/lib/{web-instance-DbP7IHPv.js → web-instance-D_Ppi2Zo.js} +176 -14
- package/lib/{web-instance-B0jec7cq.js → web-instance-amvCJWnq.js} +1 -1
- package/lib/{workspaces-CUJXNU5W.js → workspaces-D5VKbESy.js} +2 -2
- package/package.json +23 -24
- package/runtime/manifest.json +2 -2
- package/runtime/node_modules/@deepseek-ai/dsh-agent-default-model/lib/index.js +7 -3
- package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/client.js +11 -3
- package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/client/contract/snapshot.d.ts +1 -0
- package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/client/sessions/assistant-stream.d.ts +2 -0
- package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/client/sessions/assistant-stream.js +4 -0
- package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/client/sessions/session.js +10 -3
- package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/index.js +32 -11
- package/runtime/node_modules/@deepseek-ai/dsh-atomic-write/lib/index.js +62 -11
- package/runtime/node_modules/@deepseek-ai/dsh-atomic-write/lib/types/darwin-lock.d.ts +7 -0
- package/runtime/node_modules/@deepseek-ai/dsh-atomic-write/lib/types/index.d.ts +7 -2
- package/runtime/node_modules/@deepseek-ai/dsh-atomic-write/lib/types/linux-lock.d.ts +1 -1
- package/runtime/node_modules/@deepseek-ai/dsh-client-locale/lib/client.js +7 -7
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-agent-preset/lib/client.js +62 -62
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-approval/lib/client.js +10 -10
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-attachment/lib/client.js +49 -49
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-chat/lib/client.js +204 -204
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-commands/lib/client.js +16 -16
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js +159 -157
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/types/client/service.d.ts +4 -2
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-cordis/lib/client.js +74 -74
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/client.js +129 -123
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/index.js +19 -14
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/types/changes.d.ts +2 -2
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/types/client/Deliverables.d.ts +1 -2
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/types/client/locales.d.ts +2 -1
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/types/client/present-open.d.ts +1 -1
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/package.json +2 -4
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-directory-picker-browse/lib/client.js +39 -39
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-goal/lib/client.js +16 -16
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-input-trigger/lib/client.js +23 -23
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-jobs/lib/client.js +37 -37
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-layout/lib/client.js +9 -9
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-message-feedback/lib/client.js +12 -12
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/client.js +119 -32
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/catalog.d.ts +13 -0
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/directory.d.ts +2 -0
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/effort-preferences.d.ts +20 -0
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/slots.d.ts +2 -1
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-open-in-app/lib/client.js +8 -8
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-permission-presets/lib/client.js +18 -18
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-plan/lib/client.js +22 -22
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-plugin-manager/lib/client.js +128 -128
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-schedule/lib/client.js +182 -182
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-account/lib/client.js +130 -130
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/client.js +50 -50
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/client.js +88 -88
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/lib/client.js +36 -36
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-plugins/lib/client.js +13 -13
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-subagent/lib/client.js +27 -27
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-shortcuts/lib/client.js +42 -42
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar/lib/client.js +44 -44
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-browser/lib/client.js +25 -25
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/lib/client.excel.js +9 -9
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/lib/client.js +70 -70
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/lib/client.pdf.js +9 -9
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-files/lib/client.js +18 -18
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-right/lib/client.js +26 -26
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-terminal/lib/client.js +16 -16
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-terminal/lib/client.terminal.js +11 -11
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-skill/lib/client.js +20 -20
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-subagent/lib/client.js +37 -37
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-theme/lib/client.js +27 -27
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-tool/lib/client.js +95 -95
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-trajectory/lib/client.js +197 -197
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-user-questions/lib/client.js +49 -49
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workflow-run/lib/client.js +24 -24
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/client.js +656 -152
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/ArchivedSessions.d.ts +9 -2
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/locales.d.ts +46 -0
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/session-actions/DeleteSession.d.ts +9 -10
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/session-actions/deletion.d.ts +57 -0
- package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/package.json +2 -0
- package/runtime/node_modules/@deepseek-ai/dsh-experimental-client-ui-agent-team/lib/client.js +32 -32
- package/runtime/node_modules/@deepseek-ai/dsh-experimental-client-ui-voice-input/lib/client.js +24 -24
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/index.js +899 -453
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/adapter.d.ts +4 -20
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/adapter.d.ts +8 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/serialize.d.ts +10 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/sse.d.ts +24 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/translate.d.ts +37 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/types.d.ts +159 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/file-store.d.ts +3 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/files-api.d.ts +4 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/index.d.ts +1 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/protocol-adapter.d.ts +41 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/protocol.d.ts +35 -0
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/transport.d.ts +2 -1
- package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/types.d.ts +2 -2
- package/runtime/node_modules/@deepseek-ai/dsh-mcp-client/lib/index.js +5 -4
- package/runtime/node_modules/@deepseek-ai/dsh-session-log-export/lib/client.js +4 -4
- package/runtime/node_modules/@deepseek-ai/dsh-session-log-export/lib/index.js +1 -1
- package/runtime/node_modules/@deepseek-ai/dsh-session-persistence-jsonl/lib/index.js +2 -2
- package/runtime/node_modules/@deepseek-ai/dsh-tool-cordis/lib/types/api-catalog.js +12 -10
- package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/index.js +208 -39
- package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/archive.d.ts +47 -0
- package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/archive.js +129 -0
- package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/index.d.ts +2 -0
- package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/index.js +31 -8
- package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/recorder.d.ts +7 -2
- package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/recorder.js +35 -19
- package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/types.d.ts +11 -10
- package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/package.json +1 -0
- package/scripts/link-embedded-runtime.mjs +1 -1
- package/lib/dump-config-CDixiJNt.js +0 -2
- package/lib/{home-migration-BjDmRwBB.js → home-migration-lRjtl2fP.js} +1 -1
- package/lib/{startup-diagnostics-C_hRCp-q.js → startup-diagnostics-4mLHYTFc.js} +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chatcode/chatcode-cli",
|
|
3
3
|
"description": "ChatCode CLI: TUI-first coding agent, Web launcher, profiles, and legacy DSH-compatible plugins",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.5-rc.1",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@agentclientprotocol/sdk": "1.4.0",
|
|
30
30
|
"@babel/code-frame": "^7.29.0",
|
|
31
|
-
"@chatcode/cco-better-sidebar": "0.18.0-rc.
|
|
31
|
+
"@chatcode/cco-better-sidebar": "0.18.0-rc.12",
|
|
32
32
|
"@chatcode/cco-builtin-browser": "0.1.21",
|
|
33
33
|
"@chatcode/cco-chat-import": "0.17.0",
|
|
34
34
|
"@chatcode/cco-computer-use": "0.3.2",
|
|
35
|
-
"@chatcode/cco-llm-chatcode-config": "0.1.4-rc.
|
|
35
|
+
"@chatcode/cco-llm-chatcode-config": "0.1.4-rc.10",
|
|
36
36
|
"@chatcode/cco-market": "1.45.2-rc.4",
|
|
37
|
-
"@chatcode/cco-tui": "0.10.0-rc.
|
|
37
|
+
"@chatcode/cco-tui": "0.10.0-rc.22",
|
|
38
38
|
"@deepseek-ai/libreoffice-kit": "^0.1.1",
|
|
39
|
-
"@deepseek-harness-tui/dsh-tui": "npm:@chatcode/cco-tui@0.10.0-rc.
|
|
39
|
+
"@deepseek-harness-tui/dsh-tui": "npm:@chatcode/cco-tui@0.10.0-rc.22",
|
|
40
40
|
"@earendil-works/pi-ai": "^0.85.1",
|
|
41
41
|
"@eslint-community/regexpp": "^4.12.2",
|
|
42
42
|
"@joplin/turndown-plugin-gfm": "^1.0.67",
|
|
@@ -58,11 +58,10 @@
|
|
|
58
58
|
"commander": "^15.0.0",
|
|
59
59
|
"compression": "^1.8.1",
|
|
60
60
|
"diff": "^9.0.0",
|
|
61
|
-
"dsh-better-sidebar": "npm:@chatcode/cco-better-sidebar@0.18.0-rc.
|
|
61
|
+
"dsh-better-sidebar": "npm:@chatcode/cco-better-sidebar@0.18.0-rc.12",
|
|
62
62
|
"dsh-builtin-browser": "npm:@chatcode/cco-builtin-browser@0.1.21",
|
|
63
63
|
"dsh-chat-import": "npm:@chatcode/cco-chat-import@0.17.0",
|
|
64
64
|
"dsh-computer-use": "npm:@chatcode/cco-computer-use@0.3.2",
|
|
65
|
-
"dsh-llm-chatcode-config": "npm:@chatcode/cco-llm-chatcode-config@0.1.4-rc.9",
|
|
66
65
|
"dshmarket": "npm:@chatcode/cco-market@1.45.2-rc.4",
|
|
67
66
|
"eventsource-parser": "^3.1.0",
|
|
68
67
|
"execa": "^10.0.0",
|
|
@@ -97,44 +96,44 @@
|
|
|
97
96
|
"execa": "^10.0.0",
|
|
98
97
|
"ws": "8.21.0",
|
|
99
98
|
"@deepseek-ai/dsh-acp": "0.1.7-rc.2",
|
|
100
|
-
"@deepseek-ai/dsh-agent": "0.1.7-rc.2",
|
|
101
99
|
"@deepseek-ai/dsh-bash-local": "0.1.7-rc.2",
|
|
102
|
-
"@deepseek-ai/dsh-
|
|
103
|
-
"@deepseek-ai/dsh-
|
|
100
|
+
"@deepseek-ai/dsh-deepseek-llm-api-extensions": "0.1.7-rc.2",
|
|
101
|
+
"@deepseek-ai/dsh-agent": "0.1.7-rc.2",
|
|
104
102
|
"@deepseek-ai/dsh-attachment-local": "0.1.7-rc.2",
|
|
103
|
+
"@deepseek-ai/dsh-agent-loop": "0.1.7-rc.2",
|
|
105
104
|
"@deepseek-ai/dsh-experimental-agent-team": "0.1.7-rc.2",
|
|
106
|
-
"@deepseek-ai/dsh-deepseek-llm-api-extensions": "0.1.7-rc.2",
|
|
107
|
-
"@deepseek-ai/dsh-agent-loop-testkit": "0.1.7-rc.2",
|
|
108
105
|
"@deepseek-ai/dsh-experimental-tool-agent-team": "0.1.7-rc.2",
|
|
109
|
-
"@deepseek-ai/dsh-
|
|
110
|
-
"@deepseek-ai/dsh-
|
|
106
|
+
"@deepseek-ai/dsh-credentials-local": "0.1.7-rc.2",
|
|
107
|
+
"@deepseek-ai/dsh-agent-loop-testkit": "0.1.7-rc.2",
|
|
108
|
+
"@deepseek-ai/dsh-host-frontend-static": "0.1.7-rc.2",
|
|
111
109
|
"@deepseek-ai/dsh-fs-sandbox": "0.1.7-rc.2",
|
|
112
|
-
"@deepseek-ai/dsh-
|
|
113
|
-
"@deepseek-ai/dsh-llm-deepseek-account": "0.1.7-rc.2",
|
|
110
|
+
"@deepseek-ai/dsh-experimental-ptc-runtime-python": "0.1.7-rc.2",
|
|
114
111
|
"@deepseek-ai/dsh-llm": "0.1.7-rc.2",
|
|
112
|
+
"@deepseek-ai/dsh-host-webserver": "0.1.7-rc.2",
|
|
113
|
+
"@deepseek-ai/dsh-llm-deepseek-api-key": "0.1.7-rc.2",
|
|
114
|
+
"@deepseek-ai/dsh-fs-observation-policy": "0.1.7-rc.2",
|
|
115
115
|
"@deepseek-ai/dsh-llm-deepseek": "0.1.7-rc.2",
|
|
116
116
|
"@deepseek-ai/dsh-llm-mock-server": "0.1.7-rc.2",
|
|
117
117
|
"@deepseek-ai/dsh-llm-replay": "0.1.7-rc.2",
|
|
118
|
-
"@deepseek-ai/dsh-llm-pi-ai": "0.1.7-rc.2",
|
|
119
|
-
"@deepseek-ai/dsh-host-frontend-static": "0.1.7-rc.2",
|
|
120
118
|
"@deepseek-ai/dsh-loader-smoke": "0.1.7-rc.2",
|
|
119
|
+
"@deepseek-ai/dsh-llm-deepseek-account": "0.1.7-rc.2",
|
|
121
120
|
"@deepseek-ai/dsh-sandbox-local": "0.1.7-rc.2",
|
|
121
|
+
"@deepseek-ai/dsh-session": "0.1.7-rc.2",
|
|
122
|
+
"@deepseek-ai/dsh-llm-pi-ai": "0.1.7-rc.2",
|
|
122
123
|
"@deepseek-ai/dsh-plugin-package-inventory-deepseek": "0.1.7-rc.2",
|
|
123
124
|
"@deepseek-ai/dsh-sdk-client": "0.1.7-rc.2",
|
|
125
|
+
"@deepseek-ai/dsh-session-checkpoint-policy": "0.1.7-rc.2",
|
|
124
126
|
"@deepseek-ai/dsh-sandbox-policy": "0.1.7-rc.2",
|
|
127
|
+
"@deepseek-ai/dsh-session-persistence-jsonl": "0.1.7-rc.2",
|
|
125
128
|
"@deepseek-ai/dsh-session-log-deepseek": "0.1.7-rc.2",
|
|
126
|
-
"@deepseek-ai/dsh-session": "0.1.7-rc.2",
|
|
127
129
|
"@deepseek-ai/dsh-session-query": "0.1.7-rc.2",
|
|
128
|
-
"@deepseek-ai/dsh-
|
|
130
|
+
"@deepseek-ai/dsh-settings": "0.1.7-rc.2",
|
|
129
131
|
"@deepseek-ai/dsh-subagent-fork-in-process": "0.1.7-rc.2",
|
|
130
132
|
"@deepseek-ai/dsh-subagent": "0.1.7-rc.2",
|
|
131
133
|
"@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.7-rc.2",
|
|
132
|
-
"@deepseek-ai/dsh-settings": "0.1.7-rc.2",
|
|
133
|
-
"@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2",
|
|
134
134
|
"@deepseek-ai/dsh-shell-env": "0.1.7-rc.2",
|
|
135
135
|
"@deepseek-ai/dsh-subprocess-local": "0.1.7-rc.2",
|
|
136
|
-
"@deepseek-ai/dsh-
|
|
137
|
-
"@deepseek-ai/dsh-session-persistence-jsonl": "0.1.7-rc.2",
|
|
136
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2",
|
|
138
137
|
"@deepseek-ai/dsh-tools": "0.1.7-rc.2",
|
|
139
138
|
"@deepseek-ai/dsh-user-approval": "0.1.7-rc.2"
|
|
140
139
|
},
|
package/runtime/manifest.json
CHANGED
|
@@ -17,17 +17,19 @@ function selection(settings) {
|
|
|
17
17
|
...settings.reasoningEffort === void 0 ? {} : { reasoningEffort: ReasoningEffortId(settings.reasoningEffort) }
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
/** Parse
|
|
20
|
+
/** Parse a complete route, preferring nested effort metadata over legacy top-level metadata. */
|
|
21
21
|
function sharedPreference(path, warn) {
|
|
22
22
|
try {
|
|
23
23
|
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
24
24
|
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error("expected a model preference object");
|
|
25
25
|
const record = parsed;
|
|
26
26
|
if (typeof record.provider !== "string" || record.provider.length === 0 || typeof record.model !== "string" || record.model.length === 0) throw new Error("expected non-empty provider and model IDs");
|
|
27
|
+
const reasoning = record.reasoning;
|
|
28
|
+
const effort = reasoning === void 0 ? record.reasoningEffort : typeof reasoning === "object" && reasoning !== null && !Array.isArray(reasoning) ? reasoning.effort : void 0;
|
|
27
29
|
const route = selection({
|
|
28
30
|
provider: record.provider,
|
|
29
31
|
model: record.model,
|
|
30
|
-
...typeof
|
|
32
|
+
...typeof effort === "string" && effort.length > 0 ? { reasoningEffort: effort } : {}
|
|
31
33
|
});
|
|
32
34
|
const displayName = typeof record.displayName === "string" ? record.displayName.trim() : "";
|
|
33
35
|
return {
|
|
@@ -203,8 +205,10 @@ var AgentDefaultModelConfig = class extends Service {
|
|
|
203
205
|
const previous = this.sharedDisplayName();
|
|
204
206
|
let displayName = previous?.provider === config.provider && previous.model === config.model ? previous.name : void 0;
|
|
205
207
|
if (name?.trim()) displayName = name.trim();
|
|
208
|
+
const { reasoningEffort, ...route } = config;
|
|
206
209
|
const preference = {
|
|
207
|
-
...
|
|
210
|
+
...route,
|
|
211
|
+
...reasoningEffort === void 0 ? {} : { reasoning: { effort: reasoningEffort } },
|
|
208
212
|
...displayName === void 0 ? {} : { displayName }
|
|
209
213
|
};
|
|
210
214
|
const path = this.sharedPath;
|
|
@@ -1383,6 +1383,10 @@ window.__ModuleLoader__.load({
|
|
|
1383
1383
|
publishedSeqs = /* @__PURE__ */ new Set();
|
|
1384
1384
|
durableCursor = -1;
|
|
1385
1385
|
transientInGap = 0;
|
|
1386
|
+
/** Whether the followed Assistant attempt is still awaiting its terminal frame. */
|
|
1387
|
+
get streaming() {
|
|
1388
|
+
return this.activeAttempt !== void 0;
|
|
1389
|
+
}
|
|
1386
1390
|
/**
|
|
1387
1391
|
* Replace the durable Web window and adopt an optional reconnect baseline.
|
|
1388
1392
|
* @param entries - durable entries in the replacement window.
|
|
@@ -1683,7 +1687,7 @@ window.__ModuleLoader__.load({
|
|
|
1683
1687
|
*/
|
|
1684
1688
|
beginSubmission(input) {
|
|
1685
1689
|
const requestId = randomUUID();
|
|
1686
|
-
const placement = this.running ? input.mode === "steer" ? "steering" : "queued" : "transcript";
|
|
1690
|
+
const placement = this.getSnapshot().running ? input.mode === "steer" ? "steering" : "queued" : "transcript";
|
|
1687
1691
|
this.pendingSubmissions = [...this.pendingSubmissions, {
|
|
1688
1692
|
requestId,
|
|
1689
1693
|
placement,
|
|
@@ -2076,7 +2080,11 @@ window.__ModuleLoader__.load({
|
|
|
2076
2080
|
case "append":
|
|
2077
2081
|
this.publishAssistantEntry(this.assistantStream.acceptDurable(change.entry));
|
|
2078
2082
|
return;
|
|
2079
|
-
case "assistant-stream":
|
|
2083
|
+
case "assistant-stream": {
|
|
2084
|
+
const wasStreaming = this.assistantStream.streaming;
|
|
2085
|
+
this.publishAssistantEntry(this.assistantStream.acceptFrame(change.frame));
|
|
2086
|
+
if (wasStreaming !== this.assistantStream.streaming) this.notifier.markDirty();
|
|
2087
|
+
}
|
|
2080
2088
|
}
|
|
2081
2089
|
}
|
|
2082
2090
|
/** Replace the complete contiguous window and apply page-owned projection metadata. */
|
|
@@ -2275,7 +2283,7 @@ window.__ModuleLoader__.load({
|
|
|
2275
2283
|
return {
|
|
2276
2284
|
sessionId: this.sessionId,
|
|
2277
2285
|
pendingSubmissions: this.pendingSubmissions,
|
|
2278
|
-
running: this.running,
|
|
2286
|
+
running: this.running || this.openState !== "error" && this.assistantStream.streaming,
|
|
2279
2287
|
subagent: this.address === void 0 ? null : {
|
|
2280
2288
|
address: this.address.mode === "unknown" && identity != null ? {
|
|
2281
2289
|
...this.address,
|
|
@@ -59,6 +59,7 @@ export interface SessionSnapshot {
|
|
|
59
59
|
readonly sessionId: SessionId;
|
|
60
60
|
/** Local prompt-submission echoes not yet observed as durable events or queue occurrences. */
|
|
61
61
|
readonly pendingSubmissions: readonly PendingSubmission[];
|
|
62
|
+
/** Host Agent activity or an Assistant attempt on a usable follow stream that has not ended. */
|
|
62
63
|
readonly running: boolean;
|
|
63
64
|
readonly subagent: {
|
|
64
65
|
readonly address: SubagentAddress;
|
|
@@ -29,6 +29,8 @@ export declare class ClientAssistantStream {
|
|
|
29
29
|
private publishedSeqs;
|
|
30
30
|
private durableCursor;
|
|
31
31
|
private transientInGap;
|
|
32
|
+
/** Whether the followed Assistant attempt is still awaiting its terminal frame. */
|
|
33
|
+
get streaming(): boolean;
|
|
32
34
|
/**
|
|
33
35
|
* Replace the durable Web window and adopt an optional reconnect baseline.
|
|
34
36
|
* @param entries - durable entries in the replacement window.
|
|
@@ -8,6 +8,10 @@ export class ClientAssistantStream {
|
|
|
8
8
|
publishedSeqs = new Set();
|
|
9
9
|
durableCursor = -1;
|
|
10
10
|
transientInGap = 0;
|
|
11
|
+
/** Whether the followed Assistant attempt is still awaiting its terminal frame. */
|
|
12
|
+
get streaming() {
|
|
13
|
+
return this.activeAttempt !== undefined;
|
|
14
|
+
}
|
|
11
15
|
/**
|
|
12
16
|
* Replace the durable Web window and adopt an optional reconnect baseline.
|
|
13
17
|
* @param entries - durable entries in the replacement window.
|
|
@@ -147,7 +147,7 @@ export class Session {
|
|
|
147
147
|
*/
|
|
148
148
|
beginSubmission(input) {
|
|
149
149
|
const requestId = randomUUID();
|
|
150
|
-
const placement = this.running ? input.mode === 'steer' ? 'steering' : 'queued' : 'transcript';
|
|
150
|
+
const placement = this.getSnapshot().running ? input.mode === 'steer' ? 'steering' : 'queued' : 'transcript';
|
|
151
151
|
this.pendingSubmissions = [...this.pendingSubmissions, {
|
|
152
152
|
requestId,
|
|
153
153
|
placement,
|
|
@@ -573,8 +573,13 @@ export class Session {
|
|
|
573
573
|
case 'append':
|
|
574
574
|
this.publishAssistantEntry(this.assistantStream.acceptDurable(change.entry));
|
|
575
575
|
return;
|
|
576
|
-
case 'assistant-stream':
|
|
576
|
+
case 'assistant-stream': {
|
|
577
|
+
const wasStreaming = this.assistantStream.streaming;
|
|
577
578
|
this.publishAssistantEntry(this.assistantStream.acceptFrame(change.frame));
|
|
579
|
+
// Start/end frames can change activity without publishing a text entry.
|
|
580
|
+
if (wasStreaming !== this.assistantStream.streaming)
|
|
581
|
+
this.notifier.markDirty();
|
|
582
|
+
}
|
|
578
583
|
}
|
|
579
584
|
}
|
|
580
585
|
/** Replace the complete contiguous window and apply page-owned projection metadata. */
|
|
@@ -814,7 +819,9 @@ export class Session {
|
|
|
814
819
|
return {
|
|
815
820
|
sessionId: this.sessionId,
|
|
816
821
|
pendingSubmissions: this.pendingSubmissions,
|
|
817
|
-
|
|
822
|
+
// Host status and followed Assistant frames arrive independently. Keep
|
|
823
|
+
// the composer busy until the visible attempt receives its end frame.
|
|
824
|
+
running: this.running || (this.openState !== 'error' && this.assistantStream.streaming),
|
|
818
825
|
subagent: this.address === undefined
|
|
819
826
|
? null
|
|
820
827
|
: {
|
|
@@ -546,7 +546,7 @@ const PROFILE_TEMPLATES = {
|
|
|
546
546
|
cli: { bundles: [
|
|
547
547
|
"@deepseek-ai/dsh-base",
|
|
548
548
|
"@deepseek-harness-tui/dsh-tui",
|
|
549
|
-
"
|
|
549
|
+
"@chatcode/cco-llm-chatcode-config",
|
|
550
550
|
"dshmarket",
|
|
551
551
|
"dsh-computer-use"
|
|
552
552
|
] },
|
|
@@ -561,16 +561,37 @@ const INSTALLATION_OWNED_PROFILE_TUPLES = {
|
|
|
561
561
|
"@deepseek-ai/dsh-web-app",
|
|
562
562
|
"dshmarket"
|
|
563
563
|
]],
|
|
564
|
-
cli: [
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
564
|
+
cli: [
|
|
565
|
+
[
|
|
566
|
+
"@deepseek-ai/dsh-base",
|
|
567
|
+
"@deepseek-harness-tui/dsh-tui",
|
|
568
|
+
"@chatcode/cco-llm-chatcode-config"
|
|
569
|
+
],
|
|
570
|
+
[
|
|
571
|
+
"@deepseek-ai/dsh-base",
|
|
572
|
+
"@deepseek-harness-tui/dsh-tui",
|
|
573
|
+
"@chatcode/cco-llm-chatcode-config",
|
|
574
|
+
"dshmarket"
|
|
575
|
+
],
|
|
576
|
+
[
|
|
577
|
+
"@deepseek-ai/dsh-base",
|
|
578
|
+
"@deepseek-harness-tui/dsh-tui",
|
|
579
|
+
"dsh-llm-chatcode-config"
|
|
580
|
+
],
|
|
581
|
+
[
|
|
582
|
+
"@deepseek-ai/dsh-base",
|
|
583
|
+
"@deepseek-harness-tui/dsh-tui",
|
|
584
|
+
"dsh-llm-chatcode-config",
|
|
585
|
+
"dshmarket"
|
|
586
|
+
],
|
|
587
|
+
[
|
|
588
|
+
"@deepseek-ai/dsh-base",
|
|
589
|
+
"@deepseek-harness-tui/dsh-tui",
|
|
590
|
+
"dsh-llm-chatcode-config",
|
|
591
|
+
"dshmarket",
|
|
592
|
+
"dsh-computer-use"
|
|
593
|
+
]
|
|
594
|
+
],
|
|
574
595
|
headless: [[
|
|
575
596
|
"@deepseek-ai/dsh-base",
|
|
576
597
|
"@deepseek-ai/dsh-web-app",
|
|
@@ -3,11 +3,11 @@ import { link, lstat, mkdir, readFile, rename, rm, stat, writeFile } from "node:
|
|
|
3
3
|
import { dirname, win32 } from "node:path";
|
|
4
4
|
import { execFile } from "node:child_process";
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
|
-
import { closeSync, constants, fstatSync, lstatSync, openSync, readFileSync } from "node:fs";
|
|
6
|
+
import { closeSync, constants, fstatSync, lstatSync, openSync, readFileSync, readSync } from "node:fs";
|
|
7
7
|
import { constants as constants$1 } from "node:os";
|
|
8
8
|
//#region lib/types/windows-lock.js
|
|
9
9
|
/** Exclusive Windows inspection for an empty or zero-filled lock left by a failed creator. */
|
|
10
|
-
const execute = promisify(execFile);
|
|
10
|
+
const execute$1 = promisify(execFile);
|
|
11
11
|
/**
|
|
12
12
|
* Read a small lock only when no other handle has the file open.
|
|
13
13
|
* @param path - lock path, protected by the caller's takeover claim.
|
|
@@ -26,7 +26,7 @@ async function readUnopenedWindowsLock(path) {
|
|
|
26
26
|
"} finally { $file.Dispose() }"
|
|
27
27
|
].join("\n");
|
|
28
28
|
try {
|
|
29
|
-
const { stdout } = await execute(powershell, [
|
|
29
|
+
const { stdout } = await execute$1(powershell, [
|
|
30
30
|
"-NoLogo",
|
|
31
31
|
"-NoProfile",
|
|
32
32
|
"-NonInteractive",
|
|
@@ -111,7 +111,7 @@ async function readClosedLinuxLock(path) {
|
|
|
111
111
|
}
|
|
112
112
|
//#endregion
|
|
113
113
|
//#region lib/types/linux-lock.js
|
|
114
|
-
/** Linux writer identity and complete-record publication
|
|
114
|
+
/** Linux writer identity and complete-record publication on Linux and macOS. */
|
|
115
115
|
const RECORD = /^(\d+)\r?\n(?:linux ([a-f0-9-]{36}) (\d+) ([a-f0-9]{24})\n)?$/u;
|
|
116
116
|
let ownIdentity;
|
|
117
117
|
/** Read kernel identity without treating inaccessible procfs as evidence of an exited writer. */
|
|
@@ -142,13 +142,13 @@ async function writerLockRecord() {
|
|
|
142
142
|
return current === void 0 ? pid : `${pid}linux ${current} ${randomBytes(12).toString("hex")}\n`;
|
|
143
143
|
}
|
|
144
144
|
/**
|
|
145
|
-
* Exclusively publish a complete Linux identity record
|
|
145
|
+
* Exclusively publish a complete macOS PID or Linux identity record; other platforms use wx.
|
|
146
146
|
* @param path - lock sibling in an existing parent directory.
|
|
147
147
|
* @param record - one acquisition's record from writerLockRecord.
|
|
148
148
|
*/
|
|
149
149
|
async function createWriterLock(path, record) {
|
|
150
150
|
const nonce = RECORD.exec(record)?.[4];
|
|
151
|
-
if (process.platform !== "linux" || nonce === void 0) {
|
|
151
|
+
if (process.platform !== "darwin" && (process.platform !== "linux" || nonce === void 0)) {
|
|
152
152
|
await writeFile(path, record, {
|
|
153
153
|
mode: 384,
|
|
154
154
|
flag: "wx"
|
|
@@ -204,6 +204,52 @@ async function writerExited(record, path) {
|
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
//#endregion
|
|
207
|
+
//#region lib/types/darwin-lock.js
|
|
208
|
+
/** Read-only macOS inspection of incomplete legacy locks through the system lsof. */
|
|
209
|
+
const execute = promisify(execFile);
|
|
210
|
+
/**
|
|
211
|
+
* Read a small regular lock after lsof reports no open handles on its unchanged inode.
|
|
212
|
+
* @param path - existing lock path protected by the caller's takeover claim.
|
|
213
|
+
* @returns the record, or undefined when any handle, warning, or inspection failure remains.
|
|
214
|
+
*/
|
|
215
|
+
async function readClosedDarwinLock(path) {
|
|
216
|
+
let fd;
|
|
217
|
+
try {
|
|
218
|
+
const before = lstatSync(path);
|
|
219
|
+
if (!before.isFile() || before.size > 128) return void 0;
|
|
220
|
+
try {
|
|
221
|
+
await execute("/usr/sbin/lsof", [
|
|
222
|
+
"-nP",
|
|
223
|
+
"+w",
|
|
224
|
+
"-F",
|
|
225
|
+
"p",
|
|
226
|
+
"--",
|
|
227
|
+
path
|
|
228
|
+
], {
|
|
229
|
+
encoding: "utf8",
|
|
230
|
+
timeout: 2e3,
|
|
231
|
+
maxBuffer: 4096,
|
|
232
|
+
env: Object.fromEntries(Object.entries(process.env).filter(([name]) => !/KEY|SECRET|TOKEN|PASSWORD/i.test(name)))
|
|
233
|
+
});
|
|
234
|
+
return;
|
|
235
|
+
} catch (error) {
|
|
236
|
+
if (error === null || typeof error !== "object" || !("code" in error) || error.code !== 1 || !("killed" in error) || error.killed !== false || !("signal" in error) || error.signal !== null || !("stdout" in error) || error.stdout !== "" || !("stderr" in error) || error.stderr !== "") return void 0;
|
|
237
|
+
}
|
|
238
|
+
fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
239
|
+
const held = fstatSync(fd);
|
|
240
|
+
if (!held.isFile() || held.size > 128 || held.dev !== before.dev || held.ino !== before.ino) return void 0;
|
|
241
|
+
const bytes = Buffer.alloc(129);
|
|
242
|
+
const length = readSync(fd, bytes, 0, bytes.length, 0);
|
|
243
|
+
const current = lstatSync(path);
|
|
244
|
+
if (length > 128 || current.dev !== held.dev || current.ino !== held.ino) return void 0;
|
|
245
|
+
return bytes.toString("utf8", 0, length);
|
|
246
|
+
} catch (error) {
|
|
247
|
+
return;
|
|
248
|
+
} finally {
|
|
249
|
+
if (fd !== void 0) closeSync(fd);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//#endregion
|
|
207
253
|
//#region lib/types/index.js
|
|
208
254
|
/**
|
|
209
255
|
* Atomic file replacement and writer coordination.
|
|
@@ -218,7 +264,8 @@ async function writerExited(record, path) {
|
|
|
218
264
|
* recovers empty or zero-filled records after an exclusive read proves no
|
|
219
265
|
* creator still has the lock file open. Linux uses a read lease to exclude
|
|
220
266
|
* unfinished writers, and kernel process identity to distinguish a previous
|
|
221
|
-
* boot, reused PID, or zombie process.
|
|
267
|
+
* boot, reused PID, or zombie process. macOS inspects legacy damaged records
|
|
268
|
+
* with the system lsof and publishes complete new records by hard link.
|
|
222
269
|
* @module @deepseek-ai/dsh-atomic-write
|
|
223
270
|
*/
|
|
224
271
|
const WINDOWS_TRANSIENT_FILE_ERRORS = new Set([
|
|
@@ -311,7 +358,7 @@ async function readLockRecord(lockPath) {
|
|
|
311
358
|
}
|
|
312
359
|
}
|
|
313
360
|
/**
|
|
314
|
-
* Remove an exited holder's lock or a closed, damaged Windows or
|
|
361
|
+
* Remove an exited holder's lock or a closed, damaged Windows, Linux, or macOS lock. Contenders that read the
|
|
315
362
|
* same record serialize on a claim file named after it. Under the claim, the
|
|
316
363
|
* claimant re-reads the lock and probes its PID again, and removes it only
|
|
317
364
|
* when it still holds that record and that PID is still gone. A damaged
|
|
@@ -324,7 +371,7 @@ async function readLockRecord(lockPath) {
|
|
|
324
371
|
async function takeOverExitedLock(lockPath) {
|
|
325
372
|
const record = await readLockRecord(lockPath);
|
|
326
373
|
if (record === void 0) return false;
|
|
327
|
-
const damaged = (process.platform === "win32" || process.platform === "linux") && damagedRecord(record, process.platform === "
|
|
374
|
+
const damaged = (process.platform === "win32" || process.platform === "linux" || process.platform === "darwin") && damagedRecord(record, process.platform === "win32" ? 64 : 128);
|
|
328
375
|
const partialLinuxPid = process.platform === "linux" && /^\d{1,10}$/u.test(record);
|
|
329
376
|
if (!damaged && !partialLinuxPid && !await holderExited(record, lockPath)) return false;
|
|
330
377
|
const claim = `${lockPath}.takeover-${createHash("sha256").update(record).digest("hex").slice(0, 16)}`;
|
|
@@ -341,7 +388,7 @@ async function takeOverExitedLock(lockPath) {
|
|
|
341
388
|
try {
|
|
342
389
|
if (await readLockRecord(lockPath) !== record) return false;
|
|
343
390
|
if (damaged || partialLinuxPid) {
|
|
344
|
-
if ((process.platform === "win32" ? await readUnopenedWindowsLock(lockPath) : await readClosedLinuxLock(lockPath)) !== record) return false;
|
|
391
|
+
if ((process.platform === "win32" ? await readUnopenedWindowsLock(lockPath) : process.platform === "darwin" ? await readClosedDarwinLock(lockPath) : await readClosedLinuxLock(lockPath)) !== record) return false;
|
|
345
392
|
} else if (!await holderExited(record, lockPath)) return false;
|
|
346
393
|
try {
|
|
347
394
|
await rm(lockPath, { force: true });
|
|
@@ -386,7 +433,11 @@ const DEFAULT_LOCK_WAIT_MS = 2e3;
|
|
|
386
433
|
* exclusive inspection proves no creator still has the file open. A failed
|
|
387
434
|
* inspection preserves the lock. Linux also recovers empty or zero-filled
|
|
388
435
|
* records of at most 128 bytes and unfinished PID records after a read lease
|
|
389
|
-
* excludes open writers.
|
|
436
|
+
* excludes open writers. macOS recovers empty or zero-filled records up to
|
|
437
|
+
* 128 bytes only after the system lsof reports no open handles on the unchanged
|
|
438
|
+
* inode without warnings. Missing or failed inspection preserves the lock.
|
|
439
|
+
* New macOS records are published complete by exclusive hard link.
|
|
440
|
+
* Dead takeover claimants are recovered automatically.
|
|
390
441
|
* Windows lock release retries transient file interference for a bounded interval. Contention backs
|
|
391
442
|
* off exponentially and times out after the deadline. Linux identity records
|
|
392
443
|
* distinguish PID reuse, a previous boot, and zombies. Legacy PID-only records
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read a small regular lock after lsof reports no open handles on its unchanged inode.
|
|
3
|
+
* @param path - existing lock path protected by the caller's takeover claim.
|
|
4
|
+
* @returns the record, or undefined when any handle, warning, or inspection failure remains.
|
|
5
|
+
*/
|
|
6
|
+
export declare function readClosedDarwinLock(path: string): Promise<string | undefined>;
|
|
7
|
+
//# sourceMappingURL=darwin-lock.d.ts.map
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* recovers empty or zero-filled records after an exclusive read proves no
|
|
12
12
|
* creator still has the lock file open. Linux uses a read lease to exclude
|
|
13
13
|
* unfinished writers, and kernel process identity to distinguish a previous
|
|
14
|
-
* boot, reused PID, or zombie process.
|
|
14
|
+
* boot, reused PID, or zombie process. macOS inspects legacy damaged records
|
|
15
|
+
* with the system lsof and publishes complete new records by hard link.
|
|
15
16
|
* @module @deepseek-ai/dsh-atomic-write
|
|
16
17
|
*/
|
|
17
18
|
/**
|
|
@@ -76,7 +77,11 @@ export interface FileLockOptions {
|
|
|
76
77
|
* exclusive inspection proves no creator still has the file open. A failed
|
|
77
78
|
* inspection preserves the lock. Linux also recovers empty or zero-filled
|
|
78
79
|
* records of at most 128 bytes and unfinished PID records after a read lease
|
|
79
|
-
* excludes open writers.
|
|
80
|
+
* excludes open writers. macOS recovers empty or zero-filled records up to
|
|
81
|
+
* 128 bytes only after the system lsof reports no open handles on the unchanged
|
|
82
|
+
* inode without warnings. Missing or failed inspection preserves the lock.
|
|
83
|
+
* New macOS records are published complete by exclusive hard link.
|
|
84
|
+
* Dead takeover claimants are recovered automatically.
|
|
80
85
|
* Windows lock release retries transient file interference for a bounded interval. Contention backs
|
|
81
86
|
* off exponentially and times out after the deadline. Linux identity records
|
|
82
87
|
* distinguish PID reuse, a previous boot, and zombies. Legacy PID-only records
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export declare function writerLockRecord(): Promise<string>;
|
|
6
6
|
/**
|
|
7
|
-
* Exclusively publish a complete Linux identity record
|
|
7
|
+
* Exclusively publish a complete macOS PID or Linux identity record; other platforms use wx.
|
|
8
8
|
* @param path - lock sibling in an existing parent directory.
|
|
9
9
|
* @param record - one acquisition's record from writerLockRecord.
|
|
10
10
|
*/
|
|
@@ -1023,8 +1023,8 @@ window.__ModuleLoader__.load({
|
|
|
1023
1023
|
/** English dictionary, checked complete against the zh key set. */
|
|
1024
1024
|
const en = { "language.title": "Language" };
|
|
1025
1025
|
//#endregion
|
|
1026
|
-
//#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/
|
|
1027
|
-
const css = ".
|
|
1026
|
+
//#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/chatcode-cli-harness/packages/client/locale/src/client/LanguageRow.module.css.mjs
|
|
1027
|
+
const css = "._0iSwzW_row{border-bottom:.5px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}._0iSwzW_rowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}._0iSwzW_title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}._0iSwzW_selector{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}._0iSwzW_selector:hover{background:var(--dsw-alias-interactive-bg-hover)}._0iSwzW_chevron{flex:none}";
|
|
1028
1028
|
const tagId = "@deepseek-ai/dsh-client-locale/LanguageRow.module.css";
|
|
1029
1029
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
1030
1030
|
const tag = document.createElement("style");
|
|
@@ -1034,11 +1034,11 @@ window.__ModuleLoader__.load({
|
|
|
1034
1034
|
document.head.appendChild(tag);
|
|
1035
1035
|
}
|
|
1036
1036
|
var LanguageRow_module_css_default = {
|
|
1037
|
-
"chevron": "
|
|
1038
|
-
"row": "
|
|
1039
|
-
"rowText": "
|
|
1040
|
-
"selector": "
|
|
1041
|
-
"title": "
|
|
1037
|
+
"chevron": "_0iSwzW_chevron",
|
|
1038
|
+
"row": "_0iSwzW_row",
|
|
1039
|
+
"rowText": "_0iSwzW_rowText",
|
|
1040
|
+
"selector": "_0iSwzW_selector",
|
|
1041
|
+
"title": "_0iSwzW_title"
|
|
1042
1042
|
};
|
|
1043
1043
|
//#endregion
|
|
1044
1044
|
//#region lib/types/client/LanguageRow.js
|