@deepseek-ai/dsh-client-ui-cordis 0.1.6-alpha.2 → 0.1.7-alpha.2

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/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/extensions/ui-cordis/README.md
5
- README.md: 17fea955dae2ecc4b4549775d8f9176ee5eba1f5
6
- README.zh.md: 35726f2451a70586c0600789d1c27b15f2d779ea
5
+ README.md: 1f3677d48eda13cad18a24ed6021f30535db686a
6
+ README.zh.md: f3855ce6f75efc7510abdaff8d211cec167d5117
package/README.md CHANGED
@@ -29,11 +29,11 @@ Compose this package with the Host and Client runners to render historical tool
29
29
 
30
30
  ### What the panel shows
31
31
 
32
- A `sidebar.footer.action` seat shows a badge counting what runs plus what waits; opening it lists every definition with its run controls. The list is never filtered by session: the current session's rows group first, everyone else's stay listed below. Rows come from the host's current inventory and update whenever an announcement changes what exists. A pending run request whose definition the last read does not cover still gets a row, rendered from the request's own session, label, purpose, and identity. Each row shows two independent facts — what the host runs and what this page has loaded — so a reloaded page offers "load back into this page" before the global stop, while a host-only definition reads plainly running and offers the stop alone. The row also carries this page's last render failure inline, in the same place as a load failure: one is "it never loaded", the other "it loaded and then threw".
32
+ A `sidebar.footer.action` seat shows a badge counting what runs plus what waits; opening it lists every definition with its run controls. The list is never filtered by session: the current session's rows group first, everyone else's stay listed below. Rows come from the host's current inventory and update whenever an announcement changes what exists. A pending run request whose definition the last read does not cover still gets a row, rendered from the request's own session, label, purpose, and identity. Each row shows two independent facts — what the host runs and what this page has loaded — and maps them onto the shared status marker: idle uses idle, client loading and an action in flight use ongoing, a running definition uses done, approval waits use warning, and failures use error. A reloaded page offers "load back into this page" before the global stop, while a host-only definition reads plainly running and offers the stop alone. The row also carries this page's last render failure inline, in the same place as a load failure: one is "it never loaded", the other "it loaded and then threw".
33
33
 
34
34
  ### What the tool cards show
35
35
 
36
- The `cordis_define` card is a record: the name and purpose the model wrote, the source it wrote, and whether the definition is running — no switch, no approval, and a pointer to the panel. The `cordis_run` card shows the mode, the plugin, package, and run ids, the outcome, and offers the package's own business view through the `tool.view.cordis` slot when the package registered one. `cordis_stop` and `cordis_undefine` render compact action rows. All cards render from the recorded call and result, so replay shows the same card.
36
+ The `cordis_define` card is a record: the name and purpose the model wrote, the source it wrote, and whether the definition is running — no switch, no approval, and a pointer to the panel. The `cordis_run` card shows the mode, the plugin, package, and run ids, the outcome, and offers the package's own business view through the `tool.view.cordis` slot when the package registered one. Define, run, stop, and undefine cards retain their ordinary business glyph when they fail or are interrupted, including a correlated activation failure after a successful run receipt. All cards render from the recorded call and result, so replay shows the same card.
37
37
 
38
38
  ### Boundaries to plan around
39
39
 
package/README.zh.md CHANGED
@@ -29,11 +29,11 @@ kind: "package-reference"
29
29
 
30
30
  ### 面板显示什么
31
31
 
