@daweifu/capability-menu 0.1.2 → 0.1.3

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/lib/client.d.ts CHANGED
@@ -3,33 +3,33 @@ var module = { exports: {} };
3
3
  var exports = module.exports;
4
4
 
5
5
  import { ClientContext } from "@deepseek-ai/dsh-client-runtime/client";
6
- //#region src/client/store.d.ts
7
- /**
8
- * ⚠️ VERIFIED AGAINST REAL rc.8 CLIENT API.
9
- *
10
- * Types + small helpers for the 能力管理 (Capability Management) settings
11
- * section. The component reads/writes the Host `ctx.capabilityPolicy` through
12
- * the generated `remote.capabilityPolicy` face (see `./remote.ts`), mirroring
13
- * how `dsh-client-ui-settings-plugin-inventory` consumes
14
- * `ctx.remote.pluginInventory`.
15
- */
16
- /** One capability's Resident/On-demand/Disabled row, as surfaced by the server. */
6
+ import { RemoteResult } from "@deepseek-ai/dsh-typert-protocol";
7
+ //#region src/client/remote.d.ts
8
+ /** Read-only row: one capability's Resident/On-demand/Disabled classification. */
17
9
  interface CapabilityRow {
18
10
  readonly id: string;
19
11
  readonly kind: 'tool' | 'skill';
20
12
  readonly name: string;
21
- /** Server namespace for tools (`built-in` groups harness-native tools); undefined for skills. */
22
13
  readonly server?: string;
23
14
  /** Skill source root label (`project-dsh`/`user-agents`/…), present only for skills. */
24
15
  readonly source?: string;
16
+ /** The skill's own directory on disk, present only for skills whose provider has one. */
17
+ readonly path?: string;
25
18
  readonly class: 'resident' | 'on-demand' | 'disabled';
26
- /** Human-friendly display: `Resident · 常驻(直接调用)` / `On-demand · 按需(目录渐进加载)` / `Disabled · 禁用`. */
27
19
  readonly classLabel?: string;
28
20
  readonly mandatory: boolean;
29
21
  }
