@kingcrab/pi-imessage 0.0.31 → 0.0.33

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/README.md CHANGED
@@ -31,11 +31,11 @@ pi-imessage install # install as launchd service (auto-start on boot, restar
31
31
 
32
32
  ## Web UI
33
33
 
34
- Available at `http://localhost:7750` (configurable via `WEB_PORT`).
34
+ Available at `http://localhost:7750` (configurable via `WEB_HOST` and `WEB_PORT`).
35
35
 
36
- - Displays chat logs from the last 7 days, sorted by most recent activity
37
- - Toggle reply on/off per chat
38
- - Live updates via SSE when new messages arrive
36
+ - Chat history with live updates
37
+ - Logs (tail -f style)
38
+ - Memory (global & per-chat)
39
39
 
40
40
  P.S. Disable with `WEB_ENABLED=false` and let the agent build your own web UI
41
41
 
@@ -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;AA8BD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAqMlE"}
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"}
package/dist/web/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /** Web server: serves the chat log UI, logs page, and API endpoints. */
2
- import { existsSync, readFileSync, watch } from "node:fs";
2
+ import { existsSync, readFileSync, readdirSync, watch } from "node:fs";
3
3
  import { createServer } from "node:http";
4
4
  import { join } from "node:path";
5
5
  import { getChatBlocks } from "./data.js";
6
- import { renderLogsPage, renderPage } from "./render.js";
6
+ import { renderLogsPage, renderMemoryPage, renderPage } from "./render.js";
7
7
  /** Read the tail of a log file. */
8
8
  function readLogTail(path, maxLines) {
9
9
  if (!existsSync(path))
@@ -33,6 +33,25 @@ function parseJsonBody(request) {
33
33
  request.on("error", reject);
34
34
  });
35
35
  }
