cimux-mcp 0.1.2 → 0.2.1
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 +3 -2
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +13 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/cimux-cli.d.ts +2 -9
- package/dist/cli/cimux-cli.js +62 -179
- package/dist/cli/cimux-cli.js.map +1 -1
- package/dist/cli/commands/ack.d.ts +2 -0
- package/dist/cli/commands/ack.js +24 -0
- package/dist/cli/commands/ack.js.map +1 -0
- package/dist/cli/commands/brief.d.ts +2 -0
- package/dist/cli/commands/brief.js +22 -0
- package/dist/cli/commands/brief.js.map +1 -0
- package/dist/cli/commands/check.d.ts +2 -0
- package/dist/cli/commands/check.js +24 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/install.d.ts +2 -0
- package/dist/cli/commands/install.js +27 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/mailboxes.d.ts +2 -0
- package/dist/cli/commands/mailboxes.js +14 -0
- package/dist/cli/commands/mailboxes.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +2 -0
- package/dist/cli/commands/mcp.js +11 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/notify.d.ts +2 -0
- package/dist/cli/commands/notify.js +24 -0
- package/dist/cli/commands/notify.js.map +1 -0
- package/dist/cli/commands/read.d.ts +2 -0
- package/dist/cli/commands/read.js +21 -0
- package/dist/cli/commands/read.js.map +1 -0
- package/dist/cli/commands/register.d.ts +2 -0
- package/dist/cli/commands/register.js +27 -0
- package/dist/cli/commands/register.js.map +1 -0
- package/dist/cli/commands/send.d.ts +2 -0
- package/dist/cli/commands/send.js +37 -0
- package/dist/cli/commands/send.js.map +1 -0
- package/dist/cli/shared.d.ts +34 -0
- package/dist/cli/shared.js +68 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/index.d.ts +3 -6
- package/dist/index.js +2 -24
- package/dist/index.js.map +1 -1
- package/dist/install/cimux-install-plan.d.ts +1 -1
- package/dist/install/cimux-install-plan.js +60 -2
- package/dist/install/cimux-install-plan.js.map +1 -1
- package/dist/mcp/cimux-mcp-server.js +13 -2
- package/dist/mcp/cimux-mcp-server.js.map +1 -1
- package/dist/{registration/mailbox-registration.d.ts → naming/mailbox-naming.d.ts} +21 -0
- package/dist/naming/mailbox-naming.js +96 -0
- package/dist/naming/mailbox-naming.js.map +1 -0
- package/dist/service/cimux-mailbox-service.d.ts +18 -2
- package/dist/service/cimux-mailbox-service.js +29 -3
- package/dist/service/cimux-mailbox-service.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/dist/registration/mailbox-registration.js +0 -48
- package/dist/registration/mailbox-registration.js.map +0 -1
- package/dist/runtime/mailbox-runtime.d.ts +0 -22
- package/dist/runtime/mailbox-runtime.js +0 -50
- package/dist/runtime/mailbox-runtime.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EACL,UAAU,EACV,6BAA6B,EAC7B,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAGtB,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,8DAA8D;IACrE,OAAO,EAAE;QACP,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC5B;IACD,GAAG,CAAC,OAAO;QACT,OAAO,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5C,MAAM,OAAO,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE;gBAC1C,OAAO,EACL,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO;gBAC/E,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,UAAU;oBACrC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,OAAO,EAAE;oBACtC,CAAC,CAAC;wBACE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;wBAC3C,UAAU,EAAE,OAAO,CAAC,UAAU;qBAC/B,CAAC;aACP,CAAC,CAAC;YACH,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { sendContext } from "../../service/cimux-mailbox-service.js";
|
|
2
|
+
import { readCsv, readJson, requireString, withStore, writeJson } from "../shared.js";
|
|
3
|
+
export const sendCommand = {
|
|
4
|
+
name: "send",
|
|
5
|
+
usage: "cimux send --from <mailbox> --to <mailbox> --title <title> --summary <summary> --body <body> [--tags a,b] [--artifacts-json <json>] [--payload-json <json>]",
|
|
6
|
+
options: {
|
|
7
|
+
from: { type: "string" },
|
|
8
|
+
to: { type: "string" },
|
|
9
|
+
title: { type: "string" },
|
|
10
|
+
summary: { type: "string" },
|
|
11
|
+
body: { type: "string" },
|
|
12
|
+
tags: { type: "string" },
|
|
13
|
+
"artifacts-json": { type: "string" },
|
|
14
|
+
"payload-json": { type: "string" }
|
|
15
|
+
},
|
|
16
|
+
run(context) {
|
|
17
|
+
return withStore(context.env, async (store) => {
|
|
18
|
+
// The JSON flags are parsed here and validated by the service schemas,
|
|
19
|
+
// so malformed artifacts fail with a schema error, not a crash.
|
|
20
|
+
const artifacts = readJson(context.values, "artifacts-json") ?? {};
|
|
21
|
+
const payload = readJson(context.values, "payload-json") ?? {};
|
|
22
|
+
const result = await sendContext(store, {
|
|
23
|
+
fromMailbox: requireString(context.values, "from"),
|
|
24
|
+
toMailbox: requireString(context.values, "to"),
|
|
25
|
+
title: requireString(context.values, "title"),
|
|
26
|
+
summary: requireString(context.values, "summary"),
|
|
27
|
+
body: requireString(context.values, "body"),
|
|
28
|
+
tags: readCsv(context.values, "tags"),
|
|
29
|
+
artifacts: artifacts,
|
|
30
|
+
payload: payload
|
|
31
|
+
});
|
|
32
|
+
writeJson(context.io, result);
|
|
33
|
+
return 0;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGtF,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,IAAI,EAAE,MAAM;IACZ,KAAK,EACH,6JAA6J;IAC/J,OAAO,EAAE;QACP,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxB,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxB,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpC,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KACnC;IACD,GAAG,CAAC,OAAO;QACT,OAAO,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5C,uEAAuE;YACvE,gEAAgE;YAChE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC;YACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;YAE/D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE;gBACtC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;gBAClD,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;gBAC9C,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC7C,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;gBACjD,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;gBAC3C,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;gBACrC,SAAS,EAAE,SAAmD;gBAC9D,OAAO,EAAE,OAA+C;aACzD,CAAC,CAAC;YACH,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { RuntimeMailboxResult } from "../naming/mailbox-naming.js";
|
|
2
|
+
import { SQLiteCimuxStore } from "../storage/sqlite-cimux-store.js";
|
|
3
|
+
export type CimuxCliIo = {
|
|
4
|
+
log(message: string): void;
|
|
5
|
+
error(message: string): void;
|
|
6
|
+
};
|
|
7
|
+
export type CimuxCliEnv = {
|
|
8
|
+
CIMUX_DB_PATH?: string;
|
|
9
|
+
CIMUX_MAILBOX?: string;
|
|
10
|
+
CIMUX_HARNESS?: string;
|
|
11
|
+
};
|
|
12
|
+
export type ParsedValues = Record<string, string | boolean | undefined>;
|
|
13
|
+
export type CommandContext = {
|
|
14
|
+
values: ParsedValues;
|
|
15
|
+
env: CimuxCliEnv;
|
|
16
|
+
cwd: string;
|
|
17
|
+
io: CimuxCliIo;
|
|
18
|
+
};
|
|
19
|
+
export type CommandSpec = {
|
|
20
|
+
name: string;
|
|
21
|
+
usage: string;
|
|
22
|
+
options: Record<string, {
|
|
23
|
+
type: "string" | "boolean";
|
|
24
|
+
}>;
|
|
25
|
+
run(context: CommandContext): number | Promise<number>;
|
|
26
|
+
};
|
|
27
|
+
export declare function withStore(env: CimuxCliEnv, callback: (store: SQLiteCimuxStore) => Promise<number>): Promise<number>;
|
|
28
|
+
export declare function resolveRuntimeMailboxFromArgs(context: CommandContext): RuntimeMailboxResult;
|
|
29
|
+
export declare function resolvePackageCommand(): string;
|
|
30
|
+
export declare function readString(values: ParsedValues, name: string): string | undefined;
|
|
31
|
+
export declare function requireString(values: ParsedValues, name: string): string;
|
|
32
|
+
export declare function readCsv(values: ParsedValues, name: string): string[];
|
|
33
|
+
export declare function readJson(values: ParsedValues, name: string): unknown;
|
|
34
|
+
export declare function writeJson(io: CimuxCliIo, value: unknown): void;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { defaultDatabasePath } from "../mcp/cimux-mcp-server.js";
|
|
3
|
+
import { resolveRuntimeMailbox } from "../naming/mailbox-naming.js";
|
|
4
|
+
import { SQLiteCimuxStore } from "../storage/sqlite-cimux-store.js";
|
|
5
|
+
export async function withStore(env, callback) {
|
|
6
|
+
const store = new SQLiteCimuxStore(env.CIMUX_DB_PATH ?? defaultDatabasePath());
|
|
7
|
+
try {
|
|
8
|
+
return await callback(store);
|
|
9
|
+
}
|
|
10
|
+
finally {
|
|
11
|
+
store.close();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function resolveRuntimeMailboxFromArgs(context) {
|
|
15
|
+
const explicitMailbox = readString(context.values, "mailbox") ?? context.env.CIMUX_MAILBOX;
|
|
16
|
+
const harness = readString(context.values, "harness") ?? context.env.CIMUX_HARNESS;
|
|
17
|
+
if (!explicitMailbox && !harness) {
|
|
18
|
+
throw new Error("Expected --mailbox <harness/name> or --harness <name>");
|
|
19
|
+
}
|
|
20
|
+
return resolveRuntimeMailbox({
|
|
21
|
+
...(explicitMailbox === undefined ? {} : { explicitMailbox }),
|
|
22
|
+
...(harness === undefined ? {} : { harness }),
|
|
23
|
+
cwd: context.cwd
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export function resolvePackageCommand() {
|
|
27
|
+
// GUI-launched harnesses (e.g. the Codex desktop app) do not inherit the
|
|
28
|
+
// shell PATH, so write the absolute path of the running bin into config.
|
|
29
|
+
const binPath = process.argv[1];
|
|
30
|
+
return binPath && path.isAbsolute(binPath) ? binPath : "cimux";
|
|
31
|
+
}
|
|
32
|
+
export function readString(values, name) {
|
|
33
|
+
const value = values[name];
|
|
34
|
+
return typeof value === "string" && value !== "" ? value : undefined;
|
|
35
|
+
}
|
|
36
|
+
export function requireString(values, name) {
|
|
37
|
+
const value = readString(values, name);
|
|
38
|
+
if (value === undefined) {
|
|
39
|
+
throw new Error(`Expected --${name}`);
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
export function readCsv(values, name) {
|
|
44
|
+
const value = readString(values, name);
|
|
45
|
+
if (!value) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
return value
|
|
49
|
+
.split(",")
|
|
50
|
+
.map((item) => item.trim())
|
|
51
|
+
.filter(Boolean);
|
|
52
|
+
}
|
|
53
|
+
export function readJson(values, name) {
|
|
54
|
+
const value = readString(values, name);
|
|
55
|
+
if (value === undefined) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
return JSON.parse(value);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
throw new Error(`Invalid JSON for --${name}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function writeJson(io, value) {
|
|
66
|
+
io.log(JSON.stringify(value, null, 2));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
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
|
-
export type { RegisterMailboxInput, RegisterMailboxResult } from "./
|
|
5
|
+
export type { RegisterMailboxInput, RegisterMailboxResult } from "./naming/mailbox-naming.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
|
-
export { resolveRuntimeMailbox } from "./
|
|
13
|
-
export { inferMailboxName, registerMailboxInputSchema, registerMailbox } from "./registration/mailbox-registration.js";
|
|
11
|
+
export { inferMailboxName, registerMailbox, registerMailboxInputSchema, resolveRuntimeMailbox } from "./naming/mailbox-naming.js";
|
|
14
12
|
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,12 @@
|
|
|
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
|
-
export { resolveRuntimeMailbox } from "./
|
|
15
|
-
export { inferMailboxName, registerMailboxInputSchema, registerMailbox } from "./registration/mailbox-registration.js";
|
|
10
|
+
export { inferMailboxName, registerMailbox, registerMailboxInputSchema, resolveRuntimeMailbox } from "./naming/mailbox-naming.js";
|
|
16
11
|
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
12
|
//# 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":"
|
|
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,EACL,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -24,17 +24,31 @@ export function createInstallPlan(input = {}) {
|
|
|
24
24
|
// Codex hooks share Claude Code's shape; Codex asks the user to trust
|
|
25
25
|
// a hook on first use and after any change to it.
|
|
26
26
|
path: path.join(codexHome, "hooks.json"),
|
|
27
|
-
purpose: "
|
|
27
|
+
purpose: "Notify on unread mail each prompt; brief the agent on its mailbox at session start.",
|
|
28
28
|
format: "json",
|
|
29
29
|
snippet: createHookSnippet(parsed.packageCommand, "codex")
|
|
30
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
|
+
},
|
|
31
38
|
{
|
|
32
39
|
harness: "claude",
|
|
33
40
|
path: path.join(claudeHome, "settings.json"),
|
|
34
|
-
purpose: "
|
|
41
|
+
purpose: "Notify on unread mail each prompt; brief the agent on its mailbox at session start.",
|
|
35
42
|
format: "json",
|
|
36
43
|
snippet: createHookSnippet(parsed.packageCommand, "claude")
|
|
37
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()
|
|
51
|
+
},
|
|
38
52
|
{
|
|
39
53
|
harness: "claude",
|
|
40
54
|
// Claude Code reads user-scope MCP servers from ~/.claude.json.
|
|
@@ -54,6 +68,9 @@ function applyInstallTarget(target) {
|
|
|
54
68
|
if (target.format === "toml") {
|
|
55
69
|
return applyTomlTarget(target);
|
|
56
70
|
}
|
|
71
|
+
if (target.format === "markdown") {
|
|
72
|
+
return applyMarkdownTarget(target);
|
|
73
|
+
}
|
|
57
74
|
return applyJsonTarget(target);
|
|
58
75
|
}
|
|
59
76
|
function applyTomlTarget(target) {
|
|
@@ -74,6 +91,24 @@ function applyTomlTarget(target) {
|
|
|
74
91
|
backupPath
|
|
75
92
|
};
|
|
76
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
|
+
}
|
|
77
112
|
function applyJsonTarget(target) {
|
|
78
113
|
const existingText = readTextIfExists(target.path);
|
|
79
114
|
const existingValue = existingText === null ? {} : parseJsonObject(existingText, target.path);
|
|
@@ -179,10 +214,33 @@ function createHookSnippet(packageCommand, harness) {
|
|
|
179
214
|
}
|
|
180
215
|
]
|
|
181
216
|
}
|
|
217
|
+
],
|
|
218
|
+
SessionStart: [
|
|
219
|
+
{
|
|
220
|
+
hooks: [
|
|
221
|
+
{
|
|
222
|
+
type: "command",
|
|
223
|
+
command: `${packageCommand} brief --harness ${harness}`
|
|
224
|
+
}
|
|
225
|
+
]
|
|
226
|
+
}
|
|
182
227
|
]
|
|
183
228
|
}
|
|
184
229
|
}, null, 2);
|
|
185
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
|
+
}
|
|
186
244
|
function createClaudeMcpSnippet(packageCommand) {
|
|
187
245
|
return JSON.stringify({
|
|
188
246
|
mcpServers: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cimux-install-plan.js","sourceRoot":"","sources":["../../src/install/cimux-install-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAClD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;CACvD,CAAC,CAAC;AAsBH,MAAM,UAAU,iBAAiB,CAAC,QAA0B,EAAE;IAC5D,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAE9D,OAAO;QACL,OAAO,EAAE;YACP;gBACE,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;gBACzC,OAAO,EAAE,0CAA0C;gBACnD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,cAAc,CAAC;aACtD;YACD;gBACE,OAAO,EAAE,OAAO;gBAChB,sEAAsE;gBACtE,kDAAkD;gBAClD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;gBACxC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"cimux-install-plan.js","sourceRoot":"","sources":["../../src/install/cimux-install-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import path from "node:path";
|
|
|
3
3
|
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
|
-
import { registerMailboxInputSchema } from "../
|
|
7
|
-
import { ackContext, ackContextInputSchema, checkInbox, checkInboxInputSchema, readContext, readContextInputSchema, registerSession, sendContext } from "../service/cimux-mailbox-service.js";
|
|
6
|
+
import { registerMailboxInputSchema } from "../naming/mailbox-naming.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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cimux-mcp-server.js","sourceRoot":"","sources":["../../src/mcp/cimux-mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,5 +26,26 @@ export type RegisterMailboxResult = {
|
|
|
26
26
|
mailboxes: Mailbox[];
|
|
27
27
|
inferred: boolean;
|
|
28
28
|
};
|
|
29
|
+
export declare const runtimeMailboxInputSchema: z.ZodObject<{
|
|
30
|
+
harness: z.ZodOptional<z.ZodString>;
|
|
31
|
+
explicitMailbox: z.ZodOptional<z.ZodString>;
|
|
32
|
+
cwd: z.ZodDefault<z.ZodString>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
cwd: string;
|
|
35
|
+
harness?: string | undefined;
|
|
36
|
+
explicitMailbox?: string | undefined;
|
|
37
|
+
}, {
|
|
38
|
+
harness?: string | undefined;
|
|
39
|
+
explicitMailbox?: string | undefined;
|
|
40
|
+
cwd?: string | undefined;
|
|
41
|
+
}>;
|
|
42
|
+
export type RuntimeMailboxInput = z.input<typeof runtimeMailboxInputSchema>;
|
|
43
|
+
export type RuntimeMailboxResult = {
|
|
44
|
+
mailbox: string;
|
|
45
|
+
inferredFrom: "explicit" | "branch" | "folder";
|
|
46
|
+
branchName: string | null;
|
|
47
|
+
folderName: string;
|
|
48
|
+
};
|
|
29
49
|
export declare function registerMailbox(store: MailboxStore, input: RegisterMailboxInput): Promise<RegisterMailboxResult>;
|
|
30
50
|
export declare function inferMailboxName(input: RegisterMailboxInput): string;
|
|
51
|
+
export declare function resolveRuntimeMailbox(input?: RuntimeMailboxInput): RuntimeMailboxResult;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { mailboxNameSchema } from "../model/context-package.js";
|
|
5
|
+
// This module answers one question: what is this session's mailbox called?
|
|
6
|
+
// Explicit names win, then git branch, then task name, then folder name.
|
|
7
|
+
export const registerMailboxInputSchema = z.object({
|
|
8
|
+
harness: z.string().min(1),
|
|
9
|
+
explicitMailbox: mailboxNameSchema.optional(),
|
|
10
|
+
branchName: z.string().min(1).optional(),
|
|
11
|
+
taskName: z.string().min(1).optional(),
|
|
12
|
+
folderName: z.string().min(1).optional()
|
|
13
|
+
});
|
|
14
|
+
export const runtimeMailboxInputSchema = z.object({
|
|
15
|
+
harness: z.string().min(1).optional(),
|
|
16
|
+
explicitMailbox: mailboxNameSchema.optional(),
|
|
17
|
+
cwd: z.string().min(1).default(process.cwd())
|
|
18
|
+
});
|
|
19
|
+
export async function registerMailbox(store, input) {
|
|
20
|
+
const parsed = registerMailboxInputSchema.parse(input);
|
|
21
|
+
const inferredName = inferMailboxName(parsed);
|
|
22
|
+
const mailbox = await store.createMailbox(inferredName);
|
|
23
|
+
const mailboxes = await store.listMailboxes();
|
|
24
|
+
return {
|
|
25
|
+
mailbox,
|
|
26
|
+
mailboxes,
|
|
27
|
+
inferred: !parsed.explicitMailbox
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function inferMailboxName(input) {
|
|
31
|
+
if (input.explicitMailbox) {
|
|
32
|
+
return mailboxNameSchema.parse(input.explicitMailbox);
|
|
33
|
+
}
|
|
34
|
+
const harness = slugify(input.harness);
|
|
35
|
+
const localName =
|
|
36
|
+
// Branch is preferred because it usually maps to the actual workstream.
|
|
37
|
+
slugify(input.branchName) ||
|
|
38
|
+
// Task names are useful when there is no branch yet.
|
|
39
|
+
slugify(input.taskName) ||
|
|
40
|
+
// Folder name is the final stable local fallback.
|
|
41
|
+
slugify(input.folderName) ||
|
|
42
|
+
"default";
|
|
43
|
+
return mailboxNameSchema.parse(`${harness}/${localName}`);
|
|
44
|
+
}
|
|
45
|
+
export function resolveRuntimeMailbox(input = {}) {
|
|
46
|
+
const parsed = runtimeMailboxInputSchema.parse(input);
|
|
47
|
+
const folderName = path.basename(parsed.cwd);
|
|
48
|
+
if (parsed.explicitMailbox) {
|
|
49
|
+
return {
|
|
50
|
+
mailbox: parsed.explicitMailbox,
|
|
51
|
+
inferredFrom: "explicit",
|
|
52
|
+
branchName: null,
|
|
53
|
+
folderName
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const branchName = readGitBranch(parsed.cwd);
|
|
57
|
+
const mailbox = inferMailboxName({
|
|
58
|
+
harness: parsed.harness ?? "codex",
|
|
59
|
+
branchName: branchName ?? undefined,
|
|
60
|
+
folderName
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
mailbox,
|
|
64
|
+
inferredFrom: branchName ? "branch" : "folder",
|
|
65
|
+
branchName,
|
|
66
|
+
folderName
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function readGitBranch(cwd) {
|
|
70
|
+
try {
|
|
71
|
+
// Hooks run from the active session cwd. Asking git directly keeps mailbox
|
|
72
|
+
// naming aligned with the real workstream without requiring user setup.
|
|
73
|
+
const output = execFileSync("git", ["branch", "--show-current"], {
|
|
74
|
+
cwd,
|
|
75
|
+
encoding: "utf8",
|
|
76
|
+
stdio: ["ignore", "pipe", "ignore"]
|
|
77
|
+
}).trim();
|
|
78
|
+
return output || null;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function slugify(value) {
|
|
85
|
+
if (!value) {
|
|
86
|
+
return "";
|
|
87
|
+
}
|
|
88
|
+
return value
|
|
89
|
+
.trim()
|
|
90
|
+
.toLowerCase()
|
|
91
|
+
.replace(/[^a-z0-9._-]+/g, "-")
|
|
92
|
+
.replace(/^[^a-z0-9]+/, "")
|
|
93
|
+
.replace(/[^a-z0-9]+$/, "")
|
|
94
|
+
.slice(0, 80);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=mailbox-naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mailbox-naming.js","sourceRoot":"","sources":["../../src/naming/mailbox-naming.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,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIhE,2EAA2E;AAC3E,yEAAyE;AAEzE,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,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,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,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;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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import type { ContextPackage, ContextPackagePreview, CreateContextPackageInput } from "../model/context-package.js";
|
|
3
|
-
import { type RegisterMailboxInput, type RegisterMailboxResult } from "../
|
|
2
|
+
import type { ContextPackage, ContextPackagePreview, CreateContextPackageInput, Mailbox } from "../model/context-package.js";
|
|
3
|
+
import { type RegisterMailboxInput, type RegisterMailboxResult } from "../naming/mailbox-naming.js";
|
|
4
4
|
import type { ContextPackageStore, MailboxStore } from "../storage/mailbox-store.js";
|
|
5
5
|
export declare const checkInboxInputSchema: z.ZodObject<{
|
|
6
6
|
mailbox: z.ZodString;
|
|
@@ -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>;
|