@shendeguize/dsh-agent-sidecar 0.1.0 → 0.1.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.
@@ -107,7 +107,7 @@ export const zh = {
107
107
  'settings.sectionInject': '消息注入',
108
108
  'settings.injectEnabledLabel': '启用注入',
109
109
  'settings.injectEnabledHint':
110
- '关闭时看板隐藏全部注入入口,写接口在服务端同步拒绝。',
110
+ '关闭后注入面板为只读禁用态,写接口在服务端同步拒绝。',
111
111
  'settings.injectDefaultModeLabel': '默认注入模式',
112
112
  'settings.injectDefaultModeHint': '注入面板打开时预选的模式。',
113
113
  'settings.injectModeQueue': 'queue(排队下一轮)',
@@ -179,6 +179,7 @@ export const zh = {
179
179
  '结果未知:消息可能已投递。请勿重试;请前往目标会话核对后再决定下一步。',
180
180
  'inject.resultReplayed': '幂等重放:返回的是此前同一请求的结果,未发生二次注入。',
181
181
  'inject.reprepare': '重新准备',
182
+ 'inject.observeListen': '开启监听观察反应',
182
183
 
183
184
  // ── inject panel: error vocabulary (gateway + transport) ─────────────
184
185
  'inject.errInjectDisabled': '注入功能已在服务端关闭;请在设置中开启注入。',
@@ -207,6 +208,11 @@ export const zh = {
207
208
  'detail.header.listenOn': D.header.listenOn,
208
209
  'detail.header.listenOff': D.header.listenOff,
209
210
  'detail.header.listenHint': D.header.listenHint,
211
+ 'detail.header.refresh': D.header.refresh,
212
+ 'detail.header.refreshing': D.header.refreshing,
213
+ 'detail.header.refreshHint': D.header.refreshHint,
214
+ 'detail.header.copyIdTitle': D.header.copyIdTitle,
215
+ 'detail.header.copied': D.header.copied,
210
216
  'detail.header.untitled': D.header.untitled,
211
217
  'detail.header.unknownProject': D.header.unknownProject,
212
218
  'detail.header.observedDisclaimer': D.header.observedDisclaimer,
@@ -231,6 +237,9 @@ export const zh = {
231
237
  'detail.kind.error': D.kind.error,
232
238
  'detail.kind.other': D.kind.other,
233
239
  'detail.gap.label': D.gap.label,
240
+ 'detail.filter.conversation': D.filter.conversation,
241
+ 'detail.filter.all': D.filter.all,
242
+ 'detail.filter.hiddenNotice': D.filter.hiddenNotice,
234
243
  'detail.timeline.loadMore': D.timeline.loadMore,
235
244
  'detail.timeline.loadingMore': D.timeline.loadingMore,
236
245
  'detail.timeline.noMore': D.timeline.noMore,
@@ -240,6 +249,7 @@ export const zh = {
240
249
  'detail.timeline.seq': D.timeline.seq,
241
250
  'detail.timeline.hiddenNotice': D.timeline.hiddenNotice,
242
251
  'detail.timeline.showAll': D.timeline.showAll,
252
+ 'detail.timeline.chunkRun': D.timeline.chunkRun,
243
253
  'detail.states.loadingTitle': D.states.loadingTitle,
244
254
  'detail.states.emptyTitle': D.states.emptyTitle,
245
255
  'detail.states.emptyHint': D.states.emptyHint,
@@ -259,6 +269,9 @@ export const zh = {
259
269
  'detail.actions.inject': '注入',
260
270
  'detail.actions.analyze': 'AI 分析',
261
271
  'detail.actions.analyzeDisabledHint': '在设置中开启「启用 AI 旁路分析」后可用',
272
+ 'detail.tools.title': '谱系与检索',
273
+ 'detail.tools.show': '展开',
274
+ 'detail.tools.hide': '收起',
262
275
 
263
276
  // ── dsh deep-query tools (T5.4 dsh-tools/strings.ts, referenced) ───────
264
277
  'dshtools.lineage.title': Q.lineage.title,
@@ -308,6 +321,8 @@ export const zh = {
308
321
  'project.lastActive': P.lastActive,
309
322
  'project.liveChip': P.liveChip,
310
323
  'project.untitled': P.untitled,
324
+ 'project.showAllSessions': P.showAllSessions,
325
+ 'project.showLessSessions': P.showLessSessions,
311
326
  'project.empty.title': P.empty.title,
312
327
  'project.empty.hint': P.empty.hint,
313
328
  'project.loading': P.loading,
@@ -371,7 +386,7 @@ export const zh = {
371
386
  'command.noSessions': '暂无被观测的会话',
372
387
  'command.unknownProject': '未知项目',
373
388
  'command.untitled': '(无标题)',
374
- 'command.truncated': '还有 {n} 个活跃会话未列出',
389
+ 'command.truncated': '还有 {n} 个会话未列出',
375
390
  'command.boardHint': '打开会话视图的「Sidecar」Tab 查看完整看板',
376
391
  'command.unreachable': 'sidecar 未连接',
377
392
  'command.unreachableHint':
@@ -186,9 +186,9 @@ export function createBoardTab(
186
186
  onFiltersChange={(next) => {
187
187
  controller.setFilters(next)
188
188
  }}
189
- onRefresh={() => {
190
- void controller.refresh()
191
- }}
189
+ // Hand the promise through so the board can render the
190
+ // in-flight state and a failure notice (UX-07).
191
+ onRefresh={() => controller.refresh()}
192
192
  onSelectSession={openDetail}
193
193
  />
194
194
  )}
@@ -35,7 +35,6 @@ const rootStyle: CSSProperties = {
35
35
  border: 'none',
36
36
  borderRadius: 6,
37
37
  background: 'transparent',
38
- cursor: 'pointer',
39
38
  font: 'inherit',
40
39
  color: 'var(--dsw-alias-label-secondary, #57606a)',
41
40
  }
@@ -47,19 +46,18 @@ const countStyle: CSSProperties = {
47
46
  whiteSpace: 'nowrap',
48
47
  }
49
48
 
50
- /** Connection dot + working-session counter (e.g. `▸2`) for the footer. */
49
+ /**
50
+ * Connection dot + working-session counter (e.g. `▸2`) for the footer.
51
+ *
52
+ * Without a wired `onOpen` the widget renders as an inert status `<span>`
53
+ * (UX-06): button semantics + pointer cursor on a control that does
54
+ * nothing would be a lie. The button form returns as soon as the
55
+ * integration layer supplies the callback.
56
+ */
51
57
  export function SidecarWidget(props: SidecarWidgetProps): ReactElement {
52
58
  const title = widgetTitle(props.connection, props.workingCount)
53
- return (
54
- <button
55
- type="button"
56
- style={rootStyle}
57
- title={title}
58
- aria-label={title}
59
- onClick={props.onOpen}
60
- data-testid="agent-sidecar-widget"
61
- data-connection={props.connection}
62
- >
59
+ const body = (
60
+ <>
63
61
  <span
64
62
  aria-hidden
65
63
  style={{
@@ -75,6 +73,33 @@ export function SidecarWidget(props: SidecarWidgetProps): ReactElement {
75
73
  {`▸${props.workingCount}`}
76
74
  </span>
77
75
  )}
76
+ </>
77
+ )
78
+ if (props.onOpen === undefined) {
79
+ return (
80
+ <span
81
+ style={rootStyle}
82
+ title={title}
83
+ aria-label={title}
84
+ role="status"
85
+ data-testid="agent-sidecar-widget"
86
+ data-connection={props.connection}
87
+ >
88
+ {body}
89
+ </span>
90
+ )
91
+ }
92
+ return (
93
+ <button
94
+ type="button"
95
+ style={{ ...rootStyle, cursor: 'pointer' }}
96
+ title={title}
97
+ aria-label={title}
98
+ onClick={props.onOpen}
99
+ data-testid="agent-sidecar-widget"
100
+ data-connection={props.connection}
101
+ >
102
+ {body}
78
103
  </button>
79
104
  )
80
105
  }