@deepseek-ai/dsh-client-ui-goal 0.2.0-rc.1 → 0.2.1-alpha.1

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
@@ -15,8 +15,8 @@
15
15
  en: d152484eb41ac6b4
16
16
  zh: 09388d293f9be9cb
17
17
  /deepseek-ai-dsh-client-ui-goal/use-this-package:
18
- en: 8fa7519b40158cdd
19
- zh: 218cd370f9afec19
18
+ en: 4f6e6353d793a0de
19
+ zh: cde6e470f7dd9057
20
20
  /deepseek-ai-dsh-client-ui-goal/use-this-package/the-command-input-bubble:
21
21
  en: 05c5db0eb58dffef
22
22
  zh: 54e7bea0b810b1b8
@@ -39,5 +39,5 @@
39
39
  en: bbb97ea1b94eae0f
40
40
  zh: 8e6b0e0516746dcf
41
41
  /deepseek-ai-dsh-client-ui-goal/known-limitations-and-deferred-work/dev-note:
42
- en: 4548b53e34e6f005
43
- zh: ff186c76070b52bd
42
+ en: e67f633dc6fe7773
43
+ zh: 3bb0c20c93f16f98
package/README.md CHANGED
@@ -25,7 +25,7 @@ The Web GUI goal surface shows both the durable goal state and its current proce
25
25
  <a id="use-this-package"></a>
26
26
  ## Use this package
27
27
 
28
- Mount this plugin alongside `ui-conversation` and the goal domain package; the strip then appears as the second card in the composer-context stack (after Todo, before Queue) whenever the session has a goal. Todo and Goal use the same panel elevation above the composer. An armed active goal offers pause; an active-but-disarmed or paused goal offers resume; edit rewrites the objective; clear removes the goal and suppresses the strip until the projection catches up.
28
+ Mount this plugin alongside `ui-conversation` and the goal domain package; the strip then appears as the second card in the composer-context stack (after Todo, before Queue) whenever the session has a goal. Todo and Goal use the same panel elevation above the composer. An armed active goal offers pause; an active-but-disarmed or paused goal offers resume; edit rewrites the objective in the ui-primitives `InlineEditor`, so multi-line objectives survive editing; clear removes the goal and suppresses the strip until the projection catches up.
29
29
 
30
30
  ### The command-input bubble
31
31
 
@@ -89,5 +89,3 @@ These limits define the current goal surface. They are current package constrain
89
89
  None.
90
90
 
91
91
  </details>
92
-
93
- **Runtime invariant:** No companion is published. There is a single GoalBar dock registration whose disposal is proven by the HMR-safety spec — durable state arrives on the goal projection, process-local activation arrives through the entry's private hook source, and that source subscribes only while the framework hook observes it.
package/README.zh.md CHANGED
@@ -25,7 +25,7 @@ Web GUI 的 goal 界面同时显示持久 goal 状态及当前的进程本地激
25
25
  <a id="use-this-package"></a>
26
26
  ## 使用本包
27
27
 
28
- 与 `ui-conversation` 及 goal 领域包一起挂载本插件;只要会话存在目标,条带就会作为 composer 上下文堆栈的第二张卡片出现(位于 Todo 之后、Queue 之前)。Todo 与 Goal 使用相同的面板 elevation,使其位于 composer 层级之上。已 armed 的 active goal 提供暂停动作;active-but-disarmed 或 paused 的 goal 提供恢复;编辑重写目标文本;清除移除目标,并在投影追上之前抑制条带。
28
+ 与 `ui-conversation` 及 goal 领域包一起挂载本插件;只要会话存在目标,条带就会作为 composer 上下文堆栈的第二张卡片出现(位于 Todo 之后、Queue 之前)。Todo 与 Goal 使用相同的面板 elevation,使其位于 composer 层级之上。已 armed 的 active goal 提供暂停动作;active-but-disarmed 或 paused 的 goal 提供恢复;编辑在 ui-primitives 的 `InlineEditor` 中重写目标文本,多行目标编辑后仍保留换行;清除移除目标,并在投影追上之前抑制条带。
29
29
 
30
30
  ### 指令输入气泡
31
31
 
@@ -89,5 +89,3 @@ Web GUI 的 goal 界面同时显示持久 goal 状态及当前的进程本地激
89
89
  无。
90
90
 
