@lemoncat7/dsh-partner 1.1.6 → 1.3.9

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 (72) hide show
  1. package/README.md +14 -5
  2. package/lib/agent-runtime.d.ts +42 -3
  3. package/lib/agent-runtime.d.ts.map +1 -1
  4. package/lib/agent-runtime.js +523 -40
  5. package/lib/agent-runtime.js.map +1 -1
  6. package/lib/api.d.ts +2 -0
  7. package/lib/api.d.ts.map +1 -1
  8. package/lib/api.js +29 -2
  9. package/lib/api.js.map +1 -1
  10. package/lib/autonomy.d.ts +2 -7
  11. package/lib/autonomy.d.ts.map +1 -1
  12. package/lib/autonomy.js +40 -28
  13. package/lib/autonomy.js.map +1 -1
  14. package/lib/channels/manager.d.ts +1 -0
  15. package/lib/channels/manager.d.ts.map +1 -1
  16. package/lib/channels/manager.js +11 -3
  17. package/lib/channels/manager.js.map +1 -1
  18. package/lib/client-api.d.ts +43 -0
  19. package/lib/client-api.d.ts.map +1 -1
  20. package/lib/client-api.js.map +1 -1
  21. package/lib/client.d.ts.map +1 -1
  22. package/lib/client.js +461 -20
  23. package/lib/client.js.map +3 -3
  24. package/lib/concern-domain.d.ts +121 -0
  25. package/lib/concern-domain.d.ts.map +1 -0
  26. package/lib/concern-domain.js +182 -0
  27. package/lib/concern-domain.js.map +1 -0
  28. package/lib/concern-notification.d.ts +6 -0
  29. package/lib/concern-notification.d.ts.map +1 -0
  30. package/lib/concern-notification.js +27 -0
  31. package/lib/concern-notification.js.map +1 -0
  32. package/lib/concern-sources.d.ts +10 -0
  33. package/lib/concern-sources.d.ts.map +1 -0
  34. package/lib/concern-sources.js +81 -0
  35. package/lib/concern-sources.js.map +1 -0
  36. package/lib/concern-store.d.ts +41 -0
  37. package/lib/concern-store.d.ts.map +1 -0
  38. package/lib/concern-store.js +527 -0
  39. package/lib/concern-store.js.map +1 -0
  40. package/lib/daily-review.d.ts +3 -1
  41. package/lib/daily-review.d.ts.map +1 -1
  42. package/lib/daily-review.js +8 -2
  43. package/lib/daily-review.js.map +1 -1
  44. package/lib/domain.d.ts +4 -1
  45. package/lib/domain.d.ts.map +1 -1
  46. package/lib/domain.js +23 -0
  47. package/lib/domain.js.map +1 -1
  48. package/lib/heartbeat.d.ts +10 -2
  49. package/lib/heartbeat.d.ts.map +1 -1
  50. package/lib/heartbeat.js +81 -17
  51. package/lib/heartbeat.js.map +1 -1
  52. package/lib/index.d.ts.map +1 -1
  53. package/lib/index.js +33 -5
  54. package/lib/index.js.map +1 -1
  55. package/lib/memory-domain.d.ts +3 -0
  56. package/lib/memory-domain.d.ts.map +1 -1
  57. package/lib/memory-reflection.d.ts +8 -3
  58. package/lib/memory-reflection.d.ts.map +1 -1
  59. package/lib/memory-reflection.js +66 -13
  60. package/lib/memory-reflection.js.map +1 -1
  61. package/lib/memory-store.d.ts +8 -0
  62. package/lib/memory-store.d.ts.map +1 -1
  63. package/lib/memory-store.js +27 -0
  64. package/lib/memory-store.js.map +1 -1
  65. package/lib/store.d.ts.map +1 -1
  66. package/lib/store.js +39 -3
  67. package/lib/store.js.map +1 -1
  68. package/lib/time-format.d.ts +2 -0
  69. package/lib/time-format.d.ts.map +1 -0
  70. package/lib/time-format.js +20 -0
  71. package/lib/time-format.js.map +1 -0
  72. package/package.json +3 -1
package/lib/client.js CHANGED
@@ -1169,14 +1169,15 @@ var client_default = `.dsh-partner-sidebar,
1169
1169
  --partner-pane: var(--xiaohei-plugin-pane-fill, var(--partner-surface));
1170
1170
  --partner-raised: var(--xiaohei-plugin-raised-fill, color-mix(in srgb, var(--dsw-alias-bg-layer-2, #fff) 76%, transparent));
1171
1171
  --partner-control: var(--xiaohei-plugin-control-fill, var(--partner-raised));
1172
- --partner-font-caption: 11px;
1172
+ --partner-font-family: var(--ds-font-family, -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Microsoft YaHei", sans-serif);
1173
+ --partner-font-caption: 12px;
1173
1174
  --partner-font-body: 13px;
1174
1175
  --partner-font-label: 14px;
1175
1176
  --partner-font-title: 18px;
1176
1177
  --partner-font-heading: 22px;
1177
1178
  --partner-font-display: clamp(24px, 2.2vw, 28px);
1178
1179
  color: var(--dsw-alias-label-primary);
1179
- font-family: var(--ds-font-family);
1180
+ font-family: var(--partner-font-family);
1180
1181
  }
1181
1182
 
1182
1183
  .dsh-partner-sidebar,
@@ -1190,7 +1191,10 @@ var client_default = `.dsh-partner-sidebar,
1190
1191
  border-radius: 0;
1191
1192
  appearance: none;
1192
1193
  color: inherit;
1193
- font: inherit;
1194
+ font-family: var(--partner-font-family);
1195
+ font-size: inherit;
1196
+ font-weight: inherit;
1197
+ line-height: inherit;
1194
1198
  letter-spacing: inherit;
1195
1199
  }
1196
1200
 
@@ -1242,7 +1246,7 @@ var client_default = `.dsh-partner-sidebar,
1242
1246
  .dsh-partner-sidebar { box-sizing: border-box; flex: none; margin: 0 8px 8px 2px; padding: 4px 0 7px; border-bottom: 1px solid color-mix(in srgb, var(--dsw-alias-border-l2) 62%, transparent); }
1243
1247
  .dsh-partner-sidebar.is-rail { width: 36px; margin: 0 0 8px; padding: 0; border: 0; }
1244
1248
  .dsh-partner-sidebar-heading { display: flex; align-items: center; justify-content: space-between; height: 32px; padding: 0 4px 0 5px; }
1245
- .dsh-partner-sidebar-title { display: flex; min-width: 0; align-items: center; gap: 5px; height: 28px; padding: 0 5px; border: 0; border-radius: 7px; color: var(--dsw-alias-label-secondary); background: transparent; font: 600 var(--partner-font-body)/1 var(--ds-font-family); cursor: pointer; }
1249
+ .dsh-partner-sidebar-title { display: flex; min-width: 0; align-items: center; gap: 5px; height: 28px; padding: 0 5px; border: 0; border-radius: 7px; color: var(--dsw-alias-label-secondary); background: transparent; font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; }
1246
1250
  .dsh-partner-sidebar-title > span { display: grid; place-items: center; transition: transform .16s ease; }
1247
1251
  .dsh-partner-sidebar-title > span[data-open="false"] { transform: rotate(-90deg); }
1248
1252
  .dsh-partner-sidebar-title:hover,
@@ -1366,7 +1370,7 @@ var client_default = `.dsh-partner-sidebar,
1366
1370
  .dsh-partner-home-channel-copy h3 { margin: 1px 0 0; font-size: var(--partner-font-title); line-height: 1.28; font-weight: 650; letter-spacing: -.025em; }
1367
1371
  .dsh-partner-home-channel-copy p { max-width: 510px; margin: 0; color: var(--dsw-alias-label-secondary); font-size: var(--partner-font-body); line-height: 1.65; }
1368
1372
  .dsh-partner-home-channel-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; margin-top: 7px; }
