@farazirfan/costar-server-executor 1.6.0 → 1.7.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 (62) hide show
  1. package/dist/agent/agent.d.ts +14 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +57 -2
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/pi-embedded-runner/system-prompt.d.ts +4 -1
  6. package/dist/agent/pi-embedded-runner/system-prompt.d.ts.map +1 -1
  7. package/dist/agent/pi-embedded-runner/system-prompt.js +104 -17
  8. package/dist/agent/pi-embedded-runner/system-prompt.js.map +1 -1
  9. package/dist/agent/pi-embedded-runner/tools.d.ts +10 -0
  10. package/dist/agent/pi-embedded-runner/tools.d.ts.map +1 -1
  11. package/dist/agent/pi-embedded-runner/tools.js +67 -0
  12. package/dist/agent/pi-embedded-runner/tools.js.map +1 -1
  13. package/dist/config/types.d.ts +13 -0
  14. package/dist/config/types.d.ts.map +1 -1
  15. package/dist/heartbeat/runner.d.ts +10 -8
  16. package/dist/heartbeat/runner.d.ts.map +1 -1
  17. package/dist/heartbeat/runner.js +124 -47
  18. package/dist/heartbeat/runner.js.map +1 -1
  19. package/dist/memory/curation-state.d.ts +51 -0
  20. package/dist/memory/curation-state.d.ts.map +1 -0
  21. package/dist/memory/curation-state.js +82 -0
  22. package/dist/memory/curation-state.js.map +1 -0
  23. package/dist/memory/curator.d.ts +73 -0
  24. package/dist/memory/curator.d.ts.map +1 -0
  25. package/dist/memory/curator.js +198 -0
  26. package/dist/memory/curator.js.map +1 -0
  27. package/dist/memory/daily-log.d.ts +56 -0
  28. package/dist/memory/daily-log.d.ts.map +1 -0
  29. package/dist/memory/daily-log.js +176 -0
  30. package/dist/memory/daily-log.js.map +1 -0
  31. package/dist/memory/index.d.ts +10 -0
  32. package/dist/memory/index.d.ts.map +1 -0
  33. package/dist/memory/index.js +13 -0
  34. package/dist/memory/index.js.map +1 -0
  35. package/dist/supabase/index.d.ts +2 -2
  36. package/dist/supabase/index.d.ts.map +1 -1
  37. package/dist/supabase/index.js +2 -2
  38. package/dist/supabase/index.js.map +1 -1
  39. package/dist/supabase/notifications.d.ts.map +1 -1
  40. package/dist/supabase/notifications.js +10 -1
  41. package/dist/supabase/notifications.js.map +1 -1
  42. package/dist/supabase/requests.d.ts +10 -0
  43. package/dist/supabase/requests.d.ts.map +1 -1
  44. package/dist/supabase/requests.js +34 -0
  45. package/dist/supabase/requests.js.map +1 -1
  46. package/dist/supabase/workspace-storage.d.ts +41 -0
  47. package/dist/supabase/workspace-storage.d.ts.map +1 -1
  48. package/dist/supabase/workspace-storage.js +126 -0
  49. package/dist/supabase/workspace-storage.js.map +1 -1
  50. package/dist/tools/message.d.ts +8 -2
  51. package/dist/tools/message.d.ts.map +1 -1
  52. package/dist/tools/message.js +183 -9
  53. package/dist/tools/message.js.map +1 -1
  54. package/dist/workspace/templates.d.ts +3 -3
  55. package/dist/workspace/templates.d.ts.map +1 -1
  56. package/dist/workspace/templates.js +97 -69
  57. package/dist/workspace/templates.js.map +1 -1
  58. package/dist/workspace/workspace.d.ts +2 -1
  59. package/dist/workspace/workspace.d.ts.map +1 -1
  60. package/dist/workspace/workspace.js +19 -4
  61. package/dist/workspace/workspace.js.map +1 -1
  62. package/package.json +1 -1
@@ -193,6 +193,40 @@ export async function searchUserRequests(params) {
193
193
  throw err;
194
194
  }