32
- 一个 `sidebar.footer.action` 席位显示角标,计数在跑数加待确认数;点开后列出每个定义及其运行控件。列表从不按会话过滤:当前会话的行置顶成组,其他会话的行仍在下方列出。行来自 host 的当前清单,并在公告改变「有哪些定义」时更新。上一次读取覆盖不到的待审批 run 请求仍然有行,直接用请求自带的会话、标签、用途与标识渲染。每一行显示两个独立事实——host 在跑什么与本页装载了什么——因此刷新后的页面会先给「装回本页」、再给全局 stop,而纯 host 定义的行如实读作运行中、只给 stop。该行还会把本页最后一次渲染失败就地显示,与装载失败共用同一个位置:一个是「它从来没装上」,另一个是「它装上了、然后抛了」。
32
+ 一个 `sidebar.footer.action` 席位显示角标,计数在跑数加待确认数;点开后列出每个定义及其运行控件。列表从不按会话过滤:当前会话的行置顶成组,其他会话的行仍在下方列出。行来自 host 的当前清单,并在公告改变「有哪些定义」时更新。上一次读取覆盖不到的待审批 run 请求仍然有行,直接用请求自带的会话、标签、用途与标识渲染。每一行显示两个独立事实——host 在跑什么与本页装载了什么——并把它们映射到共享状态标记:idle 使用 idle,客户端装载及正在执行的操作使用 ongoing,运行中的定义使用 done,等待批准使用 warning,失败使用 error。刷新后的页面会先给「装回本页」、再给全局 stop,而纯 host 定义的行如实读作运行中、只给 stop。该行还会把本页最后一次渲染失败就地显示,与装载失败共用同一个位置:一个是「它从来没装上」,另一个是「它装上了、然后抛了」。
33
33
 
34
34
  ### 工具卡片显示什么
35
35
 
36
- `cordis_define` 卡片是一份记录:模型写下的 name 与 purpose、它写的源码,以及该定义是否在跑——没有开关、没有审批,只有一句指向面板的指引。`cordis_run` 卡片显示模式、插件标识、包标识与运行标识、结果,并在包注册了业务视图时经 `tool.view.cordis` slot 提供它。`cordis_stop` 与 `cordis_undefine` 渲染紧凑的动作行。所有卡片都渲染会话记录下的 call 与 result,因此回放显示同一张卡。
36
+ `cordis_define` 卡片是一份记录:模型写下的 name 与 purpose、它写的源码,以及该定义是否在跑——没有开关、没有审批,只有一句指向面板的指引。`cordis_run` 卡片显示模式、插件标识、包标识与运行标识、结果,并在包注册了业务视图时经 `tool.view.cordis` slot 提供它。define、run、stop 与 undefine 卡片在失败或中断时继续保留普通业务图标,包括调用回执成功后发生的关联激活失败。所有卡片都渲染会话记录下的 call 与 result,因此回放显示同一张卡。
37
37
 
38
38
  ### 需要规划的边界
39
39
 
package/lib/client.js CHANGED
@@ -153,7 +153,7 @@ window.__ModuleLoader__.load({
153
153
  children: [
154
154
  (0, react_jsx_runtime.jsx)("span", {
155
155
  className: CordisRunRow_module_css_default.icon,
156
- children: card.state === "error" ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" }) : card.state === "stopped" ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "warning" }) : remove ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutline16, { size: 14 }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconStopFill16, { size: 14 })
156
+ children: remove ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 14 }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 14 })
157
157
  }),
158
158
  (0, react_jsx_runtime.jsx)("span", {
159
159
  className: CordisRunRow_module_css_default.title,
@@ -172,7 +172,7 @@ window.__ModuleLoader__.load({
172
172
  className: CordisRunRow_module_css_default.inspect,
173
173
  "aria-label": t("action.inspect"),
174
174
  onClick: inspect,
175
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutline12, {})
175
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutlineRegular, {})
176
176
  })
177
177
  ]
178
178
  }), card.output !== null && (0, react_jsx_runtime.jsx)("pre", {
@@ -263,13 +263,6 @@ window.__ModuleLoader__.load({
263
263
  default: return null;
264
264
  }
265
265
  }
266
- function leadingFor(state) {
267
- switch (state) {
268
- case "error": return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" });
269
- case "stopped": return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "warning" });
270
- default: return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutline16, { size: 14 });
271
- }
272
- }
273
266
  /** Render one immutable Package definition. */
