too-many-cooks 0.12.0 → 0.15.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/README.md +28 -2
- package/build/bin/server.js +54 -52
- package/build/bin/server.js.map +1 -1
- package/build/bin/server_lock.d.ts +34 -0
- package/build/bin/server_lock.d.ts.map +1 -0
- package/build/bin/server_lock.js +104 -0
- package/build/bin/server_lock.js.map +1 -0
- package/build/src/db-cloud.d.ts.map +1 -1
- package/build/src/db-cloud.js +18 -0
- package/build/src/db-cloud.js.map +1 -1
- package/build/src/db-sqlite.d.ts.map +1 -1
- package/build/src/db-sqlite.js +51 -0
- package/build/src/db-sqlite.js.map +1 -1
- package/build/src/encryption-middleware.d.ts.map +1 -1
- package/build/src/encryption-middleware.js +46 -11
- package/build/src/encryption-middleware.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -6,12 +6,38 @@ Multi-agent coordination MCP server. Lets multiple AI agents safely edit the sam
|
|
|
6
6
|
|
|
7
7
|
## Quick Start
|
|
8
8
|
|
|
9
|
+
> ⚠️ The server must be **running** before any agent — or the VSCode extension — can connect.
|
|
10
|
+
|
|
11
|
+
### 1. Start the server
|
|
12
|
+
|
|
13
|
+
Run it with `npx`, which always fetches the latest published version (no global install required):
|
|
14
|
+
|
|
9
15
|
```bash
|
|
10
|
-
|
|
16
|
+
npx -y too-many-cooks@latest
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
It listens on `http://localhost:4040`. Override the port with `TMC_PORT=5050 npx -y too-many-cooks@latest`, and set `TMC_WORKSPACE` to target a specific workspace folder (defaults to `process.cwd()`).
|
|
20
|
+
|
|
21
|
+
**Or start it from the VSCode extension:** open the Command Palette and run **Too Many Cooks: Choose Connection Mode** → **Start Local Server**. The extension launches the same `npx` server for you.
|
|
22
|
+
|
|
23
|
+
### 2. Connect your agent
|
|
24
|
+
|
|
25
|
+
With the server running, point your agent at it:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Claude Code (Streamable HTTP transport)
|
|
11
29
|
claude mcp add --transport http too-many-cooks http://localhost:4040/mcp
|
|
12
30
|
```
|
|
13
31
|
|
|
14
|
-
|
|
32
|
+
## VSCode Extension
|
|
33
|
+
|
|
34
|
+
The companion extension shows a live dashboard of agents, locks, messages, and plans — and can start the server for you.
|
|
35
|
+
|
|
36
|
+
- **From the editor:** open the Extensions view, search **Too Many Cooks** (publisher `Nimblesite`), and install.
|
|
37
|
+
- **From the command line:** `code --install-extension Nimblesite.too-many-cooks`
|
|
38
|
+
- **From a `.vsix` file:** Extensions view → `⋯` menu → **Install from VSIX…**
|
|
39
|
+
|
|
40
|
+
Then run **Too Many Cooks: Choose Connection Mode** → **Start Local Server** to launch the server and connect in one step.
|
|
15
41
|
|
|
16
42
|
## Packages
|
|
17
43
|
|
package/build/bin/server.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/// Entry point for Too Many Cooks MCP server.
|
|
3
3
|
///
|
|
4
|
-
/// Starts
|
|
4
|
+
/// Starts ONE Express HTTP server per workspace folder (default port 4040) with:
|
|
5
5
|
/// - `/mcp` — MCP Streamable HTTP for agent connections
|
|
6
6
|
/// - `/admin/*` — REST + Streamable HTTP for the VSCode extension
|
|
7
7
|
///
|
|
8
|
+
/// Process isolation is by folder and the server NEVER kills another process:
|
|
9
|
+
/// - [SERVER-SINGLE-INSTANCE] refuse to start if TMC already runs in this folder
|
|
10
|
+
/// - [SERVER-PORT-CONFLICT] step aside cleanly on EADDRINUSE (never kill the owner)
|
|
11
|
+
/// - [SERVER-STATE-ISOLATION] all state lives in `${workspace}/.too_many_cooks/`
|
|
12
|
+
/// - [SERVER-EPIPE] a dead stdio pipe can never loop into the logger
|
|
13
|
+
///
|
|
8
14
|
/// Implements the deploy-toolkit `--version` contract before anything else.
|
|
9
15
|
{
|
|
10
16
|
const argv = process.argv.slice(2);
|
|
@@ -31,19 +37,28 @@
|
|
|
31
37
|
}
|
|
32
38
|
}
|
|
33
39
|
import crypto from "node:crypto";
|
|
34
|
-
import { execSync } from "node:child_process";
|
|
35
|
-
import net from "node:net";
|
|
36
40
|
import express from "express";
|
|
37
41
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
38
42
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
39
|
-
import { createAdminEventHub, createAgentEventHub, createMcpServerForDb, defaultConfig, getServerPort, registerAdminRoutes, } from "too-many-cooks-core";
|
|
43
|
+
import { createAdminEventHub, createAgentEventHub, createMcpServerForDb, defaultConfig, getServerPort, getWorkspaceFolder, registerAdminRoutes, } from "too-many-cooks-core";
|
|
40
44
|
import { createBackend } from "../src/backend.js";
|
|
41
45
|
import { createLogger } from "./logger.js";
|
|
46
|
+
import { acquireServerLock, errorCode, releaseServerLock, resolveLockPath, } from "./server_lock.js";
|
|
42
47
|
/** JSON-RPC bad request error response. */
|
|
43
48
|
const BAD_REQUEST_JSON = '{"jsonrpc":"2.0","error":{"code":-32000,"message":"Bad Request"},"id":null}';
|
|
44
49
|
/** JSON-RPC session-not-found error response (404). */
|
|
45
50
|
const SESSION_NOT_FOUND_JSON = '{"jsonrpc":"2.0","error":{"code":-32001,"message":"Session not found"},"id":null}';
|
|
51
|
+
/// [SERVER-EPIPE] A dead stdout/stderr pipe is unrecoverable, not fatal-loopable.
|
|
52
|
+
/// Without an 'error' listener an EPIPE surfaces as an uncaughtException, which
|
|
53
|
+
/// used to re-enter the logger and write the "fatal" line to the same broken
|
|
54
|
+
/// stream forever — the multi-gigabyte log loop in issue #33. Consume it here.
|
|
55
|
+
const installPipeGuards = () => {
|
|
56
|
+
const swallow = () => { };
|
|
57
|
+
process.stdout.on("error", swallow);
|
|
58
|
+
process.stderr.on("error", swallow);
|
|
59
|
+
};
|
|
46
60
|
const installProcessHandlers = (log) => {
|
|
61
|
+
installPipeGuards();
|
|
47
62
|
const shutdown = (signal) => {
|
|
48
63
|
log.info("Server shutting down", { signal });
|
|
49
64
|
process.exit(0);
|
|
@@ -51,6 +66,9 @@ const installProcessHandlers = (log) => {
|
|
|
51
66
|
process.on("SIGTERM", () => { shutdown("SIGTERM"); });
|
|
52
67
|
process.on("SIGINT", () => { shutdown("SIGINT"); });
|
|
53
68
|
process.on("uncaughtException", (err) => {
|
|
69
|
+
if (errorCode(err) === "EPIPE") {
|
|
70
|
+
return;
|
|
71
|
+
} // [SERVER-EPIPE] never re-enter the logger on a dead pipe
|
|
54
72
|
log.fatal("Uncaught exception", { error: String(err), stack: err.stack ?? "" });
|
|
55
73
|
});
|
|
56
74
|
process.on("unhandledRejection", (reason) => {
|
|
@@ -61,62 +79,46 @@ const main = async () => {
|
|
|
61
79
|
const log = createLogger();
|
|
62
80
|
installProcessHandlers(log);
|
|
63
81
|
log.info("Server starting...");
|
|
82
|
+
const workspace = getWorkspaceFolder();
|
|
83
|
+
const port = getServerPort();
|
|
84
|
+
const lockPath = resolveLockPath(workspace);
|
|
85
|
+
guardSingleInstance(lockPath, workspace, port, log);
|
|
86
|
+
process.on("exit", () => { releaseServerLock(lockPath); });
|
|
64
87
|
try {
|
|
65
|
-
await startServer(log);
|
|
88
|
+
await startServer(log, port);
|
|
66
89
|
}
|
|
67
90
|
catch (e) {
|
|
68
91
|
log.fatal("Fatal error", { error: String(e) });
|
|
69
92
|
throw e;
|
|
70
93
|
}
|
|
71
94
|
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const tcpProbe = (port) => new Promise((resolve) => {
|
|
81
|
-
const socket = net.createConnection({ port, host: "127.0.0.1" });
|
|
82
|
-
const timer = setTimeout(() => { socket.destroy(); resolve(false); }, PORT_CHECK_TIMEOUT_MS);
|
|
83
|
-
socket.once("connect", () => { clearTimeout(timer); socket.destroy(); resolve(true); });
|
|
84
|
-
socket.once("error", () => { clearTimeout(timer); resolve(false); });
|
|
85
|
-
});
|
|
86
|
-
/** Check whether a port is in use by attempting a TCP connection. */
|
|
87
|
-
const isPortInUse = async (port) => await tcpProbe(port);
|
|
88
|
-
/** Kill any existing process listening on the given port and wait for it to be freed. */
|
|
89
|
-
const killExistingProcess = async (port, log) => {
|
|
90
|
-
const inUse = await isPortInUse(port);
|
|
91
|
-
if (!inUse) {
|
|
92
|
-
return;
|
|
95
|
+
/// [SERVER-SINGLE-INSTANCE] Claim this workspace folder, or exit cleanly if another
|
|
96
|
+
/// LIVE Too Many Cooks already owns it. The other process is left completely
|
|
97
|
+
/// untouched — we never kill it ([SERVER-NO-KILL]).
|
|
98
|
+
const guardSingleInstance = (lockPath, workspace, port, log) => {
|
|
99
|
+
const result = acquireServerLock(lockPath, port, Date.now());
|
|
100
|
+
if (!result.ok) {
|
|
101
|
+
log.fatal("Could not acquire single-instance lock", { workspace, error: result.error });
|
|
102
|
+
process.exit(1);
|
|
93
103
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (output.length === 0) {
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
const pids = output.split("\n").map((pid) => { return pid.trim(); }).filter((pid) => { return pid.length > 0; });
|
|
101
|
-
for (const pid of pids) {
|
|
102
|
-
log.info("Killing process", { port, pid });
|
|
103
|
-
execSync(`kill -9 ${pid}`);
|
|
104
|
-
}
|
|
105
|
-
const start = Date.now();
|
|
106
|
-
while (Date.now() - start < PORT_FREE_TIMEOUT_MS) {
|
|
107
|
-
if (!(await isPortInUse(port))) {
|
|
108
|
-
log.info("Port is now free", { port });
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
await new Promise((resolve) => { setTimeout(() => { resolve(undefined); }, PORT_POLL_DELAY_MS); });
|
|
112
|
-
}
|
|
113
|
-
log.warn("Port still in use after timeout — proceeding anyway", { port });
|
|
104
|
+
if (result.value.kind === "busy") {
|
|
105
|
+
log.error("Too Many Cooks is already running in this folder — refusing to start a second instance", { workspace, existingPid: result.value.existing.pid, existingPort: result.value.existing.port });
|
|
106
|
+
process.exit(1);
|
|
114
107
|
}
|
|
115
|
-
|
|
116
|
-
|
|
108
|
+
log.info("Acquired single-instance lock", { workspace, port });
|
|
109
|
+
};
|
|
110
|
+
/// [SERVER-PORT-CONFLICT] If the port is taken, step aside cleanly. Too Many Cooks
|
|
111
|
+
/// NEVER kills the process holding a port ([SERVER-NO-KILL]) — run a different
|
|
112
|
+
/// folder on a different TMC_PORT instead.
|
|
113
|
+
const handleListenError = (err, port, log) => {
|
|
114
|
+
if (errorCode(err) === "EADDRINUSE") {
|
|
115
|
+
log.error("Port already in use by another process — stepping aside (Too Many Cooks never kills the process holding a port). Set TMC_PORT to run on a different port.", { port });
|
|
116
|
+
process.exit(1);
|
|
117
117
|
}
|
|
118
|
+
log.fatal("Server listen error", { port, error: String(err) });
|
|
119
|
+
process.exit(1);
|
|
118
120
|
};
|
|
119
|
-
const startServer = async (log) => {
|
|
121
|
+
const startServer = async (log, port) => {
|
|
120
122
|
log.info("Creating server...");
|
|
121
123
|
const cfg = defaultConfig;
|
|
122
124
|
const dbResult = createBackend(cfg, log);
|
|
@@ -139,11 +141,11 @@ const startServer = async (log) => {
|
|
|
139
141
|
app.post("/mcp", asyncHandler(mcpPostHandler(mcpCtx), log));
|
|
140
142
|
app.get("/mcp", asyncHandler(mcpGetDeleteHandler(transports, agentHub), log));
|
|
141
143
|
app.delete("/mcp", asyncHandler(mcpGetDeleteHandler(transports, agentHub), log));
|
|
142
|
-
const
|
|
143
|
-
await killExistingProcess(port, log);
|
|
144
|
-
app.listen(port, () => {
|
|
144
|
+
const server = app.listen(port, () => {
|
|
145
145
|
log.info("Server listening", { port });
|
|
146
146
|
});
|
|
147
|
+
// [SERVER-PORT-CONFLICT] Never crash unhandled on a busy port — step aside.
|
|
148
|
+
server.on("error", (err) => { handleListenError(err, port, log); });
|
|
147
149
|
// Keep event loop alive
|
|
148
150
|
const KEEP_ALIVE_INTERVAL_MS = 60000;
|
|
149
151
|
setInterval(() => { }, KEEP_ALIVE_INTERVAL_MS);
|
package/build/bin/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../bin/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../bin/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Result } from "too-many-cooks-core";
|
|
2
|
+
/** Shape of the persisted lock file. [SERVER-LOCKFILE] */
|
|
3
|
+
export type ServerLock = {
|
|
4
|
+
readonly pid: number;
|
|
5
|
+
readonly port: number;
|
|
6
|
+
readonly startedAt: number;
|
|
7
|
+
};
|
|
8
|
+
/** Outcome of trying to claim the folder. */
|
|
9
|
+
export type LockOutcome = {
|
|
10
|
+
readonly kind: "acquired";
|
|
11
|
+
readonly path: string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: "busy";
|
|
14
|
+
readonly path: string;
|
|
15
|
+
readonly existing: ServerLock;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the lock file path for a workspace folder. Reuses core's database-path
|
|
19
|
+
* logic so the lock always sits next to `data.db` in `.too_many_cooks/`.
|
|
20
|
+
* [SERVER-STATE-ISOLATION]
|
|
21
|
+
*/
|
|
22
|
+
export declare const resolveLockPath: (workspaceFolder: string) => string;
|
|
23
|
+
/** Read the `code` field off an unknown thrown value without a type assertion. */
|
|
24
|
+
export declare const errorCode: (e: unknown) => string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Try to claim this workspace folder for the current process. Returns `busy` if a
|
|
27
|
+
* LIVE Too Many Cooks process already holds the lock; otherwise overwrites any
|
|
28
|
+
* stale lock (left by a crash / `kill -9`) and returns `acquired`.
|
|
29
|
+
* [SERVER-SINGLE-INSTANCE]
|
|
30
|
+
*/
|
|
31
|
+
export declare const acquireServerLock: (lockPath: string, port: number, startedAt: number) => Result<LockOutcome, string>;
|
|
32
|
+
/** Remove the lock on shutdown — but only if it still records OUR pid. [SERVER-LOCKFILE] */
|
|
33
|
+
export declare const releaseServerLock: (lockPath: string) => void;
|
|
34
|
+
//# sourceMappingURL=server_lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server_lock.d.ts","sourceRoot":"","sources":["../../bin/server_lock.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,MAAM,EAAiC,MAAM,qBAAqB,CAAC;AAKjF,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MACuB,CAAC;AAEnF,kFAAkF;AAClF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,GAAG,SAGlC,CAAC;AAkDhB;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,KACd,MAAM,CAAC,WAAW,EAAE,MAAM,CAU9B,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IASrD,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/// Per-folder single-instance lock for the Too Many Cooks server.
|
|
2
|
+
///
|
|
3
|
+
/// Spec: docs/spec.md [SERVER-SINGLE-INSTANCE], [SERVER-LOCKFILE], [SERVER-NO-KILL].
|
|
4
|
+
///
|
|
5
|
+
/// This lives in the LOCAL server package (not shared core) on purpose: the lock
|
|
6
|
+
/// is process-local (it uses `process.pid`/`process.kill`) and only the local
|
|
7
|
+
/// SQLite server needs it — the cloud backend is remote and stateless. Shipping
|
|
8
|
+
/// it here also means the published bin never depends on a newer core release.
|
|
9
|
+
///
|
|
10
|
+
/// The lock is a JSON file in the workspace's `.too_many_cooks/` directory — the
|
|
11
|
+
/// same directory the database lives in (derived via core's `resolveDbPath`). It
|
|
12
|
+
/// answers "is Too Many Cooks already running in THIS folder?" without depending
|
|
13
|
+
/// on the port, because two instances in one folder would share one database.
|
|
14
|
+
import fs from "node:fs";
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import { error, resolveDbPath, success } from "too-many-cooks-core";
|
|
17
|
+
/** Lock file name inside the `.too_many_cooks` state directory. [SERVER-LOCKFILE] */
|
|
18
|
+
const LOCK_FILE_NAME = "server.lock";
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the lock file path for a workspace folder. Reuses core's database-path
|
|
21
|
+
* logic so the lock always sits next to `data.db` in `.too_many_cooks/`.
|
|
22
|
+
* [SERVER-STATE-ISOLATION]
|
|
23
|
+
*/
|
|
24
|
+
export const resolveLockPath = (workspaceFolder) => { return path.join(path.dirname(resolveDbPath(workspaceFolder)), LOCK_FILE_NAME); };
|
|
25
|
+
/** Read the `code` field off an unknown thrown value without a type assertion. */
|
|
26
|
+
export const errorCode = (e) => typeof e === "object" && e !== null && "code" in e && typeof e.code === "string"
|
|
27
|
+
? e.code
|
|
28
|
+
: undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Is a process with this PID currently alive? `process.kill(pid, 0)` sends NO
|
|
31
|
+
* signal — it only probes existence ([SERVER-NO-KILL]: we never terminate anything).
|
|
32
|
+
* `EPERM` means the process exists but is owned by someone else → still alive.
|
|
33
|
+
*/
|
|
34
|
+
const isPidAlive = (pid) => {
|
|
35
|
+
try {
|
|
36
|
+
process.kill(pid, 0);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
return errorCode(e) === "EPERM";
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/** Narrow an unknown parsed value to a ServerLock, or undefined if it is not one. */
|
|
44
|
+
const toServerLock = (value) => {
|
|
45
|
+
if (typeof value !== "object" || value === null) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const pid = "pid" in value ? value.pid : undefined;
|
|
49
|
+
const port = "port" in value ? value.port : undefined;
|
|
50
|
+
const startedAt = "startedAt" in value ? value.startedAt : undefined;
|
|
51
|
+
if (typeof pid !== "number" || typeof port !== "number" || typeof startedAt !== "number") {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return { pid, port, startedAt };
|
|
55
|
+
};
|
|
56
|
+
/** Read an existing lock file, or undefined if missing/corrupt. */
|
|
57
|
+
const readLock = (lockPath) => {
|
|
58
|
+
if (!fs.existsSync(lockPath)) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
return toServerLock(JSON.parse(fs.readFileSync(lockPath, "utf8")));
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
/** Write our own lock, creating the state directory if needed. */
|
|
69
|
+
const writeLock = (lockPath, lock) => {
|
|
70
|
+
try {
|
|
71
|
+
fs.mkdirSync(path.dirname(lockPath), { recursive: true });
|
|
72
|
+
fs.writeFileSync(lockPath, JSON.stringify(lock));
|
|
73
|
+
return success({ kind: "acquired", path: lockPath });
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
return error(`Failed to write lock file ${lockPath}: ${String(e)}`);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Try to claim this workspace folder for the current process. Returns `busy` if a
|
|
81
|
+
* LIVE Too Many Cooks process already holds the lock; otherwise overwrites any
|
|
82
|
+
* stale lock (left by a crash / `kill -9`) and returns `acquired`.
|
|
83
|
+
* [SERVER-SINGLE-INSTANCE]
|
|
84
|
+
*/
|
|
85
|
+
export const acquireServerLock = (lockPath, port, startedAt) => {
|
|
86
|
+
const existing = readLock(lockPath);
|
|
87
|
+
if (existing !== undefined && isPidAlive(existing.pid)) {
|
|
88
|
+
return success({ kind: "busy", path: lockPath, existing });
|
|
89
|
+
}
|
|
90
|
+
return writeLock(lockPath, { pid: process.pid, port, startedAt });
|
|
91
|
+
};
|
|
92
|
+
/** Remove the lock on shutdown — but only if it still records OUR pid. [SERVER-LOCKFILE] */
|
|
93
|
+
export const releaseServerLock = (lockPath) => {
|
|
94
|
+
const existing = readLock(lockPath);
|
|
95
|
+
if (existing?.pid === process.pid) {
|
|
96
|
+
try {
|
|
97
|
+
fs.rmSync(lockPath, { force: true });
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// Best-effort cleanup: a missing lock on the way out is not an error.
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=server_lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server_lock.js","sourceRoot":"","sources":["../../bin/server_lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-cloud.d.ts","sourceRoot":"","sources":["../../src/db-cloud.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,cAAc,
|
|
1
|
+
{"version":3,"file":"db-cloud.d.ts","sourceRoot":"","sources":["../../src/db-cloud.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,cAAc,EASf,MAAM,qBAAqB,CAAC;AAwS7B,yEAAyE;AACzE,eAAO,MAAM,aAAa,EAAE,CAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,KAChB,cAaJ,CAAC"}
|
package/build/src/db-cloud.js
CHANGED
|
@@ -32,6 +32,7 @@ const EP_LIST_LOCKS = "listLocks";
|
|
|
32
32
|
const EP_RENEW_LOCK = "renewLock";
|
|
33
33
|
const EP_SEND_MESSAGE = "sendMessage";
|
|
34
34
|
const EP_GET_MESSAGES = "getMessages";
|
|
35
|
+
const EP_GET_MESSAGE_OVERVIEW = "getMessageOverview";
|
|
35
36
|
const EP_MARK_READ = "markRead";
|
|
36
37
|
const EP_UPDATE_PLAN = "updatePlan";
|
|
37
38
|
const EP_GET_PLAN = "getPlan";
|
|
@@ -71,6 +72,22 @@ const mappedNullable = (mapper) => (val) => val === null || val === undefined ?
|
|
|
71
72
|
const parseApiResponse = (body, extract) => body.ok
|
|
72
73
|
? { ok: true, value: extract(body.value) }
|
|
73
74
|
: { ok: false, error: extractDbError(body) };
|
|
75
|
+
/// [STATUS-BOUNDED] Issues #41/#42: parse a message header (no body) from JSON.
|
|
76
|
+
const messageHeaderFromJson = (raw) => ({
|
|
77
|
+
id: typeof raw.id === "string" ? raw.id : "",
|
|
78
|
+
fromAgent: typeof raw.from_agent === "string" ? raw.from_agent : "",
|
|
79
|
+
toAgent: typeof raw.to_agent === "string" ? raw.to_agent : "",
|
|
80
|
+
createdAt: typeof raw.created_at === "number" ? raw.created_at : 0,
|
|
81
|
+
readAt: typeof raw.read_at === "number" ? raw.read_at : undefined,
|
|
82
|
+
});
|
|
83
|
+
/// [STATUS-BOUNDED] Issues #41/#42: parse a bounded message overview from JSON.
|
|
84
|
+
const messageOverviewFromJson = (raw) => ({
|
|
85
|
+
total: typeof raw.total === "number" ? raw.total : 0,
|
|
86
|
+
unread: typeof raw.unread === "number" ? raw.unread : 0,
|
|
87
|
+
recent: Array.isArray(raw.recent)
|
|
88
|
+
? raw.recent.map((item) => messageHeaderFromJson(isRecord(item) ? item : {}))
|
|
89
|
+
: [],
|
|
90
|
+
});
|
|
74
91
|
/** Create an HTTP API caller bound to a specific endpoint. */
|
|
75
92
|
const createApiCaller = (apiUrl, apiKey, workspaceId) => async (method, args) => {
|
|
76
93
|
const response = await fetch(`${apiUrl}/${method}`, {
|
|
@@ -111,6 +128,7 @@ const buildLockMethods = (call) => ({
|
|
|
111
128
|
const buildMessageMethods = (call) => ({
|
|
112
129
|
sendMessage: async (fromAgent, fromKey, toAgent, content) => parseApiResponse(await call(EP_SEND_MESSAGE, { fromAgent, fromKey, toAgent, content }), extractString),
|
|
113
130
|
getMessages: async (agentName, agentKey, options) => parseApiResponse(await call(EP_GET_MESSAGES, { agentName, agentKey, unreadOnly: options?.unreadOnly }), mappedArray(messageFromJson)),
|
|
131
|
+
getMessageOverview: async (agentName, limit) => parseApiResponse(await call(EP_GET_MESSAGE_OVERVIEW, { agentName, limit }), mapped(messageOverviewFromJson)),
|
|
114
132
|
markRead: async (messageId, agentName, agentKey) => parseApiResponse(await call(EP_MARK_READ, { messageId, agentName, agentKey }), extractVoid),
|
|
115
133
|
listAllMessages: async () => parseApiResponse(await call(EP_LIST_ALL_MESSAGES, {}), mappedArray(messageFromJson)),
|
|
116
134
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-cloud.js","sourceRoot":"","sources":["../../src/db-cloud.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,GAAG;AACH,+EAA+E;AAC/E,iEAAiE;
|
|
1
|
+
{"version":3,"file":"db-cloud.js","sourceRoot":"","sources":["../../src/db-cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-sqlite.d.ts","sourceRoot":"","sources":["../../src/db-sqlite.ts"],"names":[],"mappings":"AAUA,OAAO,EAYL,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"db-sqlite.d.ts","sourceRoot":"","sources":["../../src/db-sqlite.ts"],"names":[],"mappings":"AAUA,OAAO,EAYL,KAAK,MAAM,EAIX,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EAWpB,MAAM,qBAAqB,CAAC;AAyE7B,kDAAkD;AAClD,eAAO,MAAM,QAAQ,EAAE,CACrB,MAAM,EAAE,sBAAsB,EAC9B,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,KACtB,MAAM,CAAC,cAAc,EAAE,MAAM,CAkBjC,CAAC"}
|
package/build/src/db-sqlite.js
CHANGED
|
@@ -521,6 +521,56 @@ const listAllMessages = (db, log) => {
|
|
|
521
521
|
return error({ code: ERR_DATABASE, message: String(e) });
|
|
522
522
|
}
|
|
523
523
|
};
|
|
524
|
+
/// [STATUS-BOUNDED] Issues #41/#42: columns for a message header — never `content`.
|
|
525
|
+
const MESSAGE_HEADER_COLUMNS = "id, from_agent, to_agent, created_at, read_at";
|
|
526
|
+
/// [STATUS-BOUNDED] Predicate: every message visible to a named caller (own
|
|
527
|
+
/// inbox, own sent, and broadcasts). Params: [agentName, agentName, '*'].
|
|
528
|
+
const VISIBLE_TO_AGENT_WHERE = "to_agent = ? OR from_agent = ? OR to_agent = ?";
|
|
529
|
+
/// [STATUS-BOUNDED] Predicate: a named caller's UNREAD inbox — mirrors the
|
|
530
|
+
/// getMessages unreadOnly query. Params: [agentName, '*', agentName].
|
|
531
|
+
const UNREAD_FOR_AGENT_WHERE = "(to_agent = ? AND read_at IS NULL) OR (to_agent = ? AND NOT EXISTS " +
|
|
532
|
+
"(SELECT 1 FROM message_reads mr WHERE mr.message_id = messages.id AND mr.agent_name = ?))";
|
|
533
|
+
/** Run a COUNT(*) query returning column `c` and narrow it to a number. */
|
|
534
|
+
const countRows = (db, sql, params) => {
|
|
535
|
+
const row = toRow(db.prepare(sql).get(...params));
|
|
536
|
+
return typeof row?.c === "number" ? row.c : 0;
|
|
537
|
+
};
|
|
538
|
+
/** Map a SQLite row to a MessageHeader (no body). */
|
|
539
|
+
const messageHeaderFromRow = (row) => ({
|
|
540
|
+
id: typeof row.id === "string" ? row.id : "",
|
|
541
|
+
fromAgent: typeof row.from_agent === "string" ? row.from_agent : "",
|
|
542
|
+
toAgent: typeof row.to_agent === "string" ? row.to_agent : "",
|
|
543
|
+
createdAt: typeof row.created_at === "number" ? row.created_at : 0,
|
|
544
|
+
readAt: typeof row.read_at === "number" ? row.read_at : undefined,
|
|
545
|
+
});
|
|
546
|
+
/// [STATUS-BOUNDED] Overview for a named caller: total visible, unread inbox
|
|
547
|
+
/// count, and a bounded slice of recent unread inbox headers.
|
|
548
|
+
const agentMessageOverview = (db, agentName, limit) => {
|
|
549
|
+
const total = countRows(db, `SELECT COUNT(*) AS c FROM messages WHERE ${VISIBLE_TO_AGENT_WHERE}`, [agentName, agentName, BROADCAST_RECIPIENT]);
|
|
550
|
+
const unread = countRows(db, `SELECT COUNT(*) AS c FROM messages WHERE ${UNREAD_FOR_AGENT_WHERE}`, [agentName, BROADCAST_RECIPIENT, agentName]);
|
|
551
|
+
const rows = toRows(db.prepare(`SELECT ${MESSAGE_HEADER_COLUMNS} FROM messages WHERE ${UNREAD_FOR_AGENT_WHERE} ORDER BY created_at DESC LIMIT ?`).all(agentName, BROADCAST_RECIPIENT, agentName, limit));
|
|
552
|
+
return { total, unread, recent: rows.map(messageHeaderFromRow) };
|
|
553
|
+
};
|
|
554
|
+
/// [STATUS-BOUNDED] Overview for an unresolved caller: broadcasts only. Reads
|
|
555
|
+
/// cannot be tracked without an identity, so every broadcast counts as unread.
|
|
556
|
+
const broadcastMessageOverview = (db, limit) => {
|
|
557
|
+
const total = countRows(db, "SELECT COUNT(*) AS c FROM messages WHERE to_agent = ?", [BROADCAST_RECIPIENT]);
|
|
558
|
+
const rows = toRows(db.prepare(`SELECT ${MESSAGE_HEADER_COLUMNS} FROM messages WHERE to_agent = ? ORDER BY created_at DESC LIMIT ?`).all(BROADCAST_RECIPIENT, limit));
|
|
559
|
+
return { total, unread: total, recent: rows.map(messageHeaderFromRow) };
|
|
560
|
+
};
|
|
561
|
+
/// [STATUS-BOUNDED] Issues #41/#42: bounded, SQL-filtered inbox overview. No
|
|
562
|
+
/// auto-mark-read side effect — `status` is a read-only overview.
|
|
563
|
+
const getMessageOverview = (db, log, agentName, limit) => {
|
|
564
|
+
log.trace(`Building message overview (caller: ${agentName ?? "anonymous"})`);
|
|
565
|
+
try {
|
|
566
|
+
return success(agentName === null
|
|
567
|
+
? broadcastMessageOverview(db, limit)
|
|
568
|
+
: agentMessageOverview(db, agentName, limit));
|
|
569
|
+
}
|
|
570
|
+
catch (e) {
|
|
571
|
+
return error({ code: ERR_DATABASE, message: String(e) });
|
|
572
|
+
}
|
|
573
|
+
};
|
|
524
574
|
/** Set agent active/inactive. */
|
|
525
575
|
const setActive = (db, log, agentName, active) => {
|
|
526
576
|
log.debug(`Setting agent ${agentName} active=${String(active)}`);
|
|
@@ -686,6 +736,7 @@ const createLockOps = (db, log) => ({
|
|
|
686
736
|
/** Build message operations. */
|
|
687
737
|
const createMessageOps = (db, log, config) => ({
|
|
688
738
|
getMessages: async (name, key, options) => await Promise.resolve(getMessages(db, log, name, key, options?.unreadOnly ?? true)),
|
|
739
|
+
getMessageOverview: async (name, limit) => await Promise.resolve(getMessageOverview(db, log, name, limit)),
|
|
689
740
|
listAllMessages: async () => await Promise.resolve(listAllMessages(db, log)),
|
|
690
741
|
markRead: async (msgId, name, key) => await Promise.resolve(markRead(db, log, msgId, name, key)),
|
|
691
742
|
sendMessage: async (from, key, to, content) => await Promise.resolve(sendMessage(db, log, from, key, to, content, config.maxMessageLength)),
|