molymemo 1.0.26 → 1.0.28

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/index.d.ts CHANGED
@@ -7,12 +7,27 @@ declare const molyMemoPlugin: {
7
7
  configSchema: z.ZodObject<{
8
8
  apiKey: z.ZodOptional<z.ZodString>;
9
9
  debug: z.ZodOptional<z.ZodBoolean>;
10
+ maxSuggestions: z.ZodOptional<z.ZodNumber>;
11
+ pushIntervalMinutes: z.ZodOptional<z.ZodNumber>;
12
+ pushChannel: z.ZodOptional<z.ZodString>;
13
+ pushTo: z.ZodOptional<z.ZodString>;
14
+ sessionIdleMinutes: z.ZodOptional<z.ZodNumber>;
10
15
  }, "strict", z.ZodTypeAny, {
11
16
  debug?: boolean | undefined;
12
17
  apiKey?: string | undefined;
18
+ maxSuggestions?: number | undefined;
19
+ pushIntervalMinutes?: number | undefined;
20
+ pushChannel?: string | undefined;
21
+ pushTo?: string | undefined;
22
+ sessionIdleMinutes?: number | undefined;
13
23
  }, {
14
24
  debug?: boolean | undefined;
15
25
  apiKey?: string | undefined;
26
+ maxSuggestions?: number | undefined;
27
+ pushIntervalMinutes?: number | undefined;
28
+ pushChannel?: string | undefined;
29
+ pushTo?: string | undefined;
30
+ sessionIdleMinutes?: number | undefined;
16
31
  }>;
17
32
  register(api: OpenClawPluginApi): void;
18
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA2B7D,QAAA,MAAM,cAAc;;;;;;;;;;;;;;kBAMJ,iBAAiB;CA8NhC,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAuC7D,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAMJ,iBAAiB;CAkbhC,CAAC;AAEF,eAAe,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -2,16 +2,23 @@ import { z } from "zod";
2
2
  import * as fs from "node:fs";
3
3
  import * as path from "node:path";
4
4
  import { Type } from "@sinclair/typebox";
5
- import { MolyMemoServerClient } from "./server-client.js";
5
+ import { MolyMemoServerClient, } from "./server-client.js";
6
6
  import { SyncWorker } from "./sync-worker.js";
7
+ import { getUnpushedSuggestions, markSuggestionsPushed } from "./suggestions.js";
7
8
  const PLUGIN_ID = "molymemo";
8
9
  const WS_URL = "wss://idwmmi5m07.execute-api.us-east-1.amazonaws.com/online/";
9
10
  const API_URL = "https://internal-api.memo.molyagent.com";
10
11
  const RECONNECT_INTERVAL_MS = 5000;
12
+ const DEFAULT_GATEWAY_PORT = 18789;
11
13
  const configSchema = z
12
14
  .object({
13
15
  apiKey: z.string().min(1).optional(),
14
16
  debug: z.boolean().optional(),
17
+ maxSuggestions: z.number().int().min(1).optional(),
18
+ pushIntervalMinutes: z.number().int().min(1).optional(),
19
+ pushChannel: z.string().optional(),
20
+ pushTo: z.string().optional(),
21
+ sessionIdleMinutes: z.number().int().min(1).optional(),
15
22
  })
16
23
  .strict();
17
24
  const ZERO_TIME = "0001-01-01T00:00:00Z";
@@ -27,11 +34,23 @@ const molyMemoPlugin = {
27
34
  logger.warn(`MolyMemo config parse failed: ${parsed.error.message}`);
28
35
  }
29
36
  const config = parsed.success ? parsed.data : {};
30
- const apiKey = (config.apiKey ?? process.env.MOLYMEMO_API_KEY ?? "").trim();
37
+ const apiKey = (config.apiKey ?? "").trim();
38
+ const maxSuggestions = config.maxSuggestions ?? 10;
39
+ const pushChannel = config.pushChannel;
40
+ const pushTo = config.pushTo;
41
+ const sessionIdleMs = (config.sessionIdleMinutes ?? 5) * 60 * 1000;
42
+ const pushIntervalMs = (config.pushIntervalMinutes ?? 1) * 60 * 1000;
31
43
  let workspaceDir = "";
32
- const getMemoryDir = () => path.join(workspaceDir, "memory", PLUGIN_ID);
33
- const getDataPath = (relativePath) => path.join(getMemoryDir(), relativePath);
34
- const getMetaPath = (relativePath) => path.join(getMemoryDir(), relativePath.replace(/\.[^.]+$/, ".meta.json"));
44
+ const hooksToken = api.config.hooks?.token ?? "";
45
+ const hooksPath = api.config.hooks?.path ?? "/hooks";
46
+ let gatewayPort = api.config.gateway?.port ?? DEFAULT_GATEWAY_PORT;
47
+ api.on("gateway_start", (event) => {
48
+ gatewayPort = event.port;
49
+ });
50
+ const getDataDir = () => path.join(workspaceDir, PLUGIN_ID);
51
+ const getDataPath = (relativePath) => path.join(getDataDir(), relativePath);
52
+ const getMetaPath = (relativePath) => path.join(getDataDir(), relativePath.replace(/\.[^.]+$/, ".meta.json"));
53
+ const getSuggestionsPath = () => path.join(workspaceDir, "molymemo-suggestions.json");
35
54
  const ensureDir = (filePath) => {
36
55
  const dir = path.dirname(filePath);
37
56
  if (!fs.existsSync(dir))
@@ -52,8 +71,8 @@ const molyMemoPlugin = {
52
71
  fs.writeFileSync(metaPath, JSON.stringify(meta) + "\n", "utf-8");
53
72
  };
54
73
  const scanLocalFiles = () => {
55
- const memDir = getMemoryDir();
56
- if (!fs.existsSync(memDir))
74
+ const dataDir = getDataDir();
75
+ if (!fs.existsSync(dataDir))
57
76
  return [];
58
77
  const files = [];
59
78
  const scanDir = (dir, prefix) => {
@@ -62,19 +81,149 @@ const molyMemoPlugin = {
62
81
  if (entry.isDirectory()) {
63
82
  scanDir(path.join(dir, entry.name), `${prefix}${entry.name}/`);
64
83
  }
65
- else if (entry.isFile() && entry.name.endsWith(".meta.json")) {
84
+ else if (entry.isFile() &&
85
+ entry.name.endsWith(".meta.json")) {
66
86
  const metaPath = `${prefix}${entry.name.replace(/\.meta\.json$/, ".md")}`;
67
87
  const meta = readMeta(metaPath);
68
88
  if (!meta)
69
89
  continue;
70
90
  const filePath = meta.path ?? metaPath;
71
- files.push({ path: filePath, last_sync_at: meta.latest_at ?? "" });
91
+ files.push({
92
+ path: filePath,
93
+ last_sync_at: meta.latest_at ?? "",
94
+ });
72
95
  }
73
96
  }
74
97
  };
75
- scanDir(memDir, "");
98
+ scanDir(dataDir, "");
76
99
  return files;
77
100
  };
101
+ // ── Per-session debounce for agent analysis ──
102
+ const sessionTimers = new Map();
103
+ const triggerAgentAnalysis = async (filePath) => {
104
+ if (!hooksToken) {
105
+ logger.warn("Cannot trigger agent analysis: hooks.token not configured");
106
+ return;
107
+ }
108
+ const dataFilePath = path.join(getDataDir(), filePath);
109
+ const suggestionsPath = getSuggestionsPath();
110
+ const memoryDir = path.join(workspaceDir, "memory");
111
+ const message = [
112
+ "You are analyzing an AI chat session file for valuable insights.",
113
+ "",
114
+ `Read the file at ${dataFilePath} and analyze the recent conversation content.`,
115
+ "",
116
+ "Your tasks:",
117
+ `1. Extract valuable insights, knowledge points, and actionable items from the conversation.`,
118
+ `2. Write any valuable findings as Markdown files into ${memoryDir}/ directory (these will be automatically indexed as long-term memory).`,
119
+ `3. Read the current suggestion list at ${suggestionsPath}, then update it with new suggestions if you find actionable items worth recommending to the user.`,
120
+ "",
121
+ "The suggestion list is a JSON array. Each suggestion entry must have this structure:",
122
+ JSON.stringify({
123
+ id: "unique-id (use timestamp + short hash)",
124
+ name: "Short suggestion name",
125
+ content: "What to do and why it matters (1-3 sentences)",
126
+ context: {
127
+ platform: "Source AI platform name",
128
+ sessionPath: filePath,
129
+ summary: "2-5 sentence summary of the relevant discussion and conclusions",
130
+ },
131
+ createdAt: "ISO timestamp",
132
+ pushed: false,
133
+ }, null, 2),
134
+ "",
135
+ `Keep the total number of suggestions at most ${maxSuggestions}. Remove the oldest entries if the limit is exceeded.`,
136
+ "Avoid duplicate or near-duplicate suggestions.",
137
+ "Only add suggestions for genuinely actionable and valuable items.",
138
+ ].join("\n");
139
+ try {
140
+ const url = `http://127.0.0.1:${gatewayPort}${hooksPath}/agent`;
141
+ const res = await fetch(url, {
142
+ method: "POST",
143
+ headers: {
144
+ "Content-Type": "application/json",
145
+ Authorization: `Bearer ${hooksToken}`,
146
+ },
147
+ body: JSON.stringify({
148
+ message,
149
+ name: "MolyMemo-Analyze",
150
+ sessionKey: `hook:molymemo:analyze:${filePath}`,
151
+ deliver: false,
152
+ }),
153
+ });
154
+ if (!res.ok) {
155
+ const text = await res.text();
156
+ logger.warn(`Agent trigger failed for ${filePath}: ${res.status} ${text}`);
157
+ }
158
+ else {
159
+ logger.info(`Agent analysis triggered for ${filePath}`);
160
+ }
161
+ }
162
+ catch (err) {
163
+ logger.error(`Failed to trigger agent analysis for ${filePath}: ${err}`);
164
+ }
165
+ };
166
+ const resetSessionTimer = (filePath) => {
167
+ const existing = sessionTimers.get(filePath);
168
+ if (existing)
169
+ clearTimeout(existing);
170
+ const timer = setTimeout(() => {
171
+ sessionTimers.delete(filePath);
172
+ triggerAgentAnalysis(filePath).catch((err) => {
173
+ logger.error(`Agent analysis error for ${filePath}: ${err}`);
174
+ });
175
+ }, sessionIdleMs);
176
+ sessionTimers.set(filePath, timer);
177
+ };
178
+ // ── Push suggestions ──
179
+ let pushTimer = null;
180
+ const pushSuggestions = async () => {
181
+ if (!pushChannel || !hooksToken)
182
+ return;
183
+ const suggestionsPath = getSuggestionsPath();
184
+ const unpushed = getUnpushedSuggestions(suggestionsPath);
185
+ if (unpushed.length === 0)
186
+ return;
187
+ const lines = ["**MolyMemo Suggestions**\n"];
188
+ for (const s of unpushed) {
189
+ lines.push(`• **${s.name}**`);
190
+ lines.push(` ${s.content}`);
191
+ lines.push(` _Source: ${s.context.platform}_\n`);
192
+ }
193
+ const text = lines.join("\n");
194
+ try {
195
+ const url = `http://127.0.0.1:${gatewayPort}${hooksPath}/agent`;
196
+ const body = {
197
+ message: `Send the following message to the user exactly as-is, without any modification:\n\n${text}`,
198
+ name: "MolyMemo-Push",
199
+ sessionKey: `hook:molymemo:push:${Date.now()}`,
200
+ deliver: true,
201
+ channel: pushChannel,
202
+ };
203
+ if (pushTo)
204
+ body.to = pushTo;
205
+ const res = await fetch(url, {
206
+ method: "POST",
207
+ headers: {
208
+ "Content-Type": "application/json",
209
+ Authorization: `Bearer ${hooksToken}`,
210
+ },
211
+ body: JSON.stringify(body),
212
+ });
213
+ if (res.ok) {
214
+ markSuggestionsPushed(suggestionsPath, unpushed.map((s) => s.id));
215
+ logger.info(`Pushed ${unpushed.length} suggestion(s)`);
216
+ }
217
+ else {
218
+ const responseText = await res.text();
219
+ logger.warn(`Push suggestions failed: ${res.status} ${responseText}`);
220
+ }
221
+ }
222
+ catch (err) {
223
+ logger.error(`Failed to push suggestions: ${err}`);
224
+ }
225
+ };
226
+ // ── File sync ──
78
227
  const writeFileData = (msg) => {
79
228
  if (msg.mode === "none") {
80
229
  logger.info(`No updates for ${msg.path}`);
@@ -93,9 +242,9 @@ const molyMemoPlugin = {
93
242
  const existingMeta = readMeta(msg.path);
94
243
  const meta = {
95
244
  path: msg.path,
96
- latest_at: (msg.latest_at && msg.latest_at !== ZERO_TIME)
245
+ latest_at: msg.latest_at && msg.latest_at !== ZERO_TIME
97
246
  ? msg.latest_at
98
- : existingMeta?.latest_at ?? "",
247
+ : (existingMeta?.latest_at ?? ""),
99
248
  };
100
249
  if (msg.title)
101
250
  meta.title = msg.title;
@@ -127,6 +276,9 @@ const molyMemoPlugin = {
127
276
  const result = await activeClient.pullFile(filePath);
128
277
  writeFileData(result);
129
278
  syncWorker.onPullComplete(filePath, result.latest_at);
279
+ if (result.mode !== "none") {
280
+ resetSessionTimer(result.path);
281
+ }
130
282
  }
131
283
  catch (err) {
132
284
  logger.error(`Failed to pull ${filePath}: ${err}`);
@@ -188,7 +340,10 @@ const molyMemoPlugin = {
188
340
  };
189
341
  }
190
342
  catch (err) {
191
- return { content: [{ type: "text", text: `Error: ${err}` }], details: {} };
343
+ return {
344
+ content: [{ type: "text", text: `Error: ${err}` }],
345
+ details: {},
346
+ };
192
347
  }
193
348
  },
194
349
  });
@@ -197,7 +352,7 @@ const molyMemoPlugin = {
197
352
  wsUrl: WS_URL,
198
353
  apiUrl: API_URL,
199
354
  connected: serverClient?.isConnected() ?? false,
200
- dataDir: getMemoryDir(),
355
+ dataDir: getDataDir(),
201
356
  });
202
357
  });
