cimux-mcp 0.1.1 → 0.2.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.
package/dist/bin.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/bin.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { runCimuxCli } from "./cli/cimux-cli.js";
3
+ process.exitCode = await runCimuxCli(process.argv.slice(2));
4
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,CAAC,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,7 +1,8 @@
1
+ import path from "node:path";
1
2
  import { applyInstallPlan, createInstallPlan } from "../install/cimux-install-plan.js";
2
3
  import { defaultDatabasePath, runCimuxMcpServer } from "../mcp/cimux-mcp-server.js";
3
4
  import { resolveRuntimeMailbox } from "../runtime/mailbox-runtime.js";
4
- import { ackContext, checkInbox, createInboxNotification, readContext, registerSession, sendContext } from "../service/cimux-mailbox-service.js";
5
+ import { ackContext, checkInbox, createInboxNotification, createSessionBrief, listMailboxes, readContext, registerSession, sendContext } from "../service/cimux-mailbox-service.js";
5
6
  import { SQLiteCimuxStore } from "../storage/sqlite-cimux-store.js";
6
7
  import { name, version } from "../version.js";
7
8
  export async function runCimuxCli(argv, env = process.env, cwd = process.cwd(), io = console) {
@@ -22,6 +23,15 @@ export async function runCimuxCli(argv, env = process.env, cwd = process.cwd(),
22
23
  if (command === "notify") {
23
24
  return await runNotifyCommand(argv, env, cwd, io);
24
25
  }
26
+ if (command === "brief") {
27
+ return await runBriefCommand(argv, env, cwd, io);
28
+ }
29
+ if (command === "mailboxes") {
30
+ return await withStore(env, async (store) => {
31
+ writeJson(io, await listMailboxes(store));
32
+ return 0;
33
+ });
34
+ }
25
35
  if (command === "install") {
26
36
  return runInstallCommand(argv, io);
27
37
  }
@@ -110,8 +120,19 @@ async function runNotifyCommand(argv, env, cwd, io) {
110
120
  return 0;
111
121
  });
112
122
  }
