@kingcrab/pi-imessage 0.0.40 → 0.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/send.js CHANGED
@@ -7,19 +7,33 @@
7
7
  *
8
8
  * Supports DM (buddy), group chat (chat id), and SMS targets.
9
9
  * Check Messages.app environment before first send with checkEnvironment().
10
+ *
11
+ * Attachment sends stage the file into ~/Library/Messages/Attachments/pi-imessage/
12
+ * because Messages.app's imagent helper is sandboxed and cannot read arbitrary
13
+ * paths (e.g. ~/.pi/..., ~/dotfile/...); staged copies are then verified against
14
+ * chat.db so we surface real failures instead of trusting AppleScript's ack.
10
15
  */
11
16
  import { execFile } from "node:child_process";
17
+ import { randomUUID } from "node:crypto";
12
18
  import { constants, accessSync } from "node:fs";
19
+ import { copyFile, mkdir, unlink } from "node:fs/promises";
13
20
  import { homedir } from "node:os";
14
- import { join } from "node:path";
21
+ import { basename, extname, join } from "node:path";
15
22
  import { promisify } from "node:util";
16
23
  import { sendRichTextMessage } from "./rich-text.js";
17
24
  const execFileAsync = promisify(execFile);
18
25
  const SCRIPT_TIMEOUT_MS = 30_000;
26
+ const ATTACHMENT_VERIFY_TIMEOUT_MS = 30_000;
27
+ const ATTACHMENT_VERIFY_POLL_MS = 500;
28
+ const MESSAGES_APP_PATH = "/System/Applications/Messages.app";
29
+ const ATTACHMENTS_ROOT = join(homedir(), "Library", "Messages", "Attachments");
30
+ const STAGING_DIR = join(ATTACHMENTS_ROOT, "pi-imessage");
31
+ const CHAT_DB_PATH = join(homedir(), "Library", "Messages", "chat.db");
19
32
  // ── AppleScript helpers ───────────────────────────────────────────────────────
20
33
  /** Escape special characters for AppleScript string literals. */