195
195
  }
196
+ /**
197
+ * Get new user requests since a given cursor (timestamp + optional ID).
198
+ * Used by the memory curation system to fetch only unprocessed client conversations.
199
+ *
200
+ * @param userId - User ID to filter by
201
+ * @param afterTimestamp - Only return requests created after this ISO timestamp (exclusive)
202
+ * @param limit - Max number of requests to return (default: 30)
203
+ * @returns Completed user requests ordered by created_at ASC (oldest first)
204
+ */
205
+ export async function getNewUserRequestsSince(userId, afterTimestamp, limit = 30) {
206
+ const supabase = getSupabase();
207
+ try {
208
+ let query = supabase
209
+ .from("user_requests")
210
+ .select("*")
211
+ .eq("user_id", userId)
212
+ .eq("status", "completed")
213
+ .order("created_at", { ascending: true })
214
+ .limit(limit);
215
+ if (afterTimestamp) {
216
+ query = query.gt("created_at", afterTimestamp);
217
+ }
218
+ const { data, error } = await query;
219
+ if (error) {
220
+ console.error("[SUPABASE] Error fetching new user requests:", error);
221
+ return [];
222
+ }
223
+ return (data || []);
224
+ }
225
+ catch (err) {
226
+ console.error("[SUPABASE] Error in getNewUserRequestsSince:", err);
227
+ return [];
228
+ }
229
+ }
196
230
  /**
197
231
  * Get user requests statistics
198
232
  */
@@ -1 +1 @@
1
- {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/supabase/requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/supabase/requests.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,47 @@ export declare function syncAllLocalFilesToStorage(userId: string, localWorkspac
47
47
  * Check if a workspace file exists in storage
48
48
  */
49
49
  export declare function workspaceFileExists(userId: string, fileName: string): Promise<boolean>;
50
+ /**
51
+ * Upload all memory/*.md files from local to Supabase Storage.
52
+ *
53
+ * @param userId - User ID for storage path
54
+ * @param localWorkspaceDir - Local workspace directory
55
+ * @returns Array of uploaded file names
56
+ */
57
+ export declare function syncMemoryDirToStorage(userId: string, localWorkspaceDir: string): Promise<string[]>;
58
+ /**
59
+ * Download memory/*.md files from Supabase Storage to local.
60
+ *
61
+ * @param userId - User ID for storage path
62
+ * @param localWorkspaceDir - Local workspace directory
63
+ * @returns Array of downloaded file names
64
+ */
65
+ export declare function syncMemoryDirFromStorage(userId: string, localWorkspaceDir: string): Promise<string[]>;
66
+ /**
67
+ * Delete a specific memory file from Supabase Storage.
68
+ *
69
+ * @param userId - User ID for storage path
70
+ * @param fileName - File name (e.g., "2026-02-05.md")
71
+ * @returns true if deleted successfully
72
+ */
73
+ export declare function deleteMemoryFileFromStorage(userId: string, fileName: string): Promise<boolean>;
74
+ /**
75
+ * Sync the .curation_state.json file to Storage.
76
+ * This ensures the curation state survives sandbox restarts.
77
+ *
78
+ * @param userId - User ID for storage path
79
+ * @param localWorkspaceDir - Local workspace directory
80
+ * @returns true if synced successfully
81
+ */
82
+ export declare function syncCurationStateToStorage(userId: string, localWorkspaceDir: string): Promise<boolean>;
83
+ /**
84
+ * Download .curation_state.json from Storage to local.
85
+ *
86
+ * @param userId - User ID for storage path
87
+ * @param localWorkspaceDir - Local workspace directory
88
+ * @returns true if downloaded successfully
89
+ */
90
+ export declare function syncCurationStateFromStorage(userId: string, localWorkspaceDir: string): Promise<boolean>;
50
91
  /**
51
92
  * Delete a workspace file from storage
52
93
  */
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-storage.d.ts","sourceRoot":"","sources":["../../src/supabase/workspace-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,eAAO,MAAM,eAAe,0FAOlB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAcjE;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BxB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAe9B;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC;IACT,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC,CAqCD;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC,CA6BD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAmBlB"}
1
+ {"version":3,"file":"workspace-storage.d.ts","sourceRoot":"","sources":["../../src/supabase/workspace-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,eAAO,MAAM,eAAe,0FAOlB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAcjE;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BxB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAe9B;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC;IACT,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC,CA6CD;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC,CAqCD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAMD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAqCnB;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAmBlB"}
@@ -129,6 +129,14 @@ export async function syncWorkspaceToLocal(userId, localWorkspaceDir) {
129
129
  result.failed.push(fileName);
130
130
  }
131
131
  }
132
+ // Also sync memory/ directory and curation state from Storage
133
+ try {
134
+ await syncMemoryDirFromStorage(userId, localWorkspaceDir);
135
+ await syncCurationStateFromStorage(userId, localWorkspaceDir);
136
+ }
137
+ catch (err) {
138
+ console.warn("[STORAGE] Failed to sync memory dir/curation state from Storage:", err);
139
+ }
132
140
  console.log(`[STORAGE] Workspace sync complete: ${result.synced.length} synced, ` +
133
141
  `${result.missing.length} missing, ${result.failed.length} failed`);
134
142
  return result;
@@ -169,6 +177,14 @@ export async function syncAllLocalFilesToStorage(userId, localWorkspaceDir) {
169
177
  result.failed.push(fileName);
170
178
  }
171
179
  }
180
+ // Also sync memory/ directory and curation state to Storage
181
+ try {
182
+ await syncMemoryDirToStorage(userId, localWorkspaceDir);
183
+ await syncCurationStateToStorage(userId, localWorkspaceDir);
184
+ }
185
+ catch (err) {
186
+ console.warn("[STORAGE] Failed to sync memory dir/curation state to Storage:", err);
187
+ }
172
188
  console.log(`[STORAGE] Local to storage sync complete: ${result.uploaded.length} uploaded, ` +
173
189
  `${result.missing.length} missing, ${result.failed.length} failed`);
174
190
  return result;
@@ -193,6 +209,116 @@ export async function workspaceFileExists(userId, fileName) {
193
209
  return false;
194
210
  }
195
211
  }
