@yejiming/dsh-data-agent 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { C as isDatabaseType, S as defaultDatabasePort$1, b as DATABASE_TYPES, i as validatePasswordRef, r as redactSecretText, x as databaseTypeLabel$1 } from "./connections-dGPjgsGg.js";
1
+ import { C as isDatabaseType, S as defaultDatabasePort$1, b as DATABASE_TYPES, i as validatePasswordRef, r as redactSecretText, x as databaseTypeLabel$1 } from "./connections-eb9xwiLF.js";
2
2
  import { RUN_CODE_NAME } from "@deepseek-ai/dsh-tools";
3
3
  //#region src/tui-connection-form.ts
4
4
  /**
package/lib/command.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as executeDatabaseCommand, c as isDshTuiPluginLoaded, d as parseDatabaseAction, i as apply, l as name, n as DATA_AGENT_TOOL_NAMES, o as formatConnectionStatus, r as DSH_TUI_PLUGIN_RUNTIME_NAME, s as inject, t as DATABASE_COMMAND_USAGE, u as parseConnectArguments } from "./command-scZcZG11.js";
1
+ import { a as executeDatabaseCommand, c as isDshTuiPluginLoaded, d as parseDatabaseAction, i as apply, l as name, n as DATA_AGENT_TOOL_NAMES, o as formatConnectionStatus, r as DSH_TUI_PLUGIN_RUNTIME_NAME, s as inject, t as DATABASE_COMMAND_USAGE, u as parseConnectArguments } from "./command-CzqwgIFj.js";
2
2
  export { DATABASE_COMMAND_USAGE, DATA_AGENT_TOOL_NAMES, DSH_TUI_PLUGIN_RUNTIME_NAME, apply, executeDatabaseCommand, formatConnectionStatus, inject, isDshTuiPluginLoaded, name, parseConnectArguments, parseDatabaseAction };
@@ -1052,15 +1052,32 @@ function stdinPrefix(type, connection) {
1052
1052
  function structuredStdinPrefix(type, connection) {
1053
1053
  if (type !== "oracle") return stdinPrefix(type, connection);
1054
1054
  return `${[
1055
- "SET PAGESIZE 0",
1055
+ "SET PAGESIZE 50000",
1056
1056
  "SET FEEDBACK OFF",
1057
1057
  "SET HEADING ON",
1058
1058
  "SET UNDERLINE OFF",
1059
+ "SET LINESIZE 32767",
1060
+ "SET WRAP OFF",
1061
+ "SET RECSEP OFF",
1062
+ "SET ECHO OFF",
1063
+ "SET VERIFY OFF",
1059
1064
  "SET COLSEP '|'",
1060
1065
  "SET TRIMSPOOL ON",
1066
+ "WHENEVER OSERROR EXIT FAILURE",
1067
+ "WHENEVER SQLERROR EXIT FAILURE",
1061
1068
  connection.user !== void 0 ? `connect ${connection.user}${connection.password !== void 0 ? `/${connection.password}` : ""}@${connection.host ?? "127.0.0.1"}:${connection.port ?? defaultDatabasePort("oracle")}/${connection.database}` : ""
1062
1069
  ].filter((line) => line !== "").join("\n")}\n`;
1063
1070
  }
1071
+ /**
1072
+ * Compose one complete client stdin payload. Oracle's structured SQL*Plus
1073
+ * mode is a script protocol rather than an EOF-delimited command: normalize
1074
+ * the already-validated statement to one terminator and exit explicitly.
1075
+ * Raw/introspection modes and every other client preserve the legacy payload.
1076
+ */
1077
+ function buildClientStdin(type, mode, prefix, sql) {
1078
+ if (type === "oracle" && mode === "structured") return `${prefix}${stripTrailingTerminator(sql)};\nEXIT SUCCESS\n`;
1079
+ return `${prefix}${sql}\n`;
1080
+ }
1064
1081
  /** Apply one deployment override's extra args in front of the built-in flags. */
