@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.
- package/lib/client.js +874 -168
- package/lib/client.js.map +1 -1
- package/package.json +1 -1
- package/src/client/board/Board.tsx +168 -15
- package/src/client/board/board.module.css +100 -0
- package/src/client/board/logic.ts +99 -21
- package/src/client/board/project-view-logic.ts +9 -3
- package/src/client/board/project-view.module.css +18 -0
- package/src/client/board/project-view.tsx +27 -1
- package/src/client/board/strings.ts +29 -5
- package/src/client/controller.ts +27 -7
- package/src/client/detail/SessionDetail.tsx +177 -14
- package/src/client/detail/detail.module.css +105 -2
- package/src/client/detail/logic.ts +220 -29
- package/src/client/detail/strings.ts +13 -0
- package/src/client/detail-glue.ts +33 -0
- package/src/client/detail-view.module.css +36 -3
- package/src/client/detail-view.tsx +76 -28
- package/src/client/dsh-tools/dsh-tools.module.css +6 -4
- package/src/client/inject/InjectPanel.tsx +57 -4
- package/src/client/inject/inject.module.css +68 -67
- package/src/client/inject/logic.ts +38 -0
- package/src/client/inject/overlay.module.css +1 -1
- package/src/client/locales/en.ts +17 -2
- package/src/client/locales/zh.ts +17 -2
- package/src/client/mount.tsx +3 -3
- package/src/client/widget.tsx +37 -12
package/src/client/locales/zh.ts
CHANGED
|
@@ -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':
|
package/src/client/mount.tsx
CHANGED
|
@@ -186,9 +186,9 @@ export function createBoardTab(
|
|
|
186
186
|
onFiltersChange={(next) => {
|
|
187
187
|
controller.setFilters(next)
|
|
188
188
|
}}
|
|
189
|
-
|
|
190
|
-
|
|
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
|
)}
|
package/src/client/widget.tsx
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
-
|
|
54
|
-
|
|
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
|
}
|