212
+ // ═══════════════════════════════════════════════════
213
+ // MEMORY DIRECTORY SYNC
214
+ // ═══════════════════════════════════════════════════
215
+ /**
216
+ * Upload all memory/*.md files from local to Supabase Storage.
217
+ *
218
+ * @param userId - User ID for storage path
219
+ * @param localWorkspaceDir - Local workspace directory
220
+ * @returns Array of uploaded file names
221
+ */
222
+ export async function syncMemoryDirToStorage(userId, localWorkspaceDir) {
223
+ const memDir = path.join(localWorkspaceDir, "memory");
224
+ if (!fs.existsSync(memDir))
225
+ return [];
226
+ const files = fs.readdirSync(memDir).filter((f) => f.endsWith(".md"));
227
+ const uploaded = [];
228
+ for (const fileName of files) {
229
+ const localPath = path.join(memDir, fileName);
230
+ const content = fs.readFileSync(localPath, "utf-8");
231
+ const storagePath = `memory/${fileName}`;
232
+ const ok = await uploadWorkspaceFile(userId, storagePath, content);
233
+ if (ok)
234
+ uploaded.push(fileName);
235
+ }
236
+ if (uploaded.length > 0) {
237
+ console.log(`[STORAGE] Uploaded ${uploaded.length} memory files to Storage`);
238
+ }
239
+ return uploaded;
240
+ }
241
+ /**
242
+ * Download memory/*.md files from Supabase Storage to local.
243
+ *
244
+ * @param userId - User ID for storage path
245
+ * @param localWorkspaceDir - Local workspace directory
246
+ * @returns Array of downloaded file names
247
+ */
248
+ export async function syncMemoryDirFromStorage(userId, localWorkspaceDir) {
249
+ const supabase = getSupabase();
250
+ const storagePath = `${userId}/memory`;
251
+ try {
252
+ const { data: files, error } = await supabase.storage
253
+ .from(WORKSPACE_BUCKET)
254
+ .list(storagePath);
255
+ if (error || !files || files.length === 0)
256
+ return [];
257
+ // Ensure local memory/ dir exists
258
+ const memDir = path.join(localWorkspaceDir, "memory");
259
+ if (!fs.existsSync(memDir)) {
260
+ fs.mkdirSync(memDir, { recursive: true });
261
+ }
262
+ const downloaded = [];
263
+ for (const file of files) {
264
+ if (!file.name.endsWith(".md"))
265
+ continue;
266
+ const content = await downloadWorkspaceFile(userId, `memory/${file.name}`);
267
+ if (content !== null) {
268
+ fs.writeFileSync(path.join(memDir, file.name), content, "utf-8");
269
+ downloaded.push(file.name);
270
+ }
271
+ }
272
+ if (downloaded.length > 0) {
273
+ console.log(`[STORAGE] Downloaded ${downloaded.length} memory files from Storage`);
274
+ }
275
+ return downloaded;
276
+ }
277
+ catch (err) {
278
+ console.warn("[STORAGE] Failed to sync memory dir from Storage:", err);
279
+ return [];
280
+ }
281
+ }
282
+ /**
283
+ * Delete a specific memory file from Supabase Storage.
284
+ *
285
+ * @param userId - User ID for storage path
286
+ * @param fileName - File name (e.g., "2026-02-05.md")
287
+ * @returns true if deleted successfully
288
+ */
289
+ export async function deleteMemoryFileFromStorage(userId, fileName) {
290
+ return deleteWorkspaceFile(userId, `memory/${fileName}`);
291
+ }
292
+ /**
293
+ * Sync the .curation_state.json file to Storage.
294
+ * This ensures the curation state survives sandbox restarts.
295
+ *
296
+ * @param userId - User ID for storage path
297
+ * @param localWorkspaceDir - Local workspace directory
298
+ * @returns true if synced successfully
299
+ */
300
+ export async function syncCurationStateToStorage(userId, localWorkspaceDir) {
301
+ const localPath = path.join(localWorkspaceDir, ".curation_state.json");
302
+ if (!fs.existsSync(localPath))
303
+ return false;
304
+ const content = fs.readFileSync(localPath, "utf-8");
305
+ return uploadWorkspaceFile(userId, ".curation_state.json", content);
306
+ }
307
+ /**
308
+ * Download .curation_state.json from Storage to local.
309
+ *
310
+ * @param userId - User ID for storage path
311
+ * @param localWorkspaceDir - Local workspace directory
312
+ * @returns true if downloaded successfully
313
+ */
314
+ export async function syncCurationStateFromStorage(userId, localWorkspaceDir) {
315
+ const content = await downloadWorkspaceFile(userId, ".curation_state.json");
316
+ if (content === null)
317
+ return false;
318
+ const localPath = path.join(localWorkspaceDir, ".curation_state.json");
319
+ fs.writeFileSync(localPath, content, "utf-8");
320
+ return true;
321
+ }
196
322
  /**
197
323
  * Delete a workspace file from storage
198
324
  */
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-storage.js","sourceRoot":"","sources":["../../src/supabase/workspace-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-storage.js","sourceRoot":"","sources":["../../src/supabase/workspace-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,SAAS;IACT,SAAS;IACT,WAAW;IACX,aAAa;IACb,WAAW;IACX,cAAc;CACN,CAAC;AAIX;;GAEG;AACH,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAElC;;GAEG;AACH,SAAS,cAAc,CAAC,MAAc,EAAE,QAAgB;IACtD,OAAO,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAc,EACd,QAAgB;IAEhB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;aAC3C,IAAI,CAAC,gBAAgB,CAAC;aACtB,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEzB,IAAI,KAAK,EAAE,CAAC;YACV,mEAAmE;YACnE,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3E,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uBAAuB;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,QAAgB,EAChB,OAAe;IAEf,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;aACrC,IAAI,CAAC,gBAAgB,CAAC;aACtB,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE;YAC5B,WAAW,EAAE,eAAe;YAC5B,MAAM,EAAE,IAAI,EAAE,sBAAsB;SACrC,CAAC,CAAC;QAEL,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,6BAA6B,QAAQ,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACvE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAc;IAEd,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAExC,iCAAiC;IACjC,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9D,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,6BAA6B,MAAM,EAAE,CAAC,CAAC;IACrF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAc,EACd,iBAAyB;IAMzB,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,EAAc;QACtB,MAAM,EAAE,EAAc;QACtB,OAAO,EAAE,EAAc;KACxB,CAAC;IAEF,oCAAoC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtC,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,+BAA+B;IAC/B,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAE9D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;YACzD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC;QACH,MAAM,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC1D,MAAM,4BAA4B,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,kEAAkE,EAAE,GAAG,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,CAAC,GAAG,CACT,sCAAsC,MAAM,CAAC,MAAM,CAAC,MAAM,WAAW;QACrE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,SAAS,CACnE,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAc,EACd,iBAAyB,EACzB,QAAgB;IAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAEzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,mCAAmC,SAAS,EAAE,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAc,EACd,iBAAyB;IAMzB,MAAM,MAAM,GAAG;QACb,QAAQ,EAAE,EAAc;QACxB,MAAM,EAAE,EAAc;QACtB,OAAO,EAAE,EAAc;KACxB,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAEzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAClF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC;QACH,MAAM,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACxD,MAAM,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,gEAAgE,EAAE,GAAG,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,CAAC,GAAG,CACT,6CAA6C,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa;QAChF,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,SAAS,CACnE,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,QAAgB;IAEhB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;aAC3C,IAAI,CAAC,gBAAgB,CAAC;aACtB,IAAI,CAAC,MAAM,EAAE;YACZ,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QAEL,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,wBAAwB;AACxB,sDAAsD;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAc,EACd,iBAAyB;IAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,UAAU,QAAQ,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,CAAC,MAAM,0BAA0B,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAc,EACd,iBAAyB;IAEzB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,GAAG,MAAM,SAAS,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;aAClD,IAAI,CAAC,gBAAgB,CAAC;aACtB,IAAI,CAAC,WAAW,CAAC,CAAC;QAErB,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAErD,kCAAkC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAEzC,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3E,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBACjE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,CAAC,MAAM,4BAA4B,CAAC,CAAC;QACrF,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QACvE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAAc,EACd,QAAgB;IAEhB,OAAO,mBAAmB,CAAC,MAAM,EAAE,UAAU,QAAQ,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAc,EACd,iBAAyB;IAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;IACvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAE5C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAc,EACd,iBAAyB;IAEzB,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC5E,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;IACvE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,QAAgB;IAEhB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;aACrC,IAAI,CAAC,gBAAgB,CAAC;aACtB,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAEzB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,4BAA4B,QAAQ,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,7 +1,13 @@
1
1
  /**
2
2
  * CoStar Server Executor - Message Tool (Push Notifications)
3
- * Cloned from OpenClaw's agents/tools/message-tool.ts pattern
4
- * Wired to Supabase notifications table for real delivery
3
+ *
4
+ * The ONLY path for user-facing notifications. Heartbeat responses are never
5
+ * auto-sent — the agent must explicitly call this tool to notify the user.
6
+ *
7
+ * Includes:
8
+ * - Structured metadata (senderName, snippet)
9
+ * - Programmatic quality gate (rejects self-narration, internal jargon)
10
+ * - Smart title generation (extracts first sentence if no title provided)
5
11
  */