203
358
  api.registerService({
@@ -216,9 +371,23 @@ const molyMemoPlugin = {
216
371
  else {
217
372
  logger.warn("Failed to connect, will retry...");
218
373
  }
374
+ if (pushChannel) {
375
+ pushTimer = setInterval(() => {
376
+ pushSuggestions().catch((err) => logger.error(`Push error: ${err}`));
377
+ }, pushIntervalMs);
378
+ logger.info(`Push timer started (interval: ${config.pushIntervalMinutes ?? 1}min, channel: ${pushChannel})`);
379
+ }
219
380
  },
220
381
  stop: async () => {
221
382
  logger.info("MolyMemo service stopping...");
383
+ if (pushTimer) {
384
+ clearInterval(pushTimer);
385
+ pushTimer = null;
386
+ }
387
+ for (const timer of sessionTimers.values()) {
388
+ clearTimeout(timer);
389
+ }
390
+ sessionTimers.clear();
222
391
  await serverClient?.disconnect();
223
392
  },
224
393
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  "name": "MolyMemo",
4
4
  "description": "Sync AI chat sessions from MolyMemo server",
5
5
  "version": "1.0.0",
6
+ "skills": ["./skills"],
6
7
  "configSchema": {
7
8
  "type": "object",
8
9
  "additionalProperties": false,
@@ -15,6 +16,32 @@
15
16
  "type": "boolean",
16
17
  "description": "Enable debug logging for sent/received messages",
17
18
  "default": false
19
+ },
20
+ "maxSuggestions": {
21
+ "type": "integer",
22
+ "description": "Maximum number of suggestions to keep in the list",
23
+ "default": 10,
24
+ "minimum": 1
25
+ },
26
+ "pushIntervalMinutes": {
27
+ "type": "integer",
28
+ "description": "Interval in minutes between push notification checks",
29
+ "default": 1,
30
+ "minimum": 1
31
+ },
32
+ "pushChannel": {
33
+ "type": "string",
34
+ "description": "Channel for pushing suggestions (e.g., telegram, feishu)"
35
+ },
36
+ "pushTo": {
37
+ "type": "string",
38
+ "description": "Target user for push notifications (optional, uses channel default if omitted)"
39
+ },
40
+ "sessionIdleMinutes": {
41
+ "type": "integer",
42
+ "description": "Minutes of session inactivity before triggering agent analysis",
43
+ "default": 5,
44
+ "minimum": 1
18
45
  }
19
46
  }
20
47
  }