1369
- .dsh-partner-home-channel-actions button { min-height: 36px; padding: 0 15px; border: 1px solid var(--partner-accent-strong); border-radius: 10px; color: #fff; background: var(--partner-accent-strong); font: 600 var(--partner-font-body)/1 var(--ds-font-family); cursor: pointer; transition: transform .16s ease, background .16s ease; }
1373
+ .dsh-partner-home-channel-actions button { min-height: 36px; padding: 0 15px; border: 1px solid var(--partner-accent-strong); border-radius: 10px; color: #fff; background: var(--partner-accent-strong); font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; transition: transform .16s ease, background .16s ease; }
1370
1374
  .dsh-partner-home-channel-actions button:hover { background: color-mix(in srgb, var(--partner-accent-strong) 88%, #000); transform: translateY(-1px); }
1371
1375
  .dsh-partner-home-channel-actions button:active { transform: translateY(0) scale(.98); }
1372
1376
  .dsh-partner-home-channel-actions span { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }
@@ -1378,7 +1382,7 @@ var client_default = `.dsh-partner-sidebar,
1378
1382
  .dsh-partner-home-details header > div { display: grid; min-width: 0; gap: 3px; }
1379
1383
  .dsh-partner-home-details header small { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }
1380
1384
  .dsh-partner-home-details header strong { overflow: hidden; font-size: var(--partner-font-label); font-weight: 620; text-overflow: ellipsis; white-space: nowrap; }
1381
- .dsh-partner-home-details header button { padding: 5px 7px; border: 0; border-radius: 7px; color: var(--dsw-alias-label-tertiary); background: transparent; font: 560 var(--partner-font-caption)/1 var(--ds-font-family); cursor: pointer; }
1385
+ .dsh-partner-home-details header button { padding: 5px 7px; border: 0; border-radius: 7px; color: var(--dsw-alias-label-tertiary); background: transparent; font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }
1382
1386
  .dsh-partner-home-details header button:hover { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 6%, transparent); }
1383
1387
  .dsh-partner-home-profile blockquote { display: -webkit-box; margin: 17px 2px 0 44px; overflow: hidden; color: var(--dsw-alias-label-secondary); font-size: var(--partner-font-body); line-height: 1.7; -webkit-box-orient: vertical; -webkit-line-clamp: 5; }
1384
1388
  .dsh-partner-home-capability-list { display: flex; flex-wrap: wrap; gap: 6px; margin: 14px 0 0 44px; }
@@ -1404,7 +1408,7 @@ var client_default = `.dsh-partner-sidebar,
1404
1408
  .dsh-partner-field small { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); line-height: 1.35; text-align: right; }
1405
1409
  .dsh-partner-field input,
1406
1410
  .dsh-partner-field textarea,
1407
- .dsh-partner-field select { box-sizing: border-box; width: 100%; min-height: 38px; padding: 8px 10px; border: 1px solid var(--partner-border); border-radius: 10px; outline: none; color: var(--dsw-alias-label-primary); background: var(--partner-control); font: var(--partner-font-label)/1.5 var(--ds-font-family); transition: border-color .15s ease, box-shadow .15s ease, background .15s ease; }
1411
+ .dsh-partner-field select { box-sizing: border-box; width: 100%; min-height: 38px; padding: 8px 10px; border: 1px solid var(--partner-border); border-radius: 10px; outline: none; color: var(--dsw-alias-label-primary); background: var(--partner-control); font: var(--partner-font-label)/1.5 var(--partner-font-family); transition: border-color .15s ease, box-shadow .15s ease, background .15s ease; }
1408
1412
  .dsh-partner-field textarea { resize: vertical; }
1409
1413
  .dsh-partner-field input:focus,
1410
1414
  .dsh-partner-field textarea:focus,
@@ -1413,7 +1417,7 @@ var client_default = `.dsh-partner-sidebar,
1413
1417
  .dsh-partner-form-actions > span { display: inline-flex; align-items: center; gap: 5px; color: var(--partner-accent-strong); font-size: var(--partner-font-body); }
1414
1418
  .dsh-partner-form-actions > button,
1415
1419
  .dsh-partner-state > button,
1416
- .dsh-partner-weixin-connect > button { min-height: 34px; padding: 0 15px; border: 1px solid color-mix(in srgb, var(--partner-accent) 60%, transparent); border-radius: 10px; color: #fff; background: var(--partner-accent-strong); font: 600 var(--partner-font-body)/1 var(--ds-font-family); cursor: pointer; }
1420
+ .dsh-partner-weixin-connect > button { min-height: 34px; padding: 0 15px; border: 1px solid color-mix(in srgb, var(--partner-accent) 60%, transparent); border-radius: 10px; color: #fff; background: var(--partner-accent-strong); font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; }
1417
1421
  .dsh-partner-form-actions > button:hover,
1418
1422
  .dsh-partner-state > button:hover,
1419
1423
  .dsh-partner-weixin-connect > button:hover { background: color-mix(in srgb, var(--partner-accent-strong) 88%, #000); }
@@ -1494,7 +1498,7 @@ var client_default = `.dsh-partner-sidebar,
1494
1498
  .dsh-partner-session-list article > div { display: grid; min-width: 0; flex: 1; gap: 3px; }
1495
1499
  .dsh-partner-session-list strong { font-size: var(--partner-font-body); }
1496
1500
  .dsh-partner-session-list small { overflow: hidden; color: var(--dsw-alias-label-tertiary); font: var(--partner-font-caption)/1.4 ui-monospace, monospace; text-overflow: ellipsis; white-space: nowrap; }
1497
- .dsh-partner-session-list button { flex: none; min-height: 30px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--dsw-alias-label-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--ds-font-family); cursor: pointer; }
1501
+ .dsh-partner-session-list button { flex: none; min-height: 30px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--dsw-alias-label-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }
1498
1502
  .dsh-partner-session-list button:hover { color: var(--partner-accent-strong); border-color: color-mix(in srgb, var(--partner-accent) 24%, var(--partner-border)); }
1499
1503
  .dsh-partner-automation { display: grid; gap: 14px; margin-top: 16px; padding: 16px; border: 1px solid var(--partner-border); border-radius: 14px; background: color-mix(in srgb, var(--partner-raised) 72%, transparent); }
1500
1504
  .dsh-partner-automation-grid { display: grid; grid-template-columns: minmax(480px, .95fr) minmax(430px, 1.05fr); align-items: stretch; gap: 12px; margin-top: 17px; }
@@ -1513,8 +1517,115 @@ var client_default = `.dsh-partner-sidebar,
1513
1517
  .dsh-partner-automation-fields { display: grid; grid-template-columns: minmax(120px, 180px); gap: 10px; }
1514
1518
  .dsh-partner-automation-fields.is-memory-model { grid-template-columns: minmax(110px, .7fr) minmax(130px, 1fr) minmax(150px, 1.25fr); }
1515
1519
  .dsh-partner-automation-fields.is-heartbeat { grid-template-columns: repeat(4, minmax(100px, 1fr)); }
1520
+ .dsh-partner-concern-board { position: relative; display: grid; min-width: 0; overflow: visible; border: 1px solid var(--partner-border); border-radius: 11px; background: color-mix(in srgb, var(--partner-raised) 42%, transparent); }
1521
+ .dsh-partner-concern-board > header { display: flex; min-height: 46px; align-items: center; justify-content: space-between; gap: 14px; padding: 7px 10px 7px 12px; }
1522
+ .dsh-partner-concern-board > header > span { display: flex; min-width: 0; align-items: baseline; gap: 8px; }
1523
+ .dsh-partner-concern-board > header strong { display: flex; align-items: center; gap: 6px; font-size: var(--partner-font-body); font-weight: 640; white-space: nowrap; }
1524
+ .dsh-partner-concern-board > header strong b { display: grid; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; place-items: center; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, transparent); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; }
1525
+ .dsh-partner-concern-board > header p { min-width: 0; margin: 0; overflow: hidden; color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); text-overflow: ellipsis; white-space: nowrap; }
1526
+ .dsh-partner-concern-board > header > button { display: inline-flex; flex: none; height: 30px; align-items: center; gap: 5px; padding: 0 9px; border: 1px solid transparent; border-radius: 8px; color: var(--dsw-alias-label-secondary); background: transparent; font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }
1527
+ .dsh-partner-concern-board > header > button:hover,
1528
+ .dsh-partner-concern-board > header > button[aria-expanded="true"] { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }
1529
+ .dsh-partner-concern-compose { display: grid; gap: 8px; padding: 10px 12px 11px; border-top: 1px solid var(--partner-border); background: color-mix(in srgb, var(--partner-control) 60%, transparent); animation: dsh-partner-reveal .16s ease-out; }
1530
+ .dsh-partner-concern-compose label { display: grid; gap: 6px; }
1531
+ .dsh-partner-concern-compose label > span { color: var(--dsw-alias-label-secondary); font-size: var(--partner-font-caption); font-weight: 600; }
1532
+ .dsh-partner-concern-compose input { width: 100%; height: 36px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--dsw-alias-label-primary); background: var(--partner-raised); font: var(--partner-font-body)/1 var(--partner-font-family); transition: border-color .15s ease, box-shadow .15s ease; }
1533
+ .dsh-partner-concern-compose input:focus-visible { border-color: color-mix(in srgb, var(--partner-accent) 55%, var(--partner-border)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-accent) 9%, transparent); }
1534
+ .dsh-partner-concern-input-wrap { position: relative; min-width: 0; }
1535
+ .dsh-partner-concern-compose-hint { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); font-weight: 400; line-height: 1.45; }
1536
+ .dsh-partner-concern-compose-hint b { color: var(--partner-accent-strong); font-weight: 700; }
1537
+ .dsh-partner-concern-sources {
1538
+ position: absolute;
1539
+ z-index: 40;
1540
+ top: calc(100% + 6px);
1541
+ right: 0;
1542
+ left: 0;
1543
+ display: grid;
1544
+ max-height: 264px;
1545
+ overflow-y: auto;
1546
+ padding: 5px;
1547
+ border: 1px solid color-mix(in srgb, var(--partner-border) 88%, var(--dsw-alias-label-primary) 12%);
1548
+ border-radius: 10px;
1549
+ background: var(--dsw-alias-bg-layer-2, #fff);
1550
+ box-shadow: 0 14px 34px color-mix(in srgb, var(--dsw-alias-label-primary) 15%, transparent);
1551
+ scrollbar-width: thin;
1552
+ }
1553
+ .dsh-partner-concern-sources > p { margin: 0; padding: 14px 12px; color: var(--dsw-alias-label-secondary); font-size: var(--partner-font-caption); line-height: 1.45; }
1554
+ .dsh-partner-concern-sources > button {
1555
+ display: grid;
1556
+ min-height: 46px;
1557
+ grid-template-columns: 28px minmax(0, 1fr);
1558
+ grid-template-rows: auto auto;
1559
+ align-items: center;
1560
+ column-gap: 8px;
1561
+ padding: 6px 8px;
1562
+ border: 1px solid transparent;
1563
+ border-radius: 8px;
1564
+ color: var(--dsw-alias-label-primary);
1565
+ background: transparent;
1566
+ text-align: left;
1567
+ cursor: pointer;
1568
+ }
1569
+ .dsh-partner-concern-sources > button > span { display: grid; grid-row: 1 / 3; width: 28px; height: 28px; place-items: center; border-radius: 8px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, var(--partner-control)); }
1570
+ .dsh-partner-concern-sources > button > strong { min-width: 0; overflow: hidden; font-size: var(--partner-font-body); font-weight: 610; text-overflow: ellipsis; white-space: nowrap; }
1571
+ .dsh-partner-concern-sources > button > small { min-width: 0; overflow: hidden; color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
1572
+ .dsh-partner-concern-sources > button:hover,
1573
+ .dsh-partner-concern-sources > button[aria-selected="true"] { border-color: color-mix(in srgb, var(--partner-accent) 22%, var(--partner-border)); background: color-mix(in srgb, var(--partner-accent) 8%, var(--dsw-alias-bg-layer-2, #fff)); }
1574
+ .dsh-partner-concern-compose > div { display: flex; justify-content: flex-end; gap: 6px; }
1575
+ .dsh-partner-concern-compose button { min-height: 30px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--dsw-alias-label-secondary); background: var(--partner-raised); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }
1576
+ .dsh-partner-concern-compose button.is-primary { border-color: transparent; color: var(--dsw-alias-label-on-accent, #fff); background: var(--partner-accent-strong); }
1577
+ .dsh-partner-concern-list { display: grid; min-height: 0; border-top: 1px solid var(--partner-border); }
1578
+ .dsh-partner-concern-list > article { min-width: 0; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 72%, transparent); background: transparent; transition: background .15s ease; }
1579
+ .dsh-partner-concern-list > article:last-child { border-bottom: 0; }
1580
+ .dsh-partner-concern-list > article:hover,
1581
+ .dsh-partner-concern-list > article[data-expanded="true"] { background: color-mix(in srgb, var(--partner-accent) 4.5%, transparent); }
1582
+ .dsh-partner-concern-row { display: grid; width: 100%; min-height: 49px; grid-template-columns: 76px minmax(0, 1fr) auto 14px; align-items: center; gap: 9px; padding: 6px 11px 6px 12px; border: 0; color: inherit; background: transparent; text-align: left; cursor: pointer; }
1583
+ .dsh-partner-concern-state { display: flex; align-items: center; gap: 7px; color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); white-space: nowrap; }
1584
+ .dsh-partner-concern-state i { width: 6px; height: 6px; border-radius: 50%; background: var(--partner-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-accent) 9%, transparent); }
1585
+ .dsh-partner-concern-copy { display: grid; min-width: 0; gap: 3px; }
1586
+ .dsh-partner-concern-copy strong,
1587
+ .dsh-partner-concern-copy small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1588
+ .dsh-partner-concern-copy strong { font-size: var(--partner-font-body); font-weight: 610; }
1589
+ .dsh-partner-concern-copy small { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }
1590
+ .dsh-partner-concern-time { display: grid; justify-items: end; gap: 2px; color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; line-height: 1.1; white-space: nowrap; }
1591
+ .dsh-partner-concern-time small { font: inherit; }
1592
+ .dsh-partner-concern-time strong { color: var(--dsw-alias-label-secondary); font: 590 var(--partner-font-caption)/1.1 var(--partner-font-family); }
1593
+ .dsh-partner-concern-row > svg { color: var(--dsw-alias-label-tertiary); transition: transform .16s ease, color .16s ease; }
1594
+ .dsh-partner-concern-list > article[data-expanded="true"] .dsh-partner-concern-row > svg { color: var(--partner-accent); transform: rotate(180deg); }
1595
+ .dsh-partner-concern-detail { display: grid; gap: 7px; padding: 0 34px 11px 97px; animation: dsh-partner-reveal .16s ease-out; }
1596
+ .dsh-partner-concern-detail p,
1597
+ .dsh-partner-concern-detail blockquote { margin: 0; color: var(--dsw-alias-label-secondary); font-size: var(--partner-font-caption); line-height: 1.55; }
1598
+ .dsh-partner-concern-detail blockquote { padding-left: 9px; border-left: 2px solid color-mix(in srgb, var(--partner-accent) 40%, transparent); }
1599
+ .dsh-partner-concern-detail > small { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }
1600
+ .dsh-partner-concern-decision { display: grid; min-width: 0; grid-template-columns: auto minmax(0, 1fr); align-items: baseline; gap: 3px 8px; padding: 7px 9px; border: 1px solid var(--partner-border); border-radius: 8px; background: var(--partner-control); font-size: var(--partner-font-caption); }
1601
+ .dsh-partner-concern-decision strong { color: var(--partner-accent-strong); font-weight: 620; white-space: nowrap; }
1602
+ .dsh-partner-concern-decision span { min-width: 0; color: var(--dsw-alias-label-secondary); line-height: 1.45; }
1603
+ .dsh-partner-concern-decision small { grid-column: 1 / -1; color: var(--dsw-alias-label-tertiary); line-height: 1.45; overflow-wrap: anywhere; }
1604
+ .dsh-partner-concern-resources { display: flex; flex-wrap: wrap; gap: 5px; }
1605
+ .dsh-partner-concern-resources span { max-width: 100%; overflow: hidden; padding: 4px 7px; border-radius: 6px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); font-size: var(--partner-font-caption); text-overflow: ellipsis; white-space: nowrap; }
1606
+ .dsh-partner-concern-actions { display: flex; flex-wrap: wrap; gap: 5px; padding-top: 2px; }
1607
+ .dsh-partner-concern-actions button,
1608
+ .dsh-partner-concern-resolved button { min-height: 28px; padding: 0 8px; border: 1px solid var(--partner-border); border-radius: 7px; color: var(--dsw-alias-label-secondary); background: var(--partner-control); font: 540 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }
1609
+ .dsh-partner-concern-actions button:hover,
1610
+ .dsh-partner-concern-resolved button:hover { color: var(--partner-accent-strong); border-color: color-mix(in srgb, var(--partner-accent) 32%, var(--partner-border)); background: color-mix(in srgb, var(--partner-accent) 7%, var(--partner-control)); }
1611
+ .dsh-partner-concern-actions button.is-danger:hover { color: var(--partner-danger); border-color: color-mix(in srgb, var(--partner-danger) 35%, var(--partner-border)); background: color-mix(in srgb, var(--partner-danger) 7%, var(--partner-control)); }
1612
+ .dsh-partner-concern-more { display: flex; justify-content: center; padding: 5px; border-top: 1px solid var(--partner-border); }
1613
+ .dsh-partner-concern-more button { min-height: 26px; padding: 0 9px; border: 0; border-radius: 7px; color: var(--dsw-alias-label-tertiary); background: transparent; font: 540 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }
1614
+ .dsh-partner-concern-more button:hover { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 7%, transparent); }
1615
+ .dsh-partner-concern-empty { margin: 0; padding: 13px 12px; color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); line-height: 1.5; }
1616
+ .dsh-partner-concern-resolved { border-top: 1px solid var(--partner-border); }
1617
+ .dsh-partner-concern-resolved summary { min-height: 34px; padding: 9px 12px; color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); cursor: pointer; list-style: none; }
1618
+ .dsh-partner-concern-resolved summary::-webkit-details-marker { display: none; }
1619
+ .dsh-partner-concern-resolved summary::before { display: inline-block; margin-right: 7px; content: '\\203A'; transition: transform .15s ease; }
1620
+ .dsh-partner-concern-resolved[open] summary::before { transform: rotate(90deg); }
1621
+ .dsh-partner-concern-resolved summary b { margin-left: 4px; color: var(--partner-accent); font-variant-numeric: tabular-nums; }
1622
+ .dsh-partner-concern-resolved > div { display: grid; max-height: 170px; overflow-y: auto; border-top: 1px solid color-mix(in srgb, var(--partner-border) 72%, transparent); }
1623
+ .dsh-partner-concern-resolved article { display: grid; min-height: 38px; grid-template-columns: 22px minmax(0, 1fr) auto; align-items: center; gap: 7px; padding: 4px 10px; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 60%, transparent); }
1624
+ .dsh-partner-concern-resolved article > span { display: grid; width: 20px; height: 20px; border-radius: 7px; place-items: center; color: var(--partner-accent); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }
1625
+ .dsh-partner-concern-resolved article strong { overflow: hidden; font-size: var(--partner-font-caption); font-weight: 560; text-overflow: ellipsis; white-space: nowrap; }
1626
+ @keyframes dsh-partner-reveal { from { opacity: 0; transform: translateY(-3px); } to { opacity: 1; transform: translateY(0); } }
1516
1627
  .dsh-partner-automation-actions { display: flex; justify-content: flex-end; gap: 8px; padding-top: 12px; border-top: 1px solid var(--partner-border); }
1517
- .dsh-partner-automation-actions button, .dsh-partner-section-heading button { min-height: 32px; padding: 0 12px; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--dsw-alias-label-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--ds-font-family); cursor: pointer; }
1628
+ .dsh-partner-automation-actions button, .dsh-partner-section-heading button { min-height: 32px; padding: 0 12px; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--dsw-alias-label-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }
1518
1629
  .dsh-partner-automation-actions button.is-primary { color: var(--partner-raised); border-color: transparent; background: var(--partner-accent-strong); }
1519
1630
  .dsh-partner-automation-actions button:disabled, .dsh-partner-section-heading button:disabled { opacity: .45; cursor: default; }
1520
1631
  .dsh-partner-inline-notice { display: flex; align-items: center; gap: 6px; margin: 12px 0 0; color: var(--partner-accent-strong); font-size: var(--partner-font-caption); }
@@ -1551,7 +1662,7 @@ var client_default = `.dsh-partner-sidebar,
1551
1662
  .dsh-partner-library-list > button > strong { overflow: hidden; font-size: var(--partner-font-body); font-weight: 610; text-overflow: ellipsis; white-space: nowrap; }
1552
1663
  .dsh-partner-library-list > button > p { display: -webkit-box; margin: 0; overflow: hidden; color: var(--dsw-alias-label-secondary); font-size: var(--partner-font-caption); line-height: 1.5; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
1553
1664
  .dsh-partner-library-list > button > small { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }
1554
- .dsh-partner-library-list.is-diary time { color: var(--partner-accent); font: 600 var(--partner-font-caption)/1.2 ui-monospace, monospace; }
1665
+ .dsh-partner-library-list.is-diary time { color: var(--partner-accent); font: 600 var(--partner-font-caption)/1.2 var(--partner-font-family); font-variant-numeric: tabular-nums; }
1555
1666
  .dsh-partner-library-detail { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; padding: 24px clamp(20px, 3vw, 34px) 40px; background: radial-gradient(circle at 92% 4%, color-mix(in srgb, var(--partner-accent) 6%, transparent), transparent 34%); scrollbar-gutter: stable; }
1556
1667
  .dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) { display: grid; align-content: start; gap: 13px; }
1557
1668
  .dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header,
@@ -1568,16 +1679,16 @@ var client_default = `.dsh-partner-sidebar,
1568
1679
  .dsh-partner-library-detail progress::-moz-progress-bar { background: var(--partner-accent); }
1569
1680
  .dsh-partner-library-detail footer small { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }
1570
1681
  .dsh-partner-memory-editor { display: grid; gap: 9px; }
1571
- .dsh-partner-memory-editor input, .dsh-partner-memory-editor textarea { box-sizing: border-box; width: 100%; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--dsw-alias-label-primary); outline: none; background: var(--partner-control); font: 500 var(--partner-font-caption)/1.5 var(--ds-font-family); }
1682
+ .dsh-partner-memory-editor input, .dsh-partner-memory-editor textarea { box-sizing: border-box; width: 100%; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--dsw-alias-label-primary); outline: none; background: var(--partner-control); font: 500 var(--partner-font-caption)/1.5 var(--partner-font-family); }
1572
1683
  .dsh-partner-memory-editor input { min-height: 32px; padding: 0 10px; }
1573
1684
  .dsh-partner-memory-editor textarea { min-height: 76px; padding: 8px 10px; resize: vertical; }
1574
1685
  .dsh-partner-memory-editor input:focus, .dsh-partner-memory-editor textarea:focus { border-color: color-mix(in srgb, var(--partner-accent) 48%, var(--partner-border)); box-shadow: 0 0 0 2px color-mix(in srgb, var(--partner-accent) 8%, transparent); }
1575
1686
  .dsh-partner-memory-editor footer { display: flex; justify-content: flex-end; gap: 7px; }
1576
- .dsh-partner-memory-editor button { min-height: 28px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--dsw-alias-label-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--ds-font-family); cursor: pointer; }
1687
+ .dsh-partner-memory-editor button { min-height: 28px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--dsw-alias-label-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }
1577
1688
  .dsh-partner-memory-editor button.is-primary { border-color: transparent; color: #fff; background: var(--partner-accent-strong); }
1578
1689
  .dsh-partner-diary-detail { display: grid; align-content: start; gap: 20px; }
1579
1690
  .dsh-partner-diary-detail > header { display: grid; gap: 5px; padding-bottom: 16px; border-bottom: 1px solid var(--partner-border); }
1580
- .dsh-partner-diary-detail > header time { color: var(--partner-accent); font: 600 var(--partner-font-caption)/1 ui-monospace, monospace; }
1691
+ .dsh-partner-diary-detail > header time { color: var(--partner-accent); font: 600 var(--partner-font-caption)/1 var(--partner-font-family); font-variant-numeric: tabular-nums; }
1581
1692
  .dsh-partner-diary-detail > header strong { font-size: var(--partner-font-title); letter-spacing: -.02em; }
1582
1693
  .dsh-partner-diary-detail > header small { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }
1583
1694
  .dsh-partner-diary-detail > p { margin: 0; color: var(--dsw-alias-label-secondary); font-size: var(--partner-font-body); line-height: 1.75; text-wrap: pretty; }
@@ -1654,6 +1765,14 @@ var client_default = `.dsh-partner-sidebar,
1654
1765
  .dsh-partner-library-list { max-height: 300px; border-right: 0; border-bottom: 1px solid var(--partner-border); }
1655
1766
  .dsh-partner-library-detail { min-height: 280px; }
1656
1767
  .dsh-partner-review-policy { grid-template-columns: auto minmax(0, 1fr); }
1768
+ .dsh-partner-concern-board > header p { display: none; }
1769
+ .dsh-partner-concern-row { grid-template-columns: minmax(0, 1fr) auto 14px; gap: 7px; }
1770
+ .dsh-partner-concern-state { grid-column: 1; }
1771
+ .dsh-partner-concern-copy { grid-row: 2; grid-column: 1 / -1; padding-left: 13px; }
1772
+ .dsh-partner-concern-time { grid-row: 1; grid-column: 2; }
1773
+ .dsh-partner-concern-row > svg { grid-row: 1; grid-column: 3; }
1774
+ .dsh-partner-concern-detail { padding: 0 12px 11px 25px; }
1775
+ .dsh-partner-concern-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
1657
1776
  .dsh-partner-review-policy > label, .dsh-partner-review-policy > button:last-child { grid-column: span 1; }
1658
1777
  .dsh-partner-graph-browser { grid-template-columns: 1fr; height: auto; }
1659
1778
  .dsh-partner-graph-index { max-height: 280px; border-right: 0; border-bottom: 1px solid var(--partner-border); }
@@ -1724,6 +1843,23 @@ function useWorkspaceTopAnchor(ref) {
1724
1843
  }, [ref]);
1725
1844
  }