36
+ /** Read global and per-chat MEMORY.md files. */
37
+ function readMemories(workingDir) {
38
+ const globalMemoryPath = join(workingDir, "MEMORY.md");
39
+ const globalMemory = existsSync(globalMemoryPath) ? readFileSync(globalMemoryPath, "utf-8").trim() : "";
40
+ const chatMemories = [];
41
+ if (existsSync(workingDir)) {
42
+ for (const entry of readdirSync(workingDir, { withFileTypes: true })) {
43
+ if (!entry.isDirectory())
44
+ continue;
45
+ const memPath = join(workingDir, entry.name, "MEMORY.md");
46
+ if (existsSync(memPath)) {
47
+ const content = readFileSync(memPath, "utf-8").trim();
48
+ if (content)
49
+ chatMemories.push({ name: entry.name, content });
50
+ }
51
+ }
52
+ }
53
+ return { globalMemory, chatMemories };
54
+ }
36
55
  export function createWebServer(config) {
37
56
  const { workingDir, host, port, getSettings, setSettings, sender, echoFilter, agent } = config;
38
57
  const sseClients = new Set();
@@ -53,7 +72,7 @@ export function createWebServer(config) {
53
72
  return;
54
73
  try {
55
74
  fsWatcher = watch(workingDir, { recursive: true }, (_event, filename) => {
56
- if (filename?.endsWith("log.jsonl"))
75
+ if (filename?.endsWith("log.jsonl") || filename?.endsWith(".log") || filename?.endsWith("MEMORY.md"))
57
76
  broadcast();
58
77
  });
59
78
  fsWatcher.on("error", () => { });
@@ -93,6 +112,19 @@ export function createWebServer(config) {
93
112
  request.on("close", () => sseClients.delete(response));
94
113
  return;
95
114
  }
115
+ // Memory page
116
+ if (url.pathname === "/memory" && request.method === "GET") {
117
+ const { globalMemory, chatMemories } = readMemories(workingDir);
118
+ const html = renderMemoryPage(globalMemory, chatMemories);
119
+ response.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
120
+ response.end(html);
121
+ return;
122
+ }
123
+ // Memory data API (JSON)
124
+ if (url.pathname === "/memory/data" && request.method === "GET") {
125
+ jsonResponse(response, 200, readMemories(workingDir));
126
+ return;
127
+ }
96
128
  // Logs page
97
129
  if (url.pathname === "/logs" && request.method === "GET") {
98
130
  const appLog = readLogTail(join(workingDir, "app.log"), 200);
@@ -102,6 +134,13 @@ export function createWebServer(config) {
102
134
  response.end(html);
103
135
  return;
104
136
  }
137
+ // Logs data API (JSON)
138
+ if (url.pathname === "/logs/data" && request.method === "GET") {
139
+ const appLog = readLogTail(join(workingDir, "app.log"), 200);
140
+ const digestLog = readLogTail(join(workingDir, "digest.log"), 200);
141
+ jsonResponse(response, 200, { appLog, digestLog });
142
+ return;
143
+ }
105
144
  // POST /send — send a message directly to a chat
106
145
  if (request.method === "POST" && url.pathname === "/send") {
107
146
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,9 @@ import type { Settings } from "../settings.js";
3
3
  import type { ChatBlock } from "./data.js";
4
4
  export declare function renderPage(blocks: ChatBlock[], settings: Settings): string;
5
5
  export declare function renderLogsPage(appLog: string, digestLog: string): string;
6
+ export interface ChatMemory {
7
+ name: string;
8
+ content: string;
9
+ }
10
+ export declare function renderMemoryPage(globalMemory: string, chatMemories: ChatMemory[]): string;
6
11
  //# sourceMappingURL=render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAMtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AA6D3C,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAG1E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExE"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAMtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AA6D3C,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAG1E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM,CAEzF"}
@@ -50,4 +50,7 @@ export function renderPage(blocks, settings) {
50
50
  export function renderLogsPage(appLog, digestLog) {
51
51
  return eta.render("logs", { appLog, digestLog });
52
52
  }
53
+ export function renderMemoryPage(globalMemory, chatMemories) {
54
+ return eta.render("memory", { globalMemory, chatMemories });
55
+ }
53
56
  //# sourceMappingURL=render.js.map
@@ -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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"}
@@ -9,31 +9,62 @@ nav a:hover, nav a.active { opacity: 1 }
9
9
  .content { flex: 1; display: flex; flex-direction: column; gap: 16px; padding: 40px; overflow: hidden }
10
10
  .card { flex: 1; background: #1a1a1a; display: flex; flex-direction: column; overflow: hidden; min-height: 0 }
11
11
  .card-header { padding: 8px 16px; opacity: .4; flex-shrink: 0; border-bottom: 1px solid #252525 }
12
- .card-body { flex: 1; overflow-y: auto; padding: 12px 16px; display: flex; flex-direction: column-reverse }
12
+ .card-body { flex: 1; overflow-y: auto; padding: 12px 16px }
13
13
  pre { white-space: pre-wrap; word-break: break-word; opacity: .7; margin: 0 }
14
14
  </style></head><body>
15
15
 
16
16
  <nav>
17
17
  <a href="/">Recent Chats</a>
18
18
  <a href="/logs" class="active">Logs</a>
19
+ <a href="/memory">Memory</a>
19
20
  </nav>
20
21
 
21
22
  <div class="content">
22
23
  <div class="card">
23
24
  <div class="card-header">digest.log</div>
24
- <div class="card-body">
25
- <pre><%= it.digestLog %></pre>
25
+ <div class="card-body" id="digest-body">
26
+ <pre id="digest-pre"><%= it.digestLog %></pre>
26
27
  </div>
27
28
  </div>
28
29
  <div class="card">
29
30
  <div class="card-header">app.log</div>
30
- <div class="card-body">
31
- <pre><%= it.appLog %></pre>
31
+ <div class="card-body" id="app-body">
32
+ <pre id="app-pre"><%= it.appLog %></pre>
32
33
  </div>
33
34
  </div>
34
35
  </div>
35
36
 
36
37
  <script>
37
- setTimeout(() => location.reload(), 5000);
38
+ function isAtBottom(el) {
39
+ return el.scrollHeight - el.scrollTop - el.clientHeight < 20;
40
+ }
41
+
42
+ function initScroll() {
43
+ document.getElementById('digest-body').scrollTop = document.getElementById('digest-body').scrollHeight;
44
+ document.getElementById('app-body').scrollTop = document.getElementById('app-body').scrollHeight;
45
+ }
46
+
47
+ async function refreshLogs() {
48
+ try {
49
+ const resp = await fetch('/logs/data');
50
+ const data = await resp.json();
51
+ const pairs = [
52
+ ['digest-pre', 'digest-body', data.digestLog],
53
+ ['app-pre', 'app-body', data.appLog],
54
+ ];
55
+ for (const [preId, bodyId, text] of pairs) {
56
+ const pre = document.getElementById(preId);
57
+ const body = document.getElementById(bodyId);
58
+ const wasAtBottom = isAtBottom(body);
59
+ pre.textContent = text;
60
+ if (wasAtBottom) body.scrollTop = body.scrollHeight;
61
+ }
62
+ } catch {}
63
+ }
64
+
65
+ initScroll();
66
+ const es = new EventSource('/events');
67
+ es.addEventListener('update', refreshLogs);
68
+ setInterval(refreshLogs, 3000);
38
69
  </script>
39
70
  </body></html>
@@ -0,0 +1,86 @@
1
+ <!DOCTYPE html>
2
+ <html><head><meta charset="UTF-8"><title>blue — memory</title>
3
+ <style>
4
+ * { margin: 0; padding: 0 }
5
+ body { background: #111; color: #ccc; font: 13px/1.6 monospace; display: flex; height: 100vh; overflow: hidden }
6
+ nav { width: 100px; flex-shrink: 0; padding: 40px 16px; border-right: 1px solid #1a1a1a }
7
+ nav a { display: block; color: inherit; text-decoration: none; line-height: 2.4; opacity: .35 }
8
+ nav a:hover, nav a.active { opacity: 1 }
9
+ .content { flex: 1; padding: 40px; overflow-y: auto }
10
+ .sidebar { width: 200px; flex-shrink: 0; padding: 40px 16px; border-left: 1px solid #1a1a1a; overflow-y: auto }
11
+ .sidebar a { display: block; color: inherit; text-decoration: none; line-height: 2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; opacity: .55 }
12
+ .sidebar a:hover { opacity: 1 }
13
+ .card { background: #1a1a1a; margin-bottom: 24px; scroll-margin-top: 40px }
14
+ .card-header { padding: 8px 16px; opacity: .4; border-bottom: 1px solid #252525 }
15
+ .card-body { padding: 12px 16px }
16
+ pre { white-space: pre-wrap; word-break: break-word; opacity: .7; margin: 0 }
17
+ .empty { opacity: .3; font-style: italic }
18
+ </style></head><body>
19
+
20
+ <nav>
21
+ <a href="/">Recent Chats</a>
22
+ <a href="/logs">Logs</a>
23
+ <a href="/memory" class="active">Memory</a>
24
+ </nav>
25
+
26
+ <div class="content" id="content">
27
+ <div class="card">
28
+ <div class="card-header">MEMORY.md (global)</div>
29
+ <div class="card-body">
30
+ <% if (it.globalMemory) { %>
31
+ <pre><%= it.globalMemory %></pre>
32
+ <% } else { %>
33
+ <p class="empty">(empty)</p>
34
+ <% } %>
35
+ </div>
36
+ </div>
37
+
38
+ <% it.chatMemories.forEach(function(chat) { %>
39
+ <div class="card" id="mem-<%= chat.name %>">
40
+ <div class="card-header"><%= chat.name %>/MEMORY.md</div>
41
+ <div class="card-body">
42
+ <pre><%= chat.content %></pre>
43
+ </div>
44
+ </div>
45
+ <% }) %>
46
+ </div>
47
+
48
+ <div class="sidebar">
49
+ <a href="#" style="opacity:.4">global</a>
50
+ <% it.chatMemories.forEach(function(chat) { %>
51
+ <a href="#mem-<%= chat.name %>"><%= chat.name %></a>
52
+ <% }) %>
53
+ </div>
54
+
55
+ <script>
56
+ async function refreshMemory() {
57
+ try {
58
+ const resp = await fetch('/memory/data');
59
+ const data = await resp.json();
60
+ const content = document.getElementById('content');
61
+ let html = '<div class="card"><div class="card-header">MEMORY.md (global)</div><div class="card-body">';
62
+ if (data.globalMemory) {
63
+ html += '<pre>' + escapeHtml(data.globalMemory) + '</pre>';
64
+ } else {
65
+ html += '<p class="empty">(empty)</p>';
66
+ }
67
+ html += '</div></div>';
68
+ for (const chat of data.chatMemories) {
69
+ html += '<div class="card" id="mem-' + chat.name + '"><div class="card-header">'
70
+ + escapeHtml(chat.name) + '/MEMORY.md</div><div class="card-body"><pre>'
71
+ + escapeHtml(chat.content) + '</pre></div></div>';
72
+ }
73
+ content.innerHTML = html;
74
+ } catch {}
75
+ }
76
+
77
+ function escapeHtml(text) {
78
+ const div = document.createElement('div');
79
+ div.textContent = text;
80
+ return div.innerHTML;
81
+ }
82
+
83
+ const es = new EventSource('/events');
84
+ es.addEventListener('update', refreshMemory);
85
+ </script>
86
+ </body></html>
@@ -27,6 +27,7 @@ td { vertical-align: top; padding: 1px 0 }
27
27
  <nav>
28
28
  <a href="/" class="active">Recent Chats</a>
29
29
  <a href="/logs">Logs</a>
30
+ <a href="/memory">Memory</a>
30
31
  </nav>
31
32
 
32
33
  <div class="content">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kingcrab/pi-imessage",
3
- "version": "0.0.31",
3
+ "version": "0.0.33",
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",