cimux-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +133 -0
  3. package/dist/cli/cimux-cli.d.ts +10 -0
  4. package/dist/cli/cimux-cli.js +201 -0
  5. package/dist/cli/cimux-cli.js.map +1 -0
  6. package/dist/index.d.ts +15 -0
  7. package/dist/index.js +34 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/install/cimux-install-plan.d.ts +29 -0
  10. package/dist/install/cimux-install-plan.js +187 -0
  11. package/dist/install/cimux-install-plan.js.map +1 -0
  12. package/dist/mcp/cimux-mcp-server.d.ts +4 -0
  13. package/dist/mcp/cimux-mcp-server.js +59 -0
  14. package/dist/mcp/cimux-mcp-server.js.map +1 -0
  15. package/dist/model/context-package.d.ts +913 -0
  16. package/dist/model/context-package.js +153 -0
  17. package/dist/model/context-package.js.map +1 -0
  18. package/dist/registration/mailbox-registration.d.ts +30 -0
  19. package/dist/registration/mailbox-registration.js +48 -0
  20. package/dist/registration/mailbox-registration.js.map +1 -0
  21. package/dist/runtime/mailbox-runtime.d.ts +22 -0
  22. package/dist/runtime/mailbox-runtime.js +50 -0
  23. package/dist/runtime/mailbox-runtime.js.map +1 -0
  24. package/dist/service/cimux-mailbox-service.d.ts +87 -0
  25. package/dist/service/cimux-mailbox-service.js +126 -0
  26. package/dist/service/cimux-mailbox-service.js.map +1 -0
  27. package/dist/storage/mailbox-store.d.ts +22 -0
  28. package/dist/storage/mailbox-store.js +2 -0
  29. package/dist/storage/mailbox-store.js.map +1 -0
  30. package/dist/storage/sqlite-cimux-store.d.ts +21 -0
  31. package/dist/storage/sqlite-cimux-store.js +201 -0
  32. package/dist/storage/sqlite-cimux-store.js.map +1 -0
  33. package/dist/version.d.ts +2 -0
  34. package/dist/version.js +3 -0
  35. package/dist/version.js.map +1 -0
  36. package/docs/mvp-readiness.md +85 -0
  37. package/package.json +51 -0
  38. package/scripts/demo-local-handoff.mjs +73 -0