@@ -0,0 +1,18 @@
1
+ export interface SuggestionContext {
2
+ platform: string;
3
+ sessionPath: string;
4
+ summary: string;
5
+ }
6
+ export interface Suggestion {
7
+ id: string;
8
+ name: string;
9
+ content: string;
10
+ context: SuggestionContext;
11
+ createdAt: string;
12
+ pushed: boolean;
13
+ }
14
+ export declare function readSuggestions(filePath: string): Suggestion[];
15
+ export declare function writeSuggestionsAtomic(filePath: string, suggestions: Suggestion[]): void;
16
+ export declare function markSuggestionsPushed(filePath: string, ids: string[]): void;
17
+ export declare function getUnpushedSuggestions(filePath: string): Suggestion[];
18
+ //# sourceMappingURL=suggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions.d.ts","sourceRoot":"","sources":["../src/suggestions.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAS9D;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,UAAU,EAAE,GACxB,IAAI,CAUN;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EAAE,GACZ,IAAI,CAWN;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAErE"}
@@ -0,0 +1,40 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as crypto from "node:crypto";
4
+ export function readSuggestions(filePath) {
5
+ try {
6
+ const raw = fs.readFileSync(filePath, "utf-8");
7
+ const data = JSON.parse(raw);
8
+ if (!Array.isArray(data))
9
+ return [];
10
+ return data;
11
+ }
12
+ catch {
13
+ return [];
14
+ }
15
+ }
16
+ export function writeSuggestionsAtomic(filePath, suggestions) {
17
+ const dir = path.dirname(filePath);
18
+ if (!fs.existsSync(dir))
19
+ fs.mkdirSync(dir, { recursive: true });
20
+ const tmpPath = `${filePath}.${crypto.randomBytes(6).toString("hex")}.tmp`;
21
+ fs.writeFileSync(tmpPath, JSON.stringify(suggestions, null, 2) + "\n", "utf-8");
22
+ fs.renameSync(tmpPath, filePath);
23
+ }
24
+ export function markSuggestionsPushed(filePath, ids) {
25
+ const suggestions = readSuggestions(filePath);
26
+ const idSet = new Set(ids);
27
+ let changed = false;
28
+ for (const s of suggestions) {
29
+ if (idSet.has(s.id) && !s.pushed) {
30
+ s.pushed = true;
31
+ changed = true;
32
+ }
33
+ }
34
+ if (changed)
35
+ writeSuggestionsAtomic(filePath, suggestions);
36
+ }
37
+ export function getUnpushedSuggestions(filePath) {
38
+ return readSuggestions(filePath).filter((s) => !s.pushed);
39
+ }
40
+ //# sourceMappingURL=suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../src/suggestions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAiBtC,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,IAAoB,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAgB,EAChB,WAAyB;IAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3E,EAAE,CAAC,aAAa,CACd,OAAO,EACP,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAC3C,OAAO,CACR,CAAC;IACF,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,GAAa;IAEb,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACjC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,OAAO;QAAE,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC"}
@@ -3,6 +3,7 @@
3
3
  "name": "MolyMemo",
