dsh-mcp-panel 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +201 -0
  2. package/README.es.md +129 -0
  3. package/README.hi.md +129 -0
  4. package/README.md +129 -0
  5. package/README.pt.md +129 -0
  6. package/README.zh.md +129 -0
  7. package/cordis.patch.yml +23 -0
  8. package/lib/client.js +5045 -0
  9. package/lib/client.js.map +1 -0
  10. package/lib/index.js +1079 -0
  11. package/lib/typert.host.js +4261 -0
  12. package/lib/types/aggregate.d.ts +92 -0
  13. package/lib/types/aggregate.d.ts.map +1 -0
  14. package/lib/types/client/McpPanelTab.d.ts +16 -0
  15. package/lib/types/client/McpPanelTab.d.ts.map +1 -0
  16. package/lib/types/client/index.d.ts +35 -0
  17. package/lib/types/client/index.d.ts.map +1 -0
  18. package/lib/types/client/locales.d.ts +90 -0
  19. package/lib/types/client/locales.d.ts.map +1 -0
  20. package/lib/types/client/present.d.ts +79 -0
  21. package/lib/types/client/present.d.ts.map +1 -0
  22. package/lib/types/client/remote.d.ts +119 -0
  23. package/lib/types/client/remote.d.ts.map +1 -0
  24. package/lib/types/client/styles.d.ts +12 -0
  25. package/lib/types/client/styles.d.ts.map +1 -0
  26. package/lib/types/command.d.ts +122 -0
  27. package/lib/types/command.d.ts.map +1 -0
  28. package/lib/types/config.d.ts +63 -0
  29. package/lib/types/config.d.ts.map +1 -0
  30. package/lib/types/grouping.d.ts +49 -0
  31. package/lib/types/grouping.d.ts.map +1 -0
  32. package/lib/types/index.d.ts +41 -0
  33. package/lib/types/index.d.ts.map +1 -0
  34. package/lib/types/probe.d.ts +67 -0
  35. package/lib/types/probe.d.ts.map +1 -0
  36. package/lib/types/sanitize.d.ts +42 -0
  37. package/lib/types/sanitize.d.ts.map +1 -0
  38. package/lib/types/service.d.ts +107 -0
  39. package/lib/types/service.d.ts.map +1 -0
  40. package/lib/types/typert.host.d.ts +110 -0
  41. package/lib/types/typert.host.d.ts.map +1 -0
  42. package/lib/types/upstream.d.ts +67 -0
  43. package/lib/types/upstream.d.ts.map +1 -0
  44. package/lib/types/wire.d.ts +342 -0
  45. package/lib/types/wire.d.ts.map +1 -0
  46. package/package.json +111 -0
  47. package/src/aggregate.ts +248 -0
  48. package/src/client/McpPanelTab.tsx +257 -0
  49. package/src/client/index.ts +87 -0
  50. package/src/client/locales.ts +92 -0
  51. package/src/client/present.ts +127 -0
  52. package/src/client/remote.ts +35 -0
  53. package/src/client/styles.ts +235 -0
  54. package/src/command.ts +387 -0
  55. package/src/config.ts +110 -0
  56. package/src/grouping.ts +109 -0
  57. package/src/index.ts +86 -0
  58. package/src/probe.ts +198 -0
  59. package/src/sanitize.ts +115 -0
  60. package/src/service.ts +279 -0
  61. package/src/typert.host.ts +25 -0
  62. package/src/upstream.ts +72 -0
  63. package/src/wire.ts +221 -0
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Status aggregation: assemble the read-only server views from the three
3
+ * facts the panel is allowed to read — loader rows (config, effective
4
+ * disabled, fiber phase), the tool-registry snapshot, and upstream
5
+ * `mcp/status` observations (when the proposed seam exists).
6
+ *
7
+ * Every field is read defensively: loader configs are raw serialized data
8
+ * (possibly `!!js` expressions, wrong types, or absent), and upstream
9
+ * payloads may lack optional fields. A malformed or missing field degrades
10
+ * to an explicit default instead of throwing — the aggregation must never
11
+ * take down the panel over one broken row.
12
+ *
13
+ * Pure: statuses and reconnect counters are passed in as snapshots.
14
+ *
15
+ * @module dsh-mcp-panel/aggregate
16
+ */
17
+ import { type McpToolGroup } from './grouping.ts';
18
+ import type { McpServerStatus } from './upstream.ts';
19
+ import type { McpFiberPhase, McpPanelSnapshot, McpServerView, McpTransport } from './wire.ts';
20
+ /** One loader-derived mcp-client row (config is raw serialized data). */
21
+ export interface McpLoaderRow {
22
+ /** Loader entry id (the patch row id). */
23
+ entryId: string;
24
+ /** Effective disabled state (parent groups and `!!js` already resolved by the Loader). */
25
+ disabled: boolean;
26
+ /** Fiber phase; null when the row has no fiber. */
27
+ fiberPhase: McpFiberPhase;
28
+ /** Raw `config` from the entry options; may be anything. */
29
+ config: unknown;
30
+ }
31
+ /** The exact module name of the official MCP client bridge. */
32
+ export declare const MCP_CLIENT_MODULE = "@deepseek-ai/dsh-mcp-client";
33
+ /** Marker shown for a `!!js` config value, which the panel never evaluates. */
34
+ export declare const JS_EXPRESSION_MARKER = "<expression>";
35
+ /** Sentinel values for "not observed" numeric fields. */
36
+ export declare const UNKNOWN_COUNT = -1;
37
+ /** One server namespace → its upstream observation and derived totals. */
38
+ export interface McpStatusFacts {
39
+ /** Latest upstream payload per server; absent = not observed. */
40
+ statuses: ReadonlyMap<string, McpServerStatus>;
41
+ /** Cumulative reconnect attempts observed per server. */
42
+ reconnects: ReadonlyMap<string, number>;
43
+ /** Epoch ms of the latest upstream event receipt per server. */
44
+ observedAt: ReadonlyMap<string, number>;
45
+ /** Passive-probe reachability facts per server (empty when probing is off). */
46
+ probeStates: ReadonlyMap<string, {
47
+ state: 'reachable' | 'unreachable';
48
+ checkedAt: number;
49
+ }>;
50
+ }
51
+ /** Transport and display target derived from one raw mcp-client config. */
52
+ export declare function deriveTarget(config: unknown): {
53
+ transport: McpTransport;
54
+ target: string;
55
+ };
56
+ /** Read the server namespace from raw config; absent becomes a stable fallback. */
57
+ export declare function serverNameOf(config: unknown, fallback: string): string;
58
+ /**
59
+ * Assemble one server view from loader, registry, and upstream facts.
60
+ * Missing upstream data degrades to `unknown`/`-1`/`null` — never fabricated.
61
+ *
62
+ * @param row - the mcp-client loader row, or `undefined` for leftover namespaces.
63
+ * @param serverName - the effective namespace.
64
+ * @param group - the tool group for this namespace (possibly empty).
65
+ * @param facts - upstream observations and reconnect totals.
66
+ * @returns the display-ready view.
67
+ */
68
+ export declare function aggregateServerView(row: McpLoaderRow | undefined, serverName: string, group: McpToolGroup | undefined, facts: McpStatusFacts): McpServerView;
69
+ /** Inputs for {@link aggregateSnapshot}; grouped so callers never mix them up. */
70
+ export interface McpAggregateInput {
71
+ /** Loader mcp-client rows (raw config included). */
72
+ rows: readonly McpLoaderRow[];
73
+ /** Tool groups from {@link groupMcpTools}. */
74
+ groups: readonly McpToolGroup[];
75
+ /** Upstream status facts (may be empty). */
76
+ facts: McpStatusFacts;
77
+ /** Background probe views (may be empty). */
78
+ probes: McpPanelSnapshot['probes'];
79
+ /** Absolute profile patch-layer path, or null. */
80
+ patchFile: string | null;
81
+ /** Suggested panel refresh interval in ms (`0` = on demand). */
82
+ refreshIntervalMs: number;
83
+ }
84
+ /**
85
+ * Assemble the complete snapshot from loader rows, tool groups, upstream
86
+ * facts, and probe rows. Tolerates missing fields anywhere in the inputs.
87
+ *
88
+ * @param input - the snapshot inputs (see {@link McpAggregateInput}).
89
+ * @returns the wire snapshot.
90
+ */
91
+ export declare function aggregateSnapshot(input: McpAggregateInput): McpPanelSnapshot;
92
+ //# sourceMappingURL=aggregate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../src/aggregate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAEV,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,YAAY,EACb,MAAM,WAAW,CAAA;AAElB,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,0FAA0F;IAC1F,QAAQ,EAAE,OAAO,CAAA;IACjB,mDAAmD;IACnD,UAAU,EAAE,aAAa,CAAA;IACzB,4DAA4D;IAC5D,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,gCAAgC,CAAA;AAE9D,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,iBAAiB,CAAA;AAElD,yDAAyD;AACzD,eAAO,MAAM,aAAa,KAAK,CAAA;AAE/B,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC9C,yDAAyD;IACzD,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,gEAAgE;IAChE,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,+EAA+E;IAC/E,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,GAAG,aAAa,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5F;AAwCD,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,SAAS,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAgBzF;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGtE;AA+BD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,YAAY,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,KAAK,EAAE,cAAc,GACpB,aAAa,CAiCf;AAED,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,IAAI,EAAE,SAAS,YAAY,EAAE,CAAA;IAC7B,8CAA8C;IAC9C,MAAM,EAAE,SAAS,YAAY,EAAE,CAAA;IAC/B,4CAA4C;IAC5C,KAAK,EAAE,cAAc,CAAA;IACrB,6CAA6C;IAC7C,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAClC,kDAAkD;IAClD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,gBAAgB,CAqB5E"}
@@ -0,0 +1,16 @@
1
+ /** The read-only MCP management tab: server rows, badges, tools, probes. */
2
+ import { type ReactNode } from 'react';
3
+ import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
4
+ import type { McpPanelSnapshot, ProbeStarted } from '../wire.ts';
5
+ /** Registration-side injected face: the unwrapped snapshot read + probe start. */
6
+ export interface McpPanelTabInjected {
7
+ /** Read the current Host snapshot (RemoteResult already unwrapped). */
8
+ status: () => Promise<McpPanelSnapshot>;
9
+ /** Start a one-shot probe of one streamable-http server (panel-only result). */
10
+ probe: (serverName: string) => Promise<ProbeStarted>;
11
+ }
12
+ /** Full component props assembled by the Settings slot renderer. */
13
+ export type McpPanelTabProps = PropsRuntime<'settings.plugins.tab'> & PropsLocale<'settings.mcpPanel'> & InjectFace<McpPanelTabInjected>;
14
+ /** Render the read-only MCP management tab. */
15
+ export declare function McpPanelTab({ status, probe, t }: McpPanelTabProps): ReactNode;
16
+ //# sourceMappingURL=McpPanelTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpPanelTab.d.ts","sourceRoot":"","sources":["../../../src/client/McpPanelTab.tsx"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAE7F,OAAO,KAAK,EAAE,gBAAgB,EAAgB,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9E,kFAAkF;AAClF,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,MAAM,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACvC,gFAAgF;IAChF,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;CACrD;AAED,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAC1B,YAAY,CAAC,sBAAsB,CAAC,GAClC,WAAW,CAAC,mBAAmB,CAAC,GAChC,UAAU,CAAC,mBAAmB,CAAC,CAAA;AAuCnC,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,gBAAgB,GAAG,SAAS,CA2L7E"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * `dsh-mcp-panel`, browser half: mounts the `mcpPanel` Remote contribution,
3
+ * then registers a read-only "MCP" tab into the Plugins settings section
4
+ * (`settings.plugins.tab`, id `mcp`). All data arrives through the
5
+ * `remote.mcpPanel` namespace — the tab issues no other RPC and holds no
6
+ * state of its own beyond expansion and the last loaded snapshot.
7
+ *
8
+ * @module dsh-mcp-panel/client
9
+ */
10
+ import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
11
+ import { type McpPanelLocaleKey } from './locales.ts';
12
+ export type { McpPanelTabInjected, McpPanelTabProps } from './McpPanelTab.tsx';
13
+ export type { McpPanelLocaleKey } from './locales.ts';
14
+ export { presentMcpPanel, connectionBadge, probeBadge } from './present.ts';
15
+ export type { PresentedMcpPanel, PresentedProbeRow, PresentedServerRow, BadgeTone } from './present.ts';
16
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
17
+ interface LocaleNamespaceMap {
18
+ /** MCP management tab copy. */
19
+ 'settings.mcpPanel': McpPanelLocaleKey;
20
+ }
21
+ }
22
+ /** Dictionary namespace owned by this plugin. */
23
+ export declare const NS = "settings.mcpPanel";
24
+ /** Plugin name: matches the package name, the graph row id, and the bundle id. */
25
+ export declare const name = "dsh-mcp-panel";
26
+ /** Services the tab reads; `remote.mcpPanel` appears once this plugin mounts its contribution. */
27
+ export declare const inject: string[];
28
+ /**
29
+ * Browser plugin body: dictionaries, the scoped stylesheet, the Remote
30
+ * contribution mount, and the settings tab registration.
31
+ *
32
+ * @param ctx - client root context.
33
+ */
34
+ export declare function apply(ctx: ClientContext): Promise<void>;
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAU3E,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAM7D,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC9E,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC3E,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAEvG,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,+BAA+B;QAC/B,mBAAmB,EAAE,iBAAiB,CAAA;KACvC;CACF;AAED,iDAAiD;AACjD,eAAO,MAAM,EAAE,sBAAsB,CAAA;AAErC,kFAAkF;AAClF,eAAO,MAAM,IAAI,kBAAkB,CAAA;AAEnC,kGAAkG;AAClG,eAAO,MAAM,MAAM,UAAgC,CAAA;AAEnD;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC7D"}
@@ -0,0 +1,90 @@
1
+ /** Copy dictionaries for the MCP management Settings tab. */
2
+ /** Simplified Chinese dictionary and key source of truth. */
3
+ export declare const zh: {
4
+ tab: string;
5
+ loading: string;
6
+ error: string;
7
+ retry: string;
8
+ empty: string;
9
+ servers: string;
10
+ tools: string;
11
+ noTools: string;
12
+ status: string;
13
+ statusUnknown: string;
14
+ statusDisabled: string;
15
+ statusFailed: string;
16
+ statusConnecting: string;
17
+ statusConnected: string;
18
+ statusWaiting: string;
19
+ statusExhausted: string;
20
+ statusDisposed: string;
21
+ reconnects: string;
22
+ lastError: string;
23
+ none: string;
24
+ fiber: string;
25
+ configured: string;
26
+ retryIn: string;
27
+ attempt: string;
28
+ lastEvent: string;
29
+ filterTools: string;
30
+ ms: string;
31
+ derivedNote: string;
32
+ probes: string;
33
+ probeEmpty: string;
34
+ probeRunning: string;
35
+ probeCompleted: string;
36
+ probeFailed: string;
37
+ probeKilled: string;
38
+ probeStopping: string;
39
+ probeNow: string;
40
+ probeReachable: string;
41
+ probeUnreachable: string;
42
+ probeFailedAction: string;
43
+ patchHint: string;
44
+ };
45
+ /** MCP panel locale key union. */
46
+ export type McpPanelLocaleKey = keyof typeof zh;
47
+ /** English dictionary checked against the Chinese key set. */
48
+ export declare const en: {
49
+ tab: string;
50
+ loading: string;
51
+ error: string;
52
+ retry: string;
53
+ empty: string;
54
+ servers: string;
55
+ tools: string;
56
+ noTools: string;
57
+ status: string;
58
+ statusUnknown: string;
59
+ statusDisabled: string;
60
+ statusFailed: string;
61
+ statusConnecting: string;
62
+ statusConnected: string;
63
+ statusWaiting: string;
64
+ statusExhausted: string;
65
+ statusDisposed: string;
66
+ reconnects: string;
67
+ lastError: string;
68
+ none: string;
69
+ fiber: string;
70
+ configured: string;
71
+ retryIn: string;
72
+ attempt: string;
73
+ lastEvent: string;
74
+ filterTools: string;
75
+ ms: string;
76
+ derivedNote: string;
77
+ probes: string;
78
+ probeEmpty: string;
79
+ probeRunning: string;
80
+ probeCompleted: string;
81
+ probeFailed: string;
82
+ probeKilled: string;
83
+ probeStopping: string;
84
+ probeNow: string;
85
+ probeReachable: string;
86
+ probeUnreachable: string;
87
+ probeFailedAction: string;
88
+ patchHint: string;
89
+ };
90
+ //# sourceMappingURL=locales.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,6DAA6D;AAC7D,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCmB,CAAA;AAElC,kCAAkC;AAClC,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,EAAE,CAAA;AAE/C,8DAA8D;AAC9D,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyC8B,CAAA"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Pure presentation for the MCP settings tab: maps the wire snapshot onto
3
+ * render-ready rows and badge codes. No I/O, no clock, no random — a session
4
+ * replay or a test may call it any number of times and get the same result.
5
+ * Localization happens in the component through the locale dictionaries;
6
+ * this module emits stable codes only.
7
+ *
8
+ * @module dsh-mcp-panel/client/present
9
+ */
10
+ import type { McpPanelSnapshot, McpServerView, McpProbeView } from '../wire.ts';
11
+ /** Badge tones the stylesheet understands. */
12
+ export type BadgeTone = 'ok' | 'warn' | 'error' | 'muted';
13
+ /** Render-ready server row plus derived badge facts. */
14
+ export interface PresentedServerRow {
15
+ /** The wire server view, unchanged. */
16
+ readonly view: McpServerView;
17
+ /** Badge tone for the connection state. */
18
+ readonly tone: BadgeTone;
19
+ /** Badge code: `disabled` | `failed` | a connection phase | `unknown`. */
20
+ readonly badge: 'disabled' | 'failed' | 'connecting' | 'connected' | 'waiting' | 'exhausted' | 'disposed' | 'unknown';
21
+ /** Whether the row shows an error badge (sanitized `lastError` present). */
22
+ readonly hasError: boolean;
23
+ /** Display form of the reconnect count (`-1` → null = dash). */
24
+ readonly reconnects: number | null;
25
+ /** Whole seconds since the last upstream event; `null` = never observed. */
26
+ readonly ageSeconds: number | null;
27
+ /** Whether the attempt/maxAttempts pair is displayable (either is known). */
28
+ readonly hasAttemptBudget: boolean;
29
+ }
30
+ /** Render-ready probe row. */
31
+ export interface PresentedProbeRow {
32
+ /** The wire probe view, unchanged. */
33
+ readonly view: McpProbeView;
34
+ /** Badge tone for the probe state. */
35
+ readonly tone: BadgeTone;
36
+ /** Badge code for the probe state. */
37
+ readonly badge: 'running' | 'completed' | 'failed' | 'killed' | 'stopping';
38
+ }
39
+ /** The complete render-ready tab model. */
40
+ export interface PresentedMcpPanel {
41
+ /** Servers in snapshot order. */
42
+ readonly servers: readonly PresentedServerRow[];
43
+ /** Probes in snapshot order (newest first). */
44
+ readonly probes: readonly PresentedProbeRow[];
45
+ /** Whether the snapshot carries any server rows. */
46
+ readonly empty: boolean;
47
+ /** Whether connection fields came from upstream or are derived. */
48
+ readonly observed: boolean;
49
+ /** Absolute profile patch-layer path for the hint line, or null. */
50
+ readonly patchFile: string | null;
51
+ /** Suggested refresh interval in ms (`0` = on demand only). */
52
+ readonly refreshIntervalMs: number;
53
+ }
54
+ /**
55
+ * Derive the connection badge for one server row. Order matters: the entry
56
+ * being disabled or its fiber failed is a configuration fact that beats the
57
+ * (derived or upstream) connection phase.
58
+ *
59
+ * @param view - the assembled server view.
60
+ * @returns the badge code and tone.
61
+ */
62
+ export declare function connectionBadge(view: McpServerView): {
63
+ badge: PresentedServerRow['badge'];
64
+ tone: BadgeTone;
65
+ };
66
+ /** Badge for one probe state. */
67
+ export declare function probeBadge(status: McpProbeView['status']): {
68
+ badge: PresentedProbeRow['badge'];
69
+ tone: BadgeTone;
70
+ };
71
+ /**
72
+ * Project the wire snapshot onto render-ready rows.
73
+ *
74
+ * @param snapshot - the `mcpPanel/status` value.
75
+ * @param now - epoch ms anchor for age computations (keeps the fold pure).
76
+ * @returns the tab model.
77
+ */
78
+ export declare function presentMcpPanel(snapshot: McpPanelSnapshot, now?: number): PresentedMcpPanel;
79
+ //# sourceMappingURL=present.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"present.d.ts","sourceRoot":"","sources":["../../../src/client/present.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE/E,8CAA8C;AAC9C,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;AAEzD,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAA;IACrH,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;CACnC;AAED,8BAA8B;AAC9B,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAA;CAC3E;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC/C,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC7C,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;CACnC;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAc5G;AAED,iCAAiC;AACjC,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG;IAAE,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAQjH;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,SAAa,GAAG,iBAAiB,CAyB/F"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * The client-side Remote face of the `mcpPanel` namespace: the hand-written
3
+ * `TypertRemoteContribution` mounted through `ctx.remote.$mount`, plus the
4
+ * declaration merging that types `ctx.remote.mcpPanel`. The descriptor list
5
+ * is shared with the host `./typert` manifest (`../wire.ts`), so the two
6
+ * faces can never drift.
7
+ *
8
+ * @module dsh-mcp-panel/client/remote
9
+ */
10
+ import type { RemoteResult } from '@deepseek-ai/dsh-typert-protocol';
11
+ import type { McpPanelSnapshot, ProbeStarted } from '../wire.ts';
12
+ declare module '@deepseek-ai/dsh-typert-protocol' {
13
+ interface TypertRemoteNamespace$mcpPanel {
14
+ /** Read the current read-only MCP snapshot. */
15
+ status: () => Promise<RemoteResult<McpPanelSnapshot>>;
16
+ /** Start a one-shot connectivity probe of one streamable-http server. */
17
+ probe: (serverName: string) => Promise<RemoteResult<ProbeStarted>>;
18
+ }
19
+ interface TypertRemoteMap {
20
+ 'mcpPanel/status': () => Promise<RemoteResult<McpPanelSnapshot>>;
21
+ 'mcpPanel/probe': (serverName: string) => Promise<RemoteResult<ProbeStarted>>;
22
+ }
23
+ interface TypertRemoteNamespaceMap {
24
+ mcpPanel: TypertRemoteNamespace$mcpPanel;
25
+ }
26
+ }
27
+ /** The client Remote contribution for the `mcpPanel` namespace. */
28
+ export declare const MCP_PANEL_REMOTE: Readonly<{
29
+ package: string;
30
+ descriptors: readonly (Readonly<{
31
+ readonly id: "dsh-mcp-panel#mcpPanel/status";
32
+ readonly service: "mcpPanel";
33
+ readonly namespace: "mcpPanel";
34
+ readonly method: "status";
35
+ readonly invocation: Readonly<{
36
+ kind: "direct";
37
+ }>;
38
+ readonly parameters: readonly never[];
39
+ readonly result: Readonly<{
40
+ mode: "strict";
41
+ typeSymbol: "dsh-mcp-panel/types#McpPanelSnapshot";
42
+ schema: import("zod").ZodObject<{
43
+ observed: import("zod").ZodBoolean;
44
+ patchFile: import("zod").ZodNullable<import("zod").ZodString>;
45
+ refreshIntervalMs: import("zod").ZodNumber;
46
+ servers: import("zod").ZodArray<import("zod").ZodObject<{
47
+ serverName: import("zod").ZodString;
48
+ entryId: import("zod").ZodString;
49
+ transport: import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"stdio">, import("zod").ZodLiteral<"streamable-http">, import("zod").ZodLiteral<"unknown">]>;
50
+ target: import("zod").ZodString;
51
+ enabled: import("zod").ZodBoolean;
52
+ fiberPhase: import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"pending">, import("zod").ZodLiteral<"loading">, import("zod").ZodLiteral<"active">, import("zod").ZodLiteral<"failed">, import("zod").ZodLiteral<"unloading">, import("zod").ZodNull]>;
53
+ configuredNote: import("zod").ZodNullable<import("zod").ZodString>;
54
+ toolCount: import("zod").ZodNumber;
55
+ tools: import("zod").ZodArray<import("zod").ZodObject<{
56
+ name: import("zod").ZodString;
57
+ description: import("zod").ZodString;
58
+ }, import("zod/v4/core").$strip>>;
59
+ phase: import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"connecting">, import("zod").ZodLiteral<"connected">, import("zod").ZodLiteral<"waiting">, import("zod").ZodLiteral<"exhausted">, import("zod").ZodLiteral<"disposed">, import("zod").ZodLiteral<"unknown">]>;
60
+ attempt: import("zod").ZodNumber;
61
+ maxAttempts: import("zod").ZodNumber;
62
+ delayMs: import("zod").ZodNullable<import("zod").ZodNumber>;
63
+ reconnectCount: import("zod").ZodNumber;
64
+ lastError: import("zod").ZodNullable<import("zod").ZodString>;
65
+ connectedAt: import("zod").ZodNullable<import("zod").ZodNumber>;
66
+ observedAt: import("zod").ZodNullable<import("zod").ZodNumber>;
67
+ probeState: import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"reachable">, import("zod").ZodLiteral<"unreachable">, import("zod").ZodNull]>;
68
+ probeCheckedAt: import("zod").ZodNullable<import("zod").ZodNumber>;
69
+ statusSource: import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"upstream-event">, import("zod").ZodLiteral<"derived">]>;
70
+ }, import("zod/v4/core").$strip>>;
71
+ probes: import("zod").ZodArray<import("zod").ZodObject<{
72
+ id: import("zod").ZodString;
73
+ serverName: import("zod").ZodString;
74
+ status: import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"running">, import("zod").ZodLiteral<"stopping">, import("zod").ZodLiteral<"completed">, import("zod").ZodLiteral<"killed">, import("zod").ZodLiteral<"failed">]>;
75
+ startedAt: import("zod").ZodNumber;
76
+ finishedAt: import("zod").ZodNullable<import("zod").ZodNumber>;
77
+ detail: import("zod").ZodNullable<import("zod").ZodString>;
78
+ }, import("zod/v4/core").$strip>>;
79
+ }, import("zod/v4/core").$strip>;
80
+ }>;
81
+ readonly sourceLocation: Readonly<{
82
+ file: "src/wire.ts";
83
+ line: 1;
84
+ column: 1;
85
+ }>;
86
+ }> | Readonly<{
87
+ readonly id: "dsh-mcp-panel#mcpPanel/probe";
88
+ readonly service: "mcpPanel";
89
+ readonly namespace: "mcpPanel";
90
+ readonly method: "probe";
91
+ readonly invocation: Readonly<{
92
+ kind: "direct";
93
+ }>;
94
+ readonly parameters: readonly Readonly<{
95
+ name: string;
96
+ wire: string;
97
+ source: "json";
98
+ codec: Readonly<{
99
+ mode: "strict";
100
+ typeSymbol: "dsh-mcp-panel/types#ProbeRequestServerName";
101
+ schema: import("zod").ZodString;
102
+ }>;
103
+ }>[];
104
+ readonly result: Readonly<{
105
+ mode: "strict";
106
+ typeSymbol: "dsh-mcp-panel/types#ProbeStarted";
107
+ schema: import("zod").ZodObject<{
108
+ jobId: import("zod").ZodString;
109
+ note: import("zod").ZodString;
110
+ }, import("zod/v4/core").$strip>;
111
+ }>;
112
+ readonly sourceLocation: Readonly<{
113
+ file: "src/wire.ts";
114
+ line: 1;
115
+ column: 1;
116
+ }>;
117
+ }>)[];
118
+ }>;
119
+ //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../../src/client/remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,kCAAkC,CAAA;AAE9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEhE,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,8BAA8B;QACtC,+CAA+C;QAC/C,MAAM,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACrD,yEAAyE;QACzE,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAA;KACnE;IACD,UAAU,eAAe;QACvB,iBAAiB,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAA;QAChE,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAA;KAC9E;IACD,UAAU,wBAAwB;QAChC,QAAQ,EAAE,8BAA8B,CAAA;KACzC;CACF;AAED,mEAAmE;AACnE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGQ,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Scoped stylesheet for the MCP tab. Standalone client bundles cannot use the
3
+ * in-repo CSS-module pipeline, so the sheet ships as a string and is
4
+ * installed effect-scoped into a `<style data-dsh-mcp-panel>` element.
5
+ * Every selector is scoped under `[data-dsh-mcp-panel]` and uses theme
6
+ * design tokens only, so it follows both color schemes.
7
+ *
8
+ * @module dsh-mcp-panel/client/styles
9
+ */
10
+ /** One `<style>` installation; returns the exact disposer that removes it. */
11
+ export declare function installPanelStyles(): () => void;
12
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8EAA8E;AAC9E,wBAAgB,kBAAkB,IAAI,MAAM,IAAI,CAQ/C"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * The `/mcp` human command over the official MCP client's observable facts.
3
+ * Output is a standard `CommandResult` (model-readable, logged by the
4
+ * commands service as `command/run` + `command/done`, so every line is
5
+ * reconstructable from the session log).
6
+ *
7
+ * - `/mcp` — one row per server: transport, target, tool count, connection
8
+ * status (honest: `unknown` until the upstream seam ships), recent error,
9
+ * reconnect count.
10
+ * - `/mcp <server>` — that server's row.
11
+ * - `/mcp <server> tools` — model-visible tool names + one-line descriptions.
12
+ * - `/mcp <server> disable|enable` — a controlled patch suggestion (the exact
13
+ * `cordis.patch.yml` line + the reload path). The command never edits
14
+ * configuration files and never fakes a runtime effect.
15
+ *
16
+ * Renderers are pure functions of the snapshot plus a message dictionary, so
17
+ * the output language is a config choice (`outputLanguage: en|zh`) without
18
+ * touching the command lifecycle.
19
+ *
20
+ * @module dsh-mcp-panel/command
21
+ */
22
+ import type { CommandDefinition } from '@deepseek-ai/dsh-commands';
23
+ import type { McpPanelService } from './service.ts';
24
+ import type { McpPanelSnapshot, McpServerView } from './wire.ts';
25
+ /** Display language for the `/mcp` output. */
26
+ export type CommandLanguage = 'en' | 'zh' | 'es' | 'pt' | 'hi';
27
+ /** Every display string the renderers emit, per language. */
28
+ export interface CommandMessages {
29
+ enabled: string;
30
+ disabled: string;
31
+ status: string;
32
+ reconnects: string;
33
+ lastError: string;
34
+ retryIn: string;
35
+ cordisFiberFailed: string;
36
+ tools: string;
37
+ serversHeader: (count: number) => string;
38
+ noServers: string;
39
+ noteNoSeam: string;
40
+ noteProposal: string;
41
+ noTools: (server: string) => string;
42
+ toolsHeader: (server: string, count: number) => string;
43
+ noDescription: string;
44
+ patchIntro: (action: string, server: string, entryId: string, patchFile: string | null) => string;
45
+ patchNoRuntimeToggle: string;
46
+ patchReloadPath: string;
47
+ usage: string;
48
+ probeStarted: (server: string, jobId: string) => string;
49
+ unknownServer: (server: string, known: string) => string;
50
+ }
51
+ /** English output dictionary (default). */
52
+ export declare const EN_MESSAGES: CommandMessages;
53
+ /** Simplified Chinese output dictionary. */
54
+ export declare const ZH_MESSAGES: CommandMessages;
55
+ /** Spanish output dictionary. */
56
+ export declare const ES_MESSAGES: CommandMessages;
57
+ /** Portuguese output dictionary. */
58
+ export declare const PT_MESSAGES: CommandMessages;
59
+ /** Hindi output dictionary. */
60
+ export declare const HI_MESSAGES: CommandMessages;
61
+ /**
62
+ * Render one server row: `name [entryId] transport target | N tools | …`.
63
+ *
64
+ * @param view - the assembled server view.
65
+ * @param messages - the output dictionary.
66
+ * @returns the single display line.
67
+ */
68
+ export declare function renderServer(view: McpServerView, messages?: CommandMessages): string;
69
+ /**
70
+ * Render the no-argument listing.
71
+ *
72
+ * @param snapshot - the current snapshot.
73
+ * @param messages - the output dictionary.
74
+ * @returns the full listing text.
75
+ */
76
+ export declare function renderList(snapshot: McpPanelSnapshot, messages?: CommandMessages): string;
77
+ /**
78
+ * Render the tool list for one server.
79
+ *
80
+ * @param view - the assembled server view.
81
+ * @param messages - the output dictionary.
82
+ * @returns the tool listing text.
83
+ */
84
+ export declare function renderTools(view: McpServerView, messages?: CommandMessages): string;
85
+ /**
86
+ * Render the controlled enable/disable patch suggestion. Reads only; the user
87
+ * applies the line themselves. The web surface hot-reloads the profile patch
88
+ * layer; other surfaces apply it on restart.
89
+ *
90
+ * @param view - the assembled server view.
91
+ * @param action - which direction the suggestion flips.
92
+ * @param patchFile - absolute profile patch-layer path, or null when unknown.
93
+ * @param messages - the output dictionary.
94
+ * @returns the suggestion text.
95
+ */
96
+ export declare function renderPatchSuggestion(view: McpServerView, action: 'disable' | 'enable', patchFile: string | null, messages?: CommandMessages): string;
97
+ /** Parsed `/mcp` arguments. */
98
+ export type McpCommandArgs = {
99
+ readonly kind: 'list';
100
+ } | {
101
+ readonly kind: 'server';
102
+ readonly server: string;
103
+ readonly action: 'detail' | 'tools' | 'disable' | 'enable' | 'probe';
104
+ } | {
105
+ readonly kind: 'usage';
106
+ };
107
+ /**
108
+ * Parse the free-form command input.
109
+ *
110
+ * @param rawInput - text after `/mcp`, including leading whitespace.
111
+ * @returns the parsed intent; malformed input becomes `usage`.
112
+ */
113
+ export declare function parseMcpArgs(rawInput: string): McpCommandArgs;
114
+ /**
115
+ * Build the `/mcp` command definition over one service instance.
116
+ *
117
+ * @param service - the panel service supplying snapshots.
118
+ * @param language - output language for the rendered text.
119
+ * @returns the registration-ready definition.
120
+ */
121
+ export declare function mcpCommand(service: McpPanelService, language?: CommandLanguage): CommandDefinition;
122
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/command.ts"],"names":[],"mappings":"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"}