1726
1845
 
1846
+ // src/time-format.ts
1847
+ function futureTime(value, now = Date.now()) {
1848
+ const minutes = Math.ceil((value - now) / 6e4);
1849
+ if (minutes <= 0) return "\u5373\u5C06\u68C0\u67E5";
1850
+ if (minutes < 60) return `${minutes} \u5206\u949F\u540E`;
1851
+ const hours = Math.ceil(minutes / 60);
1852
+ if (hours < 24) return `${hours} \u5C0F\u65F6\u540E`;
1853
+ const days = Math.ceil(hours / 24);
1854
+ if (days <= 7) return `${days} \u5929\u540E`;
1855
+ const date = new Date(value);
1856
+ const month = String(date.getMonth() + 1).padStart(2, "0");
1857
+ const day = String(date.getDate()).padStart(2, "0");
1858
+ const hour = String(date.getHours()).padStart(2, "0");
1859
+ const minute = String(date.getMinutes()).padStart(2, "0");
1860
+ return `${month}/${day} ${hour}:${minute}`;
1861
+ }
1862
+
1727
1863
  // src/client.tsx
1728
1864
  var import_jsx_runtime = require("react/jsx-runtime");
1729
1865
  var PLUGIN_ID = "@lemoncat7/dsh-partner";
