@kingcrab/pi-imessage 0.0.13 → 0.0.15

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/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
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"}
package/dist/tasks.d.ts CHANGED
@@ -8,16 +8,17 @@
8
8
  * dropSelfEcho — drops messages that are echoes of the bot's own replies
9
9
  * storeIncoming — persists the incoming message to log.jsonl
10
10
  * checkReplyEnabled — drops messages when reply is disabled by settings
11
- * downloadImages — downloads image attachments and populates incoming.images
11
+ * downloadImages — reads image attachments from disk and populates incoming.images
12
12
  * resizeImages — resizes oversized images via macOS sips
13
13
  *
14
14
  * start:
15
- * commandHandler — intercepts slash commands (/new, /status) before the agent
15
+ * commandHandler — intercepts slash commands (/new, /status, /reload) before the agent
16
16
  * callAgent — sends the message to the agent and yields replies as they arrive
17
17
  *
18
18
  * end:
19
- * sendReply — remembers echo, sends reply via BlueBubbles
19
+ * sendReply — remembers echo, sends reply via Messages.app
20
20
  * logOutgoing — logs the outgoing reply
21
+ * storeOutgoing — persists the outgoing reply to log.jsonl
21
22
  */
22
23
  import type { AgentManager } from "./agent.js";
23
24
  import type { DigestLogger } from "./logger.js";
@@ -54,6 +55,12 @@ export declare function createDropSelfEchoTask(echoFilter: SelfEchoFilter): Befo
54
55
  * whitelist: ["1"], bl: ["1"] → no reply (blacklist wins)
55
56
  */
56
57
  export declare function createCheckReplyEnabledTask(getSettings: () => Settings): BeforeTask;
58
+ /**
59
+ * Read image attachments from local disk and populate incoming.images in-place.
60
+ * Non-image attachments are skipped; failed reads are logged and silently skipped.
61
+ */
62
+ export declare function createDownloadImagesTask(): BeforeTask;
63
+ export declare function createResizeImagesTask(): BeforeTask;
57
64
  /**
58
65
  * Intercept slash commands (e.g. "/new", "/status") before they reach the agent.
59
66
  * Sets shouldContinue=false on the outgoing message to skip subsequent start tasks.
@@ -64,12 +71,7 @@ export declare function createCheckReplyEnabledTask(getSettings: () => Settings)
64
71
  * /reload — reload models and clear all sessions.
65
72
  */
66
73
  export declare function createCommandHandlerTask(agent: AgentManager): StartTask;
67
- /**
68
- * Read image attachments from local disk and populate incoming.images in-place.
69
- * Non-image attachments are skipped; failed reads are logged and silently skipped.
70
- */
71
- export declare function createDownloadImagesTask(): BeforeTask;
72
- export declare function createResizeImagesTask(): BeforeTask;
74
+ /** Send the message to the agent and dispatch a reply for each agent turn. */
73
75
  export declare function createCallAgentTask(agent: AgentManager): StartTask;
74
76
  /** Remember echo and send reply via Messages.app AppleScript. */
75
77
  export declare function createSendReplyTask(echoFilter: SelfEchoFilter, sender: MessageSender): EndTask;
