@agent-link/server 0.1.187 → 0.1.189

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 (76) hide show
  1. package/dist/auth-manager.d.ts +36 -0
  2. package/dist/auth-manager.js +96 -0
  3. package/dist/auth-manager.js.map +1 -0
  4. package/dist/http.d.ts +4 -0
  5. package/dist/http.js +85 -0
  6. package/dist/http.js.map +1 -0
  7. package/dist/index.js +5 -84
  8. package/dist/index.js.map +1 -1
  9. package/dist/message-relay.d.ts +17 -0
  10. package/dist/message-relay.js +23 -0
  11. package/dist/message-relay.js.map +1 -0
  12. package/dist/session-manager.d.ts +44 -0
  13. package/dist/session-manager.js +83 -0
  14. package/dist/session-manager.js.map +1 -0
  15. package/dist/ws-agent.js +19 -27
  16. package/dist/ws-agent.js.map +1 -1
  17. package/dist/ws-client.js +31 -37
  18. package/dist/ws-client.js.map +1 -1
  19. package/package.json +3 -3
  20. package/web/dist/assets/index-DIO7Hox0.js +320 -0
  21. package/web/dist/assets/index-DIO7Hox0.js.map +1 -0
  22. package/web/dist/assets/index-Y1FN_mFe.css +1 -0
  23. package/web/{index.html → dist/index.html} +2 -19
  24. package/dist/auth.d.ts +0 -13
  25. package/dist/auth.js +0 -65
  26. package/dist/auth.js.map +0 -1
  27. package/dist/context.d.ts +0 -52
  28. package/dist/context.js +0 -60
  29. package/dist/context.js.map +0 -1
  30. package/web/app.js +0 -2881
  31. package/web/css/ask-question.css +0 -333
  32. package/web/css/base.css +0 -270
  33. package/web/css/btw.css +0 -148
  34. package/web/css/chat.css +0 -176
  35. package/web/css/file-browser.css +0 -499
  36. package/web/css/input.css +0 -671
  37. package/web/css/loop.css +0 -674
  38. package/web/css/markdown.css +0 -169
  39. package/web/css/responsive.css +0 -314
  40. package/web/css/sidebar.css +0 -593
  41. package/web/css/team.css +0 -1277
  42. package/web/css/tools.css +0 -327
  43. package/web/encryption.js +0 -56
  44. package/web/modules/appHelpers.js +0 -100
  45. package/web/modules/askQuestion.js +0 -63
  46. package/web/modules/backgroundRouting.js +0 -269
  47. package/web/modules/connection.js +0 -731
  48. package/web/modules/fileAttachments.js +0 -125
  49. package/web/modules/fileBrowser.js +0 -398
  50. package/web/modules/filePreview.js +0 -213
  51. package/web/modules/i18n.js +0 -101
  52. package/web/modules/loop.js +0 -338
  53. package/web/modules/loopTemplates.js +0 -110
  54. package/web/modules/markdown.js +0 -83
  55. package/web/modules/messageHelpers.js +0 -206
  56. package/web/modules/sidebar.js +0 -402
  57. package/web/modules/streaming.js +0 -116
  58. package/web/modules/team.js +0 -396
  59. package/web/modules/teamTemplates.js +0 -360
  60. package/web/vendor/highlight.min.js +0 -1213
  61. package/web/vendor/marked.min.js +0 -6
  62. package/web/vendor/nacl-fast.min.js +0 -1
  63. package/web/vendor/nacl-util.min.js +0 -1
  64. package/web/vendor/pako.min.js +0 -2
  65. package/web/vendor/vue.global.prod.js +0 -13
  66. /package/web/{favicon.svg → dist/favicon.svg} +0 -0
  67. /package/web/{images → dist/images}/chat-iPad.webp +0 -0
  68. /package/web/{images → dist/images}/chat-iPhone.webp +0 -0
  69. /package/web/{images → dist/images}/loop-iPad.webp +0 -0
  70. /package/web/{images → dist/images}/team-iPad.webp +0 -0
  71. /package/web/{landing.html → dist/landing.html} +0 -0
  72. /package/web/{landing.zh.html → dist/landing.zh.html} +0 -0
  73. /package/web/{locales → dist/locales}/en.json +0 -0
  74. /package/web/{locales → dist/locales}/zh.json +0 -0
  75. /package/web/{vendor → dist/vendor}/github-dark.min.css +0 -0
  76. /package/web/{vendor → dist/vendor}/github.min.css +0 -0
