@symerian/symi 2.6.32 → 2.6.34

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 (48) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/control-ui/css/style.css +441 -1
  4. package/dist/control-ui/index.html +1 -0
  5. package/dist/control-ui/js/app.js +4 -0
  6. package/dist/control-ui/js/menu.js +41 -1
  7. package/dist/control-ui/js/settings.js +681 -0
  8. package/extensions/bluebubbles/package.json +1 -1
  9. package/extensions/copilot-proxy/package.json +1 -1
  10. package/extensions/diagnostics-otel/package.json +1 -1
  11. package/extensions/discord/package.json +1 -1
  12. package/extensions/feishu/package.json +1 -1
  13. package/extensions/google-antigravity-auth/package.json +1 -1
  14. package/extensions/google-gemini-cli-auth/package.json +1 -1
  15. package/extensions/googlechat/package.json +1 -1
  16. package/extensions/imessage/package.json +1 -1
  17. package/extensions/irc/package.json +1 -1
  18. package/extensions/learning-loop/package.json +1 -1
  19. package/extensions/line/package.json +1 -1
  20. package/extensions/llm-task/package.json +1 -1
  21. package/extensions/matrix/CHANGELOG.md +12 -0
  22. package/extensions/matrix/package.json +1 -1
  23. package/extensions/mattermost/package.json +1 -1
  24. package/extensions/memory-core/package.json +1 -1
  25. package/extensions/memory-lancedb/package.json +1 -1
  26. package/extensions/minimax-portal-auth/package.json +1 -1
  27. package/extensions/msteams/CHANGELOG.md +12 -0
  28. package/extensions/msteams/package.json +1 -1
  29. package/extensions/nextcloud-talk/package.json +1 -1
  30. package/extensions/nostr/CHANGELOG.md +12 -0
  31. package/extensions/nostr/package.json +1 -1
  32. package/extensions/open-prose/package.json +1 -1
  33. package/extensions/outlook/package.json +1 -1
  34. package/extensions/pipeline/package.json +1 -1
  35. package/extensions/signal/package.json +1 -1
  36. package/extensions/slack/package.json +1 -1
  37. package/extensions/telegram/package.json +1 -1
  38. package/extensions/tlon/package.json +1 -1
  39. package/extensions/twitch/CHANGELOG.md +12 -0
  40. package/extensions/twitch/package.json +1 -1
  41. package/extensions/voice-call/CHANGELOG.md +12 -0
  42. package/extensions/voice-call/package.json +1 -1
  43. package/extensions/whatsapp/package.json +1 -1
  44. package/extensions/zalo/CHANGELOG.md +12 -0
  45. package/extensions/zalo/package.json +1 -1
  46. package/extensions/zalouser/CHANGELOG.md +12 -0
  47. package/extensions/zalouser/package.json +1 -1
  48. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.6.32",
3
- "commit": "3a921a700c69af2a281df5a5a26dcc8986d3f4ba",
4
- "builtAt": "2026-04-16T05:32:53.293Z"
2
+ "version": "2.6.34",
3
+ "commit": "f46835b55f8963f8de356d69966945daaf0f7ea2",
4
+ "builtAt": "2026-04-16T22:42:16.219Z"
5
5
  }
@@ -1 +1 @@
1
- 1ef8a03d7981447f100886739cfbd52d6f44f70d5011a568566426cb868978f6
1
+ 986b5c29886821b4a3935537080cee76d6618b127cff49e89ebc8e80212cd10e
@@ -3143,9 +3143,449 @@ body {
3143
3143
  }
3144
3144
 
3145
3145
  /* ══════════════════════════════════════════════════════════════════════════
3146
- CONNECTIONS PANEL
3146
+ NATIVE SETTINGS PANELS (Config, Debug, Logs)
3147
3147
  ══════════════════════════════════════════════════════════════════════════ */
3148
3148
 