4
4
  "description": "Sync AI chat sessions from MolyMemo server",
5
5
  "version": "1.0.0",
6
+ "skills": ["./skills"],
6
7
  "configSchema": {
7
8
  "type": "object",
8
9
  "additionalProperties": false,
@@ -15,6 +16,32 @@
15
16
  "type": "boolean",
16
17
  "description": "Enable debug logging for sent/received messages",
17
18
  "default": false
19
+ },
20
+ "maxSuggestions": {
21
+ "type": "integer",
22
+ "description": "Maximum number of suggestions to keep in the list",
23
+ "default": 10,
24
+ "minimum": 1
25
+ },
26
+ "pushIntervalMinutes": {
27
+ "type": "integer",
28
+ "description": "Interval in minutes between push notification checks",
29
+ "default": 1,
30
+ "minimum": 1
31
+ },
32
+ "pushChannel": {
33
+ "type": "string",
34
+ "description": "Channel for pushing suggestions (e.g., telegram, feishu)"
35
+ },
36
+ "pushTo": {
37
+ "type": "string",
38
+ "description": "Target user for push notifications (optional, uses channel default if omitted)"
39
+ },
40
+ "sessionIdleMinutes": {
41
+ "type": "integer",
42
+ "description": "Minutes of session inactivity before triggering agent analysis",
43
+ "default": 5,
44
+ "minimum": 1
18
45
  }
