@dungsil/dsh-plugin-ui-vcs 0.4.1 → 0.4.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.
Files changed (3) hide show
  1. package/dist/client.js +65 -30
  2. package/dist/index.js +24 -12
  3. package/package.json +36 -33
package/dist/client.js CHANGED
@@ -10085,23 +10085,22 @@ function attentionDelete() {
10085
10085
  function peekDelete() {
10086
10086
  return "~";
10087
10087
  }
10088
- // ../../node_modules/.pnpm/mdast-util-gfm-table@2.0.0/node_modules/mdast-util-gfm-table/lib/index.js
10088
+ // ../../node_modules/.pnpm/mdast-util-gfm-table@2.0.1/node_modules/mdast-util-gfm-table/lib/index.js
10089
10089
  /**
10090
- * @typedef {import('mdast').InlineCode} InlineCode
10091
- * @typedef {import('mdast').Table} Table
10092
- * @typedef {import('mdast').TableCell} TableCell
10093
- * @typedef {import('mdast').TableRow} TableRow
10094
- *
10095
- * @typedef {import('markdown-table').Options} MarkdownTableOptions
10096
- *
10097
- * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext
10098
- * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension
10099
- * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle
10100
- *
10101
- * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension
10102
- * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle
10103
- * @typedef {import('mdast-util-to-markdown').State} State
10104
- * @typedef {import('mdast-util-to-markdown').Info} Info
10090
+ * @import {Heading, InlineCode, Table, TableCell, TableRow} from 'mdast'
10091
+ * @import {Options as MarkdownTableOptions} from 'markdown-table'
10092
+ * @import {
10093
+ * CompileContext,
10094
+ * Extension as FromMarkdownExtension,
10095
+ * Handle as FromMarkdownHandle,
10096
+ * } from 'mdast-util-from-markdown'
10097
+ * @import {
10098
+ * Options as ToMarkdownExtension,
10099
+ * Handle as ToMarkdownHandle,
10100
+ * Info,
10101
+ * Join,
10102
+ * State
10103
+ * } from 'mdast-util-to-markdown'
10105
10104
  */
10106
10105
  /**
10107
10106
  * @typedef Options
@@ -10140,6 +10139,8 @@ function gfmTableFromMarkdown() {
10140
10139
  };
10141
10140
  }
10142
10141
  /**
10142
+ * Enter a table.
10143
+ *
10143
10144
  * @this {CompileContext}
10144
10145
  * @type {FromMarkdownHandle}
10145
10146
  */
@@ -10150,11 +10151,14 @@ function enterTable(token) {
10150
10151
  align: align.map(function(d) {
10151
10152
  return d === "none" ? null : d;
10152
10153
  }),
10153
- children: []
10154
+ children: [],
10155
+ position: void 0
10154
10156
  }, token);
10155
10157
  this.data.inTable = true;
10156
10158
  }
10157
10159
  /**
10160
+ * Exit a table.
10161
+ *
10158
10162
  * @this {CompileContext}
10159
10163
  * @type {FromMarkdownHandle}
10160
10164
  */
@@ -10163,16 +10167,21 @@ function exitTable(token) {
10163
10167
  this.data.inTable = void 0;
10164
10168
  }
10165
10169
  /**
10170
+ * Enter a row.
10171
+ *
10166
10172
  * @this {CompileContext}
10167
10173
  * @type {FromMarkdownHandle}
10168
10174
  */
10169
10175
  function enterRow(token) {
10170
10176
  this.enter({
10171
10177
  type: "tableRow",
10172
- children: []
10178
+ children: [],
10179
+ position: void 0
10173
10180
  }, token);
10174
10181
  }
10175
10182
  /**
10183
+ * Exit a row or cell.
10184
+ *
10176
10185
  * @this {CompileContext}
10177
10186
  * @type {FromMarkdownHandle}
10178
10187
  */
@@ -10180,16 +10189,24 @@ function exit(token) {
10180
10189
  this.exit(token);
10181
10190
  }
10182
10191
  /**
10192
+ * Enter a cell.
10193
+ *
10183
10194
  * @this {CompileContext}
10184
10195
  * @type {FromMarkdownHandle}
10185
10196
  */
10186
10197
  function enterCell(token) {
10187
10198
  this.enter({
10188
10199
  type: "tableCell",
10189
- children: []
10200
+ children: [],
10201
+ position: void 0
10190
10202
  }, token);
10191
10203
  }