1065
1082
  function withOverrides(flags, override) {
1066
1083
  if (override === void 0 || override.args === void 0) return flags;
@@ -1711,12 +1728,13 @@ async function runClientQuery(ctx, connection, sql, options, externalSignal, int
1711
1728
  if (externalSignal.aborted) controller.abort(externalSignal.reason);
1712
1729
  else externalSignal.addEventListener("abort", onExternalAbort, { once: true });
1713
1730
  try {
1731
+ const mode = options.mode ?? (introspect ? "introspect" : "query");
1714
1732
  if (connection.type === "clickhouse") return await runClickHouseQuery(connection, sql, {
1715
1733
  ...options,
1716
- mode: options.mode ?? (introspect ? "introspect" : "query")
1734
+ mode
1717
1735
  }, controller.signal);
1718
1736
  if (connection.type === "sqlserver") assertSqlServerSafeInput(sql);
1719
- const template = options.mode === "structured" ? buildStructuredQueryTemplate(connection.type, connection, options.clients[connection.type]) : options.mode === "introspect" || introspect ? buildIntrospectTemplate(connection.type, connection, options.clients[connection.type]) : buildClientTemplate(connection.type, connection, options.clients[connection.type]);
1737
+ const template = mode === "structured" ? buildStructuredQueryTemplate(connection.type, connection, options.clients[connection.type]) : mode === "introspect" ? buildIntrospectTemplate(connection.type, connection, options.clients[connection.type]) : buildClientTemplate(connection.type, connection, options.clients[connection.type]);
1720
1738
  const resolution = await resolveClientExecutable({
1721
1739
  type: connection.type,
1722
1740
  command: template.command,
@@ -1729,7 +1747,7 @@ async function runClientQuery(ctx, connection, sql, options, externalSignal, int
1729
1747
  argv: [resolution.executable, ...template.args],
1730
1748
  cwd: process.cwd(),
1731
1749
  stdio: {
1732
- stdin: { data: `${template.stdinPrefix}${sql}\n` },
1750
+ stdin: { data: buildClientStdin(connection.type, mode, template.stdinPrefix, sql) },
1733
1751
  stdout: { maxBytes: options.maxResultChars },
1734
1752
  stderr: { maxBytes: options.maxResultChars }
1735
1753
  },
@@ -1747,12 +1765,14 @@ async function runClientQuery(ctx, connection, sql, options, externalSignal, int
1747
1765
  if (controller.signal.aborted) controller.signal.throwIfAborted();
1748
1766
  const stdout = readCaptured(handle.collected.stdout);
1749
1767
  const stderr = readCaptured(handle.collected.stderr);
1750
- return {
1768
+ const result = {
1751
1769
  exitCode: outcome.exitCode,
1752
1770
  stdout: connection.type === "sqlserver" ? stripSqlServerRowCountFooter(stdout.text) : stdout.text,
1753
1771
  stderr: stderr.text,
1754
1772
  truncated: stdout.truncated || stderr.truncated
1755
1773
  };
1774
+ if (connection.type === "oracle" && mode === "structured" && result.exitCode === 0 && result.stdout.trim() === "") throw new Error("Oracle SQL*Plus结构化查询成功退出但stdout为空,未返回可解析的列标题或数据");
1775
+ return result;
1756
1776
  } finally {
1757
1777
  clearTimeout(timer);
1758
1778
  externalSignal.removeEventListener("abort", onExternalAbort);
package/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { _ as clientsSchema, b as DATABASE_TYPES, c as DEFAULT_CATALOG_MAX_RESULT_CHARS, d as DEFAULT_CONNECT_TIMEOUT_MS, f as DEFAULT_MAX_QUERY_CHARS, h as DEFAULT_QUERY_TIMEOUT_MS, l as DEFAULT_CATALOG_MAX_TEXT_CHARS, m as DEFAULT_PRESET_ID, p as DEFAULT_MAX_RESULT_CHARS, s as DEFAULT_CATALOG_MAX_ASSETS, t as createConnectionService, u as DEFAULT_CATALOG_QUERY_TIMEOUT_MS } from "./connections-dGPjgsGg.js";
2
- import { a as catalogDateTimeSchema, c as catalogRunSchema, f as catalogSemanticEntrySchema, i as catalogAssetRevisionSchema, m as catalogSourceSchema, n as createCatalogService, o as catalogObservationSchema, p as catalogSemanticRevisionSchema, r as catalogAssetHeadSchema, s as catalogRelationSchema, u as catalogSearchItemSchema } from "./catalog-CbxIDQBG.js";
3
- import { i as apply$1 } from "./command-scZcZG11.js";
4
- import { n as apply$2 } from "./tool-Du1EadNP.js";
1
+ import { _ as clientsSchema, b as DATABASE_TYPES, c as DEFAULT_CATALOG_MAX_RESULT_CHARS, d as DEFAULT_CONNECT_TIMEOUT_MS, f as DEFAULT_MAX_QUERY_CHARS, h as DEFAULT_QUERY_TIMEOUT_MS, l as DEFAULT_CATALOG_MAX_TEXT_CHARS, m as DEFAULT_PRESET_ID, p as DEFAULT_MAX_RESULT_CHARS, s as DEFAULT_CATALOG_MAX_ASSETS, t as createConnectionService, u as DEFAULT_CATALOG_QUERY_TIMEOUT_MS } from "./connections-eb9xwiLF.js";
2
+ import { a as catalogDateTimeSchema, c as catalogRunSchema, f as catalogSemanticEntrySchema, i as catalogAssetRevisionSchema, m as catalogSourceSchema, n as createCatalogService, o as catalogObservationSchema, p as catalogSemanticRevisionSchema, r as catalogAssetHeadSchema, s as catalogRelationSchema, u as catalogSearchItemSchema } from "./catalog-D0SV_6Jv.js";
3
+ import { i as apply$1 } from "./command-CzqwgIFj.js";
4
+ import { n as apply$2 } from "./tool-B7CC1EPd.js";
5
5
  import { createHash } from "node:crypto";
6
6
  import { access, cp, mkdir, readFile, writeFile } from "node:fs/promises";
7
7
  import { homedir } from "node:os";
package/lib/routes.js CHANGED
@@ -1,5 +1,5 @@
1
- import { C as isDatabaseType, b as DATABASE_TYPES, d as DEFAULT_CONNECT_TIMEOUT_MS, f as DEFAULT_MAX_QUERY_CHARS, h as DEFAULT_QUERY_TIMEOUT_MS, p as DEFAULT_MAX_RESULT_CHARS } from "./connections-dGPjgsGg.js";
2
- import { d as catalogSearchRequestSchema, h as semanticDefinitionSchema, l as catalogScopeSchema, t as CatalogVersionConflictError } from "./catalog-CbxIDQBG.js";
1
+ import { C as isDatabaseType, b as DATABASE_TYPES, d as DEFAULT_CONNECT_TIMEOUT_MS, f as DEFAULT_MAX_QUERY_CHARS, h as DEFAULT_QUERY_TIMEOUT_MS, p as DEFAULT_MAX_RESULT_CHARS } from "./connections-eb9xwiLF.js";
2
+ import { d as catalogSearchRequestSchema, h as semanticDefinitionSchema, l as catalogScopeSchema, t as CatalogVersionConflictError } from "./catalog-D0SV_6Jv.js";
3
3
  import { resolve } from "node:path";
4
4
  import z from "schemastery";
5
5
  import { z as z$1 } from "zod";
@@ -1,4 +1,4 @@
1
- import { _ as clientsSchema, a as parseStructuredQueryOutput, f as DEFAULT_MAX_QUERY_CHARS, g as classifyStatement, h as DEFAULT_QUERY_TIMEOUT_MS, n as redactQueryResult, o as runClientQuery, p as DEFAULT_MAX_RESULT_CHARS, r as redactSecretText, v as enforceReadRowLimit, y as assertSingleStatement } from "./connections-dGPjgsGg.js";
1
+ import { _ as clientsSchema, a as parseStructuredQueryOutput, f as DEFAULT_MAX_QUERY_CHARS, g as classifyStatement, h as DEFAULT_QUERY_TIMEOUT_MS, n as redactQueryResult, o as runClientQuery, p as DEFAULT_MAX_RESULT_CHARS, r as redactSecretText, v as enforceReadRowLimit, y as assertSingleStatement } from "./connections-eb9xwiLF.js";
2
2
  import { l as normalizeCatalogText } from "./catalog-identity-CVftmvQL.js";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { link, mkdir, unlink, writeFile } from "node:fs/promises";
package/lib/tool.js CHANGED
@@ -1,2 +1,2 @@
1
- import { i as name, n as apply, r as inject, t as Config } from "./tool-Du1EadNP.js";
1
+ import { i as name, n as apply, r as inject, t as Config } from "./tool-B7CC1EPd.js";
2
2
  export { Config, apply, inject, name };
@@ -1,5 +1,5 @@
1
1
  /** Read-only Catalog model tools. No scan or review service is injected here. */
2
2
  import type { Context } from '@deepseek-ai/cordis';
3
- import { type JsonValue } from '@deepseek-ai/dsh-tools';
3
+ import type { JsonValue } from '@deepseek-ai/dsh-util-values';
4
4
  export declare function applyCatalogTools(ctx: Context): void;
5
5
  export declare function sanitizeToolValue(value: unknown): JsonValue;
@@ -0,0 +1,24 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { AgentPresetSeatProps, AgentPresetSeatState } from '@deepseek-ai/dsh-client-ui-agent-preset/client';
3
+ import type { TranslateNS } from '@deepseek-ai/dsh-client-ui-slots';
4
+ import { type ObservableSnapshot, type WorkbenchOpenSnapshot } from './workbench-open.ts';
5
+ export interface DataAgentHeroControlsInjected {
6
+ /** The host entry shadowed by this additive wrapper. */
7
+ originalSeat: ComponentType<AgentPresetSeatProps>;
8
+ /** Data-agent copy; the slot's own `t` remains bound to agent-preset copy. */
9
+ dataAgentT: TranslateNS<'data-agent'>;
10
+ requestWorkbench(): void;
11
+ useHeroWorkbench: <T>(selector: (snapshot: WorkbenchOpenSnapshot) => T) => T;
12
+ }
13
+ export type DataAgentHeroControlsProps = AgentPresetSeatProps & DataAgentHeroControlsInjected;
14
+ /** Render the original preset picker plus the database entry for data-agent. */
15
+ export declare function DataAgentHeroControls(props: DataAgentHeroControlsProps): import("react").JSX.Element;
16
+ /** Structural type of the host preset entry's raw inject face. */
17
+ export interface HostAgentPresetSeatFace {
18
+ hooks: {
19
+ agentPresetSeat: ObservableSnapshot<AgentPresetSeatState>;
20
+ };
21
+ load(): Promise<void>;
22
+ select(id: string): Promise<string | undefined>;
23
+ introduced(): void;
24
+ }
@@ -1,9 +1,13 @@
1
1
  import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
2
+ import { type ObservableSnapshot, type WorkbenchOpenSnapshot } from './workbench-open.ts';
2
3
  export type { DatabaseType } from '../database-types.ts';
3
4
  /** The sessions-list slice the workbench needs (structural; avoids a runtime import). */
4
5
  export interface SessionListLike {
6
+ current?: string;
5
7
  byId: Record<string, {
6
- agentPreset?: string;
8
+ projectionValues?: {
9
+ agentPreset?: string | null;
10
+ };
7
11
  }>;
8
12
  }
9
13
  /** Registration-side business face: the sessions-list observable becomes `useSessions`. */
@@ -13,9 +17,11 @@ export interface DataAgentWorkbenchInjected {
13
17
  getSnapshot(): SessionListLike;
14
18
  subscribe(fn: () => void): () => void;
15
19
  };
20
+ workbenchOpen: ObservableSnapshot<WorkbenchOpenSnapshot>;
16
21
  };
22
+ acknowledgeWorkbenchOpen(revision: number): void;
17
23
  }
18
24
  /** The workbench's full component props: the composer-right seat + locale + sessions hook. */
19
25
  export type DataAgentWorkbenchProps = PropsRuntime<'conversation.input.right'> & PropsLocale<'data-agent'> & InjectFace<DataAgentWorkbenchInjected>;
20
26
  /** The database workbench body. */
21
- export declare function DataAgentWorkbench({ sessionId, useSessions, t }: DataAgentWorkbenchProps): import("react").JSX.Element | null;
27
+ export declare function DataAgentWorkbench({ sessionId, useSessions, useWorkbenchOpen, acknowledgeWorkbenchOpen, t, }: DataAgentWorkbenchProps): import("react").JSX.Element | null;
@@ -14,7 +14,7 @@
14
14
  * degrade to the safe model content text, never guess or re-query.
15
15
  * @module @yejiming/dsh-data-agent/client/analysis-view-model
16
16
  */
17
- import type { ToolCallBlock } from '@deepseek-ai/dsh-client-runtime/client';
17
+ import type { ToolCallBlock } from '@deepseek-ai/dsh-client-ui-conversation/client';
18
18
  import { type AnalysisReportV1 } from '../analysis.ts';
19
19
  /** The five display states of one render-analysis call. */
20
20
  export type AnalysisBlockState = 'running' | 'error' | 'interrupted' | 'report' | 'fallback';
@@ -7,7 +7,7 @@
7
7
  * `/plugins/data-agent/status` reports.
8
8
  * @module @yejiming/dsh-data-agent/client
9
9
  */
10
- import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
10
+ import type { Context as ClientContext } from '@deepseek-ai/cordis';
11
11
  import { type DataAgentKey } from './locales.ts';
12
12
  declare module '@deepseek-ai/dsh-client-ui-slots' {
13
13
  interface LocaleNamespaceMap {
@@ -15,7 +15,7 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
15
15
  'data-agent': DataAgentKey;
16
16
  }
17
17
  }
18
- /** Required services: the locale service, the slot registry, and the sessions list. */
18
+ /** Required services: locale/slots, Session state, and host New Session navigation. */
19
19
  export declare const inject: string[];
20
20
  /**
21
21
  * Client plugin body: register the data-agent dictionaries and the database
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Cross-surface hand-off for opening the session-scoped database workbench
3
+ * from the alpha.2 New Session hero, where no Session scope exists yet.
4
+ */
5
+ import type { SessionListLike } from './DataAgentWorkbench.tsx';
6
+ /** The plugin preset id used by both the hero stage and Session projection. */
7
+ export declare const DATA_AGENT_PRESET = "data-agent";
8
+ /** Minimal observable contract consumed by the slot renderer's Hook binder. */
9
+ export interface ObservableSnapshot<T> {
10
+ getSnapshot(): T;
11
+ subscribe(fn: () => void): () => void;
12
+ }
13
+ /** One pending/ready request to open the workbench. */
14
+ export interface WorkbenchOpenSnapshot {
15
+ pending: boolean;
16
+ revision: number;
17
+ sessionId?: string;
18
+ }
19
+ /** The Session-list operations needed to bridge a root action into one Session. */
20
+ export interface SessionListSource extends ObservableSnapshot<SessionListLike> {
21
+ }
22
+ export interface WorkbenchOpenBridge {
23
+ store: ObservableSnapshot<WorkbenchOpenSnapshot>;
24
+ /** Start the host's New Session flow and open once data-agent is mounted. */
25
+ requestFromHero(): void;
26
+ /** Clear a delivered request after the target workbench accepts it. */
27
+ acknowledge(revision: number): void;
28
+ dispose(): void;
29
+ }
30
+ /**
31
+ * Create the one-way hero → Session workbench bridge.
32
+ *
33
+ * The host remains responsible for workspace inheritance, Session creation,
34
+ * navigation, and applying the staged agent preset. This bridge only waits
35
+ * for the resulting Session projection before publishing an open request.
36
+ */
37
+ export declare function createWorkbenchOpenBridge(sessions: SessionListSource, startSession: () => void): WorkbenchOpenBridge;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Apply data-agent copy to one host composer card and return an exact cleanup.
3
+ * alpha.2's Lexical surface renders a visible placeholder sibling in addition
4
+ * to the editor attributes; older compatible surfaces still use a textarea.
5
+ */
6
+ export declare function overrideComposerPlaceholder(card: ParentNode | null | undefined, placeholder: string): (() => void) | undefined;
@@ -89,6 +89,13 @@ export interface ClientTemplate {
89
89
  /** stdin text written BEFORE the SQL (Oracle SET/connect, Hive !connect); '' otherwise. */
90
90
  stdinPrefix: string;
91
91
  }
92
+ /**
93
+ * Compose one complete client stdin payload. Oracle's structured SQL*Plus
94
+ * mode is a script protocol rather than an EOF-delimited command: normalize
95
+ * the already-validated statement to one terminator and exit explicitly.
96
+ * Raw/introspection modes and every other client preserve the legacy payload.
97
+ */
98
+ export declare function buildClientStdin(type: DatabaseType, mode: 'query' | 'introspect' | 'structured', prefix: string, sql: string): string;
92
99
  /**
93
100
  * Build one client invocation for a query execution (plain output). Flags
94
101
  * come BEFORE the connection arguments everywhere: sqlite3 takes
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@yejiming/dsh-data-agent",
3
3
  "description": "Data Agent for DSH Web and TUI: shared database connections, versioned metadata Catalog governance, secure credentials, SQL and Catalog tools, and the data-agent preset",
4
- "version": "0.1.2",
4
+ "version": "0.1.4",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -49,15 +49,22 @@
49
49
  "./cordis.patch.yml": "./cordis.patch.yml"
50
50
  },
51
51
  "dsh": {
52
+ "engines": {
53
+ "dsh": ">=0.1.2-alpha.2"
54
+ },
52
55
  "bundle": {
53
56
  "patch": "./cordis.patch.yml"
54
57
  },
55
58
  "client": {
56
59
  "inject": [
60
+ "@deepseek-ai/dsh-api-session-controller",
57
61
  "@deepseek-ai/dsh-client-locale",
58
- "@deepseek-ai/dsh-client-runtime",
62
+ "@deepseek-ai/dsh-client-ui-agent-preset",
59
63
  "@deepseek-ai/dsh-client-ui-tool",
60
- "@deepseek-ai/dsh-client-ui-conversation"
64
+ "@deepseek-ai/dsh-client-ui-conversation",
65
+ "@deepseek-ai/dsh-client-ui-renderer",
66
+ "@deepseek-ai/dsh-client-ui-session",
67
+ "@deepseek-ai/dsh-client-ui-workspace"
61
68
  ],
62
69
  "platform": "web"
63
70
  }
@@ -88,35 +95,43 @@
88
95
  "zod": "^4.4.3"
89
96
  },
90
97
  "peerDependencies": {
91
- "@deepseek-ai/cordis": "^4.0.1",
92
- "@deepseek-ai/dsh-agent": "^0.1.0-rc.7",
93
- "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.7",
94
- "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7",
95
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7",
96
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7",
97
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7",
98
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7",
99
- "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.7",
100
- "@deepseek-ai/dsh-commands": "^0.1.0-rc.7",
101
- "@deepseek-ai/dsh-credentials": "^0.1.0-rc.7",
102
- "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7",
103
- "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7",
104
- "@deepseek-ai/dsh-llm": "^0.1.0-rc.7",
105
- "@deepseek-ai/dsh-scope": "^0.1.0-rc.7",
106
- "@deepseek-ai/dsh-session": "^0.1.0-rc.7",
107
- "@deepseek-ai/dsh-storage": "^0.1.0-rc.7",
108
- "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.7",
109
- "@deepseek-ai/dsh-storage-json": "^0.1.0-rc.7",
110
- "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7",
111
- "@deepseek-ai/dsh-tools": "^0.1.0-rc.7",
112
- "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.7",
98
+ "@deepseek-ai/cordis": "^4.0.2",
99
+ "@deepseek-ai/dsh-agent": "^0.1.2-alpha.2",
100
+ "@deepseek-ai/dsh-agent-presets": "^0.1.2-alpha.2",
101
+ "@deepseek-ai/dsh-api-session-controller": "^0.1.2-alpha.2",
102
+ "@deepseek-ai/dsh-client-locale": "^0.1.2-alpha.2",
103
+ "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.2-alpha.2",
104
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-alpha.2",
105
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-alpha.2",
106
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-alpha.2",
107
+ "@deepseek-ai/dsh-client-ui-session": "^0.1.2-alpha.2",
108
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.2-alpha.2",
109
+ "@deepseek-ai/dsh-client-ui-tool": "^0.1.2-alpha.2",
110
+ "@deepseek-ai/dsh-client-ui-workspace": "^0.1.2-alpha.2",
111
+ "@deepseek-ai/dsh-commands": "^0.1.2-alpha.2",
112
+ "@deepseek-ai/dsh-credentials": "^0.1.2-alpha.2",
113
+ "@deepseek-ai/dsh-host-webserver": "^0.1.2-alpha.2",
114
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
115
+ "@deepseek-ai/dsh-llm": "^0.1.2-alpha.2",
116
+ "@deepseek-ai/dsh-scope": "^0.1.2-alpha.2",
117
+ "@deepseek-ai/dsh-session": "^0.1.2-alpha.2",
118
+ "@deepseek-ai/dsh-storage": "^0.1.2-alpha.2",
119
+ "@deepseek-ai/dsh-storage-domain": "^0.1.2-alpha.2",
120
+ "@deepseek-ai/dsh-storage-json": "^0.1.2-alpha.2",
121
+ "@deepseek-ai/dsh-subprocess": "^0.1.2-alpha.2",
122
+ "@deepseek-ai/dsh-tools": "^0.1.2-alpha.2",
123
+ "@deepseek-ai/dsh-user-questions": "^0.1.2-alpha.2",
124
+ "@deepseek-ai/dsh-util-values": "^0.1.2-alpha.2",
113
125
  "react": "^18.2.0 || ^19.0.0"
114
126
  },
115
127
  "peerDependenciesMeta": {
116
128
  "@deepseek-ai/dsh-client-locale": {
117
129
  "optional": true
118
130
  },
119
- "@deepseek-ai/dsh-client-runtime": {
131
+ "@deepseek-ai/dsh-api-session-controller": {
132
+ "optional": true
133
+ },
134
+ "@deepseek-ai/dsh-client-ui-agent-preset": {
120
135
  "optional": true
121
136
  },
122
137
  "@deepseek-ai/dsh-client-ui-conversation": {
@@ -125,6 +140,12 @@
125
140
  "@deepseek-ai/dsh-client-ui-primitives": {
126
141
  "optional": true
127
142
  },
143
+ "@deepseek-ai/dsh-client-ui-renderer": {
144
+ "optional": true
145
+ },
146
+ "@deepseek-ai/dsh-client-ui-session": {
147
+ "optional": true
148
+ },
128
149
  "@deepseek-ai/dsh-client-ui-slots": {
129
150
  "optional": true
130
151
  },
@@ -139,36 +160,44 @@
139
160
  },
140
161
  "@deepseek-ai/dsh-client-ui-tool": {
141
162
  "optional": true
163
+ },
164
+ "@deepseek-ai/dsh-client-ui-workspace": {
165
+ "optional": true
142
166
  }
143
167
  },
144
168
  "devDependencies": {
145
- "@deepseek-ai/cordis": "^4.0.1",
146
- "@deepseek-ai/dsh-agent": "^0.1.0-rc.7",
147
- "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.7",
148
- "@deepseek-ai/dsh-attachment": "0.1.0-rc.7",
149
- "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7",
150
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7",
151
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7",
152
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7",
153
- "@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.7",
154
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7",
155
- "@deepseek-ai/dsh-client-ui-tool": "0.1.0-rc.7",
156
- "@deepseek-ai/dsh-commands": "^0.1.0-rc.7",
157
- "@deepseek-ai/dsh-credentials": "^0.1.0-rc.7",
158
- "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7",
159
- "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7",
160
- "@deepseek-ai/dsh-llm": "0.1.0-rc.7",
161
- "@deepseek-ai/dsh-scope": "^0.1.0-rc.7",
162
- "@deepseek-ai/dsh-session": "0.1.0-rc.7",
163
- "@deepseek-ai/dsh-storage": "^0.1.0-rc.7",
164
- "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.7",
165
- "@deepseek-ai/dsh-storage-json": "^0.1.0-rc.7",
166
- "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7",
167
- "@deepseek-ai/dsh-subprocess-local": "0.1.0-rc.7",
168
- "@deepseek-ai/dsh-tools": "^0.1.0-rc.7",
169
- "@deepseek-ai/dsh-typert-protocol": "0.1.0-rc.7",
170
- "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.7",
171
- "@deepseek-ai/schemastery": "3.18.1",
169
+ "@deepseek-ai/cordis": "^4.0.2",
170
+ "@deepseek-ai/dsh-agent": "^0.1.2-alpha.2",
171
+ "@deepseek-ai/dsh-agent-presets": "^0.1.2-alpha.2",
172
+ "@deepseek-ai/dsh-api-session-controller": "^0.1.2-alpha.2",
173
+ "@deepseek-ai/dsh-attachment": "0.1.2-alpha.2",
174
+ "@deepseek-ai/dsh-client-locale": "^0.1.2-alpha.2",
175
+ "@deepseek-ai/dsh-client-ui-agent-preset": "0.1.2-alpha.2",
176
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-alpha.2",
177
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-alpha.2",
178
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.2-alpha.2",
179
+ "@deepseek-ai/dsh-client-ui-session": "0.1.2-alpha.2",
180
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.2-alpha.2",
181
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.2-alpha.2",
182
+ "@deepseek-ai/dsh-client-ui-tool": "0.1.2-alpha.2",
183
+ "@deepseek-ai/dsh-client-ui-workspace": "0.1.2-alpha.2",
184
+ "@deepseek-ai/dsh-commands": "^0.1.2-alpha.2",
185
+ "@deepseek-ai/dsh-credentials": "^0.1.2-alpha.2",
186
+ "@deepseek-ai/dsh-host-webserver": "^0.1.2-alpha.2",
187
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
188
+ "@deepseek-ai/dsh-llm": "0.1.2-alpha.2",
189
+ "@deepseek-ai/dsh-scope": "^0.1.2-alpha.2",
190
+ "@deepseek-ai/dsh-session": "0.1.2-alpha.2",
191
+ "@deepseek-ai/dsh-storage": "^0.1.2-alpha.2",
192
+ "@deepseek-ai/dsh-storage-domain": "^0.1.2-alpha.2",
193
+ "@deepseek-ai/dsh-storage-json": "^0.1.2-alpha.2",
194
+ "@deepseek-ai/dsh-subprocess": "^0.1.2-alpha.2",
195
+ "@deepseek-ai/dsh-subprocess-local": "0.1.2-alpha.2",
196
+ "@deepseek-ai/dsh-tools": "^0.1.2-alpha.2",
197
+ "@deepseek-ai/dsh-typert-protocol": "0.1.2-alpha.2",
198
+ "@deepseek-ai/dsh-user-questions": "^0.1.2-alpha.2",
199
+ "@deepseek-ai/dsh-util-values": "^0.1.2-alpha.2",
200
+ "@deepseek-ai/schemastery": "3.18.2",
172
201
  "@dsh-std/adapter-dsh": "0.1.0-rc3",
173
202
  "@dsh-std/command": "0.1.0-rc2",
174
203
  "@dsh-std/core": "0.1.0-rc1",