3149
+ #native-settings-container {
3150
+ display: none;
3151
+ flex: 1;
3152
+ flex-direction: column;
3153
+ overflow: hidden;
3154
+ }
3155
+
3156
+ .settings-panel {
3157
+ display: flex;
3158
+ flex-direction: column;
3159
+ flex: 1;
3160
+ overflow: hidden;
3161
+ }
3162
+
3163
+ /* ── Toolbar ────────────────────────────────────────────────────────── */
3164
+ .settings-toolbar {
3165
+ display: flex;
3166
+ align-items: center;
3167
+ justify-content: space-between;
3168
+ gap: 12px;
3169
+ padding: 10px 16px;
3170
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
3171
+ background: rgba(10, 12, 20, 0.6);
3172
+ flex-shrink: 0;
3173
+ min-height: 44px;
3174
+ }
3175
+
3176
+ .settings-toolbar-left {
3177
+ display: flex;
3178
+ align-items: center;
3179
+ gap: 10px;
3180
+ }
3181
+
3182
+ .settings-toolbar-label {
3183
+ font-family: var(--font-mono);
3184
+ font-size: 10px;
3185
+ font-weight: 700;
3186
+ letter-spacing: 0.14em;
3187
+ color: rgba(255, 255, 255, 0.45);
3188
+ }
3189
+
3190
+ .settings-toolbar-count {
3191
+ font-family: var(--font-mono);
3192
+ font-size: 10px;
3193
+ color: rgba(139, 92, 246, 0.6);
3194
+ letter-spacing: 0.04em;
3195
+ }
3196
+
3197
+ .settings-toolbar-right {
3198
+ display: flex;
3199
+ align-items: center;
3200
+ gap: 8px;
3201
+ flex-wrap: wrap;
3202
+ }
3203
+
3204
+ /* ── Buttons ────────────────────────────────────────────────────────── */
3205
+ .settings-btn {
3206
+ padding: 4px 12px;
3207
+ height: 28px;
3208
+ background: rgba(255, 255, 255, 0.04);
3209
+ border: 1px solid rgba(255, 255, 255, 0.1);
3210
+ border-radius: 6px;
3211
+ color: rgba(255, 255, 255, 0.6);
3212
+ font-family: var(--font-mono);
3213
+ font-size: 10px;
3214
+ letter-spacing: 0.05em;
3215
+ cursor: pointer;
3216
+ transition: all 0.15s;
3217
+ white-space: nowrap;
3218
+ }
3219
+ .settings-btn:hover {
3220
+ background: rgba(255, 255, 255, 0.08);
3221
+ border-color: rgba(255, 255, 255, 0.2);
3222
+ color: rgba(255, 255, 255, 0.9);
3223
+ }
3224
+ .settings-btn--primary {
3225
+ background: rgba(139, 92, 246, 0.1);
3226
+ border-color: rgba(139, 92, 246, 0.25);
3227
+ color: rgba(139, 92, 246, 0.9);
3228
+ }
3229
+ .settings-btn--primary:hover {
3230
+ background: rgba(139, 92, 246, 0.2);
3231
+ border-color: rgba(139, 92, 246, 0.45);
3232
+ }
3233
+ .settings-btn--active {
3234
+ background: rgba(139, 92, 246, 0.2);
3235
+ border-color: rgba(139, 92, 246, 0.4);
3236
+ }
3237
+ .settings-btn--danger {
3238
+ background: rgba(239, 68, 68, 0.1);
3239
+ border-color: rgba(239, 68, 68, 0.25);
3240
+ color: rgba(239, 68, 68, 0.9);
3241
+ }
3242
+ .settings-btn--danger:hover {
3243
+ background: rgba(239, 68, 68, 0.2);
3244
+ border-color: rgba(239, 68, 68, 0.45);
3245
+ }
3246
+
3247
+ /* ── Search / filter input ──────────────────────────────────────────── */
3248
+ .settings-search {
3249
+ padding: 4px 10px;
3250
+ height: 28px;
3251
+ width: 140px;
3252
+ background: rgba(255, 255, 255, 0.04);
3253
+ border: 1px solid rgba(255, 255, 255, 0.1);
3254
+ border-radius: 6px;
3255
+ color: var(--text);
3256
+ font-family: var(--font-mono);
3257
+ font-size: 10px;
3258
+ outline: none;
3259
+ transition: border-color 0.15s;
3260
+ }
3261
+ .settings-search:focus {
3262
+ border-color: rgba(139, 92, 246, 0.4);
3263
+ }
3264
+ .settings-search::placeholder {
3265
+ color: rgba(255, 255, 255, 0.25);
3266
+ }
3267
+
3268
+ /* ── Checkbox label ─────────────────────────────────────────────────── */
3269
+ .settings-checkbox-label {
3270
+ display: flex;
3271
+ align-items: center;
3272
+ gap: 4px;
3273
+ font-family: var(--font-mono);
3274
+ font-size: 10px;
3275
+ color: rgba(255, 255, 255, 0.5);
3276
+ cursor: pointer;
3277
+ white-space: nowrap;
3278
+ }
3279
+ .settings-checkbox-label input[type="checkbox"] {
3280
+ accent-color: var(--accent-purple);
3281
+ width: 12px;
3282
+ height: 12px;
3283
+ }
3284
+
3285
+ /* ── Content area ───────────────────────────────────────────────────── */
3286
+ .settings-content {
3287
+ flex: 1;
3288
+ overflow-y: auto;
3289
+ padding: 16px;
3290
+ scrollbar-width: thin;
3291
+ scrollbar-color: rgba(139, 92, 246, 0.3) transparent;
3292
+ }
3293
+ .settings-content::-webkit-scrollbar {
3294
+ width: 5px;
3295
+ }
3296
+ .settings-content::-webkit-scrollbar-thumb {
3297
+ background: rgba(139, 92, 246, 0.3);
3298
+ border-radius: 3px;
3299
+ }
3300
+
3301
+ /* ── State messages ─────────────────────────────────────────────────── */
3302
+ .settings-loading,
3303
+ .settings-empty {
3304
+ display: flex;
3305
+ align-items: center;
3306
+ justify-content: center;
3307
+ min-height: 120px;
3308
+ font-family: var(--font-mono);
3309
+ font-size: 11px;
3310
+ color: rgba(255, 255, 255, 0.3);
3311
+ letter-spacing: 0.05em;
3312
+ }
3313
+
3314
+ /* ══════════════════════════════════════════════════════════════════════
3315
+ CONFIG PANEL — tree view
3316
+ ══════════════════════════════════════════════════════════════════════ */
3317
+
3318
+ .settings-section {
3319
+ border: 1px solid rgba(255, 255, 255, 0.06);
3320
+ border-radius: 8px;
3321
+ margin-bottom: 8px;
3322
+ overflow: hidden;
3323
+ transition: border-color 0.15s;
3324
+ }
3325
+ .settings-section:hover {
3326
+ border-color: rgba(255, 255, 255, 0.1);
3327
+ }
3328
+
3329
+ .settings-section-header {
3330
+ display: flex;
3331
+ align-items: center;
3332
+ gap: 8px;
3333
+ padding: 10px 14px;
3334
+ background: rgba(255, 255, 255, 0.02);
3335
+ cursor: pointer;
3336
+ user-select: none;
3337
+ transition: background 0.15s;
3338
+ }
3339
+ .settings-section-header:hover {
3340
+ background: rgba(255, 255, 255, 0.04);
3341
+ }
3342
+
3343
+ .settings-section-arrow {
3344
+ font-size: 10px;
3345
+ color: rgba(255, 255, 255, 0.3);
3346
+ transition: transform 0.15s;
3347
+ width: 10px;
3348
+ text-align: center;
3349
+ }
3350
+ .settings-section.collapsed .settings-section-arrow {
3351
+ transform: rotate(-90deg);
3352
+ }
3353
+
3354
+ .settings-section-key {
3355
+ font-family: var(--font-mono);
3356
+ font-size: 12px;
3357
+ font-weight: 600;
3358
+ color: var(--accent-cyan);
3359
+ letter-spacing: 0.03em;
3360
+ }
3361
+
3362
+ .settings-section-body {
3363
+ padding: 8px 14px 12px;
3364
+ font-family: var(--font-mono);
3365
+ font-size: 11px;
3366
+ line-height: 1.7;
3367
+ overflow-x: auto;
3368
+ }
3369
+ .settings-section.collapsed .settings-section-body {
3370
+ display: none;
3371
+ }
3372
+
3373
+ .cfg-key {
3374
+ color: rgba(0, 212, 255, 0.8);
3375
+ }
3376
+ .cfg-colon {
3377
+ color: rgba(255, 255, 255, 0.3);
3378
+ }
3379
+ .cfg-str {
3380
+ color: rgba(52, 211, 153, 0.9);
3381
+ word-break: break-all;
3382
+ }
3383
+ .cfg-num {
3384
+ color: rgba(244, 114, 182, 0.9);
3385
+ }
3386
+ .cfg-bool {
3387
+ color: rgba(139, 92, 246, 0.9);
3388
+ }
3389
+ .cfg-null {
3390
+ color: rgba(255, 255, 255, 0.3);
3391
+ font-style: italic;
3392
+ }
3393
+ .cfg-bracket {
3394
+ color: rgba(255, 255, 255, 0.25);
3395
+ }
3396
+ .cfg-row {
3397
+ padding-left: 1em;
3398
+ }
3399
+ .cfg-redacted {
3400
+ font-family: var(--font-mono);
3401
+ font-size: 9px;
3402
+ padding: 1px 6px;
3403
+ border-radius: 4px;
3404
+ background: rgba(239, 68, 68, 0.12);
3405
+ border: 1px solid rgba(239, 68, 68, 0.2);
3406
+ color: rgba(239, 68, 68, 0.7);
3407
+ letter-spacing: 0.08em;
3408
+ margin-left: 8px;
3409
+ }
3410
+
3411
+ /* ── Config editor ──────────────────────────────────────────────────── */
3412
+ .config-editor-wrap {
3413
+ display: flex;
3414
+ flex-direction: column;
3415
+ flex: 1;
3416
+ gap: 12px;
3417
+ height: 100%;
3418
+ }
3419
+ .config-editor {
3420
+ flex: 1;
3421
+ min-height: 300px;
3422
+ padding: 14px;
3423
+ background: rgba(0, 0, 0, 0.3);
3424
+ border: 1px solid rgba(255, 255, 255, 0.08);
3425
+ border-radius: 8px;
3426
+ color: var(--text);
3427
+ font-family: var(--font-mono);
3428
+ font-size: 11px;
3429
+ line-height: 1.6;
3430
+ resize: none;
3431
+ outline: none;
3432
+ scrollbar-width: thin;
3433
+ scrollbar-color: rgba(139, 92, 246, 0.3) transparent;
3434
+ tab-size: 2;
3435
+ }
3436
+ .config-editor:focus {
3437
+ border-color: rgba(139, 92, 246, 0.35);
3438
+ }
3439
+ .config-editor-actions {
3440
+ display: flex;
3441
+ align-items: center;
3442
+ justify-content: space-between;
3443
+ gap: 12px;
3444
+ }
3445
+ .config-editor-hint {
3446
+ font-family: var(--font-mono);
3447
+ font-size: 10px;
3448
+ color: rgba(255, 255, 255, 0.3);
3449
+ }
3450
+
3451
+ /* ══════════════════════════════════════════════════════════════════════
3452
+ DEBUG PANEL
3453
+ ══════════════════════════════════════════════════════════════════════ */
3454
+
3455
+ .debug-scroll {
3456
+ padding: 0 !important;
3457
+ }
3458
+
3459
+ .debug-entry-row {
3460
+ display: flex;
3461
+ align-items: baseline;
3462
+ gap: 10px;
3463
+ padding: 5px 16px;
3464
+ font-family: var(--font-mono);
3465
+ font-size: 10px;
3466
+ line-height: 1.5;
3467
+ border-bottom: 1px solid rgba(255, 255, 255, 0.03);
3468
+ transition: background 0.1s;
3469
+ }
3470
+ .debug-entry-row:hover {
3471
+ background: rgba(255, 255, 255, 0.02);
3472
+ }
3473
+
3474
+ .debug-time {
3475
+ color: rgba(255, 255, 255, 0.25);
3476
+ flex-shrink: 0;
3477
+ width: 65px;
3478
+ }
3479
+
3480
+ .debug-type {
3481
+ flex-shrink: 0;
3482
+ width: 60px;
3483
+ font-weight: 600;
3484
+ letter-spacing: 0.04em;
3485
+ }
3486
+ .debug-type--chat { color: var(--accent-cyan); }
3487
+ .debug-type--agent { color: var(--accent-purple); }
3488
+ .debug-type--error { color: #ef4444; }
3489
+ .debug-type--other { color: rgba(255, 255, 255, 0.4); }
3490
+
3491
+ .debug-summary {
3492
+ color: rgba(255, 255, 255, 0.55);
3493
+ overflow: hidden;
3494
+ text-overflow: ellipsis;
3495
+ white-space: nowrap;
3496
+ flex: 1;
3497
+ min-width: 0;
3498
+ }
3499
+
3500
+ /* ══════════════════════════════════════════════════════════════════════
3501
+ LOGS PANEL
3502
+ ══════════════════════════════════════════════════════════════════════ */
3503
+
3504
+ .logs-scroll {
3505
+ padding: 0 !important;
3506
+ }
3507
+
3508
+ .logs-level-filters {
3509
+ display: flex;
3510
+ align-items: center;
3511
+ gap: 4px;
3512
+ }
3513
+
3514
+ .logs-level-chip {
3515
+ display: flex;
3516
+ align-items: center;
3517
+ gap: 3px;
3518
+ padding: 2px 6px;
3519
+ border-radius: 4px;
3520
+ background: rgba(255, 255, 255, 0.03);
3521
+ border: 1px solid rgba(255, 255, 255, 0.06);
3522
+ cursor: pointer;
3523
+ font-family: var(--font-mono);
3524
+ font-size: 9px;
3525
+ font-weight: 600;
3526
+ letter-spacing: 0.06em;
3527
+ transition: all 0.15s;
3528
+ }
3529
+ .logs-level-chip:hover {
3530
+ background: rgba(255, 255, 255, 0.06);
3531
+ border-color: rgba(255, 255, 255, 0.12);
3532
+ }
3533
+ .logs-level-chip input[type="checkbox"] {
3534
+ display: none;
3535
+ }
3536
+ .logs-level-chip:has(input:not(:checked)) {
3537
+ opacity: 0.35;
3538
+ }
3539
+
3540
+ .log-row {
3541
+ display: flex;
3542
+ align-items: baseline;
3543
+ gap: 10px;
3544
+ padding: 3px 16px;
3545
+ font-family: var(--font-mono);
3546
+ font-size: 10px;
3547
+ line-height: 1.5;
3548
+ border-bottom: 1px solid rgba(255, 255, 255, 0.02);
3549
+ }
3550
+ .log-row:hover {
3551
+ background: rgba(255, 255, 255, 0.02);
3552
+ }
3553
+
3554
+ .log-time {
3555
+ color: rgba(255, 255, 255, 0.2);
3556
+ flex-shrink: 0;
3557
+ width: 65px;
3558
+ }
3559
+
3560
+ .log-level {
3561
+ flex-shrink: 0;
3562
+ width: 45px;
3563
+ font-weight: 700;
3564
+ letter-spacing: 0.04em;
3565
+ }
3566
+
3567
+ .log-sub {
3568
+ color: rgba(0, 212, 255, 0.5);
3569
+ flex-shrink: 0;
3570
+ max-width: 120px;
3571
+ overflow: hidden;
3572
+ text-overflow: ellipsis;
3573
+ white-space: nowrap;
3574
+ }
3575
+
3576
+ .log-msg {
3577
+ color: rgba(255, 255, 255, 0.6);
3578
+ overflow: hidden;
3579
+ text-overflow: ellipsis;
3580
+ white-space: nowrap;
3581
+ flex: 1;
3582
+ min-width: 0;
3583
+ }
3584
+
3585
+ /* ══════════════════════════════════════════════════════════════════════
3586
+ CONNECTIONS PANEL
3587
+ ══════════════════════════════════════════════════════════════════════ */
3588
+
3149
3589
  .connections-panel {
3150
3590
  display: flex;
3151
3591
  flex-direction: column;
@@ -989,6 +989,7 @@
989
989
  <script src="js/render.js"></script>
990
990
  <script src="js/symipulse.js"></script>
991
991
  <script src="js/app.js"></script>
992
+ <script src="js/settings.js"></script>
992
993
  <script src="js/menu.js"></script>
993
994
  <script src="js/history.js"></script>
994
995
  <script src="js/connections.js"></script>
@@ -1210,6 +1210,10 @@ gateway.addEventListener("disconnect", () => {
1210
1210
 
1211
1211
  gateway.addEventListener("event", (e) => {
1212
1212
  handleGatewayEvent(e.detail);
1213
+ // Forward to native debug panel if open
1214
+ if (window.__debugPanelCapture) {
1215
+ window.__debugPanelCapture(e.detail?.event ?? "unknown", e.detail?.payload);
1216
+ }
1213
1217
  });
1214
1218
 
1215
1219
  // Start connecting
@@ -108,8 +108,15 @@ function openPageOverlay(name, standardUrl) {
108
108
 
109
109
  function closePageOverlay() {
110
110
  overlayIsOpen = false;
111
+ // Clean up native settings panel if open
112
+ if (window.closeNativeSettings) {
113
+ window.closeNativeSettings();
114
+ }
111
115
  getPageOverlay().classList.remove("open");
112
116
  getPageOverlay().setAttribute("aria-hidden", "true");
117
+ // Restore iframe + popout button for next use
118
+ getPageFrame().style.display = "";
119
+ getPagePopoutBtn().style.display = "";
113
120
  // Delay clearing src so the close animation plays cleanly
114
121
  setTimeout(() => {
115
122
  if (!overlayIsOpen) {
@@ -146,6 +153,13 @@ const PAGE_NAMES = {
146
153
  "/logs": "Logs",
147
154
  };
148
155
 
156
+ // Settings pages rendered natively (no iframe)
157
+ const NATIVE_SETTINGS = {
158
+ "/config": "config",
159
+ "/debug": "debug",
160
+ "/logs": "logs",
161
+ };
162
+
149
163
  document.querySelectorAll(".cmd-item[data-href]").forEach((item) => {
150
164
  item.addEventListener("click", (e) => {
151
165
  e.preventDefault();
@@ -153,12 +167,38 @@ document.querySelectorAll(".cmd-item[data-href]").forEach((item) => {
153
167
 
154
168
  if (href === "#chat") {
155
169
  closeMenu();
170
+ // Close native settings if open
171
+ if (window.closeNativeSettings) {
172
+ window.closeNativeSettings();
173
+ }
156
174
  closePageOverlay();
157
175
  return;
158
176
  }
159
177
 
160
- // Standard UI pages open natively in the page overlay
178
+ // Check if this is a native settings page
161
179
  if (href.includes("127.0.0.1:18789")) {
180
+ let pathname = "/";
181
+ try {
182
+ pathname = new URL(href).pathname;
183
+ } catch {}
184
+
185
+ const nativePage = NATIVE_SETTINGS[pathname];
186
+ if (nativePage && window.openNativeSettings) {
187
+ const pageName = PAGE_NAMES[pathname] ?? "Settings";
188
+ closeMenu();
189
+ // Use the page overlay shell (header with back/title) but native content
190
+ getPageTitle().textContent = pageName.toUpperCase();
191
+ getPagePopoutBtn().style.display = "none";
192
+ getPageFrame().style.display = "none";
193
+ overlayIsOpen = true;
194
+ getPageOverlay().classList.add("open");
195
+ getPageOverlay().setAttribute("aria-hidden", "false");
196
+ document.addEventListener("keydown", onOverlayKey);
197
+ window.openNativeSettings(nativePage);
198
+ return;
199
+ }
200
+
201
+ // Other standard UI pages → open in the page overlay iframe
162
202
  let pageName = item.querySelector(".cmd-item-name")?.textContent ?? "Page";
163
203
  try {
164
204
  const parsed = new URL(href);