@dalmasonto/taskflow-mcp 2.0.0 → 2.1.2
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/dist/client.d.ts +15 -3
- package/dist/client.js +64 -18
- package/dist/client.js.map +1 -1
- package/dist/events.d.ts +38 -5
- package/dist/events.js +76 -13
- package/dist/events.js.map +1 -1
- package/dist/prompt-gate.d.ts +61 -0
- package/dist/prompt-gate.js +97 -0
- package/dist/prompt-gate.js.map +1 -0
- package/dist/runtime.js +109 -16
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -141,6 +141,15 @@ export declare class TaskflowClient {
|
|
|
141
141
|
listChannels(): Promise<ChannelSummary[]>;
|
|
142
142
|
/** `GET /agents/agents` — the other agents in the caller's project. */
|
|
143
143
|
listAgents(): Promise<AgentSummary[]>;
|
|
144
|
+
/** `GET /agents/prompts` — this agent's OPEN (pending) prompts. #127: the MCP
|
|
145
|
+
* hydrates its message gate from this on connect/reconnect so a prompt raised
|
|
146
|
+
* while the stream was down still pauses pane delivery. */
|
|
147
|
+
listOpenPrompts(): Promise<Array<{
|
|
148
|
+
id: number;
|
|
149
|
+
agent: number;
|
|
150
|
+
session: number;
|
|
151
|
+
status: string;
|
|
152
|
+
}>>;
|
|
144
153
|
/** `GET /agents/messages?channel=&since=&limit=` → `{ messages, read_cursor }`. */
|
|
145
154
|
listMessages(params: {
|
|
146
155
|
channel: number;
|
|
@@ -156,7 +165,8 @@ export declare class TaskflowClient {
|
|
|
156
165
|
}): Promise<unknown[]>;
|
|
157
166
|
/** `POST /agents/agent/messages` — speak as this agent in a channel. */
|
|
158
167
|
sendMessage(input: SendMessageInput): Promise<unknown>;
|
|
159
|
-
/** `POST /channels/{id}/agent/read` — advance this agent's read cursor.
|
|
168
|
+
/** `POST /channels/{id}/agent/read` — advance this agent's read cursor.
|
|
169
|
+
* Idempotent: sets the cursor to a specific message id, so a retry is safe. */
|
|
160
170
|
markRead(channel: number, lastReadMessage: number): Promise<unknown>;
|
|
161
171
|
/** `POST /agents/tasks` — author a task in the agent's project (optionally claim). */
|
|
162
172
|
createTask(input: CreateTaskInput): Promise<unknown>;
|
|
@@ -181,13 +191,15 @@ export declare class TaskflowClient {
|
|
|
181
191
|
reportReview(task: number, decision: string, bodyMarkdown?: string): Promise<unknown>;
|
|
182
192
|
/** `POST /agents/sessions` — register or reconnect a live session. */
|
|
183
193
|
registerSession(input: RegisterSessionInput): Promise<SessionRow>;
|
|
184
|
-
/** `POST /agents/sessions/{id}/heartbeat` — bump liveness (status hint idle/busy).
|
|
194
|
+
/** `POST /agents/sessions/{id}/heartbeat` — bump liveness (status hint idle/busy).
|
|
195
|
+
* Idempotent: sets last-seen/status to the current values, so a retry is safe. */
|
|
185
196
|
heartbeat(session: number, status?: string): Promise<SessionRow>;
|
|
186
197
|
/** `POST /agents/sessions/{id}/frames` — append one terminal frame. */
|
|
187
198
|
appendFrame(session: number, frame: FrameInput): Promise<unknown>;
|
|
188
199
|
/** `POST /agents/sessions/{id}/frames` — append a batch of terminal frames. */
|
|
189
200
|
appendFrames(session: number, frames: FrameInput[]): Promise<unknown>;
|
|
190
|
-
/** `POST /agents/sessions/{id}/close` — disconnect a session.
|
|
201
|
+
/** `POST /agents/sessions/{id}/close` — disconnect a session.
|
|
202
|
+
* Idempotent: closing an already-closed session is a no-op, so a retry is safe. */
|
|
191
203
|
closeSession(session: number): Promise<SessionRow>;
|
|
192
204
|
/** `POST /agents/activity` — log one real activity event. */
|
|
193
205
|
logActivity(event: ActivityEventInput): Promise<{
|
package/dist/client.js
CHANGED
|
@@ -71,18 +71,45 @@ export class TaskflowClient {
|
|
|
71
71
|
headers["Content-Type"] = "application/json";
|
|
72
72
|
init.body = JSON.stringify(options.body);
|
|
73
73
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
// Retry ONCE on a network-level failure with a fresh connection. A reused
|
|
75
|
+
// keep-alive socket that a stateful gateway (NAT64 here) silently dropped
|
|
76
|
+
// throws `fetch failed` before the request reaches the server — a second
|
|
77
|
+
// attempt gets a new socket and usually succeeds, which is what turns a
|
|
78
|
+
// wedged connection into a self-healing one instead of needing a restart.
|
|
79
|
+
//
|
|
80
|
+
// Gated on `options.idempotent`: a `fetch failed` cannot distinguish "never
|
|
81
|
+
// reached the server" from "processed, response lost", so only operations
|
|
82
|
+
// that are safe to run twice opt in (reads, mark_read, heartbeat, close).
|
|
83
|
+
// Content-creating writes (create task, send message, report review, log
|
|
84
|
+
// activity, append frames) never retry — a duplicate would be worse than a
|
|
85
|
+
// surfaced error. Multipart form bodies are excluded regardless (a FormData
|
|
86
|
+
// body may not survive a second send).
|
|
87
|
+
const canRetry = options.idempotent === true && options.form === undefined;
|
|
77
88
|
let res;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
89
|
+
let lastErr;
|
|
90
|
+
for (let tryNo = 0; tryNo < (canRetry ? 2 : 1); tryNo++) {
|
|
91
|
+
const controller = new AbortController();
|
|
92
|
+
const timer = setTimeout(() => controller.abort(), options.timeoutMs ?? this.timeoutMs);
|
|
93
|
+
init.signal = controller.signal;
|
|
94
|
+
try {
|
|
95
|
+
res = await this.fetchImpl(url, init);
|
|
96
|
+
lastErr = undefined;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
lastErr = err;
|
|
101
|
+
// A timeout (the controller aborted) is not worth a second try — the
|
|
102
|
+
// deadline is spent. A raw connection failure is.
|
|
103
|
+
if (controller.signal.aborted)
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
clearTimeout(timer);
|
|
108
|
+
}
|
|
83
109
|
}
|
|
84
|
-
|
|
85
|
-
|
|
110
|
+
if (lastErr !== undefined || res === undefined) {
|
|
111
|
+
const message = lastErr instanceof Error ? lastErr.message : "request failed";
|
|
112
|
+
throw new TaskflowApiError(method, path, 0, `network error: ${message}`);
|
|
86
113
|
}
|
|
87
114
|
const raw = await res.text();
|
|
88
115
|
if (!res.ok) {
|
|
@@ -102,21 +129,28 @@ export class TaskflowClient {
|
|
|
102
129
|
// ---- READS ---------------------------------------------------------------
|
|
103
130
|
/** `GET /agents/whoami` — the identity behind the presented credential. */
|
|
104
131
|
whoami() {
|
|
105
|
-
return this.request("GET", `${API_PREFIX}/agents/whoami
|
|
132
|
+
return this.request("GET", `${API_PREFIX}/agents/whoami`, { idempotent: true });
|
|
106
133
|
}
|
|
107
134
|
/** `GET /agents/tasks?status=&assigned=` — tasks in the agent's project. */
|
|
108
135
|
listTasks(params = {}) {
|
|
109
136
|
return this.request("GET", `${API_PREFIX}/agents/tasks`, {
|
|
110
137
|
query: { status: params.status, assigned: params.assigned },
|
|
138
|
+
idempotent: true,
|
|
111
139
|
});
|
|
112
140
|
}
|
|
113
141
|
/** `GET /agents/channels` — channels the agent may see. */
|
|
114
142
|
listChannels() {
|
|
115
|
-
return this.request("GET", `${API_PREFIX}/agents/channels
|
|
143
|
+
return this.request("GET", `${API_PREFIX}/agents/channels`, { idempotent: true });
|
|
116
144
|
}
|
|
117
145
|
/** `GET /agents/agents` — the other agents in the caller's project. */
|
|
118
146
|
listAgents() {
|
|
119
|
-
return this.request("GET", `${API_PREFIX}/agents/agents
|
|
147
|
+
return this.request("GET", `${API_PREFIX}/agents/agents`, { idempotent: true });
|
|
148
|
+
}
|
|
149
|
+
/** `GET /agents/prompts` — this agent's OPEN (pending) prompts. #127: the MCP
|
|
150
|
+
* hydrates its message gate from this on connect/reconnect so a prompt raised
|
|
151
|
+
* while the stream was down still pauses pane delivery. */
|
|
152
|
+
listOpenPrompts() {
|
|
153
|
+
return this.request("GET", `${API_PREFIX}/agents/prompts`, { idempotent: true });
|
|
120
154
|
}
|
|
121
155
|
/** `GET /agents/messages?channel=&since=&limit=` → `{ messages, read_cursor }`. */
|
|
122
156
|
listMessages(params) {
|
|
@@ -127,12 +161,14 @@ export class TaskflowClient {
|
|
|
127
161
|
limit: params.limit,
|
|
128
162
|
unread: params.unread,
|
|
129
163
|
},
|
|
164
|
+
idempotent: true,
|
|
130
165
|
});
|
|
131
166
|
}
|
|
132
167
|
/** `GET /agents/activity?task=&limit=` — recent activity, newest first. */
|
|
133
168
|
listActivity(params = {}) {
|
|
134
169
|
return this.request("GET", `${API_PREFIX}/agents/activity`, {
|
|
135
170
|
query: { task: params.task, limit: params.limit },
|
|
171
|
+
idempotent: true,
|
|
136
172
|
});
|
|
137
173
|
}
|
|
138
174
|
// ---- WRITES: messages / read cursor --------------------------------------
|
|
@@ -160,10 +196,12 @@ export class TaskflowClient {
|
|
|
160
196
|
timeoutMs: 120_000,
|
|
161
197
|
});
|
|
162
198
|
}
|
|
163
|
-
/** `POST /channels/{id}/agent/read` — advance this agent's read cursor.
|
|
199
|
+
/** `POST /channels/{id}/agent/read` — advance this agent's read cursor.
|
|
200
|
+
* Idempotent: sets the cursor to a specific message id, so a retry is safe. */
|
|
164
201
|
markRead(channel, lastReadMessage) {
|
|
165
202
|
return this.request("POST", `${API_PREFIX}/channels/${channel}/agent/read`, {
|
|
166
203
|
body: { last_read_message: lastReadMessage },
|
|
204
|
+
idempotent: true,
|
|
167
205
|
});
|
|
168
206
|
}
|
|
169
207
|
// ---- WRITES: tasks -------------------------------------------------------
|
|
@@ -217,12 +255,16 @@ export class TaskflowClient {
|
|
|
217
255
|
registerSession(input) {
|
|
218
256
|
return this.request("POST", `${API_PREFIX}/agents/sessions`, { body: input });
|
|
219
257
|
}
|
|
220
|
-
/** `POST /agents/sessions/{id}/heartbeat` — bump liveness (status hint idle/busy).
|
|
258
|
+
/** `POST /agents/sessions/{id}/heartbeat` — bump liveness (status hint idle/busy).
|
|
259
|
+
* Idempotent: sets last-seen/status to the current values, so a retry is safe. */
|
|
221
260
|
heartbeat(session, status) {
|
|
222
261
|
const body = {};
|
|
223
262
|
if (status !== undefined)
|
|
224
263
|
body.status = status;
|
|
225
|
-
return this.request("POST", `${API_PREFIX}/agents/sessions/${session}/heartbeat`, {
|
|
264
|
+
return this.request("POST", `${API_PREFIX}/agents/sessions/${session}/heartbeat`, {
|
|
265
|
+
body,
|
|
266
|
+
idempotent: true,
|
|
267
|
+
});
|
|
226
268
|
}
|
|
227
269
|
/** `POST /agents/sessions/{id}/frames` — append one terminal frame. */
|
|
228
270
|
appendFrame(session, frame) {
|
|
@@ -236,9 +278,13 @@ export class TaskflowClient {
|
|
|
236
278
|
body: { frames },
|
|
237
279
|
});
|
|
238
280
|
}
|
|
239
|
-
/** `POST /agents/sessions/{id}/close` — disconnect a session.
|
|
281
|
+
/** `POST /agents/sessions/{id}/close` — disconnect a session.
|
|
282
|
+
* Idempotent: closing an already-closed session is a no-op, so a retry is safe. */
|
|
240
283
|
closeSession(session) {
|
|
241
|
-
return this.request("POST", `${API_PREFIX}/agents/sessions/${session}/close`, {
|
|
284
|
+
return this.request("POST", `${API_PREFIX}/agents/sessions/${session}/close`, {
|
|
285
|
+
body: {},
|
|
286
|
+
idempotent: true,
|
|
287
|
+
});
|
|
242
288
|
}
|
|
243
289
|
/** `POST /agents/activity` — log one real activity event. */
|
|
244
290
|
logActivity(event) {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA4BH,8DAA8D;AAC9D,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,MAAM,CAAS;IACf,MAAM,CAAS;IACf,MAAM,CAAS;IACf,IAAI,CAAS;IACtB,YAAY,MAAc,EAAE,IAAY,EAAE,MAAc,EAAE,MAAc;QACtE,KAAK,CAAC,GAAG,MAAM,IAAI,IAAI,MAAM,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/events.d.ts
CHANGED
|
@@ -12,6 +12,19 @@
|
|
|
12
12
|
* parsing is done here — it is a small, well-specified format.
|
|
13
13
|
*/
|
|
14
14
|
import { TaskflowClient } from "./client.js";
|
|
15
|
+
/**
|
|
16
|
+
* Tiered reconnect backoff: retry FAST while a drop is probably a blip, then
|
|
17
|
+
* step the delay up the longer the server stays away — so a NAT64 socket drop
|
|
18
|
+
* recovers in seconds, while a real outage does not hammer a dead server. The
|
|
19
|
+
* argument is the count of CONSECUTIVE failures (reset to 0 on a live connect).
|
|
20
|
+
*
|
|
21
|
+
* attempts 1–10 → 5s (a transient drop: recover quickly)
|
|
22
|
+
* attempts 11–20 → 10s (still down: ease off)
|
|
23
|
+
* attempts 21+ → 20s (looks like an outage: slow, steady retries)
|
|
24
|
+
*
|
|
25
|
+
* Exported so the schedule is unit-tested directly rather than through timers.
|
|
26
|
+
*/
|
|
27
|
+
export declare function reconnectDelayMs(consecutiveFailures: number): number;
|
|
15
28
|
export interface AgentMessageEvent {
|
|
16
29
|
id: number;
|
|
17
30
|
channel: number;
|
|
@@ -55,14 +68,31 @@ export interface EventStreamOptions {
|
|
|
55
68
|
onMessage: (message: AgentMessageEvent, action?: "created" | "updated") => void | Promise<void>;
|
|
56
69
|
/** Called when a human answers a question this agent is blocked on. */
|
|
57
70
|
onPromptAnswered?: (prompt: PromptEvent) => void | Promise<void>;
|
|
71
|
+
/** #127: called for EVERY `:prompts` event (pending/answered/cancelled), so the
|
|
72
|
+
* runtime can pause pane message delivery while a prompt is open and flush it
|
|
73
|
+
* once resolved. Distinct from `onPromptAnswered`, which fires only on a human
|
|
74
|
+
* answer to replay keys. */
|
|
75
|
+
onPromptState?: (prompt: PromptEvent) => void | Promise<void>;
|
|
58
76
|
/** Called when a human sends a terminal key from the dashboard. Broadcast to
|
|
59
77
|
* the whole project, so `agent` says which pane it is for — the handler must
|
|
60
78
|
* ignore keys addressed to other agents. */
|
|
61
79
|
onTerminalKey?: (input: TerminalKeyEvent) => void | Promise<void>;
|
|
62
|
-
/** Called
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
|
|
80
|
+
/** Called after EVERY successful connect, AWAITED before any frame is parsed —
|
|
81
|
+
* a barrier so hydration/catch-up finishes before a live message or prompt
|
|
82
|
+
* frame can be dispatched (#127). `isReconnect` is false on the first connect
|
|
83
|
+
* (nothing to catch up) and true after. Frames sent during the hook buffer in
|
|
84
|
+
* TCP and are read right after it resolves. The hook must own its own errors;
|
|
85
|
+
* a throw is logged and does not stop the read loop. */
|
|
86
|
+
onConnected?: (isReconnect: boolean) => void | Promise<void>;
|
|
87
|
+
/** Called ONCE when reconnects have failed {@link UNREACHABLE_AFTER_ATTEMPTS}
|
|
88
|
+
* times in a row — the server looks genuinely unreachable, so tell the agent
|
|
89
|
+
* its live feed is paused. Fires again only after a successful reconnect
|
|
90
|
+
* resets the failure counter. */
|
|
91
|
+
onUnreachable?: (consecutiveFailures: number) => void | Promise<void>;
|
|
92
|
+
/** Called when the stream reconnects AFTER an `onUnreachable` notice — the
|
|
93
|
+
* "we're back" counterpart, so the agent is not left thinking it is offline.
|
|
94
|
+
* Not fired for ordinary reconnects (that is `onReconnect`'s catch-up). */
|
|
95
|
+
onRecovered?: () => void | Promise<void>;
|
|
66
96
|
log?: (line: string) => void;
|
|
67
97
|
/** Injected in tests. */
|
|
68
98
|
fetchImpl?: typeof fetch;
|
|
@@ -86,7 +116,7 @@ export interface EventStreamHandle {
|
|
|
86
116
|
*/
|
|
87
117
|
export declare function startAgentEventStream(options: EventStreamOptions): EventStreamHandle;
|
|
88
118
|
/** Pull the `data:` lines out of one SSE frame and dispatch a message event. */
|
|
89
|
-
export declare function handleFrame(frame: string, options: Pick<EventStreamOptions, "onMessage" | "onPromptAnswered" | "onTerminalKey">): void;
|
|
119
|
+
export declare function handleFrame(frame: string, options: Pick<EventStreamOptions, "onMessage" | "onPromptAnswered" | "onPromptState" | "onTerminalKey">): void;
|
|
90
120
|
/**
|
|
91
121
|
* Whether a message should be delivered to THIS agent's terminal.
|
|
92
122
|
*
|
|
@@ -148,6 +178,9 @@ export declare function answerKeystrokes(choices: number[], kind: string): strin
|
|
|
148
178
|
export interface PromptEvent {
|
|
149
179
|
id: number;
|
|
150
180
|
session: number;
|
|
181
|
+
/** #127: the agent whose terminal the prompt is on (projected in
|
|
182
|
+
* `PROMPT_FIELDS`). The message gate blocks only on this agent's prompts. */
|
|
183
|
+
agent?: number | null;
|
|
151
184
|
question: string;
|
|
152
185
|
kind: string;
|
|
153
186
|
status: string;
|
package/dist/events.js
CHANGED
|
@@ -11,9 +11,33 @@
|
|
|
11
11
|
* <key>`, and EventSource cannot set headers. Node's fetch can, so the SSE frame
|
|
12
12
|
* parsing is done here — it is a small, well-specified format.
|
|
13
13
|
*/
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Tiered reconnect backoff: retry FAST while a drop is probably a blip, then
|
|
16
|
+
* step the delay up the longer the server stays away — so a NAT64 socket drop
|
|
17
|
+
* recovers in seconds, while a real outage does not hammer a dead server. The
|
|
18
|
+
* argument is the count of CONSECUTIVE failures (reset to 0 on a live connect).
|
|
19
|
+
*
|
|
20
|
+
* attempts 1–10 → 5s (a transient drop: recover quickly)
|
|
21
|
+
* attempts 11–20 → 10s (still down: ease off)
|
|
22
|
+
* attempts 21+ → 20s (looks like an outage: slow, steady retries)
|
|
23
|
+
*
|
|
24
|
+
* Exported so the schedule is unit-tested directly rather than through timers.
|
|
25
|
+
*/
|
|
26
|
+
export function reconnectDelayMs(consecutiveFailures) {
|
|
27
|
+
if (consecutiveFailures <= 10)
|
|
28
|
+
return 5_000;
|
|
29
|
+
if (consecutiveFailures <= 20)
|
|
30
|
+
return 10_000;
|
|
31
|
+
return 20_000;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* After this many consecutive failed reconnects the server looks genuinely
|
|
35
|
+
* unreachable: tell the agent ONCE (so it stops waiting on a dead feed), then
|
|
36
|
+
* keep retrying quietly at the top tier so delivery self-heals when the server
|
|
37
|
+
* returns. The counter resets on a successful connect, so a later outage
|
|
38
|
+
* notifies again.
|
|
39
|
+
*/
|
|
40
|
+
const UNREACHABLE_AFTER_ATTEMPTS = 30;
|
|
17
41
|
/**
|
|
18
42
|
* Treat the stream as dead after this long with NOTHING on it — not even a
|
|
19
43
|
* keep-alive comment.
|
|
@@ -23,9 +47,12 @@ const RECONNECT_MAX_MS = 30_000;
|
|
|
23
47
|
* listener sits there believing it is connected while nothing is delivered.
|
|
24
48
|
* Waiting for an error is waiting for an event that never comes; the only sound
|
|
25
49
|
* signal is the absence of expected traffic. The server sends SSE keep-alives
|
|
26
|
-
* every ~15s, so silence
|
|
50
|
+
* every ~15s, so ~25s of silence (one missed keep-alive plus slack) means the
|
|
51
|
+
* stream is gone. Kept tight on purpose: a stateful NAT64 gateway silently drops
|
|
52
|
+
* idle long-lived sockets, and the faster this trips the faster delivery
|
|
53
|
+
* recovers — a needless reconnect only costs a catch-up round trip.
|
|
27
54
|
*/
|
|
28
|
-
const STREAM_IDLE_TIMEOUT_MS =
|
|
55
|
+
const STREAM_IDLE_TIMEOUT_MS = 25_000;
|
|
29
56
|
/**
|
|
30
57
|
* Hard cap on the SSE read buffer (#44). Frames here are id-only and tiny; a
|
|
31
58
|
* buffer this large means the server is streaming a frame that never terminates
|
|
@@ -44,16 +71,26 @@ export function startAgentEventStream(options) {
|
|
|
44
71
|
const doFetch = options.fetchImpl ?? fetch;
|
|
45
72
|
const url = `${options.server.replace(/\/+$/, "")}/api/taskflow/agents/events`;
|
|
46
73
|
let stopped = false;
|
|
74
|
+
// Count of CONSECUTIVE failed (re)connects; 0 while connected.
|
|
47
75
|
let attempt = 0;
|
|
76
|
+
// Whether the agent has already been told the server is unreachable this spell
|
|
77
|
+
// — so the notice fires once per outage, not once per retry.
|
|
78
|
+
let unreachableNotified = false;
|
|
48
79
|
let everConnected = false;
|
|
49
80
|
let controller = null;
|
|
50
81
|
let retryTimer = null;
|
|
51
82
|
const scheduleRetry = () => {
|
|
52
83
|
if (stopped)
|
|
53
84
|
return;
|
|
54
|
-
const ceiling = Math.min(RECONNECT_BASE_MS * 2 ** attempt, RECONNECT_MAX_MS);
|
|
55
|
-
const delay = Math.round(ceiling / 2 + Math.random() * (ceiling / 2));
|
|
56
85
|
attempt += 1;
|
|
86
|
+
// A sustained outage: tell the agent once its feed is dead, then keep
|
|
87
|
+
// retrying at the top tier so it recovers on its own when the server returns.
|
|
88
|
+
if (attempt >= UNREACHABLE_AFTER_ATTEMPTS && !unreachableNotified) {
|
|
89
|
+
unreachableNotified = true;
|
|
90
|
+
log(`event stream unreachable after ${attempt} attempts — notifying agent`);
|
|
91
|
+
void options.onUnreachable?.(attempt);
|
|
92
|
+
}
|
|
93
|
+
const delay = reconnectDelayMs(attempt);
|
|
57
94
|
retryTimer = setTimeout(connect, delay);
|
|
58
95
|
retryTimer.unref?.();
|
|
59
96
|
};
|
|
@@ -72,11 +109,26 @@ export function startAgentEventStream(options) {
|
|
|
72
109
|
}
|
|
73
110
|
attempt = 0;
|
|
74
111
|
log("event stream connected");
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
|
|
112
|
+
// Recovered from a sustained outage the agent was told about: say so, so it
|
|
113
|
+
// is not left believing the feed is still dead. Ordinary reconnects skip
|
|
114
|
+
// this — only the catch-up below runs for those.
|
|
115
|
+
if (unreachableNotified) {
|
|
116
|
+
unreachableNotified = false;
|
|
117
|
+
void options.onRecovered?.();
|
|
118
|
+
}
|
|
119
|
+
const isReconnect = everConnected;
|
|
79
120
|
everConnected = true;
|
|
121
|
+
// #127 BARRIER: run hydration/catch-up to completion BEFORE parsing any
|
|
122
|
+
// frame, so a live message can't be handled before the gate learns of an
|
|
123
|
+
// already-open prompt, and a stale hydration response can't race a prompt
|
|
124
|
+
// event. Frames sent meanwhile buffer in TCP and are read right after. The
|
|
125
|
+
// hook owns its errors; a failure must not wedge the read loop.
|
|
126
|
+
try {
|
|
127
|
+
await options.onConnected?.(isReconnect);
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
log(`onConnected hook failed: ${err.message.split("\n")[0]}`);
|
|
131
|
+
}
|
|
80
132
|
// Parse SSE frames. `data:` may be split across TCP chunks, so text is
|
|
81
133
|
// buffered until a blank line terminates the frame.
|
|
82
134
|
const reader = res.body.getReader();
|
|
@@ -149,6 +201,9 @@ export function startAgentEventStream(options) {
|
|
|
149
201
|
return;
|
|
150
202
|
// Abort settles the pending read, which lands in the reconnect path.
|
|
151
203
|
// Reset the backoff: this is a known-cause drop, not a flapping server.
|
|
204
|
+
// The unreachable flag stays as-is: if we were in an outage, the next
|
|
205
|
+
// successful connect clears it and fires onRecovered; if this abort fails
|
|
206
|
+
// too, scheduleRetry keeps counting from 0 without re-notifying yet.
|
|
152
207
|
attempt = 0;
|
|
153
208
|
controller?.abort();
|
|
154
209
|
},
|
|
@@ -174,8 +229,16 @@ export function handleFrame(frame, options) {
|
|
|
174
229
|
// when the question appeared. So prompts are routed before the created-only
|
|
175
230
|
// filter below, or every answer would be dropped.
|
|
176
231
|
if (envelope.c?.endsWith(":prompts")) {
|
|
177
|
-
|
|
178
|
-
|
|
232
|
+
const prompt = envelope.d;
|
|
233
|
+
if (!prompt || typeof prompt.id !== "number")
|
|
234
|
+
return;
|
|
235
|
+
// #127 ordering: replay the answer keys FIRST so they are enqueued into the
|
|
236
|
+
// pane before onPromptState lets the gate flush any queued chat — otherwise a
|
|
237
|
+
// queued message could be typed into the prompt before the answer submits it.
|
|
238
|
+
if (isAnsweredPrompt(prompt))
|
|
239
|
+
void options.onPromptAnswered?.(prompt);
|
|
240
|
+
// Then update the message gate's open/resolved state (every prompt event).
|
|
241
|
+
void options.onPromptState?.(prompt);
|
|
179
242
|
return;
|
|
180
243
|
}
|
|
181
244
|
// Terminal keys: fields are projected inline, so act straight off the event.
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #127: pause pane message delivery while THIS agent has an open prompt.
|
|
3
|
+
*
|
|
4
|
+
* The problem: message delivery and prompt-answer replay share one live terminal
|
|
5
|
+
* surface. If a chat message is typed into the pane while a permission/question
|
|
6
|
+
* prompt is waiting, the text lands in the prompt and can submit an answer nobody
|
|
7
|
+
* chose. Blocking the sender's UI is not enough — another human or agent can send
|
|
8
|
+
* a message that reaches the same pane.
|
|
9
|
+
*
|
|
10
|
+
* The fix, at the delivery layer: when a prompt for this agent is `pending`, hold
|
|
11
|
+
* inbound message deliveries in a bounded queue instead of typing them; when the
|
|
12
|
+
* prompt is `answered`/`cancelled` (incl. agent-cleared/timeout), flush the queue
|
|
13
|
+
* in order. Crucially, a queued message is NOT resolved or marked read until it
|
|
14
|
+
* is actually delivered — so nothing advances the read cursor while it waits, and
|
|
15
|
+
* a restart mid-block leaves it unread and recoverable via `check_messages`.
|
|
16
|
+
*
|
|
17
|
+
* Prompt-answer key replay is deliberately NOT gated — that is the human's
|
|
18
|
+
* deliberate response and must reach the pane. The runtime enqueues those keys
|
|
19
|
+
* before it lets the gate flush, so the answer submits before any queued chat.
|
|
20
|
+
*/
|
|
21
|
+
/** The prompt fields the gate needs off a realtime `:prompts` event. */
|
|
22
|
+
export interface PromptGateEvent {
|
|
23
|
+
id: number;
|
|
24
|
+
/** The agent whose terminal the prompt is on. The gate ignores other agents'
|
|
25
|
+
* prompts — they don't block THIS pane. */
|
|
26
|
+
agent?: number | null;
|
|
27
|
+
/** "pending" opens the block; "answered"/"cancelled" resolve it. */
|
|
28
|
+
status: string;
|
|
29
|
+
}
|
|
30
|
+
export interface PromptGateOptions {
|
|
31
|
+
/** This runtime's agent id — only its own prompts gate its pane. */
|
|
32
|
+
selfAgentId: number;
|
|
33
|
+
/** Actually deliver a message (resolve → notify pane → mark read). Called
|
|
34
|
+
* immediately when unblocked, or per queued item on flush. */
|
|
35
|
+
deliver: (id: number, edited: boolean) => Promise<void>;
|
|
36
|
+
log?: (line: string) => void;
|
|
37
|
+
/** Soft threshold: when the queue first passes this size, log a warning so a
|
|
38
|
+
* stuck-open prompt holding many messages is visible. The queue is NOT capped
|
|
39
|
+
* by dropping — TaskFlow read cursors are high-water per channel (unread is
|
|
40
|
+
* `id > read_cursor`), so dropping a queued id while a later same-channel
|
|
41
|
+
* message flushes + marks read would make the dropped id unrecoverable. Each
|
|
42
|
+
* entry is just an id + flag (tiny), and the queue only lives for the duration
|
|
43
|
+
* of one open prompt, so it is bounded in practice by message volume. */
|
|
44
|
+
warnThreshold?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface PromptGate {
|
|
47
|
+
/** Route one inbound message: deliver now, or queue if a prompt is open. */
|
|
48
|
+
onMessage: (id: number, edited?: boolean) => void | Promise<void>;
|
|
49
|
+
/** Feed every `:prompts` event: opens/resolves the block for this agent. */
|
|
50
|
+
onPromptState: (prompt: PromptGateEvent) => void;
|
|
51
|
+
/** Authoritative reconcile — replace the open-prompt set with the backend's
|
|
52
|
+
* current pending prompts for this agent. Used to hydrate on connect/reconnect
|
|
53
|
+
* so a prompt created (or resolved) while the stream was down is still
|
|
54
|
+
* reflected, closing the gap where realtime `:prompts` events were missed. */
|
|
55
|
+
setOpenPrompts: (promptIds: number[]) => void;
|
|
56
|
+
/** True while at least one of this agent's prompts is open. */
|
|
57
|
+
isBlocked: () => boolean;
|
|
58
|
+
/** How many messages are waiting to be flushed. */
|
|
59
|
+
queueLength: () => number;
|
|
60
|
+
}
|
|
61
|
+
export declare function createPromptGate(options: PromptGateOptions): PromptGate;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #127: pause pane message delivery while THIS agent has an open prompt.
|
|
3
|
+
*
|
|
4
|
+
* The problem: message delivery and prompt-answer replay share one live terminal
|
|
5
|
+
* surface. If a chat message is typed into the pane while a permission/question
|
|
6
|
+
* prompt is waiting, the text lands in the prompt and can submit an answer nobody
|
|
7
|
+
* chose. Blocking the sender's UI is not enough — another human or agent can send
|
|
8
|
+
* a message that reaches the same pane.
|
|
9
|
+
*
|
|
10
|
+
* The fix, at the delivery layer: when a prompt for this agent is `pending`, hold
|
|
11
|
+
* inbound message deliveries in a bounded queue instead of typing them; when the
|
|
12
|
+
* prompt is `answered`/`cancelled` (incl. agent-cleared/timeout), flush the queue
|
|
13
|
+
* in order. Crucially, a queued message is NOT resolved or marked read until it
|
|
14
|
+
* is actually delivered — so nothing advances the read cursor while it waits, and
|
|
15
|
+
* a restart mid-block leaves it unread and recoverable via `check_messages`.
|
|
16
|
+
*
|
|
17
|
+
* Prompt-answer key replay is deliberately NOT gated — that is the human's
|
|
18
|
+
* deliberate response and must reach the pane. The runtime enqueues those keys
|
|
19
|
+
* before it lets the gate flush, so the answer submits before any queued chat.
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_WARN_THRESHOLD = 200;
|
|
22
|
+
export function createPromptGate(options) {
|
|
23
|
+
const log = options.log ?? (() => { });
|
|
24
|
+
const warnThreshold = options.warnThreshold ?? DEFAULT_WARN_THRESHOLD;
|
|
25
|
+
// Open prompt ids for THIS agent. A set, not a boolean: a prompt SET can raise
|
|
26
|
+
// several, and delivery must stay paused until the last one clears.
|
|
27
|
+
const open = new Set();
|
|
28
|
+
const queue = [];
|
|
29
|
+
let flushing = false;
|
|
30
|
+
const flush = async () => {
|
|
31
|
+
// One flush at a time; if a new prompt opens mid-flush the loop stops and the
|
|
32
|
+
// remainder waits for the next resolve.
|
|
33
|
+
if (flushing)
|
|
34
|
+
return;
|
|
35
|
+
flushing = true;
|
|
36
|
+
try {
|
|
37
|
+
while (queue.length > 0 && open.size === 0) {
|
|
38
|
+
const next = queue.shift();
|
|
39
|
+
try {
|
|
40
|
+
await options.deliver(next.id, next.edited);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
log(`prompt-gate: could not deliver queued message ${next.id} (${err.message.split("\n")[0]})`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
flushing = false;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
onMessage: (id, edited = false) => {
|
|
53
|
+
if (open.size === 0)
|
|
54
|
+
return options.deliver(id, edited);
|
|
55
|
+
// Never drop: a dropped id would be lost, because a later same-channel
|
|
56
|
+
// message flushing + marking read advances the high-water cursor past it.
|
|
57
|
+
// Entries are tiny (id + flag) and live only while the prompt is open.
|
|
58
|
+
queue.push({ id, edited });
|
|
59
|
+
if (queue.length === warnThreshold) {
|
|
60
|
+
log(`prompt-gate: ${queue.length}+ messages queued behind an open prompt — will flush when it resolves`);
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
},
|
|
64
|
+
setOpenPrompts: (promptIds) => {
|
|
65
|
+
open.clear();
|
|
66
|
+
for (const promptId of promptIds)
|
|
67
|
+
open.add(promptId);
|
|
68
|
+
if (open.size === 0) {
|
|
69
|
+
void flush();
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
log(`prompt-gate: hydrated ${open.size} open prompt(s) — pausing pane message delivery`);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
onPromptState: (prompt) => {
|
|
76
|
+
// Only THIS agent's prompts block THIS pane.
|
|
77
|
+
if (prompt.agent !== options.selfAgentId)
|
|
78
|
+
return;
|
|
79
|
+
if (prompt.status === "pending") {
|
|
80
|
+
const wasOpen = open.size > 0;
|
|
81
|
+
open.add(prompt.id);
|
|
82
|
+
if (!wasOpen)
|
|
83
|
+
log(`prompt-gate: prompt ${prompt.id} open — pausing pane message delivery`);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// answered / cancelled (incl. agent-cleared or timed-out): resolve it.
|
|
87
|
+
if (open.delete(prompt.id) && open.size === 0) {
|
|
88
|
+
log(`prompt-gate: prompt ${prompt.id} ${prompt.status} — resuming delivery, flushing ${queue.length} queued`);
|
|
89
|
+
void flush();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
isBlocked: () => open.size > 0,
|
|
94
|
+
queueLength: () => queue.length,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=prompt-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-gate.js","sourceRoot":"","sources":["../src/prompt-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
import { formatIncoming, shouldDeliver, startAgentEventStream } from "./events.js";
|
|
19
19
|
import { detectTmuxPane, notifyPane, sendKeySteps, sendKeyToPane, startMirrorLoop, } from "./tmux.js";
|
|
20
20
|
import { createSerialQueue } from "./pane-queue.js";
|
|
21
|
+
import { createPromptGate } from "./prompt-gate.js";
|
|
21
22
|
import { stepsForPrompt } from "./prompts.js";
|
|
22
23
|
import { resolveMessage } from "./resolve.js";
|
|
23
24
|
import { findConfigPath, loadConfigFile, resolveProfileOrAsk, } from "./config.js";
|
|
@@ -70,19 +71,80 @@ export function startAgentRuntime(ctx, log) {
|
|
|
70
71
|
// `check_messages` defaults to unread_only, so advancing the cursor here
|
|
71
72
|
// would drop the message for good (see planning/spec-message-delivery.md) —
|
|
72
73
|
// leaving it unread is what makes `check_messages` still work.
|
|
74
|
+
// #127: created-message deliveries this runtime has already made, so the same
|
|
75
|
+
// id is never typed into the pane twice. The reconnect catch-up (unread REST)
|
|
76
|
+
// and the buffered live `:messages` frame can both target a message posted just
|
|
77
|
+
// after reconnect — `resolveMessage` fetches by id (not `unread=true`), so the
|
|
78
|
+
// catch-up `markRead` does NOT suppress the live frame. Bounded (ids only).
|
|
79
|
+
const deliveredIds = new Set();
|
|
80
|
+
const DELIVERED_CAP = 1000;
|
|
73
81
|
const deliverMessageById = async (id, edited = false) => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
// Reserve the id SYNCHRONOUSLY (before any await) so two concurrent
|
|
83
|
+
// deliveries of the same created message can't both pass the check and type
|
|
84
|
+
// it twice. An edit (edited=true, #107) is an intentional re-delivery and is
|
|
85
|
+
// never deduped.
|
|
86
|
+
if (!edited) {
|
|
87
|
+
if (deliveredIds.has(id))
|
|
88
|
+
return;
|
|
89
|
+
deliveredIds.add(id);
|
|
90
|
+
if (deliveredIds.size > DELIVERED_CAP) {
|
|
91
|
+
// Sets keep insertion order — drop the oldest to stay bounded.
|
|
92
|
+
const oldest = deliveredIds.values().next().value;
|
|
93
|
+
if (oldest !== undefined)
|
|
94
|
+
deliveredIds.delete(oldest);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
let delivered = false;
|
|
98
|
+
try {
|
|
99
|
+
const message = await resolveMessage(messageSourceFor(client), id);
|
|
100
|
+
if (!message)
|
|
101
|
+
return;
|
|
102
|
+
if (!shouldDeliver(message, profile.agentId))
|
|
103
|
+
return;
|
|
104
|
+
if (!pane)
|
|
105
|
+
return;
|
|
106
|
+
await paneQueue(() => notifyPane(formatIncoming(message, message.attachments ?? [], profile.agentId, edited), pane, true));
|
|
107
|
+
// For an edit of an already-read message this is a no-op — the cursor only
|
|
108
|
+
// ever moves forward — which is exactly right: redelivery is a notice, not
|
|
109
|
+
// new unread state.
|
|
110
|
+
await client.markRead(message.channel, message.id);
|
|
111
|
+
delivered = true;
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
// Reserved but not actually delivered (no pane, unresolved, or an error):
|
|
115
|
+
// release the id so a later attempt (catch-up/retry) can still deliver it.
|
|
116
|
+
// A skipped own-message (shouldDeliver=false) is released too — harmless,
|
|
117
|
+
// it never writes to the pane.
|
|
118
|
+
if (!edited && !delivered)
|
|
119
|
+
deliveredIds.delete(id);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
// #127: gate pane delivery on this agent's open prompts. While a prompt is
|
|
123
|
+
// pending, gate.onMessage queues instead of calling deliverMessageById, so no
|
|
124
|
+
// chat text is typed into the prompt and nothing marks the message read; on
|
|
125
|
+
// answer/cancel it flushes in order. Prompt-answer key replay is NOT gated (it
|
|
126
|
+
// is the human's deliberate response) and is enqueued into the pane BEFORE the
|
|
127
|
+
// gate flushes — see handleFrame's ordering in events.ts.
|
|
128
|
+
const promptGate = createPromptGate({
|
|
129
|
+
selfAgentId: profile.agentId,
|
|
130
|
+
deliver: deliverMessageById,
|
|
131
|
+
log,
|
|
132
|
+
});
|
|
133
|
+
// #127: hydrate the gate's open-prompt state from an authoritative read.
|
|
134
|
+
// Realtime `:prompts` events are at-most-once and never replayed, so a prompt
|
|
135
|
+
// raised while the stream was down — or one already pending when this process
|
|
136
|
+
// (re)starts — would be invisible to the gate and let catch-up type chat into
|
|
137
|
+
// the open prompt. Reconciling against the backend's current pending set before
|
|
138
|
+
// catch-up delivery closes that gap (and resumes if it resolved during an
|
|
139
|
+
// outage). Best-effort: a failed read must not wedge startup.
|
|
140
|
+
const hydrateOpenPrompts = async () => {
|
|
141
|
+
try {
|
|
142
|
+
const prompts = await client.listOpenPrompts();
|
|
143
|
+
promptGate.setOpenPrompts(prompts.map((p) => p.id));
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
log(`could not hydrate open prompts (${err.message.split("\n")[0]})`);
|
|
147
|
+
}
|
|
86
148
|
};
|
|
87
149
|
// On RE-connect, deliver anything that arrived while the stream was down.
|
|
88
150
|
// The live push is at-most-once and never redelivers, so a message sent
|
|
@@ -113,7 +175,9 @@ export function startAgentRuntime(ctx, log) {
|
|
|
113
175
|
}
|
|
114
176
|
for (const id of ids) {
|
|
115
177
|
try {
|
|
116
|
-
|
|
178
|
+
// Through the gate: if a prompt is open, these queue too (and stay
|
|
179
|
+
// unread) rather than typing into the prompt.
|
|
180
|
+
await promptGate.onMessage(id);
|
|
117
181
|
}
|
|
118
182
|
catch (err) {
|
|
119
183
|
log(`catch-up could not deliver ${id} (${err.message.split("\n")[0]})`);
|
|
@@ -132,8 +196,33 @@ export function startAgentRuntime(ctx, log) {
|
|
|
132
196
|
server: profile.server,
|
|
133
197
|
key: profile.key,
|
|
134
198
|
log,
|
|
135
|
-
//
|
|
136
|
-
|
|
199
|
+
// #127 barrier (awaited before any frame is parsed — see events.ts): hydrate
|
|
200
|
+
// this agent's open-prompt state first, so a live message or catch-up can't be
|
|
201
|
+
// typed into an already-open prompt; then, on a reconnect only, deliver what
|
|
202
|
+
// was missed while the stream was down.
|
|
203
|
+
onConnected: async (isReconnect) => {
|
|
204
|
+
await hydrateOpenPrompts();
|
|
205
|
+
if (isReconnect)
|
|
206
|
+
await catchUpUnread();
|
|
207
|
+
},
|
|
208
|
+
// The stream has failed to reconnect for a sustained stretch — tell the
|
|
209
|
+
// agent its live feed is paused so it does not sit waiting on a dead stream.
|
|
210
|
+
// Typed through the same serial queue as messages so it cannot interleave
|
|
211
|
+
// with a delivery. Without a pane there is nowhere to type it.
|
|
212
|
+
onUnreachable: async (failures) => {
|
|
213
|
+
if (!pane)
|
|
214
|
+
return;
|
|
215
|
+
await paneQueue(() => notifyPane(`[taskflow] ⚠️ TaskFlow server unreachable — ${failures} reconnect attempts failed. ` +
|
|
216
|
+
`Live message delivery is paused; I'll keep retrying and catch up automatically when it returns. ` +
|
|
217
|
+
`If this persists, check the backend/connection.`, pane, true));
|
|
218
|
+
},
|
|
219
|
+
// Back after an outage the agent was told about: say so, so it knows live
|
|
220
|
+
// delivery has resumed (catchUpUnread has already replayed anything missed).
|
|
221
|
+
onRecovered: async () => {
|
|
222
|
+
if (!pane)
|
|
223
|
+
return;
|
|
224
|
+
await paneQueue(() => notifyPane(`[taskflow] ✅ Reconnected to TaskFlow — live message delivery resumed.`, pane, true));
|
|
225
|
+
},
|
|
137
226
|
// A human answered a question the agent is blocked on: press the keys.
|
|
138
227
|
onPromptAnswered: async (prompt) => {
|
|
139
228
|
// No pane, no keyboard to replay the answer on.
|
|
@@ -169,12 +258,16 @@ export function startAgentRuntime(ctx, log) {
|
|
|
169
258
|
// an edit (#107), delivered with an EDITED framing so the agent
|
|
170
259
|
// continues from the revised content rather than treating it as new.
|
|
171
260
|
try {
|
|
172
|
-
|
|
261
|
+
// #127: through the gate — queued (not typed) while a prompt is open.
|
|
262
|
+
await promptGate.onMessage(event.id, action === "updated");
|
|
173
263
|
}
|
|
174
264
|
catch (err) {
|
|
175
265
|
log(`could not deliver message ${event.id} (${err.message.split("\n")[0]})`);
|
|
176
266
|
}
|
|
177
267
|
},
|
|
268
|
+
// #127: track this agent's prompt open/resolved state so message delivery is
|
|
269
|
+
// paused while a prompt waits and flushed once it is answered/cancelled.
|
|
270
|
+
onPromptState: (prompt) => promptGate.onPromptState(prompt),
|
|
178
271
|
// A human pressed a key in the dashboard terminal. The event is broadcast
|
|
179
272
|
// to the whole project, so act only on keys addressed to THIS agent's
|
|
180
273
|
// pane; send-keys types it as a key NAME (not the literal word).
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EACL,cAAc,EACd,UAAU,EACV,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAA4C,MAAM,cAAc,CAAC;AACxF,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAyB,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC;AAEzF;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,MAAsB;IAC9C,OAAO;QACL,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE;QACzC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CACvB,MAAM,CAAC,YAAY,CAAC,MAAM,CAA6C;KAC1E,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAqB,EACrB,GAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IAC/C,IAAI,IAAI;QAAE,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IAE7C,sEAAsE;IACtE,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IAEtC,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,kDAAkD;IAClD,EAAE;IACF,8EAA8E;IAC9E,mEAAmE;IACnE,yEAAyE;IACzE,4EAA4E;IAC5E,+DAA+D;IAC/D,8EAA8E;IAC9E,8EAA8E;IAC9E,gFAAgF;IAChF,+EAA+E;IAC/E,4EAA4E;IAC5E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC;IAE3B,MAAM,kBAAkB,GAAG,KAAK,EAAE,EAAU,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE;QAC9D,oEAAoE;QACpE,4EAA4E;QAC5E,6EAA6E;QAC7E,iBAAiB;QACjB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO;YACjC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,YAAY,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;gBACtC,+DAA+D;gBAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBAClD,IAAI,MAAM,KAAK,SAAS;oBAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;gBAAE,OAAO;YACrD,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,MAAM,SAAS,CAAC,GAAG,EAAE,CACnB,UAAU,CACR,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EAC3E,IAAI,EACJ,IAAI,CACL,CACF,CAAC;YACF,2EAA2E;YAC3E,2EAA2E;YAC3E,oBAAoB;YACpB,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YACnD,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,0EAA0E;YAC1E,2EAA2E;YAC3E,0EAA0E;YAC1E,+BAA+B;YAC/B,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS;gBAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC;IAEF,2EAA2E;IAC3E,8EAA8E;IAC9E,4EAA4E;IAC5E,+EAA+E;IAC/E,+EAA+E;IAC/E,0DAA0D;IAC1D,MAAM,UAAU,GAAG,gBAAgB,CAAC;QAClC,WAAW,EAAE,OAAO,CAAC,OAAO;QAC5B,OAAO,EAAE,kBAAkB;QAC3B,GAAG;KACJ,CAAC,CAAC;IAEH,yEAAyE;IACzE,8EAA8E;IAC9E,8EAA8E;IAC9E,8EAA8E;IAC9E,gFAAgF;IAChF,0EAA0E;IAC1E,8DAA8D;IAC9D,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;YAC/C,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,mCAAoC,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnF,CAAC;IACH,CAAC,CAAC;IAEF,0EAA0E;IAC1E,wEAAwE;IACxE,sEAAsE;IACtE,uEAAuE;IACvE,2EAA2E;IAC3E,yCAAyC;IACzC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,uEAAuE;QACvE,uEAAuE;QACvE,qEAAqE;QACrE,eAAe;QACf,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAkC,EAAE,CAAC;oBAC1D,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;wBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,wBAAwB,GAAG,CAAC,MAAM,oBAAoB,CAAC,CAAC;YAC9D,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,mEAAmE;oBACnE,8CAA8C;oBAC9C,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,8BAA8B,EAAE,KAAM,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,8BAA+B,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,CAAC;IAEF,uEAAuE;IACvE,0EAA0E;IAC1E,0EAA0E;IAC1E,8BAA8B;IAC9B,MAAM,MAAM,GAAG,qBAAqB,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG;QACH,6EAA6E;QAC7E,+EAA+E;QAC/E,6EAA6E;QAC7E,wCAAwC;QACxC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YACjC,MAAM,kBAAkB,EAAE,CAAC;YAC3B,IAAI,WAAW;gBAAE,MAAM,aAAa,EAAE,CAAC;QACzC,CAAC;QACD,wEAAwE;QACxE,6EAA6E;QAC7E,0EAA0E;QAC1E,+DAA+D;QAC/D,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YAChC,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,MAAM,SAAS,CAAC,GAAG,EAAE,CACnB,UAAU,CACR,+CAA+C,QAAQ,8BAA8B;gBACnF,kGAAkG;gBAClG,iDAAiD,EACnD,IAAI,EACJ,IAAI,CACL,CACF,CAAC;QACJ,CAAC;QACD,0EAA0E;QAC1E,6EAA6E;QAC7E,WAAW,EAAE,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,MAAM,SAAS,CAAC,GAAG,EAAE,CACnB,UAAU,CAAC,uEAAuE,EAAE,IAAI,EAAE,IAAI,CAAC,CAChG,CAAC;QACJ,CAAC;QACD,uEAAuE;QACvE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACjC,gDAAgD;YAChD,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,oEAAoE;YACpE,qEAAqE;YACrE,gEAAgE;YAChE,8DAA8D;YAC9D,qEAAqE;YACrE,MAAM,KAAK,GAAG,cAAc,CAC1B,MAAM,CAAC,YAAY,IAAI,EAAE,EACzB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,gBAAgB,IAAI,IAAI,EAC/B,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CACpD,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO;YAC1B,IAAI,CAAC;gBACH,4DAA4D;gBAC5D,4DAA4D;gBAC5D,qEAAqE;gBACrE,wDAAwD;gBACxD,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;gBACjD,GAAG,CAAC,mBAAmB,MAAM,CAAC,EAAE,SAAS,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;YACnE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CACD,2BAA2B,MAAM,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAClF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACjC,qEAAqE;YACrE,iEAAiE;YACjE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,sEAAsE;YACtE,gEAAgE;YAChE,qEAAqE;YACrE,IAAI,CAAC;gBACH,sEAAsE;gBACtE,MAAM,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,6BAA6B,KAAK,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QACD,6EAA6E;QAC7E,yEAAyE;QACzE,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC;QAC3D,0EAA0E;QAC1E,sEAAsE;QACtE,iEAAiE;QACjE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7B,uCAAuC;YACvC,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO;gBAAE,OAAO;YAC5C,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;gBACvD,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,YAAY,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,uBAAuB,KAAK,CAAC,IAAI,MAAO,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,uDAAuD;IACvD,IAAI,UAAU,GAAwB,IAAI,CAAC;IAC3C,IAAI,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;QAClD,UAAU,GAAG,eAAe,CAAC;YAC3B,MAAM;YACN,OAAO;YACP,MAAM,EAAE,IAAI;YACZ,GAAG;YACH,2EAA2E;YAC3E,uEAAuE;YACvE,gEAAgE;YAChE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,IAAI,0CAA0C,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACjE,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,4EAA4E;QAC5E,wEAAwE;QACxE,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,YAAY,CAAC;YACX,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,6CAA6C;YACpF,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,GAAG,EAAE;QACV,0EAA0E;QAC1E,qEAAqE;QACrE,IAAI,OAAO;YAAE,OAAO;QACpB,OAAO,GAAG,IAAI,CAAC;QACf,yEAAyE;QACzE,sEAAsE;QACtE,qEAAqE;QACrE,kEAAkE;QAClE,UAAU,EAAE,EAAE,CAAC;QACf,UAAU,GAAG,IAAI,CAAC;QAClB,MAAM,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAmC,EAAE;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzF,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,eAAe,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,sBAAsB,KAAK,+BAA+B,CAAC,CAAC;QACzG,SAAS,CAAC,wBAAwB,KAAK,4DAA4D,CAAC,CAAC;QACrG,OAAO;IACT,CAAC;IACD,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,6EAA6E;AAC7E,IAAI,OAAO,GAA4B,IAAI,CAAC;AAC5C,uEAAuE;AACvE,IAAI,cAAc,GAAwB,IAAI,CAAC;AAC/C;;;;;;;;;GASG;AACH,IAAI,YAAgC,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,OAAwB,EAAE,IAAmB;IACrE,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,wEAAwE;IACxE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChB,cAAc,EAAE,EAAE,CAAC;IACnB,cAAc,GAAG,IAAI,CAAC;IAEtB,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,YAAY,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,eAAe,CAAC;QACxB,OAAO;QACP,IAAI;QACJ,GAAG,EAAE,SAAS;QACd,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YACjB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACnD,yEAAyE;YACzE,kCAAkC;YAClC,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;gBAC3B,QAAQ,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YACD,cAAc,GAAG,QAAQ,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAwB;IAC1D,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACtD,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAClF,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dalmasonto/taskflow-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "TaskFlow MCP server + Claude Code hooks — multi-agent task board, realtime chat, reviews, terminal streaming, and activity logging for AI coding agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|