@klarkxy/dsh-memory 0.1.2 → 0.1.4
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 +16 -16
- package/cordis.patch.yml +1 -1
- package/docs/README.zh-CN.md +25 -4
- package/lib/client.inner.cjs +110 -69
- package/lib/client.inner.cjs.map +1 -1
- package/lib/client.js +110 -69
- package/lib/contracts.d.ts +9 -0
- package/lib/contracts.js +3 -1
- package/lib/contracts.js.map +1 -1
- package/lib/index.d.ts +5 -0
- package/lib/index.js +410 -42
- package/lib/index.js.map +1 -1
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
# @klarkxy/dsh-memory
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Descriptive context for DeepSeek Harness: scoped vocabulary, explicit preferences, project facts, decisions and recent activity. Dream observes human context and consolidates it. The shared store can hold procedural lessons, but Self Improve owns their creation and injection. Novel canon stays in authoritative worldbook files.
|
|
4
4
|
|
|
5
|
-
[简体中文](
|
|
5
|
+
[简体中文](docs/README.zh-CN.md)
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Standalone DSH Web
|
|
8
8
|
|
|
9
|
-
Requires Node.js ≥22 and DSH `0.1.7-
|
|
10
|
-
|
|
11
|
-
Standalone DSH must load the shared service explicitly before this feature can start:
|
|
9
|
+
Requires Node.js ≥22 and DSH `0.1.7-rc.2`. Install and load the shared service explicitly:
|
|
12
10
|
|
|
13
11
|
```sh
|
|
14
12
|
dsh plugin --profile web add @klarkxy/dsh-ai-services
|
|
15
13
|
dsh plugin --profile web add @klarkxy/dsh-memory
|
|
16
14
|
```
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
No Editor packages or Self Improve are required. The bundle starts enabled; merely opening its UI does not call a model. Use Settings → Memory to manage records, prompt injection and the Dream observation/consolidation switch. Editor preinstalls the same public plugin, not a second implementation.
|
|
17
|
+
|
|
18
|
+
## Context, not procedures
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
`ctx.aiMemory` implements the shared `MemoryService`. New `vocabulary` and `activity` records may carry subject, domain, term/topic key, aliases, host observation time, literal event-time text and activity status. Project scope comes from the native session cwd, never an arbitrary client path. Automatic observation without a cwd is skipped rather than promoted to global.
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
At turn end, Dream observes original human messages only. A new session contributes its latest message; later batches include at most four new messages, each capped at 2000 characters. Accepted output requires exact quoted evidence from real human events. Pure continuation acknowledgements do not trigger inference. The `memory.observe-context` purpose uses the normal model role and shared budgets.
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Activity has a default seven-day freshness bound. Expiry removes it from recall; it does not prove completion. A new explicit update supersedes the previous matching subject/domain/topic while preserving history. Stable vocabulary has no automatic activity expiry. Existing authoritative task records and project documents remain authoritative.
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
Idle Dream runs after roughly 15 minutes of inactivity, at least 24 hours after the previous attempt, with at least three changes. It never consolidates lessons, crosses kinds or identities, extends source expiry, refreshes observation dates, or confirms candidate sources. Only all-active sources produce active replacements; otherwise the result stays candidate. Old manual records without referenceable evidence are left unchanged rather than assigned invented provenance. Corrections, deletion and lifecycle cancellation invalidate stale results.
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
Recall contains at most five active records, about 800 tokens including the wrapper. Lessons are omitted. For a continuation request, recent in-scope activity can restore the task context. Candidates, revoked, rejected, deleted, superseded and expired records are not injected. Current instructions and permissions take precedence.
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Observation cursors are persisted across restart and deletion. The 512-session cursor bound fails closed for new sessions instead of evicting deletion protection. Disabling Dream stops observation and idle consolidation, not Memory storage or Self Improve. Disabling the plugin preserves stored data.
|
|
31
|
+
|
|
32
|
+
Existing records remain readable without synthetic metadata. Update the shared service and both learning packages together when testing these new fields; merging source does not publish an npm release.
|
|
31
33
|
|
|
32
34
|
```sh
|
|
33
35
|
pnpm --filter @klarkxy/dsh-memory typecheck
|
|
@@ -35,6 +37,4 @@ pnpm exec vitest run packages/dsh-memory/src
|
|
|
35
37
|
pnpm --filter @klarkxy/dsh-memory build
|
|
36
38
|
```
|
|
37
39
|
|
|
38
|
-
[
|
|
39
|
-
|
|
40
|
-
The Editor preinstalls this feature enabled. In the Editor, use Settings → Plugins to switch it without restarting. Standalone DSH must load `@klarkxy/dsh-ai-services` before this package; installation or removal may require a restart when the host asks for one.
|
|
40
|
+
[Design and limits](../../docs/portable-learning.md) · [Publishing](../PUBLISHING.md) · [License](LICENSE)
|
package/cordis.patch.yml
CHANGED
package/docs/README.zh-CN.md
CHANGED
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
# @klarkxy/dsh-memory
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Dream 负责“怎样理解用户和当前项目”:作者用语、偏好、项目事实、决策与近期状态。Self Improve 负责行动经验;共享存储允许保存 lesson,但 Dream 不整理、不注入 lesson。小说设定仍以世界书等权威文件为准。
|
|
4
4
|
|
|
5
|
-
[English](
|
|
5
|
+
[English](../README.md)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 独立 DSH Web 安装
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
需要 Node.js ≥22 和 DSH `0.1.7-rc.2`。不依赖任何 Editor 私有包,也不要求安装 Self Improve。
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
dsh plugin --profile web add @klarkxy/dsh-ai-services
|
|
13
|
+
dsh plugin --profile web add @klarkxy/dsh-memory
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
宿主需明确加载共享服务。插件安装后默认启用,单纯打开界面不发起推理。在「设置 → 记忆」管理条目、提示注入和 Dream 观察与整理开关;Editor 预装的也是同一个公开包。
|
|
17
|
+
|
|
18
|
+
## 行为
|
|
19
|
+
|
|
20
|
+
用语按 subject、domain、词条 key 和别名描述,近期状态另带记录时间、原话中的事件时间、状态和默认 7 天新鲜度上限。时间到期只停止回忆,不表示任务完成;新报告可替代同一事项,旧记录保留历史。项目范围来自原生会话 cwd,缺少 cwd 不自动写全局。当前指令、任务记录和权威项目资料优先。
|
|
21
|
+
|
|
22
|
+
回合结束后只观察原始人类消息。首次启用取最新一条;随后每批最多 4 条、每条 2000 字符。结果必须引用实际 seq 和逐字原话,不用助手自述、工具结果或插件注入作为作者发言。纯“继续”等确认不调用模型。`memory.observe-context` 默认使用 normal 模型角色,通过共享服务限额和取消。
|
|
23
|
+
|
|
24
|
+
闲置约 15 分钟、距上次尝试至少 24 小时且有至少 3 项变更时整理一次。Dream 不合并不同类型、作者或领域,不把近期状态写成永久词条,不延长来源有效期。只有全部来源已生效时,替代条目才自动生效;包含候选来源时仍为候选。没有可引用依据的旧手动条目保持原样,不伪造来源。
|
|
25
|
+
|
|
26
|
+
注入最多 5 条、含包装约 800 tokens,仅使用当前项目及明确全局的 active 条目;候选、过期、被替代或撤回内容不注入。删除墓碑与持久化观察游标阻止重启后重放旧消息。游标最多 512 个会话,满后停止新会话观察,不淘汰删除保护。关闭 Dream 不关闭存储或 Self Improve;关闭插件保留数据。
|
|
27
|
+
|
|
28
|
+
旧记录不强制补造结构化字段。测试新能力时使用同一源码构建的共享服务与学习插件;源码合入不代表已经发布新版 npm 包。
|
|
29
|
+
|
|
30
|
+
[设计与限制](../../../docs/portable-learning.md) · [发布维护](../../PUBLISHING.md) · [许可证](../LICENSE)
|
package/lib/client.inner.cjs
CHANGED
|
@@ -180,8 +180,14 @@ function candidateAvailabilityLabel(count, locale) {
|
|
|
180
180
|
return locale === "en" ? "No candidates" : "暂无候选";
|
|
181
181
|
}
|
|
182
182
|
function kindLabel(kind, locale) {
|
|
183
|
-
|
|
184
|
-
|
|
183
|
+
return {
|
|
184
|
+
preference: ["偏好", "Preference"],
|
|
185
|
+
"project-fact": ["项目事实", "Project fact"],
|
|
186
|
+
decision: ["决策", "Decision"],
|
|
187
|
+
vocabulary: ["用语释义", "Vocabulary"],
|
|
188
|
+
activity: ["近期状态", "Recent activity"],
|
|
189
|
+
lesson: ["行动经验", "Method"]
|
|
190
|
+
}[kind][locale === "en" ? 1 : 0];
|
|
185
191
|
}
|
|
186
192
|
function statusLabel(status, locale) {
|
|
187
193
|
return locale === "en" ? {
|
|
@@ -401,58 +407,33 @@ function MemorySettingsPanel({ client, sessionId, locale }) {
|
|
|
401
407
|
}),
|
|
402
408
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
|
|
403
409
|
className: "dsh-memory-card",
|
|
404
|
-
children: [
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
"aria-hidden": "true"
|
|
427
|
-
})
|
|
428
|
-
})] }),
|
|
429
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t(locale, "空闲间隔(分钟)", "Idle interval (minutes)"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
430
|
-
type: "number",
|
|
431
|
-
min: 1,
|
|
432
|
-
max: 180,
|
|
433
|
-
step: 1,
|
|
434
|
-
disabled: busy,
|
|
435
|
-
value: Math.round(draft.idleMs / 6e4),
|
|
436
|
-
onChange: (event) => {
|
|
437
|
-
settingsDirty.current = true;
|
|
438
|
-
setDraft({
|
|
439
|
-
...draft,
|
|
440
|
-
idleMs: Math.round(Number(event.target.value) * 6e4)
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
})] }),
|
|
444
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
445
|
-
type: "button",
|
|
446
|
-
disabled: busy,
|
|
447
|
-
onClick: () => void action(async () => {
|
|
448
|
-
await rpc("settings.update", {
|
|
449
|
-
expectedRevision: draft.revision,
|
|
450
|
-
settings: editable(draft)
|
|
451
|
-
});
|
|
452
|
-
}),
|
|
453
|
-
children: t(locale, "保存", "Save")
|
|
410
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: t(locale, "Dream 语境记忆", "Dream context memory") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
411
|
+
className: "dsh-memory-meta",
|
|
412
|
+
children: t(locale, "从原始用户消息记录用语与近期状态,闲时整理已有语境。行动方法由自我改进负责。", "Records vocabulary and recent activity from original user messages, then consolidates context while idle. Self Improve owns methods.")
|
|
413
|
+
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
414
|
+
type: "button",
|
|
415
|
+
role: "switch",
|
|
416
|
+
className: `dsh-memory-switch${draft.dreamIdleEnabled ? " is-on" : ""}`,
|
|
417
|
+
"aria-checked": draft.dreamIdleEnabled,
|
|
418
|
+
"aria-label": draft.dreamIdleEnabled ? t(locale, "关闭 Dream 观察与整理", "Disable Dream observation and consolidation") : t(locale, "启用 Dream 观察与整理", "Enable Dream observation and consolidation"),
|
|
419
|
+
disabled: busy,
|
|
420
|
+
onClick: () => void action(async () => {
|
|
421
|
+
await rpc("settings.update", {
|
|
422
|
+
expectedRevision: draft.revision,
|
|
423
|
+
settings: {
|
|
424
|
+
...editable(draft),
|
|
425
|
+
dreamIdleEnabled: !draft.dreamIdleEnabled
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
}),
|
|
429
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
430
|
+
className: "dsh-memory-switch-thumb",
|
|
431
|
+
"aria-hidden": "true"
|
|
454
432
|
})
|
|
455
|
-
]
|
|
433
|
+
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
434
|
+
className: "dsh-memory-meta",
|
|
435
|
+
children: t(locale, "闲时整理在会话空闲约 15 分钟后尝试。", "Idle organization waits about 15 minutes of inactivity.")
|
|
436
|
+
})]
|
|
456
437
|
})
|
|
457
438
|
]
|
|
458
439
|
});
|
|
@@ -716,6 +697,14 @@ function MemoryChatPanel({ client, sessionId, locale }) {
|
|
|
716
697
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
717
698
|
value: "decision",
|
|
718
699
|
children: kindLabel("decision", locale)
|
|
700
|
+
}),
|
|
701
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
702
|
+
value: "vocabulary",
|
|
703
|
+
children: kindLabel("vocabulary", locale)
|
|
704
|
+
}),
|
|
705
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
706
|
+
value: "activity",
|
|
707
|
+
children: kindLabel("activity", locale)
|
|
719
708
|
})
|
|
720
709
|
]
|
|
721
710
|
})] }),
|
|
@@ -814,6 +803,26 @@ function MemoryRow(props) {
|
|
|
814
803
|
scope
|
|
815
804
|
]
|
|
816
805
|
}),
|
|
806
|
+
record.context && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
807
|
+
className: "dsh-memory-meta",
|
|
808
|
+
children: [
|
|
809
|
+
record.context.subject,
|
|
810
|
+
" · ",
|
|
811
|
+
record.context.domain,
|
|
812
|
+
" · ",
|
|
813
|
+
record.context.key,
|
|
814
|
+
" · ",
|
|
815
|
+
t(locale, "记录于", "Observed"),
|
|
816
|
+
" ",
|
|
817
|
+
new Date(record.context.observedAt).toLocaleString(locale === "en" ? "en-US" : "zh-CN"),
|
|
818
|
+
record.context.activityStatus && ` · ${record.context.activityStatus}`,
|
|
819
|
+
record.context.eventTime && ` · ${record.context.eventTime}`
|
|
820
|
+
]
|
|
821
|
+
}),
|
|
822
|
+
record.kind === "activity" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
823
|
+
className: "dsh-memory-meta",
|
|
824
|
+
children: t(locale, "仅表示上次报告的状态;到期不代表任务已完成。", "Last reported state only; expiry never means completion.")
|
|
825
|
+
}),
|
|
817
826
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: record.content }),
|
|
818
827
|
record.evidence.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
819
828
|
className: "dsh-memory-meta",
|
|
@@ -904,7 +913,7 @@ function DreamPanel(props) {
|
|
|
904
913
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", { children: t(locale, "梦境整理", "Dream") }),
|
|
905
914
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
906
915
|
className: "dsh-memory-meta",
|
|
907
|
-
children: t(locale, "
|
|
916
|
+
children: t(locale, "每天至多闲时整理一次;不把候选升级为事实,不延长近期状态的有效期。", "Consolidates at most once a day while idle, without confirming candidates or extending activity freshness.")
|
|
908
917
|
}),
|
|
909
918
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
910
919
|
className: "dsh-memory-row-actions",
|
|
@@ -939,23 +948,53 @@ function DreamPanel(props) {
|
|
|
939
948
|
]
|
|
940
949
|
});
|
|
941
950
|
}
|
|
942
|
-
function
|
|
951
|
+
function readSelfImprovementReview(host) {
|
|
952
|
+
if (!host || typeof host !== "object") return void 0;
|
|
953
|
+
const context = host;
|
|
954
|
+
if (typeof context.get !== "function") return void 0;
|
|
955
|
+
let row;
|
|
956
|
+
try {
|
|
957
|
+
row = context.get("dshSelfImprovementReview");
|
|
958
|
+
} catch {
|
|
959
|
+
return;
|
|
960
|
+
}
|
|
961
|
+
if (!row || typeof row !== "object") return void 0;
|
|
962
|
+
const render = row.render;
|
|
963
|
+
if (typeof render !== "function") return void 0;
|
|
964
|
+
return { render };
|
|
965
|
+
}
|
|
966
|
+
function MemorySettings({ client, host, props }) {
|
|
943
967
|
const seat = useNativeSeat(client, props);
|
|
968
|
+
const review = readSelfImprovementReview(host);
|
|
944
969
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
945
970
|
className: "dsh-memory-settings-root",
|
|
946
971
|
"data-testid": "memory-settings-root",
|
|
947
|
-
children: [
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
sessionId
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
972
|
+
children: [
|
|
973
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemorySettingsPanel, {
|
|
974
|
+
client,
|
|
975
|
+
sessionId: seat.sessionId,
|
|
976
|
+
locale: seat.locale
|
|
977
|
+
}, `settings:${memoryPanelKey(seat.sessionId, seat.locale)}`),
|
|
978
|
+
review && seat.sessionId && !seat.hidden ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
|
|
979
|
+
className: "dsh-memory-si",
|
|
980
|
+
"data-testid": "self-improvement-entry",
|
|
981
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", { children: t(seat.locale, "自我改进", "Self-improvement") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
982
|
+
className: "dsh-memory-si-body",
|
|
983
|
+
children: review.render({
|
|
984
|
+
sessionId: seat.sessionId,
|
|
985
|
+
locale: seat.locale
|
|
986
|
+
})
|
|
987
|
+
})]
|
|
988
|
+
}) : null,
|
|
989
|
+
seat.sessionId && !seat.hidden ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemoryChatPanel, {
|
|
990
|
+
client,
|
|
991
|
+
sessionId: seat.sessionId,
|
|
992
|
+
locale: seat.locale
|
|
993
|
+
}, `manage:${memoryPanelKey(seat.sessionId, seat.locale)}`) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
994
|
+
className: "dsh-memory-meta",
|
|
995
|
+
children: t(seat.locale, "选择一个会话后可以管理该会话的记忆。", "Select a session to manage its memory.")
|
|
996
|
+
})
|
|
997
|
+
]
|
|
959
998
|
});
|
|
960
999
|
}
|
|
961
1000
|
const styles = `
|
|
@@ -965,7 +1004,7 @@ const styles = `
|
|
|
965
1004
|
.dsh-memory-settings p,.dsh-memory-chat p{margin:0;line-height:1.5}
|
|
966
1005
|
.dsh-memory-meta,.dsh-memory-chat small{font-size:var(--font-size-1,13px);color:var(--gray-11,inherit)}
|
|
967
1006
|
.dsh-memory-error{color:var(--red-11,#b42318)}
|
|
968
|
-
.dsh-memory-card,.dsh-memory-dream,.dsh-memory-add{display:grid;gap:10px;padding:14px 16px;border:1px solid var(--gray-6,color-mix(in srgb,currentColor 15%,transparent));border-radius:12px}
|
|
1007
|
+
.dsh-memory-card,.dsh-memory-dream,.dsh-memory-add,.dsh-memory-si{display:grid;gap:10px;padding:14px 16px;border:1px solid var(--gray-6,color-mix(in srgb,currentColor 15%,transparent));border-radius:12px}
|
|
969
1008
|
.dsh-memory-card header,.dsh-memory-chat-body header{display:flex;justify-content:space-between;gap:12px;align-items:center}
|
|
970
1009
|
.dsh-memory-card h3,.dsh-memory-add h4,.dsh-memory-dream h4{margin:0;font-size:var(--font-size-3,16px);font-weight:600}
|
|
971
1010
|
.dsh-memory-settings input,.dsh-memory-chat input,.dsh-memory-chat textarea,.dsh-memory-chat select{box-sizing:border-box;width:100%;min-width:0;padding:8px 10px;border:1px solid var(--gray-6,color-mix(in srgb,currentColor 22%,transparent));border-radius:8px;background:var(--color-surface,transparent);color:inherit;font:inherit;transition:border-color 150ms ease,box-shadow 150ms ease}
|
|
@@ -985,7 +1024,8 @@ const styles = `
|
|
|
985
1024
|
.dsh-memory-row-actions{display:flex;flex-wrap:wrap;gap:8px}
|
|
986
1025
|
.dsh-memory-check{display:flex;gap:8px;align-items:center}
|
|
987
1026
|
.dsh-memory-check input{width:auto}
|
|
988
|
-
.dsh-memory-chat>summary{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:baseline;cursor:pointer;min-height:34px;list-style:revert}
|
|
1027
|
+
.dsh-memory-chat>summary,.dsh-memory-si>summary{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:baseline;cursor:pointer;min-height:34px;list-style:revert}
|
|
1028
|
+
.dsh-memory-si-body{margin-top:8px}
|
|
989
1029
|
@media(prefers-reduced-motion:reduce){.dsh-memory-switch-thumb{transition:none}.dsh-memory-settings button:not([role="switch"]),.dsh-memory-chat button:not([role="switch"]),.dsh-memory-settings input,.dsh-memory-chat input,.dsh-memory-chat textarea,.dsh-memory-chat select{transition:none}}
|
|
990
1030
|
`;
|
|
991
1031
|
function apply(ctx) {
|
|
@@ -1005,6 +1045,7 @@ function apply(ctx) {
|
|
|
1005
1045
|
label: "记忆"
|
|
1006
1046
|
}, (props) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MemorySettings, {
|
|
1007
1047
|
client,
|
|
1048
|
+
host: ctx,
|
|
1008
1049
|
props
|
|
1009
1050
|
}))), "dsh-memory.settings");
|
|
1010
1051
|
}
|