@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.
Files changed (99) hide show
  1. package/README.md +138 -193
  2. package/dist/attachment-download.d.ts +74 -0
  3. package/dist/attachment-download.js +193 -0
  4. package/dist/attachment-download.js.map +1 -0
  5. package/dist/attachments.d.ts +23 -0
  6. package/dist/attachments.js +66 -0
  7. package/dist/attachments.js.map +1 -0
  8. package/dist/client.d.ts +206 -0
  9. package/dist/client.js +279 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/config.d.ts +137 -18
  12. package/dist/config.js +187 -106
  13. package/dist/config.js.map +1 -0
  14. package/dist/connect.d.ts +89 -0
  15. package/dist/connect.js +269 -0
  16. package/dist/connect.js.map +1 -0
  17. package/dist/doctor.d.ts +24 -0
  18. package/dist/doctor.js +120 -0
  19. package/dist/doctor.js.map +1 -0
  20. package/dist/events.d.ts +186 -0
  21. package/dist/events.js +407 -0
  22. package/dist/events.js.map +1 -0
  23. package/dist/index.d.ts +7 -1
  24. package/dist/index.js +124 -184
  25. package/dist/index.js.map +1 -0
  26. package/dist/instructions.d.ts +12 -0
  27. package/dist/instructions.js +114 -0
  28. package/dist/instructions.js.map +1 -0
  29. package/dist/mint.d.ts +62 -0
  30. package/dist/mint.js +135 -0
  31. package/dist/mint.js.map +1 -0
  32. package/dist/mirror.d.ts +68 -0
  33. package/dist/mirror.js +103 -0
  34. package/dist/mirror.js.map +1 -0
  35. package/dist/pane-queue.d.ts +29 -0
  36. package/dist/pane-queue.js +35 -0
  37. package/dist/pane-queue.js.map +1 -0
  38. package/dist/prompts.d.ts +79 -0
  39. package/dist/prompts.js +211 -0
  40. package/dist/prompts.js.map +1 -0
  41. package/dist/resolve.d.ts +72 -0
  42. package/dist/resolve.js +89 -0
  43. package/dist/resolve.js.map +1 -0
  44. package/dist/runtime.d.ts +54 -0
  45. package/dist/runtime.js +321 -0
  46. package/dist/runtime.js.map +1 -0
  47. package/dist/server.d.ts +56 -0
  48. package/dist/server.js +793 -0
  49. package/dist/server.js.map +1 -0
  50. package/dist/session-identifier.d.ts +48 -0
  51. package/dist/session-identifier.js +44 -0
  52. package/dist/session-identifier.js.map +1 -0
  53. package/dist/sessions-store.d.ts +38 -0
  54. package/dist/sessions-store.js +88 -0
  55. package/dist/sessions-store.js.map +1 -0
  56. package/dist/tmux.d.ts +200 -0
  57. package/dist/tmux.js +580 -0
  58. package/dist/tmux.js.map +1 -0
  59. package/hooks/metadata.mjs +99 -0
  60. package/hooks/permission-prompt.mjs +100 -0
  61. package/hooks/taskflow-hook.mjs +499 -0
  62. package/hooks/tool-logging.mjs +63 -0
  63. package/package.json +38 -29
  64. package/dist/agent-registry.d.ts +0 -27
  65. package/dist/agent-registry.js +0 -153
  66. package/dist/db.d.ts +0 -5
  67. package/dist/db.js +0 -220
  68. package/dist/helpers.d.ts +0 -21
  69. package/dist/helpers.js +0 -27
  70. package/dist/resources.d.ts +0 -2
  71. package/dist/resources.js +0 -89
  72. package/dist/sse.d.ts +0 -10
  73. package/dist/sse.js +0 -766
  74. package/dist/tmux-bridge.d.ts +0 -12
  75. package/dist/tmux-bridge.js +0 -157
  76. package/dist/tools/activity.d.ts +0 -39
  77. package/dist/tools/activity.js +0 -152
  78. package/dist/tools/agent-inbox.d.ts +0 -12
  79. package/dist/tools/agent-inbox.js +0 -257
  80. package/dist/tools/agent.d.ts +0 -14
  81. package/dist/tools/agent.js +0 -168
  82. package/dist/tools/analytics.d.ts +0 -21
  83. package/dist/tools/analytics.js +0 -191
  84. package/dist/tools/checkpoint.d.ts +0 -27
  85. package/dist/tools/checkpoint.js +0 -105
  86. package/dist/tools/notifications.d.ts +0 -31
  87. package/dist/tools/notifications.js +0 -59
  88. package/dist/tools/projects.d.ts +0 -55
  89. package/dist/tools/projects.js +0 -112
  90. package/dist/tools/settings.d.ts +0 -19
  91. package/dist/tools/settings.js +0 -73
  92. package/dist/tools/tasks.d.ts +0 -105
  93. package/dist/tools/tasks.js +0 -403
  94. package/dist/tools/terminal.d.ts +0 -4
  95. package/dist/tools/terminal.js +0 -98
  96. package/dist/tools/timer.d.ts +0 -37
  97. package/dist/tools/timer.js +0 -154
  98. package/dist/types.d.ts +0 -82
  99. 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>;