21
34
  function escapeAppleScript(str) {
22
35
  return str
36
+ .replace(/\0/g, "�")
23
37
  .replace(/\\/g, "\\\\")
24
38
  .replace(/"/g, '\\"')
25
39
  .replace(/\n/g, "\\n")
@@ -40,18 +54,132 @@ function buildSendScript(chatGuid, text) {
40
54
  const isGroup = parts[1] === "+";
41
55
  if (isGroup) {
42
56
  const escapedChatId = escapeAppleScript(chatGuid);
43
- return `tell application "Messages"
57
+ return `tell application "${MESSAGES_APP_PATH}"
44
58
  set targetChat to chat id "${escapedChatId}"
45
59
  send "${escapedText}" to targetChat
46
60
  end tell`;
47
61
  }
48
62
  const recipient = escapeAppleScript(parts[2] ?? "");
49
- return `tell application "Messages"
63
+ return `tell application "${MESSAGES_APP_PATH}"
50
64
  set targetService to 1st service whose service type = iMessage
51
65
  set targetBuddy to buddy "${recipient}" of targetService
52
66
  send "${escapedText}" to targetBuddy
53
67
  end tell`;
54
68
  }
69
+ /** Build AppleScript for sending a local file attachment. */
70
+ function buildSendAttachmentScript(chatGuid, filePath) {
71
+ const escapedPath = escapeAppleScript(filePath);
72
+ const parts = chatGuid.split(";");
73
+ const isGroup = parts[1] === "+";
74
+ if (isGroup) {
75
+ const escapedChatId = escapeAppleScript(chatGuid);
76
+ return `tell application "${MESSAGES_APP_PATH}"
77
+ set targetChat to chat id "${escapedChatId}"
78
+ send POSIX file "${escapedPath}" to targetChat
79
+ end tell`;
80
+ }
81
+ const recipient = escapeAppleScript(parts[2] ?? "");
82
+ return `tell application "${MESSAGES_APP_PATH}"
83
+ set targetService to 1st service whose service type = iMessage
84
+ set targetBuddy to buddy "${recipient}" of targetService
85
+ send POSIX file "${escapedPath}" to targetBuddy
86
+ end tell`;
87
+ }
88
+ // ── Attachment staging & verification ─────────────────────────────────────────
89
+ /**
90
+ * Copy an attachment into a location the sandboxed imagent process is allowed
91
+ * to read. Paths under ~/Library/Messages/Attachments/ are proven-good; paths
92
+ * under ~/.pi/... or ~/dotfile/... get rejected by TCC (Operation not permitted),
93
+ * which shows up as transfer_state=6 / is_sent=0 in chat.db.
94
+ *
95
+ * Returns the staged path; caller is responsible for cleanup after send.
96
+ */
97
+ async function stageAttachment(sourcePath) {
98
+ // If the source is already inside the Attachments root, imagent can read it.
99
+ if (sourcePath.startsWith(`${ATTACHMENTS_ROOT}/`)) {
100
+ return { stagedPath: sourcePath, cleanup: async () => { } };
101
+ }
102
+ await mkdir(STAGING_DIR, { recursive: true, mode: 0o755 });
103
+ const ext = extname(sourcePath);
104
+ const base = basename(sourcePath, ext)
105
+ .replace(/[^A-Za-z0-9._-]/g, "_")
106
+ .slice(0, 40);
107
+ const stagedPath = join(STAGING_DIR, `${Date.now()}-${randomUUID().slice(0, 8)}-${base}${ext}`);
108
+ await copyFile(sourcePath, stagedPath);
109
+ return {
110
+ stagedPath,
111
+ cleanup: async () => {
112
+ try {
113
+ await unlink(stagedPath);
114
+ }
115
+ catch {
116
+ // best-effort; Messages may still hold a handle
117
+ }
118
+ },
119
+ };
120
+ }
121
+ /** Poll chat.db until the staged attachment finishes transferring (or times out). */
122
+ async function verifyAttachmentSent(stagedPath, timeoutMs) {
123
+ const stagedBase = basename(stagedPath);
124
+ // filename in chat.db can be stored as absolute path or "~/Library/Messages/Attachments/...",
125
+ // so match on the unique basename we generated (Date.now() + UUID prefix).
126
+ const sql = `SELECT a.ROWID AS attachment_id, a.transfer_state, m.is_sent, m.error
127
+ FROM attachment a
128
+ LEFT JOIN message_attachment_join j ON j.attachment_id = a.ROWID
129
+ LEFT JOIN message m ON m.ROWID = j.message_id
130
+ WHERE a.filename LIKE '%${stagedBase.replace(/'/g, "''")}'
131
+ ORDER BY a.ROWID DESC
132
+ LIMIT 1;`;
133
+ const deadline = Date.now() + timeoutMs;
134
+ let last = { attachmentId: null, transferState: null, isSent: null, error: null };
135
+ while (Date.now() < deadline) {
136
+ try {
137
+ const { stdout } = await execFileAsync("sqlite3", ["-json", CHAT_DB_PATH, sql], { timeout: 5_000 });
138
+ const rows = stdout.trim() ? JSON.parse(stdout) : [];
139
+ const row = rows[0];
140
+ if (row) {
141
+ last = {
142
+ attachmentId: row.attachment_id ?? null,
143
+ transferState: row.transfer_state ?? null,
144
+ isSent: row.is_sent ?? null,
145
+ error: row.error ?? null,
146
+ };
147
+ // transfer_state: 5 = transferred, 6 = failed, other = in-progress/pending
148
+ if (last.transferState === 5 && last.isSent === 1) {
149
+ return {
150
+ ok: true,
151
+ detail: `attachment_id=${last.attachmentId} transfer_state=5 is_sent=1`,
152
+ ...last,
153
+ };
154
+ }
155
+ if (last.transferState === 6) {
156
+ return {
157
+ ok: false,
158
+ detail: `imagent rejected file (transfer_state=6, is_sent=${last.isSent}, error=${last.error}) — likely TCC/sandbox denial`,
159
+ ...last,
160
+ };
161
+ }
162
+ if (last.error && last.error !== 0) {
163
+ return {
164
+ ok: false,
165
+ detail: `message error=${last.error} transfer_state=${last.transferState} is_sent=${last.isSent}`,
166
+ ...last,
167
+ };
168
+ }
169
+ }
170
+ }
171
+ catch (err) {
172
+ // ignore transient sqlite lock errors; try again
173
+ void err;
174
+ }
175
+ await new Promise((r) => setTimeout(r, ATTACHMENT_VERIFY_POLL_MS));
176
+ }
177
+ return {
178
+ ok: false,
179
+ detail: `timeout after ${timeoutMs}ms (attachment_id=${last.attachmentId} transfer_state=${last.transferState} is_sent=${last.isSent} error=${last.error})`,
180
+ ...last,
181
+ };
182
+ }
55
183
  // ── Environment check ─────────────────────────────────────────────────────────
56
184
  /** Check Messages.app is running and iMessage is signed in. */
57
185
  export async function checkEnvironment() {
@@ -63,15 +191,14 @@ export async function checkEnvironment() {
63
191
  throw new Error("Messages.app is not running");
64
192
  }
65
193
  // 2. Check Full Disk Access (required to read chat.db)
66
- const chatDbPath = join(homedir(), "Library", "Messages", "chat.db");
67
194
  try {
68
- accessSync(chatDbPath, constants.R_OK);
195
+ accessSync(CHAT_DB_PATH, constants.R_OK);
69
196
  }
70
197
  catch {
71
- throw new Error(`Cannot read ${chatDbPath} — grant Full Disk Access to your terminal in System Settings > Privacy & Security > Full Disk Access`);
198
+ throw new Error(`Cannot read ${CHAT_DB_PATH} — grant Full Disk Access to your terminal in System Settings > Privacy & Security > Full Disk Access`);
72
199
  }
73
200
  // 3. Check iMessage has active accounts
74
- const script = `tell application "Messages"
201
+ const script = `tell application "${MESSAGES_APP_PATH}"
75
202
  try
76
203
  set accountList to every account
77
204
  if (count of accountList) is 0 then return "no_accounts"
@@ -79,21 +206,19 @@ export async function checkEnvironment() {
79
206
  if enabled of acct is true then return "active"
80
207
  end repeat
81
208
  return "inactive"
82
- on error
83
- return "error"
209
+ on error errorMessage number errorNumber
210
+ return "error " & errorNumber & ": " & errorMessage
84
211
  end try
85
212
  end tell`;
86
213
  try {
87
214
  const { stdout } = await execFileAsync("osascript", ["-e", script], { timeout: 5_000 });
88
215
  const status = stdout.trim();
89
216
  if (status !== "active") {
90
- throw new Error(`iMessage account status: ${status}`);
217
+ console.warn(`[send] iMessage account status check returned ${status}; continuing so the watchdog can diagnose send failures`);
91
218
  }
92
219
  }
93
220
  catch (error) {
94
- if (error instanceof Error && error.message.startsWith("iMessage account"))
95
- throw error;
96
- throw new Error(`Failed to check iMessage status: ${error instanceof Error ? error.message : String(error)}`);
221
+ console.warn(`[send] failed to check iMessage status; continuing so the watchdog can diagnose send failures: ${error instanceof Error ? error.message : String(error)}`);
97
222
  }
98
223
  }
99
224
  export function createMessageSender() {
@@ -111,6 +236,34 @@ export function createMessageSender() {
111
236
  await execFileAsync("osascript", ["-e", script], { timeout: SCRIPT_TIMEOUT_MS });
112
237
  console.log(`[send] sent to ${chatGuid} mode=${mode} duration_ms=${Date.now() - startTime}: "${text.substring(0, 60)}"`);
113
238
  },
239
+ async sendAttachment(chatGuid, filePath) {
240
+ const startTime = Date.now();
241
+ accessSync(filePath, constants.R_OK);
242
+ const origName = basename(filePath);
243
+ console.log(`[send] start: ${chatGuid} mode=attachment file=${origName}`);
244
+ const { stagedPath, cleanup } = await stageAttachment(filePath);
245
+ const staged = stagedPath !== filePath;
246
+ if (staged) {
247
+ console.log(`[send] staged attachment for imagent: ${basename(stagedPath)}`);
248
+ }
249
+ try {
250
+ const script = buildSendAttachmentScript(chatGuid, stagedPath);
251
+ await execFileAsync("osascript", ["-e", script], { timeout: SCRIPT_TIMEOUT_MS });
252
+ const status = await verifyAttachmentSent(stagedPath, ATTACHMENT_VERIFY_TIMEOUT_MS);
253
+ if (!status.ok) {
254
+ throw new Error(`attachment send failed for ${origName}: ${status.detail}`);
255
+ }
256
+ console.log(`[send] sent attachment to ${chatGuid} duration_ms=${Date.now() - startTime}: "${origName}" (${status.detail})`);
257
+ }
258
+ finally {
259
+ if (staged) {
260
+ // Give Messages a moment to fully ingest before removing the staged copy.
261
+ setTimeout(() => {
262
+ cleanup().catch(() => { });
263
+ }, 60_000).unref();
264
+ }
265
+ }
266
+ },
114
267
  };
115
268
  }
116
269
  //# sourceMappingURL=send.js.map
package/dist/send.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../src/send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../src/send.ts"],"names":[],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -10,7 +10,7 @@
10
10
  * Each line is a Message serialised as JSON.
11
11
  * The file is never rewritten — only appended to.
12
12
  */
13
- import type { MessageType } from "./types.js";
13
+ import type { IncomingMessage, MessageType } from "./types.js";
14
14
  /**
15
15
  * A message in a chat — user or bot.
16
16
  *
@@ -37,8 +37,21 @@ export declare function firstLinePreview(text: string | null): string;
37
37
  export interface ChatStoreConfig {
38
38
  workingDir: string;
39
39
  }
40
+ export interface ArchivedImageRecord {
41
+ date: string;
42
+ day: string;
43
+ sender: string;
44
+ chatGuid: string;
45
+ originalPath: string;
46
+ archivedPath: string;
47
+ mimeType: string | null;
48
+ sha256: string;
49
+ sizeBytes: number;
50
+ text: string | null;
51
+ }
40
52
  export interface ChatStore {
41
53
  log(chatGuid: string, message: Omit<Message, "date">): Promise<void>;
54
+ archiveImages(chatGuid: string, incoming: IncomingMessage): Promise<ArchivedImageRecord[]>;
42
55
  }
43
56
  export declare function createChatStore(config: ChatStoreConfig): ChatStore;
44
57
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACvB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,2FAA2F;AAC3F,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI5D;AAID,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACzB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CA4BlE"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI/D;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACvB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,2FAA2F;AAC3F,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI5D;AAoCD,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACzB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;CAC3F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CA4ElE"}
package/dist/store.js CHANGED
@@ -10,9 +10,10 @@
10
10
  * Each line is a Message serialised as JSON.
11
11
  * The file is never rewritten — only appended to.
12
12
  */
13
+ import { createHash } from "node:crypto";
13
14
  import { existsSync, mkdirSync } from "node:fs";
14
- import { appendFile } from "node:fs/promises";
15
- import { join } from "node:path";
15
+ import { appendFile, copyFile, readFile, stat } from "node:fs/promises";
16
+ import { extname, join, relative } from "node:path";
16
17
  // ── Display helpers ───────────────────────────────────────────────────────────
17
18
  /** Sender label for display: "bot" for agent messages, otherwise the raw sender handle. */
18
19
  export function senderLabel(message) {
@@ -24,6 +25,36 @@ export function firstLinePreview(text) {
24
25
  const firstLine = full.split("\n")[0] ?? "";
25
26
  return full.includes("\n") ? `${firstLine}...` : full;
26
27
  }
28
+ function localDay(date) {
29
+ const year = date.getFullYear();
30
+ const month = String(date.getMonth() + 1).padStart(2, "0");
31
+ const day = String(date.getDate()).padStart(2, "0");
32
+ return `${year}-${month}-${day}`;
33
+ }
34
+ function extensionFor(mimeType, path) {
35
+ const fromPath = extname(path);
36
+ if (fromPath)
37
+ return fromPath.toLowerCase();
38
+ switch (mimeType) {
39
+ case "image/jpeg":
40
+ return ".jpg";
41
+ case "image/png":
42
+ return ".png";
43
+ case "image/gif":
44
+ return ".gif";
45
+ case "image/webp":
46
+ return ".webp";
47
+ case "image/heic":
48
+ return ".heic";
49
+ case "image/heif":
50
+ return ".heif";
51
+ default:
52
+ return ".img";
53
+ }
54
+ }
55
+ function safeSegment(value) {
56
+ return value.replace(/[^a-zA-Z0-9._+-]+/g, "_").slice(0, 80) || "unknown";
57
+ }
27
58
  export function createChatStore(config) {
28
59
  const { workingDir } = config;
29
60
  if (!existsSync(workingDir)) {
@@ -42,10 +73,52 @@ export function createChatStore(config) {
42
73
  async function append(chatGuid, message) {
43
74
  await appendFile(logPath(chatGuid), `${JSON.stringify(message)}\n`, "utf-8");
44
75
  }
76
+ async function archiveImages(chatGuid, incoming) {
77
+ const now = new Date();
78
+ const date = now.toISOString();
79
+ const day = localDay(now);
80
+ const imageDir = join(chatDir(chatGuid), "images", day);
81
+ mkdirSync(imageDir, { recursive: true });
82
+ const records = [];
83
+ for (const attachment of incoming.attachments) {
84
+ if (!attachment.mimeType?.startsWith("image/"))
85
+ continue;
86
+ const originalPath = attachment.path;
87
+ const bytes = await readFile(originalPath);
88
+ const sha256 = createHash("sha256").update(bytes).digest("hex");
89
+ const extension = extensionFor(attachment.mimeType, originalPath);
90
+ const filename = `${date.replace(/[:.]/g, "-")}-${safeSegment(incoming.sender)}-${sha256.slice(0, 12)}${extension}`;
91
+ const archivedAbsPath = join(imageDir, filename);
92
+ if (!existsSync(archivedAbsPath)) {
93
+ await copyFile(attachment.path, archivedAbsPath);
94
+ }
95
+ const sizeBytes = (await stat(archivedAbsPath)).size;
96
+ const archivedPath = relative(workingDir, archivedAbsPath);
97
+ attachment.path = archivedAbsPath;
98
+ records.push({
99
+ date,
100
+ day,
101
+ sender: incoming.sender,
102
+ chatGuid,
103
+ originalPath,
104
+ archivedPath,
105
+ mimeType: attachment.mimeType,
106
+ sha256,
107
+ sizeBytes,
108
+ text: incoming.text,
109
+ });
110
+ }
111
+ if (records.length > 0) {
112
+ const indexPath = join(chatDir(chatGuid), "images", "index.jsonl");
113
+ await appendFile(indexPath, `${records.map((record) => JSON.stringify(record)).join("\n")}\n`, "utf-8");
114
+ }
115
+ return records;
116
+ }
45
117
  return {
46
118
  async log(chatGuid, message) {
47
119
  await append(chatGuid, { date: new Date().toISOString(), ...message });
48
120
  },
121
+ archiveImages,
49
122
  };
50
123
  }
51
124
  //# sourceMappingURL=store.js.map
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAyBjC,iFAAiF;AAEjF,2FAA2F;AAC3F,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC3C,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACnD,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IACnD,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAYD,MAAM,UAAU,eAAe,CAAC,MAAuB;IACtD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE9B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,OAAO,CAAC,QAAgB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,SAAS,OAAO,CAAC,QAAgB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,OAAgB;QACvD,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO;QACN,KAAK,CAAC,GAAG,CAAC,QAAgB,EAAE,OAA8B;YACzD,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;KACD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/tasks.d.ts CHANGED
@@ -6,6 +6,7 @@
6
6
  * before:
7
7
  * logIncoming — logs the received message
8
8
  * dropSelfEcho — drops messages that are echoes of the bot's own replies
9
+ * archiveImages — copies image attachments into chat/images/YYYY-MM-DD
9
10
  * storeIncoming — persists the incoming message to log.jsonl
10
11
  * checkReplyEnabled — drops messages when reply is disabled by settings
11
12
  * downloadImages — reads image attachments from disk and populates incoming.images
@@ -36,6 +37,8 @@ import type { ChatStore } from "./store.js";
36
37
  * [sid] <- [GROUP] Family|+16501234567: dinner at 6? [2 attachment(s)]
37
38
  */
38
39
  export declare function createLogIncomingTask(digestLogger: DigestLogger): BeforeTask;
40
+ /** Copy image attachments into the chat workspace and update their paths before logging/reading. */
41
+ export declare function createArchiveImagesTask(store: ChatStore): BeforeTask;
39
42
  /** Persist the incoming message to log.jsonl. Always passes through. */
40
43
  export declare function createStoreIncomingTask(store: ChatStore): BeforeTask;
41
44
  /** Drop messages that are echoes of the bot's own replies. */
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAU,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAW,MAAM,YAAY,CAAC;AA2BrD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU,CAU5E;AAED,wEAAwE;AACxE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAgBpE;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,UAAU,CAQ7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,QAAQ,GAAG,UAAU,CAQnF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,UAAU,CAmBrD;AAaD,wBAAgB,sBAAsB,IAAI,UAAU,CAanD;AAqED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAsDvE;AAwBD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAWlE;AAID,iEAAiE;AACjE,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,QAAQ,GACzB,OAAO,CAQT;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAUzE;AAED,+CAA+C;AAC/C,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAkBjE"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAU,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAW,MAAM,YAAY,CAAC;AA2BrD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU,CAU5E;AAED,oGAAoG;AACpG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAYpE;AAED,wEAAwE;AACxE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAgBpE;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,UAAU,CAQ7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,QAAQ,GAAG,UAAU,CAQnF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,UAAU,CAmBrD;AAaD,wBAAgB,sBAAsB,IAAI,UAAU,CAanD;AAqED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAsDvE;AAwBD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAWlE;AAID,iEAAiE;AACjE,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,QAAQ,GACzB,OAAO,CAQT;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAUzE;AAED,+CAA+C;AAC/C,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAkBjE"}
package/dist/tasks.js CHANGED
@@ -6,6 +6,7 @@
6
6
  * before:
7
7
  * logIncoming — logs the received message
8
8
  * dropSelfEcho — drops messages that are echoes of the bot's own replies
9
+ * archiveImages — copies image attachments into chat/images/YYYY-MM-DD
9
10
  * storeIncoming — persists the incoming message to log.jsonl
10
11
  * checkReplyEnabled — drops messages when reply is disabled by settings
11
12
  * downloadImages — reads image attachments from disk and populates incoming.images
@@ -63,6 +64,21 @@ export function createLogIncomingTask(digestLogger) {
63
64
  return outgoing;
64
65
  };
65
66
  }
67
+ /** Copy image attachments into the chat workspace and update their paths before logging/reading. */
68
+ export function createArchiveImagesTask(store) {
69
+ return async (chat, incoming, outgoing) => {
70
+ try {
71
+ const archived = await store.archiveImages(chat.chatGuid, incoming);
72
+ if (archived.length > 0) {
73
+ console.log(`[sid] archived ${archived.length} image(s) for ${chat.chatGuid}`);
74
+ }
75
+ }
76
+ catch (error) {
77
+ console.error(`[sid] failed to archive image attachments for ${chat.chatGuid}:`, error);
78
+ }
79
+ return outgoing;
80
+ };
81
+ }
66
82
  /** Persist the incoming message to log.jsonl. Always passes through. */
67
83
  export function createStoreIncomingTask(store) {
68
84
  return (chat, incoming, outgoing) => {
package/dist/tasks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Shared types for the iMessage bot pipeline.
3
3
  */
4
- import type { ImageContent } from "@mariozechner/pi-ai";
4
+ import type { ImageContent } from "@earendil-works/pi-ai";
5
5
  /**
6
6
  * Message type, derived from service and chatGuid structure:
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC;AAIvD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,WAAW,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAGvD;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IAC1B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qEAAqE;IACrE,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,sFAAsF;IACtF,MAAM,EAAE,YAAY,EAAE,CAAC;CACvB;AAID,gFAAgF;AAChF,MAAM,MAAM,UAAU,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAI5F,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAY1D;AAID,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACxB;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC;AAIvD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,WAAW,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAGvD;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IAC1B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qEAAqE;IACrE,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,sFAAsF;IACtF,MAAM,EAAE,YAAY,EAAE,CAAC;CACvB;AAID,gFAAgF;AAChF,MAAM,MAAM,UAAU,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAI5F,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAY1D;AAID,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACxB;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD"}
@@ -1,5 +1,6 @@
1
1
  /** Web server: serves the chat log UI, logs page, and API endpoints. */
2
2
  import type { AgentManager } from "../agent.js";
3
+ import type { ModelHealthChecker } from "../model-health.js";
3
4
  import type { SelfEchoFilter } from "../self-echo.js";
4
5
  import type { MessageSender } from "../send.js";
5
6
  import type { Settings } from "../settings.js";
@@ -12,6 +13,7 @@ export interface WebServerConfig {
12
13
  sender: MessageSender;
13
14
  echoFilter: SelfEchoFilter;
14
15
  agent: AgentManager;
16
+ checkModelHealth: ModelHealthChecker;
15
17
  }
16
18
  export interface WebServer {
17
19
  start(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAKxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,QAAQ,CAAC;IAC5B,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,cAAc,CAAC;IAC3B,KAAK,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAgDD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CA6NlE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAKxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,QAAQ,CAAC;IAC5B,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,cAAc,CAAC;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,gBAAgB,EAAE,kBAAkB,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAgDD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CA4OlE"}