@@ -2308,6 +2444,8 @@ function MemoryPanel({ companion, snapshot, openSession, renewSession, onChanged
2308
2444
  const [automation, setAutomation] = (0, import_react3.useState)(() => structuredClone(companion.automation));
2309
2445
  const [memories, setMemories] = (0, import_react3.useState)([]);
2310
2446
  const [reflections, setReflections] = (0, import_react3.useState)([]);
2447
+ const [concernActivity, setConcernActivity] = (0, import_react3.useState)({ concerns: [], observations: [] });
2448
+ const [newConcern, setNewConcern] = (0, import_react3.useState)("");
2311
2449
  const [graph, setGraph] = (0, import_react3.useState)({ memories: [], relations: [] });
2312
2450
  const [editing, setEditing] = (0, import_react3.useState)();
2313
2451
  const [busy, setBusy] = (0, import_react3.useState)(false);
@@ -2315,10 +2453,11 @@ function MemoryPanel({ companion, snapshot, openSession, renewSession, onChanged
2315
2453
  const [error, setError] = (0, import_react3.useState)();
2316
2454
  const [modelCatalog, setModelCatalog] = (0, import_react3.useState)();
2317
2455
  const loadMemory = (0, import_react3.useCallback)(async () => {
2318
- const [result, relations] = await Promise.all([api(`/companions/${companion.id}/memory`), api(`/companions/${companion.id}/memory/graph`)]);
2456
+ const [result, relations, activity] = await Promise.all([api(`/companions/${companion.id}/memory`), api(`/companions/${companion.id}/memory/graph`), api(`/companions/${companion.id}/concerns`)]);
2319
2457
  setMemories(result.memories);
2320
2458
  setReflections(result.reflections);
2321
2459
  setGraph(relations);
2460
+ setConcernActivity(activity);
2322
2461
  }, [companion.id]);
2323
2462
  (0, import_react3.useEffect)(() => {
2324
2463
  setAutomation(structuredClone(companion.automation));
@@ -2344,12 +2483,15 @@ function MemoryPanel({ companion, snapshot, openSession, renewSession, onChanged
2344
2483
  setBusy(false);
2345
2484
  }
2346
2485
  };
2347
- const trigger = async () => {
2486
+ const trigger = async (concernId) => {
2348
2487
  setBusy(true);
2349
2488
  setError(void 0);
2350
2489
  setNotice(void 0);
2351
2490
  try {
2352
- const result = await api(`/companions/${companion.id}/heartbeat/trigger`, { method: "POST" });
2491
+ const result = await api(`/companions/${companion.id}/heartbeat/trigger`, {
2492
+ method: "POST",
2493
+ body: JSON.stringify(concernId ? { concernId } : {})
2494
+ });
2353
2495
  setNotice(result.sent ? "\u5FC3\u8DF3\u5DF2\u5B8C\u6210\u5E76\u53D1\u9001\u5FAE\u4FE1\u63D0\u9192" : result.reason ?? "\u5FC3\u8DF3\u68C0\u67E5\u5B8C\u6210");
2354
2496
  await Promise.all([onChanged(), loadMemory()]);
2355
2497
  } catch (reason) {
@@ -2401,6 +2543,37 @@ function MemoryPanel({ companion, snapshot, openSession, renewSession, onChanged
2401
2543
  setBusy(false);
2402
2544
  }
2403
2545
  };
2546
+ const addConcern = async () => {
2547
+ const subject = newConcern.trim();
2548
+ if (!subject) return;
2549
+ setBusy(true);
2550
+ setError(void 0);
2551
+ setNotice(void 0);
2552
+ try {
2553
+ await api(`/companions/${companion.id}/concerns`, { method: "POST", body: JSON.stringify({ subject }) });
2554
+ setNewConcern("");
2555
+ setNotice("\u4F19\u4F34\u4F1A\u7EE7\u7EED\u7559\u610F\u8FD9\u4EF6\u4E8B");
2556
+ await loadMemory();
2557
+ } catch (reason) {
2558
+ setError(message(reason));
2559
+ } finally {
2560
+ setBusy(false);
2561
+ }
2562
+ };
2563
+ const actConcern = async (item, action) => {
2564
+ setBusy(true);
2565
+ setError(void 0);
2566
+ setNotice(void 0);
2567
+ try {
2568
+ await api(`/companions/${companion.id}/concerns/${encodeURIComponent(item.id)}/action`, { method: "POST", body: JSON.stringify({ action }) });
2569
+ setNotice(action === "ignore" ? "\u4F19\u4F34\u4E0D\u518D\u5173\u6CE8\u8FD9\u4EF6\u4E8B" : action === "resolve" ? "\u5DF2\u6807\u8BB0\u4E3A\u89E3\u51B3" : action === "prioritize" ? "\u5DF2\u63D0\u9AD8\u5173\u6CE8" : "\u4F1A\u7EE7\u7EED\u7559\u610F");
2570
+ await loadMemory();
2571
+ } catch (reason) {
2572
+ setError(message(reason));
2573
+ } finally {
2574
+ setBusy(false);
2575
+ }
2576
+ };
2404
2577
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsh-partner-form is-memory", children: [
2405
2578
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { eyebrow: "CONTINUITY", title: "\u4F1A\u8BDD\u8BB0\u5FC6", detail: "\u8FD9\u91CC\u5C55\u793A\u6E20\u9053\u4F1A\u8BDD\u8FB9\u754C\u3002\u77E5\u8BC6\u5E93\u4ECD\u7531\u77E5\u8BC6\u5E93\u63D2\u4EF6\u7BA1\u7406\uFF0C\u4F19\u4F34\u4E0D\u4F1A\u628A\u4E0D\u540C\u5FAE\u4FE1\u8054\u7CFB\u4EBA\u7684\u539F\u59CB\u4E0A\u4E0B\u6587\u6DF7\u5728\u4E00\u8D77\u3002" }),
2406
2579
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsh-partner-metrics", children: [
@@ -2474,8 +2647,8 @@ function MemoryPanel({ companion, snapshot, openSession, renewSession, onChanged
2474
2647
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "dsh-partner-automation", children: [
2475
2648
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { children: [
2476
2649
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
2477
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "\u4E3B\u52A8\u5DE1\u5BDF" }),
2478
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("small", { children: "\u5468\u671F\u5524\u9192\u540E\u5728\u6709\u9650\u9884\u7B97\u5185\u53D1\u73B0\u5E76\u6838\u5B9E\u591A\u4E2A\u7EBF\u7D22\uFF1B\u53EA\u6709\u503C\u5F97\u544A\u8BC9\u4F60\u7684\u5185\u5BB9\u624D\u4F1A\u53D1\u9001\u3002" })
2650
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: "\u6301\u7EED\u611F\u77E5" }),
2651
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("small", { children: "\u4F19\u4F34\u53EA\u89C2\u5BDF\u5C1A\u672A\u95ED\u73AF\u7684\u4E8B\u60C5\u662F\u5426\u51FA\u73B0\u65B0\u53D8\u5316\uFF0C\u5E76\u7531\u514B\u5236\u7684\u6253\u6270\u7B56\u7565\u51B3\u5B9A\u4F55\u65F6\u544A\u8BC9\u4F60\u3002" })
2479
2652
  ] }),
2480
2653
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", className: "dsh-partner-switch", "data-on": automation.heartbeat.enabled, "aria-label": "\u542F\u7528\u4F19\u4F34\u5FC3\u8DF3", onClick: () => setAutomation((current) => ({ ...current, heartbeat: { ...current.heartbeat, enabled: !current.heartbeat.enabled } })), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("i", {}) })
2481
2654
  ] }),
@@ -2499,11 +2672,18 @@ function MemoryPanel({ companion, snapshot, openSession, renewSession, onChanged
2499
2672
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: 8, children: "8 \u6B21" })
2500
2673
  ] }) })
