@michengai/dsh-btw 0.1.20 → 0.1.22

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/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.1.22] - 2026-10-15
6
+
7
+ - Support DSH `0.2.1-alpha.3` while retaining all existing supported versions; pin development `@deepseek-ai/dsh*` dependencies to host `0.2.1-alpha.3` and Cordis to `4.0.5-alpha.2`.
8
+ - Drop removed host package `@deepseek-ai/dsh-invariants` from development dependencies (gone since alpha.1).
9
+ - Adapt the subagent breaking change: `ctx.subagents.start` and start-time `persona` / `toolFilter` are gone; use `startActivation` with `delivery: 'caller'`, and restore the side-ask persona plus empty tool allow-list on the child's `agent/created` via a scoped persona section and `tools.restrict`.
10
+ - Fix the host regression that still called `tools.presentAs('both')` after alpha.2 removed that mode; the guard test covers `native` (scoped tools) and `ptc` (`run_code`) separately.
11
+
12
+ ## [0.1.21] - 2026-10-14
13
+
14
+ - Use the raised layer token (`--dsw-alias-bg-layer-2`) for the selection question dialog and answer bubbles, fixing see-through text under wallpaper and transparent-canvas themes.
15
+
5
16
  ## [0.1.20] - 2026-10-13
6
17
 
7
18
  - Tag injected styles with plugin ownership so the selection action bar keeps its rounded dark theme and does not fall back to browser default popover boxes after host theme changes or client reloads.
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## 未发布
4
4
 
5
+ ## [0.1.22] - 2026-10-15
6
+
7
+ - 支持 DSH `0.2.1-alpha.3`,继续兼容既有已支持版本;开发依赖中的 `@deepseek-ai/dsh*` 对齐宿主 `0.2.1-alpha.3`,Cordis 对齐 `4.0.5-alpha.2`。
8
+ - 移除宿主已删除的开发依赖 `@deepseek-ai/dsh-invariants`(自 alpha.1 起不再提供)。
9
+ - 适配子 Agent 破坏性变更:`ctx.subagents.start` / 启动期 `persona` / `toolFilter` 已移除,改为 `startActivation`(`delivery: 'caller'`);旁问角色与空白名单在子 Agent `agent/created` 时以 scoped persona 与 `tools.restrict` 恢复。
10
+ - 修复回归测试仍调用 `tools.presentAs('both')` 的问题(该模式已在 alpha.2 移除);防护测试分别覆盖 `native`(子作用域工具)与 `ptc`(`run_code`)。
11
+
12
+ ## [0.1.21] - 2026-10-14
13
+
14
+ - 旁问浮层与回答气泡背景改用抬升层令牌(`--dsw-alias-bg-layer-2`),修复在壁纸类或画布透明主题下文字透明无法阅读的问题。
15
+
5
16
  ## [0.1.20] - 2026-10-13
6
17
 
7
18
  - 为注入样式标记插件属性,避免宿主切换主题或客户端重载后划词横条样式丢失而退化为浏览器默认白框。