@@ -0,0 +1,153 @@
1
+ import { z } from "zod";
2
+ // A mailbox is addressed by the harness plus a local working name.
3
+ // Examples: codex/feature-login, claude/auth-repro, cursor/fix-nav.
4
+ export const mailboxNameSchema = z
5
+ .string()
6
+ .min(3)
7
+ .max(140)
8
+ .regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*\/[a-zA-Z0-9][a-zA-Z0-9._-]*$/, {
9
+ message: "Mailbox name must use harness/name format, for example codex/feature-checkout-ui"
10
+ });
11
+ export const mailboxSchema = z.object({
12
+ name: mailboxNameSchema,
13
+ createdAt: z.string().datetime(),
14
+ lastSeenAt: z.string().datetime().nullable()
15
+ });
16
+ // Artifacts are pointers that help the receiving agent find the relevant work.
17
+ // They are not meant to replace the full repository, diff, or external system.
18
+ export const fileArtifactSchema = z.object({
19
+ path: z.string().min(1),
20
+ repo: z.string().optional(),
21
+ lineStart: z.number().int().positive().optional(),
22
+ lineEnd: z.number().int().positive().optional(),
23
+ note: z.string().optional()
24
+ });
25
+ export const functionArtifactSchema = z.object({
26
+ name: z.string().min(1),
27
+ file: z.string().optional(),
28
+ signature: z.string().optional(),
29
+ note: z.string().optional()
30
+ });
31
+ export const commitArtifactSchema = z.object({
32
+ sha: z.string().min(1),
33
+ repo: z.string().optional(),
34
+ message: z.string().optional()
35
+ });
36
+ export const pullRequestArtifactSchema = z.object({
37
+ id: z.string().min(1).optional(),
38
+ url: z.string().url().optional(),
39
+ title: z.string().optional()
40
+ });
41
+ export const urlArtifactSchema = z.object({
42
+ url: z.string().url(),
43
+ title: z.string().optional()
44
+ });
45
+ export const codeSnippetArtifactSchema = z.object({
46
+ language: z.string().optional(),
47
+ label: z.string().optional(),
48
+ code: z.string().min(1)
49
+ });
50
+ export const artifactsSchema = z
51
+ .object({
52
+ files: z.array(fileArtifactSchema).default([]),
53
+ functions: z.array(functionArtifactSchema).default([]),
54
+ commits: z.array(commitArtifactSchema).default([]),
55
+ pullRequests: z.array(pullRequestArtifactSchema).default([]),
56
+ urls: z.array(urlArtifactSchema).default([]),
57
+ codeSnippets: z.array(codeSnippetArtifactSchema).default([])
58
+ })
59
+ .default({});
60
+ // Ack means "the receiver saw or loaded this", not "the work is complete".
61
+ export const ackStateSchema = z.object({
62
+ status: z.enum(["pending", "acknowledged"]),
63
+ ackAt: z.string().datetime().nullable(),
64
+ ackBy: mailboxNameSchema.nullable(),
65
+ note: z.string().nullable()
66
+ });
67
+ // This is the shape a sender provides. Server-managed fields such as id,
68
+ // createdAt, readAt, and ack are added later by the storage/service layer.
69
+ export const createContextPackageInputSchema = z.object({
70
+ fromMailbox: mailboxNameSchema,
71
+ toMailbox: mailboxNameSchema,
72
+ title: z.string().min(1).max(500),
73
+ summary: z.string().min(1).max(4000),
74
+ body: z.string().min(1),
75
+ tags: z.array(z.string().min(1).max(80)).default([]),
76
+ artifacts: artifactsSchema.default({}),
77
+ payload: z.record(z.unknown()).default({})
78
+ });
79
+ // This is the durable object Cimux stores and returns from read_context.
80
+ export const contextPackageSchema = createContextPackageInputSchema.extend({
81
+ id: z.string().min(1),
82
+ createdAt: z.string().datetime(),
83
+ readAt: z.string().datetime().nullable(),
84
+ ack: ackStateSchema
85
+ });
86
+ // Inbox previews are deliberately smaller than full packages. They let an agent
87
+ // decide whether to call read_context without dumping body text, code snippets,
88
+ // artifact details, or payload values into context.
89
+ export const contextPackagePreviewSchema = z.object({
90
+ id: z.string().min(1),
91
+ fromMailbox: mailboxNameSchema,
92
+ toMailbox: mailboxNameSchema,
93
+ title: z.string(),
94
+ summary: z.string(),
95
+ tags: z.array(z.string()),
96
+ createdAt: z.string().datetime(),
97
+ readAt: z.string().datetime().nullable(),
98
+ ack: ackStateSchema,
99
+ artifactCounts: z.object({
100
+ files: z.number().int().nonnegative(),
101
+ functions: z.number().int().nonnegative(),
102
+ commits: z.number().int().nonnegative(),
103
+ pullRequests: z.number().int().nonnegative(),
104
+ urls: z.number().int().nonnegative(),
105
+ codeSnippets: z.number().int().nonnegative()
106
+ }),
107
+ payloadKeys: z.array(z.string())
108
+ });
109
+ export const DEFAULT_INBOX_PREVIEW_LIMIT = 20;
110
+ export const MAX_INBOX_PREVIEW_LIMIT = 50;
111
+ export const PREVIEW_TITLE_MAX_LENGTH = 180;
112
+ export const PREVIEW_SUMMARY_MAX_LENGTH = 280;
113
+ export const PREVIEW_TAG_MAX_COUNT = 5;
114
+ export function createContextPackagePreview(contextPackage) {
115
+ // The preview is the safe shape for check_inbox: enough metadata to decide
116
+ // whether to read, but no body text, snippet code, or payload values.
117
+ return contextPackagePreviewSchema.parse({
118
+ id: contextPackage.id,
119
+ fromMailbox: contextPackage.fromMailbox,
120
+ toMailbox: contextPackage.toMailbox,
121
+ title: truncate(contextPackage.title, PREVIEW_TITLE_MAX_LENGTH),
122
+ summary: truncate(contextPackage.summary, PREVIEW_SUMMARY_MAX_LENGTH),
123
+ tags: contextPackage.tags.slice(0, PREVIEW_TAG_MAX_COUNT),
124
+ createdAt: contextPackage.createdAt,
125
+ readAt: contextPackage.readAt,
126
+ ack: contextPackage.ack,
127
+ artifactCounts: {
128
+ files: contextPackage.artifacts.files.length,
129
+ functions: contextPackage.artifacts.functions.length,
130
+ commits: contextPackage.artifacts.commits.length,
131
+ pullRequests: contextPackage.artifacts.pullRequests.length,
132
+ urls: contextPackage.artifacts.urls.length,
133
+ codeSnippets: contextPackage.artifacts.codeSnippets.length
134
+ },
135
+ payloadKeys: Object.keys(contextPackage.payload)
136
+ });
137
+ }
138
+ export function normalizeInboxPreviewLimit(limit) {
139
+ if (limit === undefined) {
140
+ return DEFAULT_INBOX_PREVIEW_LIMIT;
141
+ }
142
+ if (!Number.isFinite(limit)) {
143
+ return DEFAULT_INBOX_PREVIEW_LIMIT;
144
+ }
145
+ return Math.min(Math.max(Math.trunc(limit), 1), MAX_INBOX_PREVIEW_LIMIT);
146
+ }
147
+ function truncate(value, maxLength) {
148
+ if (value.length <= maxLength) {
149
+ return value;
150
+ }
151
+ return value.slice(0, maxLength);
152
+ }
153
+ //# sourceMappingURL=context-package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-package.js","sourceRoot":"","sources":["../../src/model/context-package.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import type { Mailbox } from "../model/context-package.js";
3
+ import type { MailboxStore } from "../storage/mailbox-store.js";
4
+ export declare const registerMailboxInputSchema: z.ZodObject<{
5
+ harness: z.ZodString;
6
+ explicitMailbox: z.ZodOptional<z.ZodString>;
7
+ branchName: z.ZodOptional<z.ZodString>;
8
+ taskName: z.ZodOptional<z.ZodString>;
9
+ folderName: z.ZodOptional<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ harness: string;
12
+ explicitMailbox?: string | undefined;
13
+ branchName?: string | undefined;
14
+ taskName?: string | undefined;
15
+ folderName?: string | undefined;
16
+ }, {
17
+ harness: string;
18
+ explicitMailbox?: string | undefined;
19
+ branchName?: string | undefined;
20
+ taskName?: string | undefined;
21
+ folderName?: string | undefined;
22
+ }>;
23
+ export type RegisterMailboxInput = z.input<typeof registerMailboxInputSchema>;
24
+ export type RegisterMailboxResult = {
25
+ mailbox: Mailbox;
26
+ mailboxes: Mailbox[];
27
+ inferred: boolean;
28
+ };
29
+ export declare function registerMailbox(store: MailboxStore, input: RegisterMailboxInput): Promise<RegisterMailboxResult>;
30
+ export declare function inferMailboxName(input: RegisterMailboxInput): string;
@@ -0,0 +1,48 @@
1
+ import { z } from "zod";
2
+ import { mailboxNameSchema } from "../model/context-package.js";
3
+ export const registerMailboxInputSchema = z.object({
4
+ harness: z.string().min(1),
5
+ explicitMailbox: mailboxNameSchema.optional(),
6
+ branchName: z.string().min(1).optional(),
7
+ taskName: z.string().min(1).optional(),
8
+ folderName: z.string().min(1).optional()
9
+ });
10
+ export async function registerMailbox(store, input) {
11
+ const parsed = registerMailboxInputSchema.parse(input);
12
+ const inferredName = inferMailboxName(parsed);
13
+ const mailbox = await store.createMailbox(inferredName);
14
+ const mailboxes = await store.listMailboxes();
15
+ return {
16
+ mailbox,
17
+ mailboxes,
18
+ inferred: !parsed.explicitMailbox
19
+ };
20
+ }
21
+ export function inferMailboxName(input) {
22
+ if (input.explicitMailbox) {
23
+ return mailboxNameSchema.parse(input.explicitMailbox);
24
+ }
25
+ const harness = slugify(input.harness);
26
+ const localName =
27
+ // Branch is preferred because it usually maps to the actual workstream.
28
+ slugify(input.branchName) ||
29
+ // Task names are useful when there is no branch yet.
30
+ slugify(input.taskName) ||
31
+ // Folder name is the final stable local fallback.
32
+ slugify(input.folderName) ||
33
+ "default";
34
+ return mailboxNameSchema.parse(`${harness}/${localName}`);
35
+ }
36
+ function slugify(value) {
37
+ if (!value) {
38
+ return "";
39
+ }
40
+ return value
41
+ .trim()
42
+ .toLowerCase()
43
+ .replace(/[^a-z0-9._-]+/g, "-")
44
+ .replace(/^[^a-z0-9]+/, "")
45
+ .replace(/[^a-z0-9]+$/, "")
46
+ .slice(0, 80);
47
+ }
48
+ //# sourceMappingURL=mailbox-registration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox-registration.js","sourceRoot":"","sources":["../../src/registration/mailbox-registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIhE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,eAAe,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAC7C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAUH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAmB,EACnB,KAA2B;IAE3B,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;IAE9C,OAAO;QACL,OAAO;QACP,SAAS;QACT,QAAQ,EAAE,CAAC,MAAM,CAAC,eAAe;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAA2B;IAC1D,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,SAAS;IACb,wEAAwE;IACxE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;QACzB,qDAAqD;QACrD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QACvB,kDAAkD;QAClD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;QACzB,SAAS,CAAC;IAEZ,OAAO,iBAAiB,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ export declare const runtimeMailboxInputSchema: z.ZodObject<{
3
+ harness: z.ZodOptional<z.ZodString>;
4
+ explicitMailbox: z.ZodOptional<z.ZodString>;
5
+ cwd: z.ZodDefault<z.ZodString>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ cwd: string;
8
+ harness?: string | undefined;
9
+ explicitMailbox?: string | undefined;
10
+ }, {
11
+ harness?: string | undefined;
12
+ explicitMailbox?: string | undefined;
13
+ cwd?: string | undefined;
14
+ }>;
15
+ export type RuntimeMailboxInput = z.input<typeof runtimeMailboxInputSchema>;
16
+ export type RuntimeMailboxResult = {
17
+ mailbox: string;
18
+ inferredFrom: "explicit" | "branch" | "folder";
19
+ branchName: string | null;
20
+ folderName: string;
21
+ };
22
+ export declare function resolveRuntimeMailbox(input?: RuntimeMailboxInput): RuntimeMailboxResult;
@@ -0,0 +1,50 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import path from "node:path";
3
+ import { z } from "zod";
4
+ import { inferMailboxName } from "../registration/mailbox-registration.js";
5
+ import { mailboxNameSchema } from "../model/context-package.js";
6
+ export const runtimeMailboxInputSchema = z.object({
7
+ harness: z.string().min(1).optional(),
8
+ explicitMailbox: mailboxNameSchema.optional(),
9
+ cwd: z.string().min(1).default(process.cwd())
10
+ });
11
+ export function resolveRuntimeMailbox(input = {}) {
12
+ const parsed = runtimeMailboxInputSchema.parse(input);
13
+ const folderName = path.basename(parsed.cwd);
14
+ if (parsed.explicitMailbox) {
15
+ return {
16
+ mailbox: parsed.explicitMailbox,
17
+ inferredFrom: "explicit",
18
+ branchName: null,
19
+ folderName
20
+ };
21
+ }
22
+ const branchName = readGitBranch(parsed.cwd);
23
+ const mailbox = inferMailboxName({
24
+ harness: parsed.harness ?? "codex",
25
+ branchName: branchName ?? undefined,
26
+ folderName
27
+ });
28
+ return {
29
+ mailbox,
30
+ inferredFrom: branchName ? "branch" : "folder",
31
+ branchName,
32
+ folderName
33
+ };
34
+ }
35
+ function readGitBranch(cwd) {
36
+ try {
37
+ // Hooks run from the active session cwd. Asking git directly keeps mailbox
38
+ // naming aligned with the real workstream without requiring user setup.
39
+ const output = execFileSync("git", ["branch", "--show-current"], {
40
+ cwd,
41
+ encoding: "utf8",
42
+ stdio: ["ignore", "pipe", "ignore"]
43
+ }).trim();
44
+ return output || null;
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ //# sourceMappingURL=mailbox-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox-runtime.js","sourceRoot":"","sources":["../../src/runtime/mailbox-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrC,eAAe,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAC7C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;CAC9C,CAAC,CAAC;AAWH,MAAM,UAAU,qBAAqB,CAAC,QAA6B,EAAE;IACnE,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE7C,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,eAAe;YAC/B,YAAY,EAAE,UAAU;YACxB,UAAU,EAAE,IAAI;YAChB,UAAU;SACX,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,gBAAgB,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;QAClC,UAAU,EAAE,UAAU,IAAI,SAAS;QACnC,UAAU;KACX,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QAC9C,UAAU;QACV,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE;YAC/D,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { z } from "zod";
2
+ import type { ContextPackage, ContextPackagePreview, CreateContextPackageInput } from "../model/context-package.js";
3
+ import { type RegisterMailboxInput, type RegisterMailboxResult } from "../registration/mailbox-registration.js";
4
+ import type { ContextPackageStore, MailboxStore } from "../storage/mailbox-store.js";
5
+ export declare const checkInboxInputSchema: z.ZodObject<{
6
+ mailbox: z.ZodString;
7
+ unreadOnly: z.ZodDefault<z.ZodBoolean>;
8
+ limit: z.ZodOptional<z.ZodNumber>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ mailbox: string;
11
+ unreadOnly: boolean;
12
+ limit?: number | undefined;
13
+ }, {
14
+ mailbox: string;
15
+ unreadOnly?: boolean | undefined;
16
+ limit?: number | undefined;
17
+ }>;
18
+ export declare const readContextInputSchema: z.ZodObject<{
19
+ mailbox: z.ZodString;
20
+ id: z.ZodString;
21
+ }, "strip", z.ZodTypeAny, {
22
+ id: string;
23
+ mailbox: string;
24
+ }, {
25
+ id: string;
26
+ mailbox: string;
27
+ }>;
28
+ export declare const ackContextInputSchema: z.ZodObject<{
29
+ mailbox: z.ZodString;
30
+ id: z.ZodString;
31
+ } & {
32
+ note: z.ZodOptional<z.ZodString>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ id: string;
35
+ mailbox: string;
36
+ note?: string | undefined;
37
+ }, {
38
+ id: string;
39
+ mailbox: string;
40
+ note?: string | undefined;
41
+ }>;
42
+ export declare const inboxNotificationInputSchema: z.ZodObject<{
43
+ mailbox: z.ZodString;
44
+ limit: z.ZodDefault<z.ZodNumber>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ mailbox: string;
47
+ limit: number;
48
+ }, {
49
+ mailbox: string;
50
+ limit?: number | undefined;
51
+ }>;
52
+ export type CimuxStore = MailboxStore & ContextPackageStore;
53
+ export type CheckInboxInput = z.input<typeof checkInboxInputSchema>;
54
+ export type ReadContextInput = z.input<typeof readContextInputSchema>;
55
+ export type AckContextInput = z.input<typeof ackContextInputSchema>;
56
+ export type InboxNotificationInput = z.input<typeof inboxNotificationInputSchema>;
57
+ export type SendContextResult = {
58
+ contextPackage: ContextPackage;
59
+ };
60
+ export type CheckInboxResult = {
61
+ mailbox: string;
62
+ previews: ContextPackagePreview[];
63
+ };
64
+ export type ReadContextResult = {
65
+ contextPackage: ContextPackage;
66
+ };
67
+ export type AckContextResult = {
68
+ contextPackage: ContextPackage;
69
+ };
70
+ export type InboxNotificationResult = {
71
+ message: string | null;
72
+ };
73
+ export declare class MailboxAccessError extends Error {
74
+ readonly mailbox: string;
75
+ readonly contextPackageId: string;
76
+ constructor(mailbox: string, contextPackageId: string);
77
+ }
78
+ export declare class ContextPackageNotFoundError extends Error {
79
+ readonly contextPackageId: string;
80
+ constructor(contextPackageId: string);
81
+ }
82
+ export declare function registerSession(store: MailboxStore, input: RegisterMailboxInput): Promise<RegisterMailboxResult>;
83
+ export declare function sendContext(store: CimuxStore, input: CreateContextPackageInput): Promise<SendContextResult>;
84
+ export declare function checkInbox(store: CimuxStore, input: CheckInboxInput): Promise<CheckInboxResult>;
85
+ export declare function readContext(store: CimuxStore, input: ReadContextInput): Promise<ReadContextResult>;
86
+ export declare function ackContext(store: CimuxStore, input: AckContextInput): Promise<AckContextResult>;
87
+ export declare function createInboxNotification(store: CimuxStore, input: InboxNotificationInput): Promise<InboxNotificationResult>;
@@ -0,0 +1,126 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { z } from "zod";
3
+ import { contextPackageSchema, createContextPackageInputSchema, mailboxNameSchema } from "../model/context-package.js";
4
+ import { registerMailbox } from "../registration/mailbox-registration.js";
5
+ export const checkInboxInputSchema = z.object({
6
+ mailbox: mailboxNameSchema,
7
+ unreadOnly: z.boolean().default(true),
8
+ limit: z.number().int().positive().optional()
9
+ });
10
+ export const readContextInputSchema = z.object({
11
+ mailbox: mailboxNameSchema,
12
+ id: z.string().min(1)
13
+ });
14
+ export const ackContextInputSchema = readContextInputSchema.extend({
15
+ note: z.string().max(1000).optional()
16
+ });
17
+ export const inboxNotificationInputSchema = z.object({
18
+ mailbox: mailboxNameSchema,
19
+ limit: z.number().int().positive().max(10).default(10)
20
+ });
21
+ export class MailboxAccessError extends Error {
22
+ mailbox;
23
+ contextPackageId;
24
+ constructor(mailbox, contextPackageId) {
25
+ super(`Context Package ${contextPackageId} is not addressed to ${mailbox}`);
26
+ this.mailbox = mailbox;
27
+ this.contextPackageId = contextPackageId;
28
+ this.name = "MailboxAccessError";
29
+ }
30
+ }
31
+ export class ContextPackageNotFoundError extends Error {
32
+ contextPackageId;
33
+ constructor(contextPackageId) {
34
+ super(`Unknown Context Package: ${contextPackageId}`);
35
+ this.contextPackageId = contextPackageId;
36
+ this.name = "ContextPackageNotFoundError";
37
+ }
38
+ }
39
+ export async function registerSession(store, input) {
40
+ return registerMailbox(store, input);
41
+ }
42
+ export async function sendContext(store, input) {
43
+ const parsed = createContextPackageInputSchema.parse(input);
44
+ // The sender supplies the handoff content. Cimux adds the durable bookkeeping
45
+ // fields so every stored package has consistent read/ack state.
46
+ const contextPackage = contextPackageSchema.parse({
47
+ ...parsed,
48
+ id: createContextPackageId(),
49
+ createdAt: new Date().toISOString(),
50
+ readAt: null,
51
+ ack: {
52
+ status: "pending",
53
+ ackAt: null,
54
+ ackBy: null,
55
+ note: null
56
+ }
57
+ });
58
+ return {
59
+ contextPackage: await store.createContextPackage(contextPackage)
60
+ };
61
+ }
62
+ export async function checkInbox(store, input) {
63
+ const parsed = checkInboxInputSchema.parse(input);
64
+ return {
65
+ mailbox: parsed.mailbox,
66
+ previews: await store.listInboxPreviews(parsed.mailbox, {
67
+ unreadOnly: parsed.unreadOnly,
68
+ ...(parsed.limit === undefined ? {} : { limit: parsed.limit })
69
+ })
70
+ };
71
+ }
72
+ export async function readContext(store, input) {
73
+ const parsed = readContextInputSchema.parse(input);
74
+ await assertPackageBelongsToMailbox(store, parsed.id, parsed.mailbox);
75
+ const contextPackage = await store.readContextPackage(parsed.id);
76
+ if (!contextPackage) {
77
+ throw new ContextPackageNotFoundError(parsed.id);
78
+ }
79
+ return { contextPackage };
80
+ }
81
+ export async function ackContext(store, input) {
82
+ const parsed = ackContextInputSchema.parse(input);
83
+ await assertPackageBelongsToMailbox(store, parsed.id, parsed.mailbox);
84
+ const contextPackage = await store.ackContextPackage(parsed.id, {
85
+ ackBy: parsed.mailbox,
86
+ ...(parsed.note === undefined ? {} : { note: parsed.note })
87
+ });
88
+ if (!contextPackage) {
89
+ throw new ContextPackageNotFoundError(parsed.id);
90
+ }
91
+ return { contextPackage };
92
+ }
93
+ export async function createInboxNotification(store, input) {
94
+ const parsed = inboxNotificationInputSchema.parse(input);
95
+ const previews = await store.listInboxPreviews(parsed.mailbox, {
96
+ unreadOnly: true,
97
+ limit: parsed.limit
98
+ });
99
+ if (previews.length === 0) {
100
+ return { message: null };
101
+ }
102
+ const senders = [...new Set(previews.map((preview) => preview.fromMailbox))];
103
+ const senderText = senders.slice(0, 3).join(", ");
104
+ const extraSenderCount = Math.max(senders.length - 3, 0);
105
+ const suffix = extraSenderCount > 0 ? ` and ${extraSenderCount} more` : "";
106
+ // This is the hook-safe output: one short line, no message body, no snippets,
107
+ // and no payload values. Empty inboxes return null so the hook emits nothing.
108
+ return {
109
+ message: `Cimux: ${previews.length} unread context package(s) for ${parsed.mailbox} from ${senderText}${suffix}. Call check_inbox to preview.`
110
+ };
111
+ }
112
+ async function assertPackageBelongsToMailbox(store, id, mailbox) {
113
+ const contextPackage = await store.getContextPackage(id);
114
+ if (!contextPackage) {
115
+ throw new ContextPackageNotFoundError(id);
116
+ }
117
+ // This is the local privacy boundary for the MCP tools: anyone may send to a
118
+ // mailbox, but reading and acknowledging require naming the recipient mailbox.
119
+ if (contextPackage.toMailbox !== mailbox) {
120
+ throw new MailboxAccessError(mailbox, id);
121
+ }
122
+ }
123
+ function createContextPackageId() {
124
+ return `ctx_${randomUUID()}`;
125
+ }
126
+ //# sourceMappingURL=cimux-mailbox-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cimux-mailbox-service.js","sourceRoot":"","sources":["../../src/service/cimux-mailbox-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ContextPackage, ContextPackagePreview, Mailbox } from "../model/context-package.js";
2
+ export type MailboxStore = {
3
+ createMailbox(name: string): Promise<Mailbox>;
4
+ getMailbox(name: string): Promise<Mailbox | null>;
5
+ listMailboxes(): Promise<Mailbox[]>;
6
+ close(): void;
7
+ };
8
+ export type AckContextPackageOptions = {
9
+ ackBy: string;
10
+ note?: string;
11
+ };
12
+ export type ListInboxPreviewsOptions = {
13
+ unreadOnly?: boolean;
14
+ limit?: number;
15
+ };
16
+ export type ContextPackageStore = {
17
+ createContextPackage(contextPackage: ContextPackage): Promise<ContextPackage>;
18
+ listInboxPreviews(mailboxName: string, options?: ListInboxPreviewsOptions): Promise<ContextPackagePreview[]>;
19
+ getContextPackage(id: string): Promise<ContextPackage | null>;
20
+ readContextPackage(id: string): Promise<ContextPackage | null>;
21
+ ackContextPackage(id: string, options: AckContextPackageOptions): Promise<ContextPackage | null>;
22
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mailbox-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox-store.js","sourceRoot":"","sources":["../../src/storage/mailbox-store.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import type { ContextPackage, ContextPackagePreview, Mailbox } from "../model/context-package.js";
2
+ import type { AckContextPackageOptions, ContextPackageStore, ListInboxPreviewsOptions, MailboxStore } from "./mailbox-store.js";
3
+ export declare class SQLiteCimuxStore implements MailboxStore, ContextPackageStore {
4
+ private readonly db;
5
+ constructor(databasePath: string);
6
+ createMailbox(name: string): Promise<Mailbox>;
7
+ getMailbox(name: string): Promise<Mailbox | null>;
8
+ listMailboxes(): Promise<Mailbox[]>;
9
+ createContextPackage(contextPackage: ContextPackage): Promise<ContextPackage>;
10
+ listInboxPreviews(mailboxName: string, options?: ListInboxPreviewsOptions): Promise<ContextPackagePreview[]>;
11
+ readContextPackage(id: string): Promise<ContextPackage | null>;
12
+ getContextPackage(id: string): Promise<ContextPackage | null>;
13
+ ackContextPackage(id: string, options: AckContextPackageOptions): Promise<ContextPackage | null>;
14
+ close(): void;
15
+ private assertMailboxExists;
16
+ private migrate;
17
+ }
18
+ export declare class UnknownMailboxError extends Error {
19
+ readonly mailboxName: string;
20
+ constructor(mailboxName: string);
21
+ }