2501
2674
  ] }),
2675
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConcernBoard, { companionId: companion.id, activity: concernActivity, value: newConcern, busy, onValue: setNewConcern, onAdd: () => {
2676
+ void addConcern();
2677
+ }, onCheck: (item) => {
2678
+ void trigger(item.id);
2679
+ }, onAct: (item, action) => {
2680
+ void actConcern(item, action);
2681
+ } }),
2502
2682
  heartbeat?.lastError && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "dsh-partner-inline-error", children: heartbeat.lastError }),
2503
2683
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsh-partner-automation-actions", children: [
2504
2684
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", disabled: busy || sessions.length === 0, onClick: () => {
2505
2685
  void trigger();
2506
- }, children: "\u7ACB\u5373\u68C0\u67E5\u4E00\u6B21" }),
2686
+ }, children: "\u68C0\u67E5\u5230\u671F\u9879" }),
2507
2687
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", className: "is-primary", disabled: busy, onClick: () => {
2508
2688
  void save();
2509
2689
  }, children: busy ? "\u6B63\u5728\u5904\u7406\u2026" : "\u4FDD\u5B58\u8BBE\u7F6E" })
@@ -2543,6 +2723,255 @@ function MemoryPanel({ companion, snapshot, openSession, renewSession, onChanged
2543
2723
  ] })