@@ -80,7 +82,6 @@ export declare function createSendReplyTask(echoFilter: SelfEchoFilter, sender:
80
82
  * [sid] -> [DM] +16501234567: sure, I'll check
81
83
  * [sid] -> [SMS] +16501234567: got it
82
84
  * [sid] -> [GROUP] Family: sounds good!
83
- * [sid] -> [DM] +16501234567: (reaction: love)
84
85
  */
85
86
  export declare function createLogOutgoingTask(digestLogger: DigestLogger): EndTask;
86
87
  /** Persist the outgoing reply to log.jsonl. */
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAc,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChF,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,EAAE,MAAM,YAAY,CAAC;AAiB5C;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU,CAU5E;AAED,wEAAwE;AACxE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAOpE;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;AAID;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAoCvE;AAID;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,UAAU,CAmBrD;AAcD,wBAAgB,sBAAsB,IAAI,UAAU,CAcnD;AAgFD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAWlE;AAID,iEAAiE;AACjE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAU9F;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAUzE;AAED,+CAA+C;AAC/C,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAYjE"}
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;AAiBrD;;;;;;;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;AAcD,wBAAgB,sBAAsB,IAAI,UAAU,CAcnD;AA2DD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAoCvE;AAwBD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAWlE;AAID,iEAAiE;AACjE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAQ9F;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
@@ -8,16 +8,17 @@
8
8
  * dropSelfEcho — drops messages that are echoes of the bot's own replies
9
9
  * storeIncoming — persists the incoming message to log.jsonl
10
10
  * checkReplyEnabled — drops messages when reply is disabled by settings
11
- * downloadImages — downloads image attachments and populates incoming.images
11
+ * downloadImages — reads image attachments from disk and populates incoming.images
12
12
  * resizeImages — resizes oversized images via macOS sips
13
13
  *
14
14
  * start:
15
- * commandHandler — intercepts slash commands (/new, /status) before the agent
15
+ * commandHandler — intercepts slash commands (/new, /status, /reload) before the agent
16
16
  * callAgent — sends the message to the agent and yields replies as they arrive
17
17
  *
18
18
  * end:
19
- * sendReply — remembers echo, sends reply via BlueBubbles
19
+ * sendReply — remembers echo, sends reply via Messages.app
20
20
  * logOutgoing — logs the outgoing reply
21
+ * storeOutgoing — persists the outgoing reply to log.jsonl
21
22
  */
22
23
  import { execFile } from "node:child_process";
23
24
  import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
@@ -25,15 +26,15 @@ import { tmpdir } from "node:os";
25
26
  import { join } from "node:path";
26
27
  import { promisify } from "node:util";
27
28
  import { isReplyEnabled } from "./settings.js";
28
- import { formatAgentReply } from "./types.js";
29
+ import { displayTarget, formatAgentReply } from "./types.js";
29
30
  // ── Helpers ───────────────────────────────────────────────────────────────────
30
- function messageTypeLabel(msg) {
31
- if (msg.messageType === "group")
31
+ function messageTypeLabel(chat) {
32
+ if (chat.messageType === "group")
32
33
  return "GROUP";
33
- return msg.messageType === "sms" ? "SMS" : "DM";
34
+ return chat.messageType === "sms" ? "SMS" : "DM";
34
35
  }
35
- function formatTarget(msg) {
36
- return msg.messageType === "group" ? `${msg.groupName}|${msg.sender}` : msg.sender;
36
+ function formatIncomingTarget(chat, incoming) {
37
+ return chat.messageType === "group" ? `${chat.groupName}|${incoming.sender}` : incoming.sender;
37
38
  }
38
39
  // ── before tasks ──────────────────────────────────────────────────────────────
39
40
  /**
@@ -45,9 +46,9 @@ function formatTarget(msg) {
45
46
  * [sid] <- [GROUP] Family|+16501234567: dinner at 6? [2 attachment(s)]
46
47
  */
47
48
  export function createLogIncomingTask(digestLogger) {
48
- return (incoming, outgoing) => {
49
- const label = messageTypeLabel(incoming);
50
- const target = formatTarget(incoming);
49
+ return (chat, incoming, outgoing) => {
50
+ const label = messageTypeLabel(chat);
51
+ const target = formatIncomingTarget(chat, incoming);
51
52
  const attachmentNote = incoming.attachments.length > 0 ? ` [${incoming.attachments.length} attachment(s)]` : "";
52
53
  digestLogger.log(`[sid] <- [${label}] ${target}: ${(incoming.text ?? "(attachment)").substring(0, 80)}${attachmentNote}`);
53
54
  return outgoing;
@@ -55,18 +56,27 @@ export function createLogIncomingTask(digestLogger) {
55
56
  }
56
57
  /** Persist the incoming message to log.jsonl. Always passes through. */
57
58
  export function createStoreIncomingTask(store) {
58
- return (incoming, outgoing) => {
59
- store.logIncoming(incoming).catch((error) => {
60
- console.error(`[sid] failed to store incoming message for ${incoming.chatGuid}:`, error);
59
+ return (chat, incoming, outgoing) => {
60
+ store
61
+ .log(chat.chatGuid, {
62
+ sender: incoming.sender,
63
+ text: incoming.text,
64
+ attachments: incoming.attachments.map((a) => a.path),
65
+ fromAgent: false,
66
+ messageType: chat.messageType,
67
+ ...(chat.messageType === "group" && { groupName: chat.groupName }),
68
+ })
69
+ .catch((error) => {
70
+ console.error(`[sid] failed to store incoming message for ${chat.chatGuid}:`, error);
61
71
  });
62
72
  return outgoing;
63
73
  };
64
74
  }
65
75
  /** Drop messages that are echoes of the bot's own replies. */
66
76
  export function createDropSelfEchoTask(echoFilter) {
67
- return (incoming, outgoing) => {
68
- if (incoming.text && echoFilter.isEcho(incoming.chatGuid, incoming.text)) {
69
- console.warn(`[sid] drop self-echo ${incoming.chatGuid}: ${incoming.text.substring(0, 40)}`);
77
+ return (chat, incoming, outgoing) => {
78
+ if (incoming.text && echoFilter.isEcho(chat.chatGuid, incoming.text)) {
79
+ console.warn(`[sid] drop self-echo ${chat.chatGuid}: ${incoming.text.substring(0, 40)}`);
70
80
  return { ...outgoing, shouldContinue: false };
71
81
  }
72
82
  return outgoing;
@@ -87,63 +97,20 @@ export function createDropSelfEchoTask(echoFilter) {
87
97
  * whitelist: ["1"], bl: ["1"] → no reply (blacklist wins)
88
98
  */
89
99
  export function createCheckReplyEnabledTask(getSettings) {
90
- return (incoming, outgoing) => {
91
- if (!isReplyEnabled(getSettings(), incoming.chatGuid)) {
92
- console.log(`[sid] reply disabled for ${incoming.chatGuid}, log-only`);
100
+ return (chat, _incoming, outgoing) => {
101
+ if (!isReplyEnabled(getSettings(), chat.chatGuid)) {
102
+ console.log(`[sid] reply disabled for ${chat.chatGuid}, log-only`);
93
103
  return { ...outgoing, shouldContinue: false };
94
104
  }
95
105
  return outgoing;
96
106
  };
97
107
  }
98
- // ── command tasks ─────────────────────────────────────────────────────────────
99
- /**
100
- * Intercept slash commands (e.g. "/new", "/status") before they reach the agent.
101
- * Sets shouldContinue=false on the outgoing message to skip subsequent start tasks.
102
- *
103
- * Supported commands:
104
- * /new — reset the agent session for this chat (equivalent to /new in pi coding agent).
105
- * /status — show session stats: tokens, cost, context usage, model, thinking level.
106
- * /reload — reload models and clear all sessions.
107
- */
108
- export function createCommandHandlerTask(agent) {
109
- return async (incoming, outgoing, dispatch) => {
110
- const text = incoming.text?.trim();
111
- if (text === "/new") {
112
- await agent.newSession(incoming.chatGuid);
113
- const newSessionReply = "✓ New session started";
114
- console.log(`[sid] /new command: ${incoming.chatGuid} → ${newSessionReply}`);
115
- await dispatch({ ...outgoing, reply: { type: "message", text: newSessionReply } });
116
- const statusReply = await agent.getSessionStatus(incoming.chatGuid);
117
- console.log(`[sid] /new status: ${incoming.chatGuid} → ${statusReply}`);
118
- await dispatch({ ...outgoing, reply: { type: "message", text: statusReply } });
119
- outgoing.shouldContinue = false;
120
- return;
121
- }
122
- if (text === "/status") {
123
- const replyText = await agent.getSessionStatus(incoming.chatGuid);
124
- console.log(`[sid] /status command: ${incoming.chatGuid} → ${replyText}`);
125
- await dispatch({ ...outgoing, reply: { type: "message", text: replyText } });
126
- outgoing.shouldContinue = false;
127
- return;
128
- }
129
- if (text === "/reload") {
130
- await agent.reload(incoming.chatGuid);
131
- const statusReply = await agent.getSessionStatus(incoming.chatGuid);
132
- const replyText = `✓ Models reloaded\n${statusReply}`;
133
- console.log(`[sid] /reload command: ${incoming.chatGuid} → ${replyText}`);
134
- await dispatch({ ...outgoing, reply: { type: "message", text: replyText } });
135
- outgoing.shouldContinue = false;
136
- return;
137
- }
138
- };
139
- }
140
- // ── start tasks ───────────────────────────────────────────────────────────────
141
108
  /**
142
109
  * Read image attachments from local disk and populate incoming.images in-place.
143
110
  * Non-image attachments are skipped; failed reads are logged and silently skipped.
144
111
  */
145
112
  export function createDownloadImagesTask() {
146
- return async (incoming, outgoing) => {
113
+ return async (_chat, incoming, outgoing) => {
147
114
  const images = [];
148
115
  for (const attachment of incoming.attachments) {
149
116
  const mimeType = attachment.mimeType;
@@ -164,7 +131,7 @@ export function createDownloadImagesTask() {
164
131
  };
165
132
  }
166
133
  /**
167
- * Resize images whose longest edge exceeds MAX_EDGE_PX using sharp.
134
+ * Resize images whose longest edge exceeds MAX_EDGE_PX using macOS sips.
168
135
  * Converts to JPEG at 80% quality to keep size well under Anthropic's 5MB limit.
169
136
  *
170
137
  * before: raw downloaded image (any size, any format)
@@ -175,7 +142,7 @@ export function createDownloadImagesTask() {
175
142
  */
176
143
  const MAX_EDGE_PX = 1024;
177
144
  export function createResizeImagesTask() {
178
- return async (incoming, outgoing) => {
145
+ return async (_chat, incoming, outgoing) => {
179
146
  const resized = [];
180
147
  for (const image of incoming.images) {
181
148
  try {
@@ -237,14 +204,55 @@ async function resizeImageIfNeeded(image) {
237
204
  await rm(tempDir, { recursive: true, force: true });
238
205
  }
239
206
  }
240
- /** Send the message to the agent and dispatch a reply for each agent turn. */
207
+ // ── start tasks ───────────────────────────────────────────────────────────────
208
+ /**
209
+ * Intercept slash commands (e.g. "/new", "/status") before they reach the agent.
210
+ * Sets shouldContinue=false on the outgoing message to skip subsequent start tasks.
211
+ *
212
+ * Supported commands:
213
+ * /new — reset the agent session for this chat (equivalent to /new in pi coding agent).
214
+ * /status — show session stats: tokens, cost, context usage, model, thinking level.
215
+ * /reload — reload models and clear all sessions.
216
+ */
217
+ export function createCommandHandlerTask(agent) {
218
+ return async (chat, incoming, outgoing, emit) => {
219
+ const text = incoming.text?.trim();
220
+ if (text === "/new") {
221
+ await agent.newSession(chat.chatGuid);
222
+ const newSessionReply = "✓ New session started";
223
+ console.log(`[sid] /new command: ${chat.chatGuid} → ${newSessionReply}`);
224
+ emit({ ...outgoing, reply: { type: "message", text: newSessionReply } });
225
+ const statusReply = await agent.getSessionStatus(chat.chatGuid);
226
+ console.log(`[sid] /new status: ${chat.chatGuid} → ${statusReply}`);
227
+ emit({ ...outgoing, reply: { type: "message", text: statusReply } });
228
+ outgoing.shouldContinue = false;
229
+ return;
230
+ }
231
+ if (text === "/status") {
232
+ const replyText = await agent.getSessionStatus(chat.chatGuid);
233
+ console.log(`[sid] /status command: ${chat.chatGuid} → ${replyText}`);
234
+ emit({ ...outgoing, reply: { type: "message", text: replyText } });
235
+ outgoing.shouldContinue = false;
236
+ return;
237
+ }
238
+ if (text === "/reload") {
239
+ await agent.reload(chat.chatGuid);
240
+ const statusReply = await agent.getSessionStatus(chat.chatGuid);
241
+ const replyText = `✓ Models reloaded\n${statusReply}`;
242
+ console.log(`[sid] /reload command: ${chat.chatGuid} → ${replyText}`);
243
+ emit({ ...outgoing, reply: { type: "message", text: replyText } });
244
+ outgoing.shouldContinue = false;
245
+ return;
246
+ }
247
+ };
248
+ }
241
249
  /** Decorator: wrap a StartTask with retry logic for transient errors. */
242
250
  function withRetry(task, options) {
243
- return async (incoming, outgoing, dispatch) => {
251
+ return async (chat, incoming, outgoing, emit) => {
244
252
  const { delays, retryable } = options;
245
253
  for (let attempt = 0;; attempt++) {
246
254
  try {
247
- await task(incoming, outgoing, dispatch);
255
+ await task(chat, incoming, outgoing, emit);
248
256
  return;
249
257
  }
250
258
  catch (error) {
@@ -252,18 +260,19 @@ function withRetry(task, options) {
252
260
  if (attempt >= delays.length || !retryable(message))
253
261
  throw error;
254
262
  const delay = delays[attempt];
255
- console.log(`[agent] retrying ${incoming.chatGuid} (attempt ${attempt + 2}/${delays.length + 1}) ` +
263
+ console.log(`[agent] retrying ${chat.chatGuid} (attempt ${attempt + 2}/${delays.length + 1}) ` +
256
264
  `in ${delay / 1000}s: ${message.substring(0, 80)}`);
257
265
  await new Promise((resolve) => setTimeout(resolve, delay));
258
266
  }
259
267
  }
260
268
  };
261
269
  }
270
+ /** Send the message to the agent and dispatch a reply for each agent turn. */
262
271
  export function createCallAgentTask(agent) {
263
- const task = async (incoming, outgoing, dispatch) => {
272
+ const task = async (_chat, incoming, outgoing, emit) => {
264
273
  await agent.processMessage(incoming, async (agentReply) => {
265
274
  const text = formatAgentReply(agentReply);
266
- await dispatch({ ...outgoing, reply: { type: "message", text } });
275
+ emit({ ...outgoing, reply: { type: "message", text } });
267
276
  });
268
277
  };
269
278
  return withRetry(task, {
@@ -274,13 +283,10 @@ export function createCallAgentTask(agent) {
274
283
  // ── end tasks ─────────────────────────────────────────────────────────────────
275
284
  /** Remember echo and send reply via Messages.app AppleScript. */
276
285
  export function createSendReplyTask(echoFilter, sender) {
277
- return async (incoming, outgoing) => {
278
- const { reply, sendReply } = outgoing;
279
- if (!sendReply)
280
- return outgoing;
281
- if (reply.type === "message") {
282
- echoFilter.remember(incoming.chatGuid, reply.text);
283
- await sender.sendMessage(incoming.chatGuid, reply.text);
286
+ return async (chat, outgoing) => {
287
+ if (outgoing.reply.type === "message") {
288
+ echoFilter.remember(chat.chatGuid, outgoing.reply.text);
289
+ await sender.sendMessage(chat.chatGuid, outgoing.reply.text);
284
290
  }
285
291
  return outgoing;
286
292
  };
@@ -292,14 +298,13 @@ export function createSendReplyTask(echoFilter, sender) {
292
298
  * [sid] -> [DM] +16501234567: sure, I'll check
293
299
  * [sid] -> [SMS] +16501234567: got it
294
300
  * [sid] -> [GROUP] Family: sounds good!
295
- * [sid] -> [DM] +16501234567: (reaction: love)
296
301
  */
297
302
  export function createLogOutgoingTask(digestLogger) {
298
- return (incoming, outgoing) => {
303
+ return (chat, outgoing) => {
299
304
  const { reply } = outgoing;
300
305
  if (reply.type === "message") {
301
- const label = messageTypeLabel(incoming);
302
- const target = incoming.messageType === "group" ? incoming.groupName : incoming.sender;
306
+ const label = messageTypeLabel(chat);
307
+ const target = displayTarget(chat);
303
308
  digestLogger.log(`[sid] -> [${label}] ${target}: ${reply.text.substring(0, 80)}`);
304
309
  }
305
310
  return outgoing;
@@ -307,13 +312,19 @@ export function createLogOutgoingTask(digestLogger) {
307
312
  }
308
313
  /** Persist the outgoing reply to log.jsonl. */
309
314
  export function createStoreOutgoingTask(store) {
310
- return (incoming, outgoing) => {
311
- const { reply, sendReply } = outgoing;
312
- if (reply.type === "message") {
315
+ return (chat, outgoing) => {
316
+ if (outgoing.reply.type === "message") {
313
317
  store
314
- .logOutgoing(incoming.chatGuid, reply.text, incoming.messageType, incoming.groupName, !sendReply)
318
+ .log(chat.chatGuid, {
319
+ sender: "bot",
320
+ text: outgoing.reply.text,
321
+ attachments: [],
322
+ fromAgent: true,
323
+ messageType: chat.messageType,
324
+ ...(chat.messageType === "group" && { groupName: chat.groupName }),
325
+ })
315
326
  .catch((error) => {
316
- console.error(`[sid] failed to store outgoing message for ${incoming.chatGuid}:`, error);
327
+ console.error(`[sid] failed to store outgoing message for ${chat.chatGuid}:`, error);
317
328
  });
318
329
  }
319
330
  return 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
@@ -12,6 +12,23 @@ import type { ImageContent } from "@mariozechner/pi-ai";
12
12
  * "iMessage" ";+;" (group) "group"
13
13
  */
14
14
  export type MessageType = "sms" | "imessage" | "group";
15
+ /**
16
+ * Chat-level identity — fixed per chat session.
17
+ * Passed as a first-class parameter through all pipeline tasks.
18
+ */
19
+ export interface ChatContext {
20
+ chatGuid: string;
21
+ messageType: MessageType;
22
+ groupName: string;
23
+ }
24
+ /** Extract ChatContext from an IncomingMessage. */
25
+ export declare function toChatContext(msg: IncomingMessage): ChatContext;
26
+ /**
27
+ * Human-readable display target for a chat.
28
+ * DM/SMS → address extracted from chatGuid ("iMessage;-;+1234" → "+1234")
29
+ * Group → group name
30
+ */
31
+ export declare function displayTarget(chat: ChatContext): string;
15
32
  /** Attachment metadata — local path on disk. */
16
33
  export interface Attachment {
17
34
  /** Local file path (e.g. ~/Library/Messages/Attachments/...). */
@@ -66,13 +83,10 @@ export type ReplyAction = {
66
83
  * reply — the reply action to perform (text or nothing).
67
84
  * shouldContinue — if false, remaining tasks in the current phase and all
68
85
  * later phases are skipped.
69
- * sendReply — if false, the reply is logged but not sent to the user
70
- * (e.g. agent encountered an error).
71
86
  */
72
87
  export interface OutgoingMessage {
73
88
  reply: ReplyAction;
74
89
  shouldContinue: boolean;
75
- sendReply: boolean;
76
90
  }
77
91
  /** Create a default OutgoingMessage (no reply, continue processing). */
78
92
  export declare function createOutgoingMessage(): OutgoingMessage;
@@ -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;AAEvD,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;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACnB;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,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"}
package/dist/types.js CHANGED
@@ -1,6 +1,20 @@
1
1
  /**
2
2
  * Shared types for the iMessage bot pipeline.
3
3
  */
4
+ /** Extract ChatContext from an IncomingMessage. */
5
+ export function toChatContext(msg) {
6
+ return { chatGuid: msg.chatGuid, messageType: msg.messageType, groupName: msg.groupName };
7
+ }
8
+ /**
9
+ * Human-readable display target for a chat.
10
+ * DM/SMS → address extracted from chatGuid ("iMessage;-;+1234" → "+1234")
11
+ * Group → group name
12
+ */
13
+ export function displayTarget(chat) {
14
+ if (chat.messageType === "group")
15
+ return chat.groupName;
16
+ return chat.chatGuid.split(";").pop() ?? chat.chatGuid;
17
+ }
4
18
  const MAX_TOOL_RESULT_LINES = 5;
5
19
  /** Format an AgentReply into a plain-text iMessage string. */
6
20
  export function formatAgentReply(reply) {
@@ -19,6 +33,6 @@ export function formatAgentReply(reply) {
19
33
  }
20
34
  /** Create a default OutgoingMessage (no reply, continue processing). */
21
35
  export function createOutgoingMessage() {
22
- return { reply: { type: "none" }, shouldContinue: true, sendReply: true };
36
+ return { reply: { type: "none" }, shouldContinue: true };
23
37
  }
24
38
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkDH,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAClD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;IAE3D,+DAA+D;IAC/D,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC;IACxE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,OAAO,GAAG,MAAM,KAAK,SAAS,KAAK,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;AACrC,CAAC;AAsBD,wEAAwE;AACxE,MAAM,UAAU,qBAAqB;IACpC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2BH,mDAAmD;AACnD,MAAM,UAAU,aAAa,CAAC,GAAoB;IACjD,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;AAC3F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAiB;IAC9C,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC;IACxD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC;AACxD,CAAC;AAqCD,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAClD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;IAE3D,+DAA+D;IAC/D,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC;IACxE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,OAAO,GAAG,MAAM,KAAK,SAAS,KAAK,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;AACrC,CAAC;AAmBD,wEAAwE;AACxE,MAAM,UAAU,qBAAqB;IACpC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AAC1D,CAAC"}
@@ -1,9 +1,9 @@
1
1
  /** Read chat logs from disk and produce ChatBlock summaries. */
2
- import type { LoggedMessage } from "../store.js";
2
+ import type { Message } from "../store.js";
3
3
  export interface ChatBlock {
4
4
  guid: string;
5
5
  displayName: string;
6
- messages: LoggedMessage[];
6
+ messages: Message[];
7
7
  lastTime: number;
8
8
  }
9
9
  /** Return chat blocks from the last 7 days, sorted by most-recent message. */
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/web/data.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAIhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAmBD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,CAiC7D"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/web/data.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAIhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAmBD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,CAiC7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/web/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/web/data.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ function prepareCard(block) {
35
35
  rows.push({
36
36
  gap: false,
37
37
  time: formatTime(message.date),
38
- arrow: message.isBot ? "->" : "<-",
38
+ arrow: message.fromAgent ? "->" : "<-",
39
39
  channel: channelLabel(message.messageType),
40
40
  sender: senderLabel(message),
41
41
  text: firstLinePreview(message.text),
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kingcrab/pi-imessage",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "description": "AI-powered iMessage bot using pi coding agent — understands images, quoted replies, and conversation context",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -26,8 +26,8 @@
26
26
  "scripts": {
27
27
  "build": "tsc && mkdir -p dist/web/templates && cp src/web/templates/* dist/web/templates/",
28
28
  "prepublishOnly": "npm run build",
29
- "dev": "tsx watch src/main.ts",
30
- "start": "tsx src/main.ts",
29
+ "dev": "NODE_OPTIONS='--use-env-proxy' tsx watch src/main.ts",
30
+ "start": "NODE_OPTIONS='--use-env-proxy' tsx src/main.ts",
31
31
  "test": "vitest run",
32
32
  "typecheck": "tsc --noEmit",
33
33
  "lint": "biome check .",