coding-tool-x 3.8.7 → 3.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/web/assets/{AgentsDrawer-C7ePByZx.js → AgentsDrawer-DRQuwi0m.js} +1 -1
  2. package/dist/web/assets/Analytics-Cf5KwEdj.js +1 -0
  3. package/dist/web/assets/AssetPathField-DyniM0pF.js +1 -0
  4. package/dist/web/assets/{ChatHistoryDrawer-Ccl4rhdz.js → ChatHistoryDrawer-CrfS0KYV.js} +1 -1
  5. package/dist/web/assets/{CollapseItem-MxG_UD4o.js → CollapseItem-ClMsJuUu.js} +1 -1
  6. package/dist/web/assets/{CommandsDrawer-DWbaxHRZ.js → CommandsDrawer-CzHelf56.js} +1 -1
  7. package/dist/web/assets/ConfigExportDrawer-BEZ8wTby.js +1 -0
  8. package/dist/web/assets/ConfigTemplates-Crg3xWe5.js +1 -0
  9. package/dist/web/assets/{ConfigTemplatesDrawer-CKMFsfEF.js → ConfigTemplatesDrawer-BqM32Im7.js} +1 -1
  10. package/dist/web/assets/{ConfigTemplatesPanel-Cvbnkvpt.js → ConfigTemplatesPanel-lTdutC8H.js} +1 -1
  11. package/dist/web/assets/{Divider-D28g1gwj.js → Divider-DsdbkHrG.js} +1 -1
  12. package/dist/web/assets/{FavoritesDrawer-DA-dR_vP.js → FavoritesDrawer-DDyWUBJR.js} +1 -1
  13. package/dist/web/assets/Forward-DLCL7aMY.js +1 -0
  14. package/dist/web/assets/{GatewayConvertDrawer-402_raGb.js → GatewayConvertDrawer-Rigtt_5J.js} +1 -1
  15. package/dist/web/assets/Home-tCSKmSHV.js +1 -0
  16. package/dist/web/assets/{MarkdownEditor-BvkDECwH.js → MarkdownEditor-BMMUufSc.js} +1 -1
  17. package/dist/web/assets/McpDrawer-CmE-d7VW.js +1 -0
  18. package/dist/web/assets/{McpFormDrawer-DPMnyt5L.js → McpFormDrawer-ByvS18od.js} +1 -1
  19. package/dist/web/assets/{PluginManager-FKVeugr4.js → PluginManager-C4kJlpVX.js} +1 -1
  20. package/dist/web/assets/{PluginsDrawer-MvM1R55d.js → PluginsDrawer-05R4k15x.js} +1 -1
  21. package/dist/web/assets/PluginsPanel-BCoEs7Og.js +1 -0
  22. package/dist/web/assets/PluginsPanel-CzGMK-Ap.css +1 -0
  23. package/dist/web/assets/ProjectList-BJt1OIaI.js +1 -0
  24. package/dist/web/assets/ProjectList-DG3yu8xZ.css +1 -0
  25. package/dist/web/assets/PromptsDrawer-DnwBf_oW.js +1 -0
  26. package/dist/web/assets/RecentSessionsDrawer-B7d-38wH.js +1 -0
  27. package/dist/web/assets/RecentSessionsDrawer-yrAD4p1A.css +1 -0
  28. package/dist/web/assets/SessionCard-BUgjHQwX.js +1 -0
  29. package/dist/web/assets/SessionList-B-bXZRFk.js +1 -0
  30. package/dist/web/assets/SessionList-qG_XpPBJ.css +1 -0
  31. package/dist/web/assets/{SettingsDrawer-lMjttbkD.js → SettingsDrawer-BITzjQLl.js} +1 -1
  32. package/dist/web/assets/SkillManager-D9jkNuRM.js +1 -0
  33. package/dist/web/assets/{SkillsDrawer-DF6JsSyj.js → SkillsDrawer-0Z4IefxC.js} +1 -1
  34. package/dist/web/assets/SkillsPanel-BKIVOj7n.js +1 -0
  35. package/dist/web/assets/{SkillsPanel-B3Nm5j32.css → SkillsPanel-C4ke56nF.css} +1 -1
  36. package/dist/web/assets/{SpeedTestDrawer-BaZkZqPP.js → SpeedTestDrawer-Bx1bYf5i.js} +1 -1
  37. package/dist/web/assets/Upload-CzC4rGI4.js +1 -0
  38. package/dist/web/assets/{WorkspaceDrawer-BFSwZ5yU.js → WorkspaceDrawer-eujtWpoq.js} +1 -1
  39. package/dist/web/assets/{WorkspaceManager-BHL1uYct.js → WorkspaceManager-CQ-8Ej68.js} +1 -1
  40. package/dist/web/assets/{WorkspacePanel-B5PooBtg.js → WorkspacePanel-Cql5qE2R.js} +1 -1
  41. package/dist/web/assets/headers-BqDmkMjy.js +1 -0
  42. package/dist/web/assets/{icons-B2Vg-IOC.js → icons-DmFe4b5j.js} +1 -1
  43. package/dist/web/assets/index-Cmmwj3Fx.js +2 -0
  44. package/dist/web/assets/{index-BohDDAy_.css → index-Cnbe696C.css} +1 -1
  45. package/dist/web/assets/{light-Cp0t7v32.js → light-0eavxNvt.js} +1 -1
  46. package/dist/web/assets/platforms-BmzzwnSw.js +1 -0
  47. package/dist/web/assets/platforms-DWXgmy2w.js +1 -0
  48. package/dist/web/assets/session-visibility-BAmxh3cK.js +1 -0
  49. package/dist/web/assets/sessions-D4yQtfKb.js +1 -0
  50. package/dist/web/assets/sessions-DqlbocLJ.js +1 -0
  51. package/dist/web/assets/use-message-DqCwefG6.js +1 -0
  52. package/dist/web/assets/{useResponsiveDrawer-D-DDpbnI.js → useResponsiveDrawer-DZd5rNk5.js} +1 -1
  53. package/dist/web/index.html +7 -7
  54. package/package.json +1 -1
  55. package/src/commands/search.js +17 -2
  56. package/src/config/paths.js +2 -0
  57. package/src/platforms/driver-registry.js +9 -1
  58. package/src/platforms/drivers/claude/session-history-adapter.js +72 -1
  59. package/src/platforms/drivers/claude/sessions-implementation.js +49 -7
  60. package/src/platforms/drivers/claude/sessions.js +30 -6
  61. package/src/platforms/drivers/codex/parser.js +57 -1
  62. package/src/platforms/drivers/codex/session-history-adapter.js +8 -2
  63. package/src/platforms/drivers/codex/sessions-implementation.js +25 -3
  64. package/src/platforms/drivers/codex/sessions.js +18 -1
  65. package/src/platforms/drivers/dsh/api-operations.js +396 -0
  66. package/src/platforms/drivers/dsh/channels-implementation.js +458 -0
  67. package/src/platforms/drivers/dsh/channels.js +191 -0
  68. package/src/platforms/drivers/dsh/common.js +571 -0
  69. package/src/platforms/drivers/dsh/native-config.js +93 -0
  70. package/src/platforms/drivers/dsh/native-logs.js +116 -0
  71. package/src/platforms/drivers/dsh/plugin-manager.js +117 -0
  72. package/src/platforms/drivers/dsh/projects.js +23 -0
  73. package/src/platforms/drivers/dsh/proxy-implementation.js +260 -0
  74. package/src/platforms/drivers/dsh/proxy.js +23 -0
  75. package/src/platforms/drivers/dsh/resources.js +346 -0
  76. package/src/platforms/drivers/dsh/sessions.js +587 -0
  77. package/src/platforms/drivers/dsh/statistics-implementation.js +238 -0
  78. package/src/platforms/drivers/dsh/statistics.js +24 -0
  79. package/src/platforms/drivers/gemini/session-history-adapter.js +49 -1
  80. package/src/platforms/drivers/gemini/sessions-implementation.js +46 -1
  81. package/src/platforms/drivers/gemini/sessions.js +2 -1
  82. package/src/platforms/drivers/omp/session-history-adapter.js +42 -1
  83. package/src/platforms/drivers/omp/sessions-implementation.js +51 -3
  84. package/src/platforms/drivers/omp/sessions.js +33 -2
  85. package/src/platforms/drivers/opencode/sessions-implementation.js +89 -9
  86. package/src/platforms/drivers/opencode/sessions.js +37 -1
  87. package/src/platforms/manifest-schema.js +43 -3
  88. package/src/platforms/manifests/dsh.json +542 -0
  89. package/src/platforms/path-resolver.js +2 -0
  90. package/src/platforms/platform-path-context.js +12 -2
  91. package/src/platforms/registry.js +16 -1
  92. package/src/platforms/runtime.js +5 -0
  93. package/src/platforms/session-history-adapters.js +1 -0
  94. package/src/server/api/platform-api-config.js +23 -2
  95. package/src/server/api/platform-route-factory.js +9 -2
  96. package/src/server/api/platforms.js +19 -1
  97. package/src/server/api/plugins.js +108 -13
  98. package/src/server/services/config-registry-service.js +10 -1
  99. package/src/server/services/config-templates-service.js +1 -0
  100. package/src/server/services/plugins-service.js +474 -103
  101. package/src/server/services/session-history-index.js +900 -140
  102. package/src/server/services/session-history-worker.js +3 -1
  103. package/src/server/services/skill-service.js +214 -7
  104. package/src/server/services/usage-log-utils.js +1 -0
  105. package/src/server/services/workspace-service.js +39 -10
  106. package/src/shared/driver-factories/api.js +22 -6
  107. package/src/shared/driver-factories/projects.js +8 -0
  108. package/dist/web/assets/Analytics-BVG6ehFv.js +0 -1
  109. package/dist/web/assets/AssetPathField-BZI9NvEr.js +0 -1
  110. package/dist/web/assets/ConfigExportDrawer-DrawKwxE.js +0 -1
  111. package/dist/web/assets/ConfigTemplates-AiRPv2cd.js +0 -1
  112. package/dist/web/assets/Home-CTF8ZWKW.js +0 -1
  113. package/dist/web/assets/McpDrawer-DZGHkuDm.js +0 -1
  114. package/dist/web/assets/PluginsPanel-CKuBs38B.js +0 -1
  115. package/dist/web/assets/PluginsPanel-D6ZqITcR.css +0 -1
  116. package/dist/web/assets/ProjectList-677RLZ8O.css +0 -1
  117. package/dist/web/assets/ProjectList-tsjwjXV1.js +0 -1
  118. package/dist/web/assets/PromptsDrawer-B-X9ci8n.js +0 -1
  119. package/dist/web/assets/RecentSessionsDrawer-CKFsOYDM.css +0 -1
  120. package/dist/web/assets/RecentSessionsDrawer-wLktMF_c.js +0 -1
  121. package/dist/web/assets/SessionCard-DkJPy0TY.js +0 -1
  122. package/dist/web/assets/SessionList-BpYRz1cX.css +0 -1
  123. package/dist/web/assets/SessionList-Gzhh4FOZ.js +0 -1
  124. package/dist/web/assets/SkillManager-CzFxWxx-.js +0 -1
  125. package/dist/web/assets/SkillsPanel--lLEts9y.js +0 -1
  126. package/dist/web/assets/Upload-BEQ-3Kqq.js +0 -1
  127. package/dist/web/assets/headers-cf-QapUq.js +0 -1
  128. package/dist/web/assets/index-BFInlZGI.js +0 -2
  129. package/dist/web/assets/platforms-CBkB45JP.js +0 -1
  130. package/dist/web/assets/platforms-FTpjxAT6.js +0 -1
  131. package/dist/web/assets/sessions-Cmy31slD.js +0 -1
  132. package/dist/web/assets/sessions-yC_oVVh8.js +0 -1
  133. package/dist/web/assets/use-message-DoLM8C1C.js +0 -1
