autodev-cli 1.4.208 → 1.4.210
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/out/commands/connect.js +5 -1
- package/out/commands/connect.js.map +1 -1
- package/out/commands/mcpOperate.js +9 -0
- package/out/commands/mcpOperate.js.map +1 -1
- package/out/connect.d.ts +18 -0
- package/out/connect.js +116 -0
- package/out/connect.js.map +1 -1
- package/out/taskLoop.js +11 -0
- package/out/taskLoop.js.map +1 -1
- package/out/todo.d.ts +10 -0
- package/out/todo.js +19 -0
- package/out/todo.js.map +1 -1
- package/out/todoTaskVerifier.d.ts +52 -0
- package/out/todoTaskVerifier.js +151 -0
- package/out/todoTaskVerifier.js.map +1 -0
- package/out/todoWriteManager.d.ts +8 -0
- package/out/todoWriteManager.js +10 -0
- package/out/todoWriteManager.js.map +1 -1
- package/out/webSocketPoller.d.ts +7 -0
- package/out/webSocketPoller.js +75 -9
- package/out/webSocketPoller.js.map +1 -1
- package/package.json +2 -2
package/out/todo.d.ts
CHANGED
|
@@ -29,6 +29,16 @@ export declare function resetAllInProgress(filePath: string): void;
|
|
|
29
29
|
export declare function markDone(filePath: string, task: Task): void;
|
|
30
30
|
/** Append a new task line to the ## Todo section (at the bottom, before the next heading). */
|
|
31
31
|
export declare function appendTask(filePath: string, text: string, id?: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Idempotent-by-id append. If a task line carrying `id` already exists in the
|
|
34
|
+
* file (in ANY section — Todo / In Progress / Done), this is a no-op and returns
|
|
35
|
+
* the id unchanged; otherwise it appends like {@link appendTask}. This is the
|
|
36
|
+
* guard the WS verify-poller relies on: re-appending a clobbered task must never
|
|
37
|
+
* produce a duplicate line, even if a concurrent write re-added it first (the
|
|
38
|
+
* read + append run inside the per-file serialisation queue — see
|
|
39
|
+
* TodoWriteManager.appendIfAbsent).
|
|
40
|
+
*/
|
|
41
|
+
export declare function appendTaskIfAbsent(filePath: string, text: string, id: string): string;
|
|
32
42
|
/**
|
|
33
43
|
* Move all completed `[x]` lines from `todoPath` into
|
|
34
44
|
* `<workspaceRoot>/DONE.md`, grouped under a dated heading.
|
package/out/todo.js
CHANGED
|
@@ -43,6 +43,7 @@ exports.resetToTodo = resetToTodo;
|
|
|
43
43
|
exports.resetAllInProgress = resetAllInProgress;
|
|
44
44
|
exports.markDone = markDone;
|
|
45
45
|
exports.appendTask = appendTask;
|
|
46
|
+
exports.appendTaskIfAbsent = appendTaskIfAbsent;
|
|
46
47
|
exports.pruneTodoToArchive = pruneTodoToArchive;
|
|
47
48
|
const fs = __importStar(require("fs"));
|
|
48
49
|
const path = __importStar(require("path"));
|
|
@@ -280,6 +281,24 @@ function appendTask(filePath, text, id) {
|
|
|
280
281
|
fs.writeFileSync(filePath, content, 'utf8');
|
|
281
282
|
return taskId;
|
|
282
283
|
}
|
|
284
|
+
/**
|
|
285
|
+
* Idempotent-by-id append. If a task line carrying `id` already exists in the
|
|
286
|
+
* file (in ANY section — Todo / In Progress / Done), this is a no-op and returns
|
|
287
|
+
* the id unchanged; otherwise it appends like {@link appendTask}. This is the
|
|
288
|
+
* guard the WS verify-poller relies on: re-appending a clobbered task must never
|
|
289
|
+
* produce a duplicate line, even if a concurrent write re-added it first (the
|
|
290
|
+
* read + append run inside the per-file serialisation queue — see
|
|
291
|
+
* TodoWriteManager.appendIfAbsent).
|
|
292
|
+
*/
|
|
293
|
+
function appendTaskIfAbsent(filePath, text, id) {
|
|
294
|
+
if (fs.existsSync(filePath)) {
|
|
295
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
296
|
+
if (parseTodoContent(content).some(t => t.id === id)) {
|
|
297
|
+
return id;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return appendTask(filePath, text, id);
|
|
301
|
+
}
|
|
283
302
|
function escapeRegex(s) {
|
|
284
303
|
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
285
304
|
}
|
package/out/todo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todo.js","sourceRoot":"","sources":["../src/todo.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"todo.js","sourceRoot":"","sources":["../src/todo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface TodoState {
|
|
2
|
+
/** Ids present in TODO.md as an open task ([ ] todo or [~] in-progress). */
|
|
3
|
+
present: Set<string>;
|
|
4
|
+
/** Ids present in TODO.md as a completed task ([x] done). */
|
|
5
|
+
done: Set<string>;
|
|
6
|
+
}
|
|
7
|
+
export interface TodoTaskVerifierOptions {
|
|
8
|
+
/** Poll interval. Default 10s ("poll every 10s until written, then stop"). */
|
|
9
|
+
intervalMs?: number;
|
|
10
|
+
/** Consecutive present ticks required before a task is considered durable. */
|
|
11
|
+
confirmTicks?: number;
|
|
12
|
+
/** Read the current TODO.md task ids, split by status. Must not throw fatally. */
|
|
13
|
+
readState: () => TodoState;
|
|
14
|
+
/** Idempotent-by-id (re-)append of a clobbered/missing task. */
|
|
15
|
+
appendIfAbsent: (id: string, payload: string) => Promise<void>;
|
|
16
|
+
/** Send the deferred task_ack once the task is confirmed durably present. */
|
|
17
|
+
sendAck: (dbTaskId: string) => void;
|
|
18
|
+
/** Fired after a re-append so callers can nudge the loop (optional). */
|
|
19
|
+
onReappended?: () => void;
|
|
20
|
+
log?: (msg: string) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare class TodoTaskVerifier {
|
|
23
|
+
private readonly _opts;
|
|
24
|
+
private readonly _tasks;
|
|
25
|
+
private _timer;
|
|
26
|
+
private readonly _intervalMs;
|
|
27
|
+
private readonly _confirmTicks;
|
|
28
|
+
constructor(_opts: TodoTaskVerifierOptions);
|
|
29
|
+
/** Is this task id currently being tracked (not yet confirmed durable)? */
|
|
30
|
+
has(id: string): boolean;
|
|
31
|
+
/** Number of tasks awaiting durable confirmation. */
|
|
32
|
+
get size(): number;
|
|
33
|
+
/**
|
|
34
|
+
* Register a delivered task for verification. Idempotent by id — re-tracking
|
|
35
|
+
* the same id (e.g. the office re-pushed the same DB task under a new delivery
|
|
36
|
+
* id) refreshes the payload/dbTaskId without resetting its progress. Starts
|
|
37
|
+
* the poller if it was idle.
|
|
38
|
+
*/
|
|
39
|
+
track(id: string, payload: string, dbTaskId?: string): void;
|
|
40
|
+
/** Stop tracking a task (e.g. it was cancelled/removed upstream). */
|
|
41
|
+
forget(id: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* One verification pass. Public so tests can drive it deterministically; the
|
|
44
|
+
* timer simply calls it on an interval.
|
|
45
|
+
*/
|
|
46
|
+
tick(): void;
|
|
47
|
+
/** Stop the poller and clear all tracked tasks (loop teardown). */
|
|
48
|
+
stop(): void;
|
|
49
|
+
private _ensureTimer;
|
|
50
|
+
private _stopTimer;
|
|
51
|
+
private _log;
|
|
52
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// TodoTaskVerifier — verify-and-re-append backstop for WS-pushed tasks.
|
|
4
|
+
//
|
|
5
|
+
// THE BUG IT FIXES
|
|
6
|
+
// A task pushed over the WS (the `user_message` A2A frame) used to be appended
|
|
7
|
+
// to TODO.md immediately and ACKed (task_ack → the office stamps delivered_at
|
|
8
|
+
// and permanently drops the task from its 45s redelivery sweep) in the same
|
|
9
|
+
// breath. A grok-acp agent, however, REWRITES TODO.md during its own turn
|
|
10
|
+
// (taskLoop.ts clobber — see pendingSteers.ts header), so the just-appended
|
|
11
|
+
// line is wiped: the task was acked-as-delivered, written, overwritten, and
|
|
12
|
+
// never re-pushed. Steers survive this via the durable-steer queue; tasks had
|
|
13
|
+
// no such protection.
|
|
14
|
+
//
|
|
15
|
+
// THE FIX (this module is the backbone)
|
|
16
|
+
// • track(id, payload, dbTaskId) registers a delivered task.
|
|
17
|
+
// • A poller tick (~10s) reads which task ids are currently in TODO.md:
|
|
18
|
+
// – ABSENT → (re-)append it idempotently-by-id (a grok clobber is
|
|
19
|
+
// repaired on the next tick), and reset its confirmation count.
|
|
20
|
+
// – PRESENT → increment a consecutive-present counter; once it has been
|
|
21
|
+
// present for `confirmTicks` ticks in a row the task is
|
|
22
|
+
// DURABLE: send the deferred task_ack and stop tracking it.
|
|
23
|
+
// – DONE → the agent finished it; stop tracking immediately and never
|
|
24
|
+
// re-append (prevents resurrecting a completed/pruned task).
|
|
25
|
+
// • The ack is DEFERRED until durable-present, so the office's 45s sweep stays
|
|
26
|
+
// armed as a backstop: if the CLI dies before the line is durable, the
|
|
27
|
+
// office re-pushes it.
|
|
28
|
+
//
|
|
29
|
+
// Re-append idempotency is guaranteed by the injected appendIfAbsent (the
|
|
30
|
+
// presence check + append run inside TodoWriteManager's per-file queue), so no
|
|
31
|
+
// duplicate line is ever produced even under a concurrent write.
|
|
32
|
+
//
|
|
33
|
+
// This is deliberately a small, side-effect-injected unit (no socket, no fs of
|
|
34
|
+
// its own) so it is directly unit-testable — see test/todoTaskVerifier.smoke.mjs.
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.TodoTaskVerifier = void 0;
|
|
38
|
+
class TodoTaskVerifier {
|
|
39
|
+
_opts;
|
|
40
|
+
_tasks = new Map();
|
|
41
|
+
_timer = null;
|
|
42
|
+
_intervalMs;
|
|
43
|
+
_confirmTicks;
|
|
44
|
+
constructor(_opts) {
|
|
45
|
+
this._opts = _opts;
|
|
46
|
+
this._intervalMs = _opts.intervalMs ?? 10_000;
|
|
47
|
+
this._confirmTicks = Math.max(1, _opts.confirmTicks ?? 2);
|
|
48
|
+
}
|
|
49
|
+
/** Is this task id currently being tracked (not yet confirmed durable)? */
|
|
50
|
+
has(id) { return this._tasks.has(id); }
|
|
51
|
+
/** Number of tasks awaiting durable confirmation. */
|
|
52
|
+
get size() { return this._tasks.size; }
|
|
53
|
+
/**
|
|
54
|
+
* Register a delivered task for verification. Idempotent by id — re-tracking
|
|
55
|
+
* the same id (e.g. the office re-pushed the same DB task under a new delivery
|
|
56
|
+
* id) refreshes the payload/dbTaskId without resetting its progress. Starts
|
|
57
|
+
* the poller if it was idle.
|
|
58
|
+
*/
|
|
59
|
+
track(id, payload, dbTaskId) {
|
|
60
|
+
const existing = this._tasks.get(id);
|
|
61
|
+
if (existing) {
|
|
62
|
+
existing.payload = payload;
|
|
63
|
+
if (dbTaskId) {
|
|
64
|
+
existing.dbTaskId = dbTaskId;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this._tasks.set(id, { id, payload, dbTaskId, presentTicks: 0 });
|
|
69
|
+
}
|
|
70
|
+
this._ensureTimer();
|
|
71
|
+
}
|
|
72
|
+
/** Stop tracking a task (e.g. it was cancelled/removed upstream). */
|
|
73
|
+
forget(id) {
|
|
74
|
+
this._tasks.delete(id);
|
|
75
|
+
if (this._tasks.size === 0) {
|
|
76
|
+
this._stopTimer();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* One verification pass. Public so tests can drive it deterministically; the
|
|
81
|
+
* timer simply calls it on an interval.
|
|
82
|
+
*/
|
|
83
|
+
tick() {
|
|
84
|
+
if (this._tasks.size === 0) {
|
|
85
|
+
this._stopTimer();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
let state;
|
|
89
|
+
try {
|
|
90
|
+
state = this._opts.readState();
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
this._log(`todo verify: read failed, retrying next tick: ${err}`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
for (const [id, task] of [...this._tasks]) {
|
|
97
|
+
if (state.done.has(id)) {
|
|
98
|
+
// The agent completed it. The office no longer needs our redelivery
|
|
99
|
+
// backstop; ack so it un-fades, then stop tracking (never re-append).
|
|
100
|
+
if (task.dbTaskId) {
|
|
101
|
+
this._opts.sendAck(task.dbTaskId);
|
|
102
|
+
}
|
|
103
|
+
this._tasks.delete(id);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (state.present.has(id)) {
|
|
107
|
+
task.presentTicks++;
|
|
108
|
+
if (task.presentTicks >= this._confirmTicks) {
|
|
109
|
+
// Durably present → NOW send the deferred ack and stop polling it.
|
|
110
|
+
if (task.dbTaskId) {
|
|
111
|
+
this._opts.sendAck(task.dbTaskId);
|
|
112
|
+
}
|
|
113
|
+
this._tasks.delete(id);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Clobbered (or never landed) → repair idempotently and restart the
|
|
118
|
+
// confirmation count. appendIfAbsent guarantees no duplicate line.
|
|
119
|
+
task.presentTicks = 0;
|
|
120
|
+
void this._opts.appendIfAbsent(id, task.payload)
|
|
121
|
+
.then(() => { this._opts.onReappended?.(); })
|
|
122
|
+
.catch(err => this._log(`todo verify: re-append of ${id} failed: ${err}`));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (this._tasks.size === 0) {
|
|
126
|
+
this._stopTimer();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** Stop the poller and clear all tracked tasks (loop teardown). */
|
|
130
|
+
stop() {
|
|
131
|
+
this._stopTimer();
|
|
132
|
+
this._tasks.clear();
|
|
133
|
+
}
|
|
134
|
+
_ensureTimer() {
|
|
135
|
+
if (this._timer || this._tasks.size === 0) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
this._timer = setInterval(() => this.tick(), this._intervalMs);
|
|
139
|
+
// Don't keep the process alive just for this verification timer.
|
|
140
|
+
this._timer.unref?.();
|
|
141
|
+
}
|
|
142
|
+
_stopTimer() {
|
|
143
|
+
if (this._timer) {
|
|
144
|
+
clearInterval(this._timer);
|
|
145
|
+
this._timer = null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
_log(msg) { this._opts.log?.(msg); }
|
|
149
|
+
}
|
|
150
|
+
exports.TodoTaskVerifier = TodoTaskVerifier;
|
|
151
|
+
//# sourceMappingURL=todoTaskVerifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoTaskVerifier.js","sourceRoot":"","sources":["../src/todoTaskVerifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,14 @@ declare class TodoWriteManager {
|
|
|
14
14
|
private _enqueue;
|
|
15
15
|
/** Append a new task to the Todo section and return its generated task ID. */
|
|
16
16
|
append(filePath: string, text: string, id?: string): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Idempotent-by-id append: append the task only if no line with this id is
|
|
19
|
+
* already present in the file. The presence check + append run as a SINGLE
|
|
20
|
+
* enqueued op, so two concurrent callers (the WS immediate write and the
|
|
21
|
+
* verify-poller re-append) can never both write the same id — exactly one
|
|
22
|
+
* line is ever produced. Returns the id.
|
|
23
|
+
*/
|
|
24
|
+
appendIfAbsent(filePath: string, text: string, id: string): Promise<string>;
|
|
17
25
|
/** Reset a single [~] in-progress task back to [ ]. */
|
|
18
26
|
resetToTodo(filePath: string, task: Task): Promise<void>;
|
|
19
27
|
/** Reset ALL [~] in-progress tasks back to [ ]. */
|
package/out/todoWriteManager.js
CHANGED
|
@@ -26,6 +26,16 @@ class TodoWriteManager {
|
|
|
26
26
|
append(filePath, text, id) {
|
|
27
27
|
return this._enqueue(filePath, () => (0, todo_1.appendTask)(filePath, text, id));
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Idempotent-by-id append: append the task only if no line with this id is
|
|
31
|
+
* already present in the file. The presence check + append run as a SINGLE
|
|
32
|
+
* enqueued op, so two concurrent callers (the WS immediate write and the
|
|
33
|
+
* verify-poller re-append) can never both write the same id — exactly one
|
|
34
|
+
* line is ever produced. Returns the id.
|
|
35
|
+
*/
|
|
36
|
+
appendIfAbsent(filePath, text, id) {
|
|
37
|
+
return this._enqueue(filePath, () => (0, todo_1.appendTaskIfAbsent)(filePath, text, id));
|
|
38
|
+
}
|
|
29
39
|
/** Reset a single [~] in-progress task back to [ ]. */
|
|
30
40
|
resetToTodo(filePath, task) {
|
|
31
41
|
return this._enqueue(filePath, () => (0, todo_1.resetToTodo)(filePath, task));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todoWriteManager.js","sourceRoot":"","sources":["../src/todoWriteManager.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"todoWriteManager.js","sourceRoot":"","sources":["../src/todoWriteManager.ts"],"names":[],"mappings":";;;AAAA,iCAAyH;AAEzH;;;;;;;;;GASG;AACH,MAAM,gBAAgB;IACD,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEtD,QAAQ,CAAI,QAAgB,EAAE,EAAW;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5D,0EAA0E;QAC1E,MAAM,MAAM,GAAgB,IAAsB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAChF,6EAA6E;QAC7E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,8EAA8E;IAC9E,MAAM,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAW;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,iBAAU,EAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAU;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,yBAAkB,EAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,uDAAuD;IACvD,WAAW,CAAC,QAAgB,EAAE,IAAU;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,kBAAW,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,mDAAmD;IACnD,kBAAkB,CAAC,QAAgB;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,yBAAkB,EAAC,QAAQ,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,0CAA0C;IAC1C,QAAQ,CAAC,QAAgB,EAAE,IAAU;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,eAAQ,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED;8EAC0E;IAC1E,cAAc,CAAC,QAAgB,EAAE,IAAU;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAA,qBAAc,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;CACJ;AAED,8FAA8F;AACjF,QAAA,UAAU,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
|
package/out/webSocketPoller.d.ts
CHANGED
|
@@ -33,6 +33,7 @@ export declare class WebSocketPoller {
|
|
|
33
33
|
private _seenOrder;
|
|
34
34
|
private _seenDeliveriesFile;
|
|
35
35
|
private static readonly MAX_SEEN_DELIVERIES;
|
|
36
|
+
private _todoVerifier;
|
|
36
37
|
private static readonly PING_INTERVAL_MS;
|
|
37
38
|
private static readonly PONG_GRACE_MS;
|
|
38
39
|
private _pingTimer;
|
|
@@ -78,6 +79,12 @@ export declare class WebSocketPoller {
|
|
|
78
79
|
private _loadSeenDeliveries;
|
|
79
80
|
/** Record a delivery id as processed (in-memory + persisted, bounded FIFO). */
|
|
80
81
|
private _markSeenDelivery;
|
|
82
|
+
/**
|
|
83
|
+
* Lazily build the verify-and-re-append poller (needs `_todoPath`, set in
|
|
84
|
+
* start()). Wires the TODO.md read, the idempotent re-append, and the deferred
|
|
85
|
+
* ack to this poller's real implementations.
|
|
86
|
+
*/
|
|
87
|
+
private _verifier;
|
|
81
88
|
/** Tear down the connection permanently. */
|
|
82
89
|
destroy(): void;
|
|
83
90
|
/**
|
package/out/webSocketPoller.js
CHANGED
|
@@ -44,10 +44,12 @@ const manager_2 = require("./rdp/manager");
|
|
|
44
44
|
const messageBuilder_1 = require("./messageBuilder");
|
|
45
45
|
const todo_1 = require("./todo");
|
|
46
46
|
const todoWriteManager_1 = require("./todoWriteManager");
|
|
47
|
+
const todoTaskVerifier_1 = require("./todoTaskVerifier");
|
|
47
48
|
const commands_1 = require("./core/commands");
|
|
48
49
|
const fileBrowser_1 = require("./fileBrowser");
|
|
49
50
|
const gitRequest_1 = require("./git/gitRequest");
|
|
50
51
|
const wsHandshake_1 = require("./wsHandshake");
|
|
52
|
+
const connect_1 = require("./connect");
|
|
51
53
|
// ---------------------------------------------------------------------------
|
|
52
54
|
// WebSocketPoller — persistent WS connection for ws:// / wss:// endpoints
|
|
53
55
|
// ---------------------------------------------------------------------------
|
|
@@ -93,6 +95,11 @@ class WebSocketPoller {
|
|
|
93
95
|
_seenOrder = [];
|
|
94
96
|
_seenDeliveriesFile = null;
|
|
95
97
|
static MAX_SEEN_DELIVERIES = 2000;
|
|
98
|
+
// Verify-and-re-append backstop for pushed tasks. A delivered task is tracked
|
|
99
|
+
// here until its line is DURABLY present in TODO.md; a grok-acp turn that
|
|
100
|
+
// clobbers TODO.md is repaired on the next tick, and the task_ack is deferred
|
|
101
|
+
// until the line is confirmed present (so the office's 45s sweep stays armed).
|
|
102
|
+
_todoVerifier = null;
|
|
96
103
|
// Heartbeat: send a WS Ping every 25 s and expect a Pong. If 2 pings in a
|
|
97
104
|
// row come back without a pong (≈55 s), force-reconnect. Without this the
|
|
98
105
|
// server's 10-min stale-connection sweep silently drops idle agents and the
|
|
@@ -215,10 +222,38 @@ class WebSocketPoller {
|
|
|
215
222
|
}
|
|
216
223
|
catch { /* best-effort persistence */ }
|
|
217
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Lazily build the verify-and-re-append poller (needs `_todoPath`, set in
|
|
227
|
+
* start()). Wires the TODO.md read, the idempotent re-append, and the deferred
|
|
228
|
+
* ack to this poller's real implementations.
|
|
229
|
+
*/
|
|
230
|
+
_verifier() {
|
|
231
|
+
if (!this._todoVerifier) {
|
|
232
|
+
this._todoVerifier = new todoTaskVerifier_1.TodoTaskVerifier({
|
|
233
|
+
readState: () => {
|
|
234
|
+
const present = new Set();
|
|
235
|
+
const done = new Set();
|
|
236
|
+
for (const t of (0, todo_1.parseTodo)(this._todoPath)) {
|
|
237
|
+
if (!t.id) {
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
(t.status === 'done' ? done : present).add(t.id);
|
|
241
|
+
}
|
|
242
|
+
return { present, done };
|
|
243
|
+
},
|
|
244
|
+
appendIfAbsent: (id, payload) => todoWriteManager_1.todoWriter.appendIfAbsent(this._todoPath, payload, id).then(() => undefined),
|
|
245
|
+
sendAck: (dbTaskId) => this._sendTaskAck(dbTaskId),
|
|
246
|
+
onReappended: () => this._onTaskAppend?.(),
|
|
247
|
+
log: (m) => this._log(m),
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
return this._todoVerifier;
|
|
251
|
+
}
|
|
218
252
|
/** Tear down the connection permanently. */
|
|
219
253
|
destroy() {
|
|
220
254
|
this._destroyed = true;
|
|
221
255
|
this._stopHeartbeat();
|
|
256
|
+
this._todoVerifier?.stop();
|
|
222
257
|
this._vncManager.stopAll();
|
|
223
258
|
this._rdpManager.stopAll();
|
|
224
259
|
if (this._reconnectTimer) {
|
|
@@ -595,11 +630,17 @@ class WebSocketPoller {
|
|
|
595
630
|
const meta = t['metadata'] ?? {};
|
|
596
631
|
if (taskId && this._seenTaskIds.has(taskId)) {
|
|
597
632
|
this._log(`WS task already processed (id=${taskId}), skipping`);
|
|
598
|
-
// Already queued locally, but the office is still re-delivering it (faded)
|
|
599
|
-
//
|
|
633
|
+
// Already queued locally, but the office is still re-delivering it (faded).
|
|
634
|
+
// If the verify poller is still tracking this task it has DELIBERATELY not
|
|
635
|
+
// acked yet (waiting for the TODO.md line to be durably present past a
|
|
636
|
+
// grok clobber) — do NOT short-circuit that ack here; the poller owns it.
|
|
637
|
+
// Otherwise our earlier ack never landed, so re-ack to stop the sweep.
|
|
600
638
|
// Idempotent server-side; only for real DB tasks (metadata.taskId present).
|
|
601
639
|
if (meta['event'] === 'user_message' && typeof meta['taskId'] === 'string') {
|
|
602
|
-
|
|
640
|
+
const dbId = meta['taskId'];
|
|
641
|
+
if (!this._todoVerifier?.has(dbId)) {
|
|
642
|
+
this._sendTaskAck(dbId);
|
|
643
|
+
}
|
|
603
644
|
}
|
|
604
645
|
return;
|
|
605
646
|
}
|
|
@@ -612,6 +653,28 @@ class WebSocketPoller {
|
|
|
612
653
|
// Delivered live to the running turn (mid-turn injection), NOT appended to
|
|
613
654
|
// TODO. Same A2A task-frame shape as a user_message but event='steer'.
|
|
614
655
|
if (meta['event'] === 'steer' || meta['event'] === 'instant') {
|
|
656
|
+
// Persona push (pixel-office AgentController::assignPersonality live delivery):
|
|
657
|
+
// the frame carries a STRUCTURED persona in metadata.persona alongside the
|
|
658
|
+
// steer text. Write it into SOUL.md DETERMINISTICALLY here instead of trusting
|
|
659
|
+
// the model to self-edit from the steer text (unreliable, esp. grok-acp). The
|
|
660
|
+
// steer text is still delivered below as an immediate same-turn nudge; the SOUL
|
|
661
|
+
// write is the durable layer. The per-turn SOUL content-hash reminder
|
|
662
|
+
// (messageBuilder.soulUpdatedReminder) hashes SOUL.md from disk against
|
|
663
|
+
// .autodev/.soul-seen every turn, so it notices this external write on the next
|
|
664
|
+
// turn and tells the model to re-read it — we deliberately DON'T touch the
|
|
665
|
+
// marker here. applyPersonaToSoul is idempotent (replaces an existing block, a
|
|
666
|
+
// general/empty persona removes it), so there's no double-apply. Fully guarded:
|
|
667
|
+
// a missing/malformed persona or a write failure must never break steer handling.
|
|
668
|
+
if (meta['source'] === 'persona' && meta['persona'] && this._workspaceRoot) {
|
|
669
|
+
try {
|
|
670
|
+
const persona = meta['persona'];
|
|
671
|
+
const wrote = (0, connect_1.applyPersonaToSoul)(this._workspaceRoot, persona);
|
|
672
|
+
this._log(`WS persona push → SOUL.md ${wrote ? 'updated' : 'unchanged'} (${persona?.label ?? persona?.id ?? 'persona'})`);
|
|
673
|
+
}
|
|
674
|
+
catch (err) {
|
|
675
|
+
this._log(`WS persona push failed to write SOUL.md: ${err}`);
|
|
676
|
+
}
|
|
677
|
+
}
|
|
615
678
|
const steerObj = meta['task'];
|
|
616
679
|
let steerText = typeof steerObj?.['text'] === 'string' ? steerObj['text'] : '';
|
|
617
680
|
// A steer can carry the same A2A file parts a user_message does (pasted /
|
|
@@ -749,7 +812,13 @@ class WebSocketPoller {
|
|
|
749
812
|
this._log('WS failed to append task to TODO.md: todoPath is empty');
|
|
750
813
|
return;
|
|
751
814
|
}
|
|
752
|
-
|
|
815
|
+
// Append the task immediately so the loop can pick it up now — but
|
|
816
|
+
// idempotently by id, and WITHOUT acking. A grok-acp turn may clobber this
|
|
817
|
+
// line; the verify poller (registered below) repairs the clobber on its
|
|
818
|
+
// next tick and only sends task_ack once the line is DURABLY present. Until
|
|
819
|
+
// then the office's 45s redelivery sweep stays armed as a backstop, so a
|
|
820
|
+
// CLI crash before the line is durable still gets the task re-pushed.
|
|
821
|
+
todoWriteManager_1.todoWriter.appendIfAbsent(this._todoPath, fullText, wsTaskId)
|
|
753
822
|
.then(() => {
|
|
754
823
|
// At-least-once: only record the delivery as seen AFTER the durable
|
|
755
824
|
// TODO append succeeds. On failure we leave it unseen so the server's
|
|
@@ -757,11 +826,8 @@ class WebSocketPoller {
|
|
|
757
826
|
if (taskId) {
|
|
758
827
|
this._markSeenDelivery(taskId);
|
|
759
828
|
}
|
|
760
|
-
//
|
|
761
|
-
|
|
762
|
-
if (dbTaskId) {
|
|
763
|
-
this._sendTaskAck(dbTaskId);
|
|
764
|
-
}
|
|
829
|
+
// Register for verify-and-re-append. The ack is deferred to the poller.
|
|
830
|
+
this._verifier().track(wsTaskId, fullText, dbTaskId);
|
|
765
831
|
this._onTaskAppend?.();
|
|
766
832
|
})
|
|
767
833
|
.catch(err => { this._log(`WS failed to append task to TODO.md: ${err}`); });
|