toolroll 0.9.60 → 0.9.61
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/CHANGELOG.md +15 -0
- package/dist/agent-board.d.ts +208 -0
- package/dist/agent-board.js +454 -0
- package/dist/agent-fence.d.ts +19 -0
- package/dist/agent-fence.js +100 -8
- package/dist/agent-pulse.d.ts +43 -0
- package/dist/agent-pulse.js +214 -0
- package/dist/agent-turns.d.ts +52 -0
- package/dist/agent-turns.js +137 -0
- package/dist/agents-board.d.ts +101 -0
- package/dist/agents-board.js +225 -0
- package/dist/assignment-adapters.d.ts +1 -0
- package/dist/assignment-status.d.ts +1 -1
- package/dist/assignment.d.ts +4 -0
- package/dist/assignment.js +8 -6
- package/dist/browser/workspace.css +1 -1
- package/dist/browser/workspace.js +29 -25
- package/dist/browser-crew.js +2 -0
- package/dist/browser-workspace.d.ts +79 -1
- package/dist/browser-workspace.js +1 -0
- package/dist/builder.d.ts +8 -0
- package/dist/builder.js +113 -13
- package/dist/chat-channel.js +9 -0
- package/dist/chat-core.d.ts +6 -0
- package/dist/chat-core.js +8 -0
- package/dist/chat-delivery.js +22 -0
- package/dist/chat-messages.js +8 -1
- package/dist/chat-quiet.js +1 -0
- package/dist/chat-voice.d.ts +2 -0
- package/dist/chat-voice.js +2 -0
- package/dist/checkout-cleanup.d.ts +3 -0
- package/dist/checkout-cleanup.js +11 -2
- package/dist/contracts/console-api.d.ts +3 -1
- package/dist/contracts/console-api.js +5 -1
- package/dist/contracts/lead-tools.d.ts +16 -2
- package/dist/contracts/lead-tools.js +5 -1
- package/dist/desktop-update.d.ts +1 -1
- package/dist/evidence-pack.js +1 -1
- package/dist/evidence.d.ts +6 -0
- package/dist/evidence.js +14 -3
- package/dist/exec.d.ts +32 -0
- package/dist/exec.js +229 -10
- package/dist/invoke.js +110 -18
- package/dist/landed-cleanup.d.ts +157 -0
- package/dist/landed-cleanup.js +707 -0
- package/dist/lead-cli.js +22 -19
- package/dist/lead-contract.js +1 -1
- package/dist/lead-doors.js +45 -1
- package/dist/lead-tools.js +40 -7
- package/dist/live-input.d.ts +68 -0
- package/dist/live-input.js +254 -0
- package/dist/live.d.ts +1 -1
- package/dist/live.js +4 -2
- package/dist/maintenance.d.ts +2 -0
- package/dist/maintenance.js +5 -2
- package/dist/operate-remote-arguments.js +5 -1
- package/dist/operate-remote.js +1 -1
- package/dist/operate.d.ts +1 -1
- package/dist/operate.js +188 -16
- package/dist/orphan-sweep.d.ts +2 -0
- package/dist/orphan-sweep.js +5 -3
- package/dist/project-delete-ui.d.ts +11 -0
- package/dist/project-delete-ui.js +29 -2
- package/dist/project-tools.d.ts +7 -11
- package/dist/project-tools.js +13 -37
- package/dist/provider.d.ts +65 -8
- package/dist/provider.js +80 -21
- package/dist/result-completion.d.ts +7 -0
- package/dist/result-completion.js +9 -0
- package/dist/runner.d.ts +4 -2
- package/dist/runner.js +3 -3
- package/dist/serve.js +19 -1
- package/dist/server/live.d.ts +3 -0
- package/dist/server/live.js +35 -2
- package/dist/server/pages.js +59 -35
- package/dist/server/render-chat.js +12 -0
- package/dist/server/render-tasks.d.ts +12 -2
- package/dist/server/render-tasks.js +27 -7
- package/dist/server/route-table.js +4 -1
- package/dist/server/settings.js +2 -1
- package/dist/server/task-views.js +9 -0
- package/dist/server/tasks.js +63 -0
- package/dist/shared-deps.d.ts +9 -4
- package/dist/shared-deps.js +89 -13
- package/dist/staged-runtimes.d.ts +16 -4
- package/dist/staged-runtimes.js +160 -38
- package/dist/steer-live.d.ts +19 -0
- package/dist/steer-live.js +93 -0
- package/dist/steer-status.d.ts +8 -2
- package/dist/steer-status.js +19 -5
- package/dist/storage-sweep-child.d.ts +1 -0
- package/dist/storage-sweep-child.js +76 -0
- package/dist/storage-sweep-process.d.ts +41 -0
- package/dist/storage-sweep-process.js +187 -0
- package/dist/storage-sweep.d.ts +30 -6
- package/dist/storage-sweep.js +214 -28
- package/dist/storage-ui.d.ts +2 -0
- package/dist/storage-ui.js +16 -4
- package/dist/storage.d.ts +6 -0
- package/dist/storage.js +35 -0
- package/dist/store.d.ts +163 -2
- package/dist/store.js +350 -15
- package/dist/surface.js +4 -2
- package/dist/sweep-quarantine.d.ts +28 -0
- package/dist/sweep-quarantine.js +153 -0
- package/dist/task-status.d.ts +2 -0
- package/dist/task-status.js +5 -1
- package/dist/test-temp.d.ts +6 -3
- package/dist/test-temp.js +15 -9
- package/dist/toolroll-update.js +3 -2
- package/dist/work-index.d.ts +1 -0
- package/dist/work-index.js +32 -12
- package/dist/work-summary.d.ts +2 -2
- package/dist/workspace-revision.js +3 -1
- package/dist/worktree.d.ts +3 -1
- package/dist/worktree.js +93 -10
- package/package.json +1 -1
- package/scripts/provider-canary.mjs +235 -147
package/dist/store.d.ts
CHANGED
|
@@ -78,6 +78,15 @@ export declare const FLOW_SEND_SCHEMA = "\nCREATE TABLE IF NOT EXISTS flow_send
|
|
|
78
78
|
* vocabulary and when — never text, tool names or arguments. Display state, not evidence;
|
|
79
79
|
* a finished run's row goes with the live log's own retention (sweepRunActivity). */
|
|
80
80
|
export declare const RUN_ACTIVITY_SCHEMA = "\nCREATE TABLE IF NOT EXISTS run_activity (\n run INTEGER PRIMARY KEY REFERENCES run(id) ON DELETE CASCADE,\n kind TEXT NOT NULL CHECK (kind IN ('session','message','edit','command','read','search','lookup','plan','delegate','tool')),\n at TEXT NOT NULL\n);\n";
|
|
81
|
+
/** Pausing a running Claude build (live steering, v121: additive only). A person's Pause asks the build to
|
|
82
|
+
* stop its current turn and keep its session: one row per request, bound to the exact run it was asked of, under the
|
|
83
|
+
* request id the asker chose (a repeated request is the same request). `note` is the steering note a Pause and steer
|
|
84
|
+
* sends right after the interrupt. The builder's dispatcher stamps sent_at when the interrupt is written, paused_at when
|
|
85
|
+
* the turn stopped, resumed_at when a later note continued the session, and ended_at when the run stopped taking input
|
|
86
|
+
* first. Never a stop: nothing here ends, holds or reclaims an attempt (run_stop does that). A person's Resume (run_resume)
|
|
87
|
+
* continues a paused build with a short continue frame and no note: one row per request, bound to the exact paused run;
|
|
88
|
+
* sent_at when the frame was written, ended_at when the run was no longer paused to take it. */
|
|
89
|
+
export declare const LIVE_STEER_SCHEMA = "\nCREATE TABLE IF NOT EXISTS run_pause (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n run INTEGER NOT NULL REFERENCES run(id) ON DELETE CASCADE,\n task_ref INTEGER NOT NULL REFERENCES task_ref(id) ON DELETE CASCADE,\n request_id TEXT NOT NULL UNIQUE,\n requested_by TEXT NOT NULL,\n requested_via TEXT NOT NULL CHECK (requested_via IN ('cli','web','chat')),\n requested_at TEXT NOT NULL,\n note INTEGER REFERENCES task_steer(id) ON DELETE SET NULL,\n sent_at TEXT,\n paused_at TEXT,\n resumed_at TEXT,\n ended_at TEXT\n);\nCREATE INDEX IF NOT EXISTS run_pause_by_run ON run_pause (run, id);\nCREATE TABLE IF NOT EXISTS run_resume (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n run INTEGER NOT NULL REFERENCES run(id) ON DELETE CASCADE,\n task_ref INTEGER NOT NULL REFERENCES task_ref(id) ON DELETE CASCADE,\n request_id TEXT NOT NULL UNIQUE,\n requested_by TEXT NOT NULL,\n requested_via TEXT NOT NULL CHECK (requested_via IN ('cli','web','chat')),\n requested_at TEXT NOT NULL,\n sent_at TEXT,\n ended_at TEXT\n);\nCREATE INDEX IF NOT EXISTS run_resume_by_run ON run_resume (run, id);\n";
|
|
81
90
|
export declare const CHAT_APPROVAL_SCHEMA = "\nCREATE TABLE IF NOT EXISTS chat_approval_setting (\n approver TEXT NOT NULL,\n scope TEXT NOT NULL,\n enabled INTEGER NOT NULL CHECK (enabled IN (0,1)),\n full_access INTEGER NOT NULL DEFAULT 0 CHECK (full_access IN (0,1)),\n attempt_cap_microusd INTEGER CHECK (attempt_cap_microusd IS NULL OR attempt_cap_microusd >= 0),\n generation INTEGER NOT NULL,\n digest TEXT NOT NULL,\n updated_by TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (approver, scope)\n);\n";
|
|
82
91
|
export declare const CHAT_DECIDE_SCHEMA = "\nCREATE TABLE IF NOT EXISTS chat_decide_action (\n token TEXT PRIMARY KEY,\n channel TEXT NOT NULL,\n binding INTEGER NOT NULL,\n chat TEXT NOT NULL,\n message TEXT,\n act TEXT NOT NULL CHECK (act IN ('accept','changes','retry','approve','not-now','merge')),\n phase TEXT NOT NULL CHECK (phase IN ('offer','yes','cancel')),\n task_id TEXT NOT NULL,\n run INTEGER,\n digest TEXT NOT NULL,\n created_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n consumed_at TEXT\n);\nCREATE INDEX IF NOT EXISTS chat_decide_action_message ON chat_decide_action (channel, chat, message);\nCREATE TABLE IF NOT EXISTS chat_decide_prompt (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n channel TEXT NOT NULL,\n binding INTEGER NOT NULL,\n chat TEXT NOT NULL,\n task_id TEXT NOT NULL,\n run INTEGER NOT NULL,\n digest TEXT NOT NULL,\n message TEXT,\n created_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n consumed_at TEXT\n);\nCREATE INDEX IF NOT EXISTS chat_decide_prompt_open ON chat_decide_prompt (channel, binding, consumed_at);\n";
|
|
83
92
|
export type LeadAsk = {
|
|
@@ -152,7 +161,7 @@ export type SealedLedgerEntry = LedgerEntry & {
|
|
|
152
161
|
hash: string;
|
|
153
162
|
} | null;
|
|
154
163
|
};
|
|
155
|
-
export declare const SCHEMA_VERSION =
|
|
164
|
+
export declare const SCHEMA_VERSION = 121;
|
|
156
165
|
/** v118: the tables merged into `credential`, in the order they move (a person's API tokens keep their ids first). */
|
|
157
166
|
export declare const V118_MERGED_TABLES: Readonly<Record<string, CredentialKind>>;
|
|
158
167
|
/**
|
|
@@ -210,7 +219,8 @@ export declare const V115_DROPPED_TABLES: readonly string[];
|
|
|
210
219
|
* before the old tables drop, and the references that named them name credential in place, their rows untouched. v119 only adds four columns
|
|
211
220
|
* (planning_generation on task_ref, run and plan_revision, defaulting to 0, and decision.superseded_reason, null);
|
|
212
221
|
* the rehearsal checks every saved row reads the declared default (HISTORY_RULES' added columns). v120 only adds
|
|
213
|
-
* three nullable task_steer columns (the running build's steering folder), checked the same way.
|
|
222
|
+
* three nullable task_steer columns (the running build's steering folder), checked the same way. v121 only adds
|
|
223
|
+
* new tables and the columns in V121_ADDED_COLUMNS (null, or no sends), checked the same way.
|
|
214
224
|
*/
|
|
215
225
|
export declare const UPDATE_SAFE_MIGRATIONS: readonly number[];
|
|
216
226
|
/** v119: the columns it adds, by table, with the value every row saved before it reads (toolroll-update's HISTORY_RULES). */
|
|
@@ -223,6 +233,23 @@ export declare const V120_ADDED_COLUMNS: Readonly<Record<string, Readonly<Record
|
|
|
223
233
|
definition: string;
|
|
224
234
|
saved: string;
|
|
225
235
|
}>>>>;
|
|
236
|
+
/**
|
|
237
|
+
* Live steering's added columns (v121), with the value every row saved before them reads. A note carries the identity
|
|
238
|
+
* its stdin copy is sent under (live_uuid, minted when it is filed), how many times it was sent to the running build
|
|
239
|
+
* and when last, and when it was given up on as not picked up.
|
|
240
|
+
* A run says when its stdin session opened and closed: only then can a note reach it in seconds, or a Pause stop a turn;
|
|
241
|
+
* and how long a paused session may wait before it ends (the idle limit; none under a wall-clock limit).
|
|
242
|
+
*/
|
|
243
|
+
export declare const LIVE_STEER_COLUMNS: Readonly<Record<string, Readonly<Record<string, {
|
|
244
|
+
definition: string;
|
|
245
|
+
saved: string;
|
|
246
|
+
}>>>>;
|
|
247
|
+
/** v121: the columns it adds, by table, with the value every row saved before it reads: live steering's, and a run's
|
|
248
|
+
* attempt key (the Agents board; runs admitted before it read none). Its new tables carry no saved rows. */
|
|
249
|
+
export declare const V121_ADDED_COLUMNS: Readonly<Record<string, Readonly<Record<string, {
|
|
250
|
+
definition: string;
|
|
251
|
+
saved: string;
|
|
252
|
+
}>>>>;
|
|
226
253
|
/** Whether a database settled at `version` reaches this build's schema through update-safe migrations alone. */
|
|
227
254
|
export declare function updateSafeSchema(version: number | null): boolean;
|
|
228
255
|
export type OAuthClientRow = {
|
|
@@ -1163,6 +1190,54 @@ export type SteerNote = {
|
|
|
1163
1190
|
mailedRun: number | null;
|
|
1164
1191
|
mailedAt: string | null;
|
|
1165
1192
|
ackedAt: string | null;
|
|
1193
|
+
/** Live steering: the identity its stdin copy is sent under, how often and when last it was sent to the running
|
|
1194
|
+
* build, and when it was given up on as not picked up. Null/0 on notes filed before live steering. */
|
|
1195
|
+
liveUuid: string | null;
|
|
1196
|
+
liveSends: number;
|
|
1197
|
+
liveSentAt: string | null;
|
|
1198
|
+
liveMissedAt: string | null;
|
|
1199
|
+
};
|
|
1200
|
+
/** Who asked for a pause, and through which door. */
|
|
1201
|
+
export type PauseVia = "cli" | "web" | "chat";
|
|
1202
|
+
/** One Pause (or Pause and steer) asked of an exact running build (LIVE_STEER_SCHEMA). */
|
|
1203
|
+
export type RunPause = {
|
|
1204
|
+
id: number;
|
|
1205
|
+
run: number;
|
|
1206
|
+
taskRef: number;
|
|
1207
|
+
requestId: string;
|
|
1208
|
+
requestedBy: string;
|
|
1209
|
+
requestedVia: PauseVia;
|
|
1210
|
+
requestedAt: string;
|
|
1211
|
+
note: number | null;
|
|
1212
|
+
sentAt: string | null;
|
|
1213
|
+
pausedAt: string | null;
|
|
1214
|
+
resumedAt: string | null;
|
|
1215
|
+
endedAt: string | null;
|
|
1216
|
+
};
|
|
1217
|
+
/** Where a run's latest pause stands, and how long a paused build may wait before it ends (null: no idle limit). */
|
|
1218
|
+
export type LivePauseState = {
|
|
1219
|
+
state: "pausing" | "paused";
|
|
1220
|
+
pausedAt: string | null;
|
|
1221
|
+
limitMs: number | null;
|
|
1222
|
+
};
|
|
1223
|
+
export type ResumeRequestResult = {
|
|
1224
|
+
ok: true;
|
|
1225
|
+
resume: number;
|
|
1226
|
+
duplicate: boolean;
|
|
1227
|
+
} | {
|
|
1228
|
+
ok: false;
|
|
1229
|
+
reason: "invalid-request" | "duplicate" | "unknown-task" | "task-finished" | "stale" | "not-paused";
|
|
1230
|
+
detail: string;
|
|
1231
|
+
};
|
|
1232
|
+
export type PauseRequestResult = {
|
|
1233
|
+
ok: true;
|
|
1234
|
+
pause: number;
|
|
1235
|
+
note: number | null;
|
|
1236
|
+
duplicate: boolean;
|
|
1237
|
+
} | {
|
|
1238
|
+
ok: false;
|
|
1239
|
+
reason: "invalid-request" | "duplicate" | "unknown-task" | "task-finished" | "stale" | "invalid-note";
|
|
1240
|
+
detail: string;
|
|
1166
1241
|
};
|
|
1167
1242
|
/** One phone enrollment for web push (arc 3, v23). A row per ACTIVATION —
|
|
1168
1243
|
* retirement is history, never deletion. */
|
|
@@ -4666,6 +4741,9 @@ export declare class Store {
|
|
|
4666
4741
|
reason: "unknown-task" | "task-finished" | "invalid-note";
|
|
4667
4742
|
problem?: string;
|
|
4668
4743
|
};
|
|
4744
|
+
/** One verified note, with the identity a running build's stdin copy is sent under: filing it is also what queues
|
|
4745
|
+
* its live delivery, in the same transaction (the builder's dispatcher sends whatever is filed and unsent). */
|
|
4746
|
+
private insertSteerNote;
|
|
4669
4747
|
/** Every steering note of a task, filing order, delivery state included. */
|
|
4670
4748
|
listSteerNotes(taskRef: number): SteerNote[];
|
|
4671
4749
|
/** Undelivered, unsuperseded notes. */
|
|
@@ -4715,6 +4793,86 @@ export declare class Store {
|
|
|
4715
4793
|
* task already ended, or mailed to another run since, is left alone.
|
|
4716
4794
|
*/
|
|
4717
4795
|
ackSteerNote(noteId: number, runId: number, now: Date): boolean;
|
|
4796
|
+
/**
|
|
4797
|
+
* The task's build that takes live input right now (live steering): the steering build (steeringLiveBuild) whose
|
|
4798
|
+
* Claude session reads stdin. Only this run can take a note in seconds, or a Pause. Null otherwise.
|
|
4799
|
+
*/
|
|
4800
|
+
liveInputRun(taskRef: number, now: Date): number | null;
|
|
4801
|
+
/** This run's Claude session reads stdin now (live steering), and how long a paused session may wait (null: no idle limit). */
|
|
4802
|
+
markLiveInputOpened(runId: number, now: Date, pauseLimitMs?: number | null): void;
|
|
4803
|
+
/** This run's stdin is closed (live steering): notes reach it only through its folder, and a Pause is over. */
|
|
4804
|
+
markLiveInputClosed(runId: number, now: Date): void;
|
|
4805
|
+
/** One steering note by id. */
|
|
4806
|
+
steerNote(noteId: number): SteerNote | null;
|
|
4807
|
+
/**
|
|
4808
|
+
* The note's copy was written to this run's stdin (live steering): one more send, stamped. Sending is not reading —
|
|
4809
|
+
* only the agent moving its file to handled/ is (ackSteerNote). Refused once the note is read, ended, given up on,
|
|
4810
|
+
* or mailed to another run.
|
|
4811
|
+
*/
|
|
4812
|
+
recordLiveSend(noteId: number, runId: number, now: Date): boolean;
|
|
4813
|
+
/** The running build was sent this note every time it is owed and never moved it to handled/: Not picked up. A later
|
|
4814
|
+
* acknowledgement still reads it (ackSteerNote ignores this), and an attempt that ends returns it to the next brief. */
|
|
4815
|
+
markLiveMissed(noteId: number, runId: number, now: Date): boolean;
|
|
4816
|
+
/**
|
|
4817
|
+
* Pause a running Claude build, or Pause and steer it (live steering): asked of the exact run the person saw, under
|
|
4818
|
+
* their request id. In one transaction the note (when there is one) is filed — Ruling 11's verified author — and the
|
|
4819
|
+
* pause is queued ahead of it, so the dispatcher writes the interrupt before the note. A repeated request id is the
|
|
4820
|
+
* same request; a run that no longer takes live input is stale. Pause never stops, holds or reclaims the attempt.
|
|
4821
|
+
*/
|
|
4822
|
+
requestPause(request: {
|
|
4823
|
+
taskId: string;
|
|
4824
|
+
runId: number;
|
|
4825
|
+
by: VerifiedAuthor;
|
|
4826
|
+
via: PauseVia;
|
|
4827
|
+
requestId: string;
|
|
4828
|
+
note?: string;
|
|
4829
|
+
}, now: Date): PauseRequestResult;
|
|
4830
|
+
/** The pauses this run has not yet written to stdin, in request order (the dispatcher writes these first). */
|
|
4831
|
+
unsentPauses(runId: number): RunPause[];
|
|
4832
|
+
/** The interrupt for this pause was written to the run's stdin. */
|
|
4833
|
+
markPauseSent(pauseId: number, now: Date): void;
|
|
4834
|
+
/** The run's current turn stopped: every pause sent and still waiting reads paused. */
|
|
4835
|
+
markRunPaused(runId: number, now: Date): void;
|
|
4836
|
+
/** A note continued the paused session: its pauses are over. */
|
|
4837
|
+
markRunResumed(runId: number, now: Date): void;
|
|
4838
|
+
/** The run could not take this pause (its stdin closed first). */
|
|
4839
|
+
endPause(pauseId: number, now: Date): void;
|
|
4840
|
+
/** Where this run's latest pause stands: asked and not yet stopped (pausing), stopped (paused), or none. */
|
|
4841
|
+
pauseStateOf(runId: number): "pausing" | "paused" | null;
|
|
4842
|
+
/** This run's latest pause, when it paused, and how long a paused build may wait before it ends; null with none. */
|
|
4843
|
+
livePauseOf(runId: number): LivePauseState | null;
|
|
4844
|
+
/**
|
|
4845
|
+
* Resume a paused Claude build (live steering): asked of the exact run the person saw, under their request id, and
|
|
4846
|
+
* only while that run is paused. The dispatcher sends a short continue frame — never a note, so nothing is filed.
|
|
4847
|
+
* A repeated request id is the same request; a run that no longer takes live input is stale.
|
|
4848
|
+
*/
|
|
4849
|
+
requestResume(request: {
|
|
4850
|
+
taskId: string;
|
|
4851
|
+
runId: number;
|
|
4852
|
+
by: VerifiedAuthor;
|
|
4853
|
+
via: PauseVia;
|
|
4854
|
+
requestId: string;
|
|
4855
|
+
}, now: Date): ResumeRequestResult;
|
|
4856
|
+
/** The resumes this run has not yet sent, in request order. */
|
|
4857
|
+
unsentResumes(runId: number): {
|
|
4858
|
+
id: number;
|
|
4859
|
+
requestId: string;
|
|
4860
|
+
}[];
|
|
4861
|
+
/** The continue frame was written: the resume is sent, and the run's pauses are over. */
|
|
4862
|
+
markResumeSent(resumeId: number, runId: number, now: Date): void;
|
|
4863
|
+
/** The run was no longer paused (a note continued it first) or stopped taking input: nothing to send. */
|
|
4864
|
+
endResume(resumeId: number, now: Date): void;
|
|
4865
|
+
/** Every resume of a task, newest first (history and tests). */
|
|
4866
|
+
resumesForTask(taskRef: number): {
|
|
4867
|
+
id: number;
|
|
4868
|
+
run: number;
|
|
4869
|
+
requestId: string;
|
|
4870
|
+
requestedVia: PauseVia;
|
|
4871
|
+
sentAt: string | null;
|
|
4872
|
+
endedAt: string | null;
|
|
4873
|
+
}[];
|
|
4874
|
+
/** Every pause of a task, newest first (history and tests). */
|
|
4875
|
+
pausesForTask(taskRef: number): RunPause[];
|
|
4718
4876
|
/** A finished task's pending notes settle superseded — shown, typed, done. */
|
|
4719
4877
|
supersedeSteerNotes(taskRef: number, now: Date): number;
|
|
4720
4878
|
/** The answers a run was given, exactly as it was given them. */
|
|
@@ -6535,6 +6693,9 @@ export declare class Store {
|
|
|
6535
6693
|
* mark. The outbox's delivered_at is deliberately not consulted.
|
|
6536
6694
|
*/
|
|
6537
6695
|
seedPushPairs(now: Date): number;
|
|
6696
|
+
/** A pending pair about a run its person is watching waits for the watch to lapse; one about a finished run they have
|
|
6697
|
+
* since seen retires unsent (agent-board.ts watchedPing). False when the pair must not be sent now. */
|
|
6698
|
+
private settleWatchedPush;
|
|
6538
6699
|
/**
|
|
6539
6700
|
* Claim due pairs: pending (respecting next_attempt_at) or claimed-but-
|
|
6540
6701
|
* expired (reclaim bumps the generation — the old owner loses every
|