visionclaw 0.1.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 (158) hide show
  1. package/README.md +116 -0
  2. package/dist/agent/context.d.ts +56 -0
  3. package/dist/agent/context.d.ts.map +1 -0
  4. package/dist/agent/context.js +142 -0
  5. package/dist/agent/context.js.map +1 -0
  6. package/dist/agent/loop.d.ts +18 -0
  7. package/dist/agent/loop.d.ts.map +1 -0
  8. package/dist/agent/loop.js +323 -0
  9. package/dist/agent/loop.js.map +1 -0
  10. package/dist/agent/session.d.ts +49 -0
  11. package/dist/agent/session.d.ts.map +1 -0
  12. package/dist/agent/session.js +200 -0
  13. package/dist/agent/session.js.map +1 -0
  14. package/dist/agent/system-prompt.d.ts +10 -0
  15. package/dist/agent/system-prompt.d.ts.map +1 -0
  16. package/dist/agent/system-prompt.js +167 -0
  17. package/dist/agent/system-prompt.js.map +1 -0
  18. package/dist/calendar/google-calendar.d.ts +46 -0
  19. package/dist/calendar/google-calendar.d.ts.map +1 -0
  20. package/dist/calendar/google-calendar.js +132 -0
  21. package/dist/calendar/google-calendar.js.map +1 -0
  22. package/dist/calendar/scheduler.d.ts +7 -0
  23. package/dist/calendar/scheduler.d.ts.map +1 -0
  24. package/dist/calendar/scheduler.js +33 -0
  25. package/dist/calendar/scheduler.js.map +1 -0
  26. package/dist/channels/discord.d.ts +19 -0
  27. package/dist/channels/discord.d.ts.map +1 -0
  28. package/dist/channels/discord.js +169 -0
  29. package/dist/channels/discord.js.map +1 -0
  30. package/dist/channels/gmail.d.ts +31 -0
  31. package/dist/channels/gmail.d.ts.map +1 -0
  32. package/dist/channels/gmail.js +300 -0
  33. package/dist/channels/gmail.js.map +1 -0
  34. package/dist/channels/interface.d.ts +45 -0
  35. package/dist/channels/interface.d.ts.map +1 -0
  36. package/dist/channels/interface.js +2 -0
  37. package/dist/channels/interface.js.map +1 -0
  38. package/dist/channels/manager.d.ts +36 -0
  39. package/dist/channels/manager.d.ts.map +1 -0
  40. package/dist/channels/manager.js +108 -0
  41. package/dist/channels/manager.js.map +1 -0
  42. package/dist/channels/queue.d.ts +17 -0
  43. package/dist/channels/queue.d.ts.map +1 -0
  44. package/dist/channels/queue.js +85 -0
  45. package/dist/channels/queue.js.map +1 -0
  46. package/dist/channels/slack.d.ts +17 -0
  47. package/dist/channels/slack.d.ts.map +1 -0
  48. package/dist/channels/slack.js +142 -0
  49. package/dist/channels/slack.js.map +1 -0
  50. package/dist/channels/sms.d.ts +19 -0
  51. package/dist/channels/sms.d.ts.map +1 -0
  52. package/dist/channels/sms.js +111 -0
  53. package/dist/channels/sms.js.map +1 -0
  54. package/dist/channels/telegram.d.ts +28 -0
  55. package/dist/channels/telegram.d.ts.map +1 -0
  56. package/dist/channels/telegram.js +246 -0
  57. package/dist/channels/telegram.js.map +1 -0
  58. package/dist/channels/whatsapp.d.ts +28 -0
  59. package/dist/channels/whatsapp.d.ts.map +1 -0
  60. package/dist/channels/whatsapp.js +292 -0
  61. package/dist/channels/whatsapp.js.map +1 -0
  62. package/dist/config/index.d.ts +24 -0
  63. package/dist/config/index.d.ts.map +1 -0
  64. package/dist/config/index.js +104 -0
  65. package/dist/config/index.js.map +1 -0
  66. package/dist/config/types.d.ts +227 -0
  67. package/dist/config/types.d.ts.map +1 -0
  68. package/dist/config/types.js +45 -0
  69. package/dist/config/types.js.map +1 -0
  70. package/dist/files.d.ts +20 -0
  71. package/dist/files.d.ts.map +1 -0
  72. package/dist/files.js +82 -0
  73. package/dist/files.js.map +1 -0
  74. package/dist/index.d.ts +3 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +54 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/logger.d.ts +76 -0
  79. package/dist/logger.d.ts.map +1 -0
  80. package/dist/logger.js +384 -0
  81. package/dist/logger.js.map +1 -0
  82. package/dist/memory/store.d.ts +24 -0
  83. package/dist/memory/store.d.ts.map +1 -0
  84. package/dist/memory/store.js +71 -0
  85. package/dist/memory/store.js.map +1 -0
  86. package/dist/obs/server.d.ts +10 -0
  87. package/dist/obs/server.d.ts.map +1 -0
  88. package/dist/obs/server.js +406 -0
  89. package/dist/obs/server.js.map +1 -0
  90. package/dist/onboarding/google-auth.d.ts +11 -0
  91. package/dist/onboarding/google-auth.d.ts.map +1 -0
  92. package/dist/onboarding/google-auth.js +113 -0
  93. package/dist/onboarding/google-auth.js.map +1 -0
  94. package/dist/onboarding/index.d.ts +2 -0
  95. package/dist/onboarding/index.d.ts.map +1 -0
  96. package/dist/onboarding/index.js +213 -0
  97. package/dist/onboarding/index.js.map +1 -0
  98. package/dist/onboarding/macos-permissions.d.ts +37 -0
  99. package/dist/onboarding/macos-permissions.d.ts.map +1 -0
  100. package/dist/onboarding/macos-permissions.js +207 -0
  101. package/dist/onboarding/macos-permissions.js.map +1 -0
  102. package/dist/skills/install.d.ts +7 -0
  103. package/dist/skills/install.d.ts.map +1 -0
  104. package/dist/skills/install.js +63 -0
  105. package/dist/skills/install.js.map +1 -0
  106. package/dist/tools/browser.d.ts +7 -0
  107. package/dist/tools/browser.d.ts.map +1 -0
  108. package/dist/tools/browser.js +202 -0
  109. package/dist/tools/browser.js.map +1 -0
  110. package/dist/tools/calendar.d.ts +12 -0
  111. package/dist/tools/calendar.d.ts.map +1 -0
  112. package/dist/tools/calendar.js +210 -0
  113. package/dist/tools/calendar.js.map +1 -0
  114. package/dist/tools/computer-use.d.ts +28 -0
  115. package/dist/tools/computer-use.d.ts.map +1 -0
  116. package/dist/tools/computer-use.js +311 -0
  117. package/dist/tools/computer-use.js.map +1 -0
  118. package/dist/tools/coordinate-resolver.d.ts +26 -0
  119. package/dist/tools/coordinate-resolver.d.ts.map +1 -0
  120. package/dist/tools/coordinate-resolver.js +157 -0
  121. package/dist/tools/coordinate-resolver.js.map +1 -0
  122. package/dist/tools/desktop-executor.d.ts +52 -0
  123. package/dist/tools/desktop-executor.d.ts.map +1 -0
  124. package/dist/tools/desktop-executor.js +202 -0
  125. package/dist/tools/desktop-executor.js.map +1 -0
  126. package/dist/tools/finish.d.ts +5 -0
  127. package/dist/tools/finish.d.ts.map +1 -0
  128. package/dist/tools/finish.js +18 -0
  129. package/dist/tools/finish.js.map +1 -0
  130. package/dist/tools/index.d.ts +7 -0
  131. package/dist/tools/index.d.ts.map +1 -0
  132. package/dist/tools/index.js +37 -0
  133. package/dist/tools/index.js.map +1 -0
  134. package/dist/tools/memory.d.ts +14 -0
  135. package/dist/tools/memory.d.ts.map +1 -0
  136. package/dist/tools/memory.js +269 -0
  137. package/dist/tools/memory.js.map +1 -0
  138. package/dist/tools/notify.d.ts +12 -0
  139. package/dist/tools/notify.d.ts.map +1 -0
  140. package/dist/tools/notify.js +108 -0
  141. package/dist/tools/notify.js.map +1 -0
  142. package/dist/tools/screenshot.d.ts +7 -0
  143. package/dist/tools/screenshot.d.ts.map +1 -0
  144. package/dist/tools/screenshot.js +189 -0
  145. package/dist/tools/screenshot.js.map +1 -0
  146. package/dist/tools/skill.d.ts +8 -0
  147. package/dist/tools/skill.d.ts.map +1 -0
  148. package/dist/tools/skill.js +133 -0
  149. package/dist/tools/skill.js.map +1 -0
  150. package/dist/tools/upgrade.d.ts +5 -0
  151. package/dist/tools/upgrade.d.ts.map +1 -0
  152. package/dist/tools/upgrade.js +89 -0
  153. package/dist/tools/upgrade.js.map +1 -0
  154. package/dist/tools/wait.d.ts +5 -0
  155. package/dist/tools/wait.d.ts.map +1 -0
  156. package/dist/tools/wait.js +21 -0
  157. package/dist/tools/wait.js.map +1 -0
  158. package/package.json +61 -0