10192
10204
  /**
10205
+ * Exit code (text).
10206
+ *
10207
+ * Overwrites the default code text data handler to unescape escaped pipes
10208
+ * when they are in tables.
10209
+ *
10193
10210
  * @this {CompileContext}
10194
10211
  * @type {FromMarkdownHandle}
10195
10212
  */
@@ -10202,9 +10219,14 @@ function exitCodeText(token) {
10202
10219
  this.exit(token);
10203
10220
  }
10204
10221
  /**
10222
+ * Unescape an escaped pipe.
10223
+ *
10205
10224
  * @param {string} $0
10225
+ * Whole match.
10206
10226
  * @param {string} $1
10227
+ * Escaped character.
10207
10228
  * @returns {string}
10229
+ * Replacement.
10208
10230
  */
10209
10231
  function replace($0, $1) {
10210
10232
  return $1 === "|" ? $1 : $0;
@@ -13271,8 +13293,8 @@ const styles = `
13271
13293
  .dsh-pr-loading svg{width:100%;height:100%;animation:dsh-pr-spin .8s linear infinite}
13272
13294
  .dsh-pr-initial-loading{display:flex;justify-content:center;padding:24px 16px}
13273
13295
  .dsh-vcs-check-status{display:inline-flex;flex:none;width:14px;height:14px;align-items:center;justify-content:center;vertical-align:middle;color:var(--dsw-alias-label-tertiary)}
13274
- .dsh-vcs-check-status>span{display:contents}
13275
- .dsh-vcs-check-status svg{width:100%;height:100%}
13296
+ .dsh-vcs-check-status>span{display:inline-flex;width:100%;height:100%;align-items:center;justify-content:center}
13297
+ .dsh-vcs-check-status svg{display:block;flex:none;width:100%;height:100%;transform-origin:center}
13276
13298
  .dsh-vcs-check-status[data-state=done]{color:var(--dsw-alias-state-success-primary)}
13277
13299
  .dsh-vcs-check-status[data-state=error]{color:var(--dsw-alias-state-error-primary)}
13278
13300
  .dsh-vcs-check-status:is([data-state=ongoing],[data-state=warning]){color:var(--dsw-alias-state-warn-primary)}
@@ -13446,7 +13468,7 @@ function CheckStatusIcon({ state }) {
13446
13468
  className: "dsh-vcs-check-status",
13447
13469
  "data-state": state,
13448
13470
  "aria-hidden": "true",
13449
- children: state === "done" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckCircleOutlineRegular, {}) : state === "ongoing" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconLoadingOutlineRegular, {}) : state === "warning" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQuestionOutlineRegular, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: state === "error" ? circle_x_default : circle_minus_default } })
13471
+ children: state === "done" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckCircleOutlineRegular, { size: 14 }) : state === "ongoing" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconLoadingOutlineRegular, { size: 14 }) : state === "warning" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQuestionOutlineRegular, { size: 14 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: state === "error" ? circle_x_default : circle_minus_default } })
13450
13472
  });
13451
13473
  }
13452
13474
  function Loading({ label }) {
@@ -13486,6 +13508,12 @@ function apply$2(ctx) {
13486
13508
  const sessions = ctx.get("sessions");
13487
13509
  const views = /* @__PURE__ */ new Map();
13488
13510
  ctx.effect(() => () => views.clear());
13511
+ ctx.effect(() => {
13512
+ const style = document.createElement("style");
13513
+ style.textContent = styles;
13514
+ document.head.append(style);
13515
+ return () => style.remove();
13516
+ }, "ui-vcs: pull request styles");
13489
13517
  const subscribe = (listener) => ctx.locale.subscribe(listener);
13490
13518
  const text = () => {
13491
13519
  const language = ctx.locale.getSnapshot().active;
@@ -13831,7 +13859,6 @@ function apply$2(ctx) {
13831
13859
  className: "dsh-pr-panel",
13832
13860
  "aria-label": copy.title,
13833
13861
  children: [
13834
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", { children: styles }),
13835
13862
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: view ? providerNames[view.provider] : copy.title }), view && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13836
13863
  className: "dsh-pr-repository",
13837
13864
  title: view.repository,
@@ -14680,7 +14707,7 @@ function apply(ctx) {
14680
14707
  mounted.current = false;
14681
14708
  };
14682
14709
  }, []);
14683
- const disabled = !canPrompt || unavailable || sending || typeof cwd !== "string";
14710
+ const disabled = !canPrompt || unavailable || sending || typeof cwd !== "string" || lookup !== "ready";
14684
14711
  const viewOnly = hasRequest && !needsUpdate;
14685
14712
  const ciState = ciRequest ? checksState(ciRequest) : "warning";
14686
14713
  const ciLabel = {
@@ -14690,6 +14717,13 @@ function apply(ctx) {
14690
14717
  ongoing: labels.pending_check,
14691
14718
  idle: labels.checks_complete
14692
14719
  }[ciState];
14720
+ (0, react.useEffect)(() => {
14721
+ setLookup("loading");
14722
+ setOperation(void 0);
14723
+ setHasRequest(false);
14724
+ setCiRequest(null);
14725
+ setNeedsUpdate(false);
14726
+ }, [sessionId, cwd]);
14693
14727
  (0, react.useEffect)(() => {
14694
14728
  if (!hasChanges || hidden || unavailable) return;
14695
14729
  let controller;
@@ -14698,17 +14732,12 @@ function apply(ctx) {
14698
14732
  controller = new AbortController();
14699
14733
  const signal = controller.signal;
14700
14734
  setLookup("loading");
14701
- setOperation(void 0);
14702
- setHasRequest(false);
14703
- setCiRequest(null);
14704
- setNeedsUpdate(false);
14705
14735
  try {
14706
14736
  const result = await connection.rpc.call(channel, describeMethod, { sessionId }, signal);
14707
14737
  if (signal.aborted) return;
14708
14738
  if (!result.ok) throw new Error("Git context unavailable");
14709
14739
  const context = result.value;
14710
14740
  if (context.operation !== "push" && context.operation !== "pr") throw new Error("Git context unavailable");
14711
- setOperation(context.operation);
14712
14741
  if (context.operation === "pr") try {
14713
14742
  const requests = await connection.rpc.call(channel, method, { sessionId }, signal);
14714
14743
  if (signal.aborted) return;
@@ -14721,6 +14750,12 @@ function apply(ctx) {
14721
14750
  } catch {
14722
14751
  if (signal.aborted) return;
14723
14752
  }
14753
+ else {
14754
+ setHasRequest(false);
14755
+ setCiRequest(null);
14756
+ setNeedsUpdate(false);
14757
+ }
14758
+ setOperation(context.operation);
14724
14759
  setLookup("ready");
14725
14760
  } catch {
14726
14761
  if (!signal.aborted) setLookup("error");
@@ -14784,7 +14819,7 @@ function apply(ctx) {
14784
14819
  if (mounted.current) setSending(false);
14785
14820
  }
14786
14821
  };
14787
- if (hidden || !hasChanges || lookup !== "ready" || !operation) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
14822
+ if (hidden || !hasChanges || !operation || lookup === "error" && !hasRequest) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
14788
14823
  ref: anchor,
14789
14824
  hidden: true
14790
14825
  });
package/dist/index.js CHANGED
@@ -16,7 +16,7 @@ var __exportAll = (all, no_symbols) => {
16
16
  if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
17
17
  return target;
18
18
  };
19
- // ../../node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.6/node_modules/@deepseek-ai/cosmokit/lib/index.js
19
+ // ../../node_modules/.pnpm/@deepseek-ai+cosmokit@1.9.0/node_modules/@deepseek-ai/cosmokit/lib/index.js
20
20
  /** Return true when a value is `null` or `undefined`. */
21
21
  function isNullable(value) {
22
22
  return value === null || value === void 0;
@@ -269,7 +269,7 @@ var Time;
269
269
  }
270
270
  Time.template = template;
271
271
  })(Time || (Time = {}));
272
- // ../../node_modules/.pnpm/@deepseek-ai+schemastery@3.18.5/node_modules/@deepseek-ai/schemastery/lib/index.mjs
272
+ // ../../node_modules/.pnpm/@deepseek-ai+schemastery@3.19.0/node_modules/@deepseek-ai/schemastery/lib/index.mjs
273
273
  const kSchema = Symbol.for("schemastery");
274
274
  const kValidationError = Symbol.for("ValidationError");
275
275
  globalThis.__schemastery_index__ ??= 0;
@@ -906,9 +906,14 @@ async function inspectSession(ctx, id, signal) {
906
906
  signal.throwIfAborted();
907
907
  const live = ctx.get("agents")?.get(id);
908
908
  if (live) return live.session;
909
- const inspection = await ctx.sessionController.inspect(id, signal);
910
- signal.throwIfAborted();
911
- return Session.create(id, inspection.events, inspection.meta, inspection.inheritedEventCount);
909
+ const handle = await ctx.sessionPersistence.open(id, "read", { signal });
910
+ try {
911
+ const { events } = await handle.read(void 0, void 0, { signal });
912
+ signal.throwIfAborted();
913
+ return Session.create(id, events, handle.header, handle.inheritedEventCount);
914
+ } finally {
915
+ await handle.close();
916
+ }
912
917
  }
913
918
  // ../../tools/async/src/index.ts
914
919
  function createTaskQueue({ concurrency, maxPending }) {
@@ -979,6 +984,7 @@ const name$3 = "dungsil-vcs-pull-requests";
979
984
  const inject$3 = [
980
985
  "connection",
981
986
  "sessionController",
987
+ "sessionPersistence",
982
988
  "workingDirectory",
983
989
  "subprocess",
984
990
  "sandbox",
@@ -2165,7 +2171,7 @@ async function updateReview(run, context, texts) {
2165
2171
  context.existingReview = updated;
2166
2172
  return { url: updated.url };
2167
2173
  }
2168
- // ../../node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.2.1-rc.5_@deepseek-ai+cordis@4.0.5/node_modules/@deepseek-ai/dsh-typert-protocol/lib/index.js
2174
+ // ../../node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.2.2-rc.1_@deepseek-ai+cordis@4.1.0/node_modules/@deepseek-ai/dsh-typert-protocol/lib/index.js
2169
2175
  /** The one Remote failure class shared by owners, the Gateway, and consumers. */
2170
2176
  /**
2171
2177
  * One Remote call failure: a real Error carrying its stable code and typed
@@ -2346,7 +2352,7 @@ function sameInvocation(left, right) {
2346
2352
  function validateName(subject, value) {
2347
2353
  if (!isTypertRemoteSegment(value)) throw new TypeError(`typert-protocol: ${subject} must contain only RPC endpoint segment characters`);
2348
2354
  }
2349
- // ../../node_modules/.pnpm/@deepseek-ai+dsh-util-values@0.2.1-rc.5_@deepseek-ai+cordis@4.0.5/node_modules/@deepseek-ai/dsh-util-values/lib/index.js
2355
+ // ../../node_modules/.pnpm/@deepseek-ai+dsh-util-values@0.2.2-rc.1_@deepseek-ai+cordis@4.1.0/node_modules/@deepseek-ai/dsh-util-values/lib/index.js
2350
2356
  /**
2351
2357
  * Lazily scanned view of one JSON object's top-level fields, built from text
2352
2358
  * that may still be streaming or from an already parsed object. Nothing is
@@ -3022,7 +3028,7 @@ function deepFreeze(value) {
3022
3028
  }
3023
3029
  return value;
3024
3030
  }
3025
- // ../../node_modules/.pnpm/@deepseek-ai+dsh-util-crypto@0.2.1-rc.5_@deepseek-ai+cordis@4.0.5/node_modules/@deepseek-ai/dsh-util-crypto/lib/index.js
3031
+ // ../../node_modules/.pnpm/@deepseek-ai+dsh-util-crypto@0.2.2-rc.1_@deepseek-ai+cordis@4.1.0/node_modules/@deepseek-ai/dsh-util-crypto/lib/index.js
3026
3032
  /**
3027
3033
  * Random v4 UUID, minted from `crypto.getRandomValues`.
3028
3034
  * @returns the UUID string.
@@ -3034,7 +3040,7 @@ function randomUUID() {
3034
3040
  }).join("");
3035
3041
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
3036
3042
  }
3037
- // ../../node_modules/.pnpm/@deepseek-ai+dsh-brand@0.2.1-rc.5_@deepseek-ai+cordis@4.0.5/node_modules/@deepseek-ai/dsh-brand/lib/index.js
3043
+ // ../../node_modules/.pnpm/@deepseek-ai+dsh-brand@0.2.2-rc.1_@deepseek-ai+cordis@4.1.0/node_modules/@deepseek-ai/dsh-brand/lib/index.js
3038
3044
  /**
3039
3045
  * Duplicate-install-safe nominal primitive helpers.
3040
3046
  *
@@ -3056,10 +3062,10 @@ function randomUUID() {
3056
3062
  function brandString(value) {
3057
3063
  return value;
3058
3064
  }
3059
- // ../../node_modules/.pnpm/@deepseek-ai+dsh-timeout@0.2.1-rc.5_@deepseek-ai+cordis@4.0.5/node_modules/@deepseek-ai/dsh-timeout/lib/index.js
3065
+ // ../../node_modules/.pnpm/@deepseek-ai+dsh-timeout@0.2.2-rc.1_@deepseek-ai+cordis@4.1.0/node_modules/@deepseek-ai/dsh-timeout/lib/index.js
3060
3066
  /** Largest delay Node schedules without clamping it to one millisecond. */
3061
3067
  const MAX_TIMER_DELAY_MS = 2147483647;
3062
- // ../../node_modules/.pnpm/@deepseek-ai+dsh-llm@0.2.1-rc.5_@deepseek-ai+cordis@4.0.5/node_modules/@deepseek-ai/dsh-llm/lib/index.js
3068
+ // ../../node_modules/.pnpm/@deepseek-ai+dsh-llm@0.2.2-rc.1_@deepseek-ai+cordis@4.1.0/node_modules/@deepseek-ai/dsh-llm/lib/index.js
3063
3069
  /**
3064
3070
  * Detach and deep-freeze a message whose identity already exists.
3065
3071
  * @param message - complete message, including its stable identity.
@@ -4128,12 +4134,17 @@ var LlmError = class extends HarnessError {
4128
4134
  if (typeof model.provider !== "string" || model.provider !== provider || typeof model.id !== "string" || model.id.length === 0 || typeof model.name !== "string" || model.name.length === 0 || model.description !== void 0 && typeof model.description !== "string" || seen.has(model.id)) throw new LlmError(`adapter returned invalid or duplicate model metadata for provider "${provider}"`, "INVALID_CATALOG");
4129
4135
  seen.add(model.id);
4130
4136
  const inputModalities = this.detachedModalities(model.inputModalities);
4137
+ const badge = model.badge;
4131
4138
  return {
4132
4139
  provider: model.provider,
4133
4140
  id: model.id,
4134
4141
  name: model.name,
4135
4142
  ...model.description === void 0 ? {} : { description: model.description },
4136
- ...inputModalities === void 0 ? {} : { inputModalities }
4143
+ ...inputModalities === void 0 ? {} : { inputModalities },
4144
+ ...badge === void 0 ? {} : { badge: {
4145
+ text: typeof badge.text === "string" ? badge.text : { ...badge.text },
4146
+ tone: badge.tone
4147
+ } }
4137
4148
  };
4138
4149
  });
4139
4150
  }
@@ -5301,6 +5312,7 @@ const name = "dungsil-ui-vcs";
5301
5312
  const inject = [
5302
5313
  "connection",
5303
5314
  "sessionController",
5315
+ "sessionPersistence",
5304
5316
  "subprocess",
5305
5317
  "sandbox",
5306
5318
  "sandboxPolicy",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dungsil/dsh-plugin-ui-vcs",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "description": "Git actions and PR/MR review for GitHub, GitLab, Gitea and Forgejo.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -25,33 +25,35 @@
25
25
  "access": "public"
26
26
  },
27
27
  "devDependencies": {
28
- "@deepseek-ai/cordis": "4.0.5",
29
- "@deepseek-ai/dsh-agent": "0.2.1-rc.5",
30
- "@deepseek-ai/dsh-agent-loop-testkit": "0.2.1-rc.5",
31
- "@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.5",
32
- "@deepseek-ai/dsh-app-boot": "0.2.1-rc.5",
33
- "@deepseek-ai/dsh-client-connection": "0.2.1-rc.5",
34
- "@deepseek-ai/dsh-client-locale": "0.2.1-rc.5",
35
- "@deepseek-ai/dsh-client-store": "0.2.1-rc.5",
36
- "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.5",
37
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.5",
38
- "@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.5",
39
- "@deepseek-ai/dsh-client-ui-settings": "0.2.1-rc.5",
40
- "@deepseek-ai/dsh-client-ui-sidebar-right": "0.2.1-rc.5",
41
- "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.5",
42
- "@deepseek-ai/dsh-client-ui-workspace": "0.2.1-rc.5",
43
- "@deepseek-ai/dsh-config-editor": "0.2.1-rc.5",
44
- "@deepseek-ai/dsh-credentials-local": "0.2.1-rc.5",
45
- "@deepseek-ai/dsh-fs": "0.2.1-rc.5",
46
- "@deepseek-ai/dsh-llm": "0.2.1-rc.5",
47
- "@deepseek-ai/dsh-sandbox": "0.2.1-rc.5",
48
- "@deepseek-ai/dsh-sandbox-local": "0.2.1-rc.5",
49
- "@deepseek-ai/dsh-sandbox-policy": "0.2.1-rc.5",
50
- "@deepseek-ai/dsh-session": "0.2.1-rc.5",
51
- "@deepseek-ai/dsh-subprocess": "0.2.1-rc.5",
52
- "@deepseek-ai/dsh-subprocess-local": "0.2.1-rc.5",
53
- "@deepseek-ai/dsh-working-directory": "0.2.1-rc.5",
54
- "@deepseek-ai/schemastery": "~3.18.5",
28
+ "@deepseek-ai/cordis": "4.1.0",
29
+ "@deepseek-ai/dsh-agent": "0.2.2-rc.1",
30
+ "@deepseek-ai/dsh-agent-loop-testkit": "0.2.2-rc.1",
31
+ "@deepseek-ai/dsh-api-session-controller": "0.2.2-rc.1",
32
+ "@deepseek-ai/dsh-app-boot": "0.2.2-rc.1",
33
+ "@deepseek-ai/dsh-client-connection": "0.2.2-rc.1",
34
+ "@deepseek-ai/dsh-client-locale": "0.2.2-rc.1",
35
+ "@deepseek-ai/dsh-client-store": "0.2.2-rc.1",
36
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.2-rc.1",
37
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.2-rc.1",
38
+ "@deepseek-ai/dsh-client-ui-session": "0.2.2-rc.1",
39
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.2-rc.1",
40
+ "@deepseek-ai/dsh-client-ui-sidebar-right": "0.2.2-rc.1",
41
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.2-rc.1",
42
+ "@deepseek-ai/dsh-client-ui-workspace": "0.2.2-rc.1",
43
+ "@deepseek-ai/dsh-config-editor": "0.2.2-rc.1",
44
+ "@deepseek-ai/dsh-credentials-local": "0.2.2-rc.1",
45
+ "@deepseek-ai/dsh-fs": "0.2.2-rc.1",
46
+ "@deepseek-ai/dsh-llm": "0.2.2-rc.1",
47
+ "@deepseek-ai/dsh-sandbox": "0.2.2-rc.1",
48
+ "@deepseek-ai/dsh-sandbox-local": "0.2.2-rc.1",
49
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.2-rc.1",
50
+ "@deepseek-ai/dsh-session": "0.2.2-rc.1",
51
+ "@deepseek-ai/dsh-session-persistence": "0.2.2-rc.1",
52
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.2.2-rc.1",
53
+ "@deepseek-ai/dsh-subprocess": "0.2.2-rc.1",
54
+ "@deepseek-ai/dsh-subprocess-local": "0.2.2-rc.1",
55
+ "@deepseek-ai/dsh-working-directory": "0.2.2-rc.1",
56
+ "@deepseek-ai/schemastery": "3.19.0",
55
57
  "@dungsil/dsh-async": "0.0.0",
56
58
  "@dungsil/dsh-tsconfig": "0.0.0",
57
59
  "@dungsil/dsh-ui": "0.0.0",
@@ -68,13 +70,14 @@
68
70
  },
69
71
  "peerDependencies": {
70
72
  "@deepseek-ai/cordis": "^4.0.5",
71
- "@deepseek-ai/dsh-client-connection": "^0.2.1-rc.5",
72
- "@deepseek-ai/dsh-client-ui-primitives": "^0.2.1-rc.5",
73
- "@deepseek-ai/dsh-config-editor": "0.2.1-rc.5",
74
- "@deepseek-ai/dsh-session": "^0.2.1-rc.5"
73
+ "@deepseek-ai/dsh-client-connection": "^0.2.1-rc.5 || ^0.2.2-rc.1",
74
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.2.1-rc.5 || ^0.2.2-rc.1",
75
+ "@deepseek-ai/dsh-config-editor": "0.2.1-rc.5 || ^0.2.2-rc.1",
76
+ "@deepseek-ai/dsh-session": "^0.2.1-rc.5 || ^0.2.2-rc.1",
77
+ "@deepseek-ai/dsh-session-persistence": "^0.2.1-rc.5 || ^0.2.2-rc.1"
75
78
  },
76
79
  "engines": {
77
- "dsh": "^0.2.1-rc.5",
80
+ "dsh": "^0.2.1-rc.5 || ^0.2.2-rc.1",
78
81
  "node": ">=24.9.0"
79
82
  },
80
83
  "dsh": {