6
12
  import type { AnyAgentTool } from "../types/tool.js";
7
13
  export declare function createMessageTool(): AnyAgentTool;
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAcrD,wBAAgB,iBAAiB,IAAI,YAAY,CA8ChD"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAkKrD,wBAAgB,iBAAiB,IAAI,YAAY,CAiGhD"}
@@ -1,47 +1,221 @@
1
1
  /**
2
2
  * CoStar Server Executor - Message Tool (Push Notifications)
3
- * Cloned from OpenClaw's agents/tools/message-tool.ts pattern
4
- * Wired to Supabase notifications table for real delivery
3
+ *
4
+ * The ONLY path for user-facing notifications. Heartbeat responses are never
5
+ * auto-sent — the agent must explicitly call this tool to notify the user.
6
+ *
7
+ * Includes:
8
+ * - Structured metadata (senderName, snippet)
9
+ * - Programmatic quality gate (rejects self-narration, internal jargon)
10
+ * - Smart title generation (extracts first sentence if no title provided)
5
11
  */
6
12
  import { Type } from "@sinclair/typebox";
7
13
  import { jsonResult, readStringParam } from "../utils/tool-helpers.js";
8
14
  import { sendNotification } from "../supabase/notifications.js";
15
+ // ═══════════════════════════════════════════════════
16
+ // QUALITY GATE — reject self-narration & internal jargon
17
+ // ═══════════════════════════════════════════════════
18
+ /** Patterns that indicate self-narration (agent talking about its own process) */
19
+ const NARRATION_PREFIXES = [
20
+ "i am now",
21
+ "i'm now",
22
+ "i need to",
23
+ "i'll check",
24
+ "i'll now",
25
+ "i will now",
26
+ "i will check",
27
+ "let me check",
28
+ "let me look",
29
+ "let me search",
30
+ "let me find",
31
+ "let me review",
32
+ "processing",
33
+ "checking",
34
+ "searching for",
35
+ "looking into",
36
+ "analyzing",
37
+ "reviewing the",
38
+ "running the",
39
+ "executing",
40
+ "initiating",
41
+ "beginning to",
42
+ "starting to",
43
+ "about to",
44
+ ];
45
+ /** Internal terms that should never appear in user-facing notifications */
46
+ const INTERNAL_TERMS = [
47
+ "cron job",
48
+ "heartbeat",
49
+ "heartbeat_ok",
50
+ "system prompt",
51
+ "web_search tool",
52
+ "message tool",
53
+ "tool call",
54
+ "api call",
55
+ "supabase",
56
+ "workspace file",
57
+ "memory.md",
58
+ "heartbeat.md",
59
+ "agents.md",
60
+ "soul.md",
61
+ "user.md",
62
+ "curation",
63
+ "system event",
64
+ "pi-ai",
65
+ "executor",
66
+ ];
67
+ /** Minimum useful message length */
68
+ const MIN_MESSAGE_LENGTH = 20;
69
+ /**
70
+ * Check if a notification message passes quality standards.
71
+ * Rejects self-narration, internal jargon, and too-short messages.
72
+ */
73
+ function checkMessageQuality(text) {
74
+ const trimmed = text.trim();
75
+ const lower = trimmed.toLowerCase();
76
+ // Too short to be useful
77
+ if (trimmed.length < MIN_MESSAGE_LENGTH) {
78
+ return { passed: false, reason: `Message too short (${trimmed.length} chars, min ${MIN_MESSAGE_LENGTH}). Provide useful content.` };
79
+ }
80
+ // Check for self-narration prefixes
81
+ for (const prefix of NARRATION_PREFIXES) {
82
+ if (lower.startsWith(prefix)) {
83
+ return {
84
+ passed: false,
85
+ reason: `Rejected: message starts with "${prefix}..." — this is self-narration. Only send results, not process updates. Do the work silently, then send the result.`,
86
+ };
87
+ }
88
+ }
89
+ // Check for internal terms
90
+ for (const term of INTERNAL_TERMS) {
91
+ if (lower.includes(term)) {
92
+ return {
93
+ passed: false,
94
+ reason: `Rejected: message contains internal term "${term}". Never mention system internals to the user. Rewrite in plain language.`,
95
+ };
96
+ }
97
+ }
98
+ return { passed: true };
99
+ }
100
+ // ═══════════════════════════════════════════════════
101
+ // SMART TITLE GENERATION
102
+ // ═══════════════════════════════════════════════════
103
+ /**
104
+ * Generate a smart title from the message text if no explicit title is provided.
105
+ * Extracts the first sentence or truncates to a reasonable length.
106
+ */
107
+ function generateSmartTitle(text) {
108
+ const trimmed = text.trim();
109
+ // Try to extract first sentence (up to period, exclamation, or question mark)
110
+ const sentenceMatch = trimmed.match(/^(.+?[.!?])\s/);
111
+ if (sentenceMatch && sentenceMatch[1].length <= 80) {
112
+ return sentenceMatch[1];
113
+ }
114
+ // Try to extract up to first em dash or colon (common in notification messages)
115
+ const dashMatch = trimmed.match(/^(.+?)\s[—–\-:]\s/);
116
+ if (dashMatch && dashMatch[1].length <= 80) {
117
+ return dashMatch[1];
118
+ }
119
+ // Truncate to 60 chars at word boundary
120
+ if (trimmed.length <= 60)
121
+ return trimmed;
122
+ const truncated = trimmed.slice(0, 60);
123
+ const lastSpace = truncated.lastIndexOf(" ");
124
+ return lastSpace > 30 ? truncated.slice(0, lastSpace) : truncated;
125
+ }
126
+ // ═══════════════════════════════════════════════════
127
+ // TOOL SCHEMA & IMPLEMENTATION
128
+ // ═══════════════════════════════════════════════════
9
129
  const MessageSchema = Type.Object({
10
130
  text: Type.String({ description: "Message text to send to user" }),
11
- title: Type.Optional(Type.String({ description: "Optional notification title" })),
131
+ title: Type.Optional(Type.String({ description: "Short notification title (1-5 words). If omitted, auto-generated from message text." })),
12
132
  priority: Type.Optional(Type.String({
13
133
  description: "Notification priority: low, normal, high (default: normal)",
14
134
  })),
135
+ actionUrl: Type.Optional(Type.String({
136
+ description: "Optional URL to open when user taps the notification (deep link or web URL)",
137
+ })),
138
+ files: Type.Optional(Type.Array(Type.Object({
139
+ path: Type.String({ description: "File path (e.g. /home/user/task/report.md)" }),
140
+ name: Type.String({ description: "Display name for the file" }),
141
+ type: Type.Optional(Type.String({ description: "File type: image, document, pdf, markdown, code, video, audio" })),
142
+ }), { description: "Files to attach to the notification (saved to /home/user/task/)" })),
15
143
  });