@@ -0,0 +1,76 @@
1
+ export type LogLevel = "debug" | "info" | "warn" | "error";
2
+ export interface LogEntry {
3
+ timestamp: string;
4
+ level: LogLevel;
5
+ category: string;
6
+ message: string;
7
+ data?: Record<string, unknown>;
8
+ }
9
+ export type LogListener = (entry: LogEntry) => void;
10
+ declare class Logger {
11
+ private fileStream;
12
+ private initialized;
13
+ private minConsoleLevel;
14
+ private currentDate;
15
+ private logsDir;
16
+ private listeners;
17
+ private readonly maxBytes;
18
+ private readonly retentionDays;
19
+ private levelPriority;
20
+ /**
21
+ * Initialize file logging. Call once after profile is set.
22
+ */
23
+ init(): void;
24
+ /**
25
+ * Core log method.
26
+ */
27
+ log(level: LogLevel, category: string, message: string, data?: Record<string, unknown>): void;
28
+ /**
29
+ * Subscribe to log events produced by this logger.
30
+ * Returns an unsubscribe function.
31
+ */
32
+ onLog(listener: LogListener): () => void;
33
+ private writeConsole;
34
+ private truncate;
35
+ private rotateIfNeeded;
36
+ private reopenForDate;
37
+ private nextRolledPath;
38
+ private closeStream;
39
+ private cleanupOldLogs;
40
+ /** Safely convert an unknown data field to a display string. */
41
+ private str;
42
+ private formatLocalDate;
43
+ private formatLocalIso;
44
+ wake(trigger: string, messageCount: number): void;
45
+ send(message: string): void;
46
+ /**
47
+ * Log a multimodal content block array being sent to the model.
48
+ * Extracts text from text blocks and summarizes image/file blocks.
49
+ */
50
+ sendMultimodal(blocks: {
51
+ type: string;
52
+ text?: string;
53
+ source?: {
54
+ type: string;
55
+ file_id?: string;
56
+ url?: string;
57
+ };
58
+ }[]): void;
59
+ assistant(text: string): void;
60
+ /**
61
+ * Log a non-text content block received from the assistant (e.g. image in response).
62
+ */
63
+ assistantBlock(blockType: string, summary: string): void;
64
+ toolCall(name: string, input: unknown, meta?: Record<string, unknown>): void;
65
+ toolResult(name: string, output: string, meta?: Record<string, unknown>): void;
66
+ result(turns: number, inputTokens: number, outputTokens: number, cost: string): void;
67
+ channel(channelName: string, message: string): void;
68
+ system(message: string): void;
69
+ debug(message: string, data?: Record<string, unknown>): void;
70
+ info(message: string, data?: Record<string, unknown>): void;
71
+ warn(message: string, data?: Record<string, unknown>): void;
72
+ err(message: string, data?: Record<string, unknown>): void;
73
+ }
74
+ export declare const logger: Logger;
75
+ export {};
76
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
package/dist/logger.js ADDED
@@ -0,0 +1,384 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { getConfigDir } from "./config/index.js";
4
+ // ── ANSI colors for console ────────────────────────────────────────────
5
+ const DIM = "\x1b[2m";
6
+ const RESET = "\x1b[0m";
7
+ const BOLD = "\x1b[1m";
8
+ const CYAN = "\x1b[36m";
9
+ const YELLOW = "\x1b[33m";
10
+ const RED = "\x1b[31m";
11
+ const GREEN = "\x1b[32m";
12
+ const MAGENTA = "\x1b[35m";
13
+ const BLUE = "\x1b[34m";
14
+ const LEVEL_COLORS = {
15
+ debug: DIM,
16
+ info: CYAN,
17
+ warn: YELLOW,
18
+ error: RED,
19
+ };
20
+ const CATEGORY_COLORS = {
21
+ wake: GREEN,
22
+ send: BLUE,
23
+ assistant: MAGENTA,
24
+ tool_call: CYAN,
25
+ tool_result: DIM,
26
+ result: BOLD,
27
+ channel: YELLOW,
28
+ system: DIM,
29
+ error: RED,
30
+ };
31
+ // ── Logger class ───────────────────────────────────────────────────────
32
+ class Logger {
33
+ fileStream = null;
34
+ initialized = false;
35
+ minConsoleLevel = "info";
36
+ currentDate = null;
37
+ logsDir = null;
38
+ listeners = new Set();
39
+ maxBytes = 10 * 1024 * 1024; // 10MB
40
+ retentionDays = 7;
41
+ levelPriority = {
42
+ debug: 0,
43
+ info: 1,
44
+ warn: 2,
45
+ error: 3,
46
+ };
47
+ /**
48
+ * Initialize file logging. Call once after profile is set.
49
+ */
50
+ init() {
51
+ if (this.initialized)
52
+ return;
53
+ const envLevel = process.env.LOG_LEVEL?.toLowerCase();
54
+ if (envLevel === "debug" || envLevel === "info" || envLevel === "warn" || envLevel === "error") {
55
+ this.minConsoleLevel = envLevel;
56
+ }
57
+ try {
58
+ this.logsDir = path.join(getConfigDir(), "logs");
59
+ if (!fs.existsSync(this.logsDir)) {
60
+ fs.mkdirSync(this.logsDir, { recursive: true });
61
+ }
62
+ this.currentDate = this.formatLocalDate(new Date()); // YYYY-MM-DD (local)
63
+ const logFile = path.join(this.logsDir, `${this.currentDate}.jsonl`);
64
+ this.fileStream = fs.createWriteStream(logFile, { flags: "a" });
65
+ this.cleanupOldLogs();
66
+ this.initialized = true;
67
+ }
68
+ catch {
69
+ // Can't create log file -- continue with console only
70
+ }
71
+ }
72
+ /**
73
+ * Core log method.
74
+ */
75
+ log(level, category, message, data) {
76
+ const now = new Date();
77
+ const entry = {
78
+ timestamp: this.formatLocalIso(now),
79
+ level,
80
+ category,
81
+ message,
82
+ ...(data ? { data } : {}),
83
+ };
84
+ // Write to file (JSONL)
85
+ if (this.fileStream) {
86
+ this.rotateIfNeeded(entry.timestamp);
87
+ this.fileStream.write(JSON.stringify(entry) + "\n");
88
+ }
89
+ // Notify listeners (best-effort)
90
+ if (this.listeners.size > 0) {
91
+ for (const cb of this.listeners) {
92
+ try {
93
+ cb(entry);
94
+ }
95
+ catch {
96
+ // ignore listener failures
97
+ }
98
+ }
99
+ }
100
+ // Write to console if level is high enough
101
+ if (this.levelPriority[level] >= this.levelPriority[this.minConsoleLevel]) {
102
+ this.writeConsole(entry);
103
+ }
104
+ }
105
+ /**
106
+ * Subscribe to log events produced by this logger.
107
+ * Returns an unsubscribe function.
108
+ */
109
+ onLog(listener) {
110
+ this.listeners.add(listener);
111
+ return () => {
112
+ this.listeners.delete(listener);
113
+ };
114
+ }
115
+ writeConsole(entry) {
116
+ const time = entry.timestamp.slice(11, 23); // HH:mm:ss.SSS
117
+ const levelColor = LEVEL_COLORS[entry.level];
118
+ const catColor = CATEGORY_COLORS[entry.category] ?? DIM;
119
+ const prefix = `${DIM}${time}${RESET} ${catColor}[${entry.category}]${RESET}`;
120
+ // Format differently based on category for readability
121
+ switch (entry.category) {
122
+ case "wake":
123
+ console.log(`\n${DIM}${"─".repeat(70)}${RESET}`);
124
+ console.log(`${prefix} ${entry.message}`);
125
+ break;
126
+ case "send":
127
+ console.log(`${prefix} ${DIM}→${RESET} ${this.truncate(entry.message, 120)}`);
128
+ break;
129
+ case "assistant":
130
+ console.log(`${prefix} ${entry.message}`);
131
+ break;
132
+ case "tool_call": {
133
+ const toolName = this.str(entry.data?.name);
134
+ const toolInput = entry.data?.input;
135
+ const inputStr = toolInput ? ` ${DIM}${this.truncate(JSON.stringify(toolInput), 100)}${RESET}` : "";
136
+ console.log(`${prefix} ${BOLD}${toolName}${RESET}${inputStr}`);
137
+ break;
138
+ }
139
+ case "tool_result": {
140
+ const resultName = this.str(entry.data?.name);
141
+ console.log(`${prefix} ${resultName} ${DIM}${this.truncate(entry.message, 100)}${RESET}`);
142
+ break;
143
+ }
144
+ case "result": {
145
+ const turns = this.str(entry.data?.turns);
146
+ const inTok = this.str(entry.data?.input_tokens);
147
+ const outTok = this.str(entry.data?.output_tokens);
148
+ const costVal = this.str(entry.data?.cost);
149
+ console.log(`${prefix} turns=${turns} input=${inTok} output=${outTok} cost=$${costVal}`);
150
+ console.log(`${DIM}${"─".repeat(70)}${RESET}\n`);
151
+ break;
152
+ }
153
+ case "error":
154
+ console.error(`${prefix} ${levelColor}${entry.message}${RESET}`);
155
+ break;
156
+ default:
157
+ if (entry.data && Object.keys(entry.data).length > 0) {
158
+ console.log(`${prefix} ${entry.message} ${DIM}${this.truncate(JSON.stringify(entry.data), 180)}${RESET}`);
159
+ }
160
+ else {
161
+ console.log(`${prefix} ${entry.message}`);
162
+ }
163
+ }
164
+ }
165
+ truncate(s, maxLen) {
166
+ const oneLine = s.replace(/\n/g, " ").trim();
167
+ if (oneLine.length <= maxLen)
168
+ return oneLine;
169
+ return oneLine.substring(0, maxLen) + "…";
170
+ }
171
+ rotateIfNeeded(timestampIso) {
172
+ if (!this.logsDir || !this.currentDate)
173
+ return;
174
+ const entryDate = timestampIso.slice(0, 10);
175
+ if (entryDate !== this.currentDate) {
176
+ this.reopenForDate(entryDate);
177
+ return;
178
+ }
179
+ try {
180
+ const baseFile = path.join(this.logsDir, `${this.currentDate}.jsonl`);
181
+ const currentSize = fs.existsSync(baseFile) ? fs.statSync(baseFile).size : 0;
182
+ if (currentSize < this.maxBytes)
183
+ return;
184
+ const nextPath = this.nextRolledPath(this.currentDate);
185
+ this.closeStream();
186
+ fs.renameSync(baseFile, nextPath);
187
+ this.fileStream = fs.createWriteStream(baseFile, { flags: "a" });
188
+ this.cleanupOldLogs();
189
+ }
190
+ catch {
191
+ // Best-effort rotation only
192
+ }
193
+ }
194
+ reopenForDate(date) {
195
+ if (!this.logsDir)
196
+ return;
197
+ try {
198
+ this.closeStream();
199
+ this.currentDate = date;
200
+ const logFile = path.join(this.logsDir, `${this.currentDate}.jsonl`);
201
+ this.fileStream = fs.createWriteStream(logFile, { flags: "a" });
202
+ this.cleanupOldLogs();
203
+ }
204
+ catch {
205
+ // Best-effort rotation only
206
+ }
207
+ }
208
+ nextRolledPath(date) {
209
+ if (!this.logsDir)
210
+ return `${date}-1.jsonl`;
211
+ let idx = 1;
212
+ while (idx < 1000) {
213
+ const candidate = path.join(this.logsDir, `${date}-${idx}.jsonl`);
214
+ if (!fs.existsSync(candidate))
215
+ return candidate;
216
+ idx += 1;
217
+ }
218
+ return path.join(this.logsDir, `${date}-${Date.now()}.jsonl`);
219
+ }
220
+ closeStream() {
221
+ if (this.fileStream) {
222
+ try {
223
+ this.fileStream.end();
224
+ }
225
+ catch {
226
+ // ignore
227
+ }
228
+ }
229
+ this.fileStream = null;
230
+ }
231
+ cleanupOldLogs() {
232
+ if (!this.logsDir)
233
+ return;
234
+ const cutoff = new Date();
235
+ cutoff.setDate(cutoff.getDate() - this.retentionDays);
236
+ const cutoffStr = this.formatLocalDate(cutoff);
237
+ try {
238
+ const entries = fs.readdirSync(this.logsDir);
239
+ for (const entry of entries) {
240
+ if (!entry.endsWith(".jsonl"))
241
+ continue;
242
+ const datePart = entry.slice(0, 10);
243
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(datePart))
244
+ continue;
245
+ if (datePart < cutoffStr) {
246
+ try {
247
+ fs.unlinkSync(path.join(this.logsDir, entry));
248
+ }
249
+ catch {
250
+ // ignore individual failures
251
+ }
252
+ }
253
+ }
254
+ }
255
+ catch {
256
+ // best-effort cleanup only
257
+ }
258
+ }
259
+ /** Safely convert an unknown data field to a display string. */
260
+ str(value) {
261
+ if (value === undefined || value === null)
262
+ return "?";
263
+ if (typeof value === "string")
264
+ return value;
265
+ if (typeof value === "number" || typeof value === "boolean")
266
+ return value.toString();
267
+ return JSON.stringify(value);
268
+ }
269
+ formatLocalDate(date) {
270
+ const year = date.getFullYear();
271
+ const month = String(date.getMonth() + 1).padStart(2, "0");
272
+ const day = String(date.getDate()).padStart(2, "0");
273
+ return `${year}-${month}-${day}`;
274
+ }
275
+ formatLocalIso(date) {
276
+ const year = date.getFullYear();
277
+ const month = String(date.getMonth() + 1).padStart(2, "0");
278
+ const day = String(date.getDate()).padStart(2, "0");
279
+ const hour = String(date.getHours()).padStart(2, "0");
280
+ const minute = String(date.getMinutes()).padStart(2, "0");
281
+ const second = String(date.getSeconds()).padStart(2, "0");
282
+ const ms = String(date.getMilliseconds()).padStart(3, "0");
283
+ const tzOffsetMinutes = -date.getTimezoneOffset(); // minutes east of UTC
284
+ const sign = tzOffsetMinutes >= 0 ? "+" : "-";
285
+ const abs = Math.abs(tzOffsetMinutes);
286
+ const tzHours = String(Math.floor(abs / 60)).padStart(2, "0");
287
+ const tzMinutes = String(abs % 60).padStart(2, "0");
288
+ return `${year}-${month}-${day}T${hour}:${minute}:${second}.${ms}${sign}${tzHours}:${tzMinutes}`;
289
+ }
290
+ // ── Convenience methods ──────────────────────────────────────────────
291
+ wake(trigger, messageCount) {
292
+ const reason = trigger === "heartbeat"
293
+ ? "Heartbeat (scheduled wake)"
294
+ : `New message${messageCount > 1 ? `s (${messageCount})` : ""}`;
295
+ this.log("info", "wake", reason, {
296
+ trigger,
297
+ messageCount,
298
+ });
299
+ }
300
+ send(message) {
301
+ this.log("info", "send", message);
302
+ }
303
+ /**
304
+ * Log a multimodal content block array being sent to the model.
305
+ * Extracts text from text blocks and summarizes image/file blocks.
306
+ */
307
+ sendMultimodal(blocks) {
308
+ const parts = [];
309
+ const imageRefs = [];
310
+ for (const block of blocks) {
311
+ if (block.type === "text" && block.text) {
312
+ parts.push(block.text);
313
+ }
314
+ else if (block.type === "image") {
315
+ const src = block.source;
316
+ if (src?.type === "url" && src.url) {
317
+ imageRefs.push(`image:url(${src.url})`);
318
+ }
319
+ else if (src?.type === "file" && src.file_id) {
320
+ imageRefs.push(`image:file(${src.file_id})`);
321
+ }
322
+ else {
323
+ imageRefs.push("image:base64");
324
+ }
325
+ }
326
+ }
327
+ const textContent = parts.join("\n");
328
+ const attachSummary = imageRefs.length > 0 ? ` [+${imageRefs.join(", ")}]` : "";
329
+ // Console: show truncated text + attachment summary
330
+ this.log("info", "send", textContent + attachSummary, {
331
+ text: textContent,
332
+ attachments: imageRefs,
333
+ blockCount: blocks.length,
334
+ });
335
+ }
336
+ assistant(text) {
337
+ this.log("info", "assistant", text);
338
+ }
339
+ /**
340
+ * Log a non-text content block received from the assistant (e.g. image in response).
341
+ */
342
+ assistantBlock(blockType, summary) {
343
+ this.log("info", "assistant", `[${blockType}] ${summary}`);
344
+ }
345
+ toolCall(name, input, meta) {
346
+ this.log("info", "tool_call", name, {
347
+ name,
348
+ input: input,
349
+ ...(meta ?? {}),
350
+ });
351
+ }
352
+ toolResult(name, output, meta) {
353
+ this.log("debug", "tool_result", output, { name, ...(meta ?? {}) });
354
+ }
355
+ result(turns, inputTokens, outputTokens, cost) {
356
+ this.log("info", "result", `turns=${turns} cost=$${cost}`, {
357
+ turns,
358
+ input_tokens: inputTokens,
359
+ output_tokens: outputTokens,
360
+ cost,
361
+ });
362
+ }
363
+ channel(channelName, message) {
364
+ this.log("info", "channel", `[${channelName}] ${message}`);
365
+ }
366
+ system(message) {
367
+ this.log("info", "system", message);
368
+ }
369
+ debug(message, data) {
370
+ this.log("debug", "system", message, data);
371
+ }
372
+ info(message, data) {
373
+ this.log("info", "system", message, data);
374
+ }
375
+ warn(message, data) {
376
+ this.log("warn", "system", message, data);
377
+ }
378
+ err(message, data) {
379
+ this.log("error", "error", message, data);
380
+ }
381
+ }
382
+ // ── Singleton ──────────────────────────────────────────────────────────
383
+ export const logger = new Logger();
384
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Persistent key-value memory store backed by SQLite.
3
+ * The agent uses this to save important information that should survive
4
+ * context compaction and session restarts.
5
+ */
6
+ export declare class MemoryStore {
7
+ private db;
8
+ constructor(customDbPath?: string);
9
+ set(key: string, value: string, category?: string): void;
10
+ get(key: string): string | null;
11
+ delete(key: string): boolean;
12
+ list(category?: string): {
13
+ key: string;
14
+ value: string;
15
+ category: string;
16
+ }[];
17
+ search(query: string): {
18
+ key: string;
19
+ value: string;
20
+ category: string;
21
+ }[];
22
+ close(): void;
23
+ }
24
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAoB;gBAElB,YAAY,CAAC,EAAE,MAAM;IAkBjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,IAAI;IAa3D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO/B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAO5B,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE;IAW3E,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE;IAczE,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,71 @@
1
+ import Database from "better-sqlite3";
2
+ import path from "node:path";
3
+ import { getConfigDir } from "../config/index.js";
4
+ /**
5
+ * Persistent key-value memory store backed by SQLite.
6
+ * The agent uses this to save important information that should survive
7
+ * context compaction and session restarts.
8
+ */
9
+ export class MemoryStore {
10
+ db;
11
+ constructor(customDbPath) {
12
+ const dbPath = customDbPath ?? path.join(getConfigDir(), "memory.db");
13
+ this.db = new Database(dbPath);
14
+ this.db.pragma("journal_mode = WAL");
15
+ this.db.exec(`
16
+ CREATE TABLE IF NOT EXISTS memories (
17
+ key TEXT PRIMARY KEY,
18
+ value TEXT NOT NULL,
19
+ category TEXT DEFAULT 'general',
20
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
21
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
22
+ )
23
+ `);
24
+ this.db.exec(`
25
+ CREATE INDEX IF NOT EXISTS idx_memories_category ON memories(category)
26
+ `);
27
+ }
28
+ set(key, value, category = "general") {
29
+ this.db
30
+ .prepare(`INSERT INTO memories (key, value, category, updated_at)
31
+ VALUES (?, ?, ?, datetime('now'))
32
+ ON CONFLICT(key) DO UPDATE SET
33
+ value = excluded.value,
34
+ category = excluded.category,
35
+ updated_at = datetime('now')`)
36
+ .run(key, value, category);
37
+ }
38
+ get(key) {
39
+ const row = this.db
40
+ .prepare(`SELECT value FROM memories WHERE key = ?`)
41
+ .get(key);
42
+ return row?.value ?? null;
43
+ }
44
+ delete(key) {
45
+ const result = this.db
46
+ .prepare(`DELETE FROM memories WHERE key = ?`)
47
+ .run(key);
48
+ return result.changes > 0;
49
+ }
50
+ list(category) {
51
+ if (category) {
52
+ return this.db
53
+ .prepare(`SELECT key, value, category FROM memories WHERE category = ? ORDER BY updated_at DESC`)
54
+ .all(category);
55
+ }
56
+ return this.db
57
+ .prepare(`SELECT key, value, category FROM memories ORDER BY updated_at DESC`)
58
+ .all();
59
+ }
60
+ search(query) {
61
+ return this.db
62
+ .prepare(`SELECT key, value, category FROM memories
63
+ WHERE key LIKE ? OR value LIKE ?
64
+ ORDER BY updated_at DESC`)
65
+ .all(`%${query}%`, `%${query}%`);
66
+ }
67
+ close() {
68
+ this.db.close();
69
+ }
70
+ }
71
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;GAIG;AACH,MAAM,OAAO,WAAW;IACd,EAAE,CAAoB;IAE9B,YAAY,YAAqB;QAC/B,MAAM,MAAM,GAAG,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,CAAC,CAAC;QACtE,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;KAQZ,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;KAEZ,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,QAAQ,GAAG,SAAS;QAClD,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;wCAKgC,CACjC;aACA,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,0CAA0C,CAAC;aACnD,GAAG,CAAC,GAAG,CAAkC,CAAC;QAC7C,OAAO,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,OAAO,CAAC,oCAAoC,CAAC;aAC7C,GAAG,CAAC,GAAG,CAAC,CAAC;QACZ,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,QAAiB;QACpB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,EAAE;iBACX,OAAO,CAAC,uFAAuF,CAAC;iBAChG,GAAG,CAAC,QAAQ,CAAuD,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CAAC,oEAAoE,CAAC;aAC7E,GAAG,EAAwD,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CACN;;kCAE0B,CAC3B;aACA,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,CAI9B,CAAC;IACN,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ export interface ObsServerOptions {
2
+ host?: string;
3
+ port?: number;
4
+ bufferSize?: number;
5
+ }
6
+ export declare function startObsServer(options?: ObsServerOptions): {
7
+ port: number;
8
+ close: () => Promise<void>;
9
+ };
10
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/obs/server.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA8QD,wBAAgB,cAAc,CAAC,OAAO,GAAE,gBAAqB,GAAG;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAmJA"}