@shendeguize/dsh-agent-sidecar 0.1.0

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.
Files changed (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +167 -0
  3. package/cordis.patch.yml +10 -0
  4. package/lib/client.js +8062 -0
  5. package/lib/client.js.map +1 -0
  6. package/lib/index.d.ts +396 -0
  7. package/lib/index.js +4166 -0
  8. package/package.json +101 -0
  9. package/src/analysis.ts +782 -0
  10. package/src/bridge.ts +841 -0
  11. package/src/client/analysis/AnalysisPanel.tsx +191 -0
  12. package/src/client/analysis/analysis.module.css +183 -0
  13. package/src/client/analysis-glue.ts +331 -0
  14. package/src/client/api.ts +380 -0
  15. package/src/client/board/Board.tsx +214 -0
  16. package/src/client/board/board.module.css +302 -0
  17. package/src/client/board/logic.ts +556 -0
  18. package/src/client/board/project-view-logic.ts +361 -0
  19. package/src/client/board/project-view.module.css +307 -0
  20. package/src/client/board/project-view.tsx +189 -0
  21. package/src/client/board/strings.ts +112 -0
  22. package/src/client/commands.ts +484 -0
  23. package/src/client/controller.ts +360 -0
  24. package/src/client/css-modules.d.ts +11 -0
  25. package/src/client/detail/SessionDetail.tsx +270 -0
  26. package/src/client/detail/detail.module.css +433 -0
  27. package/src/client/detail/logic.ts +779 -0
  28. package/src/client/detail/strings.ts +98 -0
  29. package/src/client/detail/transport.ts +175 -0
  30. package/src/client/detail-glue.ts +397 -0
  31. package/src/client/detail-view.module.css +79 -0
  32. package/src/client/detail-view.tsx +233 -0
  33. package/src/client/dsh-tools/LineageTree.tsx +210 -0
  34. package/src/client/dsh-tools/SearchPanel.tsx +169 -0
  35. package/src/client/dsh-tools/dsh-tools.module.css +374 -0
  36. package/src/client/dsh-tools/logic.ts +596 -0
  37. package/src/client/dsh-tools/strings.ts +90 -0
  38. package/src/client/index.ts +315 -0
  39. package/src/client/inject/InjectPanel.tsx +482 -0
  40. package/src/client/inject/inject.module.css +446 -0
  41. package/src/client/inject/logic.ts +516 -0
  42. package/src/client/inject/overlay.module.css +22 -0
  43. package/src/client/inject-glue.ts +171 -0
  44. package/src/client/locales/command.ts +48 -0
  45. package/src/client/locales/en.ts +385 -0
  46. package/src/client/locales/index.ts +123 -0
  47. package/src/client/locales/zh.ts +402 -0
  48. package/src/client/m3-transport.ts +151 -0
  49. package/src/client/mount.tsx +307 -0
  50. package/src/client/project-glue.ts +134 -0
  51. package/src/client/search-glue.ts +143 -0
  52. package/src/client/settings-card.module.css +359 -0
  53. package/src/client/settings-card.tsx +565 -0
  54. package/src/client/settings-glue.ts +130 -0
  55. package/src/client/sidebar-tab.tsx +494 -0
  56. package/src/client/sse.ts +366 -0
  57. package/src/client/widget.tsx +80 -0
  58. package/src/config.ts +193 -0
  59. package/src/dsh-inject.ts +240 -0
  60. package/src/fusion.ts +988 -0
  61. package/src/guard.ts +274 -0
  62. package/src/index.ts +950 -0
  63. package/src/inject-gateway.ts +574 -0
  64. package/src/routes.ts +1133 -0
  65. package/src/send-cli.ts +340 -0
  66. package/src/session-store.ts +184 -0
  67. package/src/skills-provider.ts +293 -0
  68. package/src/supervisor.ts +463 -0
@@ -0,0 +1,433 @@
1
+ /*
2
+ * Session-detail styles (design §5.1 view 2 / §5.3): every color rides a
3
+ * --dsw-alias-* design token with a neutral fallback — no theme colors are
4
+ * hardcoded as the only value. The gap marker uses the warn palette,
5
+ * deliberately restrained (a thin honesty note, not an alarm).
6
+ */
7
+
8
+ .root {
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: 10px;
12
+ height: 100%;
13
+ min-height: 420px;
14
+ padding: 16px 20px;
15
+ box-sizing: border-box;
16
+ color: var(--dsw-alias-label-primary, #1f2328);
17
+ background: var(--dsw-alias-bg-base, transparent);
18
+ }
19
+
20
+ /* -------------------------------------------------------------- header */
21
+
22
+ .header {
23
+ display: flex;
24
+ flex-direction: column;
25
+ gap: 6px;
26
+ }
27
+
28
+ .headerTop {
29
+ display: flex;
30
+ align-items: center;
31
+ gap: 10px;
32
+ flex-wrap: wrap;
33
+ }
34
+
35
+ .closeButton {
36
+ font-size: 12px;
37
+ font-family: inherit;
38
+ color: var(--dsw-alias-label-secondary, #57606a);
39
+ background: transparent;
40
+ border: 1px solid var(--dsw-alias-border-l1, rgba(0, 0, 0, 0.08));
41
+ border-radius: 6px;
42
+ padding: 2px 10px;
43
+ cursor: pointer;
44
+ }
45
+
46
+ .closeButton:hover {
47
+ color: var(--dsw-alias-label-primary, #1f2328);
48
+ border-color: var(--dsw-alias-border-l2, rgba(0, 0, 0, 0.12));
49
+ background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.04));
50
+ }
51
+
52
+ .agent {
53
+ display: inline-flex;
54
+ align-items: center;
55
+ gap: 5px;
56
+ font-size: 13px;
57
+ font-weight: 650;
58
+ color: var(--dsw-alias-label-primary, #1f2328);
59
+ }
60
+
61
+ .agentGlyph {
62
+ flex: none;
63
+ color: var(--dsw-alias-brand-primary, #4d6bfe);
64
+ }
65
+
66
+ .badge {
67
+ display: inline-flex;
68
+ align-items: center;
69
+ gap: 5px;
70
+ font-size: 12px;
71
+ line-height: 20px;
72
+ padding: 0 8px;
73
+ border-radius: 999px;
74
+ border: 1px solid var(--dsw-alias-border-l1, rgba(0, 0, 0, 0.08));
75
+ background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.03));
76
+ color: var(--dsw-alias-label-secondary, #57606a);
77
+ white-space: nowrap;
78
+ }
79
+
80
+ .dot {
81
+ width: 8px;
82
+ height: 8px;
83
+ border-radius: 50%;
84
+ flex: none;
85
+ background: var(--dsw-alias-label-tertiary, #6e7781);
86
+ }
87
+
88
+ .dot[data-tone='success'] {
89
+ background: var(--dsw-alias-state-success-primary, #1a7f37);
90
+ }
91
+
92
+ .dot[data-tone='warn'] {
93
+ background: var(--dsw-alias-state-warn-primary, #9a6700);
94
+ }
95
+
96
+ .dot[data-tone='danger'] {
97
+ background: var(--dsw-alias-state-error-primary, #cf222e);
98
+ }
99
+
100
+ .dot[data-tone='neutral'] {
101
+ background: var(--dsw-alias-label-tertiary, #6e7781);
102
+ }
103
+
104
+ .dot[data-tone='muted'] {
105
+ background: var(--dsw-alias-label-dimmed, #8c959f);
106
+ }
107
+
108
+ .spacer {
109
+ flex: 1;
110
+ }
111
+
112
+ .listenButton {
113
+ font-size: 12px;
114
+ font-family: inherit;
115
+ color: var(--dsw-alias-label-secondary, #57606a);
116
+ background: transparent;
117
+ border: 1px solid var(--dsw-alias-border-l1, rgba(0, 0, 0, 0.08));
118
+ border-radius: 999px;
119
+ padding: 2px 12px;
120
+ cursor: pointer;
121
+ }
122
+
123
+ .listenButton:hover {
124
+ color: var(--dsw-alias-label-primary, #1f2328);
125
+ border-color: var(--dsw-alias-border-l2, rgba(0, 0, 0, 0.12));
126
+ }
127
+
128
+ .listenButton[data-active] {
129
+ color: var(--dsw-alias-brand-primary, #4d6bfe);
130
+ border-color: var(--dsw-alias-brand-primary, #4d6bfe);
131
+ background: var(--dsw-alias-brand-tertiary, rgba(77, 107, 254, 0.08));
132
+ }
133
+
134
+ .title {
135
+ font-size: 15px;
136
+ font-weight: 600;
137
+ color: var(--dsw-alias-label-primary, #1f2328);
138
+ overflow: hidden;
139
+ text-overflow: ellipsis;
140
+ white-space: nowrap;
141
+ }
142
+
143
+ .meta {
144
+ display: flex;
145
+ align-items: baseline;
146
+ gap: 10px;
147
+ min-width: 0;
148
+ }
149
+
150
+ .project {
151
+ font-size: 12px;
152
+ color: var(--dsw-alias-label-secondary, #57606a);
153
+ overflow: hidden;
154
+ text-overflow: ellipsis;
155
+ white-space: nowrap;
156
+ }
157
+
158
+ .sessionId {
159
+ font-size: 11px;
160
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
161
+ color: var(--dsw-alias-label-tertiary, #6e7781);
162
+ overflow: hidden;
163
+ text-overflow: ellipsis;
164
+ white-space: nowrap;
165
+ flex: none;
166
+ max-width: 40%;
167
+ }
168
+
169
+ .metaRow {
170
+ display: flex;
171
+ align-items: center;
172
+ gap: 10px;
173
+ flex-wrap: wrap;
174
+ }
175
+
176
+ .disclaimer {
177
+ font-size: 11px;
178
+ color: var(--dsw-alias-label-caption, var(--dsw-alias-label-tertiary, #6e7781));
179
+ }
180
+
181
+ .sourceList {
182
+ display: inline-flex;
183
+ align-items: center;
184
+ gap: 4px;
185
+ }
186
+
187
+ .sourceBadge {
188
+ font-size: 11px;
189
+ line-height: 16px;
190
+ padding: 0 6px;
191
+ border-radius: 999px;
192
+ border: 1px solid var(--dsw-alias-border-l1, rgba(0, 0, 0, 0.08));
193
+ color: var(--dsw-alias-label-secondary, #57606a);
194
+ background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.03));
195
+ white-space: nowrap;
196
+ }
197
+
198
+ .sourceBadge[data-tone='success'] {
199
+ color: var(--dsw-alias-state-success-primary, #1a7f37);
200
+ border-color: var(--dsw-alias-state-success-secondary, rgba(26, 127, 55, 0.24));
201
+ }
202
+
203
+ .sourceBadge[data-tone='muted'] {
204
+ color: var(--dsw-alias-label-dimmed, #8c959f);
205
+ }
206
+
207
+ /* -------------------------------------------------------------- banner */
208
+
209
+ .banner {
210
+ font-size: 12px;
211
+ line-height: 18px;
212
+ padding: 6px 10px;
213
+ border-radius: 8px;
214
+ color: var(--dsw-alias-state-warn-label, var(--dsw-alias-state-warn-primary, #9a6700));
215
+ background: var(--dsw-alias-state-warn-tertiary, rgba(154, 103, 0, 0.08));
216
+ border: 1px solid var(--dsw-alias-state-warn-secondary, rgba(154, 103, 0, 0.24));
217
+ }
218
+
219
+ /* --------------------------------------------- loading / empty / error */
220
+
221
+ .bodyState {
222
+ display: flex;
223
+ flex-direction: column;
224
+ align-items: center;
225
+ justify-content: center;
226
+ gap: 6px;
227
+ flex: 1;
228
+ min-height: 160px;
229
+ text-align: center;
230
+ padding: 24px;
231
+ }
232
+
233
+ .bodyStateTitle {
234
+ font-size: 14px;
235
+ font-weight: 600;
236
+ color: var(--dsw-alias-label-primary, #1f2328);
237
+ }
238
+
239
+ .bodyState[data-kind='error'] .bodyStateTitle {
240
+ color: var(--dsw-alias-state-error-primary, #cf222e);
241
+ }
242
+
243
+ .bodyStateHint {
244
+ font-size: 12px;
245
+ max-width: 420px;
246
+ line-height: 20px;
247
+ color: var(--dsw-alias-label-secondary, #57606a);
248
+ }
249
+
250
+ /* --------------------------------------------------------------- pager */
251
+
252
+ .pager {
253
+ display: flex;
254
+ justify-content: center;
255
+ }
256
+
257
+ .loadMoreButton {
258
+ font-size: 12px;
259
+ font-family: inherit;
260
+ color: var(--dsw-alias-label-secondary, #57606a);
261
+ background: transparent;
262
+ border: 1px solid var(--dsw-alias-border-l1, rgba(0, 0, 0, 0.08));
263
+ border-radius: 6px;
264
+ padding: 3px 14px;
265
+ cursor: pointer;
266
+ }
267
+
268
+ .loadMoreButton:hover:enabled {
269
+ color: var(--dsw-alias-label-primary, #1f2328);
270
+ border-color: var(--dsw-alias-border-l2, rgba(0, 0, 0, 0.12));
271
+ background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.04));
272
+ }
273
+
274
+ .loadMoreButton:disabled {
275
+ cursor: default;
276
+ opacity: 0.6;
277
+ }
278
+
279
+ .pagerNote {
280
+ font-size: 11px;
281
+ color: var(--dsw-alias-label-tertiary, #6e7781);
282
+ }
283
+
284
+ .hiddenNotice {
285
+ display: flex;
286
+ align-items: center;
287
+ justify-content: center;
288
+ gap: 8px;
289
+ font-size: 11px;
290
+ color: var(--dsw-alias-label-tertiary, #6e7781);
291
+ }
292
+
293
+ .showAllButton {
294
+ font-size: 11px;
295
+ font-family: inherit;
296
+ color: var(--dsw-alias-brand-primary, #4d6bfe);
297
+ background: transparent;
298
+ border: none;
299
+ padding: 0;
300
+ cursor: pointer;
301
+ }
302
+
303
+ /* ------------------------------------------------------------ timeline */
304
+
305
+ .timeline {
306
+ display: flex;
307
+ flex-direction: column;
308
+ gap: 6px;
309
+ flex: 1;
310
+ overflow-y: auto;
311
+ margin: 0;
312
+ padding: 0 2px 8px 0;
313
+ list-style: none;
314
+ }
315
+
316
+ .event {
317
+ display: flex;
318
+ flex-direction: column;
319
+ gap: 4px;
320
+ padding: 6px 10px;
321
+ border-radius: 8px;
322
+ border: 1px solid var(--dsw-alias-border-l1, rgba(0, 0, 0, 0.06));
323
+ background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.02));
324
+ }
325
+
326
+ .event[data-new] {
327
+ border-color: var(--dsw-alias-brand-primary, #4d6bfe);
328
+ background: var(--dsw-alias-brand-tertiary, rgba(77, 107, 254, 0.06));
329
+ }
330
+
331
+ .eventHead {
332
+ display: flex;
333
+ align-items: center;
334
+ gap: 6px;
335
+ min-width: 0;
336
+ }
337
+
338
+ .eventGlyph {
339
+ flex: none;
340
+ font-size: 12px;
341
+ color: var(--dsw-alias-label-tertiary, #6e7781);
342
+ }
343
+
344
+ .event[data-kind='user'] .eventGlyph,
345
+ .event[data-kind='assistant'] .eventGlyph {
346
+ color: var(--dsw-alias-brand-primary, #4d6bfe);
347
+ }
348
+
349
+ .event[data-kind='error'] .eventGlyph {
350
+ color: var(--dsw-alias-state-error-primary, #cf222e);
351
+ }
352
+
353
+ .eventLabel {
354
+ font-size: 12px;
355
+ font-weight: 600;
356
+ color: var(--dsw-alias-label-primary, #1f2328);
357
+ white-space: nowrap;
358
+ overflow: hidden;
359
+ text-overflow: ellipsis;
360
+ }
361
+
362
+ .eventSeq {
363
+ font-size: 10px;
364
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
365
+ color: var(--dsw-alias-label-tertiary, #6e7781);
366
+ flex: none;
367
+ }
368
+
369
+ .eventNew {
370
+ font-size: 10px;
371
+ line-height: 14px;
372
+ padding: 0 5px;
373
+ border-radius: 999px;
374
+ color: var(--dsw-alias-brand-primary, #4d6bfe);
375
+ border: 1px solid var(--dsw-alias-brand-primary, #4d6bfe);
376
+ flex: none;
377
+ }
378
+
379
+ .eventSpacer {
380
+ flex: 1;
381
+ }
382
+
383
+ .eventTime {
384
+ font-size: 11px;
385
+ color: var(--dsw-alias-label-caption, var(--dsw-alias-label-tertiary, #6e7781));
386
+ flex: none;
387
+ }
388
+
389
+ .eventSummary {
390
+ font-size: 12px;
391
+ line-height: 18px;
392
+ color: var(--dsw-alias-label-secondary, #57606a);
393
+ overflow-wrap: anywhere;
394
+ }
395
+
396
+ .expandButton {
397
+ align-self: flex-start;
398
+ font-size: 11px;
399
+ font-family: inherit;
400
+ color: var(--dsw-alias-brand-primary, #4d6bfe);
401
+ background: transparent;
402
+ border: none;
403
+ padding: 0;
404
+ cursor: pointer;
405
+ }
406
+
407
+ .eventBody {
408
+ margin: 0;
409
+ padding: 8px 10px;
410
+ border-radius: 6px;
411
+ font-size: 11px;
412
+ line-height: 16px;
413
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
414
+ color: var(--dsw-alias-label-primary, #1f2328);
415
+ background: var(--dsw-alias-bg-layer-2, rgba(0, 0, 0, 0.04));
416
+ white-space: pre-wrap;
417
+ overflow-wrap: anywhere;
418
+ max-height: 320px;
419
+ overflow-y: auto;
420
+ }
421
+
422
+ /* ---------------------------------------------------------- gap marker */
423
+
424
+ .gap {
425
+ font-size: 11px;
426
+ line-height: 16px;
427
+ padding: 4px 10px;
428
+ border-radius: 6px;
429
+ text-align: center;
430
+ color: var(--dsw-alias-state-warn-label, var(--dsw-alias-state-warn-primary, #9a6700));
431
+ background: var(--dsw-alias-state-warn-tertiary, rgba(154, 103, 0, 0.06));
432
+ border: 1px dashed var(--dsw-alias-state-warn-secondary, rgba(154, 103, 0, 0.32));
433
+ }