@dalmasonto/taskflow-mcp 1.0.33 → 2.0.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 +138 -193
- package/dist/attachment-download.d.ts +74 -0
- package/dist/attachment-download.js +193 -0
- package/dist/attachment-download.js.map +1 -0
- package/dist/attachments.d.ts +23 -0
- package/dist/attachments.js +66 -0
- package/dist/attachments.js.map +1 -0
- package/dist/client.d.ts +206 -0
- package/dist/client.js +279 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +137 -18
- package/dist/config.js +187 -106
- package/dist/config.js.map +1 -0
- package/dist/connect.d.ts +89 -0
- package/dist/connect.js +269 -0
- package/dist/connect.js.map +1 -0
- package/dist/doctor.d.ts +24 -0
- package/dist/doctor.js +120 -0
- package/dist/doctor.js.map +1 -0
- package/dist/events.d.ts +186 -0
- package/dist/events.js +407 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.js +124 -184
- package/dist/index.js.map +1 -0
- package/dist/instructions.d.ts +12 -0
- package/dist/instructions.js +114 -0
- package/dist/instructions.js.map +1 -0
- package/dist/mint.d.ts +62 -0
- package/dist/mint.js +135 -0
- package/dist/mint.js.map +1 -0
- package/dist/mirror.d.ts +68 -0
- package/dist/mirror.js +103 -0
- package/dist/mirror.js.map +1 -0
- package/dist/pane-queue.d.ts +29 -0
- package/dist/pane-queue.js +35 -0
- package/dist/pane-queue.js.map +1 -0
- package/dist/prompts.d.ts +79 -0
- package/dist/prompts.js +211 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resolve.d.ts +72 -0
- package/dist/resolve.js +89 -0
- package/dist/resolve.js.map +1 -0
- package/dist/runtime.d.ts +54 -0
- package/dist/runtime.js +321 -0
- package/dist/runtime.js.map +1 -0
- package/dist/server.d.ts +56 -0
- package/dist/server.js +793 -0
- package/dist/server.js.map +1 -0
- package/dist/session-identifier.d.ts +48 -0
- package/dist/session-identifier.js +44 -0
- package/dist/session-identifier.js.map +1 -0
- package/dist/sessions-store.d.ts +38 -0
- package/dist/sessions-store.js +88 -0
- package/dist/sessions-store.js.map +1 -0
- package/dist/tmux.d.ts +200 -0
- package/dist/tmux.js +580 -0
- package/dist/tmux.js.map +1 -0
- package/hooks/metadata.mjs +99 -0
- package/hooks/permission-prompt.mjs +100 -0
- package/hooks/taskflow-hook.mjs +499 -0
- package/hooks/tool-logging.mjs +63 -0
- package/package.json +38 -29
- package/dist/agent-registry.d.ts +0 -27
- package/dist/agent-registry.js +0 -153
- package/dist/db.d.ts +0 -5
- package/dist/db.js +0 -220
- package/dist/helpers.d.ts +0 -21
- package/dist/helpers.js +0 -27
- package/dist/resources.d.ts +0 -2
- package/dist/resources.js +0 -89
- package/dist/sse.d.ts +0 -10
- package/dist/sse.js +0 -766
- package/dist/tmux-bridge.d.ts +0 -12
- package/dist/tmux-bridge.js +0 -157
- package/dist/tools/activity.d.ts +0 -39
- package/dist/tools/activity.js +0 -152
- package/dist/tools/agent-inbox.d.ts +0 -12
- package/dist/tools/agent-inbox.js +0 -257
- package/dist/tools/agent.d.ts +0 -14
- package/dist/tools/agent.js +0 -168
- package/dist/tools/analytics.d.ts +0 -21
- package/dist/tools/analytics.js +0 -191
- package/dist/tools/checkpoint.d.ts +0 -27
- package/dist/tools/checkpoint.js +0 -105
- package/dist/tools/notifications.d.ts +0 -31
- package/dist/tools/notifications.js +0 -59
- package/dist/tools/projects.d.ts +0 -55
- package/dist/tools/projects.js +0 -112
- package/dist/tools/settings.d.ts +0 -19
- package/dist/tools/settings.js +0 -73
- package/dist/tools/tasks.d.ts +0 -105
- package/dist/tools/tasks.js +0 -403
- package/dist/tools/terminal.d.ts +0 -4
- package/dist/tools/terminal.js +0 -98
- package/dist/tools/timer.d.ts +0 -37
- package/dist/tools/timer.js +0 -154
- package/dist/types.d.ts +0 -82
- package/dist/types.js +0 -30
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The identifier that names THIS process's session to the backend.
|
|
3
|
+
*
|
|
4
|
+
* Prefers the tmux pane, so the tools' session and the terminal mirror converge
|
|
5
|
+
* on one row instead of two (register is idempotent per identifier). Falls back
|
|
6
|
+
* to host:pid outside tmux.
|
|
7
|
+
*
|
|
8
|
+
* The IDENTITY — project, agent id and profile name — is part of the identifier
|
|
9
|
+
* because the backend treats an identifier as globally unique and returns 409
|
|
10
|
+
* CONFLICT when the row it names belongs to a different agent
|
|
11
|
+
* (`views.rs:1813`). Every part of the terminal-derived base is shared: the
|
|
12
|
+
* host is one machine, and pane ids are numbered per tmux server, so `%0` is
|
|
13
|
+
* whatever opened first. The profile NAME is not enough on its own — every
|
|
14
|
+
* `.taskflow.json` calls its default profile `main`, so two repos on one
|
|
15
|
+
* machine used to compute the same identifier, and the second agent could
|
|
16
|
+
* never register. Retrying cannot resolve that conflict: neither the stored row
|
|
17
|
+
* nor the caller's identity changes between attempts, so the unbounded retry
|
|
18
|
+
* loop in `connect.ts` spins until the process dies.
|
|
19
|
+
*
|
|
20
|
+
* The AGENT ID is what makes this correct rather than merely unlikely — it is
|
|
21
|
+
* the exact field the backend compares. The config path is hashed in on top so
|
|
22
|
+
* that one agent id configured in two checkouts still gets a row each; without
|
|
23
|
+
* it they collide on a single row (no 409, since the agent matches) and the two
|
|
24
|
+
* terminals fight over one session and one mirror.
|
|
25
|
+
*
|
|
26
|
+
* Do NOT rely on an abandoned row ageing out: a session row keeps
|
|
27
|
+
* `status=connected` indefinitely, so a stale identifier blocks a different
|
|
28
|
+
* agent for as long as the row exists.
|
|
29
|
+
*/
|
|
30
|
+
export interface SessionIdentifierOptions {
|
|
31
|
+
/** The tmux pane id, when running under tmux. */
|
|
32
|
+
pane?: string | null;
|
|
33
|
+
/** The resolved profile name — part of the identity, not decoration. */
|
|
34
|
+
profileName: string;
|
|
35
|
+
/** The project the profile belongs to. */
|
|
36
|
+
project: number;
|
|
37
|
+
/** The agent id — the exact value the backend compares in `views.rs:1813`. */
|
|
38
|
+
agentId: number;
|
|
39
|
+
/**
|
|
40
|
+
* Absolute path of the `.taskflow.json` this identity was read from. Empty
|
|
41
|
+
* when the config came from a string rather than disk (config.ts:68), in
|
|
42
|
+
* which case there is no location to name and the suffix is omitted.
|
|
43
|
+
*/
|
|
44
|
+
configPath?: string;
|
|
45
|
+
host?: string;
|
|
46
|
+
pid?: number;
|
|
47
|
+
}
|
|
48
|
+
export declare function sessionIdentifier(options: SessionIdentifierOptions): string;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The identifier that names THIS process's session to the backend.
|
|
3
|
+
*
|
|
4
|
+
* Prefers the tmux pane, so the tools' session and the terminal mirror converge
|
|
5
|
+
* on one row instead of two (register is idempotent per identifier). Falls back
|
|
6
|
+
* to host:pid outside tmux.
|
|
7
|
+
*
|
|
8
|
+
* The IDENTITY — project, agent id and profile name — is part of the identifier
|
|
9
|
+
* because the backend treats an identifier as globally unique and returns 409
|
|
10
|
+
* CONFLICT when the row it names belongs to a different agent
|
|
11
|
+
* (`views.rs:1813`). Every part of the terminal-derived base is shared: the
|
|
12
|
+
* host is one machine, and pane ids are numbered per tmux server, so `%0` is
|
|
13
|
+
* whatever opened first. The profile NAME is not enough on its own — every
|
|
14
|
+
* `.taskflow.json` calls its default profile `main`, so two repos on one
|
|
15
|
+
* machine used to compute the same identifier, and the second agent could
|
|
16
|
+
* never register. Retrying cannot resolve that conflict: neither the stored row
|
|
17
|
+
* nor the caller's identity changes between attempts, so the unbounded retry
|
|
18
|
+
* loop in `connect.ts` spins until the process dies.
|
|
19
|
+
*
|
|
20
|
+
* The AGENT ID is what makes this correct rather than merely unlikely — it is
|
|
21
|
+
* the exact field the backend compares. The config path is hashed in on top so
|
|
22
|
+
* that one agent id configured in two checkouts still gets a row each; without
|
|
23
|
+
* it they collide on a single row (no 409, since the agent matches) and the two
|
|
24
|
+
* terminals fight over one session and one mirror.
|
|
25
|
+
*
|
|
26
|
+
* Do NOT rely on an abandoned row ageing out: a session row keeps
|
|
27
|
+
* `status=connected` indefinitely, so a stale identifier blocks a different
|
|
28
|
+
* agent for as long as the row exists.
|
|
29
|
+
*/
|
|
30
|
+
import { createHash } from "node:crypto";
|
|
31
|
+
import { hostname } from "node:os";
|
|
32
|
+
export function sessionIdentifier(options) {
|
|
33
|
+
const host = options.host ?? hostname();
|
|
34
|
+
const base = options.pane ? `tmux:${host}:${options.pane}` : `${host}:${options.pid ?? process.pid}`;
|
|
35
|
+
const identity = `p${options.project}.a${options.agentId}.${options.profileName}`;
|
|
36
|
+
// Pane ids are numbered per tmux server, so `%0` is not unique across them.
|
|
37
|
+
// Hashed rather than embedded: the path is long, and only its distinctness
|
|
38
|
+
// matters here. Same digest length as `sessions-store.ts`'s terminal key.
|
|
39
|
+
const location = options.configPath
|
|
40
|
+
? `@${createHash("sha256").update(options.configPath).digest("hex").slice(0, 6)}`
|
|
41
|
+
: "";
|
|
42
|
+
return `${base}#${identity}${location}`;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=session-identifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-identifier.js","sourceRoot":"","sources":["../src/session-identifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAqBnC,MAAM,UAAU,iBAAiB,CAAC,OAAiC;IACjE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACrG,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAClF,4EAA4E;IAC5E,2EAA2E;IAC3E,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU;QACjC,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACjF,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,GAAG,IAAI,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remember which profile a given TERMINAL chose, so the human is asked once per
|
|
3
|
+
* terminal rather than once per MCP reconnect.
|
|
4
|
+
*
|
|
5
|
+
* The store lives beside `.taskflow.json` (never in the cwd — an agent may be
|
|
6
|
+
* launched from a subdirectory) in `.taskflow/sessions.json`, whose directory
|
|
7
|
+
* is already fully gitignored.
|
|
8
|
+
*
|
|
9
|
+
* Every operation is best-effort. A read-only checkout or a corrupt file costs
|
|
10
|
+
* stickiness — the human is asked again — and must never fail the connect.
|
|
11
|
+
*/
|
|
12
|
+
export interface TerminalKeyOptions {
|
|
13
|
+
/** The tmux pane id, when running under tmux. */
|
|
14
|
+
pane?: string | null;
|
|
15
|
+
/** Working directory; only used outside tmux. Defaults to `process.cwd()`. */
|
|
16
|
+
cwd?: string;
|
|
17
|
+
/** Parent pid — the MCP client. Only used outside tmux. Defaults to `process.ppid`. */
|
|
18
|
+
ppid?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface StickyOptions extends TerminalKeyOptions {
|
|
21
|
+
/** Absolute path of the `.taskflow.json` this store belongs to. */
|
|
22
|
+
configPath: string;
|
|
23
|
+
/** Injected clock for tests. */
|
|
24
|
+
now?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Identify THIS terminal.
|
|
28
|
+
*
|
|
29
|
+
* Mirrors `defaultSessionIdentifier`'s preference: a tmux pane is the most
|
|
30
|
+
* stable handle there is. Outside tmux we fall back to the working directory
|
|
31
|
+
* plus the PARENT pid — the MCP client (Claude Code), which lives as long as
|
|
32
|
+
* the conversation does, unlike this server's own pid.
|
|
33
|
+
*/
|
|
34
|
+
export declare function terminalKey(options?: TerminalKeyOptions): string;
|
|
35
|
+
/** The profile this terminal chose last, or undefined if there is none/it expired. */
|
|
36
|
+
export declare function readStickyProfile(options: StickyOptions): string | undefined;
|
|
37
|
+
/** Remember this terminal's pick, pruning anything past the retention window. */
|
|
38
|
+
export declare function writeStickyProfile(profile: string, options: StickyOptions): void;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remember which profile a given TERMINAL chose, so the human is asked once per
|
|
3
|
+
* terminal rather than once per MCP reconnect.
|
|
4
|
+
*
|
|
5
|
+
* The store lives beside `.taskflow.json` (never in the cwd — an agent may be
|
|
6
|
+
* launched from a subdirectory) in `.taskflow/sessions.json`, whose directory
|
|
7
|
+
* is already fully gitignored.
|
|
8
|
+
*
|
|
9
|
+
* Every operation is best-effort. A read-only checkout or a corrupt file costs
|
|
10
|
+
* stickiness — the human is asked again — and must never fail the connect.
|
|
11
|
+
*/
|
|
12
|
+
import { createHash } from "node:crypto";
|
|
13
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
14
|
+
import { dirname, join } from "node:path";
|
|
15
|
+
/** How long a remembered pick stays good. Bounds the file across pane churn. */
|
|
16
|
+
const RETENTION_MS = 30 * 24 * 60 * 60 * 1000;
|
|
17
|
+
/**
|
|
18
|
+
* Identify THIS terminal.
|
|
19
|
+
*
|
|
20
|
+
* Mirrors `defaultSessionIdentifier`'s preference: a tmux pane is the most
|
|
21
|
+
* stable handle there is. Outside tmux we fall back to the working directory
|
|
22
|
+
* plus the PARENT pid — the MCP client (Claude Code), which lives as long as
|
|
23
|
+
* the conversation does, unlike this server's own pid.
|
|
24
|
+
*/
|
|
25
|
+
export function terminalKey(options = {}) {
|
|
26
|
+
if (options.pane)
|
|
27
|
+
return `tmux:${options.pane}`;
|
|
28
|
+
const cwd = options.cwd ?? process.cwd();
|
|
29
|
+
const ppid = options.ppid ?? process.ppid;
|
|
30
|
+
const hash = createHash("sha256").update(cwd).digest("hex").slice(0, 6);
|
|
31
|
+
return `cwd:${hash}:${ppid}`;
|
|
32
|
+
}
|
|
33
|
+
function storePath(configPath) {
|
|
34
|
+
return join(dirname(configPath), ".taskflow", "sessions.json");
|
|
35
|
+
}
|
|
36
|
+
function readStore(configPath) {
|
|
37
|
+
try {
|
|
38
|
+
const parsed = JSON.parse(readFileSync(storePath(configPath), "utf8"));
|
|
39
|
+
const terminals = parsed?.terminals;
|
|
40
|
+
if (terminals && typeof terminals === "object")
|
|
41
|
+
return { terminals };
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Missing or corrupt — an empty store is the right answer either way.
|
|
45
|
+
}
|
|
46
|
+
return { terminals: {} };
|
|
47
|
+
}
|
|
48
|
+
/** The profile this terminal chose last, or undefined if there is none/it expired. */
|
|
49
|
+
export function readStickyProfile(options) {
|
|
50
|
+
try {
|
|
51
|
+
const now = options.now ?? Date.now();
|
|
52
|
+
const entry = readStore(options.configPath).terminals[terminalKey(options)];
|
|
53
|
+
if (!entry)
|
|
54
|
+
return undefined;
|
|
55
|
+
const chosenAt = Date.parse(entry.chosen_at);
|
|
56
|
+
if (Number.isNaN(chosenAt) || now - chosenAt > RETENTION_MS)
|
|
57
|
+
return undefined;
|
|
58
|
+
return entry.profile;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Best-effort: losing stickiness is acceptable, failing the connect is not.
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Remember this terminal's pick, pruning anything past the retention window. */
|
|
66
|
+
export function writeStickyProfile(profile, options) {
|
|
67
|
+
const now = options.now ?? Date.now();
|
|
68
|
+
try {
|
|
69
|
+
const store = readStore(options.configPath);
|
|
70
|
+
for (const [key, entry] of Object.entries(store.terminals)) {
|
|
71
|
+
const chosenAt = Date.parse(entry.chosen_at);
|
|
72
|
+
if (Number.isNaN(chosenAt) || now - chosenAt > RETENTION_MS) {
|
|
73
|
+
delete store.terminals[key];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
store.terminals[terminalKey(options)] = {
|
|
77
|
+
profile,
|
|
78
|
+
chosen_at: new Date(now).toISOString(),
|
|
79
|
+
};
|
|
80
|
+
const path = storePath(options.configPath);
|
|
81
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
82
|
+
writeFileSync(path, `${JSON.stringify(store, null, 2)}\n`);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Best-effort: losing stickiness is acceptable, failing the connect is not.
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=sessions-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions-store.js","sourceRoot":"","sources":["../src/sessions-store.ts"],"names":[],"mappings":"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"}
|
package/dist/tmux.d.ts
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `taskflow-mcp --tmux [target]` — mirror a tmux pane into TaskFlow so humans
|
|
3
|
+
* can watch what an agent is doing.
|
|
4
|
+
*
|
|
5
|
+
* WHY A MIRROR AND NOT A LOG. The obvious design is to tail new output and append
|
|
6
|
+
* it as frames. That does not work for the case this exists for: a full-screen
|
|
7
|
+
* TUI agent (Claude Code itself) runs on tmux's ALTERNATE SCREEN buffer, which
|
|
8
|
+
* has no scrollback — `history_size` stays flat no matter how much scrolls by,
|
|
9
|
+
* so there is no stream of new lines to tail. The only observable state is the
|
|
10
|
+
* current screen, redrawn in place. So each capture is sent as a `snapshot`
|
|
11
|
+
* frame that REPLACES the view rather than appending to it.
|
|
12
|
+
*
|
|
13
|
+
* Sends only when the screen actually changed, so an idle agent costs one cheap
|
|
14
|
+
* capture per tick and no writes.
|
|
15
|
+
*
|
|
16
|
+
* By default the pane is only ever READ (`capture-pane`) — nothing is injected and
|
|
17
|
+
* no tmux option is altered, so mirroring cannot disturb the session. `--notify`
|
|
18
|
+
* opts in to WRITING: a one-line unread notice typed into the pane. See
|
|
19
|
+
* {@link buildNotice} for why that text is composed locally and never by the
|
|
20
|
+
* server.
|
|
21
|
+
*/
|
|
22
|
+
import { TaskflowClient } from "./client.js";
|
|
23
|
+
import { type ResolvedProfile } from "./config.js";
|
|
24
|
+
/**
|
|
25
|
+
* How often the pane is CAPTURED. This is a local `tmux capture-pane` — a few
|
|
26
|
+
* milliseconds, no network — so it can be frequent without costing anything.
|
|
27
|
+
* What it costs to send is governed separately, below.
|
|
28
|
+
*/
|
|
29
|
+
export declare const DEFAULT_INTERVAL_MS = 1000;
|
|
30
|
+
export interface TmuxOptions {
|
|
31
|
+
/** Pane target, e.g. "0:0.0" or a session name. Defaults to tmux's active pane. */
|
|
32
|
+
target?: string | undefined;
|
|
33
|
+
intervalMs?: number;
|
|
34
|
+
profile?: string | undefined;
|
|
35
|
+
log?: (line: string) => void;
|
|
36
|
+
/** Test seam: resolve the profile without touching the filesystem. */
|
|
37
|
+
resolved?: ResolvedProfile;
|
|
38
|
+
/** Type a one-line notice into the pane when unread messages arrive. */
|
|
39
|
+
notify?: boolean;
|
|
40
|
+
/** Press Enter after the notice, so the agent processes it immediately. */
|
|
41
|
+
notifySubmit?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build the notice typed into the agent's pane.
|
|
45
|
+
*
|
|
46
|
+
* The text is composed HERE, locally, from counts — never from anything the
|
|
47
|
+
* server sends. That is the whole security posture of this feature: the backend
|
|
48
|
+
* cannot dictate keystrokes into a live agent session, because it never supplies
|
|
49
|
+
* the string. Message bodies are deliberately excluded; the agent fetches them
|
|
50
|
+
* through `check_messages`, which is auditable, rather than having them typed
|
|
51
|
+
* into its prompt by a poller.
|
|
52
|
+
*
|
|
53
|
+
* Control characters are stripped and the result is a single line: a stray
|
|
54
|
+
* newline would submit the prompt early, and an escape sequence could rewrite
|
|
55
|
+
* the pane.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildNotice(unread: number, channels: number): string;
|
|
58
|
+
/** One line, printable characters only — see {@link buildNotice}. */
|
|
59
|
+
export declare function sanitizeForPane(text: string, max?: number): string;
|
|
60
|
+
/**
|
|
61
|
+
* Find the tmux pane this agent is running in, with NO configuration.
|
|
62
|
+
*
|
|
63
|
+
* The MCP server is spawned by the agent (Claude Code), so it can work out where
|
|
64
|
+
* that agent lives rather than being told:
|
|
65
|
+
*
|
|
66
|
+
* 1. `$TMUX_PANE` — set by tmux and inherited straight down. Exact and free.
|
|
67
|
+
* 2. Otherwise match the ANCESTOR's controlling terminal to a pane's tty
|
|
68
|
+
* (v1's method): `readlink /proc/<pid>/fd/0` gives the pty, and
|
|
69
|
+
* `tmux list-panes` maps ptys to panes. We walk a few generations up because
|
|
70
|
+
* the MCP server may sit behind a shell wrapper, and only the agent process
|
|
71
|
+
* itself is attached to the pane's tty.
|
|
72
|
+
*
|
|
73
|
+
* Returns null when not under tmux, which is a normal state, not an error.
|
|
74
|
+
*/
|
|
75
|
+
export declare function detectTmuxPane(): Promise<string | null>;
|
|
76
|
+
/** Is tmux installed and is a server running? */
|
|
77
|
+
export declare function tmuxAvailable(): Promise<boolean>;
|
|
78
|
+
/**
|
|
79
|
+
* Capture a pane's visible screen as plain text. Deliberately WITHOUT `-e`, so
|
|
80
|
+
* tmux resolves colour/cursor escapes into rendered text — the transcript stores
|
|
81
|
+
* readable content instead of raw ANSI the UI would have to interpret.
|
|
82
|
+
*
|
|
83
|
+
* Trailing blank lines are dropped: a TUI pads the screen to its full height, and
|
|
84
|
+
* keeping that padding would make every snapshot differ on cursor movement alone.
|
|
85
|
+
*/
|
|
86
|
+
export declare function capturePane(target?: string): Promise<string>;
|
|
87
|
+
/**
|
|
88
|
+
* Trim a raw capture into what gets stored: trailing blank lines dropped, and
|
|
89
|
+
* the TAIL kept when oversized (the bottom of a screen is where current output
|
|
90
|
+
* is; truncating the head loses scrolled-away context, truncating the tail would
|
|
91
|
+
* lose the live part).
|
|
92
|
+
*/
|
|
93
|
+
export declare function normalizeSnapshot(raw: string, max?: number): string;
|
|
94
|
+
/**
|
|
95
|
+
* Deliver a notice to a pane. The two modes are deliberately different
|
|
96
|
+
* MECHANISMS, not the same one with a flag:
|
|
97
|
+
*
|
|
98
|
+
* - `submit: false` → `display-message`, which paints the status line and never
|
|
99
|
+
* touches the input buffer. Typing an unsubmitted notice instead (the obvious
|
|
100
|
+
* first attempt) corrupts whatever the human or agent was mid-way through
|
|
101
|
+
* typing, and successive notices concatenate into one unreadable line.
|
|
102
|
+
* - `submit: true` → `send-keys -l` + `Enter`, delivering the notice as input so
|
|
103
|
+
* the agent actually processes it. `-l` sends the text LITERALLY; without it
|
|
104
|
+
* tmux reads words like "Enter" as key names.
|
|
105
|
+
*
|
|
106
|
+
* Non-submit is for a human watching the pane; submit is for waking the agent.
|
|
107
|
+
*/
|
|
108
|
+
/**
|
|
109
|
+
* Pause between typing a submitted notice and pressing Enter.
|
|
110
|
+
*
|
|
111
|
+
* #108: Codex's composer treats a CR that arrives in the same input burst as
|
|
112
|
+
* the preceding text as a PASTED newline, not a submit — so back-to-back
|
|
113
|
+
* `send-keys -l` + `send-keys Enter` left the notice sitting in the composer.
|
|
114
|
+
* Measured live against Codex 0.139: the immediate Enter is swallowed; the
|
|
115
|
+
* same Enter ≥50ms later submits every time. 150ms buys a 3× margin and is
|
|
116
|
+
* imperceptible next to the 1s mirror cadence. Claude Code tolerates the
|
|
117
|
+
* pause too, so it is unconditional rather than per-TUI.
|
|
118
|
+
*/
|
|
119
|
+
export declare const SUBMIT_ENTER_DELAY_MS = 150;
|
|
120
|
+
/**
|
|
121
|
+
* #108 round two: for a LARGE notice (~1KB — a full message with attachment
|
|
122
|
+
* manifest), Codex collapses the burst into a "[Pasted Content N chars]" chip
|
|
123
|
+
* and CONSUMES the first Enter outright — no delay fixes it (measured on
|
|
124
|
+
* Codex 0.139: a single Enter still failed 2s after the text). What does work
|
|
125
|
+
* is pressing Enter AGAIN once the paste has settled. So after the first
|
|
126
|
+
* Enter, press it twice more on this schedule. The retries are no-ops when
|
|
127
|
+
* the first press already submitted: an empty composer ignores Enter, and a
|
|
128
|
+
* running turn does too (verified live with small and large payloads on
|
|
129
|
+
* Codex 0.139 and 0.146, and Claude Code behaves the same). Cost: ~2.7s per
|
|
130
|
+
* delivery inside the serial pane queue — chat cadence, not a hot path.
|
|
131
|
+
*/
|
|
132
|
+
export declare const SUBMIT_ENTER_RETRIES_MS: readonly number[];
|
|
133
|
+
/** Injected in tests so the type/pause/Enter ordering is checkable without tmux. */
|
|
134
|
+
export interface NotifyPaneDeps {
|
|
135
|
+
exec?: (args: string[]) => Promise<unknown>;
|
|
136
|
+
sleep?: (ms: number) => Promise<void>;
|
|
137
|
+
}
|
|
138
|
+
export declare function notifyPane(text: string, target?: string, submit?: boolean, deps?: NotifyPaneDeps): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* Send ONE key to a pane, by tmux key NAME (not literally).
|
|
141
|
+
*
|
|
142
|
+
* Answering a prompt means pressing keys, not typing text: "Right" must arrive
|
|
143
|
+
* as the arrow key that opens the review pane, and "1" as the digit that toggles
|
|
144
|
+
* an option. `send-keys -l` (used for message delivery) would type the literal
|
|
145
|
+
* word "Right", so this deliberately omits it.
|
|
146
|
+
*/
|
|
147
|
+
export declare function sendKeyToPane(key: string, target?: string): Promise<void>;
|
|
148
|
+
/** Injected in tests so the ordering and pacing can be checked without tmux. */
|
|
149
|
+
export interface KeySequenceDeps {
|
|
150
|
+
sendKey?: (key: string, target?: string) => Promise<void>;
|
|
151
|
+
sleep?: (ms: number) => Promise<void>;
|
|
152
|
+
delayMs?: number;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Send a sequence of keys to a pane with a pause BETWEEN each (never after the
|
|
156
|
+
* last), so a re-rendering TUI does not drop the ones in the middle.
|
|
157
|
+
*/
|
|
158
|
+
export declare function sendKeySequence(keys: string[], target: string | undefined, deps?: KeySequenceDeps): Promise<void>;
|
|
159
|
+
/** Type literal text into a pane (message-delivery style), newlines stripped. */
|
|
160
|
+
export declare function typeTextToPane(text: string, target?: string): Promise<void>;
|
|
161
|
+
/** Send a mixed sequence of key presses and literal-text injections, paced. */
|
|
162
|
+
export declare function sendKeySteps(steps: import("./prompts.js").KeyStep[], target: string | undefined, deps?: KeySequenceDeps & {
|
|
163
|
+
typeText?: (t: string, target?: string) => Promise<void>;
|
|
164
|
+
}): Promise<void>;
|
|
165
|
+
/** Describe a pane for the session label, e.g. "0:0.0 (claude)". */
|
|
166
|
+
export declare function describePane(target?: string): Promise<string>;
|
|
167
|
+
export interface MirrorLoopOptions {
|
|
168
|
+
client: TaskflowClient;
|
|
169
|
+
session: number;
|
|
170
|
+
target?: string | undefined;
|
|
171
|
+
intervalMs?: number;
|
|
172
|
+
notify?: boolean;
|
|
173
|
+
notifySubmit?: boolean;
|
|
174
|
+
log?: (line: string) => void;
|
|
175
|
+
/** Called when a tick fails, so callers can react to the backend going away. */
|
|
176
|
+
onError?: (error: Error) => void;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Stream a pane into an EXISTING session until stopped. Returns a stop function.
|
|
180
|
+
*
|
|
181
|
+
* Split out of the CLI path so the MCP server can run the same loop in-process:
|
|
182
|
+
* the mirror should not be a second thing a human remembers to launch.
|
|
183
|
+
*/
|
|
184
|
+
export declare function startMirrorLoop(options: MirrorLoopOptions): () => void;
|
|
185
|
+
/**
|
|
186
|
+
* Auto-start mirroring for an agent that is running inside tmux. Silently does
|
|
187
|
+
* nothing when there is no pane to find — being outside tmux is normal.
|
|
188
|
+
*/
|
|
189
|
+
export declare function startAutoMirror(options: {
|
|
190
|
+
client: TaskflowClient;
|
|
191
|
+
session: number;
|
|
192
|
+
intervalMs?: number;
|
|
193
|
+
notify?: boolean;
|
|
194
|
+
notifySubmit?: boolean;
|
|
195
|
+
log?: (line: string) => void;
|
|
196
|
+
}): Promise<(() => void) | null>;
|
|
197
|
+
/**
|
|
198
|
+
* Mirror the pane until interrupted. Resolves with an exit code.
|
|
199
|
+
*/
|
|
200
|
+
export declare function runTmuxMirror(options?: TmuxOptions): Promise<number>;
|