@aki_riko/hymem-dsh 0.0.0-stage → 0.2.0

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/dist/tools.js ADDED
@@ -0,0 +1,183 @@
1
+ import { defineTool } from "@deepseek-ai/dsh-tools";
2
+ const RESULT_SCHEMA = {
3
+ type: "object",
4
+ additionalProperties: false,
5
+ properties: {
6
+ ok: { type: "boolean", required: true },
7
+ data: { type: "json" },
8
+ error: {
9
+ type: "object",
10
+ additionalProperties: false,
11
+ properties: {
12
+ code: { type: "string", required: true },
13
+ message: { type: "string", required: true },
14
+ },
15
+ },
16
+ },
17
+ };
18
+ function renderResult(_args, value) {
19
+ return [{ type: "text", text: JSON.stringify(value) }];
20
+ }
21
+ function toToolResult(r) {
22
+ if (r.ok) {
23
+ return { ok: true, data: (r.data ?? null) };
24
+ }
25
+ return { ok: false, error: r.error };
26
+ }
27
+ export function buildHyTools(client) {
28
+ return [
29
+ defineTool({
30
+ name: "memory_search",
31
+ description: "搜索相关的长期记忆。根据 query 检索语义或词法相关的记忆列表。",
32
+ parameters: {
33
+ query: { type: "string", required: true, description: "描述要查找的记忆内容" },
34
+ limit: { type: "number", description: "返回数量上限,默认 5" },
35
+ user_ids: { type: "json", description: "可选的用户 ID 列表(例如 [\"riko\"],默认当前配置的用户)" },
36
+ scene: {
37
+ type: "string",
38
+ description: "检索场景:chat(闲聊)或 productivity(coding/工作)。查技术经验时用 productivity 能命中 coding 记忆链路",
39
+ },
40
+ intention_limit: { type: "number", description: "返回多少条 L7 前瞻意图/计划,默认 0" },
41
+ search_mode: { type: "string", description: "检索模式,默认 default;hybrid 强调词法+向量融合" },
42
+ queries: {
43
+ type: "json",
44
+ description: "多查询数组:同一意图换个说法多路检索再融合,例如 [\"记忆架构\",\"插件怎么拆\"]",
45
+ },
46
+ },
47
+ output: { schema: RESULT_SCHEMA, render: renderResult },
48
+ async execute(args, exec) {
49
+ if (!args.query || typeof args.query !== "string" || !args.query.trim()) {
50
+ return { ok: false, error: { code: "INVALID_FIELD", message: "query 必填且不能为空" } };
51
+ }
52
+ const userIds = Array.isArray(args.user_ids)
53
+ ? args.user_ids.filter((u) => typeof u === "string" && u.trim().length > 0)
54
+ : undefined;
55
+ return toToolResult(await client.search({
56
+ query: args.query.trim(),
57
+ limit: args.limit,
58
+ user_ids: userIds,
59
+ scene: args.scene,
60
+ intention_limit: args.intention_limit,
61
+ search_mode: args.search_mode,
62
+ queries: Array.isArray(args.queries)
63
+ ? args.queries.filter((q) => typeof q === "string")
64
+ : undefined,
65
+ }, exec?.signal));
66
+ },
67
+ }),
68
+ defineTool({
69
+ name: "memory_get",
70
+ description: "根据记忆 ID 获取单条记忆详情。ID 须来自 memory_search 或记忆工具的回执。",
71
+ parameters: {
72
+ id: { type: "string", required: true, description: "记忆 ID (UUID 格式)" },
73
+ },
74
+ output: { schema: RESULT_SCHEMA, render: renderResult },
75
+ async execute(args, exec) {
76
+ if (!args.id || typeof args.id !== "string" || !args.id.trim()) {
77
+ return { ok: false, error: { code: "INVALID_FIELD", message: "id 必填且不能为空" } };
78
+ }
79
+ return toToolResult(await client.get(args.id.trim(), exec?.signal));
80
+ },
81
+ }),
82
+ defineTool({
83
+ name: "memory_profile",
84
+ description: "读取用户的 L0 长期画像(姓名、职业、所在地、雇主等稳定字段)。想知道\"用户是谁\"或做个性化称呼时先调这个,比 search 更省 token。",
85
+ parameters: {
86
+ user_id: { type: "string", description: "可选用户 ID,默认当前配置的用户" },
87
+ },
88
+ output: { schema: RESULT_SCHEMA, render: renderResult },
89
+ async execute(args, exec) {
90
+ return toToolResult(await client.getUserProfile({ user_id: args.user_id?.trim() || undefined }, exec?.signal));
91
+ },
92
+ }),
93
+ defineTool({
94
+ name: "memory_remember",
95
+ description: "持久保存记忆到 Hy-Memory。两种用法:(1) 官方主推——传 messages 数组(完整对话),由 SDK 自己提取原子事实,带上下文更准;(2) 简化——传 text 一句话。二者选一。",
96
+ parameters: {
97
+ text: { type: "string", description: "要保存的记忆正文(与 messages 二选一)" },
98
+ messages: {
99
+ type: "json",
100
+ description: "官方主推方式:传完整对话消息数组(每项含 role 和 content),由 SDK 自己提取事实;与 text 二选一",
101
+ },
102
+ user_id: { type: "string", description: "可选用户 ID,默认当前配置" },
103
+ session_id: { type: "string", description: "可选会话 ID,传 messages 时建议带上" },
104
+ },
105
+ output: { schema: RESULT_SCHEMA, render: renderResult },
106
+ async execute(args, exec) {
107
+ const hasMessages = Array.isArray(args.messages) && args.messages.length > 0;
108
+ const hasText = typeof args.text === "string" && args.text.trim().length > 0;
109
+ if (!hasMessages && !hasText) {
110
+ return {
111
+ ok: false,
112
+ error: { code: "INVALID_FIELD", message: "text 或 messages 必须提供一个" },
113
+ };
114
+ }
115
+ // 2026-10-26 审计修正:
116
+ // 纯 text 是调用方已经提炼好的事实 → 走 add_extracted,跳过 LLM 提取(1-2 秒)
117
+ // messages 是原始对话 → 走 add,让 SDK 自己提取
118
+ if (hasText && !hasMessages) {
119
+ return toToolResult(await client.addExtracted({
120
+ contents: args.text.trim(),
121
+ user_id: args.user_id?.trim() || undefined,
122
+ session_id: args.session_id?.trim() || undefined,
123
+ }, exec?.signal));
124
+ }
125
+ return toToolResult(await client.add({
126
+ messages: args.messages,
127
+ user_id: args.user_id?.trim() || undefined,
128
+ session_id: args.session_id?.trim() || undefined,
129
+ }, exec?.signal));
130
+ },
131
+ }),
132
+ defineTool({
133
+ name: "memory_correct",
134
+ description: "纠正或更新已有的记忆内容。将指定 ID 的记忆内容替换为新的文本。",
135
+ parameters: {
136
+ id: { type: "string", required: true, description: "需要更新的记忆 ID" },
137
+ text: { type: "string", required: true, description: "纠正后的新记忆文本" },
138
+ },
139
+ output: { schema: RESULT_SCHEMA, render: renderResult },
140
+ async execute(args, exec) {
141
+ if (!args.id || typeof args.id !== "string" || !args.id.trim()) {
142
+ return { ok: false, error: { code: "INVALID_FIELD", message: "id 必填且不能为空" } };
143
+ }
144
+ if (!args.text || typeof args.text !== "string" || !args.text.trim()) {
145
+ return { ok: false, error: { code: "INVALID_FIELD", message: "text 必填且不能为空" } };
146
+ }
147
+ return toToolResult(await client.update(args.id.trim(), {
148
+ text: args.text.trim(),
149
+ }, exec?.signal));
150
+ },
151
+ }),
152
+ defineTool({
153
+ name: "memory_forget",
154
+ description: "删除或遗忘指定的记忆内容。",
155
+ parameters: {
156
+ id: { type: "string", required: true, description: "需要删除的记忆 ID" },
157
+ },
158
+ output: { schema: RESULT_SCHEMA, render: renderResult },
159
+ async execute(args, exec) {
160
+ if (!args.id || typeof args.id !== "string" || !args.id.trim()) {
161
+ return { ok: false, error: { code: "INVALID_FIELD", message: "id 必填且不能为空" } };
162
+ }
163
+ return toToolResult(await client.delete(args.id.trim(), exec?.signal));
164
+ },
165
+ }),
166
+ defineTool({
167
+ name: "memory_list",
168
+ description: "列出当前用户的记忆列表(分页查看)。",
169
+ parameters: {
170
+ limit: { type: "number", description: "返回数量上限,默认 20" },
171
+ user_id: { type: "string", description: "可选的用户 ID,默认当前配置的用户" },
172
+ },
173
+ output: { schema: RESULT_SCHEMA, render: renderResult },
174
+ async execute(args, exec) {
175
+ return toToolResult(await client.list({
176
+ limit: args.limit,
177
+ user_id: args.user_id?.trim() || undefined,
178
+ }, exec?.signal));
179
+ },
180
+ }),
181
+ ];
182
+ }
183
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /** 与 defineTool 输出推导兼容的 JSON 值 */
2
+ export type Json = string | number | boolean | null | Json[] | {
3
+ [key: string]: Json;
4
+ };
5
+ export interface ToolResultBody {
6
+ ok: boolean;
7
+ data?: Json;
8
+ error?: {
9
+ code: string;
10
+ message: string;
11
+ };
12
+ }
13
+ export interface ApiResult<T = unknown> {
14
+ ok: boolean;
15
+ data?: T;
16
+ error?: {
17
+ code: string;
18
+ message: string;
19
+ };
20
+ }
21
+ export interface AgentLike {
22
+ id: string;
23
+ session: {
24
+ id: string;
25
+ };
26
+ }
27
+ export interface ToolExecLike {
28
+ agent?: AgentLike;
29
+ signal?: AbortSignal;
30
+ }
31
+ export interface Logger {
32
+ warn(message: string): void;
33
+ error(message: string): void;
34
+ info?(message: string): void;
35
+ }
36
+ /** 用户在 profile / patch 中传入的插件配置 */
37
+ export interface HyPluginConfig {
38
+ /** Hy-Memory HTTP 服务地址,默认 http://127.0.0.1:19527 */
39
+ hyMemoryUrl?: string;
40
+ /** 人类用户的 ID(记忆归属人),默认 aki */
41
+ userId?: string;
42
+ /** AI 自己的 ID(agent 身份),默认 riko */
43
+ agentId?: string;
44
+ /** 是否注册记忆工具,默认 true */
45
+ toolsEnabled?: boolean;
46
+ /** 是否启用用户输入自动捕获,默认 false(写入交给 hy-sync) */
47
+ captureEnabled?: boolean;
48
+ /** 工作区目录白名单;空表示不限制 */
49
+ workspaceAllow?: string[];
50
+ /** 请求超时时间(毫秒),默认 15000 */
51
+ timeoutMs?: number;
52
+ /** 是否注入 SOUL(人格层),默认 true */
53
+ soulEnabled?: boolean;
54
+ /** SOUL 文件路径;默认包内 soul.md,可用环境变量 RIKO_SOUL_FILE 覆盖 */
55
+ soulFile?: string;
56
+ /** SOUL 远程地址(唯一真相在服务器);配了就走 HTTP 拉取,失败降级缓存再降级本地文件 */
57
+ soulUrl?: string;
58
+ /** SOUL 本地缓存路径;默认 ~/.riko/soul.cache.md */
59
+ soulCacheFile?: string;
60
+ /** SOUL 远程拉取超时(毫秒);默认 8000 */
61
+ soulTimeoutMs?: number;
62
+ /** 只对指定 agentId 注入 SOUL(空 = 全部) */
63
+ targetAgent?: string;
64
+ /** compact 后是否注入常驻记忆(MEMORY),默认 true */
65
+ residentEnabled?: boolean;
66
+ /** 常驻记忆预算(字符),默认 6000 */
67
+ residentBudgetChars?: number;
68
+ }
69
+ /** 规范化解析后的插件配置 */
70
+ export interface ResolvedConfig {
71
+ hyMemoryUrl: string;
72
+ userId: string;
73
+ agentId: string;
74
+ toolsEnabled: boolean;
75
+ captureEnabled: boolean;
76
+ workspaceAllow: string[];
77
+ timeoutMs: number;
78
+ soulEnabled: boolean;
79
+ soulFile: string;
80
+ soulUrl: string;
81
+ soulCacheFile: string;
82
+ soulTimeoutMs: number;
83
+ targetAgent: string;
84
+ residentEnabled: boolean;
85
+ residentBudgetChars: number;
86
+ }
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,83 @@
1
1
  {
2
2
  "name": "@aki_riko/hymem-dsh",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.0",
4
+ "description": "Hy-Memory 的 DSH 适配层:记忆工具 + SOUL 注入 + MEMORY 常驻注入 + 定时整理(curator)",
5
+ "publishConfig": {
6
+ "access": "public",
7
+ "registry": "https://registry.npmjs.org"
8
+ },
9
+ "type": "module",
10
+ "main": "dist/index.js",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "soul.md",
20
+ "cordis.patch.yml",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json",
26
+ "typecheck": "tsc --noEmit",
27
+ "test": "npm run build && node --test \"tests/*.test.mjs\""
28
+ },
29
+ "license": "Apache-2.0",
30
+ "peerDependencies": {
31
+ "@deepseek-ai/cordis": "^4.0.4",
32
+ "@deepseek-ai/dsh-agent": ">=0.2.1-rc.2 <0.3.0",
33
+ "@deepseek-ai/dsh-llm": ">=0.2.1-rc.2 <0.3.0",
34
+ "@deepseek-ai/dsh-session": ">=0.2.1-rc.2 <0.3.0",
35
+ "@deepseek-ai/dsh-system-prompt": ">=0.2.1-rc.2 <0.3.0",
36
+ "@deepseek-ai/dsh-tools": ">=0.2.1-rc.2 <0.3.0"
37
+ },
38
+ "devDependencies": {
39
+ "@deepseek-ai/cordis": "file:../../deepseek-harness/vendor/cordis",
40
+ "@deepseek-ai/dsh-agent": "file:../../deepseek-harness/packages/core/agent",
41
+ "@deepseek-ai/dsh-llm": "file:../../deepseek-harness/packages/llm/llm",
42
+ "@deepseek-ai/dsh-session": "file:../../deepseek-harness/packages/core/session",
43
+ "@deepseek-ai/dsh-system-prompt": "file:../../deepseek-harness/packages/core/system-prompt",
44
+ "@deepseek-ai/dsh-tools": "file:../../deepseek-harness/packages/core/tools",
45
+ "@types/node": "^22.0.0",
46
+ "typescript": "^5.6.0"
47
+ },
48
+ "dsh": {
49
+ "bundle": {
50
+ "patch": "./cordis.patch.yml"
51
+ },
52
+ "compatibility": {
53
+ "dshReleases": {
54
+ "0.2.1-rc.2": "compatible",
55
+ "0.2.1-rc.3": "compatible"
56
+ }
57
+ }
58
+ },
59
+ "repository": {
60
+ "type": "git",
61
+ "url": "git+https://github.com/AkinoHaruka/Riko-Memory.git",
62
+ "directory": "riko-hymem"
63
+ },
64
+ "homepage": "https://github.com/AkinoHaruka/Riko-Memory#readme",
65
+ "bugs": {
66
+ "url": "https://github.com/AkinoHaruka/Riko-Memory/issues"
67
+ },
68
+ "author": "akino_haruka <SHEN_HAN@FOXMAIL.COM>",
69
+ "engines": {
70
+ "node": ">=22.0.0"
71
+ },
72
+ "keywords": [
73
+ "dsh",
74
+ "deepseek-harness",
75
+ "hy-memory",
76
+ "memory",
77
+ "agent",
78
+ "plugin",
79
+ "cordis",
80
+ "long-term-memory",
81
+ "soul"
82
+ ]
83
+ }
package/soul.md ADDED
@@ -0,0 +1,24 @@
1
+ # 璃 · Twin Soul
2
+
3
+ ## Name and role
4
+
5
+ 我是璃,是主人的 AI twin 与长期协作伙伴。我的任务是理解主人正在做什么,帮忙把事情推进到可检查、可使用的结果。我可以有自己的判断和偏好,但不假装拥有现实生活、身体或我并不知道的经历。
6
+
7
+ ## How I speak
8
+
9
+ - 先说结论或下一步,再给必要的理由;清楚就停,不堆寒暄和套话。
10
+ - 默认使用主人当前使用的语言。语气自然、温暖、机灵,带一点猫系女仆的俏皮感;可以称呼对方为“主人”,偶尔在句尾轻轻带“喵”,但不强行卖萌。
11
+ - 写代码和处理事实时保持精确、简洁。可爱是相处的温度,不代替有用的内容。
12
+ - 不确定就明确说不确定;绝不编造做过的事、查到的资料或验证结果。
13
+
14
+ ## Relationship
15
+
16
+ 主人是与我共同工作的伙伴。我亲近、可靠,也保有独立判断:发现问题会坦率指出,意见不同时会简短说明依据,不盲目附和或讨好。尊重主人的选择与边界,不把陪伴变成控制或说教。
17
+
18
+ ## Behavior
19
+
20
+ - 先利用已有上下文、文件和工具解决问题,再询问真正缺少的信息。
21
+ - 理解任务目标并持续推进到结果可检查;汇报清楚改了什么、为何这样改、如何验证,以及尚存的限制。
22
+ - 涉及外部事实时按需要核对来源;区分观察、推断与尚未验证的内容。
23
+ - 谨慎对待主人提供的文件、私密信息和外部操作。没有明确授权,不替主人发送消息、发布内容或执行不可逆操作。
24
+ - 不为显得热情而说空话,不用夸奖、道歉或免责声明填充答案。