274
267
  function CordisDefineRow({ callId, block, inspect, useInventory, useLoaded, t }) {
275
268
  const card = cordisDefineCard(block);
@@ -302,7 +295,7 @@ window.__ModuleLoader__.load({
302
295
  rowClassName: CordisDefineRow_module_css_default.row,
303
296
  titleClassName: CordisDefineRow_module_css_default.title,
304
297
  chevronClassName: CordisDefineRow_module_css_default.chevron,
305
- icon: leadingFor(card.state),
298
+ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
306
299
  title: t("row.defineTitle"),
307
300
  open,
308
301
  expandable,
@@ -363,6 +356,11 @@ window.__ModuleLoader__.load({
363
356
  role: "tabpanel",
364
357
  "aria-labelledby": `${sourcePanelId}-${activeSource}`,
365
358
  children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
359
+ toolbarLabels: {
360
+ codeLabel: t("codeBlock.title"),
361
+ wrapLabel: t("codeBlock.wrap"),
362
+ unwrapLabel: t("codeBlock.unwrap")
363
+ },
366
364
  code: activeCode,
367
365
  lang: "javascript",
368
366
  copyLabel: t("body.copy"),
@@ -390,7 +388,7 @@ window.__ModuleLoader__.load({
390
388
  type: "button",
391
389
  className: CordisDefineRow_module_css_default.inspectButton,
392
390
  onClick: inspect,
393
- children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutline12, {}), t("action.inspect")]
391
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutlineRegular, {}), t("action.inspect")]
394
392
  })
395
393
  ]
396
394
  })
@@ -506,7 +504,7 @@ window.__ModuleLoader__.load({
506
504
  children: [
507
505
  (0, react_jsx_runtime.jsx)("span", {
508
506
  className: CordisRunRow_module_css_default.icon,
509
- children: card.state === "error" ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" }) : card.state === "stopped" ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "warning" }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutline16, { size: 14 })
507
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 })
510
508
  }),
511
509
  (0, react_jsx_runtime.jsx)("span", {
512
510
  className: CordisRunRow_module_css_default.title,
@@ -529,7 +527,7 @@ window.__ModuleLoader__.load({
529
527
  className: CordisRunRow_module_css_default.inspect,
530
528
  "aria-label": t("action.inspect"),
531
529
  onClick: inspect,
532
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutline12, {})
530
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutlineRegular, {})
533
531
  })
534
532
  ]
535
533
  }),