package/README.md CHANGED
@@ -68,7 +68,7 @@ For a desktop workbench, download [DSH Codex Desktop](https://github.com/Micheng
68
68
  ## Prerequisites
69
69
 
70
70
  - An installed copy of DeepSeek Harness.
71
- - Host peers accept exactly `0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2`.
71
+ - Host peers accept exactly `0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3`.
72
72
  - Node.js 22+ and `dsh` available in your terminal.
73
73
 
74
74
  ## Installation
package/README.zh-CN.md CHANGED
@@ -68,7 +68,7 @@
68
68
  ## 前置条件
69
69
 
70
70
  - 已安装 DeepSeek Harness。
71
- - 宿主 peer 依赖精确声明为 `0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2`。
71
+ - 宿主 peer 依赖精确声明为 `0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3`。
72
72
  - Node.js 22+,可在终端执行 `dsh`。
73
73
 
74
74
  ## 安装
package/lib/client.js CHANGED
@@ -13708,7 +13708,7 @@ function SelectionAsk({ store, sessionId, t, addToConversation }) {
13708
13708
  // src/client/styles.ts
13709
13709
  var CSS = `
13710
13710
  .btw-reference-preview{display:block;margin-top:6px;max-height:3.2em;overflow:hidden;overflow-wrap:anywhere;line-height:1.6;color:var(--dsw-alias-label-primary)}
13711
- .btw-selection-dialog,.btw-selection-menu{position:fixed;box-sizing:border-box;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;padding:16px;font:inherit;font-size:13px;max-height:calc(100dvh - 32px);overflow:auto;box-shadow:0 12px 36px #0003}
13711
+ .btw-selection-dialog,.btw-selection-menu{position:fixed;box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;padding:16px;font:inherit;font-size:13px;max-height:calc(100dvh - 32px);overflow:auto;box-shadow:0 12px 36px #0003}
13712
13712
  .btw-selection-dialog{width:min(520px,calc(100vw - 32px));margin:auto}.btw-selection-menu{margin:0;width:max-content;max-width:calc(100vw - 16px);padding:0;inset:auto;border-radius:10px;overflow:hidden;border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);font-family:inherit;font-size:12px;font-weight:500;line-height:16px;box-shadow:0 2px 6px #0001}
13713
13713
  .btw-selection-menu::backdrop{background:transparent}.btw-selection-dialog::backdrop{background:#0004}
13714
13714
  .btw-selection-dialog h3{margin:0 0 12px;font-size:16px}.btw-selection-dialog label{display:flex;flex-direction:column;gap:8px;margin-top:12px}
@@ -13721,7 +13721,7 @@ var CSS = `
13721
13721
  .btw-selection-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px}.btw-selection-hint{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.6;margin:10px 4px}
13722
13722
  .btw-reference{padding:0 14px 10px;font-size:12px}.btw-reference summary{cursor:pointer;color:var(--dsw-alias-label-secondary)}.btw-reference blockquote{margin:8px 0 0;padding:8px;border-left:2px solid var(--dsw-alias-border-l2);white-space:pre-wrap;overflow-wrap:anywhere;max-height:150px;overflow:auto}.btw-selection-dialog .btw-reference{padding:0}
13723
13723
  .btw-dock{display:flex;flex:none;flex-direction:column;gap:8px;width:calc(100% - var(--dsh-composer-side-clearance,0px) - var(--dsh-composer-side-clearance,0px));max-width:var(--dsh-composer-card-max-width,100%);margin:0 auto;max-height:440px;overflow:auto;padding:4px 0 10px;box-sizing:border-box;letter-spacing:0}
13724
- .btw-bubble{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;min-width:0;flex-shrink:0;font-size:13px;line-height:1.6;font-family:var(--dsw-font-family,inherit);letter-spacing:0}
13724
+ .btw-bubble{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;min-width:0;flex-shrink:0;font-size:13px;line-height:1.6;font-family:var(--dsw-font-family,inherit);letter-spacing:0}
13725
13725
  .btw-header{display:flex;align-items:center;gap:8px;padding:8px 10px 8px 14px;min-width:0;min-height:44px}
13726
13726
  .btw-symbol{display:flex;align-items:center;color:var(--dsw-alias-label-secondary);height:28px;flex-shrink:0}
13727
13727
  .btw-question{flex:1;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:22px;max-height:66px;overflow:auto}
package/lib/index.js CHANGED
@@ -1,3 +1,7 @@
1
+ // src/index.ts
2
+ import { SessionId } from "@deepseek-ai/dsh-session";
3
+ import { PERSONA_PREFIX_SECTION } from "@deepseek-ai/dsh-system-prompt";
4
+
1
5
  // src/limits.ts
2
6
  var MAX_QUESTION_LENGTH = 8e3;
3
7
  var MAX_REFERENCE_LENGTH = 8e3;
@@ -440,30 +444,54 @@ function apply(ctx) {
440
444
  const stopWatch = ctx.on("session/event", (session, event) => protection.recognize(session, event));
441
445
  const jobs = new SideJobs(async (request) => {
442
446
  const provider = ctx.subagents.getProvider("fork");
443
- if (!provider?.inheritsParentContext || !provider.capabilities.toolFilter || !provider.capabilities.persona) {
447
+ if (!provider?.inheritsParentContext) {
444
448
  throw new Error(translate(request.locale)("error.provider"));
445
449
  }
446
450
  const label = `michengai-btw:${globalThis.crypto.randomUUID()}`;
451
+ const childId = SessionId(globalThis.crypto.randomUUID());
447
452
  labels.add(label);
453
+ let childAgent;
448
454
  try {
449
- const run = await ctx.subagents.start("fork", {
450
- parent: request.context,
451
- label,
452
- signal: request.signal,
453
- toolFilter: request.toolFilter,
454
- persona: PERSONA,
455
- prompt: [{ type: "text", text: `\u4EE5\u4E0B\u662F\u552F\u4E00\u9700\u8981\u56DE\u7B54\u7684\u65B0\u95EE\u9898\uFF1B\u5148\u524D\u5185\u5BB9\u4EC5\u4F9B\u53C2\u8003\u3002
455
+ const stopCreated = ctx.on("agent/created", ({ agent }) => {
456
+ if (agent.id !== childId) return void 0;
457
+ childAgent = agent;
458
+ arm(agent);
459
+ const scoped = agent;
460
+ if (scoped.ctx?.systemPrompt) {
461
+ scoped.ctx.systemPrompt.section({
462
+ name: PERSONA_PREFIX_SECTION,
463
+ order: scoped.ctx.systemPrompt.getSectionOrder("DEPLOYMENT_PERSONA_PREFIX"),
464
+ text: PERSONA
465
+ });
466
+ }
467
+ if (scoped.ctx?.tools) scoped.ctx.tools.restrict(request.toolFilter);
468
+ return void 0;
469
+ });
470
+ let activation;
471
+ try {
472
+ activation = await ctx.subagents.startActivation({
473
+ provider: "fork",
474
+ label,
475
+ childId,
476
+ request: {
477
+ parent: request.context,
478
+ prompt: [{ type: "text", text: `\u4EE5\u4E0B\u662F\u552F\u4E00\u9700\u8981\u56DE\u7B54\u7684\u65B0\u95EE\u9898\uFF1B\u5148\u524D\u5185\u5BB9\u4EC5\u4F9B\u53C2\u8003\u3002
456
479
 
457
480
  ${request.question}` }]
458
- });
459
- if (run.localAgent) arm(run.localAgent);
481
+ },
482
+ signal: request.signal,
483
+ delivery: "caller"
484
+ });
485
+ } finally {
486
+ stopCreated();
487
+ }
460
488
  return {
461
- result: run.result,
489
+ result: activation.result,
462
490
  dispose: async () => {
463
491
  try {
464
- await run.dispose();
492
+ await activation.dispose();
465
493
  } finally {
466
- await releaseChild(run.localAgent);
494
+ await releaseChild(childAgent);
467
495
  labels.delete(label);
468
496
  }
469
497
  }
@@ -1 +1 @@
1
- export declare const CSS = "\n.btw-reference-preview{display:block;margin-top:6px;max-height:3.2em;overflow:hidden;overflow-wrap:anywhere;line-height:1.6;color:var(--dsw-alias-label-primary)}\n.btw-selection-dialog,.btw-selection-menu{position:fixed;box-sizing:border-box;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;padding:16px;font:inherit;font-size:13px;max-height:calc(100dvh - 32px);overflow:auto;box-shadow:0 12px 36px #0003}\n.btw-selection-dialog{width:min(520px,calc(100vw - 32px));margin:auto}.btw-selection-menu{margin:0;width:max-content;max-width:calc(100vw - 16px);padding:0;inset:auto;border-radius:10px;overflow:hidden;border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);font-family:inherit;font-size:12px;font-weight:500;line-height:16px;box-shadow:0 2px 6px #0001}\n.btw-selection-menu::backdrop{background:transparent}.btw-selection-dialog::backdrop{background:#0004}\n.btw-selection-dialog h3{margin:0 0 12px;font-size:16px}.btw-selection-dialog label{display:flex;flex-direction:column;gap:8px;margin-top:12px}\n.btw-selection-dialog textarea{box-sizing:border-box;width:100%;min-height:96px;resize:vertical;font:inherit;padding:10px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-base);color:inherit}\n.btw-selection-dialog button,.btw-selection-menu button{font:inherit;color:inherit;background:var(--dsw-alias-interactive-bg-hover);border:0;border-radius:6px;padding:8px 12px;cursor:pointer;min-height:36px}\n.btw-selection-menu [role=\"toolbar\"]{display:flex;align-items:center}.btw-selection-menu button+button{border-left:1px solid var(--dsw-alias-border-l1)}\n.btw-selection-menu button{display:inline-flex;align-items:center;height:28px;min-height:28px;padding:0 8px;border-radius:0;text-align:left;white-space:nowrap;background:transparent}.btw-selection-menu button:hover{background:var(--dsw-alias-interactive-bg-hover)}\n.btw-selection-dialog button:disabled{opacity:.5;cursor:default}.btw-selection-dialog :focus-visible,.btw-selection-menu :focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,var(--dsw-alias-label-primary));outline-offset:2px}\n.btw-selection-menu :focus-visible{outline-width:1px;outline-offset:-2px}\n.btw-selection-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px}.btw-selection-hint{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.6;margin:10px 4px}\n.btw-reference{padding:0 14px 10px;font-size:12px}.btw-reference summary{cursor:pointer;color:var(--dsw-alias-label-secondary)}.btw-reference blockquote{margin:8px 0 0;padding:8px;border-left:2px solid var(--dsw-alias-border-l2);white-space:pre-wrap;overflow-wrap:anywhere;max-height:150px;overflow:auto}.btw-selection-dialog .btw-reference{padding:0}\n.btw-dock{display:flex;flex:none;flex-direction:column;gap:8px;width:calc(100% - var(--dsh-composer-side-clearance,0px) - var(--dsh-composer-side-clearance,0px));max-width:var(--dsh-composer-card-max-width,100%);margin:0 auto;max-height:440px;overflow:auto;padding:4px 0 10px;box-sizing:border-box;letter-spacing:0}\n.btw-bubble{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;min-width:0;flex-shrink:0;font-size:13px;line-height:1.6;font-family:var(--dsw-font-family,inherit);letter-spacing:0}\n.btw-header{display:flex;align-items:center;gap:8px;padding:8px 10px 8px 14px;min-width:0;min-height:44px}\n.btw-symbol{display:flex;align-items:center;color:var(--dsw-alias-label-secondary);height:28px;flex-shrink:0}\n.btw-question{flex:1;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:22px;max-height:66px;overflow:auto}\n.btw-actions{display:flex;gap:4px;flex-shrink:0}\n.btw-actions button{display:grid;place-items:center;width:28px;height:28px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;flex:none;transition:background-color 120ms ease}\n.btw-actions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.btw-actions button:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,var(--dsw-alias-label-primary));outline-offset:-2px}\n.btw-actions button:disabled{cursor:wait;opacity:.5}\n.btw-status{display:flex;align-items:center;gap:8px;padding:0 14px 12px;color:var(--dsw-alias-label-secondary);font-size:13px}\n.btw-spinner{animation:btw-spin 1.2s linear infinite}@keyframes btw-spin{to{transform:rotate(360deg)}}\n.btw-answer{padding:0 14px 14px;max-height:300px;overflow:auto;overflow-wrap:anywhere;font-size:13px;line-height:1.7}\n.btw-answer>*:first-child{margin-top:0}.btw-answer>*:last-child{margin-bottom:0}\n.btw-answer p{margin:8px 0}.btw-answer h1,.btw-answer h2,.btw-answer h3{font-size:15px;line-height:1.5;margin:12px 0 6px;font-weight:600}\n.btw-answer pre{max-width:100%;overflow:auto;background:var(--dsw-alias-markdown-code-block);padding:10px;border-radius:8px;white-space:pre;font-size:12px}.btw-answer .katex-display{max-width:100%;overflow:auto}\n.btw-answer code{font-family:Consolas,monospace;font-size:12px}.btw-answer :not(pre)>code{background:var(--dsw-alias-markdown-code-block);border-radius:4px;padding:1px 3px}.btw-answer a{color:var(--dsw-alias-label-primary);text-decoration:underline;text-underline-offset:2px;overflow-wrap:anywhere}\n.btw-answer table{display:block;max-width:100%;overflow:auto;border-collapse:collapse}.btw-answer th,.btw-answer td{border:1px solid var(--dsw-alias-border-l2);padding:5px 9px}\n.btw-answer ul,.btw-answer ol{padding-left:22px}.btw-answer blockquote{margin:8px 0;padding-left:10px;border-left:2px solid var(--dsw-alias-border-l4);color:var(--dsw-alias-label-secondary)}\n.btw-error{margin:0;padding:0 14px 12px;font-size:13px;color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere}\n@media(max-width:480px){.btw-dock{max-height:330px}.btw-header{padding:6px 8px 6px 12px;gap:6px}.btw-answer{padding:0 12px 12px;max-height:230px}.btw-status,.btw-error{padding-left:12px}.btw-actions{gap:0}.btw-actions button{width:36px;height:36px}}\n@media(prefers-reduced-motion:reduce){.btw-spinner{animation:none}.btw-actions button{transition:none}}\n";
1
+ export declare const CSS = "\n.btw-reference-preview{display:block;margin-top:6px;max-height:3.2em;overflow:hidden;overflow-wrap:anywhere;line-height:1.6;color:var(--dsw-alias-label-primary)}\n.btw-selection-dialog,.btw-selection-menu{position:fixed;box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;padding:16px;font:inherit;font-size:13px;max-height:calc(100dvh - 32px);overflow:auto;box-shadow:0 12px 36px #0003}\n.btw-selection-dialog{width:min(520px,calc(100vw - 32px));margin:auto}.btw-selection-menu{margin:0;width:max-content;max-width:calc(100vw - 16px);padding:0;inset:auto;border-radius:10px;overflow:hidden;border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);font-family:inherit;font-size:12px;font-weight:500;line-height:16px;box-shadow:0 2px 6px #0001}\n.btw-selection-menu::backdrop{background:transparent}.btw-selection-dialog::backdrop{background:#0004}\n.btw-selection-dialog h3{margin:0 0 12px;font-size:16px}.btw-selection-dialog label{display:flex;flex-direction:column;gap:8px;margin-top:12px}\n.btw-selection-dialog textarea{box-sizing:border-box;width:100%;min-height:96px;resize:vertical;font:inherit;padding:10px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-base);color:inherit}\n.btw-selection-dialog button,.btw-selection-menu button{font:inherit;color:inherit;background:var(--dsw-alias-interactive-bg-hover);border:0;border-radius:6px;padding:8px 12px;cursor:pointer;min-height:36px}\n.btw-selection-menu [role=\"toolbar\"]{display:flex;align-items:center}.btw-selection-menu button+button{border-left:1px solid var(--dsw-alias-border-l1)}\n.btw-selection-menu button{display:inline-flex;align-items:center;height:28px;min-height:28px;padding:0 8px;border-radius:0;text-align:left;white-space:nowrap;background:transparent}.btw-selection-menu button:hover{background:var(--dsw-alias-interactive-bg-hover)}\n.btw-selection-dialog button:disabled{opacity:.5;cursor:default}.btw-selection-dialog :focus-visible,.btw-selection-menu :focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,var(--dsw-alias-label-primary));outline-offset:2px}\n.btw-selection-menu :focus-visible{outline-width:1px;outline-offset:-2px}\n.btw-selection-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px}.btw-selection-hint{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.6;margin:10px 4px}\n.btw-reference{padding:0 14px 10px;font-size:12px}.btw-reference summary{cursor:pointer;color:var(--dsw-alias-label-secondary)}.btw-reference blockquote{margin:8px 0 0;padding:8px;border-left:2px solid var(--dsw-alias-border-l2);white-space:pre-wrap;overflow-wrap:anywhere;max-height:150px;overflow:auto}.btw-selection-dialog .btw-reference{padding:0}\n.btw-dock{display:flex;flex:none;flex-direction:column;gap:8px;width:calc(100% - var(--dsh-composer-side-clearance,0px) - var(--dsh-composer-side-clearance,0px));max-width:var(--dsh-composer-card-max-width,100%);margin:0 auto;max-height:440px;overflow:auto;padding:4px 0 10px;box-sizing:border-box;letter-spacing:0}\n.btw-bubble{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;min-width:0;flex-shrink:0;font-size:13px;line-height:1.6;font-family:var(--dsw-font-family,inherit);letter-spacing:0}\n.btw-header{display:flex;align-items:center;gap:8px;padding:8px 10px 8px 14px;min-width:0;min-height:44px}\n.btw-symbol{display:flex;align-items:center;color:var(--dsw-alias-label-secondary);height:28px;flex-shrink:0}\n.btw-question{flex:1;min-width:0;overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:22px;max-height:66px;overflow:auto}\n.btw-actions{display:flex;gap:4px;flex-shrink:0}\n.btw-actions button{display:grid;place-items:center;width:28px;height:28px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;flex:none;transition:background-color 120ms ease}\n.btw-actions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.btw-actions button:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,var(--dsw-alias-label-primary));outline-offset:-2px}\n.btw-actions button:disabled{cursor:wait;opacity:.5}\n.btw-status{display:flex;align-items:center;gap:8px;padding:0 14px 12px;color:var(--dsw-alias-label-secondary);font-size:13px}\n.btw-spinner{animation:btw-spin 1.2s linear infinite}@keyframes btw-spin{to{transform:rotate(360deg)}}\n.btw-answer{padding:0 14px 14px;max-height:300px;overflow:auto;overflow-wrap:anywhere;font-size:13px;line-height:1.7}\n.btw-answer>*:first-child{margin-top:0}.btw-answer>*:last-child{margin-bottom:0}\n.btw-answer p{margin:8px 0}.btw-answer h1,.btw-answer h2,.btw-answer h3{font-size:15px;line-height:1.5;margin:12px 0 6px;font-weight:600}\n.btw-answer pre{max-width:100%;overflow:auto;background:var(--dsw-alias-markdown-code-block);padding:10px;border-radius:8px;white-space:pre;font-size:12px}.btw-answer .katex-display{max-width:100%;overflow:auto}\n.btw-answer code{font-family:Consolas,monospace;font-size:12px}.btw-answer :not(pre)>code{background:var(--dsw-alias-markdown-code-block);border-radius:4px;padding:1px 3px}.btw-answer a{color:var(--dsw-alias-label-primary);text-decoration:underline;text-underline-offset:2px;overflow-wrap:anywhere}\n.btw-answer table{display:block;max-width:100%;overflow:auto;border-collapse:collapse}.btw-answer th,.btw-answer td{border:1px solid var(--dsw-alias-border-l2);padding:5px 9px}\n.btw-answer ul,.btw-answer ol{padding-left:22px}.btw-answer blockquote{margin:8px 0;padding-left:10px;border-left:2px solid var(--dsw-alias-border-l4);color:var(--dsw-alias-label-secondary)}\n.btw-error{margin:0;padding:0 14px 12px;font-size:13px;color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere}\n@media(max-width:480px){.btw-dock{max-height:330px}.btw-header{padding:6px 8px 6px 12px;gap:6px}.btw-answer{padding:0 12px 12px;max-height:230px}.btw-status,.btw-error{padding-left:12px}.btw-actions{gap:0}.btw-actions button{width:36px;height:36px}}\n@media(prefers-reduced-motion:reduce){.btw-spinner{animation:none}.btw-actions button{transition:none}}\n";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michengai/dsh-btw",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
4
4
  "description": "DSH 一次性只读旁问插件:基于当前上下文回答,独立气泡,不执行工具 · One-shot read-only side-ask plugin: answers from current context in an independent bubble, no tool execution",
5
5
  "repository": {
6
6
  "type": "git",
@@ -64,45 +64,45 @@
64
64
  "license": "Apache-2.0",
65
65
  "peerDependencies": {
66
66
  "@deepseek-ai/cordis": "^4.0.2",
67
- "@deepseek-ai/dsh-commands": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
68
- "@deepseek-ai/dsh-subagent": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
69
- "@deepseek-ai/dsh-tools": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
70
- "react": "^18.3.1"
67
+ "@deepseek-ai/dsh-commands": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
68
+ "@deepseek-ai/dsh-subagent": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
69
+ "@deepseek-ai/dsh-tools": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
70
+ "react": "^18.3.1",
71
+ "@deepseek-ai/dsh-session": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
72
+ "@deepseek-ai/dsh-system-prompt": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3"
71
73
  },
72
74
  "devDependencies": {
73
- "@deepseek-ai/cordis": "4.0.4",
74
- "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
75
- "@deepseek-ai/dsh-agent-loop": "0.2.0-rc.2",
76
- "@deepseek-ai/dsh-api-gateway": "0.2.0-rc.2",
77
- "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2",
78
- "@deepseek-ai/dsh-attachment": "0.2.0-rc.2",
79
- "@deepseek-ai/dsh-client-connection": "0.2.0-rc.2",
80
- "@deepseek-ai/dsh-client-locale": "0.2.0-rc.2",
81
- "@deepseek-ai/dsh-client-ui-chat": "0.2.0-rc.2",
82
- "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
83
- "@deepseek-ai/dsh-client-ui-input-trigger": "0.2.0-rc.2",
84
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
85
- "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
86
- "@deepseek-ai/dsh-client-ui-theme": "0.2.0-rc.2",
87
- "@deepseek-ai/dsh-commands": "0.2.0-rc.2",
88
- "@deepseek-ai/dsh-invariants": "0.2.0-rc.2",
89
- "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
90
- "@deepseek-ai/dsh-ptc-runtime": "0.2.0-rc.2",
91
- "@deepseek-ai/dsh-sandbox": "0.2.0-rc.2",
92
- "@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.2",
93
- "@deepseek-ai/dsh-scope": "0.2.0-rc.2",
94
- "@deepseek-ai/dsh-session": "0.2.0-rc.2",
95
- "@deepseek-ai/dsh-session-persistence": "0.2.0-rc.2",
96
- "@deepseek-ai/dsh-session-projection": "0.2.0-rc.2",
97
- "@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
98
- "@deepseek-ai/dsh-subagent-fork-in-process": "0.2.0-rc.2",
99
- "@deepseek-ai/dsh-subagent-in-process-driver": "0.2.0-rc.2",
100
- "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.2",
101
- "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
102
- "@deepseek-ai/dsh-user-approval": "0.2.0-rc.2",
103
- "@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2",
104
- "@deepseek-ai/dsh-typert-registry": "0.2.0-rc.2",
105
- "@deepseek-ai/dsh-util-time": "0.2.0-rc.2",
75
+ "@deepseek-ai/cordis": "4.0.5-alpha.2",
76
+ "@deepseek-ai/dsh-agent": "0.2.1-alpha.3",
77
+ "@deepseek-ai/dsh-agent-loop": "0.2.1-alpha.3",
78
+ "@deepseek-ai/dsh-api-gateway": "0.2.1-alpha.3",
79
+ "@deepseek-ai/dsh-api-session-controller": "0.2.1-alpha.3",
80
+ "@deepseek-ai/dsh-attachment": "0.2.1-alpha.3",
81
+ "@deepseek-ai/dsh-client-connection": "0.2.1-alpha.3",
82
+ "@deepseek-ai/dsh-client-locale": "0.2.1-alpha.3",
83
+ "@deepseek-ai/dsh-client-ui-chat": "0.2.1-alpha.3",
84
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-alpha.3",
85
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.2.1-alpha.3",
86
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-alpha.3",
87
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.1-alpha.3",
88
+ "@deepseek-ai/dsh-client-ui-theme": "0.2.1-alpha.3",
89
+ "@deepseek-ai/dsh-commands": "0.2.1-alpha.3",
90
+ "@deepseek-ai/dsh-llm": "0.2.1-alpha.3",
91
+ "@deepseek-ai/dsh-ptc-runtime": "0.2.1-alpha.3",
92
+ "@deepseek-ai/dsh-sandbox": "0.2.1-alpha.3",
93
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.3",
94
+ "@deepseek-ai/dsh-scope": "0.2.1-alpha.3",
95
+ "@deepseek-ai/dsh-session": "0.2.1-alpha.3",
96
+ "@deepseek-ai/dsh-session-persistence": "0.2.1-alpha.3",
97
+ "@deepseek-ai/dsh-session-projection": "0.2.1-alpha.3",
98
+ "@deepseek-ai/dsh-subagent": "0.2.1-alpha.3",
99
+ "@deepseek-ai/dsh-subagent-fork-in-process": "0.2.1-alpha.3",
100
+ "@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.3",
101
+ "@deepseek-ai/dsh-tools": "0.2.1-alpha.3",
102
+ "@deepseek-ai/dsh-user-approval": "0.2.1-alpha.3",
103
+ "@deepseek-ai/dsh-typert-protocol": "0.2.1-alpha.3",
104
+ "@deepseek-ai/dsh-typert-registry": "0.2.1-alpha.3",
105
+ "@deepseek-ai/dsh-util-time": "0.2.1-alpha.3",
106
106
  "@types/node": "^22.0.0",
107
107
  "@types/react": "^18.3.1",
108
108
  "@types/react-dom": "^18.3.7",