@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
@@ -0,0 +1,198 @@
1
+ /**
2
+ * CoStar Server Executor - Memory Curator
3
+ *
4
+ * Incremental, cursor-based memory curation.
5
+ * Fetches only new/unprocessed data (client conversations + daily logs),
6
+ * builds a compact digest, and produces a curation prompt to append to heartbeats.
7
+ *
8
+ * The LLM then processes the digest and updates MEMORY.md, USER.md,
9
+ * and the daily log in a single heartbeat turn.
10
+ */
11
+ import { getNewUserRequestsSince } from "../supabase/requests.js";
12
+ import { readDailyLogSince, todayDateString } from "./daily-log.js";
13
+ /**
14
+ * Fetch unprocessed data since the last curation cursors.
15
+ *
16
+ * 1. Queries user_requests after lastProcessedRequestAt (new client conversations)
17
+ * 2. Reads today's daily log from lastProcessedLogSize offset (new LLM-written entries)
18
+ * Also checks yesterday if lastProcessedLogDate != today (handles midnight rollover)
19
+ * 3. Returns only the delta — if both empty, hasNewData = false
20
+ *
21
+ * @param userId - User ID for querying conversations
22
+ * @param workspaceDir - Workspace root for reading daily logs
23
+ * @param state - Current curation state (cursors)
24
+ * @param maxConversations - Max conversations to fetch per curation cycle
25
+ * @returns The delta of new data
26
+ */
27
+ export async function fetchUnprocessedData(userId, workspaceDir, state, maxConversations = 20) {
28
+ // 1. Fetch new client conversations from user_requests
29
+ const newConversations = [];
30
+ try {
31
+ const rows = await getNewUserRequestsSince(userId, state.lastProcessedRequestAt, maxConversations);
32
+ for (const row of rows) {
33
+ newConversations.push({
34
+ id: row.id,
35
+ request: row.request,
36
+ response: row.response ?? null,
37
+ createdAt: row.created_at,
38
+ });
39
+ }
40
+ }
41
+ catch (err) {
42
+ console.warn("[MEMORY] Failed to fetch new user requests:", err);
43
+ }
44
+ // 2. Read new daily log content
45
+ let newLogContent = "";
46
+ const today = todayDateString();
47
+ try {
48
+ // If the last processed log was from a previous day, read yesterday's remaining content
49
+ if (state.lastProcessedLogDate && state.lastProcessedLogDate !== today) {
50
+ const yesterdayResult = readDailyLogSince(workspaceDir, state.lastProcessedLogDate, state.lastProcessedLogSize);
51
+ if (yesterdayResult.content) {
52
+ newLogContent += yesterdayResult.content;
53
+ }
54
+ // For today's log, start from 0 since we haven't read it yet
55
+ const todayResult = readDailyLogSince(workspaceDir, today, 0);
56
+ if (todayResult.content) {
57
+ newLogContent += (newLogContent ? "\n\n" : "") + todayResult.content;
58
+ }
59
+ }
60
+ else {
61
+ // Same day or first run — read from last offset
62
+ const offset = state.lastProcessedLogDate === today ? state.lastProcessedLogSize : 0;
63
+ const result = readDailyLogSince(workspaceDir, today, offset);
64
+ if (result.content) {
65
+ newLogContent = result.content;
66
+ }
67
+ }
68
+ }
69
+ catch (err) {
70
+ console.warn("[MEMORY] Failed to read daily log:", err);
71
+ }
72
+ const hasNewData = newConversations.length > 0 || newLogContent.length > 0;
73
+ return {
74
+ newConversations,
75
+ newLogContent: newLogContent.trim(),
76
+ hasNewData,
77
+ };
78
+ }
79
+ /**
80
+ * Build a compact markdown digest from the curation delta.
81
+ * Caps total content at maxChars to keep the heartbeat prompt small.
82
+ *
83
+ * @param delta - The curation delta
84
+ * @param maxChars - Maximum characters for the digest (default: 3000)
85
+ * @returns Formatted markdown digest string
86
+ */
87
+ export function buildCurationDigest(delta, maxChars = 3000) {
88
+ const parts = [];
89
+ // Format new conversations
90
+ if (delta.newConversations.length > 0) {
91
+ parts.push(`### User Conversations (${delta.newConversations.length} new)`);
92
+ for (const conv of delta.newConversations) {
93
+ const timestamp = conv.createdAt.slice(0, 16).replace("T", " ");
94
+ const request = truncate(conv.request, 200);
95
+ const response = conv.response ? truncate(conv.response, 300) : "(no response)";
96
+ parts.push(`**[${timestamp}]** User: ${request}`);
97
+ parts.push(`Response: ${response}`);
98
+ parts.push("");
99
+ }
100
+ }
101
+ // Format new daily log content
102
+ if (delta.newLogContent) {
103
+ parts.push("### Server Activity (new daily log entries)");
104
+ parts.push(delta.newLogContent);
105
+ }
106
+ let digest = parts.join("\n");
107
+ // Trim if over budget
108
+ if (digest.length > maxChars) {
109
+ digest = digest.slice(0, maxChars - 50) + "\n\n[... digest truncated ...]";
110
+ }
111
+ return digest;
112
+ }
113
+ /**
114
+ * Build the curation prompt to append to the heartbeat message.
115
+ * Only called when new data exists.
116
+ *
117
+ * @param digest - The formatted digest from buildCurationDigest()
118
+ * @returns Full curation instructions + digest
119
+ */
120
+ export function buildCurationPrompt(digest) {
121
+ return `
122
+ MEMORY CURATION + PROACTIVE SIGNALS: New activity since your last check is below.
123
+
124
+ MEMORY CURATION — review and update:
125
+ 1. Update MEMORY.md with new facts, preferences, decisions, or lessons worth keeping.
126
+ 2. Update USER.md if you learned something new about the user.
127
+ 3. Write today's notes to memory/${todayDateString()}.md (create memory/ dir if needed).
128
+ 4. Do NOT duplicate what's already in MEMORY.md or USER.md.
129
+ 5. Keep MEMORY.md concise — it is loaded in every session's system prompt.
130
+ 6. Remove outdated entries from MEMORY.md if no longer relevant.
131
+ 7. Conversations below are from the user's mobile app — treat as context, don't re-execute.
132
+
133
+ PROACTIVE ACTION — analyze the activity below and cross-reference with what you know from MEMORY.md and USER.md. Think about what a thoughtful human assistant would do — not just monitoring, but real, substantive help:
134
+
135
+ TAKE ACTION NOW (during this heartbeat turn) when you spot opportunities to:
136
+ 8. Do research the user would find valuable (competitor analysis, market trends, topic deep-dives)
137
+ 9. Create useful documents (meeting prep notes, trip itineraries, project summaries, comparison tables)
138
+ 10. Prepare for upcoming events (gather context for tomorrow's meeting, draft agendas, check travel details)
139
+ 11. Follow up on things the user started but didn't finish (drafts, half-explored ideas, pending decisions)
140
+ 12. Find information the user will need soon (based on their calendar, projects, or recent conversations)
141
+ Save substantial outputs to /home/user/task/ (auto-synced to user's device) and notify via message tool.
142
+
143
+ UPDATE HEARTBEAT.md for ongoing monitoring when you detect:
144
+ 13. Recurring interests worth periodic checking (stocks, products, topics, people)
145
+ 14. Things the user is waiting on (replies, deliveries, results, approvals)
146
+ 15. Deadlines or events that need tracking over time
147
+ 16. Behavioral patterns worth supporting (daily routines, recurring needs)
148
+ Read HEARTBEAT.md first, then add: "- [ ] Check X — alert user if Y"
149
+
150
+ HEARTBEAT.md RULES:
151
+ 17. Do NOT add items already in HEARTBEAT.md — check before adding.
152
+ 18. Remove stale or resolved items (event passed, task done, user said stop).
153
+ 19. PRESERVE items the user added via the app — never remove user-requested monitoring.
154
+ 20. Keep under 10 items — each costs tokens every 30 minutes.
155
+ 21. If nothing warrants action or monitoring, that's fine. Don't force it.
156
+
157
+ ## New Since Last Check
158
+ ${digest}
159
+ `.trim();
160
+ }
161
+ /**
162
+ * Compute updated cursor state after a curation cycle.
163
+ *
164
+ * @param state - Previous curation state
165
+ * @param delta - The delta that was just processed
166
+ * @param workspaceDir - Workspace root for reading current log size
167
+ * @returns New curation state with updated cursors
168
+ */
169
+ export function updatedCursors(state, delta, workspaceDir) {
170
+ const today = todayDateString();
171
+ const newState = { ...state };
172
+ // Update conversation cursor to the last processed request
173
+ if (delta.newConversations.length > 0) {
174
+ const lastConv = delta.newConversations[delta.newConversations.length - 1];
175
+ newState.lastProcessedRequestId = lastConv.id;
176
+ newState.lastProcessedRequestAt = lastConv.createdAt;
177
+ }
178
+ // Update daily log cursor to today's current file size
179
+ const todayLogResult = readDailyLogSince(workspaceDir, today, 0);
180
+ newState.lastProcessedLogDate = today;
181
+ newState.lastProcessedLogSize = todayLogResult.newSize;
182
+ // Increment total entries curated
183
+ newState.totalEntriesCurated += delta.newConversations.length;
184
+ if (delta.newLogContent.length > 0) {
185
+ newState.totalEntriesCurated += 1; // Count new log content as one entry
186
+ }
187
+ return newState;
188
+ }
189
+ // ---------- Helpers ----------
190
+ /**
191
+ * Truncate a string to maxLen, adding ellipsis if truncated.
192
+ */
193
+ function truncate(text, maxLen) {
194
+ if (text.length <= maxLen)
195
+ return text;
196
+ return text.slice(0, maxLen - 3) + "...";
197
+ }
198
+ //# sourceMappingURL=curator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curator.js","sourceRoot":"","sources":["../../src/memory/curator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAyBpE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAc,EACd,YAAoB,EACpB,KAAoB,EACpB,mBAA2B,EAAE;IAE7B,uDAAuD;IACvD,MAAM,gBAAgB,GAAwB,EAAE,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,uBAAuB,CACxC,MAAM,EACN,KAAK,CAAC,sBAAsB,EAC5B,gBAAgB,CACjB,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,gBAAgB,CAAC,IAAI,CAAC;gBACpB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;gBAC9B,SAAS,EAAE,GAAG,CAAC,UAAU;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,gCAAgC;IAChC,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,IAAI,CAAC;QACH,wFAAwF;QACxF,IAAI,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;YACvE,MAAM,eAAe,GAAG,iBAAiB,CACvC,YAAY,EACZ,KAAK,CAAC,oBAAoB,EAC1B,KAAK,CAAC,oBAAoB,CAC3B,CAAC;YACF,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC5B,aAAa,IAAI,eAAe,CAAC,OAAO,CAAC;YAC3C,CAAC;YACD,6DAA6D;YAC7D,MAAM,WAAW,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9D,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,aAAa,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;YACvE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gDAAgD;YAChD,MAAM,MAAM,GAAG,KAAK,CAAC,oBAAoB,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3E,OAAO;QACL,gBAAgB;QAChB,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE;QACnC,UAAU;KACX,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAoB,EACpB,WAAmB,IAAI;IAEvB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,2BAA2B;IAC3B,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,gBAAgB,CAAC,MAAM,OAAO,CAAC,CAAC;QAC5E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAChF,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,aAAa,OAAO,EAAE,CAAC,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE9B,sBAAsB;IACtB,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,gCAAgC,CAAC;IAC7E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO;;;;;;mCAM0B,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BlD,MAAM;CACP,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAoB,EACpB,KAAoB,EACpB,YAAoB;IAEpB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAE9B,2DAA2D;IAC3D,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3E,QAAQ,CAAC,sBAAsB,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC9C,QAAQ,CAAC,sBAAsB,GAAG,QAAQ,CAAC,SAAS,CAAC;IACvD,CAAC;IAED,uDAAuD;IACvD,MAAM,cAAc,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjE,QAAQ,CAAC,oBAAoB,GAAG,KAAK,CAAC;IACtC,QAAQ,CAAC,oBAAoB,GAAG,cAAc,CAAC,OAAO,CAAC;IAEvD,kCAAkC;IAClC,QAAQ,CAAC,mBAAmB,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAC9D,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC,qCAAqC;IAC1E,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gCAAgC;AAEhC;;GAEG;AACH,SAAS,QAAQ,CAAC,IAAY,EAAE,MAAc;IAC5C,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * CoStar Server Executor - Daily Log Utilities
3
+ *
4
+ * Reads and prunes LLM-written daily log files (memory/YYYY-MM-DD.md).
5
+ * The LLM writes to these files via write/edit tools during heartbeat turns —
6
+ * no programmatic append logic here.
7
+ *
8
+ * Following OpenClaw's pattern: daily logs are free-form markdown written by the LLM.
9
+ */
10
+ /**
11
+ * Ensure the memory/ directory exists inside the workspace.
12
+ * Called during workspace bootstrap.
13
+ */
14
+ export declare function ensureMemoryDir(workspaceDir: string): string;
15
+ /**
16
+ * Read a daily log file starting from a byte offset.
17
+ * Returns only the new content appended since the last read.
18
+ *
19
+ * @param workspaceDir - Workspace root directory
20
+ * @param date - Date string in YYYY-MM-DD format
21
+ * @param byteOffset - Byte offset to start reading from (0 = read entire file)
22
+ * @returns Object with new content and the current file size
23
+ */
24
+ export declare function readDailyLogSince(workspaceDir: string, date: string, byteOffset?: number): {
25
+ content: string;
26
+ newSize: number;
27
+ };
28
+ /**
29
+ * List all daily log files in the memory/ directory, sorted by date ascending.
30
+ *
31
+ * @param workspaceDir - Workspace root directory
32
+ * @returns Sorted array of filenames (e.g., ["2026-02-05.md", "2026-02-06.md"])
33
+ */
34
+ export declare function listDailyLogFiles(workspaceDir: string): string[];
35
+ /**
36
+ * Prune local daily log files older than keepDays.
37
+ *
38
+ * @param workspaceDir - Workspace root directory
39
+ * @param keepDays - Number of days to retain (default: 7)
40
+ * @returns Array of deleted filenames
41
+ */
42
+ export declare function pruneOldDailyLogs(workspaceDir: string, keepDays?: number): string[];
43
+ /**
44
+ * Prune old daily log files from Supabase Storage.
45
+ * Lists memory/ files in the user's Storage bucket and deletes those older than keepDays.
46
+ *
47
+ * @param userId - User ID for Storage path
48
+ * @param keepDays - Number of days to retain (default: 7)
49
+ * @returns Array of deleted storage paths
50
+ */
51
+ export declare function pruneOldDailyLogsFromStorage(userId: string, keepDays?: number): Promise<string[]>;
52
+ /**
53
+ * Get today's date string in YYYY-MM-DD format.
54
+ */
55
+ export declare function todayDateString(): string;
56
+ //# sourceMappingURL=daily-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-log.d.ts","sourceRoot":"","sources":["../../src/memory/daily-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAO5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAU,GACrB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA0BtC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAchE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,QAAQ,GAAE,MAAU,GACnB,MAAM,EAAE,CA6BV;AAED;;;;;;;GAOG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAU,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoDnB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * CoStar Server Executor - Daily Log Utilities
3
+ *
4
+ * Reads and prunes LLM-written daily log files (memory/YYYY-MM-DD.md).
5
+ * The LLM writes to these files via write/edit tools during heartbeat turns —
6
+ * no programmatic append logic here.
7
+ *
8
+ * Following OpenClaw's pattern: daily logs are free-form markdown written by the LLM.
9
+ */
10
+ import fs from "node:fs";
11
+ import path from "node:path";
12
+ import { getSupabase } from "../supabase/client.js";
13
+ import { isSupabaseInitialized } from "../supabase/client.js";
14
+ /** Name of the memory subdirectory inside the workspace */
15
+ const MEMORY_DIR = "memory";
16
+ /** Storage bucket name (same as workspace-storage.ts) */
17
+ const WORKSPACE_BUCKET = "costar";
18
+ /**
19
+ * Ensure the memory/ directory exists inside the workspace.
20
+ * Called during workspace bootstrap.
21
+ */
22
+ export function ensureMemoryDir(workspaceDir) {
23
+ const memDir = path.join(workspaceDir, MEMORY_DIR);
24
+ if (!fs.existsSync(memDir)) {
25
+ fs.mkdirSync(memDir, { recursive: true });
26
+ console.log(`[MEMORY] Created memory directory: ${memDir}`);
27
+ }
28
+ return memDir;
29
+ }
30
+ /**
31
+ * Read a daily log file starting from a byte offset.
32
+ * Returns only the new content appended since the last read.
33
+ *
34
+ * @param workspaceDir - Workspace root directory
35
+ * @param date - Date string in YYYY-MM-DD format
36
+ * @param byteOffset - Byte offset to start reading from (0 = read entire file)
37
+ * @returns Object with new content and the current file size
38
+ */
39
+ export function readDailyLogSince(workspaceDir, date, byteOffset = 0) {
40
+ const filePath = path.join(workspaceDir, MEMORY_DIR, `${date}.md`);
41
+ if (!fs.existsSync(filePath)) {
42
+ return { content: "", newSize: byteOffset };
43
+ }
44
+ const stat = fs.statSync(filePath);
45
+ const fileSize = stat.size;
46
+ // No new content since last read
47
+ if (byteOffset >= fileSize) {
48
+ return { content: "", newSize: byteOffset };
49
+ }
50
+ // Read from offset to end of file
51
+ const fd = fs.openSync(filePath, "r");
52
+ try {
53
+ const bufferSize = fileSize - byteOffset;
54
+ const buffer = Buffer.alloc(bufferSize);
55
+ fs.readSync(fd, buffer, 0, bufferSize, byteOffset);
56
+ const content = buffer.toString("utf-8");
57
+ return { content, newSize: fileSize };
58
+ }
59
+ finally {
60
+ fs.closeSync(fd);
61
+ }
62
+ }
63
+ /**
64
+ * List all daily log files in the memory/ directory, sorted by date ascending.
65
+ *
66
+ * @param workspaceDir - Workspace root directory
67
+ * @returns Sorted array of filenames (e.g., ["2026-02-05.md", "2026-02-06.md"])
68
+ */
69
+ export function listDailyLogFiles(workspaceDir) {
70
+ const memDir = path.join(workspaceDir, MEMORY_DIR);
71
+ if (!fs.existsSync(memDir)) {
72
+ return [];
73
+ }
74
+ const files = fs.readdirSync(memDir);
75
+ // Filter for YYYY-MM-DD.md pattern and sort ascending
76
+ const datePattern = /^\d{4}-\d{2}-\d{2}\.md$/;
77
+ return files
78
+ .filter((f) => datePattern.test(f))
79
+ .sort();
80
+ }
81
+ /**
82
+ * Prune local daily log files older than keepDays.
83
+ *
84
+ * @param workspaceDir - Workspace root directory
85
+ * @param keepDays - Number of days to retain (default: 7)
86
+ * @returns Array of deleted filenames
87
+ */
88
+ export function pruneOldDailyLogs(workspaceDir, keepDays = 7) {
89
+ const files = listDailyLogFiles(workspaceDir);
90
+ if (files.length === 0)
91
+ return [];
92
+ const cutoff = new Date();
93
+ cutoff.setDate(cutoff.getDate() - keepDays);
94
+ cutoff.setHours(0, 0, 0, 0);
95
+ const cutoffStr = cutoff.toISOString().slice(0, 10); // YYYY-MM-DD
96
+ const deleted = [];
97
+ const memDir = path.join(workspaceDir, MEMORY_DIR);
98
+ for (const file of files) {
99
+ const dateStr = file.replace(".md", "");
100
+ if (dateStr < cutoffStr) {
101
+ try {
102
+ fs.unlinkSync(path.join(memDir, file));
103
+ deleted.push(file);
104
+ }
105
+ catch (err) {
106
+ console.warn(`[MEMORY] Failed to delete local log ${file}:`, err);
107
+ }
108
+ }
109
+ }
110
+ if (deleted.length > 0) {
111
+ console.log(`[MEMORY] Pruned ${deleted.length} old daily logs: ${deleted.join(", ")}`);
112
+ }
113
+ return deleted;
114
+ }
115
+ /**
116
+ * Prune old daily log files from Supabase Storage.
117
+ * Lists memory/ files in the user's Storage bucket and deletes those older than keepDays.
118
+ *
119
+ * @param userId - User ID for Storage path
120
+ * @param keepDays - Number of days to retain (default: 7)
121
+ * @returns Array of deleted storage paths
122
+ */
123
+ export async function pruneOldDailyLogsFromStorage(userId, keepDays = 7) {
124
+ if (!isSupabaseInitialized())
125
+ return [];
126
+ const supabase = getSupabase();
127
+ const storagePath = `${userId}/memory`;
128
+ try {
129
+ // List all files in the user's memory/ directory
130
+ const { data: files, error } = await supabase.storage
131
+ .from(WORKSPACE_BUCKET)
132
+ .list(storagePath);
133
+ if (error) {
134
+ console.warn(`[MEMORY] Failed to list Storage memory files:`, error.message);
135
+ return [];
136
+ }
137
+ if (!files || files.length === 0)
138
+ return [];
139
+ const cutoff = new Date();
140
+ cutoff.setDate(cutoff.getDate() - keepDays);
141
+ cutoff.setHours(0, 0, 0, 0);
142
+ const cutoffStr = cutoff.toISOString().slice(0, 10);
143
+ const datePattern = /^\d{4}-\d{2}-\d{2}\.md$/;
144
+ const toDelete = [];
145
+ for (const file of files) {
146
+ if (!datePattern.test(file.name))
147
+ continue;
148
+ const dateStr = file.name.replace(".md", "");
149
+ if (dateStr < cutoffStr) {
150
+ toDelete.push(`${storagePath}/${file.name}`);
151
+ }
152
+ }
153
+ if (toDelete.length === 0)
154
+ return [];
155
+ const { error: deleteError } = await supabase.storage
156
+ .from(WORKSPACE_BUCKET)
157
+ .remove(toDelete);
158
+ if (deleteError) {
159
+ console.warn(`[MEMORY] Failed to delete old Storage logs:`, deleteError.message);
160
+ return [];
161
+ }
162
+ console.log(`[MEMORY] Pruned ${toDelete.length} old daily logs from Storage`);
163
+ return toDelete;
164
+ }
165
+ catch (err) {
166
+ console.warn(`[MEMORY] Error pruning Storage daily logs:`, err);
167
+ return [];
168
+ }
169
+ }
170
+ /**
171
+ * Get today's date string in YYYY-MM-DD format.
172
+ */
173
+ export function todayDateString() {
174
+ return new Date().toISOString().slice(0, 10);
175
+ }
176
+ //# sourceMappingURL=daily-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-log.js","sourceRoot":"","sources":["../../src/memory/daily-log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CoStar Server Executor - Memory Module
3
+ *
4
+ * Incremental, cursor-based memory curation system.
5
+ * LLM-written daily logs + automatic curation into MEMORY.md and USER.md.
6
+ */
7
+ export { ensureMemoryDir, readDailyLogSince, listDailyLogFiles, pruneOldDailyLogs, pruneOldDailyLogsFromStorage, todayDateString, } from "./daily-log.js";
8
+ export { loadCurationState, saveCurationState, shouldPrune, type CurationState, } from "./curation-state.js";
9
+ export { fetchUnprocessedData, buildCurationDigest, buildCurationPrompt, updatedCursors, type CurationDelta, type ConversationEntry, } from "./curator.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,EAC5B,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CoStar Server Executor - Memory Module
3
+ *
4
+ * Incremental, cursor-based memory curation system.
5
+ * LLM-written daily logs + automatic curation into MEMORY.md and USER.md.
6
+ */
7
+ // Daily log utilities (read + prune only — LLM writes via tools)
8
+ export { ensureMemoryDir, readDailyLogSince, listDailyLogFiles, pruneOldDailyLogs, pruneOldDailyLogsFromStorage, todayDateString, } from "./daily-log.js";
9
+ // Curation state (cursor tracking)
10
+ export { loadCurationState, saveCurationState, shouldPrune, } from "./curation-state.js";
11
+ // Memory curator (fetch delta, build digest, build prompt)
12
+ export { fetchUnprocessedData, buildCurationDigest, buildCurationPrompt, updatedCursors, } from "./curator.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iEAAiE;AACjE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,EAC5B,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,mCAAmC;AACnC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,GAEZ,MAAM,qBAAqB,CAAC;AAE7B,2DAA2D;AAC3D,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GAGf,MAAM,cAAc,CAAC"}
@@ -7,7 +7,7 @@ export { getActiveCronJobs, getAllCronJobs, getDueCronJobs, updateCronJobStatus,
7
7
  export { sendNotification, createHeartbeatHistory, type Notification, } from "./notifications.js";
8
8
  export { storeMemory, searchMemories, getMemoryById, getRecentMemories, updateMemory, deleteMemory, getMemoriesByType, } from "./memory.js";
9
9
  export { getExecutorContext, saveExecutorContext, clearExecutorContext, updateLastActivity, } from "./context.js";
10
- export { createUserRequest, completeUserRequest, failUserRequest, getUserRequestById, getRecentUserRequests, getUserRequestsByStatus, getUserRequestsStats, searchUserRequests, } from "./requests.js";
11
- export { syncWorkspaceToLocal, syncLocalFileToStorage, syncAllLocalFilesToStorage, downloadWorkspaceFile, uploadWorkspaceFile, downloadAllWorkspaceFiles, workspaceFileExists, deleteWorkspaceFile, WORKSPACE_FILES, type WorkspaceFileName, } from "./workspace-storage.js";
10
+ export { createUserRequest, completeUserRequest, failUserRequest, getUserRequestById, getRecentUserRequests, getNewUserRequestsSince, getUserRequestsByStatus, getUserRequestsStats, searchUserRequests, } from "./requests.js";
11
+ export { syncWorkspaceToLocal, syncLocalFileToStorage, syncAllLocalFilesToStorage, downloadWorkspaceFile, uploadWorkspaceFile, downloadAllWorkspaceFiles, workspaceFileExists, deleteWorkspaceFile, syncMemoryDirToStorage, syncMemoryDirFromStorage, deleteMemoryFileFromStorage, syncCurationStateToStorage, syncCurationStateFromStorage, WORKSPACE_FILES, type WorkspaceFileName, } from "./workspace-storage.js";
12
12
  export type { UserMemory, UserRequest, ExecutorContext, MemorySearchResult, } from "./types.js";
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/supabase/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/supabase/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -7,6 +7,6 @@ export { getActiveCronJobs, getAllCronJobs, getDueCronJobs, updateCronJobStatus,
7
7
  export { sendNotification, createHeartbeatHistory, } from "./notifications.js";
8
8
  export { storeMemory, searchMemories, getMemoryById, getRecentMemories, updateMemory, deleteMemory, getMemoriesByType, } from "./memory.js";
9
9
  export { getExecutorContext, saveExecutorContext, clearExecutorContext, updateLastActivity, } from "./context.js";
10
- export { createUserRequest, completeUserRequest, failUserRequest, getUserRequestById, getRecentUserRequests, getUserRequestsByStatus, getUserRequestsStats, searchUserRequests, } from "./requests.js";
11
- export { syncWorkspaceToLocal, syncLocalFileToStorage, syncAllLocalFilesToStorage, downloadWorkspaceFile, uploadWorkspaceFile, downloadAllWorkspaceFiles, workspaceFileExists, deleteWorkspaceFile, WORKSPACE_FILES, } from "./workspace-storage.js";
10
+ export { createUserRequest, completeUserRequest, failUserRequest, getUserRequestById, getRecentUserRequests, getNewUserRequestsSince, getUserRequestsByStatus, getUserRequestsStats, searchUserRequests, } from "./requests.js";
11
+ export { syncWorkspaceToLocal, syncLocalFileToStorage, syncAllLocalFilesToStorage, downloadWorkspaceFile, uploadWorkspaceFile, downloadAllWorkspaceFiles, workspaceFileExists, deleteWorkspaceFile, syncMemoryDirToStorage, syncMemoryDirFromStorage, deleteMemoryFileFromStorage, syncCurationStateToStorage, syncCurationStateFromStorage, WORKSPACE_FILES, } from "./workspace-storage.js";
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/supabase/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAEvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,GAEhB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/supabase/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAEvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,eAAe,GAEhB,MAAM,wBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/supabase/notifications.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAkCF;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhB"}
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/supabase/notifications.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AA4CF;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhB"}
@@ -8,16 +8,25 @@ const PUSH_API_URL = "https://api-dev.asterizk.ai/email/notifications/send";
8
8
  /**
9
9
  * Send a push notification to the user's device via the push API.
10
10
  * Non-blocking — failures are logged but do not throw.
11
+ *
12
+ * Merges structured metadata (classification, senderName, significance, snippet,
13
+ * actionUrl, category) into the push `data` field so the client app can parse
14
+ * them from OneSignal's `additionalData`.
11
15
  */
12
16
  async function sendPushNotification(notification) {
13
17
  try {
18
+ // Merge type + metadata into `data` so client can read from additionalData
19
+ const data = {
20
+ type: notification.type,
21
+ ...notification.metadata,
22
+ };
14
23
  const body = {
15
24
  user_id: notification.user_id,
16
25
  title: notification.title || "CoStar",
17
26
  message: notification.message,
18
27
  notification_type: notification.type,
19
28
  priority: notification.priority || "normal",
20
- data: notification.metadata || {},
29
+ data,
21
30
  };
22
31
  const res = await fetch(PUSH_API_URL, {
23
32
  method: "POST",
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/supabase/notifications.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qCAAqC;AACrC,MAAM,YAAY,GAAG,sDAAsD,CAAC;AAiB5E;;;GAGG;AACH,KAAK,UAAU,oBAAoB,CAAC,YAA0B;IAC5D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG;YACX,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,KAAK,EAAE,YAAY,CAAC,KAAK,IAAI,QAAQ;YACrC,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,iBAAiB,EAAE,YAAY,CAAC,IAAI;YACpC,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,QAAQ;YAC3C,IAAI,EAAE,YAAY,CAAC,QAAQ,IAAI,EAAE;SAClC,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,yCAAyC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,yDAAyD,EAAE,KAAK,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAA0B;IAE1B,gEAAgE;IAChE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;QAC5D,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,QAAQ;QAC3C,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,QAAQ,EAAE,YAAY,CAAC,QAAQ;KAChC,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,YAAY,CAAC,IAAI,yBAAyB,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;IAErG,sEAAsE;IACtE,oBAAoB,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QAC5C,6CAA6C;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAQ5C;IACC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC;QAChE,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,iBAAiB,EAAE,MAAM,CAAC,gBAAgB;QAC1C,WAAW,EAAE,MAAM,CAAC,UAAU;KAC/B,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;QACrE,uCAAuC;IACzC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/supabase/notifications.ts"],"names":[],"mappings":"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"}
@@ -55,6 +55,16 @@ export declare function searchUserRequests(params: {
55
55
  created_at: string;
56
56
  score: number;
57
57
  }>>;
58
+ /**
59
+ * Get new user requests since a given cursor (timestamp + optional ID).
60
+ * Used by the memory curation system to fetch only unprocessed client conversations.
61
+ *
62
+ * @param userId - User ID to filter by
63
+ * @param afterTimestamp - Only return requests created after this ISO timestamp (exclusive)
64
+ * @param limit - Max number of requests to return (default: 30)
65
+ * @returns Completed user requests ordered by created_at ASC (oldest first)
66
+ */
67
+ export declare function getNewUserRequestsSince(userId: string, afterTimestamp?: string | null, limit?: number): Promise<UserRequest[]>;
58
68
  /**
59
69
  * Get user requests statistics
60
70
  */
@@ -1 +1 @@
1
- {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../src/supabase/requests.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC/B,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBvB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBvB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,WAAW,CAAC,CAqBvB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAmB7B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAgBxB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,EAC1C,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBxB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,KAAK,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAAC,CA0EF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,CAuDD"}
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../src/supabase/requests.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC/B,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBvB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBvB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,WAAW,CAAC,CAqBvB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAmB7B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAgBxB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,EAC1C,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBxB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,KAAK,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAAC,CA0EF;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,EAC9B,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CA4BxB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,CAuDD"}