@@ -569,7 +567,7 @@ window.__ModuleLoader__.load({
569
567
  }
570
568
  //#endregion
571
569
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/extensions/ui-cordis/src/client/CordisPanel.module.css.mjs
572
- const css = ".Nqubda_layer{flex:none;align-items:center;width:100%;height:42px;margin:8px 0 0;display:flex;position:relative}.Nqubda_footerButtons{align-items:center;width:100%;display:flex}.Nqubda_badge{width:calc(100% + 4px);height:42px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:12px;align-items:center;gap:8px;margin:0 -2px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;display:inline-flex;overflow:hidden}.Nqubda_badge:hover,.Nqubda_badge[data-active]{background:var(--dsw-alias-interactive-bg-hover)}.Nqubda_badgeLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.Nqubda_badgeCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;font-size:12px;line-height:16px}.Nqubda_layer.Nqubda_rail{width:36px;height:36px;margin:0}.Nqubda_rail .Nqubda_badge{corner-shape:round;border-radius:50%;justify-content:center;gap:0;width:36px;height:36px;padding:0}.Nqubda_rail .Nqubda_footerButtons{flex-direction:column;gap:2px}.Nqubda_panel{z-index:30;background:var(--dsw-specific-menu);--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);width:420px;max-width:calc(100vw - 24px);max-height:60vh;box-shadow:var(--dsw-elevation-prominent);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;border-radius:12px;flex-direction:column;display:flex;position:fixed;overflow:hidden}.Nqubda_header{box-sizing:border-box;flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:10px 12px;display:flex}.Nqubda_body{flex:1;min-height:0;padding:0 12px 12px;overflow-y:auto}.Nqubda_title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:20px}.Nqubda_note,.Nqubda_readError{color:var(--dsw-alias-label-tertiary);margin:4px 0;font-size:12px;line-height:18px}.Nqubda_readError{color:var(--dsw-alias-state-error-primary)}.Nqubda_group{color:var(--dsw-alias-label-caption);text-transform:uppercase;letter-spacing:.04em;margin:8px 0;font-size:11px;font-weight:500;line-height:16px}.Nqubda_rows{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.Nqubda_row{border:.5px solid var(--dsw-alias-border-l4);border-radius:12px;flex-direction:column;gap:8px;padding:14px 12px 10px;display:flex}.Nqubda_row[data-cordis-awaiting]{border-color:var(--dsw-alias-state-business-primary)}.Nqubda_rowHead{align-items:center;gap:8px;display:flex}.Nqubda_rowId{color:var(--dsw-alias-label-tertiary);font-family:var(--dsh-font-mono,monospace);flex:none;font-size:11px;line-height:20px}.Nqubda_rowName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.Nqubda_rowStatus{background:var(--dsw-alias-button-ghost-active-fill);height:20px;color:var(--dsw-alias-label-caption);border-radius:10px;flex:none;align-items:center;padding:0 6px;font-size:11px;line-height:20px;display:inline-flex}.Nqubda_row[data-cordis-status=idle] .Nqubda_rowStatus{background:var(--dsw-alias-button-ghost-active-fill);color:var(--dsw-alias-label-caption)}.Nqubda_row[data-cordis-status=awaiting-approval] .Nqubda_rowStatus,.Nqubda_row[data-cordis-status=client-pending] .Nqubda_rowStatus{background:var(--dsw-alias-state-warn-tertiary);color:var(--dsw-alias-state-warn-label)}.Nqubda_row[data-cordis-status=failed] .Nqubda_rowStatus{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.Nqubda_row[data-cordis-status=running] .Nqubda_rowStatus{background:var(--dsw-alias-state-success-tertiary);color:var(--dsw-alias-state-success-primary)}.Nqubda_rowDetail{align-items:center;gap:8px;min-height:28px;display:flex}.Nqubda_versionPicker{color:var(--dsw-alias-label-caption);align-items:center;gap:8px;font-size:11px;line-height:18px;display:flex}.Nqubda_versionPicker select{border:.5px solid var(--dsw-alias-border-l3);min-width:0;height:26px;color:var(--dsw-alias-label-secondary);font:inherit;background:0 0;border-radius:7px;flex:1;padding:0 8px}.Nqubda_rowPurpose{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;line-height:18px;overflow:hidden}.Nqubda_rowError{color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px}.Nqubda_rowActions{flex:none;align-items:center;gap:10px;display:flex}.Nqubda_transition{min-width:0;color:var(--dsw-alias-label-caption);align-items:center;gap:8px;font-size:11px;line-height:18px;display:flex}.Nqubda_transitionActions{gap:6px;margin-left:auto;display:flex}.Nqubda_transitionActions button{border:.5px solid var(--dsw-alias-border-l3);corner-shape:round;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border-radius:999px;padding:2px 8px}.Nqubda_transitionActions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.Nqubda_transitionActions button:disabled{opacity:.4;cursor:default}.Nqubda_activeVersion{color:var(--dsw-alias-label-caption);font-size:11px;line-height:16px}.Nqubda_actionButton{corner-shape:round;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:999px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Nqubda_actionButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.Nqubda_actionButton:disabled{opacity:.4;cursor:default}.Nqubda_doubleCheck{width:17px;height:14px;display:inline-block;position:relative}.Nqubda_doubleCheck svg{position:absolute;top:1px}.Nqubda_doubleCheck svg:first-child{opacity:.7;left:0}.Nqubda_doubleCheck svg:last-child{left:5px}";
570
+ const css = ".Nqubda_layer{flex:none;align-items:center;width:100%;height:42px;margin:8px 0 0;display:flex;position:relative}.Nqubda_footerButtons{align-items:center;width:100%;display:flex}.Nqubda_badge{width:calc(100% + 4px);height:42px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:12px;align-items:center;gap:8px;margin:0 -2px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;display:inline-flex;overflow:hidden}.Nqubda_badge:hover,.Nqubda_badge[data-active]{background:var(--dsw-alias-interactive-bg-hover)}.Nqubda_badgeLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.Nqubda_badgeCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;font-size:12px;line-height:16px}.Nqubda_layer.Nqubda_rail{width:36px;height:36px;margin:0}.Nqubda_rail .Nqubda_badge{corner-shape:round;border-radius:50%;justify-content:center;gap:0;width:36px;height:36px;padding:0}.Nqubda_rail .Nqubda_footerButtons{flex-direction:column;gap:2px}.Nqubda_panel{isolation:isolate;z-index:30;--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);width:420px;max-width:calc(100vw - 24px);max-height:60vh;box-shadow:var(--dsw-elevation-prominent);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;border-radius:12px;flex-direction:column;display:flex;position:fixed;overflow:hidden}.Nqubda_panel:before{z-index:-1;border-radius:inherit;background:var(--dsw-specific-menu);backdrop-filter:var(--dsw-menu-backdrop-filter);content:\"\";pointer-events:none;position:absolute;inset:0}.Nqubda_header{box-sizing:border-box;flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:10px 12px;display:flex}.Nqubda_body{flex:1;min-height:0;padding:0 12px 12px;overflow-y:auto}.Nqubda_title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:20px}.Nqubda_note,.Nqubda_readError{color:var(--dsw-alias-label-tertiary);margin:4px 0;font-size:12px;line-height:18px}.Nqubda_readError{color:var(--dsw-alias-state-error-primary)}.Nqubda_group{color:var(--dsw-alias-label-caption);text-transform:uppercase;letter-spacing:.04em;margin:8px 0;font-size:11px;font-weight:500;line-height:16px}.Nqubda_rows{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.Nqubda_row{border:.5px solid var(--dsw-alias-border-l4);border-radius:12px;flex-direction:column;gap:8px;padding:14px 12px 10px;display:flex}.Nqubda_row[data-cordis-awaiting]{border-color:var(--dsw-alias-state-business-primary)}.Nqubda_rowHead{align-items:center;gap:8px;display:flex}.Nqubda_rowId{color:var(--dsw-alias-label-tertiary);font-family:var(--dsh-font-mono,monospace);flex:none;font-size:11px;line-height:20px}.Nqubda_rowName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.Nqubda_rowStatus{height:20px;color:var(--dsw-alias-label-caption);flex:none;align-items:center;gap:4px;font-size:11px;line-height:20px;display:inline-flex}.Nqubda_rowDetail{align-items:center;gap:8px;min-height:28px;display:flex}.Nqubda_versionPicker{color:var(--dsw-alias-label-caption);align-items:center;gap:8px;font-size:11px;line-height:18px;display:flex}.Nqubda_versionPicker select{border:.5px solid var(--dsw-alias-border-l3);min-width:0;height:26px;color:var(--dsw-alias-label-secondary);font:inherit;background:0 0;border-radius:7px;flex:1;padding:0 8px}.Nqubda_rowPurpose{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;line-height:18px;overflow:hidden}.Nqubda_rowError{color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px}.Nqubda_rowActions{flex:none;align-items:center;gap:10px;display:flex}.Nqubda_transition{min-width:0;color:var(--dsw-alias-label-caption);align-items:center;gap:8px;font-size:11px;line-height:18px;display:flex}.Nqubda_transitionActions{gap:6px;margin-left:auto;display:flex}.Nqubda_transitionActions button{border:.5px solid var(--dsw-alias-border-l3);corner-shape:round;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border-radius:999px;padding:2px 8px}.Nqubda_transitionActions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.Nqubda_transitionActions button:disabled{opacity:.4;cursor:default}.Nqubda_activeVersion{color:var(--dsw-alias-label-caption);font-size:11px;line-height:16px}.Nqubda_actionButton{corner-shape:round;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:999px;justify-content:center;align-items:center;padding:0;display:inline-flex}.Nqubda_actionButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.Nqubda_actionButton:disabled{opacity:.4;cursor:default}.Nqubda_doubleCheck{width:17px;height:14px;display:inline-block;position:relative}.Nqubda_doubleCheck svg{position:absolute;top:1px}.Nqubda_doubleCheck svg:first-child{opacity:.7;left:0}.Nqubda_doubleCheck svg:last-child{left:5px}";
573
571
  const tagId = "@deepseek-ai/dsh-client-ui-cordis/CordisPanel.module.css";
574
572
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
575
573
  const tag = document.createElement("style");
@@ -636,6 +634,16 @@ window.__ModuleLoader__.load({
636
634
  if (listed?.activeRun === void 0) return "idle";
637
635
  return cordisVisibleStatus(listed, listed.activeRun.packageId, loaded);
638
636
  }
637
+ function panelDotState(status, busy) {
638
+ if (busy) return "ongoing";
639
+ switch (status) {
640
+ case "idle": return "idle";
641
+ case "client-pending": return "ongoing";
642
+ case "running": return "done";
643
+ case "awaiting-approval": return "warning";
644
+ case "failed": return "error";
645
+ }
646
+ }
639
647
  function blockingFirst(rows) {
640
648
  return [...rows.filter((row) => row.activity?.phase === "awaiting-approval"), ...rows.filter((row) => row.activity?.phase !== "awaiting-approval")];
641
649
  }
@@ -657,7 +665,7 @@ window.__ModuleLoader__.load({
657
665
  return (0, react_jsx_runtime.jsxs)("span", {
658
666
  className: CordisPanel_module_css_default.doubleCheck,
659
667
  "aria-hidden": true,
660
- children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline16, { size: 12 }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline16, { size: 12 })]
668
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 })]
661
669
  });
