@pat-lewczuk/cezar 0.1.3 → 0.1.5
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/README.md +124 -37
- package/dist/config.d.ts +46 -0
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-runner.d.ts +16 -0
- package/dist/core/agent-runner.js +9 -0
- package/dist/core/agent-runner.js.map +1 -1
- package/dist/core/claude-cli-runner.d.ts +6 -0
- package/dist/core/claude-cli-runner.js +27 -43
- package/dist/core/claude-cli-runner.js.map +1 -1
- package/dist/core/claude-ui-mapper.d.ts +57 -0
- package/dist/core/claude-ui-mapper.js +370 -0
- package/dist/core/claude-ui-mapper.js.map +1 -0
- package/dist/core/codex-app-server-runner.js +42 -5
- package/dist/core/codex-app-server-runner.js.map +1 -1
- package/dist/core/codex-ui-mapper.d.ts +53 -0
- package/dist/core/codex-ui-mapper.js +411 -0
- package/dist/core/codex-ui-mapper.js.map +1 -0
- package/dist/core/opencode-server-runner.js +42 -5
- package/dist/core/opencode-server-runner.js.map +1 -1
- package/dist/core/opencode-ui-mapper.d.ts +105 -0
- package/dist/core/opencode-ui-mapper.js +578 -0
- package/dist/core/opencode-ui-mapper.js.map +1 -0
- package/dist/core/process-usage.d.ts +63 -0
- package/dist/core/process-usage.js +181 -0
- package/dist/core/process-usage.js.map +1 -0
- package/dist/core/tool-display.d.ts +27 -0
- package/dist/core/tool-display.js +150 -0
- package/dist/core/tool-display.js.map +1 -0
- package/dist/core/ui-events.d.ts +294 -0
- package/dist/core/ui-events.js +25 -0
- package/dist/core/ui-events.js.map +1 -0
- package/dist/git-worktree.d.ts +21 -0
- package/dist/git-worktree.js +48 -4
- package/dist/git-worktree.js.map +1 -1
- package/dist/handoff.d.ts +1 -1
- package/dist/handoff.js +2 -0
- package/dist/handoff.js.map +1 -1
- package/dist/index.js +34 -4
- package/dist/index.js.map +1 -1
- package/dist/pack-check.d.ts +17 -0
- package/dist/pack-check.js +27 -0
- package/dist/pack-check.js.map +1 -0
- package/dist/runs/store.d.ts +82 -1
- package/dist/runs/store.js +57 -5
- package/dist/runs/store.js.map +1 -1
- package/dist/runs/title-summary.d.ts +15 -0
- package/dist/runs/title-summary.js +84 -0
- package/dist/runs/title-summary.js.map +1 -0
- package/dist/runs/ui-event-sink.d.ts +81 -0
- package/dist/runs/ui-event-sink.js +210 -0
- package/dist/runs/ui-event-sink.js.map +1 -0
- package/dist/server/capabilities.d.ts +18 -0
- package/dist/server/capabilities.js +23 -0
- package/dist/server/capabilities.js.map +1 -0
- package/dist/server/forge/github.d.ts +39 -0
- package/dist/server/forge/github.js +369 -0
- package/dist/server/forge/github.js.map +1 -0
- package/dist/server/forge/index.d.ts +24 -0
- package/dist/server/forge/index.js +45 -0
- package/dist/server/forge/index.js.map +1 -0
- package/dist/server/forge/types.d.ts +80 -0
- package/dist/server/forge/types.js +2 -0
- package/dist/server/forge/types.js.map +1 -0
- package/dist/server/git-changes.d.ts +182 -0
- package/dist/server/git-changes.js +424 -0
- package/dist/server/git-changes.js.map +1 -0
- package/dist/server/git.js +12 -1
- package/dist/server/git.js.map +1 -1
- package/dist/server/github.d.ts +8 -29
- package/dist/server/github.js +7 -139
- package/dist/server/github.js.map +1 -1
- package/dist/server/open-in-app.d.ts +19 -0
- package/dist/server/open-in-app.js +134 -0
- package/dist/server/open-in-app.js.map +1 -0
- package/dist/server/pr.d.ts +5 -20
- package/dist/server/pr.js +4 -95
- package/dist/server/pr.js.map +1 -1
- package/dist/server/server.d.ts +30 -1
- package/dist/server/server.js +448 -19
- package/dist/server/server.js.map +1 -1
- package/dist/server/static-ui.d.ts +49 -0
- package/dist/server/static-ui.js +92 -0
- package/dist/server/static-ui.js.map +1 -0
- package/dist/update-check.d.ts +12 -0
- package/dist/update-check.js +41 -0
- package/dist/update-check.js.map +1 -0
- package/dist/workflows/run.d.ts +90 -0
- package/dist/workflows/run.js +412 -29
- package/dist/workflows/run.js.map +1 -1
- package/dist/workflows/types.d.ts +16 -16
- package/package.json +44 -6
- package/scripts/check-pack.mjs +46 -0
- package/scripts/dev.mjs +74 -0
- package/scripts/mock-claude.mjs +54 -2
- package/scripts/test-process-usage.mjs +47 -0
- package/web/dist/assets/arrow-left-BE957rJs.js +1 -0
- package/web/dist/assets/bundle-mjs-DLPpRFyl.js +1 -0
- package/web/dist/assets/centered-state-zgEVNWsj.js +43 -0
- package/web/dist/assets/chunk-BO2N2NFS-f5igTtpB.js +131 -0
- package/web/dist/assets/compare-variants-ChHCcSQX.js +1 -0
- package/web/dist/assets/core-BuMqAF_1.js +12 -0
- package/web/dist/assets/css-BsVw1vtW.js +1 -0
- package/web/dist/assets/dialog-DDRjj-uK.js +1 -0
- package/web/dist/assets/diff-view-CWRO0GMe.js +4 -0
- package/web/dist/assets/diff-woXpYk--.js +1 -0
- package/web/dist/assets/dist-id2CeyV-.js +1 -0
- package/web/dist/assets/ellipsis-vertical-DJPAfccS.js +1 -0
- package/web/dist/assets/engine-javascript-FQvzRocB.js +141 -0
- package/web/dist/assets/folder-RbRLfIX-.js +1 -0
- package/web/dist/assets/git-pull-request-DJkAMT0f.js +1 -0
- package/web/dist/assets/git-toolbar-C4jo602L.js +1 -0
- package/web/dist/assets/github-BOIzQFwE.js +1 -0
- package/web/dist/assets/go-rLFTqkRN.js +1 -0
- package/web/dist/assets/highlighted-body-OFNGDK62-DGHHie_q.js +1 -0
- package/web/dist/assets/highlighter-BKVEsACy.js +3 -0
- package/web/dist/assets/html-BY76lXLH.js +1 -0
- package/web/dist/assets/index-Bz_r8Jt3.css +2 -0
- package/web/dist/assets/index-Cv1pQs9U.js +11 -0
- package/web/dist/assets/input-BRsSo4xH.js +1 -0
- package/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/web/dist/assets/javascript-BgS3c2Ky.js +1 -0
- package/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/web/dist/assets/json-qhed-kSA.js +1 -0
- package/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
- package/web/dist/assets/jsx-Bz0zcwM4.js +1 -0
- package/web/dist/assets/lib-CNGa3Dig.js +1 -0
- package/web/dist/assets/loader-circle-BV3DO9mE.js +1 -0
- package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/web/dist/assets/markdown-CR_HLGTs.js +1 -0
- package/web/dist/assets/mermaid-GHXKKRXX-DM2VsGBG.js +1 -0
- package/web/dist/assets/open-mercato-toBr6SOa.svg +11 -0
- package/web/dist/assets/python-gzcpVVnB.js +1 -0
- package/web/dist/assets/react-dom-Ddtik4qM.js +1 -0
- package/web/dist/assets/refresh-cw-DCa-Rlwz.js +1 -0
- package/web/dist/assets/repo-git-BuyJiqna.js +1 -0
- package/web/dist/assets/run-diff-BocG6LVd.js +3 -0
- package/web/dist/assets/run-header-CDKw22ek.js +1 -0
- package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/web/dist/assets/search-x-CoCyl7zT.js +1 -0
- package/web/dist/assets/shellscript-CLZ0U2zV.js +1 -0
- package/web/dist/assets/skill-detail-CcFFKmGO.js +1 -0
- package/web/dist/assets/skills-Bc_4U3yq.js +1 -0
- package/web/dist/assets/skills-ynuO5oCr.js +1 -0
- package/web/dist/assets/sql-BsFa4tDR.js +1 -0
- package/web/dist/assets/square-terminal-B6PZX4Qp.js +1 -0
- package/web/dist/assets/tab-link-C77EP3i6.js +1 -0
- package/web/dist/assets/task-changes-DsDgN8-x.js +1 -0
- package/web/dist/assets/task-commits-Dve6Fozc.js +1 -0
- package/web/dist/assets/task-files-BDMc_z0B.js +2 -0
- package/web/dist/assets/task-thread-CmRuPj9H.js +5 -0
- package/web/dist/assets/trash-2-CDtxmmc8.js +1 -0
- package/web/dist/assets/triangle-alert-6su4Js5O.js +1 -0
- package/web/dist/assets/tsx-udAQXfEw.js +1 -0
- package/web/dist/assets/typescript-bsJCZSQ-.js +1 -0
- package/web/dist/assets/upload-Bp7hQxll.js +1 -0
- package/web/dist/assets/use-desktop-CyEWsxSU.js +3 -0
- package/web/dist/assets/utils-rQGbOrwc.js +1 -0
- package/web/dist/assets/workflows-J3z3kYic.js +11 -0
- package/web/dist/assets/x-Br_jIDBw.js +1 -0
- package/web/dist/assets/yaml-rwi0_p6S.js +1 -0
- package/web/dist/index.html +67 -0
- package/web/app.js +0 -3428
- package/web/index.html +0 -108
- package/web/style.css +0 -1767
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Tarball bundle check — the pure half of `scripts/check-pack.mjs`.
|
|
2
|
+
*
|
|
3
|
+
* Phase R1 of the cockpit redesign shipped an npm tarball with no UI in it
|
|
4
|
+
* (`files` listed the sources, not the Vite build). This module pins that bug
|
|
5
|
+
* class: given the file list `npm pack --dry-run --json` reports, decide
|
|
6
|
+
* whether the package would ship a working cockpit. Kept dependency-free and
|
|
7
|
+
* side-effect-free so the decision is unit-testable; the script owns the
|
|
8
|
+
* `npm pack` invocation and the exit code.
|
|
9
|
+
*/
|
|
10
|
+
/** Human-readable problems with a would-be tarball; empty array = publishable.
|
|
11
|
+
*
|
|
12
|
+
* Requirements (spec `.ai/specs/2026-07-14-cockpit-ui-redesign.md`, Serving):
|
|
13
|
+
* - `web/dist/index.html` — the built shell every GET serves.
|
|
14
|
+
* - at least one `web/dist/assets/*` file — the hashed JS/CSS bundles; an
|
|
15
|
+
* index.html alone renders a blank page.
|
|
16
|
+
*/
|
|
17
|
+
export function findPackGaps(packedFiles) {
|
|
18
|
+
const gaps = [];
|
|
19
|
+
if (!packedFiles.includes('web/dist/index.html')) {
|
|
20
|
+
gaps.push('web/dist/index.html is missing — the tarball would ship no UI shell (run `npm run build:web`)');
|
|
21
|
+
}
|
|
22
|
+
if (!packedFiles.some((f) => f.startsWith('web/dist/assets/') && f.length > 'web/dist/assets/'.length)) {
|
|
23
|
+
gaps.push('no web/dist/assets/* bundle in the tarball — the shell would load with no JS/CSS');
|
|
24
|
+
}
|
|
25
|
+
return gaps;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=pack-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-check.js","sourceRoot":"","sources":["../src/pack-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,WAA8B;IACzD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QACvG,IAAI,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/runs/store.d.ts
CHANGED
|
@@ -44,11 +44,39 @@ declare const stepStateSchema: z.ZodObject<{
|
|
|
44
44
|
declare const runRecordSchema: z.ZodObject<{
|
|
45
45
|
id: z.ZodString;
|
|
46
46
|
title: z.ZodString;
|
|
47
|
+
/** Display title (#389): the auto-derived summary of the first agent turn,
|
|
48
|
+
* or the user's inline edit (`PATCH /api/runs/:id` sets it together with
|
|
49
|
+
* `title` so edits always win). The UI shows `titleSummary ?? title`. */
|
|
50
|
+
titleSummary: z.ZodOptional<z.ZodString>;
|
|
51
|
+
/** `git diff --shortstat` of the worktree vs its base, refreshed on every
|
|
52
|
+
* turn-end (#389) — what the quick list / table shows without a git call. */
|
|
53
|
+
diffStat: z.ZodOptional<z.ZodObject<{
|
|
54
|
+
adds: z.ZodNumber;
|
|
55
|
+
dels: z.ZodNumber;
|
|
56
|
+
files: z.ZodNumber;
|
|
57
|
+
}, "strip", z.ZodTypeAny, {
|
|
58
|
+
adds: number;
|
|
59
|
+
dels: number;
|
|
60
|
+
files: number;
|
|
61
|
+
}, {
|
|
62
|
+
adds: number;
|
|
63
|
+
dels: number;
|
|
64
|
+
files: number;
|
|
65
|
+
}>>;
|
|
47
66
|
workflow: z.ZodString;
|
|
48
67
|
task: z.ZodString;
|
|
68
|
+
/** URLs of images attached to the initial task prompt, for the thread's first bubble
|
|
69
|
+
* (#image-display) — persisted like agent screenshots, served from `/images/`. */
|
|
70
|
+
taskImages: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
49
71
|
model: z.ZodOptional<z.ZodString>;
|
|
50
72
|
/** Agent backend this run used — drives "open in CLI" resume command. */
|
|
51
73
|
runner: z.ZodOptional<z.ZodEnum<["claude", "codex", "opencode"]>>;
|
|
74
|
+
/** Echo of the extra system prompt this run actually used (R2): the
|
|
75
|
+
* `POST /api/runs` override, or the `config.json` default it fell back to.
|
|
76
|
+
* Deliberately NOT the full composed prompt — skill bodies and the handoff
|
|
77
|
+
* contract are derivable from the persisted workflow and would bloat the
|
|
78
|
+
* index. Resolved at execute time (a queued run picks up config edits). */
|
|
79
|
+
systemPrompt: z.ZodOptional<z.ZodString>;
|
|
52
80
|
status: z.ZodEnum<["queued", "running", "waiting", "review", "done", "failed", "cancelled"]>;
|
|
53
81
|
createdAt: z.ZodString;
|
|
54
82
|
startedAt: z.ZodOptional<z.ZodString>;
|
|
@@ -67,6 +95,11 @@ declare const runRecordSchema: z.ZodObject<{
|
|
|
67
95
|
groupId: z.ZodOptional<z.ZodString>;
|
|
68
96
|
/** Variant letter within the group — 'A' | 'B' | 'C' (kept as a string). */
|
|
69
97
|
variant: z.ZodOptional<z.ZodString>;
|
|
98
|
+
/** Peak resident memory (bytes) / process count observed across the run's
|
|
99
|
+
* agent process trees (#348) — written when a session's telemetry ends.
|
|
100
|
+
* Optional: old runs.json files and `ps`-less platforms have neither. */
|
|
101
|
+
peakRssBytes: z.ZodOptional<z.ZodNumber>;
|
|
102
|
+
peakProcCount: z.ZodOptional<z.ZodNumber>;
|
|
70
103
|
archived: z.ZodDefault<z.ZodBoolean>;
|
|
71
104
|
archivedAt: z.ZodOptional<z.ZodString>;
|
|
72
105
|
currentStepId: z.ZodOptional<z.ZodString>;
|
|
@@ -110,6 +143,11 @@ declare const runRecordSchema: z.ZodObject<{
|
|
|
110
143
|
sessionId?: string | undefined;
|
|
111
144
|
costUsd?: number | undefined;
|
|
112
145
|
}>, "many">;
|
|
146
|
+
/** Full workflow definition, persisted so a `queued` run can be re-enqueued
|
|
147
|
+
* after a restart (#367) — including ad-hoc "(planned)" chains that exist
|
|
148
|
+
* nowhere else. Kept loose here to avoid an upward import; the run manager
|
|
149
|
+
* validates the shape before reviving it. */
|
|
150
|
+
workflowDef: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
113
151
|
}, "strip", z.ZodTypeAny, {
|
|
114
152
|
status: "queued" | "running" | "waiting" | "review" | "done" | "failed" | "cancelled";
|
|
115
153
|
id: string;
|
|
@@ -133,19 +171,30 @@ declare const runRecordSchema: z.ZodObject<{
|
|
|
133
171
|
costUsd?: number | undefined;
|
|
134
172
|
}[];
|
|
135
173
|
baseBranch?: string | undefined;
|
|
174
|
+
systemPrompt?: string | undefined;
|
|
136
175
|
branch?: string | undefined;
|
|
137
176
|
startedAt?: string | undefined;
|
|
138
177
|
finishedAt?: string | undefined;
|
|
139
178
|
error?: string | undefined;
|
|
140
179
|
costUsd?: number | undefined;
|
|
180
|
+
titleSummary?: string | undefined;
|
|
181
|
+
diffStat?: {
|
|
182
|
+
adds: number;
|
|
183
|
+
dels: number;
|
|
184
|
+
files: number;
|
|
185
|
+
} | undefined;
|
|
186
|
+
taskImages?: string[] | undefined;
|
|
141
187
|
model?: string | undefined;
|
|
142
188
|
runner?: "claude" | "codex" | "opencode" | undefined;
|
|
143
189
|
pullRequestUrl?: string | undefined;
|
|
144
190
|
worktreePath?: string | undefined;
|
|
145
191
|
groupId?: string | undefined;
|
|
146
192
|
variant?: string | undefined;
|
|
193
|
+
peakRssBytes?: number | undefined;
|
|
194
|
+
peakProcCount?: number | undefined;
|
|
147
195
|
archivedAt?: string | undefined;
|
|
148
196
|
currentStepId?: string | undefined;
|
|
197
|
+
workflowDef?: Record<string, unknown> | undefined;
|
|
149
198
|
}, {
|
|
150
199
|
status: "queued" | "running" | "waiting" | "review" | "done" | "failed" | "cancelled";
|
|
151
200
|
id: string;
|
|
@@ -168,20 +217,31 @@ declare const runRecordSchema: z.ZodObject<{
|
|
|
168
217
|
costUsd?: number | undefined;
|
|
169
218
|
}[];
|
|
170
219
|
baseBranch?: string | undefined;
|
|
220
|
+
systemPrompt?: string | undefined;
|
|
171
221
|
branch?: string | undefined;
|
|
172
222
|
startedAt?: string | undefined;
|
|
173
223
|
finishedAt?: string | undefined;
|
|
174
224
|
error?: string | undefined;
|
|
175
225
|
costUsd?: number | undefined;
|
|
226
|
+
titleSummary?: string | undefined;
|
|
227
|
+
diffStat?: {
|
|
228
|
+
adds: number;
|
|
229
|
+
dels: number;
|
|
230
|
+
files: number;
|
|
231
|
+
} | undefined;
|
|
232
|
+
taskImages?: string[] | undefined;
|
|
176
233
|
model?: string | undefined;
|
|
177
234
|
runner?: "claude" | "codex" | "opencode" | undefined;
|
|
178
235
|
pullRequestUrl?: string | undefined;
|
|
179
236
|
worktreePath?: string | undefined;
|
|
180
237
|
groupId?: string | undefined;
|
|
181
238
|
variant?: string | undefined;
|
|
239
|
+
peakRssBytes?: number | undefined;
|
|
240
|
+
peakProcCount?: number | undefined;
|
|
182
241
|
archived?: boolean | undefined;
|
|
183
242
|
archivedAt?: string | undefined;
|
|
184
243
|
currentStepId?: string | undefined;
|
|
244
|
+
workflowDef?: Record<string, unknown> | undefined;
|
|
185
245
|
}>;
|
|
186
246
|
export type StepState = z.infer<typeof stepStateSchema>;
|
|
187
247
|
export type RunRecord = z.infer<typeof runRecordSchema>;
|
|
@@ -204,7 +264,15 @@ export declare class RunStore extends EventEmitter {
|
|
|
204
264
|
private runs;
|
|
205
265
|
private saveTimer;
|
|
206
266
|
private constructor();
|
|
207
|
-
|
|
267
|
+
/**
|
|
268
|
+
* `keepLive` (#367): leave `queued`/`running`/`waiting` statuses untouched
|
|
269
|
+
* so the caller can recover them (RunManager.recover re-queues queued runs,
|
|
270
|
+
* resumes interrupted ones). Without it — one-shot CLI paths that never
|
|
271
|
+
* recover — live-looking runs are marked failed so no ghost stays behind.
|
|
272
|
+
*/
|
|
273
|
+
static open(dataDir: string, opts?: {
|
|
274
|
+
keepLive?: boolean;
|
|
275
|
+
}): RunStore;
|
|
208
276
|
listRuns(): RunRecord[];
|
|
209
277
|
getRun(id: string): RunRecord | undefined;
|
|
210
278
|
createRun(input: {
|
|
@@ -229,6 +297,19 @@ export declare class RunStore extends EventEmitter {
|
|
|
229
297
|
stepId?: string;
|
|
230
298
|
[key: string]: unknown;
|
|
231
299
|
}): RunEvent;
|
|
300
|
+
/**
|
|
301
|
+
* Fan an event out to live subscribers WITHOUT writing it to the NDJSON
|
|
302
|
+
* file — the channel for coalesced `item.delta` flushes (protocol-v2
|
|
303
|
+
* performance guardrail: raw deltas never hit disk; replay = the persisted
|
|
304
|
+
* snapshots). Stamped with `seq`/`ts` like persisted lines so the live
|
|
305
|
+
* wire keeps one ordering axis; the seq simply never appears in a replay
|
|
306
|
+
* (gaps are fine — dedup compares with `>`).
|
|
307
|
+
*/
|
|
308
|
+
emitEphemeral(runId: string, event: {
|
|
309
|
+
type: string;
|
|
310
|
+
stepId?: string;
|
|
311
|
+
[key: string]: unknown;
|
|
312
|
+
}): RunEvent;
|
|
232
313
|
readEvents(runId: string): RunEvent[];
|
|
233
314
|
deleteRun(id: string): boolean;
|
|
234
315
|
/** Write the index out now (used on shutdown). */
|
package/dist/runs/store.js
CHANGED
|
@@ -21,11 +21,29 @@ const stepStateSchema = z.object({
|
|
|
21
21
|
const runRecordSchema = z.object({
|
|
22
22
|
id: z.string(),
|
|
23
23
|
title: z.string(),
|
|
24
|
+
/** Display title (#389): the auto-derived summary of the first agent turn,
|
|
25
|
+
* or the user's inline edit (`PATCH /api/runs/:id` sets it together with
|
|
26
|
+
* `title` so edits always win). The UI shows `titleSummary ?? title`. */
|
|
27
|
+
titleSummary: z.string().optional(),
|
|
28
|
+
/** `git diff --shortstat` of the worktree vs its base, refreshed on every
|
|
29
|
+
* turn-end (#389) — what the quick list / table shows without a git call. */
|
|
30
|
+
diffStat: z
|
|
31
|
+
.object({ adds: z.number(), dels: z.number(), files: z.number() })
|
|
32
|
+
.optional(),
|
|
24
33
|
workflow: z.string(),
|
|
25
34
|
task: z.string(),
|
|
35
|
+
/** URLs of images attached to the initial task prompt, for the thread's first bubble
|
|
36
|
+
* (#image-display) — persisted like agent screenshots, served from `/images/`. */
|
|
37
|
+
taskImages: z.array(z.string()).optional(),
|
|
26
38
|
model: z.string().optional(),
|
|
27
39
|
/** Agent backend this run used — drives "open in CLI" resume command. */
|
|
28
40
|
runner: z.enum(['claude', 'codex', 'opencode']).optional(),
|
|
41
|
+
/** Echo of the extra system prompt this run actually used (R2): the
|
|
42
|
+
* `POST /api/runs` override, or the `config.json` default it fell back to.
|
|
43
|
+
* Deliberately NOT the full composed prompt — skill bodies and the handoff
|
|
44
|
+
* contract are derivable from the persisted workflow and would bloat the
|
|
45
|
+
* index. Resolved at execute time (a queued run picks up config edits). */
|
|
46
|
+
systemPrompt: z.string().optional(),
|
|
29
47
|
status: z.enum(['queued', 'running', 'waiting', 'review', 'done', 'failed', 'cancelled']),
|
|
30
48
|
createdAt: z.string(),
|
|
31
49
|
startedAt: z.string().optional(),
|
|
@@ -44,15 +62,29 @@ const runRecordSchema = z.object({
|
|
|
44
62
|
groupId: z.string().optional(),
|
|
45
63
|
/** Variant letter within the group — 'A' | 'B' | 'C' (kept as a string). */
|
|
46
64
|
variant: z.string().optional(),
|
|
65
|
+
/** Peak resident memory (bytes) / process count observed across the run's
|
|
66
|
+
* agent process trees (#348) — written when a session's telemetry ends.
|
|
67
|
+
* Optional: old runs.json files and `ps`-less platforms have neither. */
|
|
68
|
+
peakRssBytes: z.number().optional(),
|
|
69
|
+
peakProcCount: z.number().optional(),
|
|
47
70
|
archived: z.boolean().default(false),
|
|
48
71
|
archivedAt: z.string().optional(),
|
|
49
72
|
currentStepId: z.string().optional(),
|
|
50
73
|
error: z.string().optional(),
|
|
51
74
|
steps: z.array(stepStateSchema),
|
|
75
|
+
/** Full workflow definition, persisted so a `queued` run can be re-enqueued
|
|
76
|
+
* after a restart (#367) — including ad-hoc "(planned)" chains that exist
|
|
77
|
+
* nowhere else. Kept loose here to avoid an upward import; the run manager
|
|
78
|
+
* validates the shape before reviving it. */
|
|
79
|
+
workflowDef: z.record(z.string(), z.unknown()).optional(),
|
|
52
80
|
});
|
|
53
81
|
const MAX_RUNS_KEPT = 300;
|
|
54
82
|
const MAX_ARCHIVED_KEPT = 500;
|
|
55
83
|
const PR_URL_RE = /https:\/\/github\.com\/[^/\s]+\/[^/\s]+\/pull\/\d+/;
|
|
84
|
+
// The transcript auto-link is convenience only (the cockpit's own `gh pr create` path sets the
|
|
85
|
+
// URL authoritatively). Adopt a PR URL ONLY when the agent actually CREATED one — a task that
|
|
86
|
+
// reviews or merely references an existing PR must not get mislabeled with its number (#fake-pr).
|
|
87
|
+
const CREATED_PR_RE = /\b(?:gh\s+pr\s+create|pull\s*request\s+created|created\s+(?:a\s+)?(?:draft\s+)?(?:pr|pull\s*request)|opened\s+(?:a\s+)?(?:draft\s+)?pull\s*request)\b/i;
|
|
56
88
|
/**
|
|
57
89
|
* File-backed run store: `runs.json` index (atomic tmp+rename writes, the
|
|
58
90
|
* pattern from @cezar/core's IssueStore) plus one append-only NDJSON event
|
|
@@ -68,7 +100,13 @@ export class RunStore extends EventEmitter {
|
|
|
68
100
|
this.dataDir = dataDir;
|
|
69
101
|
this.setMaxListeners(100);
|
|
70
102
|
}
|
|
71
|
-
|
|
103
|
+
/**
|
|
104
|
+
* `keepLive` (#367): leave `queued`/`running`/`waiting` statuses untouched
|
|
105
|
+
* so the caller can recover them (RunManager.recover re-queues queued runs,
|
|
106
|
+
* resumes interrupted ones). Without it — one-shot CLI paths that never
|
|
107
|
+
* recover — live-looking runs are marked failed so no ghost stays behind.
|
|
108
|
+
*/
|
|
109
|
+
static open(dataDir, opts) {
|
|
72
110
|
mkdirSync(join(dataDir, 'runs'), { recursive: true });
|
|
73
111
|
const store = new RunStore(dataDir);
|
|
74
112
|
const indexPath = join(dataDir, 'runs.json');
|
|
@@ -83,9 +121,10 @@ export class RunStore extends EventEmitter {
|
|
|
83
121
|
// `review` survives restarts on purpose: the gate is pure data
|
|
84
122
|
// (worktree + branch + record) with no live process, so the diff
|
|
85
123
|
// panel, Send back (resume) and Draft PR all still work.
|
|
86
|
-
if (
|
|
87
|
-
run.status === '
|
|
88
|
-
|
|
124
|
+
if (!opts?.keepLive &&
|
|
125
|
+
(run.status === 'running' ||
|
|
126
|
+
run.status === 'queued' ||
|
|
127
|
+
run.status === 'waiting')) {
|
|
89
128
|
run.status = 'failed';
|
|
90
129
|
run.error = 'interrupted — cezar process exited during the run';
|
|
91
130
|
run.finishedAt = run.finishedAt ?? new Date().toISOString();
|
|
@@ -202,11 +241,24 @@ export class RunStore extends EventEmitter {
|
|
|
202
241
|
.filter((s) => typeof s === 'string')
|
|
203
242
|
.join(' ');
|
|
204
243
|
const match = PR_URL_RE.exec(haystack);
|
|
205
|
-
if (match)
|
|
244
|
+
if (match && CREATED_PR_RE.test(haystack))
|
|
206
245
|
this.updateRun(runId, { pullRequestUrl: match[0] });
|
|
207
246
|
}
|
|
208
247
|
return full;
|
|
209
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* Fan an event out to live subscribers WITHOUT writing it to the NDJSON
|
|
251
|
+
* file — the channel for coalesced `item.delta` flushes (protocol-v2
|
|
252
|
+
* performance guardrail: raw deltas never hit disk; replay = the persisted
|
|
253
|
+
* snapshots). Stamped with `seq`/`ts` like persisted lines so the live
|
|
254
|
+
* wire keeps one ordering axis; the seq simply never appears in a replay
|
|
255
|
+
* (gaps are fine — dedup compares with `>`).
|
|
256
|
+
*/
|
|
257
|
+
emitEphemeral(runId, event) {
|
|
258
|
+
const full = { ...event, seq: this.nextSeq(runId), ts: new Date().toISOString() };
|
|
259
|
+
this.emit('event', { runId, event: full });
|
|
260
|
+
return full;
|
|
261
|
+
}
|
|
210
262
|
readEvents(runId) {
|
|
211
263
|
try {
|
|
212
264
|
const raw = readFileSync(this.eventsPath(runId), 'utf8');
|
package/dist/runs/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/runs/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/runs/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACrG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,8EAA8E;IAC9E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,oEAAoE;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB;;8EAE0E;IAC1E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC;kFAC8E;IAC9E,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;SACjE,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB;uFACmF;IACnF,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,yEAAyE;IACzE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1D;;;;gFAI4E;IAC5E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACzF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,yEAAyE;IACzE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,gFAAgF;IAChF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,qEAAqE;IACrE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,+EAA+E;IAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,2EAA2E;IAC3E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,4EAA4E;IAC5E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B;;8EAE0E;IAC1E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IAC/B;;;kDAG8C;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1D,CAAC,CAAC;AAcH,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,MAAM,SAAS,GAAG,oDAAoD,CAAC;AACvE,+FAA+F;AAC/F,8FAA8F;AAC9F,kGAAkG;AAClG,MAAM,aAAa,GACjB,wJAAwJ,CAAC;AAE3J;;;;;GAKG;AACH,MAAM,OAAO,QAAS,SAAQ,YAAY;IAIH;IAH7B,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IACpC,SAAS,GAA0B,IAAI,CAAC;IAEhD,YAAqC,OAAe;QAClD,KAAK,EAAE,CAAC;QAD2B,YAAO,GAAP,OAAO,CAAQ;QAElD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,IAA6B;QACxD,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;wBAC9B,iEAAiE;wBACjE,8DAA8D;wBAC9D,+DAA+D;wBAC/D,iEAAiE;wBACjE,yDAAyD;wBACzD,IACE,CAAC,IAAI,EAAE,QAAQ;4BACf,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS;gCACvB,GAAG,CAAC,MAAM,KAAK,QAAQ;gCACvB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,EAC3B,CAAC;4BACD,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;4BACtB,GAAG,CAAC,KAAK,GAAG,mDAAmD,CAAC;4BAChE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;4BAC5D,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gCAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;oCAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;4BACrF,CAAC;wBACH,CAAC;wBACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kEAAkE;YACpE,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,KAST;QACC,MAAM,GAAG,GAAc;YACrB,EAAE,EAAE,UAAU,EAAE;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7B,GAAG,CAAC;gBACJ,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;aACd,CAAC,CAAC;SACJ,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,CAAC,EAAU,EAAE,KAA+C;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,wEAAwE;IACxE,OAAO,CAAC,KAAa,EAAE,IAA6C;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO;QAC5D,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,MAAc,EAAE,KAAqC;QAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;YAAE,OAAO;QAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,WAAW,CAAC,EAAU,EAAE,QAAiB;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACxB,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,uEAAuE;IACvE,eAAe;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1E,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACpB,GAAG,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChB,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,KAAgE;QACzF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,IAAI,GAAa,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACvE,oEAAoE;QACpE,qDAAqD;QACrD,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,wEAAwE;QACxE,iEAAiE;QACjE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;iBACpD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;iBACjD,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;OAOG;IACH,aAAa,CAAC,KAAa,EAAE,KAAgE;QAC3F,MAAM,IAAI,GAAa,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5F,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;YACzD,OAAO,GAAG;iBACP,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACZ,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;gBACtC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,2CAA2C;gBAC1F,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,oBAAoB;YACpF,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;YAC7C,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kDAAkD;IAClD,KAAK;QACH,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,6EAA6E;IAErE,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjC,OAAO,CAAC,KAAa;QAC3B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC;IACvD,CAAC;IAED;4CACwC;IAChC,WAAW,CAAC,KAAa;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED,yEAAyE;IACjE,SAAS,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC;IACvD,CAAC;IAEO,KAAK,CAAC,GAAc;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC;IAEO,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG;YAChB,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;YACtD,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;SAC1D,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrE,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAClE,YAAY;QAClB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;IAC3B,CAAC;IAEO,OAAO;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,GAAG,SAAS,MAAM,CAAC;QACnC,IAAI,CAAC;YACH,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACzE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-summary titles (#389): derive a short display title for a run from the
|
|
3
|
+
* text of an agent turn. Pure by design — the RunManager calls this on
|
|
4
|
+
* turn-end and stores the first informative answer as `RunRecord.titleSummary`.
|
|
5
|
+
*
|
|
6
|
+
* Honest absence beats a garbage title: when the turn text yields nothing
|
|
7
|
+
* better than the raw task's first line (too short, markdown noise only,
|
|
8
|
+
* or a verbatim echo of the task), the answer is `undefined` and the UI
|
|
9
|
+
* keeps showing the raw `title`.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Derive a display title from an agent turn's text, or `undefined` when the
|
|
13
|
+
* text yields nothing more informative than the task itself.
|
|
14
|
+
*/
|
|
15
|
+
export declare function deriveTitleSummary(text: string, task: string): string | undefined;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-summary titles (#389): derive a short display title for a run from the
|
|
3
|
+
* text of an agent turn. Pure by design — the RunManager calls this on
|
|
4
|
+
* turn-end and stores the first informative answer as `RunRecord.titleSummary`.
|
|
5
|
+
*
|
|
6
|
+
* Honest absence beats a garbage title: when the turn text yields nothing
|
|
7
|
+
* better than the raw task's first line (too short, markdown noise only,
|
|
8
|
+
* or a verbatim echo of the task), the answer is `undefined` and the UI
|
|
9
|
+
* keeps showing the raw `title`.
|
|
10
|
+
*/
|
|
11
|
+
/** Display cap, in code points — matches `makeTitle`'s 80-char convention. */
|
|
12
|
+
const MAX_LEN = 80;
|
|
13
|
+
/** A summary shorter than this many words says nothing — skip it. */
|
|
14
|
+
const MIN_WORDS = 4;
|
|
15
|
+
/** Conversational lead-ins that carry no information about the task. Applied
|
|
16
|
+
* repeatedly, so "Sure! I'll go ahead and fix …" strips down to "fix …". */
|
|
17
|
+
const FLUFF_RES = [
|
|
18
|
+
/^(?:sure|okay|ok|alright|great|certainly|understood|got it|sounds good|of course)[,.!:]*\s+/i,
|
|
19
|
+
/^(?:i(?:'|’)?ll|i will|i(?:'|’)?m going to|i(?:'|’)?m about to|let me|let(?:'|’)?s|first,?|now,?)\s+/i,
|
|
20
|
+
/^(?:go ahead and|start by|begin by)\s+/i,
|
|
21
|
+
];
|
|
22
|
+
/** Strip inline markdown emphasis/code from one line. */
|
|
23
|
+
function stripInlineMarkdown(line) {
|
|
24
|
+
return line
|
|
25
|
+
.replace(/^#{1,6}\s+/, '') // heading marker
|
|
26
|
+
.replace(/^(?:[-*+]|\d+[.)])\s+/, '') // list marker
|
|
27
|
+
.replace(/^>\s+/, '') // blockquote marker
|
|
28
|
+
.replace(/\*\*([^*]+)\*\*/g, '$1')
|
|
29
|
+
.replace(/__([^_]+)__/g, '$1')
|
|
30
|
+
.replace(/\*([^*]+)\*/g, '$1')
|
|
31
|
+
.replace(/(^|[\s(])_([^_]+)_(?=[\s).,;:!?]|$)/g, '$1$2') // word-bound _emphasis_, not snake_case
|
|
32
|
+
.replace(/`([^`]*)`/g, '$1')
|
|
33
|
+
.replace(/\[([^\]]+)\]\([^)]*\)/g, '$1') // [text](url) → text
|
|
34
|
+
.trim();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* First sentence of `s`. Sentence end = `.`/`!`/`?` followed by whitespace or
|
|
38
|
+
* end of string — so dots inside paths (`src/store.ts`) don't cut it short.
|
|
39
|
+
*/
|
|
40
|
+
function firstSentence(s) {
|
|
41
|
+
const match = /^(.*?[.!?])(?:\s|$)/.exec(s);
|
|
42
|
+
return (match?.[1] ?? s).replace(/[.!?]+$/, '').trim();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Derive a display title from an agent turn's text, or `undefined` when the
|
|
46
|
+
* text yields nothing more informative than the task itself.
|
|
47
|
+
*/
|
|
48
|
+
export function deriveTitleSummary(text, task) {
|
|
49
|
+
// Fenced code blocks are never titles — drop them (incl. an unclosed one).
|
|
50
|
+
const withoutFences = text.replace(/```[\s\S]*?(?:```|$)/g, '\n');
|
|
51
|
+
const line = withoutFences
|
|
52
|
+
.split('\n')
|
|
53
|
+
.map((l) => stripInlineMarkdown(l))
|
|
54
|
+
.find((l) => l.length > 0);
|
|
55
|
+
if (!line)
|
|
56
|
+
return undefined;
|
|
57
|
+
// Fluff first, sentence second: "Sure! I'll fix …" — the fluff IS the
|
|
58
|
+
// first sentence, so stripping after extraction would keep only "Sure".
|
|
59
|
+
let s = line;
|
|
60
|
+
for (let stripped = true; stripped;) {
|
|
61
|
+
stripped = false;
|
|
62
|
+
for (const re of FLUFF_RES) {
|
|
63
|
+
const next = s.replace(re, '');
|
|
64
|
+
if (next !== s) {
|
|
65
|
+
s = next;
|
|
66
|
+
stripped = true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
s = firstSentence(s.trim());
|
|
71
|
+
// Cap by code points, not UTF-16 units — no split surrogate pairs.
|
|
72
|
+
const chars = [...s];
|
|
73
|
+
if (chars.length > MAX_LEN)
|
|
74
|
+
s = `${chars.slice(0, MAX_LEN - 1).join('').trimEnd()}…`;
|
|
75
|
+
// Informative? More than a few words, and not an echo of the task.
|
|
76
|
+
if (s.split(/\s+/).filter(Boolean).length < MIN_WORDS)
|
|
77
|
+
return undefined;
|
|
78
|
+
const taskFirstLine = (task.trim().split('\n')[0] ?? '').trim().toLowerCase();
|
|
79
|
+
if (s.toLowerCase() === taskFirstLine)
|
|
80
|
+
return undefined;
|
|
81
|
+
const first = [...s][0] ?? '';
|
|
82
|
+
return first.toUpperCase() + s.slice(first.length);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=title-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title-summary.js","sourceRoot":"","sources":["../../src/runs/title-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol-v2 persistence + fan-out policy for one agent session — the
|
|
3
|
+
* RunManager feeds every `UiEvent` a runner emits (`SessionOptions.onUiEvent`)
|
|
4
|
+
* through one sink instance and the sink decides, per the spec's performance
|
|
5
|
+
* guardrails (§"Normalized agent-event protocol v2" and
|
|
6
|
+
* `.ai/analysis/cockpit-ui-redesign/protocol-rationale-and-performance.md` §5):
|
|
7
|
+
*
|
|
8
|
+
* - `item.delta` is COALESCED per item (~40 ms flush) onto the live wire
|
|
9
|
+
* only — raw deltas NEVER hit the NDJSON file; replay needs no delta
|
|
10
|
+
* reduction because every item's final state rides `item.completed`.
|
|
11
|
+
* - Everything else persists as snapshots via `persist()` (the store stamps
|
|
12
|
+
* `seq`/`ts`, and `appendEvent` already fans persisted lines out live, so
|
|
13
|
+
* a persisted event is never double-emitted here).
|
|
14
|
+
* - `item.updated` hits disk only on a meaningful change (status flip, new
|
|
15
|
+
* diffs/title/…) — streamed-content-only growth goes to the live wire
|
|
16
|
+
* ephemerally, mirroring what the deltas already carry.
|
|
17
|
+
* - `usage.updated` is cumulative per session: persisted only when the
|
|
18
|
+
* total (or cost) actually moved, mirroring v1's token-usage cadence.
|
|
19
|
+
*
|
|
20
|
+
* Output errors are swallowed: v2 is additive and best-effort — a persist
|
|
21
|
+
* failure (e.g. the run was deleted mid-flush) must never disturb the v1
|
|
22
|
+
* stream or crash a timer callback.
|
|
23
|
+
*/
|
|
24
|
+
import type { StopReason, UiEvent } from '../core/ui-events.js';
|
|
25
|
+
/** Spec guardrail: coalesce `item.delta` at ~30–50 ms boundaries. */
|
|
26
|
+
export declare const DELTA_FLUSH_MS = 40;
|
|
27
|
+
/**
|
|
28
|
+
* v2 lines share the NDJSON file and the store's event bus with v1, but ride
|
|
29
|
+
* a DIFFERENT SSE event name (`ui-event` vs `run-event`) so the legacy UI —
|
|
30
|
+
* which knew only `run-event` and JSON-dumped unknown types into the
|
|
31
|
+
* transcript; retired in R7, but the name split stays as wire shape — never
|
|
32
|
+
* saw them. The discriminator is the dotted namespace:
|
|
33
|
+
* every v2 type on the wire is dotted (`item.started`, `turn.completed`, …)
|
|
34
|
+
* and no v1 type is. v2's only undotted type, `image`, never reaches the
|
|
35
|
+
* store: the sink drops it in favor of the v1 image pipeline (which persists
|
|
36
|
+
* the file and re-emits a URL instead of raw base64).
|
|
37
|
+
*/
|
|
38
|
+
export declare function isV2WireEventType(type: string): boolean;
|
|
39
|
+
/** A loose event as the store consumes it (the sink adds no seq/ts — the
|
|
40
|
+
* store stamps those). */
|
|
41
|
+
type WireEvent = {
|
|
42
|
+
type: string;
|
|
43
|
+
[key: string]: unknown;
|
|
44
|
+
};
|
|
45
|
+
export interface UiEventSinkOutput {
|
|
46
|
+
/** Append to the run's NDJSON file (which also fans out live). */
|
|
47
|
+
persist(event: WireEvent): void;
|
|
48
|
+
/** Fan out live only — never written to disk (coalesced deltas). */
|
|
49
|
+
emitLive(event: WireEvent): void;
|
|
50
|
+
}
|
|
51
|
+
export declare class UiEventSink {
|
|
52
|
+
private readonly out;
|
|
53
|
+
private readonly flushMs;
|
|
54
|
+
/** Pending delta text per open item, per streamed field (insertion order
|
|
55
|
+
* preserved so a flush replays fields in first-arrival order). */
|
|
56
|
+
private readonly buffers;
|
|
57
|
+
private readonly timers;
|
|
58
|
+
/** Last persisted non-streamed shape per item — the `item.updated`
|
|
59
|
+
* meaningful-change filter. */
|
|
60
|
+
private readonly shapes;
|
|
61
|
+
private lastUsage;
|
|
62
|
+
private ended;
|
|
63
|
+
constructor(out: UiEventSinkOutput, flushMs?: number);
|
|
64
|
+
/** Fold one runner-emitted v2 event into the persist/live outputs. */
|
|
65
|
+
handle(event: UiEvent): void;
|
|
66
|
+
/**
|
|
67
|
+
* Session close, called by the RunManager exactly once when the v1 session
|
|
68
|
+
* settles: flush everything, then persist v2 `session.error` (fatal) when
|
|
69
|
+
* the session failed, and `session.ended` — the v2 counterparts of v1's
|
|
70
|
+
* `done`/`error`, which the mappers deliberately left to the RunManager.
|
|
71
|
+
*/
|
|
72
|
+
sessionEnded(reason: StopReason, errorMessage?: string): void;
|
|
73
|
+
/** Flush every open coalescer now (turn end, session settle). */
|
|
74
|
+
flushAll(): void;
|
|
75
|
+
private bufferDelta;
|
|
76
|
+
/** Emit one merged `item.delta` per buffered field of the item, live only. */
|
|
77
|
+
private flushItem;
|
|
78
|
+
private persist;
|
|
79
|
+
private emitLive;
|
|
80
|
+
}
|
|
81
|
+
export {};
|