@@ -0,0 +1,542 @@
1
+ {
2
+ "key": "dsh",
3
+ "title": "DeepSeek Harness",
4
+ "label": "DSH",
5
+ "command": "dsh",
6
+ "iconToken": "terminal",
7
+ "color": "#2563eb",
8
+ "defaultVisible": true,
9
+ "defaultEnabled": false,
10
+ "sortOrder": 50,
11
+ "modelConfig": { "catalogKey": "dsh" },
12
+ "helpLabel": "DSH 本地配置与会话",
13
+ "cliSelectable": false,
14
+ "portKey": "dshProxy",
15
+ "defaultPort": 20093,
16
+ "proxyMode": "managed",
17
+ "proxyLabels": {
18
+ "serviceLabel": "DSH 动态代理",
19
+ "proxyLabel": "动态切换",
20
+ "startAction": "启动",
21
+ "stopAction": "停止",
22
+ "portLabel": "代理端口"
23
+ },
24
+ "pathResolverId": "dsh",
25
+ "resourceTypes": {
26
+ "skills": true,
27
+ "commands": false,
28
+ "agents": false,
29
+ "plugins": true,
30
+ "mcp": true,
31
+ "prompts": true
32
+ },
33
+ "resourceActions": {
34
+ "skills": {
35
+ "create": false,
36
+ "repositories": true,
37
+ "import": false,
38
+ "refresh": true
39
+ },
40
+ "plugins": {
41
+ "repositories": true,
42
+ "market": false,
43
+ "install": false,
44
+ "uninstall": false,
45
+ "import": false,
46
+ "syncRepos": false
47
+ }
48
+ },
49
+ "agentCapabilities": {
50
+ "projectScope": false,
51
+ "repoOperations": false
52
+ },
53
+ "api": {
54
+ "prefix": "dsh",
55
+ "routes": [
56
+ {
57
+ "method": "GET",
58
+ "path": "/projects",
59
+ "capability": "projects",
60
+ "operation": "listProjects",
61
+ "request": "default",
62
+ "response": "projects-list"
63
+ },
64
+ {
65
+ "method": "POST",
66
+ "path": "/projects/order",
67
+ "capability": "projects",
68
+ "operation": "saveProjectOrder",
69
+ "request": "default",
70
+ "response": "default"
71
+ },
72
+ {
73
+ "method": "DELETE",
74
+ "path": "/projects/:projectName",
75
+ "capability": "projects",
76
+ "operation": "deleteProject",
77
+ "request": "default",
78
+ "response": "default"
79
+ },
80
+ {
81
+ "method": "GET",
82
+ "path": "/sessions/:projectName",
83
+ "capability": "sessions",
84
+ "operation": "listSessions",
85
+ "request": "default",
86
+ "response": "sessions-list"
87
+ },
88
+ {
89
+ "method": "GET",
90
+ "path": "/sessions/search/global",
91
+ "capability": "sessions",
92
+ "operation": "searchAcrossProjects",
93
+ "request": "default",
94
+ "response": "sessions-list"
95
+ },
96
+ {
97
+ "method": "GET",
98
+ "path": "/sessions/recent/list",
99
+ "capability": "sessions",
100
+ "operation": "recent",
101
+ "request": "default",
102
+ "response": "sessions-list"
103
+ },
104
+ {
105
+ "method": "GET",
106
+ "path": "/sessions/:projectName/search",
107
+ "capability": "sessions",
108
+ "operation": "search",
109
+ "request": "default",
110
+ "response": "sessions-list"
111
+ },
112
+ {
113
+ "method": "GET",
114
+ "path": "/sessions/:projectName/:sessionId/status",
115
+ "capability": "sessions",
116
+ "operation": "status",
117
+ "request": "default",
118
+ "response": "default"
119
+ },
120
+ {
121
+ "method": "GET",
122
+ "path": "/sessions/:projectName/:sessionId/outline",
123
+ "capability": "sessions",
124
+ "operation": "outline",
125
+ "request": "default",
126
+ "response": "default"
127
+ },
128
+ {
129
+ "method": "GET",
130
+ "path": "/sessions/:projectName/:sessionId/messages",
131
+ "capability": "sessions",
132
+ "operation": "messages",
133
+ "request": "default",
134
+ "response": "default"
135
+ },
136
+ {
137
+ "method": "DELETE",
138
+ "path": "/sessions/:projectName/:sessionId",
139
+ "capability": "sessions",
140
+ "operation": "delete",
141
+ "request": "default",
142
+ "response": "default"
143
+ },
144
+ {
145
+ "method": "POST",
146
+ "path": "/sessions/:projectName/batch-delete",
147
+ "capability": "sessions",
148
+ "operation": "batchDelete",
149
+ "request": "default",
150
+ "response": "default"
151
+ },
152
+ {
153
+ "method": "POST",
154
+ "path": "/sessions/:projectName/:sessionId/fork",
155
+ "capability": "sessions",
156
+ "operation": "fork",
157
+ "request": "default",
158
+ "response": "default"
159
+ },
160
+ {
161
+ "method": "POST",
162
+ "path": "/sessions/:projectName/order",
163
+ "capability": "sessions",
164
+ "operation": "saveSessionOrder",
165
+ "request": "default",
166
+ "response": "default"
167
+ },
168
+ {
169
+ "method": "POST",
170
+ "path": "/sessions/:projectName/:sessionId/launch",
171
+ "capability": "sessions",
172
+ "operation": "launch",
173
+ "request": "default",
174
+ "response": "default"
175
+ },
176
+ {
177
+ "method": "GET",
178
+ "path": "/channels",
179
+ "capability": "channels",
180
+ "operation": "list",
181
+ "request": "default",
182
+ "response": "default"
183
+ },
184
+ {
185
+ "method": "GET",
186
+ "path": "/channels/current",
187
+ "capability": "channels",
188
+ "operation": "current",
189
+ "request": "default",
190
+ "response": "default"
191
+ },
192
+ {
193
+ "method": "GET",
194
+ "path": "/channels/enabled",
195
+ "capability": "channels",
196
+ "operation": "enabled",
197
+ "request": "default",
198
+ "response": "default"
199
+ },
200
+ {
201
+ "method": "POST",
202
+ "path": "/channels",
203
+ "capability": "channels",
204
+ "operation": "create",
205
+ "request": "default",
206
+ "response": "default"
207
+ },
208
+ {
209
+ "method": "PUT",
210
+ "path": "/channels/:channelId",
211
+ "capability": "channels",
212
+ "operation": "update",
213
+ "request": "default",
214
+ "response": "default"
215
+ },
216
+ {
217
+ "method": "DELETE",
218
+ "path": "/channels/:channelId",
219
+ "capability": "channels",
220
+ "operation": "remove",
221
+ "request": "default",
222
+ "response": "default"
223
+ },
224
+ {
225
+ "method": "POST",
226
+ "path": "/channels/:channelId/apply",
227
+ "capability": "channels",
228
+ "operation": "applyToSettings",
229
+ "request": "default",
230
+ "response": "default"
231
+ },
232
+ {
233
+ "method": "POST",
234
+ "path": "/channels/sync",
235
+ "capability": "channels",
236
+ "operation": "sync",
237
+ "request": "default",
238
+ "response": "default"
239
+ },
240
+ {
241
+ "method": "GET",
242
+ "path": "/channels/:channelId/models",
243
+ "capability": "channels",
244
+ "operation": "models",
245
+ "request": "default",
246
+ "response": "default"
247
+ },
248
+ {
249
+ "method": "POST",
250
+ "path": "/channels/:channelId/speed-test",
251
+ "capability": "channels",
252
+ "operation": "speedTest",
253
+ "request": "default",
254
+ "response": "default"
255
+ },
256
+ {
257
+ "method": "POST",
258
+ "path": "/channels/speed-test-all",
259
+ "capability": "channels",
260
+ "operation": "speedTestAll",
261
+ "request": "default",
262
+ "response": "default"
263
+ },
264
+ {
265
+ "method": "POST",
266
+ "path": "/channels/probe-models",
267
+ "capability": "channels",
268
+ "operation": "probeModels",
269
+ "request": "default",
270
+ "response": "default"
271
+ },
272
+ {
273
+ "method": "POST",
274
+ "path": "/channels/order",
275
+ "capability": "channels",
276
+ "operation": "order",
277
+ "request": "default",
278
+ "response": "default"
279
+ },
280
+ {
281
+ "method": "GET",
282
+ "path": "/proxy/status",
283
+ "capability": "proxy",
284
+ "operation": "status",
285
+ "request": "default",
286
+ "response": "default"
287
+ },
288
+ {
289
+ "method": "POST",
290
+ "path": "/proxy/start",
291
+ "capability": "proxy",
292
+ "operation": "start",
293
+ "request": "default",
294
+ "response": "default"
295
+ },
296
+ {
297
+ "method": "POST",
298
+ "path": "/proxy/stop",
299
+ "capability": "proxy",
300
+ "operation": "stop",
301
+ "request": "default",
302
+ "response": "default"
303
+ },
304
+ {
305
+ "method": "GET",
306
+ "path": "/statistics/summary",
307
+ "capability": "statistics",
308
+ "operation": "summary",
309
+ "request": "default",
310
+ "response": "default"
311
+ },
312
+ {
313
+ "method": "GET",
314
+ "path": "/statistics/today",
315
+ "capability": "statistics",
316
+ "operation": "today",
317
+ "request": "default",
318
+ "response": "default"
319
+ },
320
+ {
321
+ "method": "GET",
322
+ "path": "/statistics/daily/:date",
323
+ "capability": "statistics",
324
+ "operation": "daily",
325
+ "request": "default",
326
+ "response": "default"
327
+ },
328
+ {
329
+ "method": "GET",
330
+ "path": "/config",
331
+ "capability": "api",
332
+ "operation": "getConfig",
333
+ "request": "default",
334
+ "response": "default"
335
+ },
336
+ {
337
+ "method": "PATCH",
338
+ "path": "/config/settings",
339
+ "capability": "api",
340
+ "operation": "updateConfig",
341
+ "request": "default",
342
+ "response": "default"
343
+ },
344
+ {
345
+ "method": "GET",
346
+ "path": "/config/capabilities",
347
+ "capability": "api",
348
+ "operation": "getConfigCapabilities",
349
+ "request": "default",
350
+ "response": "default"
351
+ },
352
+ {
353
+ "method": "GET",
354
+ "path": "/config/auth-providers",
355
+ "capability": "api",
356
+ "operation": "getConfigAuthProviders",
357
+ "request": "default",
358
+ "response": "default"
359
+ },
360
+ {
361
+ "method": "GET",
362
+ "path": "/config/resources",
363
+ "capability": "api",
364
+ "operation": "getConfigResources",
365
+ "request": "default",
366
+ "response": "default"
367
+ },
368
+ {
369
+ "method": "GET",
370
+ "path": "/profiles",
371
+ "capability": "api",
372
+ "operation": "listProfiles",
373
+ "request": "default",
374
+ "response": "default"
375
+ },
376
+ {
377
+ "method": "GET",
378
+ "path": "/plugins",
379
+ "capability": "api",
380
+ "operation": "listPlugins",
381
+ "request": "default",
382
+ "response": "default"
383
+ },
384
+ {
385
+ "method": "GET",
386
+ "path": "/profiles/:profileName/plugins",
387
+ "capability": "api",
388
+ "operation": "listProfilePlugins",
389
+ "request": "default",
390
+ "response": "default"
391
+ },
392
+ {
393
+ "method": "POST",
394
+ "path": "/profiles/:profileName/plugins/install",
395
+ "capability": "api",
396
+ "operation": "installPlugin",
397
+ "request": "default",
398
+ "response": "default"
399
+ },
400
+ {
401
+ "method": "DELETE",
402
+ "path": "/profiles/:profileName/plugins/:pluginName",
403
+ "capability": "api",
404
+ "operation": "uninstallPlugin",
405
+ "request": "default",
406
+ "response": "default"
407
+ },
408
+ {
409
+ "method": "POST",
410
+ "path": "/profiles/:profileName/plugins/update",
411
+ "capability": "api",
412
+ "operation": "updatePlugin",
413
+ "request": "default",
414
+ "response": "default"
415
+ },
416
+ {
417
+ "method": "GET",
418
+ "path": "/profiles/:profileName/capabilities",
419
+ "capability": "api",
420
+ "operation": "listProfileCapabilities",
421
+ "request": "default",
422
+ "response": "default"
423
+ },
424
+ {
425
+ "method": "GET",
426
+ "path": "/profiles/:profileName/mcp",
427
+ "capability": "api",
428
+ "operation": "listProfileMcp",
429
+ "request": "default",
430
+ "response": "default"
431
+ },
432
+ {
433
+ "method": "POST",
434
+ "path": "/profiles/:profileName/mcp",
435
+ "capability": "api",
436
+ "operation": "upsertMcp",
437
+ "request": "default",
438
+ "response": "default"
439
+ },
440
+ {
441
+ "method": "PATCH",
442
+ "path": "/profiles/:profileName/mcp/:serverId",
443
+ "capability": "api",
444
+ "operation": "upsertMcp",
445
+ "request": "default",
446
+ "response": "default"
447
+ },
448
+ {
449
+ "method": "DELETE",
450
+ "path": "/profiles/:profileName/mcp/:serverId",
451
+ "capability": "api",
452
+ "operation": "deleteMcp",
453
+ "request": "default",
454
+ "response": "default"
455
+ },
456
+ {
457
+ "method": "GET",
458
+ "path": "/profiles/:profileName/prompts",
459
+ "capability": "api",
460
+ "operation": "listProfilePrompts",
461
+ "request": "default",
462
+ "response": "default"
463
+ },
464
+ {
465
+ "method": "POST",
466
+ "path": "/profiles/:profileName/prompts",
467
+ "capability": "api",
468
+ "operation": "upsertPrompt",
469
+ "request": "default",
470
+ "response": "default"
471
+ },
472
+ {
473
+ "method": "PATCH",
474
+ "path": "/profiles/:profileName/prompts/:promptId",
475
+ "capability": "api",
476
+ "operation": "upsertPrompt",
477
+ "request": "default",
478
+ "response": "default"
479
+ },
480
+ {
481
+ "method": "DELETE",
482
+ "path": "/profiles/:profileName/prompts/:promptId",
483
+ "capability": "api",
484
+ "operation": "deletePrompt",
485
+ "request": "default",
486
+ "response": "default"
487
+ },
488
+ {
489
+ "method": "GET",
490
+ "path": "/skills",
491
+ "capability": "api",
492
+ "operation": "listSkills",
493
+ "request": "default",
494
+ "response": "default"
495
+ },
496
+ {
497
+ "method": "POST",
498
+ "path": "/skills",
499
+ "capability": "api",
500
+ "operation": "createSkill",
501
+ "request": "default",
502
+ "response": "default"
503
+ },
504
+ {
505
+ "method": "PUT",
506
+ "path": "/skills/:skillName",
507
+ "capability": "api",
508
+ "operation": "updateSkill",
509
+ "request": "default",
510
+ "response": "default"
511
+ },
512
+ {
513
+ "method": "DELETE",
514
+ "path": "/skills/:skillName",
515
+ "capability": "api",
516
+ "operation": "deleteSkill",
517
+ "request": "default",
518
+ "response": "default"
519
+ },
520
+ {
521
+ "method": "GET",
522
+ "path": "/skills/:skillName",
523
+ "capability": "api",
524
+ "operation": "getSkill",
525
+ "request": "default",
526
+ "response": "default"
527
+ }
528
+ ]
529
+ },
530
+ "capabilities": {
531
+ "projects": "dsh-projects",
532
+ "sessions": "dsh-sessions",
533
+ "nativeConfig": "dsh-native-config",
534
+ "api": "dsh-api",
535
+ "channels": "dsh-channels",
536
+ "proxy": "dsh-proxy",
537
+ "statistics": "dsh-statistics",
538
+ "nativeLogs": "dsh-native-logs",
539
+ "mcp": "dsh-api",
540
+ "prompts": "dsh-api"
541
+ }
542
+ }
@@ -92,6 +92,7 @@ function resolveNativeHome(pathResolverId, env, commandRunner, homeDir, hasInjec
92
92
  case 'codex': return env.CODEX_HOME || path.join(homeDir, '.codex');
93
93
  case 'gemini': return path.join(homeDir, '.gemini');
94
94
  case 'opencode': return path.join(homeDir, '.config', 'opencode');
95
+ case 'dsh': return env.DSH_HOME || path.join(homeDir, '.dsh');
95
96
  default: return undefined;
96
97
  }