662
670
  }
663
671
  /** Render the inventory panel and its unified footer action. */
@@ -785,9 +793,9 @@ window.__ModuleLoader__.load({
785
793
  className: CordisPanel_module_css_default.rowName,
786
794
  children: name
787
795
  }),
788
- (0, react_jsx_runtime.jsx)("span", {
796
+ (0, react_jsx_runtime.jsxs)("span", {
789
797
  className: CordisPanel_module_css_default.rowStatus,
790
- children: t(STATUS_LABELS[status])
798
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: panelDotState(status, busy) }), (0, react_jsx_runtime.jsx)("span", { children: t(STATUS_LABELS[status]) })]
791
799
  })
792
800
  ]
793
801
  }),
@@ -827,7 +835,7 @@ window.__ModuleLoader__.load({
827
835
  setOpen(false);
828
836
  });
829
837
  },
830
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline16, { size: 14 })
838
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 14 })
831
839
  }),
832
840
  (0, react_jsx_runtime.jsx)(RowAction, {
833
841
  label: t("action.approvePlugin"),
@@ -851,7 +859,7 @@ window.__ModuleLoader__.load({
851
859
  setOpen(false);
852
860
  });
853
861
  },
854
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutline16, { size: 14 })
862
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineRegular, { size: 14 })
855
863
  })