16
144
  export function createMessageTool() {
17
145
  return {
18
146
  label: "Message",
19
147
  name: "message",
20
- description: "Send push notification to user's mobile device. Use for important updates, alerts, or proactive notifications during heartbeat checks.",
148
+ description: "Send a message to the user's phone. This is the ONLY way to reach them your response text is never delivered.\n\n" +
149
+ "You are their personal AI assistant running 24/7. When you message them, it should feel like a thoughtful friend who's always looking out for them — not like an app notification.\n\n" +
150
+ "TONE — conversational, personal, genuinely helpful:\n" +
151
+ "- GOOD: 'Hey, Bitcoin just dipped to $89,500 — that's below the $90k mark you were watching!'\n" +
152
+ "- GOOD: 'Heads up — you've got that dentist appointment in 30 minutes. Might want to start heading out.'\n" +
153
+ "- GOOD: 'Your boss sent 2 emails that look pretty urgent — might want to check those.'\n" +
154
+ "- GOOD: 'Did some digging on the crypto market for you — put together a quick report in your files. Short version: ETH is up 12% this week.'\n" +
155
+ "- GOOD: 'Found some solid flights to Tokyo for next month. Best deal: JAL for $450 round trip.'\n" +
156
+ "- GOOD: 'Saw you were looking into competitors yesterday — I went ahead and pulled together a comparison. Saved it to your files.'\n" +
157
+ "- BAD: 'I am now checking Bitcoin prices...' (blocked — don't narrate, just do it)\n" +
158
+ "- BAD: 'Processing your request to monitor prices.' (blocked — robotic)\n" +
159
+ "- BAD: 'Alert: Bitcoin price threshold reached.' (too robotic — talk like a person)\n" +
160
+ "- NEVER sound like a system notification. Sound like a person who genuinely cares.\n" +
161
+ "- NEVER narrate your process — do the work, then share the result.\n" +
162
+ "- Keep it short (1-3 sentences). They see this on their lock screen.",
21
163
  parameters: MessageSchema,
22
164
  execute: async (_toolCallId, params) => {
23
165
  const text = readStringParam(params, "text", { required: true });
24
166
  const title = readStringParam(params, "title");
25
167
  const priority = readStringParam(params, "priority") || "normal";
168
+ const actionUrl = readStringParam(params, "actionUrl");
169
+ const files = params.files;
26
170
  const userId = process.env.USER_ID || "default";
171
+ // Quality gate — reject self-narration and internal jargon
172
+ const quality = checkMessageQuality(text);
173
+ if (!quality.passed) {
174
+ console.warn(`[MESSAGE] Quality gate REJECTED notification:`, {
175
+ reason: quality.reason,
176
+ text: text.slice(0, 100),
177
+ });
178
+ return jsonResult({
179
+ status: "rejected",
180
+ reason: quality.reason,
181
+ hint: "Rewrite the message with useful content for the user. No process narration, no internal terms.",
182
+ });
183
+ }
184
+ // Generate smart title if not provided
185
+ const finalTitle = title || generateSmartTitle(text);
186
+ // Build metadata for client UI
187
+ const snippet = text.length > 120 ? text.slice(0, 120).trim() + "..." : text;
188
+ const metadata = {
189
+ senderName: "CoStar",
190
+ sender: "costar-agent",
191
+ significance: priority,
192
+ snippet,
193
+ type: "message",
194
+ };
195
+ if (actionUrl) {
196
+ metadata.actionUrl = actionUrl;
197
+ }
198
+ if (files && files.length > 0) {
199
+ metadata.files = files;
200
+ }
27
201
  try {
28
202
  console.log(`[MESSAGE] Sending notification to user ${userId}:`, {
29
- title,
30
- text,
203
+ title: finalTitle,
204
+ text: text.slice(0, 100),
31
205
  priority,
32
206
  });
33
- // Write to Supabase notifications table (delivers to mobile via real-time)
34
207
  await sendNotification({
35
208
  user_id: userId,
36
209
  type: "message",
37
- title: title || "Message from CoStar",
210
+ title: finalTitle,
38
211
  message: text,
39
212
  priority: priority,
213
+ metadata,
40
214
  });
41
215
  return jsonResult({
42
216
  status: "sent",
43
217
  message: text,
44
- title,
218
+ title: finalTitle,
45
219
  priority,
46
220
  timestamp: new Date().toISOString(),
47
221
  });
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAAC;IAClE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,CAAC;IACjF,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,4DAA4D;KAC1E,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,WAAW,EACT,wIAAwI;QAC1I,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,KAAK,EAAE,WAAmB,EAAE,MAA+B,EAAE,EAAE;YACtE,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC;YACjE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;YAEhD,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,0CAA0C,MAAM,GAAG,EAAE;oBAC/D,KAAK;oBACL,IAAI;oBACJ,QAAQ;iBACT,CAAC,CAAC;gBAEH,2EAA2E;gBAC3E,MAAM,gBAAgB,CAAC;oBACrB,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,KAAK,IAAI,qBAAqB;oBACrC,OAAO,EAAE,IAAK;oBACd,QAAQ,EAAE,QAAqC;iBAChD,CAAC,CAAC;gBAEH,OAAO,UAAU,CAAC;oBAChB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,IAAI;oBACb,KAAK;oBACL,QAAQ;oBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,OAAO,CAAC,CAAC;gBACjE,OAAO,UAAU,CAAC;oBAChB,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,OAAO;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"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"}