@cremini/skillpack 1.1.3 → 1.1.4-beta.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.
Files changed (39) hide show
  1. package/dist/cli.js +1602 -339
  2. package/package.json +17 -9
  3. package/templates/start.bat +3 -0
  4. package/templates/start.sh +3 -0
  5. package/runtime/README.md +0 -51
  6. package/runtime/server/dist/adapters/markdown.js +0 -74
  7. package/runtime/server/dist/adapters/markdown.js.map +0 -1
  8. package/runtime/server/dist/adapters/slack.js +0 -369
  9. package/runtime/server/dist/adapters/slack.js.map +0 -1
  10. package/runtime/server/dist/adapters/telegram.js +0 -199
  11. package/runtime/server/dist/adapters/telegram.js.map +0 -1
  12. package/runtime/server/dist/adapters/types.js +0 -2
  13. package/runtime/server/dist/adapters/types.js.map +0 -1
  14. package/runtime/server/dist/adapters/web.js +0 -201
  15. package/runtime/server/dist/adapters/web.js.map +0 -1
  16. package/runtime/server/dist/agent.js +0 -245
  17. package/runtime/server/dist/agent.js.map +0 -1
  18. package/runtime/server/dist/config.js +0 -79
  19. package/runtime/server/dist/config.js.map +0 -1
  20. package/runtime/server/dist/index.js +0 -146
  21. package/runtime/server/dist/index.js.map +0 -1
  22. package/runtime/server/dist/lifecycle.js +0 -85
  23. package/runtime/server/dist/lifecycle.js.map +0 -1
  24. package/runtime/server/dist/memory.js +0 -195
  25. package/runtime/server/dist/memory.js.map +0 -1
  26. package/runtime/server/package-lock.json +0 -8433
  27. package/runtime/server/package.json +0 -23
  28. package/runtime/start.bat +0 -51
  29. package/runtime/start.sh +0 -50
  30. /package/{runtime/web → web}/index.html +0 -0
  31. /package/{runtime/web → web}/js/api-key-dialog.js +0 -0
  32. /package/{runtime/web → web}/js/api.js +0 -0
  33. /package/{runtime/web → web}/js/chat-apps-dialog.js +0 -0
  34. /package/{runtime/web → web}/js/chat.js +0 -0
  35. /package/{runtime/web → web}/js/config.js +0 -0
  36. /package/{runtime/web → web}/js/main.js +0 -0
  37. /package/{runtime/web → web}/js/settings.js +0 -0
  38. /package/{runtime/web → web}/marked.min.js +0 -0
  39. /package/{runtime/web → web}/styles.css +0 -0