97
98
  }
@@ -127,6 +128,7 @@ function resolveNativeHome(pathResolverId, env, commandRunner, homeDir, hasInjec
127
128
  case 'gemini': return getGeminiDir();
128
129
  case 'opencode': return getOpenCodeConfigDir() || getOpenCodeDataDir();
129
130
  case 'omp': return getOmpAgentDir(env, { commandRunner });
131
+ case 'dsh': return env.DSH_HOME || path.join(homeDir, '.dsh');
130
132
  default: return undefined;
131
133
  }
132
134
  }
@@ -147,7 +147,8 @@ function getDefaultNativePaths(platform, homeDir, env, rootOverride) {
147
147
  codex: rootOverride || path.join(homeDir, '.codex'),
148
148
  gemini: rootOverride || path.join(homeDir, '.gemini'),
149
149
  opencode: rootOverride || getOpenCodeConfigDir(homeDir, env),
150
- omp: rootOverride || getOmpFallbackDir(homeDir, env)
150
+ omp: rootOverride || getOmpFallbackDir(homeDir, env),
151
+ dsh: rootOverride || env.DSH_HOME || path.join(homeDir, '.dsh')
151
152
  };
152
153
  const root = roots[platform] || homeDir;
153
154
 
@@ -219,6 +220,15 @@ function getDefaultNativePaths(platform, homeDir, env, rootOverride) {
219
220
  themes: path.join(root, 'themes'),
220
221
  packages: path.join(root, 'packages')
221
222
  };