2544
2724
  ] });
2545
2725
  }
2726
+ function ConcernBoard({ companionId, activity, value, busy, onValue, onAdd, onCheck, onAct }) {
2727
+ const visible = activity.concerns.filter((item) => item.state !== "archived");
2728
+ const active = visible.filter((item) => item.state !== "resolved");
2729
+ const resolved = visible.filter((item) => item.state === "resolved");
2730
+ const latest = new Map([...activity.observations].reverse().map((item) => [item.concernId, item]));
2731
+ const [composing, setComposing] = (0, import_react3.useState)(false);
2732
+ const [expandedId, setExpandedId] = (0, import_react3.useState)();
2733
+ const [visibleCount, setVisibleCount] = (0, import_react3.useState)(5);
2734
+ const [mention, setMention] = (0, import_react3.useState)();
2735
+ const [sources, setSources] = (0, import_react3.useState)([]);
2736
+ const [sourcesLoading, setSourcesLoading] = (0, import_react3.useState)(false);
2737
+ const [sourceError, setSourceError] = (0, import_react3.useState)();
2738
+ const [activeSource, setActiveSource] = (0, import_react3.useState)(0);
2739
+ const inputRef = (0, import_react3.useRef)(null);
2740
+ const listboxId = (0, import_react3.useId)();
2741
+ const shown = active.slice(0, visibleCount);
2742
+ const suggestionsOpen = composing && mention !== void 0;
2743
+ (0, import_react3.useEffect)(() => {
2744
+ if (!suggestionsOpen || mention === void 0) {
2745
+ setSources([]);
2746
+ setSourcesLoading(false);
2747
+ setSourceError(void 0);
2748
+ return;
2749
+ }
2750
+ const controller = new AbortController();
2751
+ const timer = window.setTimeout(() => {
2752
+ setSourcesLoading(true);
2753
+ setSourceError(void 0);
2754
+ const params = new URLSearchParams({ q: mention.query });
2755
+ void api(`/companions/${encodeURIComponent(companionId)}/concern-sources?${params}`).then((result) => {
2756
+ if (!controller.signal.aborted) {
2757
+ setSources(result.items);
2758
+ setActiveSource(0);
2759
+ }
2760
+ }).catch((reason) => {
2761
+ if (!controller.signal.aborted) {
2762
+ setSources([]);
2763
+ setSourceError(message(reason));
2764
+ }
2765
+ }).finally(() => {
2766
+ if (!controller.signal.aborted) setSourcesLoading(false);
2767
+ });
2768
+ }, 150);
2769
+ return () => {
2770
+ window.clearTimeout(timer);
2771
+ controller.abort();
2772
+ };
2773
+ }, [companionId, mention?.query, suggestionsOpen]);
2774
+ const submit = (event) => {
2775
+ event.preventDefault();
2776
+ onAdd();
2777
+ setComposing(false);
2778
+ setMention(void 0);
2779
+ };
2780
+ const chooseSource = (source) => {
2781
+ if (mention === void 0) return;
2782
+ const next = `${value.slice(0, mention.start)}${source.token} ${value.slice(mention.end)}`;
2783
+ const cursor = mention.start + source.token.length + 1;
2784
+ onValue(next);
2785
+ setMention(void 0);
2786
+ setSources([]);
2787
+ window.requestAnimationFrame(() => {
2788
+ inputRef.current?.focus();
2789
+ inputRef.current?.setSelectionRange(cursor, cursor);
2790
+ });
2791
+ };
2792
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "dsh-partner-concern-board", "aria-labelledby": "partner-concerns-title", children: [
2793
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { children: [
2794
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
2795
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("strong", { id: "partner-concerns-title", children: [
2796
+ "\u4F19\u4F34\u5728\u610F\u7684\u4E8B ",
2797
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("b", { children: active.length })
2798
+ ] }),
2799
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "\u5C1A\u672A\u95ED\u73AF\u3001\u503C\u5F97\u7EE7\u7EED\u7559\u610F\u7684\u4E8B\u60C5" })
2800
+ ] }),
2801
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", "aria-expanded": composing, onClick: () => setComposing((current) => !current), children: [
2802
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.IconPlusOutline16, { size: 14 }),
2803
+ "\u4EA4\u4EE3\u4E00\u4EF6\u4E8B"
2804
+ ] })
2805
+ ] }),
2806
+ composing && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("form", { className: "dsh-partner-concern-compose", onSubmit: submit, children: [
2807
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
2808
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\u9700\u8981\u7559\u610F\u7684\u4E8B" }),
2809
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsh-partner-concern-input-wrap", children: [
2810
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2811
+ "input",
2812
+ {
2813
+ ref: inputRef,
2814
+ autoFocus: true,
2815
+ value,
2816
+ maxLength: 300,
2817
+ placeholder: "\u8F93\u5165 @ \u9009\u62E9\u6587\u4EF6\u6216\u77E5\u8BC6\u6587\u6863",
2818
+ role: "combobox",
2819
+ "aria-autocomplete": "list",
2820
+ "aria-expanded": suggestionsOpen,
2821
+ "aria-controls": suggestionsOpen ? listboxId : void 0,
2822
+ "aria-activedescendant": suggestionsOpen && sources[activeSource] ? `${listboxId}-option-${activeSource}` : void 0,
2823
+ onChange: (event) => {
2824
+ onValue(event.target.value);
2825
+ setMention(activeMention(event.target.value, event.target.selectionStart ?? event.target.value.length));
2826
+ },
2827
+ onClick: (event) => setMention(activeMention(event.currentTarget.value, event.currentTarget.selectionStart ?? event.currentTarget.value.length)),
2828
+ onKeyDown: (event) => {
2829
+ if (!suggestionsOpen) return;
2830
+ if (event.key === "ArrowDown") {
2831
+ event.preventDefault();
2832
+ setActiveSource((index) => sources.length === 0 ? 0 : (index + 1) % sources.length);
2833
+ } else if (event.key === "ArrowUp") {
2834
+ event.preventDefault();
2835
+ setActiveSource((index) => sources.length === 0 ? 0 : (index - 1 + sources.length) % sources.length);
2836
+ } else if (event.key === "Enter" && sources[activeSource]) {
2837
+ event.preventDefault();
2838
+ chooseSource(sources[activeSource]);
2839
+ } else if (event.key === "Escape") {
2840
+ event.preventDefault();
2841
+ setMention(void 0);
2842
+ }
2843
+ }
2844
+ }
2845
+ ),
2846
+ suggestionsOpen && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: listboxId, className: "dsh-partner-concern-sources", role: "listbox", "aria-label": "\u53EF\u5F15\u7528\u7684\u6587\u4EF6\u4E0E\u77E5\u8BC6\u6587\u6863", children: sourcesLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { role: "status", children: "\u6B63\u5728\u67E5\u627E\u53EF\u5F15\u7528\u5185\u5BB9\u2026" }) : sourceError ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { role: "status", children: [
2847
+ "\u5019\u9009\u52A0\u8F7D\u5931\u8D25\uFF1A",
2848
+ sourceError
2849
+ ] }) : sources.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { role: "status", children: "\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u6587\u4EF6\u6216\u5DF2\u6302\u8F7D\u77E5\u8BC6\u6587\u6863" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: sources.map((source, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
2850
+ "button",
2851
+ {
2852
+ type: "button",
2853
+ role: "option",
2854
+ id: `${listboxId}-option-${index}`,
2855
+ "aria-selected": index === activeSource,
2856
+ "data-kind": source.kind,
2857
+ onMouseDown: (event) => event.preventDefault(),
2858
+ onMouseEnter: () => setActiveSource(index),
2859
+ onClick: () => chooseSource(source),
2860
+ children: [
2861
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: source.kind === "file" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.IconDataOutline16, { size: 15 }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.IconLinkOutline16, { size: 15 }) }),
2862
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: source.label }),
2863
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("small", { children: source.detail })
2864
+ ]
2865
+ },
2866
+ `${source.kind}:${source.token}`
2867
+ )) }) })
2868
+ ] }),
2869
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("small", { className: "dsh-partner-concern-compose-hint", children: [
2870
+ "\u8F93\u5165 ",
2871
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("b", { children: "@" }),
2872
+ " \u4F1A\u5217\u51FA\u5F53\u524D\u4F1A\u8BDD\u6587\u4EF6\u548C\u5DF2\u6302\u8F7D\u7684\u77E5\u8BC6\u6587\u6863\uFF0C\u4E5F\u53EF\u4EE5\u7EE7\u7EED\u8F93\u5165\u5173\u952E\u8BCD\u7B5B\u9009\u3002"
2873
+ ] })
2874
+ ] }),
2875
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
2876
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: () => {
2877
+ setComposing(false);
2878
+ setMention(void 0);
2879
+ onValue("");
2880
+ }, children: "\u53D6\u6D88" }),
2881
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "submit", className: "is-primary", disabled: busy || !value.trim(), children: "\u8BA9\u4F19\u4F34\u8BB0\u7740" })
2882
+ ] })
2883
+ ] }),
2884
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsh-partner-concern-list", role: "list", children: active.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "dsh-partner-concern-empty", children: "\u6700\u8FD1\u6CA1\u6709\u672A\u95ED\u73AF\u7684\u4E8B\u3002\u4F60\u4E5F\u53EF\u4EE5\u76F4\u63A5\u5BF9\u4F19\u4F34\u8BF4\u201C\u8FD9\u4E2A\u5E2E\u6211\u7559\u610F\u201D\u3002" }) : shown.map((item) => {
2885
+ const observation = latest.get(item.id);
2886
+ const expanded = expandedId === item.id;
2887
+ const status = observation ? concernObservationStatus(observation) : item.state === "active" ? "\u6B63\u5728\u7559\u610F" : "\u6682\u65F6\u8BB0\u7740";
2888
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("article", { role: "listitem", "data-state": item.state, "data-expanded": expanded, children: [
2889
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", className: "dsh-partner-concern-row", "aria-expanded": expanded, onClick: () => setExpandedId((current) => current === item.id ? void 0 : item.id), children: [
2890
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "dsh-partner-concern-state", children: [
2891
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("i", {}),
2892
+ status
2893
+ ] }),
2894
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "dsh-partner-concern-copy", children: [
2895
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: item.subject }),
2896
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("small", { children: observation ? observation.event : item.reason })
2897
+ ] }),
2898
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "dsh-partner-concern-time", title: `\u8BA1\u5212\u4E8E ${new Date(item.nextCheckAt).toLocaleString()} \u518D\u6B21\u7559\u610F`, children: [
2899
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("small", { children: "\u4E0B\u6B21\u7559\u610F" }),
2900
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: futureTime(item.nextCheckAt) })
2901
+ ] }),
2902
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.IconChevronDownOutline14, { size: 14 })
2903
+ ] }),
2904
+ expanded && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsh-partner-concern-detail", children: [
2905
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: item.reason }),
2906
+ observation && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
2907
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("blockquote", { children: observation.event }),
2908
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsh-partner-concern-decision", "data-decision": observation.decision, children: [
2909
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: concernObservationStatus(observation) }),
2910
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: observation.decisionReason || concernObservationExplanation(observation) }),
2911
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("small", { children: [
2912
+ "\u6253\u6270\u5206\u6570 ",
2913
+ Math.round(observation.interruptScore * 100),
2914
+ observation.notificationRuleEffect !== "auto" && observation.notificationRuleReason ? ` \xB7 \u77E5\u8BC6\u89C4\u5219\uFF1A${observation.notificationRuleReason}` : ""
2915
+ ] })
2916
+ ] })
2917
+ ] }),
2918
+ item.resources.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsh-partner-concern-resources", children: item.resources.map((resource) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
2919
+ resource.kind === "file" ? "\u6587\u4EF6" : "\u77E5\u8BC6",
2920
+ " \xB7 ",
2921
+ resource.label
2922
+ ] }, `${resource.kind}:${resource.locator}`)) }),
2923
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("small", { children: [
2924
+ item.origin === "explicit" ? "\u4F60\u660E\u786E\u4EA4\u4EE3" : "\u4F19\u4F34\u4ECE\u5BF9\u8BDD\u4E2D\u6CE8\u610F\u5230",
2925
+ " \xB7 ",
2926
+ watchKindLabel(item.watchKind)
2927
+ ] }),
2928
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsh-partner-concern-actions", "aria-label": `${item.subject} \u7684\u64CD\u4F5C`, children: [
2929
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", disabled: busy, onClick: () => onCheck(item), children: "\u7ACB\u5373\u68C0\u67E5\u8FD9\u6761" }),
2930
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", disabled: busy, onClick: () => onAct(item, "watch"), children: "\u7EE7\u7EED\u7559\u610F" }),
2931
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", disabled: busy, onClick: () => onAct(item, "prioritize"), children: "\u63D0\u9AD8\u5173\u6CE8" }),
2932
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", disabled: busy, onClick: () => onAct(item, "resolve"), children: "\u5DF2\u7ECF\u89E3\u51B3" }),
2933
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", className: "is-danger", disabled: busy, onClick: () => onAct(item, "ignore"), children: "\u522B\u7BA1\u8FD9\u4E2A" })
2934
+ ] })
2935
+ ] })
2936
+ ] }, item.id);
2937
+ }) }),
2938
+ (active.length > shown.length || visibleCount > 5) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsh-partner-concern-more", children: active.length > shown.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", onClick: () => setVisibleCount((count) => Math.min(active.length, count + 20)), children: [
2939
+ "\u518D\u663E\u793A ",
2940
+ Math.min(20, active.length - shown.length),
2941
+ " \u6761"
2942
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", onClick: () => setVisibleCount(5), children: "\u6536\u8D77\u5217\u8868" }) }),
2943
+ resolved.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("details", { className: "dsh-partner-concern-resolved", children: [
2944
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("summary", { children: [
2945
+ "\u5DF2\u7ECF\u89E3\u51B3 ",
2946
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("b", { children: resolved.length })
2947
+ ] }),
2948
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: resolved.slice(0, 30).map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("article", { children: [
2949
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.IconCheckOutline14, { size: 13 }) }),
2950
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: item.subject }),
2951
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", disabled: busy, onClick: () => onAct(item, "watch"), children: "\u91CD\u65B0\u7559\u610F" })
2952
+ ] }, item.id)) })
2953
+ ] })
2954
+ ] });
2955
+ }
2956
+ function activeMention(value, cursor) {
2957
+ const prefix = value.slice(0, cursor);
2958
+ const start = prefix.lastIndexOf("@");
2959
+ if (start < 0 || start > 0 && !/\s/u.test(prefix[start - 1] ?? "")) return void 0;
2960
+ const fragment = prefix.slice(start + 1);
2961
+ if (fragment.startsWith("\u77E5\u8BC6\u5E93[")) {
2962
+ if (fragment.includes("]")) return void 0;
2963
+ return { start, end: cursor, query: fragment.slice(4) };
2964
+ }
2965
+ if (fragment.startsWith('"')) {
2966
+ if (fragment.slice(1).includes('"')) return void 0;
2967
+ return { start, end: cursor, query: fragment.slice(1) };
2968
+ }
2969
+ if (/\s/u.test(fragment)) return void 0;
2970
+ return { start, end: cursor, query: fragment };
2971
+ }
2972
+ function watchKindLabel(value) {
2973
+ return value === "knowledge" ? "\u77E5\u8BC6\u5E93\u53D8\u5316" : value === "workspace" ? "\u9879\u76EE\u53D8\u5316" : value === "web" ? "\u5916\u90E8\u53D8\u5316" : "\u6309\u4E8B\u60C5\u5224\u65AD\u6765\u6E90";
2974
+ }
2546
2975
  var MEMORY_KINDS = ["all", "profile", "preference", "task", "event", "relationship", "emotion"];