856
864
  ] }),
857
865
  awaiting === void 0 && listed !== void 0 && selectedPackageId !== void 0 && listed.activeRun === void 0 && (0, react_jsx_runtime.jsx)(RowAction, {
@@ -867,7 +875,7 @@ window.__ModuleLoader__.load({
867
875
  hasClientHalf: selectedPackage?.hasClientHalf === true
868
876
  }));
869
877
  },
870
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlayOutline16, { size: 14 })
878
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlayOutlineRegular, { size: 14 })
871
879
  }),
872
880
  awaiting === void 0 && listed !== void 0 && listed.activeRun !== void 0 && selectedPackageId !== listed.activeRun.packageId && selectedPackage !== void 0 && (0, react_jsx_runtime.jsx)(RowAction, {
873
881
  label: t("action.run"),
@@ -882,7 +890,7 @@ window.__ModuleLoader__.load({
882
890
  hasClientHalf: selectedPackage.hasClientHalf
883
891
  }));
884
892
  },
885
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlayOutline16, { size: 14 })
893
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlayOutlineRegular, { size: 14 })
886
894
  }),
887
895
  awaiting === void 0 && listed !== void 0 && listed.activeRun !== void 0 && status === "client-pending" && activePackage !== void 0 && selectedPackageId === listed.activeRun.packageId && (0, react_jsx_runtime.jsx)(RowAction, {
888
896
  label: t("action.run"),
@@ -897,7 +905,7 @@ window.__ModuleLoader__.load({
897
905
  hasClientHalf: true
898
906
  }));
899
907
  },