@@ -1,195 +0,0 @@
1
- /**
2
- * MemoryManager – OpenViking HTTP 客户端封装
3
- *
4
- * 负责与 OpenViking Server 通信,管理记忆同步和检索。
5
- * 所有操作均为尽力而为(best-effort),失败不影响主推理流程。
6
- */
7
- // ---------------------------------------------------------------------------
8
- // Helpers
9
- // ---------------------------------------------------------------------------
10
- const log = (...args) => console.log("[Memory]", ...args);
11
- const warn = (...args) => console.warn("[Memory]", ...args);
12
- // ---------------------------------------------------------------------------
13
- // MemoryManager
14
- // ---------------------------------------------------------------------------
15
- export class MemoryManager {
16
- serverUrl;
17
- maxMemories;
18
- /** channelId → OpenViking session ID */
19
- channelSessions = new Map();
20
- healthy = false;
21
- constructor(config) {
22
- this.serverUrl = config.serverUrl.replace(/\/+$/, "");
23
- this.maxMemories = config.maxMemories ?? 5;
24
- }
25
- // ── HTTP helpers ──────────────────────────────────────────────────────
26
- async request(method, path, body) {
27
- const url = `${this.serverUrl}${path}`;
28
- try {
29
- const res = await fetch(url, {
30
- method,
31
- headers: { "Content-Type": "application/json" },
32
- body: body !== undefined ? JSON.stringify(body) : undefined,
33
- signal: AbortSignal.timeout(10_000),
34
- });
35
- return (await res.json());
36
- }
37
- catch (err) {
38
- warn(`Request failed: ${method} ${path}`, err);
39
- return null;
40
- }
41
- }
42
- // ── 生命周期 ──────────────────────────────────────────────────────────
43
- /** 检查 OpenViking Server 是否可达 */
44
- async healthCheck() {
45
- try {
46
- const url = `${this.serverUrl}/api/v1/system/status`;
47
- const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
48
- this.healthy = res.ok;
49
- }
50
- catch {
51
- this.healthy = false;
52
- }
53
- if (this.healthy) {
54
- log("OpenViking server is healthy at", this.serverUrl);
55
- }
56
- else {
57
- warn("OpenViking server is unreachable at", this.serverUrl);
58
- }
59
- return this.healthy;
60
- }
61
- /**
62
- * 为指定 channel 创建 OpenViking Session。
63
- * 如果已有 session 则返回已有的 ID。
64
- */
65
- async createSession(channelId) {
66
- const existing = this.channelSessions.get(channelId);
67
- if (existing)
68
- return existing;
69
- const resp = await this.request("POST", "/api/v1/sessions", {});
70
- if (!resp || resp.status !== "ok" || !resp.result?.session_id) {
71
- warn("Failed to create OV session for channel", channelId);
72
- return null;
73
- }
74
- const ovSessionId = resp.result.session_id;
75
- this.channelSessions.set(channelId, ovSessionId);
76
- log(`Created OV session: ${ovSessionId} for channel: ${channelId}`);
77
- return ovSessionId;
78
- }
79
- // ── 消息同步 ──────────────────────────────────────────────────────────
80
- /**
81
- * 添加消息到 OV Session(异步、fire-and-forget)。
82
- * 不阻塞主推理流程。
83
- */
84
- syncMessage(channelId, role, content) {
85
- const ovSessionId = this.channelSessions.get(channelId);
86
- if (!ovSessionId || !content.trim())
87
- return;
88
- // Fire-and-forget
89
- this.request("POST", `/api/v1/sessions/${ovSessionId}/messages`, {
90
- role,
91
- content,
92
- }).catch((err) => {
93
- warn("Failed to sync message:", err);
94
- });
95
- }
96
- // ── 记忆检索 ──────────────────────────────────────────────────────────
97
- /**
98
- * 根据用户消息检索相关记忆。
99
- * 返回格式化好的 context 字符串,可直接注入 system prompt。
100
- * 如果无可用记忆或出错则返回空字符串。
101
- */
102
- async retrieveMemories(query) {
103
- if (!this.healthy)
104
- return "";
105
- // 同时检索 user memories 和 agent memories
106
- const [userMemories, agentMemories] = await Promise.all([
107
- this.findMemories(query, "viking://user/memories"),
108
- this.findMemories(query, "viking://agent/memories"),
109
- ]);
110
- const allMemories = [...userMemories, ...agentMemories];
111
- if (allMemories.length === 0)
112
- return "";
113
- return this.formatMemoryContext(allMemories);
114
- }
115
- async findMemories(query, targetUri) {
116
- try {
117
- const resp = await this.request("POST", "/api/v1/search/find", {
118
- query,
119
- target_uri: targetUri,
120
- limit: this.maxMemories,
121
- });
122
- if (!resp || resp.status !== "ok")
123
- return [];
124
- // OpenViking find 返回 results 或 items
125
- return resp.result?.results ?? resp.result?.items ?? [];
126
- }
127
- catch {
128
- return [];
129
- }
130
- }
131
- formatMemoryContext(memories) {
132
- if (memories.length === 0)
133
- return "";
134
- const lines = [
135
- "## 历史记忆(来自以往对话)",
136
- "",
137
- "以下是与当前用户相关的历史记忆,请在回答时参考:",
138
- "",
139
- ];
140
- for (const mem of memories) {
141
- const label = this.categorizeUri(mem.uri);
142
- const text = mem.abstract || mem.content || "";
143
- if (text.trim()) {
144
- lines.push(`### ${label}`);
145
- lines.push(text.trim());
146
- lines.push("");
147
- }
148
- }
149
- return lines.join("\n");
150
- }
151
- categorizeUri(uri) {
152
- if (uri.includes("/profile"))
153
- return "用户画像";
154
- if (uri.includes("/preferences"))
155
- return "用户偏好";
156
- if (uri.includes("/entities"))
157
- return "关联实体";
158
- if (uri.includes("/events"))
159
- return "历史事件";
160
- if (uri.includes("/cases"))
161
- return "相关案例";
162
- if (uri.includes("/patterns"))
163
- return "经验模式";
164
- return "记忆片段";
165
- }
166
- // ── 会话提交 ──────────────────────────────────────────────────────────
167
- /**
168
- * 提交 OV Session,触发后台记忆提取。
169
- * 使用 wait=false 让 OpenViking 异步处理。
170
- */
171
- async commitSession(channelId) {
172
- const ovSessionId = this.channelSessions.get(channelId);
173
- if (!ovSessionId)
174
- return;
175
- log(`Committing OV session: ${ovSessionId} for channel: ${channelId}`);
176
- const resp = await this.request("POST", `/api/v1/sessions/${ovSessionId}/commit?wait=false`, {});
177
- if (resp?.status === "ok") {
178
- log("OV session commit accepted (background processing)");
179
- }
180
- else {
181
- warn("OV session commit failed:", resp?.error?.message);
182
- }
183
- }
184
- /**
185
- * 销毁 channel 的 OV Session 映射。
186
- * 先尝试提交以提取记忆,然后移除映射。
187
- */
188
- async disposeSession(channelId) {
189
- if (this.channelSessions.has(channelId)) {
190
- await this.commitSession(channelId);
191
- this.channelSessions.delete(channelId);
192
- }
193
- }
194
- }
195
- //# sourceMappingURL=memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}