123
+ async function runBriefCommand(argv, env, cwd, io) {
124
+ return withStore(env, async (store) => {
125
+ const { mailbox } = resolveRuntimeMailboxFromArgs(argv, env, cwd);
126
+ // Runs from a SessionStart hook: register the session's mailbox, then
127
+ // print the norms so agents use Cimux without being prompted.
128
+ await store.createMailbox(mailbox);
129
+ const result = await createSessionBrief(store, { mailbox });
130
+ io.log(result.message);
131
+ return 0;
132
+ });
133
+ }
113
134
  function runInstallCommand(argv, io) {
114
- const plan = createInstallPlan();
135
+ const plan = createInstallPlan({ packageCommand: resolvePackageCommand() });
115
136
  if (!argv.includes("--dry-run")) {
116
137
  const results = applyInstallPlan(plan);
117
138
  for (const result of results) {
@@ -127,6 +148,12 @@ function runInstallCommand(argv, io) {
127
148
  }
128
149
  return 0;
129
150
  }
151
+ function resolvePackageCommand() {
152
+ // GUI-launched harnesses (e.g. the Codex desktop app) do not inherit the
153
+ // shell PATH, so write the absolute path of the running bin into config.
154
+ const binPath = process.argv[1];
155
+ return binPath && path.isAbsolute(binPath) ? binPath : "cimux";
156
+ }
130
157
  async function withStore(env, callback) {
131
158
  const store = new SQLiteCimuxStore(env.CIMUX_DB_PATH ?? defaultDatabasePath());
132
159
  try {
@@ -186,7 +213,9 @@ function usage() {
186
213
  " cimux mcp",
187
214
  " cimux install [--dry-run]",
188
215
  " cimux notify [--mailbox <harness/name> | --harness <name>]",
216
+ " cimux brief [--mailbox <harness/name> | --harness <name>]",
189
217
  " cimux register [--mailbox <harness/name> | --harness <name>]",
218
+ " cimux mailboxes",
190
219
  " cimux send --from <mailbox> --to <mailbox> --title <title> --summary <summary> --body <body> [--tags a,b]",
191
220
  " cimux check --mailbox <harness/name> [--all]",
192
221
  " cimux read --mailbox <harness/name> --id <context-id>",
@@ -1 +1 @@
1
- {"version":3,"file":"cimux-cli.js","sourceRoot":"","sources":["../../src/cli/cimux-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cimux-cli.js","sourceRoot":"","sources":["../../src/cli/cimux-cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,15 +1,13 @@
1
- #!/usr/bin/env node
2
1
  export { name, version } from "./version.js";
3
2
  export declare function getProjectStage(): string;
4
3
  export type { AckState, Artifacts, CodeSnippetArtifact, CommitArtifact, ContextPackage, ContextPackagePreview, CreateContextPackageInput, FileArtifact, FunctionArtifact, Mailbox, MailboxName, NormalizedCreateContextPackageInput, PullRequestArtifact, UrlArtifact } from "./model/context-package.js";
5
4
  export type { AckContextPackageOptions, ContextPackageStore, ListInboxPreviewsOptions, MailboxStore } from "./storage/mailbox-store.js";
6
5
  export type { RegisterMailboxInput, RegisterMailboxResult } from "./registration/mailbox-registration.js";
7
6
  export { ackStateSchema, artifactsSchema, codeSnippetArtifactSchema, commitArtifactSchema, contextPackagePreviewSchema, contextPackageSchema, createContextPackagePreview, createContextPackageInputSchema, DEFAULT_INBOX_PREVIEW_LIMIT, fileArtifactSchema, functionArtifactSchema, MAX_INBOX_PREVIEW_LIMIT, mailboxNameSchema, mailboxSchema, normalizeInboxPreviewLimit, PREVIEW_SUMMARY_MAX_LENGTH, PREVIEW_TAG_MAX_COUNT, PREVIEW_TITLE_MAX_LENGTH, pullRequestArtifactSchema, urlArtifactSchema } from "./model/context-package.js";
8
- export { ackContext, checkInbox, ContextPackageNotFoundError, createInboxNotification, MailboxAccessError, readContext, registerSession, sendContext } from "./service/cimux-mailbox-service.js";
7
+ export { ackContext, checkInbox, ContextPackageNotFoundError, createInboxNotification, createSessionBrief, listMailboxes, MailboxAccessError, readContext, registerSession, sendContext } from "./service/cimux-mailbox-service.js";
9
8
  export { runCimuxCli } from "./cli/cimux-cli.js";
10
9
  export { applyInstallPlan, createInstallPlan } from "./install/cimux-install-plan.js";
11
10
  export { createCimuxMcpServer, defaultDatabasePath, runCimuxMcpServer } from "./mcp/cimux-mcp-server.js";
12
11
  export { resolveRuntimeMailbox } from "./runtime/mailbox-runtime.js";
13
12
  export { inferMailboxName, registerMailboxInputSchema, registerMailbox } from "./registration/mailbox-registration.js";
14
13
  export { SQLiteCimuxStore, UnknownMailboxError } from "./storage/sqlite-cimux-store.js";
15
- export declare function isCliEntrypoint(argvPath?: string | undefined, modulePath?: string): boolean;
package/dist/index.js CHANGED
@@ -1,34 +1,13 @@
1
- #!/usr/bin/env node
2
- import fs from "node:fs";
3
- import { fileURLToPath } from "node:url";
4
- import { runCimuxCli } from "./cli/cimux-cli.js";
5
1
  export { name, version } from "./version.js";
6
2
  export function getProjectStage() {
7
3
  return "local-mvp";
8
4
  }
9
5
  export { ackStateSchema, artifactsSchema, codeSnippetArtifactSchema, commitArtifactSchema, contextPackagePreviewSchema, contextPackageSchema, createContextPackagePreview, createContextPackageInputSchema, DEFAULT_INBOX_PREVIEW_LIMIT, fileArtifactSchema, functionArtifactSchema, MAX_INBOX_PREVIEW_LIMIT, mailboxNameSchema, mailboxSchema, normalizeInboxPreviewLimit, PREVIEW_SUMMARY_MAX_LENGTH, PREVIEW_TAG_MAX_COUNT, PREVIEW_TITLE_MAX_LENGTH, pullRequestArtifactSchema, urlArtifactSchema } from "./model/context-package.js";
10
- export { ackContext, checkInbox, ContextPackageNotFoundError, createInboxNotification, MailboxAccessError, readContext, registerSession, sendContext } from "./service/cimux-mailbox-service.js";
6
+ export { ackContext, checkInbox, ContextPackageNotFoundError, createInboxNotification, createSessionBrief, listMailboxes, MailboxAccessError, readContext, registerSession, sendContext } from "./service/cimux-mailbox-service.js";
11
7
  export { runCimuxCli } from "./cli/cimux-cli.js";
12
8
  export { applyInstallPlan, createInstallPlan } from "./install/cimux-install-plan.js";
13
9
  export { createCimuxMcpServer, defaultDatabasePath, runCimuxMcpServer } from "./mcp/cimux-mcp-server.js";
14
10
  export { resolveRuntimeMailbox } from "./runtime/mailbox-runtime.js";
15
11
  export { inferMailboxName, registerMailboxInputSchema, registerMailbox } from "./registration/mailbox-registration.js";
16
12
  export { SQLiteCimuxStore, UnknownMailboxError } from "./storage/sqlite-cimux-store.js";
17
- if (isCliEntrypoint()) {
18
- process.exitCode = await runCimuxCli(process.argv.slice(2));
19
- }
20
- export function isCliEntrypoint(argvPath = process.argv[1], modulePath = fileURLToPath(import.meta.url)) {
21
- if (!argvPath) {
22
- return false;
23
- }
24
- // npm link and global installs usually invoke the bin through a symlink.
25
- // Compare real paths so the published command still reaches runCimuxCli.
26
- try {
27
- return fs.realpathSync(argvPath) === fs.realpathSync(modulePath);
28
- }
29
- catch {
30
- // argv[1] may not be a resolvable path when embedded or bundled.
31
- return false;
32
- }
33
- }
34
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,UAAU,eAAe;IAC7B,OAAO,WAAW,CAAC;AACrB,CAAC;AA6BD,OAAO,EACL,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,EAC3B,+BAA+B,EAC/B,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,uBAAuB,EACvB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAExF,IAAI,eAAe,EAAE,EAAE,CAAC;IACtB,OAAO,CAAC,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAC1B,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAE3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,UAAU,eAAe;IAC7B,OAAO,WAAW,CAAC;AACrB,CAAC;AA6BD,OAAO,EACL,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,EAC3B,+BAA+B,EAC/B,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC"}
@@ -14,7 +14,7 @@ export type InstallPlanTarget = {
14
14
  harness: "codex" | "claude";
15
15
  path: string;
16
16
  purpose: string;
17
- format: "toml" | "json";
17
+ format: "toml" | "json" | "markdown";
18
18
  snippet: string;
19
19
  };
20
20
  export type InstallPlan = {
@@ -10,7 +10,6 @@ export function createInstallPlan(input = {}) {
10
10
  const parsed = installPlanInputSchema.parse(input);
11
11
  const codexHome = path.join(parsed.homeDirectory, ".codex");
12
12
  const claudeHome = path.join(parsed.homeDirectory, ".claude");
13
- // Codex has no hook system, so it only gets the MCP server.
14
13
  return {
15
14
  targets: [
16
15
  {
@@ -20,12 +19,35 @@ export function createInstallPlan(input = {}) {
20
19
  format: "toml",
21
20
  snippet: createCodexMcpSnippet(parsed.packageCommand)
22
21
  },
22
+ {
23
+ harness: "codex",
24
+ // Codex hooks share Claude Code's shape; Codex asks the user to trust
25
+ // a hook on first use and after any change to it.
26
+ path: path.join(codexHome, "hooks.json"),
27
+ purpose: "Notify on unread mail each prompt; brief the agent on its mailbox at session start.",
28
+ format: "json",
29
+ snippet: createHookSnippet(parsed.packageCommand, "codex")
30
+ },
31
+ {
32
+ harness: "codex",
33
+ path: path.join(codexHome, "AGENTS.md"),
34
+ purpose: "Teach Codex agents to check and send Cimux mail without prompting.",
35
+ format: "markdown",
36
+ snippet: createAgentNormsSnippet()
37
+ },
23
38
  {
24
39
  harness: "claude",
25
40
  path: path.join(claudeHome, "settings.json"),
26
- purpose: "Run a zero-token inbox check on each user prompt. Empty inboxes emit no output.",
41
+ purpose: "Notify on unread mail each prompt; brief the agent on its mailbox at session start.",
27
42
  format: "json",
28
- snippet: createClaudeHookSnippet(parsed.packageCommand)
43
+ snippet: createHookSnippet(parsed.packageCommand, "claude")
44
+ },
45
+ {
46
+ harness: "claude",
47
+ path: path.join(claudeHome, "CLAUDE.md"),
48
+ purpose: "Teach Claude Code agents to check and send Cimux mail without prompting.",
49
+ format: "markdown",
50
+ snippet: createAgentNormsSnippet()
29
51
  },
30
52
  {
31
53
  harness: "claude",
@@ -46,6 +68,9 @@ function applyInstallTarget(target) {
46
68
  if (target.format === "toml") {
47
69
  return applyTomlTarget(target);
48
70
  }
71
+ if (target.format === "markdown") {
72
+ return applyMarkdownTarget(target);
73
+ }
49
74
  return applyJsonTarget(target);
50
75
  }
51
76
  function applyTomlTarget(target) {
@@ -66,6 +91,24 @@ function applyTomlTarget(target) {
66
91
  backupPath
67
92
  };
68
93
  }
94
+ function applyMarkdownTarget(target) {
95
+ const existing = readTextIfExists(target.path);
96
+ if (existing?.includes(AGENT_NORMS_MARKER)) {
97
+ return {
98
+ path: target.path,
99
+ status: "unchanged",
100
+ backupPath: null
101
+ };
102
+ }
103
+ const backupPath = existing === null ? null : writeBackup(target.path, existing);
104
+ const next = existing === null ? target.snippet : appendBlock(existing, target.snippet);
105
+ fs.writeFileSync(target.path, next, "utf8");
106
+ return {
107
+ path: target.path,
108
+ status: existing === null ? "created" : "updated",
109
+ backupPath
110
+ };
111
+ }
69
112
  function applyJsonTarget(target) {
70
113
  const existingText = readTextIfExists(target.path);
71
114
  const existingValue = existingText === null ? {} : parseJsonObject(existingText, target.path);
@@ -158,7 +201,8 @@ startup_timeout_sec = 10
158
201
  tool_timeout_sec = 60
159
202
  `;
160
203
  }
161
- function createClaudeHookSnippet(packageCommand) {
204
+ // Codex and Claude Code share the same hooks JSON shape and event names.
205
+ function createHookSnippet(packageCommand, harness) {
162
206
  return JSON.stringify({
163
207
  hooks: {
164
208
  UserPromptSubmit: [
@@ -166,7 +210,17 @@ function createClaudeHookSnippet(packageCommand) {
166
210
  hooks: [
167
211
  {
168
212
  type: "command",
169
- command: `${packageCommand} notify --harness claude`
213
+ command: `${packageCommand} notify --harness ${harness}`
214
+ }
215
+ ]
216
+ }
217
+ ],
218
+ SessionStart: [
219
+ {
220
+ hooks: [
221
+ {
222
+ type: "command",
223
+ command: `${packageCommand} brief --harness ${harness}`
170
224
  }
171
225
  ]
172
226
  }
@@ -174,6 +228,19 @@ function createClaudeHookSnippet(packageCommand) {
174
228
  }
175
229
  }, null, 2);
176
230
  }
231
+ const AGENT_NORMS_MARKER = "<!-- cimux:norms -->";
232
+ function createAgentNormsSnippet() {
233
+ return `${AGENT_NORMS_MARKER}
234
+ ## Cimux agent mail
235
+
236
+ You have a Cimux mailbox (MCP server \`cimux\`). Follow these norms without being asked:
237
+
238
+ - When notified of unread context packages, call \`check_inbox\`, use \`read_context\` on what is relevant, and \`ack_context\` after loading it.
239
+ - When you finish work whose outcome another agent or a future session may need (root causes, decisions, gotchas, handoffs), send it with \`send_context\`: short title, tight summary, full detail in the body, artifact pointers instead of pasted file contents.
240
+ - Find recipients with \`list_mailboxes\`; only existing mailboxes can receive mail. Register your own with \`register_session\` if unsure.
241
+ <!-- cimux:end -->
242
+ `;
243
+ }
177
244
  function createClaudeMcpSnippet(packageCommand) {
178
245
  return JSON.stringify({
179
246
  mcpServers: {
@@ -1 +1 @@
1
- {"version":3,"file":"cimux-install-plan.js","sourceRoot":"","sources":["../../src/install/cimux-install-plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cimux-install-plan.js","sourceRoot":"","sources":["../../src/install/cimux-install-plan.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
5
  import { createContextPackageInputSchema } from "../model/context-package.js";
6
6
  import { registerMailboxInputSchema } from "../registration/mailbox-registration.js";
7
- import { ackContext, ackContextInputSchema, checkInbox, checkInboxInputSchema, readContext, readContextInputSchema, registerSession, sendContext } from "../service/cimux-mailbox-service.js";
7
+ import { ackContext, ackContextInputSchema, checkInbox, checkInboxInputSchema, listMailboxes, readContext, readContextInputSchema, registerSession, sendContext } from "../service/cimux-mailbox-service.js";
8
8
  import { SQLiteCimuxStore } from "../storage/sqlite-cimux-store.js";
9
9
  import { version } from "../version.js";
10
10
  export function createCimuxMcpServer(databasePath = defaultDatabasePath()) {
@@ -18,6 +18,17 @@ export function createCimuxMcpServer(databasePath = defaultDatabasePath()) {
18
18
  description: "Register or infer the current agent mailbox. Branch names are preferred over task/folder names.",
19
19
  inputSchema: registerMailboxInputSchema.shape
20
20
  }, async (input) => toToolResult(await registerSession(store, input)));
21
+ server.registerTool("list_mailboxes", {
22
+ title: "List Mailboxes",
23
+ description: "List registered mailbox names. Use this to find the recipient before send_context.",
24
+ inputSchema: {}
25
+ }, async () => {
26
+ // Names only: this response is read by agents, so keep it token-lean.
27
+ const result = await listMailboxes(store);
28
+ return toToolResult({
29
+ mailboxes: result.mailboxes.map((mailbox) => mailbox.name)
30
+ });
31
+ });
21
32
  server.registerTool("send_context", {
22
33
  title: "Send Context",
23
34
  description: "Send a structured Context Package to an existing mailbox. Unknown mailboxes are rejected.",
@@ -1 +1 @@
1
- {"version":3,"file":"cimux-mcp-server.js","sourceRoot":"","sources":["../../src/mcp/cimux-mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cimux-mcp-server.js","sourceRoot":"","sources":["../../src/mcp/cimux-mcp-server.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import type { ContextPackage, ContextPackagePreview, CreateContextPackageInput } from "../model/context-package.js";
2
+ import type { ContextPackage, ContextPackagePreview, CreateContextPackageInput, Mailbox } from "../model/context-package.js";
3
3
  import { type RegisterMailboxInput, type RegisterMailboxResult } from "../registration/mailbox-registration.js";
4
4
  import type { ContextPackageStore, MailboxStore } from "../storage/mailbox-store.js";
5
5
  export declare const checkInboxInputSchema: z.ZodObject<{
@@ -49,11 +49,19 @@ export declare const inboxNotificationInputSchema: z.ZodObject<{
49
49
  mailbox: string;
50
50
  limit?: number | undefined;
51
51
  }>;
52
+ export declare const sessionBriefInputSchema: z.ZodObject<{
53
+ mailbox: z.ZodString;
54
+ }, "strip", z.ZodTypeAny, {
55
+ mailbox: string;
56
+ }, {
57
+ mailbox: string;
58
+ }>;
52
59
  export type CimuxStore = MailboxStore & ContextPackageStore;
53
60
  export type CheckInboxInput = z.input<typeof checkInboxInputSchema>;
54
61
  export type ReadContextInput = z.input<typeof readContextInputSchema>;
55
62
  export type AckContextInput = z.input<typeof ackContextInputSchema>;
56
63
  export type InboxNotificationInput = z.input<typeof inboxNotificationInputSchema>;
64
+ export type SessionBriefInput = z.input<typeof sessionBriefInputSchema>;
57
65
  export type SendContextResult = {
58
66
  contextPackage: ContextPackage;
59
67
  };
@@ -70,6 +78,12 @@ export type AckContextResult = {
70
78
  export type InboxNotificationResult = {
71
79
  message: string | null;
72
80
  };
81
+ export type SessionBriefResult = {
82
+ message: string;
83
+ };
84
+ export type ListMailboxesResult = {
85
+ mailboxes: Mailbox[];
86
+ };
73
87
  export declare class MailboxAccessError extends Error {
74
88
  readonly mailbox: string;
75
89
  readonly contextPackageId: string;
@@ -85,3 +99,5 @@ export declare function checkInbox(store: CimuxStore, input: CheckInboxInput): P
85
99
  export declare function readContext(store: CimuxStore, input: ReadContextInput): Promise<ReadContextResult>;
86
100
  export declare function ackContext(store: CimuxStore, input: AckContextInput): Promise<AckContextResult>;
87
101
  export declare function createInboxNotification(store: CimuxStore, input: InboxNotificationInput): Promise<InboxNotificationResult>;
102
+ export declare function createSessionBrief(store: CimuxStore, input: SessionBriefInput): Promise<SessionBriefResult>;
103
+ export declare function listMailboxes(store: MailboxStore): Promise<ListMailboxesResult>;
@@ -18,6 +18,9 @@ export const inboxNotificationInputSchema = z.object({
18
18
  mailbox: mailboxNameSchema,
19
19
  limit: z.number().int().positive().max(10).default(10)
20
20
  });
21
+ export const sessionBriefInputSchema = z.object({
22
+ mailbox: mailboxNameSchema
23
+ });
21
24
  export class MailboxAccessError extends Error {
22
25
  mailbox;
23
26
  contextPackageId;
@@ -109,6 +112,27 @@ export async function createInboxNotification(store, input) {
109
112
  message: `Cimux: ${previews.length} unread context package(s) for ${parsed.mailbox} from ${senderText}${suffix}. Call check_inbox to preview.`
110
113
  };
111
114
  }
115
+ export async function createSessionBrief(store, input) {
116
+ const parsed = sessionBriefInputSchema.parse(input);
117
+ const previews = await store.listInboxPreviews(parsed.mailbox, {
118
+ unreadOnly: true,
119
+ limit: 10
120
+ });
121
+ const unread = previews.length === 0
122
+ ? "no unread mail"
123
+ : `${previews.length} unread — call check_inbox before starting`;
124
+ // Injected at session start so agents send handoffs without being asked.
125
+ // Keep it short: this costs tokens in every session.
126
+ return {
127
+ message: [
128
+ `Cimux mailbox: ${parsed.mailbox} (${unread}).`,
129
+ "When you finish work another agent or session may need, send a handoff with send_context. Ack packages after loading them."
130
+ ].join("\n")
131
+ };
132
+ }
133
+ export async function listMailboxes(store) {
134
+ return { mailboxes: await store.listMailboxes() };
135
+ }
112
136
  async function assertPackageBelongsToMailbox(store, id, mailbox) {
113
137
  const contextPackage = await store.getContextPackage(id);
114
138
  if (!contextPackage) {
@@ -1 +1 @@
1
- {"version":3,"file":"cimux-mailbox-service.js","sourceRoot":"","sources":["../../src/service/cimux-mailbox-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cimux-mailbox-service.js","sourceRoot":"","sources":["../../src/service/cimux-mailbox-service.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export declare const name = "cimux";
2
- export declare const version = "0.1.1";
2
+ export declare const version = "0.2.0";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export const name = "cimux";
2
- export const version = "0.1.1";
2
+ export const version = "0.2.0";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cimux-mcp",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Local-first mailbox for intentional AI agent context handoffs.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -21,7 +21,7 @@
21
21
  "license": "MIT",
22
22
  "type": "module",
23
23
  "bin": {
24
- "cimux": "./dist/index.js"
24
+ "cimux": "./dist/bin.js"
25
25
  },
26
26
  "files": [
27
27
  "dist",
@@ -0,0 +1,324 @@
1
+ #!/usr/bin/env node
2
+ // Read-only web viewer for the local cimux database.
3
+ // Usage: node cimux-viewer.mjs [port] [dbPath]
4
+ import { createServer } from "node:http";
5
+ import { DatabaseSync } from "node:sqlite";
6
+ import os from "node:os";
7
+ import path from "node:path";
8
+
9
+ const port = Number(process.argv[2] ?? 4767);
10
+ const dbPath =
11
+ process.argv[3] ?? path.join(os.homedir(), ".cimux", "cimux.sqlite");
12
+
13
+ function readState() {
14
+ // Open read-only per request: never blocks writers, never marks mail read.
15
+ const db = new DatabaseSync(dbPath, { readOnly: true });
16
+ try {
17
+ const mailboxes = db
18
+ .prepare("select name, created_at, last_seen_at from mailboxes order by name")
19
+ .all();
20
+ const packages = db
21
+ .prepare(
22
+ `select id, from_mailbox, to_mailbox, title, summary, body, tags_json,
23
+ artifacts_json, payload_json, created_at, read_at, ack_json
24
+ from context_packages order by created_at desc limit 200`
25
+ )
26
+ .all()
27
+ .map((row) => ({
28
+ id: row.id,
29
+ from: row.from_mailbox,
30
+ to: row.to_mailbox,
31
+ title: row.title,
32
+ summary: row.summary,
33
+ body: row.body,
34
+ tags: JSON.parse(row.tags_json),
35
+ artifacts: JSON.parse(row.artifacts_json),
36
+ payload: JSON.parse(row.payload_json),
37
+ createdAt: row.created_at,
38
+ readAt: row.read_at,
39
+ ack: JSON.parse(row.ack_json)
40
+ }));
41
+ return { dbPath, mailboxes, packages };
42
+ } finally {
43
+ db.close();
44
+ }
45
+ }
46
+
47
+ const page = `<!doctype html>
48
+ <html lang="en">
49
+ <head>
50
+ <meta charset="utf-8">
51
+ <meta name="viewport" content="width=device-width, initial-scale=1">
52
+ <title>cimux mail</title>
53
+ <style>
54
+ :root {
55
+ --ground:#eef1ef; --pane:#f7f9f7; --surface:#ffffff; --ink:#1f262a;
56
+ --muted:#5c6771; --faint:#8a949c; --line:#dce2e0; --line-soft:#e7ebe9;
57
+ --accent:#196e63; --accent-soft:#e0eeea; --sel:#d5e8e3;
58
+ --unread:#1d7fd1; --green:#3d7a46; --green-soft:#e6f0e7;
59
+ --tag:#eceff0; --code:#f0f2f1;
60
+ }
61
+ @media (prefers-color-scheme: dark) {
62
+ :root {
63
+ --ground:#101416; --pane:#171c1f; --surface:#1d2327; --ink:#dbe2e5;
64
+ --muted:#8d99a1; --faint:#68737b; --line:#2b3438; --line-soft:#232b2f;
65
+ --accent:#4fb8a8; --accent-soft:#1c302c; --sel:#22423c;
66
+ --unread:#4da3e8; --green:#82bd8b; --green-soft:#1e2c20;
67
+ --tag:#252d31; --code:#20272b;
68
+ }
69
+ }
70
+ * { box-sizing:border-box; }
71
+ html, body { height:100%; }
72
+ body { margin:0; background:var(--ground); color:var(--ink);
73
+ font:13.5px/1.45 -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
74
+ -webkit-font-smoothing:antialiased; }
75
+ .mono { font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; }
76
+
77
+ .app { display:grid; grid-template-columns: 200px 340px 1fr;
78
+ grid-template-rows: 44px 1fr; height:100vh; }
79
+ @media (max-width: 900px) { .app { grid-template-columns: 170px 1fr; }
80
+ .reader { display:none; } }
81
+
82
+ /* toolbar */
83
+ .toolbar { grid-column: 1 / -1; display:flex; align-items:center; gap:0.75rem;
84
+ padding:0 1rem; background:var(--pane); border-bottom:1px solid var(--line); }
85
+ .toolbar .brand { font-weight:700; font-size:0.85rem; letter-spacing:0.02em; }
86
+ .toolbar .brand span { color:var(--accent); }
87
+ .toolbar .db { color:var(--faint); font-size:0.68rem; }
88
+ .toolbar .live { margin-left:auto; color:var(--muted); font-size:0.72rem; }
89
+ .toolbar .live::before { content:""; display:inline-block; width:7px; height:7px;
90
+ border-radius:50%; background:var(--green); margin-right:0.4rem; }
91
+
92
+ /* folders */
93
+ .folders { background:var(--pane); border-right:1px solid var(--line);
94
+ padding:0.75rem 0.5rem; overflow-y:auto; }
95
+ .folders h2 { font-size:0.65rem; text-transform:uppercase; letter-spacing:0.1em;
96
+ color:var(--faint); margin:0.25rem 0 0.4rem 0.6rem; font-weight:700; }
97
+ .folder { display:flex; align-items:center; gap:0.5rem; width:100%;
98
+ background:none; border:none; color:var(--ink); font:inherit; font-size:0.8rem;
99
+ padding:0.38rem 0.6rem; border-radius:6px; cursor:pointer; }
100
+ .folder:hover { background:var(--line-soft); }
101
+ .folder.active { background:var(--sel); color:var(--accent); font-weight:600; }
102
+ .folder .icon { width:0.95rem; text-align:center; opacity:0.75; }
103
+ .folder .count { margin-left:auto; font-size:0.68rem; font-weight:700;
104
+ font-variant-numeric:tabular-nums; color:var(--muted); }
105
+ .folder.active .count { color:var(--accent); }
106
+ .folder:focus-visible, .row:focus-visible { outline:2px solid var(--accent); outline-offset:-2px; }
107
+
108
+ /* message list */
109
+ .list { background:var(--surface); border-right:1px solid var(--line);
110
+ overflow-y:auto; }
111
+ .listhead { position:sticky; top:0; background:var(--surface); z-index:1;
112
+ padding:0.55rem 1rem; border-bottom:1px solid var(--line);
113
+ font-size:0.72rem; color:var(--muted); display:flex; }
114
+ .listhead b { color:var(--ink); margin-right:0.35rem; }
115
+ .listhead .n { margin-left:auto; font-variant-numeric:tabular-nums; }
116
+ .row { display:grid; grid-template-columns: 14px 1fr auto; column-gap:0.5rem;
117
+ width:100%; text-align:left; background:none; border:none; color:inherit;
118
+ font:inherit; padding:0.6rem 0.9rem 0.6rem 0.6rem; cursor:pointer;
119
+ border-bottom:1px solid var(--line-soft); align-items:baseline; }
120
+ .row:hover { background:var(--line-soft); }
121
+ .row.selected { background:var(--sel); }
122
+ .dot { width:8px; height:8px; border-radius:50%; margin-top:0.32rem; justify-self:center; }
123
+ .row[data-unread="true"] .dot { background:var(--unread); }
124
+ .row .from { font-size:0.78rem; color:var(--muted); }
125
+ .row[data-unread="true"] .from, .row[data-unread="true"] .subj { font-weight:650; color:var(--ink); }
126
+ .row .time { grid-column:3; font-size:0.7rem; color:var(--faint);
127
+ font-variant-numeric:tabular-nums; white-space:nowrap; }
128
+ .row .subj { grid-column:2 / 4; font-size:0.82rem; margin-top:0.1rem;
129
+ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
130
+ .row .snip { grid-column:2 / 4; font-size:0.75rem; color:var(--faint); margin-top:0.1rem;
131
+ display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
132
+ .row .flags { grid-column:2 / 4; margin-top:0.25rem; display:flex; gap:0.3rem; }
133
+ .empty { color:var(--faint); text-align:center; padding:3rem 1rem; font-size:0.8rem; }
134
+
135
+ /* reading pane */
136
+ .reader { background:var(--surface); overflow-y:auto; }
137
+ .reader .placeholder { height:100%; display:flex; align-items:center;
138
+ justify-content:center; color:var(--faint); font-size:0.85rem; }
139
+ .mail { max-width:720px; padding:1.4rem 1.75rem 3rem; }
140
+ .mail h1 { font-size:1.15rem; font-weight:650; margin:0 0 0.75rem; line-height:1.3; }
141
+ .envelope { border:1px solid var(--line); border-radius:8px; padding:0.7rem 0.9rem;
142
+ font-size:0.78rem; display:grid; grid-template-columns:auto 1fr; gap:0.2rem 0.75rem; }
143
+ .envelope dt { color:var(--faint); }
144
+ .envelope dd { margin:0; }
145
+ .pill { display:inline-block; font-size:0.68rem; font-weight:700; border-radius:99px;
146
+ padding:0.12rem 0.55rem; }
147
+ .p-unread { background:color-mix(in srgb, var(--unread) 14%, transparent); color:var(--unread); }
148
+ .p-read { background:var(--tag); color:var(--muted); }
149
+ .p-ack { background:var(--green-soft); color:var(--green); }
150
+ .p-tag { background:var(--tag); color:var(--muted); font-weight:600; }
151
+ .mail .bodytext { white-space:pre-wrap; overflow-wrap:break-word;
152
+ font-size:0.85rem; line-height:1.6; margin:1.25rem 0; }
153
+ .mail h3 { font-size:0.68rem; text-transform:uppercase; letter-spacing:0.1em;
154
+ color:var(--faint); margin:1.5rem 0 0.5rem; }
155
+ .att { border:1px solid var(--line); border-radius:6px; padding:0.5rem 0.75rem;
156
+ margin-bottom:0.4rem; font-size:0.78rem; display:flex; gap:0.5rem; align-items:baseline; }
157
+ .att .kind { font-size:0.65rem; font-weight:700; text-transform:uppercase;
158
+ letter-spacing:0.05em; color:var(--accent); }
159
+ .att .note { color:var(--faint); }
160
+ .meta { color:var(--faint); font-size:0.72rem; }
161
+ </style>
162
+ </head>
163
+ <body>
164
+ <div class="app">
165
+ <div class="toolbar">
166
+ <span class="brand"><span>cimux</span> mail</span>
167
+ <span class="db mono" id="db"></span>
168
+ <span class="live" id="live">live</span>
169
+ </div>
170
+ <nav class="folders">
171
+ <h2>Mailboxes</h2>
172
+ <div id="folders"></div>
173
+ </nav>
174
+ <section class="list" aria-label="Messages">
175
+ <div class="listhead" id="listhead"></div>
176
+ <div id="rows"></div>
177
+ </section>
178
+ <section class="reader" id="reader" aria-label="Message">
179
+ <div class="placeholder">Select a message</div>
180
+ </section>
181
+ </div>
182
+ <script>
183
+ let state = null;
184
+ let folder = "__all__";
185
+ let selectedId = null;
186
+
187
+ function esc(s) {
188
+ return String(s).replace(/[&<>"']/g, (c) =>
189
+ ({ "&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;" }[c]));
190
+ }
191
+ function fmtShort(iso) {
192
+ const d = new Date(iso), now = new Date();
193
+ if (d.toDateString() === now.toDateString())
194
+ return d.toLocaleTimeString(undefined,{hour:"2-digit",minute:"2-digit"});
195
+ return d.toLocaleDateString(undefined,{month:"short",day:"numeric"});
196
+ }
197
+ function fmtLong(iso) {
198
+ if (!iso) return "";
199
+ return new Date(iso).toLocaleString(undefined,
200
+ {weekday:"short",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"});
201
+ }
202
+ function shown() {
203
+ return state.packages.filter((p) => folder === "__all__" || p.to === folder);
204
+ }
205
+
206
+ function render() {
207
+ if (!state) return;
208
+ document.getElementById("db").textContent = state.dbPath;
209
+
210
+ const unreadBy = {};
211
+ for (const p of state.packages) if (!p.readAt) unreadBy[p.to] = (unreadBy[p.to] ?? 0) + 1;
212
+ const allUnread = state.packages.filter((p) => !p.readAt).length;
213
+
214
+ document.getElementById("folders").innerHTML =
215
+ folderBtn("__all__", "📥", "All mail", allUnread) +
216
+ state.mailboxes.map((m) =>
217
+ folderBtn(m.name, "🗂", m.name, unreadBy[m.name] ?? 0)).join("");
218
+ for (const b of document.querySelectorAll(".folder"))
219
+ b.onclick = () => { folder = b.dataset.box; render(); };
220
+
221
+ const msgs = shown();
222
+ document.getElementById("listhead").innerHTML =
223
+ "<b>" + esc(folder === "__all__" ? "All mail" : folder) + "</b>" +
224
+ '<span class="n">' + msgs.length + " message" + (msgs.length === 1 ? "" : "s") + "</span>";
225
+
226
+ document.getElementById("rows").innerHTML = msgs.length
227
+ ? msgs.map(row).join("")
228
+ : '<p class="empty">No mail here yet.</p>';
229
+ for (const r of document.querySelectorAll(".row"))
230
+ r.onclick = () => { selectedId = r.dataset.id; render(); };
231
+
232
+ const current = state.packages.find((p) => p.id === selectedId);
233
+ document.getElementById("reader").innerHTML = current
234
+ ? mail(current)
235
+ : '<div class="placeholder">Select a message</div>';
236
+ }
237
+
238
+ function folderBtn(id, icon, label, count) {
239
+ return '<button class="folder' + (folder === id ? " active" : "") +
240
+ '" data-box="' + esc(id) + '"><span class="icon">' + icon + "</span>" +
241
+ '<span class="mono">' + esc(label) + "</span>" +
242
+ (count ? '<span class="count">' + count + "</span>" : "") + "</button>";
243
+ }
244
+
245
+ function row(p) {
246
+ const acked = p.ack.status === "acknowledged";
247
+ return '<button class="row' + (p.id === selectedId ? " selected" : "") +
248
+ '" data-id="' + esc(p.id) + '" data-unread="' + !p.readAt + '">' +
249
+ '<span class="dot"></span>' +
250
+ '<span class="from mono">' + esc(p.from) + "</span>" +
251
+ '<span class="time">' + fmtShort(p.createdAt) + "</span>" +
252
+ '<span class="subj">' + esc(p.title) + "</span>" +
253
+ '<span class="snip">' + esc(p.summary) + "</span>" +
254
+ (acked ? '<span class="flags"><span class="pill p-ack">✓ acked</span></span>' : "") +
255
+ "</button>";
256
+ }
257
+
258
+ function mail(p) {
259
+ const acked = p.ack.status === "acknowledged";
260
+ const atts = Object.entries(p.artifacts)
261
+ .flatMap(([kind, items]) => (Array.isArray(items) ? items : []).map((a) =>
262
+ '<div class="att"><span class="kind">' + esc(kind.replace(/s$/, "")) + "</span>" +
263
+ '<span class="mono">' +
264
+ esc(a.path ?? a.url ?? a.sha ?? a.name ?? a.label ?? JSON.stringify(a)) + "</span>" +
265
+ (a.note ? '<span class="note">' + esc(a.note) + "</span>" : "") + "</div>"))
266
+ .join("");
267
+ return '<article class="mail">' +
268
+ "<h1>" + esc(p.title) + "</h1>" +
269
+ '<dl class="envelope">' +
270
+ "<dt>From</dt><dd class=\\"mono\\">" + esc(p.from) + "</dd>" +
271
+ "<dt>To</dt><dd class=\\"mono\\">" + esc(p.to) + "</dd>" +
272
+ "<dt>Date</dt><dd>" + fmtLong(p.createdAt) + "</dd>" +
273
+ "<dt>Status</dt><dd>" +
274
+ (!p.readAt ? '<span class="pill p-unread">unread</span>'
275
+ : '<span class="pill p-read">read ' + fmtLong(p.readAt) + "</span>") +
276
+ (acked ? ' <span class="pill p-ack">acked by ' + esc(p.ack.ackBy) + "</span>" : "") +
277
+ "</dd>" +
278
+ (p.tags.length ? "<dt>Tags</dt><dd>" +
279
+ p.tags.map((t) => '<span class="pill p-tag">' + esc(t) + "</span>").join(" ") +
280
+ "</dd>" : "") +
281
+ "</dl>" +
282
+ '<div class="bodytext">' + esc(p.body) + "</div>" +
283
+ (atts ? "<h3>Artifacts</h3>" + atts : "") +
284
+ (acked && p.ack.note ? '<h3>Ack note</h3><p class="meta">' + esc(p.ack.note) + "</p>" : "") +
285
+ '<h3>Package id</h3><p class="meta mono">' + esc(p.id) + "</p>" +
286
+ "</article>";
287
+ }
288
+
289
+ async function tick() {
290
+ try {
291
+ const res = await fetch("/api/state");
292
+ state = await res.json();
293
+ if (!selectedId && state.packages.length) selectedId = state.packages[0].id;
294
+ document.getElementById("live").textContent = "live";
295
+ render();
296
+ } catch {
297
+ document.getElementById("live").textContent = "reconnecting…";
298
+ }
299
+ }
300
+ tick();
301
+ setInterval(tick, 2000);
302
+ </script>
303
+ </body>
304
+ </html>`;
305
+
306
+ const server = createServer((req, res) => {
307
+ try {
308
+ if (req.url === "/api/state") {
309
+ res.writeHead(200, { "content-type": "application/json" });
310
+ res.end(JSON.stringify(readState()));
311
+ return;
312
+ }
313
+ res.writeHead(200, { "content-type": "text/html; charset=utf-8" });
314
+ res.end(page);
315
+ } catch (error) {
316
+ res.writeHead(500, { "content-type": "text/plain" });
317
+ res.end(String(error));
318
+ }
319
+ });
320
+
321
+ server.listen(port, "127.0.0.1", () => {
322
+ console.log(`cimux mail viewer (read-only) on http://localhost:${port}`);
323
+ console.log(`database: ${dbPath}`);
324
+ });