91
91
  </details>
92
-
93
- **运行时不变式:** 不发布伴生入口。插件只注册一个 GoalBar dock,其释放已由 HMR(热模块替换)安全性用例证明;持久状态来自 goal projection,进程本地 activation 来自入口私有钩子源,且该源只在框架钩子观察期间订阅。
package/lib/client.js CHANGED
@@ -126,7 +126,7 @@ window.__ModuleLoader__.load({
126
126
  }
127
127
  //#endregion
128
128
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-goal/src/client/GoalBar.module.css.mjs
129
- const css$1 = ".nLMEza_dock{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));margin:0 auto}.nLMEza_bar{isolation:isolate;box-sizing:border-box;width:100%;max-width:calc(var(--dsh-composer-card-max-width) - 4 * var(--dsh-composer-dock-inset));--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-md);height:36px;box-shadow:var(--dsw-elevation-panel);border:0;align-items:center;gap:10px;margin:0 auto;padding:4px 5px 4px 12px;display:flex;position:relative}.nLMEza_bar: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}.nLMEza_goalGlyph{color:var(--dsw-alias-label-tertiary);flex:none;display:inline-flex}.nLMEza_label{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:24px}.nLMEza_objective{min-width:0;color:var(--dsw-alias-label-primary-dimmed);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;line-height:20px;overflow:hidden}.nLMEza_error{min-width:0;color:var(--dsw-alias-state-error-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;line-height:20px;overflow:hidden}.nLMEza_objectiveInput{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-sm);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);outline:none;flex:1;padding:0 8px;font-size:13px;line-height:20px}.nLMEza_objectiveInput:focus{border-color:var(--dsw-alias-state-business-primary)}.nLMEza_objectiveInput::placeholder{color:var(--dsw-alias-label-caption)}.nLMEza_actions{flex:none;align-items:center;gap:10px;display:flex}.nLMEza_iconBtn{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}.nLMEza_iconBtn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.nLMEza_iconBtn:disabled{opacity:.4;cursor:default}";
129
+ const css$1 = ".nLMEza_dock{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));margin:0 auto}.nLMEza_bar{isolation:isolate;box-sizing:border-box;width:100%;max-width:calc(var(--dsh-composer-card-max-width) - 4 * var(--dsh-composer-dock-inset));--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-md);height:36px;box-shadow:var(--dsw-elevation-panel);border:0;align-items:center;gap:10px;margin:0 auto;padding:4px 5px 4px 12px;display:flex;position:relative}.nLMEza_bar: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}.nLMEza_goalGlyph{color:var(--dsw-alias-label-tertiary);flex:none;display:inline-flex}.nLMEza_label{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:24px}.nLMEza_objective{min-width:0;color:var(--dsw-alias-label-primary-dimmed);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;line-height:20px;overflow:hidden}.nLMEza_error{min-width:0;color:var(--dsw-alias-state-error-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;line-height:20px;overflow:hidden}.nLMEza_editBar{--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);align-items:flex-end;height:auto;min-height:36px}.nLMEza_actions{flex:none;align-items:center;gap:10px;display:flex}.nLMEza_iconBtn{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}.nLMEza_iconBtn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.nLMEza_iconBtn:disabled{opacity:.4;cursor:default}";
130
130
  const tagId$1 = "@deepseek-ai/dsh-client-ui-goal/GoalBar.module.css";
131
131
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
132
132
  const tag = document.createElement("style");
@@ -139,12 +139,12 @@ window.__ModuleLoader__.load({
139
139
  "actions": "nLMEza_actions",
140
140
  "bar": "nLMEza_bar",
141
141
  "dock": "nLMEza_dock",
142
+ "editBar": "nLMEza_editBar",
142
143
  "error": "nLMEza_error",
143
144
  "goalGlyph": "nLMEza_goalGlyph",
144
145
  "iconBtn": "nLMEza_iconBtn",
145
146
  "label": "nLMEza_label",
146
- "objective": "nLMEza_objective",
147
- "objectiveInput": "nLMEza_objectiveInput"
147
+ "objective": "nLMEza_objective"
148
148
  };
149
149
  //#endregion
150
150
  //#region lib/types/client/GoalBar.js
@@ -209,21 +209,18 @@ window.__ModuleLoader__.load({
209
209
  className: GoalBar_module_css_default.dock,
210
210
  "data-goal-bar": true,
211
211
  children: (0, react_jsx_runtime.jsxs)("div", {
212
- className: GoalBar_module_css_default.bar,
212
+ className: `${GoalBar_module_css_default.bar} ${GoalBar_module_css_default.editBar}`,
213
213
  children: [
214
- (0, react_jsx_runtime.jsx)("input", {
215
- className: GoalBar_module_css_default.objectiveInput,
216
- type: "text",
217
- "aria-label": t("objective.aria"),
214
+ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.InlineEditor, {
218
215
  value: draft,
219
- onChange: (e) => {
220
- setDraft(e.target.value);
221
- },
222
- onKeyDown: (e) => {
223
- if (e.key === "Enter") handleEdit();
224
- if (e.key === "Escape") setEditing(false);
216
+ label: t("objective.aria"),
217
+ onChange: setDraft,
218
+ onSave: () => {
219
+ handleEdit();
225
220
  },
226
- autoFocus: true
221
+ onCancel: () => {
222
+ setEditing(false);
223
+ }
227
224
  }),
228
225
  actionError !== null && (0, react_jsx_runtime.jsx)("span", {
229
226
  className: GoalBar_module_css_default.error,
@@ -482,7 +479,7 @@ window.__ModuleLoader__.load({
482
479
  /** Simplified Chinese dictionary (the key-set source of truth). */
483
480
  const zh = {
484
481
  "phase.active": "进行中的目标",
485
- "phase.active.disarmed": "未运行的目标",
482
+ "phase.active.disarmed": "已暂停的目标",
486
483
  "phase.paused": "已暂停的目标",
487
484
  "phase.blocked": "受阻的目标",
488
485
  "objective.aria": "目标内容",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-goal",
3
3
  "description": "Session goal surface: GoalBar docked above the composer, read from the goal session projection",
4
- "version": "0.2.0-rc.1",
4
+ "version": "0.2.1-alpha.1",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -41,28 +41,28 @@
41
41
  },
42
42
  "license": "MIT",
43
43
  "peerDependencies": {
44
- "@deepseek-ai/cordis": "~4.0.4"
44
+ "@deepseek-ai/cordis": "~4.0.5-alpha.1"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@testing-library/react": "^16.1.0",
48
48
  "@types/react": "~18.3.1",
49
49
  "react": "^18.2.0",
50
50
  "react-dom": "^18.2.0",
51
- "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.1",
52
- "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.1",
53
- "@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
54
- "@deepseek-ai/dsh-client-ui-chat": "0.2.0-rc.1",
55
- "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.1",
56
- "@deepseek-ai/dsh-client-test-runtime": "0.2.0-rc.1",
57
- "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
58
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.1",
59
- "@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.1",
60
- "@deepseek-ai/dsh-commands": "0.2.0-rc.1",
61
- "@deepseek-ai/dsh-goal": "0.2.0-rc.1",
62
- "@deepseek-ai/cordis": "~4.0.4",
63
- "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.1",
64
- "@deepseek-ai/dsh-session": "0.2.0-rc.1",
65
- "@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.1"
51
+ "@deepseek-ai/dsh-api-remotes": "0.2.1-alpha.1",
52
+ "@deepseek-ai/dsh-api-session-controller": "0.2.1-alpha.1",
53
+ "@deepseek-ai/dsh-client-locale": "0.2.1-alpha.1",
54
+ "@deepseek-ai/dsh-client-test-runtime": "0.2.1-alpha.1",
55
+ "@deepseek-ai/dsh-client-ui-chat": "0.2.1-alpha.1",
56
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-alpha.1",
57
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-alpha.1",
58
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.1-alpha.1",
59
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-alpha.1",
60
+ "@deepseek-ai/dsh-client-ui-session": "0.2.1-alpha.1",
61
+ "@deepseek-ai/dsh-commands": "0.2.1-alpha.1",
62
+ "@deepseek-ai/dsh-goal": "0.2.1-alpha.1",
63
+ "@deepseek-ai/cordis": "~4.0.5-alpha.1",
64
+ "@deepseek-ai/dsh-typert-protocol": "0.2.1-alpha.1",
65
+ "@deepseek-ai/dsh-session": "0.2.1-alpha.1"
66
66
  },
67
67
  "files": [
68
68
  "lib/index.js",