30
- /** Snapshot of the management surface. */
31
- interface CapabilitySnapshot {
32
- readonly rows: readonly CapabilityRow[];
22
+ /** 能力目录查看负载:两份只读「文件」+ 缺失原因。 */
23
+ interface CatalogDocs {
24
+ /** 当前生效的三档策略配置 YAML。 */
25
+ readonly policyYaml: string;
26
+ /** 按需能力目录物化文件(path + content)。 */
27
+ readonly catalog?: {
28
+ readonly path: string;
29
+ readonly content: string;
30
+ };
31
+ /** catalog 不可用原因:'disabled' = 物化未启用;'read-failed' = 读盘失败。 */
32
+ readonly catalogMissing?: 'disabled' | 'read-failed';
33
33
  }
34
34
  /** One direct child in a skill directory listing. */
35
35
  interface SkillFileEntry {
@@ -61,17 +61,98 @@ interface ToolDetail {
61
61
  readonly lastUsedAt?: number;
62
62
  };
63
63
  }
64
- /** 能力目录查看负载:两份只读「文件」+ 缺失原因。 */
65
- interface CatalogDocs {
66
- /** 当前生效的三档策略配置 YAML。 */
67
- readonly policyYaml: string;
68
- /** 按需能力目录物化文件(path + content)。 */
69
- readonly catalog?: {
70
- readonly path: string;
71
- readonly content: string;
72
- };
73
- /** catalog 不可用原因:'disabled' = 物化未启用;'read-failed' = 读盘失败。 */
74
- readonly catalogMissing?: 'disabled' | 'read-failed';
64
+ /** One MCP server declared in the patch file. */
65
+ interface McpLocation {
66
+ readonly id: string;
67
+ readonly serverName: string;
68
+ readonly transport: 'stdio' | 'streamable-http';
69
+ readonly disabled: boolean;
70
+ readonly command?: string;
71
+ readonly args?: readonly string[];
72
+ readonly env?: Readonly<Record<string, string>>;
73
+ readonly cwd?: string;
74
+ readonly url?: string;
75
+ readonly headers?: Readonly<Record<string, string>>;
76
+ readonly toolCallTimeoutMs?: number;
77
+ }
78
+ /** One skill entry under a managed skill root (the user root or a project's). */
79
+ interface SkillLocation {
80
+ /** The entry's own name under `entryDir`; what update and remove address. */
81
+ readonly name: string;
82
+ /** The name the skill declares in its `SKILL.md` — dsh's identity for it, and what a capability row is named. */
83
+ readonly skillName?: string;
84
+ readonly path: string;
85
+ readonly linked: boolean;
86
+ readonly valid: boolean;
87
+ /** `user` for the default root, `project` for a project's own skill root. */
88
+ readonly root: 'user' | 'project';
89
+ /** The skills directory holding the entry; pass it back to update or remove. */
90
+ readonly entryDir: string;
91
+ /** The directory the entry points at, with symlinks resolved. */
92
+ readonly target?: string;
93
+ }
94
+ /** Input for registering a new MCP server. */
95
+ interface McpInput {
96
+ readonly serverName: string;
97
+ readonly transport: 'stdio' | 'streamable-http';
98
+ readonly command?: string;
99
+ readonly args?: readonly string[];
100
+ readonly env?: Readonly<Record<string, string>>;
101
+ readonly cwd?: string;
102
+ readonly url?: string;
103
+ readonly headers?: Readonly<Record<string, string>>;
104
+ readonly toolCallTimeoutMs?: number;
105
+ }
106
+ /** Input for editing a declared server (`serverName` is immutable). */
107
+ type McpUpdateInput = Omit<McpInput, 'serverName'>;
108
+ declare module '@deepseek-ai/dsh-typert-protocol' {
109
+ interface TypertRemoteNamespace$6361706162696c697479506f6c696379 {
110
+ getConfig: () => Promise<RemoteResult<Record<string, unknown>>>;
111
+ updateConfig: (partial: Record<string, unknown>) => Promise<RemoteResult<void>>;
112
+ classifyAll: () => Promise<RemoteResult<CapabilityRow[]>>;
113
+ refresh: () => Promise<RemoteResult<void>>;
114
+ listSkillDir: (id: string, relPath?: string) => Promise<RemoteResult<SkillFileEntry[] | undefined>>;
115
+ readSkillFile: (id: string, relPath: string) => Promise<RemoteResult<string | undefined>>;
116
+ getDetail: (id: string) => Promise<RemoteResult<ToolDetail | undefined>>;
117
+ getCatalogDocs: () => Promise<RemoteResult<CatalogDocs>>;
118
+ listLocations: () => Promise<RemoteResult<McpLocation[]>>;
119
+ addLocation: (input: McpInput) => Promise<RemoteResult<string>>;
120
+ removeLocation: (id: string) => Promise<RemoteResult<boolean>>;
121
+ updateLocation: (id: string, input: McpUpdateInput) => Promise<RemoteResult<boolean>>;
122
+ listSkillLocations: () => Promise<RemoteResult<SkillLocation[]>>;
123
+ addSkillLocation: (dir: string, projectPath?: string) => Promise<RemoteResult<string>>;
124
+ removeSkillLocation: (name: string, entryDir?: string) => Promise<RemoteResult<boolean>>;
125
+ adoptSkillLocation: (name: string) => Promise<RemoteResult<string>>;
126
+ updateSkillLocation: (name: string, dir: string, entryDir?: string) => Promise<RemoteResult<boolean>>;
127
+ }
128
+ interface TypertRemoteMap {
129
+ 'capabilityPolicy/getConfig': () => Promise<RemoteResult<Record<string, unknown>>>;
130
+ 'capabilityPolicy/updateConfig': (partial: Record<string, unknown>) => Promise<RemoteResult<void>>;
131
+ 'capabilityPolicy/classifyAll': () => Promise<RemoteResult<CapabilityRow[]>>;
132
+ 'capabilityPolicy/refresh': () => Promise<RemoteResult<void>>;
133
+ 'capabilityPolicy/listSkillDir': (id: string, relPath?: string) => Promise<RemoteResult<SkillFileEntry[] | undefined>>;
134
+ 'capabilityPolicy/readSkillFile': (id: string, relPath: string) => Promise<RemoteResult<string | undefined>>;
135
+ 'capabilityPolicy/getDetail': (id: string) => Promise<RemoteResult<ToolDetail | undefined>>;
136
+ 'capabilityPolicy/getCatalogDocs': () => Promise<RemoteResult<CatalogDocs>>;
137
+ 'capabilityPolicy/listLocations': () => Promise<RemoteResult<McpLocation[]>>;
138
+ 'capabilityPolicy/addLocation': (input: McpInput) => Promise<RemoteResult<string>>;
139
+ 'capabilityPolicy/removeLocation': (id: string) => Promise<RemoteResult<boolean>>;
140
+ 'capabilityPolicy/updateLocation': (id: string, input: McpUpdateInput) => Promise<RemoteResult<boolean>>;
141
+ 'capabilityPolicy/listSkillLocations': () => Promise<RemoteResult<SkillLocation[]>>;
142
+ 'capabilityPolicy/addSkillLocation': (dir: string, projectPath?: string) => Promise<RemoteResult<string>>;
143
+ 'capabilityPolicy/removeSkillLocation': (name: string, entryDir?: string) => Promise<RemoteResult<boolean>>;
144
+ 'capabilityPolicy/adoptSkillLocation': (name: string) => Promise<RemoteResult<string>>;
145
+ 'capabilityPolicy/updateSkillLocation': (name: string, dir: string, entryDir?: string) => Promise<RemoteResult<boolean>>;
146
+ }
147
+ interface TypertRemoteNamespaceMap {
148
+ 'capabilityPolicy': TypertRemoteNamespace$6361706162696c697479506f6c696379;
149
+ }
150
+ }
151
+ //#endregion
152
+ //#region src/client/store.d.ts
153
+ /** Snapshot of the management surface. */
154
+ interface CapabilitySnapshot {
155
+ readonly rows: readonly CapabilityRow[];
75
156
  }
76
157
  /** The Host `capabilityPolicy` remote face (generated contribution). */
77
158
  interface CapabilityPolicyRemote {
@@ -105,6 +186,16 @@ interface CapabilityPolicyRemote {
105
186
  message: string;
106
187
  };
107
188
  }>;
189
+ refresh(): Promise<{
190
+ ok: true;
191
+ value: void;
192
+ } | {
193
+ ok: false;
194
+ error: {
195
+ code: string;
196
+ message: string;
197
+ };
198
+ }>;
108
199
  listSkillDir(id: string, relPath?: string): Promise<{
109
200
  ok: true;
110
201
  value: SkillFileEntry[] | undefined;
@@ -145,6 +236,96 @@ interface CapabilityPolicyRemote {
145
236
  message: string;
146
237
  };
147
238
  }>;
239
+ listLocations(): Promise<{
240
+ ok: true;
241
+ value: McpLocation[];
242
+ } | {
243
+ ok: false;
244
+ error: {
245
+ code: string;
246
+ message: string;
247
+ };
248
+ }>;
249
+ addLocation(input: McpInput): Promise<{
250
+ ok: true;
251
+ value: string;
252
+ } | {
253
+ ok: false;
254
+ error: {
255
+ code: string;
256
+ message: string;
257
+ };
258
+ }>;
259
+ removeLocation(id: string): Promise<{
260
+ ok: true;
261
+ value: boolean;
262
+ } | {
263
+ ok: false;
264
+ error: {
265
+ code: string;
266
+ message: string;
267
+ };
268
+ }>;
269
+ updateLocation(id: string, input: McpUpdateInput): Promise<{
270
+ ok: true;
271
+ value: boolean;
272
+ } | {
273
+ ok: false;
274
+ error: {
275
+ code: string;
276
+ message: string;
277
+ };
278
+ }>;
279
+ listSkillLocations(): Promise<{
280
+ ok: true;
281
+ value: SkillLocation[];
282
+ } | {
283
+ ok: false;
284
+ error: {
285
+ code: string;
286
+ message: string;
287
+ };
288
+ }>;
289
+ addSkillLocation(dir: string, projectPath?: string): Promise<{
290
+ ok: true;
291
+ value: string;
292
+ } | {
293
+ ok: false;
294
+ error: {
295
+ code: string;
296
+ message: string;
297
+ };
298
+ }>;
299
+ removeSkillLocation(name: string, entryDir?: string): Promise<{
300
+ ok: true;
301
+ value: boolean;
302
+ } | {
303
+ ok: false;
304
+ error: {
305
+ code: string;
306
+ message: string;
307
+ };
308
+ }>;
309
+ adoptSkillLocation(name: string): Promise<{
310
+ ok: true;
311
+ value: string;
312
+ } | {
313
+ ok: false;
314
+ error: {
315
+ code: string;
316
+ message: string;
317
+ };
318
+ }>;
319
+ updateSkillLocation(name: string, dir: string, entryDir?: string): Promise<{
320
+ ok: true;
321
+ value: boolean;
322
+ } | {
323
+ ok: false;
324
+ error: {
325
+ code: string;
326
+ message: string;
327
+ };
328
+ }>;
148
329
  }
149
330
  //#endregion
150
331
  //#region src/client/CapabilitySection.d.ts
@@ -154,16 +335,14 @@ interface CapabilitySectionInjected {
154
335
  t(key: CapabilityKey, params?: Record<string, unknown>): string;
155
336
  /** Diagnostic: `$mount` failure surfaced instead of crashing the section. */
156
337
  mountError?: string;
157
- /** Diagnostic: namespace methods actually installed on `ctx.remote.capabilityPolicy`. */
158
- remoteKeys?: string;
159
338
  }
160
339
  type CapabilitySectionProps = CapabilitySectionInjected;
161
- type CapabilityKey = 'nav' | 'title' | 'desc' | 'resident' | 'on-demand' | 'disabled' | 'kind' | 'class' | 'tool' | 'skill' | 'mandatory' | 'rules' | 'toolsGroup' | 'skillsGroup' | 'builtInGroup' | 'globalSkills' | 'projectSkills' | 'emptyTools' | 'emptySkills' | 'emptyGlobalSkills' | 'emptyProjectSkills' | 'toolCount' | 'residentShort' | 'onDemandShort' | 'disabledShort' | 'cycleHint' | 'notPreviewable' | 'previewClose' | 'detailNotFound' | 'cycleOverridden' | 'viewCatalog' | 'catalogPolicy' | 'catalogOnDemand' | 'catalogPolicyNote' | 'catalogDisabled' | 'catalogUnreadable';
340
+ type CapabilityKey = 'nav' | 'title' | 'desc' | 'resident' | 'on-demand' | 'disabled' | 'tool' | 'skill' | 'mandatory' | 'toolsGroup' | 'skillsGroup' | 'builtInGroup' | 'globalSkills' | 'projectSkills' | 'emptyTools' | 'emptySkills' | 'emptyGlobalSkills' | 'emptyProjectSkills' | 'toolCount' | 'residentShort' | 'onDemandShort' | 'disabledShort' | 'cycleHint' | 'notPreviewable' | 'previewClose' | 'detailNotFound' | 'cycleOverridden' | 'refresh' | 'refreshing' | 'refreshFailed' | 'retry' | 'carrierFailureHint' | 'registerCapability' | 'editMcp' | 'editSkillNamed' | 'edit' | 'save' | 'remove' | 'cancel' | 'confirmRemove' | 'confirmRemoveMcp' | 'confirmRemoveSkillLink' | 'confirmRemoveSkillDir' | 'confirmSaveAnyway' | 'saveConfirmRealDir' | 'register' | 'notEditable' | 'entryNotFound' | 'mcpServers' | 'skillDirs' | 'skillDirPath' | 'skillDirHint' | 'skillRoot' | 'skillRootUser' | 'skillRootProject' | 'skillRootHintUser' | 'skillRootHintProject' | 'skillProjectPath' | 'skillProjectPathHint' | 'skillRegisteredAt' | 'skillRepointed' | 'skillAdopted' | 'skillSource' | 'skillSourceHint' | 'skillUnmanaged' | 'adoptSkill' | 'adoptSkillHint' | 'adoptSkillTitle' | 'sourceCustom' | 'sourceBundled' | 'serverName' | 'serverNameImmutable' | 'transport' | 'transportStdio' | 'transportHttp' | 'transportHintStdio' | 'transportHintHttp' | 'command' | 'args' | 'cwd' | 'env' | 'url' | 'headers' | 'headersHint' | 'timeout' | 'timeoutInvalid' | 'viewCatalog' | 'catalogPolicy' | 'catalogOnDemand' | 'catalogPolicyNote' | 'catalogDisabled' | 'catalogUnreadable';
162
341
  //#endregion
163
342
  //#region src/client/index.d.ts
164
343
  declare module '@deepseek-ai/dsh-client-ui-slots' {
165
344
  interface LocaleNamespaceMap {
166
- /** 能力管理 tab copy. */
345
+ /** 能力菜单 tab copy. */
167
346
  'settings.capability': Record<CapabilityKey, string>;
168
347
  }
169
348
  }
@@ -172,7 +351,7 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
172
351
  * ("waiting for service"). Access it via `ctx.get('remote.capabilityPolicy')`,
173
352
  * which resolves the mounted namespace service without the inject gate. */
174
353
  declare const inject: string[];
175
- /** Register the 能力管理 section once `settings.section` is on the ledger. */
354
+ /** Register the 能力菜单 section once `settings.section` is on the ledger. */
176
355
  declare function apply(ctx: ClientContext): Promise<() => void>;
177
356
  //#endregion
178
357
  export { type CapabilityKey, type CapabilityPolicyRemote, type CapabilityRow, type CapabilitySectionInjected, type CapabilitySectionProps, type CapabilitySnapshot, apply, inject };
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../src/client/store.ts","../src/client/CapabilitySection.tsx","../src/client/index.ts"],"mappings":";;;;;;;;;;;;;;;;UAWiB;WACN;WACA;WACA;;WAEA;;WAEA;WACA;;WAEA;WACA;;;UAIM;WACN,eAAe;;;UAIT;WACN;WACA;;;UAIM;WACN;WACA;WACA;WACA;WACA;WACA;WACA,YAAY;WACZ,SAAS;WACT;aAAmB;aAA2B;aAA8B;aAAwB;;WACpG;WACA;aACE;aACA;aACA;aACA;aACA;;;;UAKI;;WAEN;;WAEA;aAAqB;aAAuB;;;WAE5C;;;UAIM;EACf,aAAa;IAAU;IAAU,OAAO;;IAA8B;IAAW;MAAS;MAAc;;;EACxG,aAAa,SAAS,0BAA0B;IAAU;IAAU;;IAAkB;IAAW;MAAS;MAAc;;;EACxH,eAAe;IAAU;IAAU,OAAO;;IAAsB;IAAW;MAAS;MAAc;;;EAClG,aAAa,YAAY,mBAAmB;IAAU;IAAU,OAAO;;IAAmC;IAAW;MAAS;MAAc;;;EAC5I,cAAc,YAAY,kBAAkB;IAAU;IAAU;;IAAgC;IAAW;MAAS;MAAc;;;EAClI,UAAU,aAAa;IAAU;IAAU,OAAO;;IAA6B;IAAW;MAAS;MAAc;;;EACjH,kBAAkB;IAAU;IAAU,OAAO;;IAAkB;IAAW;MAAS;MAAc;;;;;;;UChDlF;EACf,QAAQ;EACR,EAAE,KAAK,eAAe,SAAS;;EAE/B;;EAEA;;KAGU,yBAAyB;KAEzB;;;;YCdA;;IAER,uBAAuB,OAAO;;;;;;;cAQrB;;iBAGS,MAAM,KAAK,gBAAgB"}
1
+ {"version":3,"file":"client.d.ts","names":[],"sources":["../src/client/remote.ts","../src/client/store.ts","../src/client/CapabilitySection.tsx","../src/client/index.ts"],"mappings":"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"}