@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.
- package/README.md +14 -5
- package/lib/agent-runtime.d.ts +42 -3
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +523 -40
- package/lib/agent-runtime.js.map +1 -1
- package/lib/api.d.ts +2 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +29 -2
- package/lib/api.js.map +1 -1
- package/lib/autonomy.d.ts +2 -7
- package/lib/autonomy.d.ts.map +1 -1
- package/lib/autonomy.js +40 -28
- package/lib/autonomy.js.map +1 -1
- package/lib/channels/manager.d.ts +1 -0
- package/lib/channels/manager.d.ts.map +1 -1
- package/lib/channels/manager.js +11 -3
- package/lib/channels/manager.js.map +1 -1
- package/lib/client-api.d.ts +43 -0
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client-api.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +461 -20
- package/lib/client.js.map +3 -3
- package/lib/concern-domain.d.ts +121 -0
- package/lib/concern-domain.d.ts.map +1 -0
- package/lib/concern-domain.js +182 -0
- package/lib/concern-domain.js.map +1 -0
- package/lib/concern-notification.d.ts +6 -0
- package/lib/concern-notification.d.ts.map +1 -0
- package/lib/concern-notification.js +27 -0
- package/lib/concern-notification.js.map +1 -0
- package/lib/concern-sources.d.ts +10 -0
- package/lib/concern-sources.d.ts.map +1 -0
- package/lib/concern-sources.js +81 -0
- package/lib/concern-sources.js.map +1 -0
- package/lib/concern-store.d.ts +41 -0
- package/lib/concern-store.d.ts.map +1 -0
- package/lib/concern-store.js +527 -0
- package/lib/concern-store.js.map +1 -0
- package/lib/daily-review.d.ts +3 -1
- package/lib/daily-review.d.ts.map +1 -1
- package/lib/daily-review.js +8 -2
- package/lib/daily-review.js.map +1 -1
- package/lib/domain.d.ts +4 -1
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js +23 -0
- package/lib/domain.js.map +1 -1
- package/lib/heartbeat.d.ts +10 -2
- package/lib/heartbeat.d.ts.map +1 -1
- package/lib/heartbeat.js +81 -17
- package/lib/heartbeat.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +33 -5
- package/lib/index.js.map +1 -1
- package/lib/memory-domain.d.ts +3 -0
- package/lib/memory-domain.d.ts.map +1 -1
- package/lib/memory-reflection.d.ts +8 -3
- package/lib/memory-reflection.d.ts.map +1 -1
- package/lib/memory-reflection.js +66 -13
- package/lib/memory-reflection.js.map +1 -1
- package/lib/memory-store.d.ts +8 -0
- package/lib/memory-store.d.ts.map +1 -1
- package/lib/memory-store.js +27 -0
- package/lib/memory-store.js.map +1 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +39 -3
- package/lib/store.js.map +1 -1
- package/lib/time-format.d.ts +2 -0
- package/lib/time-format.d.ts.map +1 -0
- package/lib/time-format.js +20 -0
- package/lib/time-format.js.map +1 -0
- 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-
|
|
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(--
|
|
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:
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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
|
|
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(--
|
|
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(--
|
|
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
|
|
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`, {
|
|
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: "\
|
|
2478
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("small", { children: "\
|
|
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: "\
|
|
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
|
}
|