@cluesmith/codev 3.3.3 → 3.3.4
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/dashboard-dist/assets/{index-CUIjS_Vb.js → index-DZf6pNPE.js} +2 -2
- package/dashboard-dist/assets/{index-CUIjS_Vb.js.map → index-DZf6pNPE.js.map} +1 -1
- package/dashboard-dist/index.html +1 -1
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +48 -0
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/ide.d.ts +20 -0
- package/dist/agent-farm/commands/ide.d.ts.map +1 -0
- package/dist/agent-farm/commands/ide.js +138 -0
- package/dist/agent-farm/commands/ide.js.map +1 -0
- package/dist/agent-farm/commands/inbox.d.ts.map +1 -1
- package/dist/agent-farm/commands/inbox.js +15 -3
- package/dist/agent-farm/commands/inbox.js.map +1 -1
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +16 -1
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +16 -7
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
- package/dist/agent-farm/commands/tower.d.ts +21 -9
- package/dist/agent-farm/commands/tower.d.ts.map +1 -1
- package/dist/agent-farm/commands/tower.js +90 -30
- package/dist/agent-farm/commands/tower.js.map +1 -1
- package/dist/agent-farm/db/tower-owner.d.ts +168 -0
- package/dist/agent-farm/db/tower-owner.d.ts.map +1 -0
- package/dist/agent-farm/db/tower-owner.js +369 -0
- package/dist/agent-farm/db/tower-owner.js.map +1 -0
- package/dist/agent-farm/db/types.d.ts +30 -5
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/lib/ide-record.d.ts +65 -0
- package/dist/agent-farm/lib/ide-record.d.ts.map +1 -0
- package/dist/agent-farm/lib/ide-record.js +118 -0
- package/dist/agent-farm/lib/ide-record.js.map +1 -0
- package/dist/agent-farm/lib/tunnel-client.d.ts +22 -0
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.js +53 -5
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/gate-profiles.d.ts +23 -2
- package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -1
- package/dist/agent-farm/servers/gate-profiles.js +43 -2
- package/dist/agent-farm/servers/gate-profiles.js.map +1 -1
- package/dist/agent-farm/servers/ide-forward.d.ts +62 -0
- package/dist/agent-farm/servers/ide-forward.d.ts.map +1 -0
- package/dist/agent-farm/servers/ide-forward.js +274 -0
- package/dist/agent-farm/servers/ide-forward.js.map +1 -0
- package/dist/agent-farm/servers/ide-server.d.ts +68 -0
- package/dist/agent-farm/servers/ide-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/ide-server.js +281 -0
- package/dist/agent-farm/servers/ide-server.js.map +1 -0
- package/dist/agent-farm/servers/mailbox-delivery.d.ts +213 -4
- package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -1
- package/dist/agent-farm/servers/mailbox-delivery.js +489 -68
- package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -1
- package/dist/agent-farm/servers/mailbox-wiring.d.ts +18 -4
- package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -1
- package/dist/agent-farm/servers/mailbox-wiring.js +94 -21
- package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -1
- package/dist/agent-farm/servers/message-write.d.ts +138 -11
- package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
- package/dist/agent-farm/servers/message-write.js +144 -35
- package/dist/agent-farm/servers/message-write.js.map +1 -1
- package/dist/agent-farm/servers/overview.d.ts +28 -12
- package/dist/agent-farm/servers/overview.d.ts.map +1 -1
- package/dist/agent-farm/servers/overview.js +130 -79
- package/dist/agent-farm/servers/overview.js.map +1 -1
- package/dist/agent-farm/servers/render-gate.d.ts +53 -0
- package/dist/agent-farm/servers/render-gate.d.ts.map +1 -1
- package/dist/agent-farm/servers/render-gate.js +135 -24
- package/dist/agent-farm/servers/render-gate.js.map +1 -1
- package/dist/agent-farm/servers/session-submit.d.ts +7 -4
- package/dist/agent-farm/servers/session-submit.d.ts.map +1 -1
- package/dist/agent-farm/servers/session-submit.js +7 -4
- package/dist/agent-farm/servers/session-submit.js.map +1 -1
- package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-cron.js +4 -1
- package/dist/agent-farm/servers/tower-cron.js.map +1 -1
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-instances.js +6 -7
- package/dist/agent-farm/servers/tower-instances.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +53 -13
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +64 -7
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +53 -8
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.js +18 -1
- package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
- package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
- package/dist/agent-farm/utils/message-format.js +5 -6
- package/dist/agent-farm/utils/message-format.js.map +1 -1
- package/dist/agent-farm/utils/port.d.ts +22 -0
- package/dist/agent-farm/utils/port.d.ts.map +1 -0
- package/dist/agent-farm/utils/port.js +35 -0
- package/dist/agent-farm/utils/port.js.map +1 -0
- package/dist/agent-farm/utils/server-utils.d.ts +26 -0
- package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
- package/dist/agent-farm/utils/server-utils.js +36 -0
- package/dist/agent-farm/utils/server-utils.js.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +61 -1
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/consult/tree-tripwire.d.ts +177 -0
- package/dist/commands/consult/tree-tripwire.d.ts.map +1 -0
- package/dist/commands/consult/tree-tripwire.js +356 -0
- package/dist/commands/consult/tree-tripwire.js.map +1 -0
- package/dist/commands/doctor.d.ts +69 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +163 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/generate-image.d.ts +5 -0
- package/dist/commands/generate-image.d.ts.map +1 -1
- package/dist/commands/generate-image.js +225 -4
- package/dist/commands/generate-image.js.map +1 -1
- package/dist/lib/agent-env.d.ts +86 -0
- package/dist/lib/agent-env.d.ts.map +1 -0
- package/dist/lib/agent-env.js +126 -0
- package/dist/lib/agent-env.js.map +1 -0
- package/dist/lib/forge-contracts.d.ts +10 -0
- package/dist/lib/forge-contracts.d.ts.map +1 -1
- package/dist/lib/forge-contracts.js.map +1 -1
- package/dist/lib/forge-rate-limit.d.ts +45 -0
- package/dist/lib/forge-rate-limit.d.ts.map +1 -0
- package/dist/lib/forge-rate-limit.js +89 -0
- package/dist/lib/forge-rate-limit.js.map +1 -0
- package/dist/lib/forge.d.ts +28 -0
- package/dist/lib/forge.d.ts.map +1 -1
- package/dist/lib/forge.js +63 -10
- package/dist/lib/forge.js.map +1 -1
- package/dist/lib/github.d.ts +13 -1
- package/dist/lib/github.d.ts.map +1 -1
- package/dist/lib/github.js +58 -15
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/test-env.d.ts +17 -0
- package/dist/lib/test-env.d.ts.map +1 -1
- package/dist/lib/test-env.js +20 -0
- package/dist/lib/test-env.js.map +1 -1
- package/dist/terminal/pty-session.d.ts +122 -4
- package/dist/terminal/pty-session.d.ts.map +1 -1
- package/dist/terminal/pty-session.js +142 -7
- package/dist/terminal/pty-session.js.map +1 -1
- package/dist/terminal/session-manager.d.ts +23 -2
- package/dist/terminal/session-manager.d.ts.map +1 -1
- package/dist/terminal/session-manager.js +115 -36
- package/dist/terminal/session-manager.js.map +1 -1
- package/dist/terminal/session-screen.d.ts +34 -5
- package/dist/terminal/session-screen.d.ts.map +1 -1
- package/dist/terminal/session-screen.js +52 -6
- package/dist/terminal/session-screen.js.map +1 -1
- package/dist/terminal/terminal-replies.d.ts +102 -0
- package/dist/terminal/terminal-replies.d.ts.map +1 -0
- package/dist/terminal/terminal-replies.js +181 -0
- package/dist/terminal/terminal-replies.js.map +1 -0
- package/package.json +4 -4
- package/scripts/forge/github/pr-list.sh +6 -2
- package/scripts/forge/github/pr-search.sh +4 -2
- package/scripts/forge/gitlab/issue-search.sh +1 -0
- package/scripts/forge/gitlab/pr-search.sh +35 -2
- package/scripts/forge/linear/auth-status.sh +1 -0
- package/scripts/forge/linear/issue-comment.sh +1 -0
- package/scripts/forge/linear/issue-list.sh +1 -0
- package/scripts/forge/linear/issue-search.sh +1 -0
- package/scripts/forge/linear/issue-view.sh +1 -0
- package/scripts/forge/linear/recently-closed.sh +1 -0
- package/scripts/forge/linear/user-identity.sh +1 -0
- package/skeleton/.claude/skills/generate-image/SKILL.md +19 -2
- package/skeleton/.codex/skills/generate-image/SKILL.md +19 -2
- package/skeleton/resources/commands/agent-farm.md +27 -2
- package/skeleton/roles/consultant.md +32 -0
- package/skeleton/templates/AGENTS.md +1 -1
- package/skeleton/templates/CLAUDE.md +1 -1
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
import type Database from 'better-sqlite3';
|
|
36
36
|
import type { DbMailbox, MailboxGateDetail, MailboxReason } from '../db/types.js';
|
|
37
37
|
import type { GateProfile, GateVerdict } from './render-gate.js';
|
|
38
|
-
import type
|
|
38
|
+
import { type PacedSubmitResult, type WriteStrategy } from './message-write.js';
|
|
39
39
|
/**
|
|
40
40
|
* The structural view of a live PTY session the delivery path needs. `PtySession`
|
|
41
41
|
* satisfies this (ringBuffer + info getter + the Spec 1313 identity getters +
|
|
@@ -72,6 +72,31 @@ export interface DeliverySession {
|
|
|
72
72
|
* minute, and writing into a settling composer is what ate the leading bytes in #1521.
|
|
73
73
|
*/
|
|
74
74
|
readonly lastDataAt: number;
|
|
75
|
+
/**
|
|
76
|
+
* The session's MONOTONE cumulative INPUT-change counter (Issue #1473) — the input-side twin
|
|
77
|
+
* of {@link bytesWritten}, and the half of the gate's change token that a keystroke moves.
|
|
78
|
+
*
|
|
79
|
+
* `bytesWritten` counts OUTPUT, so until this existed a human keystroke landing in the
|
|
80
|
+
* gate→write window moved nothing the gate compared: both samples agreed, the verdict stayed
|
|
81
|
+
* CLEAN, and the message fused into the draft the human had started. Folding this into
|
|
82
|
+
* {@link ringToken} closes that, and — the case that earns it on its own — stops a memoized
|
|
83
|
+
* CLEAN verdict from being reused across a keystroke, which a token of output alone cannot
|
|
84
|
+
* see because PTY input does not advance the ring.
|
|
85
|
+
*
|
|
86
|
+
* REQUIRED, not optional, and test doubles must supply a real number: an optional field would
|
|
87
|
+
* let production compile a port that silently reads "no input ever" while presenting as a
|
|
88
|
+
* working gate.
|
|
89
|
+
*/
|
|
90
|
+
readonly inputSeq: number;
|
|
91
|
+
/**
|
|
92
|
+
* Epoch ms of the session's most recent HUMAN input (Issue #1473) — the input-side twin of
|
|
93
|
+
* {@link lastDataAt}, and the only signal that can see input which landed BEFORE the gate
|
|
94
|
+
* sampled anything and has not been echoed yet. No counter comparison can catch that case:
|
|
95
|
+
* both samples agree, correctly, and the classifier reads a genuinely empty composer because
|
|
96
|
+
* the character is still in flight to the TUI. `0` on a session that has never had input,
|
|
97
|
+
* which reads as settled.
|
|
98
|
+
*/
|
|
99
|
+
readonly lastInputAt: number;
|
|
75
100
|
readonly info: {
|
|
76
101
|
cols: number;
|
|
77
102
|
rows: number;
|
|
@@ -95,10 +120,19 @@ export interface DeliverySession {
|
|
|
95
120
|
* {@link deliverAgentMail}'s precheck at the write instant rather than before the lock.
|
|
96
121
|
*/
|
|
97
122
|
export type WriteAbort =
|
|
98
|
-
/**
|
|
123
|
+
/**
|
|
124
|
+
* Re-hold the row for this reason and retry on a later clean pass.
|
|
125
|
+
*
|
|
126
|
+
* `detail` carries the gate detail when the in-lock refusal has one to give (Issue #1473's
|
|
127
|
+
* `recent-input`); absent/null keeps the detail-nulling behaviour every other refusal wants.
|
|
128
|
+
* `retryAfterMs` is set when the refusal clears on a known interval of its own — an input
|
|
129
|
+
* settle, or a composer redraw — see {@link DeliveryOutcome.retryAfterMs}.
|
|
130
|
+
*/
|
|
99
131
|
{
|
|
100
132
|
kind: 'hold';
|
|
101
133
|
reason: MailboxReason;
|
|
134
|
+
detail?: MailboxGateDetail | null;
|
|
135
|
+
retryAfterMs?: number;
|
|
102
136
|
}
|
|
103
137
|
/** The row was dismissed/superseded under us — a terminal state, so it must NOT be re-held. */
|
|
104
138
|
| {
|
|
@@ -137,6 +171,23 @@ export interface DeliveryPorts {
|
|
|
137
171
|
* output) classifies not-clean (`no-composer-marker`), exactly as an empty replay always did.
|
|
138
172
|
*/
|
|
139
173
|
classify(session: DeliverySession, profile: GateProfile): Promise<GateVerdict>;
|
|
174
|
+
/**
|
|
175
|
+
* A fingerprint of the session's composer REGION as rendered right now (Issue #1664) — the
|
|
176
|
+
* signal that replaced whole-screen output quiescence as the "has it stopped being painted?"
|
|
177
|
+
* test. See `composerRegionFingerprint` for what it covers; `null` means no composer region
|
|
178
|
+
* could be located, which every caller here treats as MOVED (fail-toward-hold).
|
|
179
|
+
*
|
|
180
|
+
* SYNCHRONOUS, deliberately. Its second consumer is the in-lock precheck, which runs inside
|
|
181
|
+
* the per-terminal submission lock immediately before the first byte and cannot await. The
|
|
182
|
+
* live binding therefore reads the gate mirror without flushing its parser; the cost is one
|
|
183
|
+
* parse turn of lag, and the caller's stability requirement — the region unchanged across two
|
|
184
|
+
* samples a settle apart — is what carries the safety.
|
|
185
|
+
*
|
|
186
|
+
* REQUIRED, not optional, for the reason {@link DeliverySession.inputSeq} is: an optional
|
|
187
|
+
* port would let production compile a binding that silently answers "the composer never
|
|
188
|
+
* moves" while presenting as a working gate.
|
|
189
|
+
*/
|
|
190
|
+
composerFingerprint(session: DeliverySession, profile: GateProfile): string | null;
|
|
140
191
|
/**
|
|
141
192
|
* Write a formatted message (text + Enter, unless `noEnter`) to the session as ONE
|
|
142
193
|
* submission on the session's per-terminal lock, and report what actually happened.
|
|
@@ -155,7 +206,13 @@ export interface DeliveryPorts {
|
|
|
155
206
|
* submission just changed. All of the reason authority stays here in the delivery
|
|
156
207
|
* module — the binding only relays the verdict.
|
|
157
208
|
*/
|
|
158
|
-
writeMessage(session: DeliverySession, formattedMessage: string, noEnter: boolean, precheck: () => WriteAbort | null
|
|
209
|
+
writeMessage(session: DeliverySession, formattedMessage: string, noEnter: boolean, precheck: () => WriteAbort | null,
|
|
210
|
+
/**
|
|
211
|
+
* Issue #1567: how the frame is put on the wire (bracketed paste + chunking, or the
|
|
212
|
+
* per-line opt-out), resolved from the recipient's gate profile. Optional so unit fakes
|
|
213
|
+
* written before #1567 keep compiling; the live binding forwards it.
|
|
214
|
+
*/
|
|
215
|
+
strategy?: WriteStrategy): WriteResult | Promise<WriteResult>;
|
|
159
216
|
/** Emit the delivered-message broadcast frame. */
|
|
160
217
|
broadcast(frame: DeliveredBroadcast): void;
|
|
161
218
|
/**
|
|
@@ -313,6 +370,12 @@ export interface UnverifiedDeliveryInfo {
|
|
|
313
370
|
mailboxId: string;
|
|
314
371
|
/** The terminal the bytes were written to, for correlating against its transcript. */
|
|
315
372
|
terminalId: string;
|
|
373
|
+
/**
|
|
374
|
+
* Why it could not be confirmed (Issue #1473) — the notification text branches on it, since
|
|
375
|
+
* "its header never appeared on that screen" is a false statement about a delivery whose
|
|
376
|
+
* header DID appear and whose tail was eaten by a human keystroke.
|
|
377
|
+
*/
|
|
378
|
+
cause: UnverifiedCause;
|
|
316
379
|
}
|
|
317
380
|
/**
|
|
318
381
|
* Metadata for a held row that has crossed the escalation age. Carries NO message body
|
|
@@ -333,6 +396,20 @@ export interface EscalationInfo {
|
|
|
333
396
|
*/
|
|
334
397
|
detail: MailboxGateDetail | null;
|
|
335
398
|
}
|
|
399
|
+
/**
|
|
400
|
+
* A hold's diagnostic detail as this module reports it: the render gate's own verdict details,
|
|
401
|
+
* plus two the delivery path decides for itself: `'recent-input'` (Issue #1473), read from the
|
|
402
|
+
* session's input signals rather than from anything on the screen, and `'composer-redraw'`
|
|
403
|
+
* (Issue #1664), read from the composer region's stability across samples — a property no
|
|
404
|
+
* single classify can see.
|
|
405
|
+
*
|
|
406
|
+
* Both stay inert in {@link isUnverifiableVerdict} by construction: that predicate is an
|
|
407
|
+
* allow-list of the two can't-verify details, so a value it does not name can never escalate.
|
|
408
|
+
* They must stay outside it — `'recent-input'` is the same self-clearing "a human is at the
|
|
409
|
+
* line" class as `user-text` and escalating it would false-alarm on every ordinary typist, and
|
|
410
|
+
* `'composer-redraw'` clears one settle after the composer stops moving.
|
|
411
|
+
*/
|
|
412
|
+
export type DeliveryDetail = GateVerdict['detail'] | 'recent-input' | 'composer-redraw';
|
|
336
413
|
/** Outcome of one delivery pass over an agent's held mail. */
|
|
337
414
|
export interface DeliveryOutcome {
|
|
338
415
|
/** Row ids delivered this pass — 0 or 1 (one message per clean gate; its Enter makes the line busy). */
|
|
@@ -360,8 +437,48 @@ export interface DeliveryOutcome {
|
|
|
360
437
|
* which {@link MailboxDrainer.recordStreak} escalates to liveness telemetry. Absent
|
|
361
438
|
* for non-gate holds (`no-live-pty`/`no-profile`) and deliveries.
|
|
362
439
|
*/
|
|
363
|
-
detail?:
|
|
440
|
+
detail?: DeliveryDetail;
|
|
441
|
+
/**
|
|
442
|
+
* Why a completed delivery could not be confirmed (Issue #1473). Present only alongside a
|
|
443
|
+
* delivery that was flagged — absent means confirmed, or not verifiable in the first place.
|
|
444
|
+
*
|
|
445
|
+
* - `'input-raced'` — human input landed on the terminal DURING the paced write, so the
|
|
446
|
+
* body may have been truncated (`^U`/`^W`/`^C`) or submitted early (their Enter);
|
|
447
|
+
* - `'no-echo'` — the write completed but the message's header never appeared on screen.
|
|
448
|
+
*
|
|
449
|
+
* `'input-raced'` WINS when both are true: it names the more actionable remedy, and a missing
|
|
450
|
+
* echo is often just the downstream symptom of the race.
|
|
451
|
+
*
|
|
452
|
+
* Deliberately NOT overloaded onto {@link verified}, which would make one field mean two
|
|
453
|
+
* different things — and the input-raced case frequently has `verified: true` (the header did
|
|
454
|
+
* land; it was the tail that was lost), which is exactly why the sender was being told plain
|
|
455
|
+
* "Message delivered" for it.
|
|
456
|
+
*/
|
|
457
|
+
unverifiedCause?: UnverifiedCause;
|
|
458
|
+
/**
|
|
459
|
+
* Present when this pass held on a signal that clears by ITSELF after a known interval — the
|
|
460
|
+
* terminal's recent input (Issue #1473: the ms after which {@link inputSettled} would pass) or
|
|
461
|
+
* the composer still being repainted (Issue #1664: the ms after which the current region
|
|
462
|
+
* sample counts as stable). The drainer arms one coalesced, generation-guarded re-drain for
|
|
463
|
+
* it, so the row delivers roughly one settle after the movement stops rather than on the next
|
|
464
|
+
* 1.5 s backstop tick. Which of the two it was is in {@link detail}.
|
|
465
|
+
*
|
|
466
|
+
* It is not a speculative optimisation: the `'submit'` fast trigger fires SYNCHRONOUSLY from
|
|
467
|
+
* `stopComposing`, and the drain it schedules runs in a microtask — so at that pass
|
|
468
|
+
* `lastInputAt` is always `now`, and the submit trigger is now provably always held. Without
|
|
469
|
+
* the re-drain, pressing Enter to clear the line would reliably cost a full backstop period.
|
|
470
|
+
* It also shortens the escalation-blind hold below from "forever" to "one settle".
|
|
471
|
+
*/
|
|
472
|
+
retryAfterMs?: number;
|
|
364
473
|
}
|
|
474
|
+
/**
|
|
475
|
+
* Why a committed delivery is flagged unconfirmed (Issue #1473) — carried to every operator
|
|
476
|
+
* surface, the SENDER included. Before this, `tower-routes` surfaced only `verified` and the
|
|
477
|
+
* CLI warned only on `verified === false`, so the truncation case this exists for — where the
|
|
478
|
+
* header landed and `verified` is `true` — reported an unqualified success to the one human who
|
|
479
|
+
* was standing there.
|
|
480
|
+
*/
|
|
481
|
+
export type UnverifiedCause = 'no-echo' | 'input-raced';
|
|
365
482
|
/**
|
|
366
483
|
* How long the receiving session's screen must have been QUIET before a gated delivery may
|
|
367
484
|
* write onto it (Issue #1573).
|
|
@@ -393,6 +510,43 @@ export interface EchoWatch {
|
|
|
393
510
|
*/
|
|
394
511
|
verify(): Promise<boolean>;
|
|
395
512
|
}
|
|
513
|
+
/**
|
|
514
|
+
* The longest gap between two observations that can still be treated as ONE continuous run of
|
|
515
|
+
* the composer holding still (Issue #1664).
|
|
516
|
+
*
|
|
517
|
+
* Two equal fingerprints far apart in time prove nothing on their own: between them the
|
|
518
|
+
* composer could have changed and changed back, which is exactly #1521's turn-end redraw. An
|
|
519
|
+
* agent with no held mail is not sampled at all, so without this bound a sample taken minutes
|
|
520
|
+
* ago would authorise an immediate write onto a composer that had just been repainted —
|
|
521
|
+
* observed in the #1664 acceptance harness, where consecutive trials reused a stale sample and
|
|
522
|
+
* delivered on their very first pass.
|
|
523
|
+
*
|
|
524
|
+
* Set above the drainer's 1.5 s backstop so an ordinary chain of passes always counts as
|
|
525
|
+
* continuous, and the delivery of a held row never depends on a faster trigger existing. In
|
|
526
|
+
* practice the gap is far smaller: a `composer-redraw` hold carries a `retryAfterMs`, so the
|
|
527
|
+
* next observation lands about a settle later.
|
|
528
|
+
*/
|
|
529
|
+
export declare const MAX_COMPOSER_SAMPLE_GAP_MS = 2000;
|
|
530
|
+
/**
|
|
531
|
+
* How long the receiving session must have been free of HUMAN INPUT before a gated delivery
|
|
532
|
+
* may write onto it (Issue #1473) — the input-side counterpart of {@link SETTLE_BEFORE_WRITE_MS}.
|
|
533
|
+
*
|
|
534
|
+
* The change token catches input that arrives after the gate sampled it. It cannot catch input
|
|
535
|
+
* that arrived just BEFORE the sample and has not been echoed yet: nothing has moved, both
|
|
536
|
+
* samples agree — correctly — and the classifier reads a genuinely empty composer while the
|
|
537
|
+
* character is still travelling to the TUI. Only elapsed time can see that.
|
|
538
|
+
*
|
|
539
|
+
* One notch above the output settle because the round trip it covers is strictly the longer
|
|
540
|
+
* one: an echo has to reach the TUI, be processed, be painted, and come back as output, whereas
|
|
541
|
+
* the output settle only waits for painting to stop.
|
|
542
|
+
*
|
|
543
|
+
* **This BOUNDS the echo-lag window; it does not close it.** Input older than this interval
|
|
544
|
+
* whose echo is still delayed, and input in flight from the browser at sample time, both
|
|
545
|
+
* survive by construction. A larger constant buys coverage at the price of latency on every
|
|
546
|
+
* delivery, which is why the next tightening (if measurement wants one) is a BOUNDED
|
|
547
|
+
* `lastInputAt > lastDataAt` hold rather than a bigger number here.
|
|
548
|
+
*/
|
|
549
|
+
export declare const INPUT_SETTLE_BEFORE_WRITE_MS = 300;
|
|
396
550
|
/**
|
|
397
551
|
* Reduce text to its alphanumeric skeleton for echo matching (Issue #1573).
|
|
398
552
|
*
|
|
@@ -409,6 +563,17 @@ export interface EchoWatch {
|
|
|
409
563
|
* arrived intact, only that the head of the message reached the screen.
|
|
410
564
|
*/
|
|
411
565
|
export declare function normalizeForEcho(text: string): string;
|
|
566
|
+
/**
|
|
567
|
+
* The paste placards a TUI renders in place of a long bracketed paste (Issue #1567), in
|
|
568
|
+
* {@link normalizeForEcho} form: claude shows `[Pasted text #N +M lines]`, codex
|
|
569
|
+
* `[Pasted Content N chars]` (both measured, `codev/evidence/1567-head-loss/`). A long frame
|
|
570
|
+
* now travels as a bracketed paste, so until it is submitted the composer shows one of these
|
|
571
|
+
* instead of the header — and a `--no-enter` send never submits. The echo watch therefore
|
|
572
|
+
* counts these alongside the header needle; a NEW occurrence of either is evidence the write
|
|
573
|
+
* landed. Counted, not merely matched, for the same reason as the header: a previous paste's
|
|
574
|
+
* placard may already be on screen.
|
|
575
|
+
*/
|
|
576
|
+
export declare const PASTE_PLACARD_NEEDLES: readonly string[];
|
|
412
577
|
/**
|
|
413
578
|
* The needle {@link DeliveryPorts.watchEcho} opens on: the formatted message's FIRST line,
|
|
414
579
|
* normalized. Returns `''` when it is too short to be distinctive (see
|
|
@@ -493,6 +658,8 @@ export declare class MailboxDrainer {
|
|
|
493
658
|
private readonly notifiedAgents;
|
|
494
659
|
private readonly scheduledDrains;
|
|
495
660
|
private readonly verdictMemo;
|
|
661
|
+
private readonly inputRetryTimers;
|
|
662
|
+
private readonly consecutiveInputHolds;
|
|
496
663
|
private generation;
|
|
497
664
|
constructor(opts?: {
|
|
498
665
|
intervalMs?: number;
|
|
@@ -504,6 +671,48 @@ export declare class MailboxDrainer {
|
|
|
504
671
|
stop(): void;
|
|
505
672
|
/** Per-agent consecutive not-clean count (liveness telemetry; Phase 7 reads this). */
|
|
506
673
|
get streaks(): ReadonlyMap<string, number>;
|
|
674
|
+
/** Agents with a pending input re-drain timer (Issue #1473; test/observability). */
|
|
675
|
+
get pendingInputRetries(): ReadonlyArray<string>;
|
|
676
|
+
/** Per-agent consecutive input-hold count (Issue #1473; test/observability). */
|
|
677
|
+
get inputHoldStreaks(): ReadonlyMap<string, number>;
|
|
678
|
+
/**
|
|
679
|
+
* Arm the input re-drain for a pass this drainer did not itself run (Issue #1473).
|
|
680
|
+
*
|
|
681
|
+
* The `afx send` REQUEST path calls `deliverAgentMailSerialized` directly rather than going
|
|
682
|
+
* through the drainer, so its outcome — `retryAfterMs` included — never reached
|
|
683
|
+
* {@link armInputRetry}. The visible consequence was that a send arriving while the terminal
|
|
684
|
+
* had just been typed at fell through to the quiescence trigger or the backstop, which is
|
|
685
|
+
* precisely the latency the re-drain exists to remove, in the one case an operator is sitting
|
|
686
|
+
* there watching. Measured, not theorised: the dev-approval evidence run timed that pass at
|
|
687
|
+
* the quiescence debounce rather than one settle.
|
|
688
|
+
*
|
|
689
|
+
* A no-op before the drainer is started, and idempotent per agent — the timer coalesces, so a
|
|
690
|
+
* request-path arm and a backstop arm for the same agent cannot stack.
|
|
691
|
+
*/
|
|
692
|
+
noteOutcome(workspacePath: string, toAgent: string, outcome: DeliveryOutcome): void;
|
|
693
|
+
/**
|
|
694
|
+
* Arm the one-shot input re-drain and track the consecutive-input-hold diagnostic
|
|
695
|
+
* (Issue #1473). Called from both pass sites, exactly where {@link recordStreak} is, so the
|
|
696
|
+
* backstop tick and the fast trigger behave identically.
|
|
697
|
+
*
|
|
698
|
+
* The retry exists because the `'submit'` fast trigger is now provably ALWAYS held: it fires
|
|
699
|
+
* synchronously from `stopComposing`, and the drain it schedules runs in a microtask, so at
|
|
700
|
+
* that pass the input timestamp is `now` by construction. Without a retry, the single most
|
|
701
|
+
* common "the line just cleared, deliver now" path would silently degrade to the 1.5 s
|
|
702
|
+
* backstop — as would any navigation key that provokes no output of its own.
|
|
703
|
+
*
|
|
704
|
+
* COALESCED: while a timer is pending for an agent, later input holds do not stack another.
|
|
705
|
+
* GENERATION-GUARDED like {@link scheduleDrain}, so a timer that survives a stop()/start()
|
|
706
|
+
* bails instead of driving the new generation's state.
|
|
707
|
+
*/
|
|
708
|
+
private armInputRetry;
|
|
709
|
+
/**
|
|
710
|
+
* The one-shot re-drain timer shared by both self-clearing holds (Issue #1473's input settle
|
|
711
|
+
* and Issue #1664's composer redraw). COALESCED — while a timer is pending for an agent, a
|
|
712
|
+
* later hold does not stack another — and GENERATION-GUARDED, so a timer that survives a
|
|
713
|
+
* stop()/start() bails instead of driving the new generation's state.
|
|
714
|
+
*/
|
|
715
|
+
private armRetryTimer;
|
|
507
716
|
/**
|
|
508
717
|
* Agent keys that currently hold a cached gate verdict (render-gate memo).
|
|
509
718
|
* Observability/test only: {@link tick} prunes this to the current held-agent set, so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailbox-delivery.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/mailbox-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAa3C,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"mailbox-delivery.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/mailbox-delivery.ts"],"names":[],"mappings":"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"}
|