2547
2976
  function MemoryLibrary({ memories, reflections, graph, editing, busy, setEditing, save, remove }) {
2548
2977
  const activeMemories = (0, import_react3.useMemo)(() => memories.filter((item) => item.status === "active"), [memories]);
@@ -2773,6 +3202,18 @@ function relativeTime(value) {
2773
3202
  const minutes = Math.floor((Date.now() - value) / 6e4);
2774
3203
  return minutes < 1 ? "\u521A\u521A" : minutes < 60 ? `${minutes} \u5206\u949F\u524D` : minutes < 1440 ? `${Math.floor(minutes / 60)} \u5C0F\u65F6\u524D` : `${Math.floor(minutes / 1440)} \u5929\u524D`;
2775
3204
  }
3205
+ function concernObservationStatus(item) {
3206
+ if (item.decision === "notify") return item.mentionedAt === void 0 ? "\u5F85\u63D0\u9192" : "\u5DF2\u63D0\u9192";
3207
+ if (item.decision === "feed") return "\u4F19\u4F34\u52A8\u6001";
3208
+ if (item.decision === "defer") return item.mentionedAt === void 0 ? "\u5F85\u987A\u5E26\u63D0" : "\u5DF2\u987A\u5E26\u63D0";
3209
+ return "\u9759\u9ED8\u8BB0\u4E0B";
3210
+ }
3211
+ function concernObservationExplanation(item) {
3212
+ if (item.decision === "notify") return item.mentionedAt === void 0 ? "\u8FBE\u5230\u4E3B\u52A8\u63D0\u9192\u6761\u4EF6\uFF0C\u7B49\u5F85\u6E20\u9053\u6295\u9012" : "\u5DF2\u7ECF\u901A\u8FC7\u6279\u51C6\u7684\u6E20\u9053\u4E3B\u52A8\u63D0\u9192";
3213
+ if (item.decision === "feed") return "\u53EA\u663E\u793A\u5728\u4F19\u4F34\u52A8\u6001\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u8F6C\u6210\u4E3B\u52A8\u63D0\u9192";
3214
+ if (item.decision === "defer") return item.mentionedAt === void 0 ? "\u4E0B\u6B21\u51FA\u73B0\u76F8\u5173\u5BF9\u8BDD\u65F6\u987A\u5E26\u63D0\u53CA" : "\u5DF2\u7ECF\u5728\u76F8\u5173\u5BF9\u8BDD\u4E2D\u987A\u5E26\u63D0\u53CA";
3215
+ return "\u4EC5\u4FDD\u7559\u4E3A\u89C2\u5BDF\u8BB0\u5F55\uFF0C\u4E0D\u6253\u6270\u4F60";
3216
+ }
2776
3217
  function memoryKind(value) {
2777
3218
  return { profile: "\u753B\u50CF", preference: "\u504F\u597D", task: "\u4EFB\u52A1", event: "\u4E8B\u4EF6", relationship: "\u5173\u7CFB", emotion: "\u60C5\u7EEA\u4FE1\u53F7" }[value];
2778
3219
  }