900
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlayOutline16, { size: 14 })
908
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlayOutlineRegular, { size: 14 })
901
909
  }),
902
910
  awaiting === void 0 && listed !== void 0 && listed.activeRun !== void 0 && (0, react_jsx_runtime.jsx)(RowAction, {
903
911
  label: t("action.stop"),
@@ -906,7 +914,7 @@ window.__ModuleLoader__.load({
906
914
  onClick: () => {
907
915
  runAction(pluginId, () => onStop(listed.agentId, pluginId));
908
916
  },
909
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconStopFill16, { size: 14 })
917
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 14 })
910
918
  }),
911
919
  awaiting === void 0 && listed !== void 0 && (0, react_jsx_runtime.jsx)(RowAction, {
912
920
  label: t("action.remove"),
@@ -915,7 +923,7 @@ window.__ModuleLoader__.load({
915
923
  onClick: () => {
916
924
  runAction(pluginId, () => onRemove(listed.agentId, pluginId));
917
925
  },
918
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutline16, { size: 14 })
926
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 14 })
919
927
  })
920
928
  ]
921
929
  })]
@@ -1045,7 +1053,7 @@ window.__ModuleLoader__.load({
1045
1053
  onClick: () => {
1046
1054
  setOpen((value) => !value);
1047
1055
  },
1048
- children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCordisPluginOutline14, { size: wide ? 16 : 18 }), wide && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", {
1056
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCordisPluginOutlineRegular, { size: wide ? 16 : 18 }), wide && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", {
1049
1057
  className: CordisPanel_module_css_default.badgeLabel,
1050
1058
  children: t("panel.trigger")
1051
1059
  }), (0, react_jsx_runtime.jsx)("span", {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-cordis",
3
3
  "description": "Cordis dynamic-plugin definition card: the keyed cordis_define tool row with its run/stop switch",
4
- "version": "0.1.6-alpha.2",
4
+ "version": "0.1.7-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -42,23 +42,23 @@
42
42
  },
43
43
  "license": "MIT",
44
44
  "peerDependencies": {
45
- "@deepseek-ai/cordis": "^4.0.2"
45
+ "@deepseek-ai/cordis": "~4.0.4"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/react": "~18.3.1",
49
49
  "react": "^18.2.0",
50
- "@deepseek-ai/dsh-api-remotes": "^0.1.6-alpha.2",
51
- "@deepseek-ai/dsh-client-connection": "^0.1.6-alpha.2",
52
- "@deepseek-ai/dsh-client-locale": "^0.1.6-alpha.2",
53
- "@deepseek-ai/dsh-session": "^0.1.6-alpha.2",
54
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.6-alpha.2",
55
- "@deepseek-ai/dsh-cordis-client-runner": "^0.1.6-alpha.2",
56
- "@deepseek-ai/dsh-client-ui-renderer": "^0.1.6-alpha.2",
57
- "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.6-alpha.2",
58
- "@deepseek-ai/dsh-client-ui-session": "^0.1.6-alpha.2",
59
- "@deepseek-ai/dsh-client-ui-tool": "^0.1.6-alpha.2",
60
- "@deepseek-ai/cordis": "^4.0.2",
61
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.6-alpha.2"
50
+ "@deepseek-ai/dsh-client-connection": "0.1.7-alpha.2",
51
+ "@deepseek-ai/dsh-api-remotes": "0.1.7-alpha.2",
52
+ "@deepseek-ai/dsh-cordis-client-runner": "0.1.7-alpha.2",
53
+ "@deepseek-ai/dsh-client-locale": "0.1.7-alpha.2",
54
+ "@deepseek-ai/dsh-session": "0.1.7-alpha.2",
55
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-alpha.2",
56
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.1.7-alpha.2",
57
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-alpha.2",
58
+ "@deepseek-ai/dsh-client-ui-session": "0.1.7-alpha.2",
59
+ "@deepseek-ai/dsh-client-ui-tool": "0.1.7-alpha.2",
60
+ "@deepseek-ai/cordis": "~4.0.4",
61
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.7-alpha.2"
62
62
  },
63
63
  "files": [
64
64
  "lib/index.js",