223
+ case 'dsh':
224
+ return {
225
+ dir: root,
226
+ settings: path.join(root, 'settings.yaml'),
227
+ credentials: path.join(root, '.credentials.yaml'),
228
+ sessions: path.join(root, 'sessions'),
229
+ profiles: path.join(root, 'profiles'),
230
+ patch: path.join(root, 'cordis.patch.yml')
231
+ };
222
232
  default:
223
233
  return { dir: homeDir };
224
234
  }
@@ -239,7 +249,7 @@ function createPlatformPathContext({ key, platform, manifest, resolvedPaths = {}
239
249
  const homeDir = pathOptions.homeDir || resolveDefaultHomeDir();
240
250
  const env = { ...process.env, ...(pathOptions.env || {}) };
241
251
  const resolverId = manifest && manifest.pathResolverId;
242
- const nativeKey = ['claude', 'codex', 'gemini', 'opencode', 'omp'].includes(resolverId)
252
+ const nativeKey = ['claude', 'codex', 'gemini', 'opencode', 'omp', 'dsh'].includes(resolverId)
243
253
  ? resolverId
244
254
  : platformKey;
245
255
  const resolvedHome = resolvedPaths.home || homeDir;
@@ -18,7 +18,8 @@ const BUILT_IN_MANIFESTS = [
18
18
  require('./manifests/codex.json'),
19
19
  require('./manifests/gemini.json'),
20
20
  require('./manifests/opencode.json'),
21
- require('./manifests/omp.json')
21
+ require('./manifests/omp.json'),
22
+ require('./manifests/dsh.json')
22
23
  ];
23
24
 
24
25
  function getDefaultPlatformsFile(env = process.env, homeDir = os.homedir()) {
@@ -49,6 +50,18 @@ function publicResourceTypes(resourceTypes) {
49
50
  );
50
51
  }
51
52
 
53
+ function publicResourceActions(resourceActions) {
54
+ if (!resourceActions || typeof resourceActions !== 'object' || Array.isArray(resourceActions)) {
55
+ return null;
56
+ }
57
+ return Object.fromEntries(Object.entries(resourceActions).map(([resourceType, actions]) => [
58
+ resourceType,
59
+ actions && typeof actions === 'object' && !Array.isArray(actions)
60
+ ? Object.fromEntries(Object.entries(actions).filter(([, value]) => typeof value === 'boolean'))
61
+ : {}
62
+ ]));
63
+ }
64
+
52
65
  function hasCustomPathResolution(pathOptions = {}, overlay = {}, platformKey = '') {
53
66
  if (pathOptions.homeDir || pathOptions.env || pathOptions.commandRunner) return true;
54
67
  const entry = overlay?.platforms?.[String(platformKey || '').trim().toLowerCase()];
@@ -179,6 +192,8 @@ function createPlatformRegistry({
179
192
  };
180
193
  const resourceTypes = publicResourceTypes(platform.resourceTypes);
181
194
  if (resourceTypes) result.resourceTypes = resourceTypes;
195
+ const resourceActions = publicResourceActions(platform.resourceActions);
196
+ if (resourceActions) result.resourceActions = resourceActions;
182
197
  if (typeof platform.promptLabel === 'string' && platform.promptLabel.trim()) {
183
198
  result.promptLabel = platform.promptLabel;
184
199
  }
@@ -14,6 +14,11 @@ const PATH_CONTEXT_ENV_KEYS = [
14
14
  'XDG_CONFIG_HOME',
15
15
  'XDG_DATA_HOME',
16
16
  'XDG_STATE_HOME',
17
+ 'DSH_HOME',
18
+ 'DSH_INSTALL_ANCHOR',
19
+ 'DSH_INSTALL_ROOT',
20
+ 'DSH_AGENTS_HOME',
21
+ 'DSH_BUNDLED_SKILL_DIR',
17
22
  'PATH',
18
23
  'OMP_COMMAND',
19
24
  'OMP_CONFIG_DIR',
@@ -13,6 +13,7 @@ function optionalAdapter(name) {
13
13
  } catch (_) {
14
14
  return {
15
15
  inventory: async () => [],
16
+ summarize: async descriptor => ({ sessionId: descriptor?.sessionId || null }),
16
17
  parse: async () => ({ session: null, messages: [] })
17
18
  };
18
19
  }