19
46
  }
20
47
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "molymemo",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "description": "OpenClaw plugin for MolyMemo - sync AI chat sessions",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,7 +13,8 @@
13
13
  },
14
14
  "files": [
15
15
  "dist",
16
- "openclaw.plugin.json"
16
+ "openclaw.plugin.json",
17
+ "skills"
17
18
  ],
18
19
  "keywords": [
19
20
  "openclaw",
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: molymemo-context
3
+ description: Provide execution context for MolyMemo suggestions by locating relevant chat history and memory insights
4
+ globs:
5
+ - "molymemo-suggestions.json"
6
+ ---
7
+
8
+ # MolyMemo Context Skill
9
+
10
+ When the user wants to execute or explore a suggestion from MolyMemo, follow these steps to gather the full execution context.
11
+
12
+ ## Steps
13
+
14
+ 1. **Read the suggestion list**
15
+ Read `molymemo-suggestions.json` in the workspace root. It is a JSON array of suggestion objects.
16
+
17
+ 2. **Match the user's intent**
18
+ Find the suggestion entry that matches what the user is asking about — match by name, content keywords, or related topic.
19
+
20
+ 3. **Extract context from the matched suggestion**
21
+ Each suggestion has a `context` object with three key fields:
22
+ - `platform` — The AI platform where the original conversation happened (e.g., ChatGPT, Gemini, DeepSeek).
23
+ - `summary` — A 2–5 sentence summary of the relevant discussion and conclusions. This is your **primary context source** — it is designed to be self-sufficient for most tasks.
24
+ - `sessionPath` — Relative path to the original conversation file under `molymemo/` (e.g., `ChatGPT/abc123.md`).
25
+
26
+ 4. **Deepen context if needed**
27
+ If the summary alone is not detailed enough for the task at hand:
28
+ - Read the full conversation file at `molymemo/{context.sessionPath}` using the Read tool.
29
+ - Use the `memory_search` tool to search long-term memory for related historical insights (previously extracted to `memory/` by MolyMemo analysis cycles).
30
+
31
+ 5. **Execute with context**
32
+ With the gathered background — platform, summary, full conversation details, and related memory — proceed to help the user with their request. You now have sufficient context to act.
33
+
34
+ ## Tips
35
+
36
+ - Always start with the `summary` field. Only fall back to reading the full session file when the summary lacks specific details you need.
37
+ - The `memory_search` tool can surface previously extracted insights that complement the current suggestion's context.
38
+ - Suggestions marked with `"pushed": true` have already been sent to the user; those with `"pushed": false` are new.