package/web/css/input.css DELETED
@@ -1,671 +0,0 @@
1
- /* ── Input area ── */
2
- .input-area {
3
- flex-shrink: 0;
4
- padding: 0 1.5rem calc(1rem + env(safe-area-inset-bottom, 0px));
5
- background: transparent;
6
- position: relative;
7
- }
8
-
9
- .slash-menu {
10
- max-width: 768px;
11
- margin: 0 auto 4px;
12
- background: var(--bg-secondary);
13
- border: 1px solid var(--border);
14
- border-radius: 12px;
15
- padding: 4px 0;
16
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
17
- }
18
-
19
- .slash-menu-item {
20
- display: flex;
21
- align-items: center;
22
- gap: 12px;
23
- padding: 8px 16px;
24
- cursor: pointer;
25
- transition: background 0.1s;
26
- }
27
-
28
- .slash-menu-item.active {
29
- background: var(--bg-tertiary);
30
- }
31
-
32
- .slash-menu-cmd {
33
- font-weight: 600;
34
- color: var(--accent);
35
- font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;
36
- font-size: 0.9rem;
37
- min-width: 90px;
38
- }
39
-
40
- .slash-menu-desc {
41
- color: var(--text-secondary);
42
- font-size: 0.85rem;
43
- }
44
-
45
- .input-card {
46
- max-width: 768px;
47
- margin: 0 auto;
48
- background: var(--bg-secondary);
49
- border: 1px solid var(--border);
50
- border-radius: 16px;
51
- padding: 0.5rem;
52
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
53
- transition: border-color 0.2s;
54
- }
55
-
56
- .input-card:focus-within {
57
- border-color: var(--accent);
58
- box-shadow: 0 2px 16px rgba(107, 159, 206, 0.1);
59
- }
60
-
61
- .input-card textarea {
62
- width: 100%;
63
- background: transparent;
64
- border: none;
65
- color: var(--text-primary);
66
- padding: 0.4rem 0.6rem;
67
- font-family: inherit;
68
- font-size: 16px; /* >=16px prevents iOS auto-zoom on focus */
69
- resize: none;
70
- outline: none;
71
- line-height: 1.5;
72
- max-height: 160px;
73
- overflow-y: auto;
74
- }
75
-
76
- .input-card textarea::placeholder {
77
- color: var(--text-secondary);
78
- }
79
-
80
- .input-bottom-row {
81
- display: flex;
82
- justify-content: space-between;
83
- align-items: center;
84
- padding: 0.1rem 0.25rem 0;
85
- }
86
-
87
- .input-bottom-left {
88
- display: flex;
89
- align-items: center;
90
- gap: 2px;
91
- }
92
-
93
- .send-btn {
94
- background: var(--accent);
95
- color: #fff;
96
- border: none;
97
- border-radius: 10px;
98
- width: 32px;
99
- height: 32px;
100
- font-size: 0.9rem;
101
- font-weight: 600;
102
- cursor: pointer;
103
- display: flex;
104
- align-items: center;
105
- justify-content: center;
106
- transition: background 0.15s, opacity 0.15s;
107
- }
108
-
109
- .send-btn:hover:not(:disabled) {
110
- background: var(--accent-hover);
111
- }
112
-
113
- .send-btn:disabled {
114
- opacity: 0.3;
115
- cursor: not-allowed;
116
- }
117
-
118
- /* ── Stop button ── */
119
- .stop-btn {
120
- background: var(--error);
121
- }
122
-
123
- .stop-btn:hover {
124
- background: #c04444;
125
- }
126
-
127
- /* ── Streaming cursor ── */
128
- .assistant-bubble.streaming .markdown-body > *:last-child::after,
129
- .assistant-bubble.streaming .message-content:not(.markdown-body)::after {
130
- content: '';
131
- display: inline-block;
132
- width: 2px;
133
- height: 1em;
134
- background: var(--accent);
135
- margin-left: 2px;
136
- vertical-align: text-bottom;
137
- animation: blink-cursor 0.8s steps(2) infinite;
138
- }
139
-
140
- @keyframes blink-cursor {
141
- 0% { opacity: 1; }
142
- 50% { opacity: 0; }
143
- }
144
-
145
- /* ── Sidebar change-dir button ── */
146
- .sidebar-workdir-header {
147
- display: flex;
148
- align-items: center;
149
- justify-content: space-between;
150
- }
151
-
152
- /* ── Workdir path row (clickable) ── */
153
- .sidebar-workdir-path-row {
154
- display: flex;
155
- align-items: flex-start;
156
- gap: 4px;
157
- cursor: pointer;
158
- padding: 4px 6px;
159
- margin: 0 -6px;
160
- border-radius: 4px;
161
- transition: background 0.15s;
162
- }
163
-
164
- .sidebar-workdir-path-row:hover {
165
- background: var(--bg-tertiary);
166
- }
167
-
168
- .sidebar-workdir-path-row .sidebar-workdir-path {
169
- flex: 1;
170
- min-width: 0;
171
- }
172
-
173
- .sidebar-workdir-chevron {
174
- flex-shrink: 0;
175
- margin-top: 2px;
176
- color: var(--text-secondary);
177
- transition: transform 0.15s ease;
178
- }
179
-
180
- .sidebar-workdir-chevron.open {
181
- transform: rotate(180deg);
182
- }
183
-
184
- /* ── Workdir dropdown menu ── */
185
- .workdir-menu {
186
- position: absolute;
187
- left: -6px;
188
- right: -6px;
189
- z-index: 50;
190
- margin-top: 4px;
191
- background: var(--bg-secondary);
192
- border: 1px solid var(--border);
193
- border-radius: 6px;
194
- padding: 4px 0;
195
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
196
- }
197
-
198
- .workdir-menu-item {
199
- display: flex;
200
- align-items: center;
201
- gap: 8px;
202
- padding: 7px 12px;
203
- font-size: 0.8rem;
204
- cursor: pointer;
205
- color: var(--text-primary);
206
- }
207
-
208
- .workdir-menu-item:hover {
209
- background: var(--bg-tertiary);
210
- }
211
-
212
- .workdir-menu-item svg {
213
- flex-shrink: 0;
214
- color: var(--text-secondary);
215
- }
216
-
217
- /* ── Workdir switching overlay ── */
218
- .workdir-switching-overlay {
219
- position: fixed;
220
- top: 0; left: 0; right: 0; bottom: 0;
221
- background: rgba(0, 0, 0, 0.45);
222
- z-index: 1100;
223
- display: flex;
224
- flex-direction: column;
225
- align-items: center;
226
- justify-content: center;
227
- gap: 16px;
228
- }
229
- .workdir-switching-spinner {
230
- width: 36px;
231
- height: 36px;
232
- border: 3px solid rgba(255, 255, 255, 0.2);
233
- border-top-color: rgba(255, 255, 255, 0.8);
234
- border-radius: 50%;
235
- animation: spin 0.7s linear infinite;
236
- }
237
- .workdir-switching-text {
238
- color: rgba(255, 255, 255, 0.9);
239
- font-size: 0.9rem;
240
- font-weight: 500;
241
- }
242
- .fade-enter-active, .fade-leave-active {
243
- transition: opacity 0.2s ease;
244
- }
245
- .fade-enter-from, .fade-leave-to {
246
- opacity: 0;
247
- }
248
-
249
- /* ── Folder Picker Modal ── */
250
- .folder-picker-overlay {
251
- position: fixed;
252
- top: 0; left: 0; right: 0; bottom: 0;
253
- background: rgba(0, 0, 0, 0.5);
254
- z-index: 1000;
255
- display: flex;
256
- align-items: center;
257
- justify-content: center;
258
- }
259
-
260
- .folder-picker-dialog {
261
- width: 440px;
262
- height: 520px;
263
- background: var(--bg-secondary);
264
- border: 1px solid var(--border);
265
- border-radius: 12px;
266
- display: flex;
267
- flex-direction: column;
268
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
269
- }
270
-
271
- .folder-picker-header {
272
- display: flex;
273
- justify-content: space-between;
274
- align-items: center;
275
- padding: 12px 16px;
276
- font-size: 0.95rem;
277
- font-weight: 600;
278
- border-bottom: 1px solid var(--border);
279
- }
280
-
281
- .folder-picker-close {
282
- background: none;
283
- border: none;
284
- color: var(--text-secondary);
285
- font-size: 1.2rem;
286
- cursor: pointer;
287
- padding: 0 4px;
288
- line-height: 1;
289
- }
290
-
291
- .folder-picker-close:hover {
292
- color: var(--text-primary);
293
- }
294
-
295
- .folder-picker-nav {
296
- display: flex;
297
- align-items: center;
298
- gap: 8px;
299
- padding: 8px 16px;
300
- font-size: 0.78rem;
301
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
302
- color: var(--text-secondary);
303
- border-bottom: 1px solid var(--border);
304
- }
305
-
306
- .folder-picker-up {
307
- display: flex;
308
- align-items: center;
309
- justify-content: center;
310
- width: 24px;
311
- height: 24px;
312
- background: none;
313
- border: 1px solid var(--border);
314
- border-radius: 4px;
315
- color: var(--text-secondary);
316
- cursor: pointer;
317
- flex-shrink: 0;
318
- transition: color 0.15s, background 0.15s;
319
- }
320
-
321
- .folder-picker-up:hover {
322
- color: var(--text-primary);
323
- background: var(--bg-tertiary);
324
- }
325
-
326
- .folder-picker-up:disabled {
327
- opacity: 0.3;
328
- cursor: not-allowed;
329
- }
330
-
331
- .folder-picker-current {
332
- overflow: hidden;
333
- text-overflow: ellipsis;
334
- white-space: nowrap;
335
- flex: 1;
336
- }
337
-
338
- .folder-picker-path-input {
339
- flex: 1;
340
- background: var(--bg-primary);
341
- color: var(--text-primary);
342
- border: 1px solid var(--border);
343
- border-radius: 4px;
344
- padding: 4px 8px;
345
- font-size: 0.85rem;
346
- font-family: monospace;
347
- outline: none;
348
- }
349
-
350
- .folder-picker-path-input:focus {
351
- border-color: var(--accent);
352
- }
353
-
354
- .folder-picker-list {
355
- flex: 1;
356
- overflow-y: auto;
357
- min-height: 200px;
358
- max-height: 350px;
359
- padding: 4px 0;
360
- }
361
-
362
- .folder-picker-loading {
363
- display: flex;
364
- align-items: center;
365
- gap: 8px;
366
- padding: 16px;
367
- color: var(--text-secondary);
368
- font-size: 0.82rem;
369
- }
370
-
371
- .folder-picker-item {
372
- display: flex;
373
- align-items: center;
374
- gap: 8px;
375
- padding: 6px 16px;
376
- font-size: 0.85rem;
377
- cursor: pointer;
378
- color: var(--text-primary);
379
- transition: background 0.1s;
380
- user-select: none;
381
- }
382
-
383
- .folder-picker-item:hover {
384
- background: var(--bg-tertiary);
385
- }
386
-
387
- .folder-picker-item svg {
388
- flex-shrink: 0;
389
- color: var(--text-secondary);
390
- }
391
-
392
- .folder-picker-selected {
393
- background: var(--accent) !important;
394
- color: #fff !important;
395
- }
396
-
397
- .folder-picker-selected svg {
398
- color: #fff !important;
399
- }
400
-
401
- .folder-picker-empty {
402
- text-align: center;
403
- padding: 2rem;
404
- color: var(--text-secondary);
405
- font-size: 0.82rem;
406
- }
407
-
408
- .folder-picker-footer {
409
- padding: 10px 16px;
410
- display: flex;
411
- justify-content: flex-end;
412
- gap: 8px;
413
- border-top: 1px solid var(--border);
414
- }
415
-
416
- .folder-picker-cancel {
417
- padding: 6px 16px;
418
- background: none;
419
- color: var(--text-secondary);
420
- border: 1px solid var(--border);
421
- border-radius: 8px;
422
- font-size: 0.85rem;
423
- cursor: pointer;
424
- transition: color 0.15s, background 0.15s;
425
- }
426
-
427
- .folder-picker-cancel:hover {
428
- color: var(--text-primary);
429
- background: var(--bg-tertiary);
430
- }
431
-
432
- .folder-picker-confirm {
433
- padding: 6px 20px;
434
- background: var(--accent);
435
- color: #fff;
436
- border: none;
437
- border-radius: 8px;
438
- font-size: 0.85rem;
439
- font-weight: 600;
440
- cursor: pointer;
441
- transition: background 0.15s;
442
- }
443
-
444
- .folder-picker-confirm:hover {
445
- background: var(--accent-hover);
446
- }
447
-
448
- .folder-picker-confirm:disabled {
449
- opacity: 0.4;
450
- cursor: not-allowed;
451
- }
452
-
453
- /* ── File Upload: Attachment Bar ── */
454
- .attachment-bar {
455
- display: flex;
456
- flex-wrap: wrap;
457
- gap: 6px;
458
- padding: 6px 8px;
459
- border-top: 1px solid var(--border);
460
- }
461
-
462
- .attachment-chip {
463
- display: flex;
464
- align-items: center;
465
- gap: 6px;
466
- background: var(--bg-tertiary);
467
- border: 1px solid var(--border);
468
- border-radius: 8px;
469
- padding: 4px 8px;
470
- font-size: 0.78rem;
471
- color: var(--text-primary);
472
- max-width: 220px;
473
- }
474
-
475
- .attachment-thumb {
476
- width: 28px;
477
- height: 28px;
478
- object-fit: cover;
479
- border-radius: 4px;
480
- flex-shrink: 0;
481
- }
482
-
483
- .attachment-file-icon {
484
- display: flex;
485
- align-items: center;
486
- justify-content: center;
487
- width: 28px;
488
- height: 28px;
489
- background: var(--bg-secondary);
490
- border-radius: 4px;
491
- flex-shrink: 0;
492
- color: var(--text-secondary);
493
- }
494
-
495
- .attachment-info {
496
- overflow: hidden;
497
- min-width: 0;
498
- }
499
-
500
- .attachment-name {
501
- overflow: hidden;
502
- text-overflow: ellipsis;
503
- white-space: nowrap;
504
- font-weight: 500;
505
- }
506
-
507
- .attachment-size {
508
- color: var(--text-secondary);
509
- font-size: 0.7rem;
510
- }
511
-
512
- .attachment-remove {
513
- background: none;
514
- border: none;
515
- color: var(--text-secondary);
516
- cursor: pointer;
517
- padding: 0 2px;
518
- font-size: 1rem;
519
- line-height: 1;
520
- flex-shrink: 0;
521
- transition: color 0.15s;
522
- }
523
-
524
- .attachment-remove:hover {
525
- color: var(--error);
526
- }
527
-
528
- /* ── Paperclip attach button ── */
529
- .attach-btn {
530
- background: none;
531
- border: none;
532
- color: var(--text-secondary);
533
- cursor: pointer;
534
- display: flex;
535
- align-items: center;
536
- justify-content: center;
537
- width: 32px;
538
- height: 32px;
539
- border-radius: 8px;
540
- transition: color 0.15s, background 0.15s;
541
- }
542
-
543
- .attach-btn:hover {
544
- color: var(--text-primary);
545
- background: var(--bg-tertiary);
546
- }
547
-
548
- .attach-btn:disabled {
549
- opacity: 0.3;
550
- cursor: not-allowed;
551
- }
552
-
553
- /* ── Slash command button ── */
554
- .slash-btn {
555
- background: none;
556
- border: none;
557
- color: var(--text-secondary);
558
- cursor: pointer;
559
- display: flex;
560
- align-items: center;
561
- justify-content: center;
562
- width: 32px;
563
- height: 32px;
564
- border-radius: 8px;
565
- transition: color 0.15s, background 0.15s;
566
- }
567
-
568
- .slash-btn:hover {
569
- color: var(--text-primary);
570
- background: var(--bg-tertiary);
571
- }
572
-
573
- .slash-btn:disabled {
574
- opacity: 0.3;
575
- cursor: not-allowed;
576
- }
577
-
578
- /* ── Drag-over highlight on input card ── */
579
- .input-card.drag-over {
580
- border-color: var(--accent);
581
- box-shadow: 0 0 0 2px var(--accent), 0 2px 12px rgba(107, 159, 206, 0.12);
582
- }
583
-
584
- /* ── Attachments displayed in sent messages ── */
585
- .message-attachments {
586
- display: flex;
587
- flex-wrap: wrap;
588
- gap: 6px;
589
- margin-top: 6px;
590
- }
591
-
592
- .message-attachment-chip {
593
- display: flex;
594
- align-items: center;
595
- gap: 4px;
596
- background: var(--bg-secondary);
597
- border: 1px solid var(--border);
598
- border-radius: 6px;
599
- padding: 3px 8px;
600
- font-size: 0.75rem;
601
- color: var(--text-secondary);
602
- }
603
-
604
- .message-attachment-thumb {
605
- width: 20px;
606
- height: 20px;
607
- object-fit: cover;
608
- border-radius: 3px;
609
- }
610
-
611
- .message-attachment-file-icon {
612
- display: flex;
613
- align-items: center;
614
- color: var(--text-secondary);
615
- }
616
-
617
- /* ── Plan Mode toggle button ── */
618
- .plan-mode-btn {
619
- background: none;
620
- border: 1px solid var(--border);
621
- color: var(--text-secondary);
622
- cursor: pointer;
623
- display: flex;
624
- align-items: center;
625
- gap: 4px;
626
- height: 28px;
627
- padding: 0 8px;
628
- border-radius: 6px;
629
- font-size: 0.75rem;
630
- font-weight: 600;
631
- letter-spacing: 0.02em;
632
- transition: color 0.15s, background 0.15s, border-color 0.15s;
633
- white-space: nowrap;
634
- }
635
-
636
- .plan-mode-btn:hover:not(:disabled) {
637
- color: var(--text-primary);
638
- background: var(--bg-tertiary);
639
- border-color: var(--text-secondary);
640
- }
641
-
642
- .plan-mode-btn.active {
643
- color: var(--plan-mode);
644
- background: var(--plan-mode-bg);
645
- border-color: var(--plan-mode);
646
- }
647
-
648
- .plan-mode-btn.active:hover:not(:disabled) {
649
- background: rgba(212, 162, 76, 0.18);
650
- }
651
-
652
- .plan-mode-btn:disabled {
653
- opacity: 0.35;
654
- cursor: not-allowed;
655
- }
656
-
657
- .plan-mode-btn svg {
658
- flex-shrink: 0;
659
- }
660
-
661
-
662
- /* ── Input card plan mode accent ── */
663
- .input-card.plan-mode {
664
- border-top: 2px solid var(--plan-mode);
665
- }
666
-
667
- /* ── Sidebar backdrop (mobile overlay) ── */
668
- .sidebar-backdrop {
669
- display: none;
670
- }
671
-