wicked-crew 0.15.9 → 0.16.0

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.
Files changed (65) hide show
  1. package/dist/api/chat-attachments.d.ts +102 -0
  2. package/dist/api/chat-attachments.d.ts.map +1 -0
  3. package/dist/api/chat-attachments.js +438 -0
  4. package/dist/api/chat-attachments.js.map +1 -0
  5. package/dist/api/chat-history.d.ts +90 -0
  6. package/dist/api/chat-history.d.ts.map +1 -0
  7. package/dist/api/chat-history.js +279 -0
  8. package/dist/api/chat-history.js.map +1 -0
  9. package/dist/api/chat-transcripts.d.ts +4 -2
  10. package/dist/api/chat-transcripts.d.ts.map +1 -1
  11. package/dist/api/chat-transcripts.js +13 -2
  12. package/dist/api/chat-transcripts.js.map +1 -1
  13. package/dist/api/roster-standing.d.ts.map +1 -1
  14. package/dist/api/roster-standing.js +8 -1
  15. package/dist/api/roster-standing.js.map +1 -1
  16. package/dist/api/routes.d.ts +39 -0
  17. package/dist/api/routes.d.ts.map +1 -1
  18. package/dist/api/routes.js +478 -36
  19. package/dist/api/routes.js.map +1 -1
  20. package/dist/api/seat-agents.d.ts +11 -3
  21. package/dist/api/seat-agents.d.ts.map +1 -1
  22. package/dist/api/seat-agents.js +2 -0
  23. package/dist/api/seat-agents.js.map +1 -1
  24. package/dist/api/seat-bench-trail.d.ts +3 -1
  25. package/dist/api/seat-bench-trail.d.ts.map +1 -1
  26. package/dist/api/seat-bench-trail.js +27 -9
  27. package/dist/api/seat-bench-trail.js.map +1 -1
  28. package/dist/api/seat-health.d.ts +56 -1
  29. package/dist/api/seat-health.d.ts.map +1 -1
  30. package/dist/api/seat-health.js +147 -19
  31. package/dist/api/seat-health.js.map +1 -1
  32. package/dist/api/seat-standing.d.ts +11 -0
  33. package/dist/api/seat-standing.d.ts.map +1 -1
  34. package/dist/api/seat-standing.js +13 -6
  35. package/dist/api/seat-standing.js.map +1 -1
  36. package/dist/api/server.d.ts.map +1 -1
  37. package/dist/api/server.js +18 -0
  38. package/dist/api/server.js.map +1 -1
  39. package/dist/api/stall-watchdog.d.ts +10 -0
  40. package/dist/api/stall-watchdog.d.ts.map +1 -1
  41. package/dist/api/stall-watchdog.js +12 -0
  42. package/dist/api/stall-watchdog.js.map +1 -1
  43. package/dist/api/system-snapshot.d.ts +382 -0
  44. package/dist/api/system-snapshot.d.ts.map +1 -0
  45. package/dist/api/system-snapshot.js +1164 -0
  46. package/dist/api/system-snapshot.js.map +1 -0
  47. package/dist/core/deliver.d.ts.map +1 -1
  48. package/dist/core/deliver.js +5 -3
  49. package/dist/core/deliver.js.map +1 -1
  50. package/dist/editors/registry.d.ts +20 -20
  51. package/dist/studio/assets/{index-CohD3vXU.js → index-BnnXv6Ij.js} +242 -226
  52. package/dist/studio/assets/index-Ce_RMQzq.css +32 -0
  53. package/dist/studio/editors/wicked-deck/editor.json +1 -1
  54. package/dist/studio/editors/wicked-deck/index.html +1 -1
  55. package/dist/studio/editors/wicked-doc/editor.json +1 -1
  56. package/dist/studio/editors/wicked-doc/index.html +1 -1
  57. package/dist/studio/editors/wicked-page/editor.json +1 -1
  58. package/dist/studio/editors/wicked-page/index.html +1 -1
  59. package/dist/studio/editors/wicked-video/editor.json +1 -1
  60. package/dist/studio/editors/wicked-video/index.html +1 -1
  61. package/dist/studio/index.html +2 -2
  62. package/dist/studio/testid-inventory.json +569 -88
  63. package/endpoint-manifest.json +47 -1
  64. package/package.json +3 -3
  65. package/dist/studio/assets/index-CmNUtpfw.css +0 -32
@@ -0,0 +1,90 @@
1
+ /**
2
+ * The system chat's HISTORY (DES-SYSTEM-CHAT "Crew" §1, api-types 0.137.0).
3
+ *
4
+ * A chat's live transcript (`chat-transcripts.ts`) lives as long as the chat. The history keeps it
5
+ * after: every chat opened on this daemon gets an entry (`<state home>/chats/history/<id>.json`:
6
+ * who opened it, where, which CLI, when, open or closed), and when the chat ends — Close, the
7
+ * engine's idle or pool-cap close, a daemon restart — its transcript is COPIED beside the entry
8
+ * (`<id>.jsonl`). Only `DELETE /chats/:id` removes an entry, with its transcript and attachments.
9
+ *
10
+ * Title, message count and last activity are DERIVED from the transcript when read (the live file
11
+ * for an open chat, the kept copy for a closed one), never stored twice.
12
+ *
13
+ * A chat id is minted by the client and may be reused. Opening an id whose history is closed moves
14
+ * the old entry to `<id>--<closedAt ms>` first, so a reuse never overwrites a past conversation.
15
+ */
16
+ import type { ChatHistoryEntry, ChatStartedOn, ChatTranscriptRecord } from '../core/types.js';
17
+ import type { ChatAttachmentStore } from './chat-attachments.js';
18
+ export declare const CHAT_HISTORY_DEFAULT_LIMIT = 20;
19
+ export declare const CHAT_HISTORY_MAX_LIMIT = 100;
20
+ export declare function defaultChatHistoryDir(): string;
21
+ /** The transcript reader the history derives from (the live store). */
22
+ export interface TranscriptReader {
23
+ /** `<dir>/<id>.jsonl` of the LIVE transcript, or null for a refused id. */
24
+ pathOf(chatId: string): string | null;
25
+ }
26
+ /** The first operator message, whitespace-collapsed and cut at {@link TITLE_MAX} characters. */
27
+ export declare function titleOf(records: readonly ChatTranscriptRecord[]): string;
28
+ export declare function decodeCursor(cursor: string): {
29
+ updatedAt: number;
30
+ id: string;
31
+ } | null;
32
+ export declare class ChatHistoryStore {
33
+ private readonly transcripts;
34
+ private readonly attachments;
35
+ readonly dir: string;
36
+ private readonly now;
37
+ constructor(transcripts: TranscriptReader, attachments: ChatAttachmentStore | null, opts?: {
38
+ dir?: string;
39
+ now?: () => number;
40
+ });
41
+ private valid;
42
+ private metaPath;
43
+ private keptPath;
44
+ private ensureDir;
45
+ private read;
46
+ private write;
47
+ /** A chat was opened: a fresh entry. A CLOSED entry under the same id is kept under a new id. */
48
+ opened(id: string, opts: {
49
+ startedOn?: ChatStartedOn | undefined;
50
+ cli: string | null;
51
+ actorId: string | null;
52
+ }): void;
53
+ /** An archive id for a reused chat id that names NOTHING yet — no entry, no kept transcript, no
54
+ * attachments (a client may have chosen `x--T` itself; it is never overwritten). */
55
+ private freeArchiveId;
56
+ /** The chat's answering CLI became known (the path's primary agent). */
57
+ setCli(id: string, cli: string): void;
58
+ /** The chat ended (any reason): keep its transcript. Idempotent; no entry ⇒ nothing (a chat this
59
+ * daemon never opened). */
60
+ closed(id: string): void;
61
+ /** `DELETE /chats/:id`: the entry, its kept transcript and its attachments go. */
62
+ remove(id: string): void;
63
+ /** Daemon boot: every entry still `open` belonged to the previous process — close it (keeping its
64
+ * transcript) BEFORE the live transcripts are cleared. */
65
+ closeOrphaned(): number;
66
+ /** The records of a chat: the live transcript while open, the kept copy once closed. */
67
+ messages(id: string): ChatTranscriptRecord[] | null;
68
+ private sourceOf;
69
+ private updatedAtOf;
70
+ private view;
71
+ /** Whether `actorId` may see the entry: entries are per opener under `auth: required`
72
+ * (`actorId` null = local mode, everyone). An unknown id is nobody's. */
73
+ visibleTo(id: string, actorId: string | null): boolean;
74
+ /** One entry, or null. `liveCli`: the answering CLI the live path knows now. */
75
+ entry(id: string, liveCli?: string | null, isLive?: (id: string) => boolean): ChatHistoryEntry | null;
76
+ /** A page of entries, newest activity first. */
77
+ list(opts: {
78
+ limit?: number;
79
+ cursor?: string | null;
80
+ status?: 'open' | 'closed' | 'all';
81
+ actorId?: string | null;
82
+ liveCli?: (id: string) => string | null;
83
+ /** Whether the chat is held live by this daemon now. */
84
+ isLive?: (id: string) => boolean;
85
+ }): {
86
+ items: ChatHistoryEntry[];
87
+ nextCursor: string | null;
88
+ };
89
+ }
90
+ //# sourceMappingURL=chat-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-history.d.ts","sourceRoot":"","sources":["../../src/api/chat-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE9F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAG1C,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAcD,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,gGAAgG;AAChG,wBAAgB,OAAO,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GAAG,MAAM,CAMxE;AAqBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQrF;AAED,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAL9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAGhB,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,mBAAmB,GAAG,IAAI,EACxD,IAAI,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAMjD,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,KAAK;IAOb,iGAAiG;IACjG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IA0BrH;yFACqF;IACrF,OAAO,CAAC,aAAa;IAUrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKrC;gCAC4B;IAC5B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAgBxB,kFAAkF;IAClF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOxB;+DAC2D;IAC3D,aAAa,IAAI,MAAM;IAcvB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,EAAE,GAAG,IAAI;IAMnD,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,IAAI;IAmBZ;8EAC0E;IAC1E,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAMtD,gFAAgF;IAChF,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,gBAAgB,GAAG,IAAI;IAKrG,gDAAgD;IAChD,IAAI,CAAC,IAAI,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACnC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;QACxC,wDAAwD;QACxD,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;KAClC,GAAG;QAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAuB7D"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * The system chat's HISTORY (DES-SYSTEM-CHAT "Crew" §1, api-types 0.137.0).
3
+ *
4
+ * A chat's live transcript (`chat-transcripts.ts`) lives as long as the chat. The history keeps it
5
+ * after: every chat opened on this daemon gets an entry (`<state home>/chats/history/<id>.json`:
6
+ * who opened it, where, which CLI, when, open or closed), and when the chat ends — Close, the
7
+ * engine's idle or pool-cap close, a daemon restart — its transcript is COPIED beside the entry
8
+ * (`<id>.jsonl`). Only `DELETE /chats/:id` removes an entry, with its transcript and attachments.
9
+ *
10
+ * Title, message count and last activity are DERIVED from the transcript when read (the live file
11
+ * for an open chat, the kept copy for a closed one), never stored twice.
12
+ *
13
+ * A chat id is minted by the client and may be reused. Opening an id whose history is closed moves
14
+ * the old entry to `<id>--<closedAt ms>` first, so a reuse never overwrites a past conversation.
15
+ */
16
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, utimesSync, writeFileSync } from 'node:fs';
17
+ import { join } from 'node:path';
18
+ import { crewStateHome } from '../projects/state-home.js';
19
+ import { CHAT_ID } from './chat-scope.js';
20
+ export const CHAT_HISTORY_DEFAULT_LIMIT = 20;
21
+ export const CHAT_HISTORY_MAX_LIMIT = 100;
22
+ const TITLE_MAX = 80;
23
+ export function defaultChatHistoryDir() {
24
+ return join(crewStateHome(), 'chats', 'history');
25
+ }
26
+ /** The first operator message, whitespace-collapsed and cut at {@link TITLE_MAX} characters. */
27
+ export function titleOf(records) {
28
+ const first = records.find((r) => r.kind === 'user');
29
+ if (first === undefined || first.kind !== 'user')
30
+ return 'New chat';
31
+ const t = first.text.replace(/\s+/g, ' ').trim();
32
+ if (t === '')
33
+ return 'New chat';
34
+ return t.length <= TITLE_MAX ? t : `${t.slice(0, TITLE_MAX - 1).trimEnd()}…`;
35
+ }
36
+ function readRecords(path) {
37
+ if (!existsSync(path))
38
+ return [];
39
+ const out = [];
40
+ for (const line of readFileSync(path, 'utf8').split('\n')) {
41
+ if (line.trim() === '')
42
+ continue;
43
+ try {
44
+ out.push(JSON.parse(line));
45
+ }
46
+ catch {
47
+ // a torn last line (a crash mid-append) costs that line only
48
+ }
49
+ }
50
+ return out;
51
+ }
52
+ /** An opaque page cursor: the last item's `updatedAt` ms and id. */
53
+ function encodeCursor(updatedAt, id) {
54
+ return Buffer.from(JSON.stringify([updatedAt, id]), 'utf8').toString('base64url');
55
+ }
56
+ export function decodeCursor(cursor) {
57
+ try {
58
+ const v = JSON.parse(Buffer.from(cursor, 'base64url').toString('utf8'));
59
+ if (Array.isArray(v) && typeof v[0] === 'number' && typeof v[1] === 'string')
60
+ return { updatedAt: v[0], id: v[1] };
61
+ }
62
+ catch {
63
+ /* fall through */
64
+ }
65
+ return null;
66
+ }
67
+ export class ChatHistoryStore {
68
+ transcripts;
69
+ attachments;
70
+ dir;
71
+ now;
72
+ constructor(transcripts, attachments, opts = {}) {
73
+ this.transcripts = transcripts;
74
+ this.attachments = attachments;
75
+ this.dir = opts.dir ?? defaultChatHistoryDir();
76
+ this.now = opts.now ?? Date.now;
77
+ }
78
+ valid(id) {
79
+ return CHAT_ID.test(id) && id !== '.' && id !== '..';
80
+ }
81
+ metaPath(id) {
82
+ return join(this.dir, `${id}.json`);
83
+ }
84
+ keptPath(id) {
85
+ return join(this.dir, `${id}.jsonl`);
86
+ }
87
+ ensureDir() {
88
+ mkdirSync(this.dir, { recursive: true, mode: 0o700 });
89
+ if (process.platform !== 'win32')
90
+ chmodSync(this.dir, 0o700);
91
+ }
92
+ read(id) {
93
+ if (!this.valid(id))
94
+ return null;
95
+ try {
96
+ return JSON.parse(readFileSync(this.metaPath(id), 'utf8'));
97
+ }
98
+ catch {
99
+ return null;
100
+ }
101
+ }
102
+ write(e) {
103
+ this.ensureDir();
104
+ const tmp = `${this.metaPath(e.id)}.tmp`;
105
+ writeFileSync(tmp, JSON.stringify(e), { mode: 0o600 });
106
+ renameSync(tmp, this.metaPath(e.id));
107
+ }
108
+ /** A chat was opened: a fresh entry. A CLOSED entry under the same id is kept under a new id. */
109
+ opened(id, opts) {
110
+ if (!this.valid(id))
111
+ return;
112
+ let prev = this.read(id);
113
+ // An entry still `open` here is stale: this daemon only opens an id it does not hold, so that
114
+ // chat ended without the close fold seeing it. Close it (keeping its transcript) first.
115
+ if (prev !== null && prev.status === 'open') {
116
+ this.closed(id);
117
+ prev = this.read(id);
118
+ }
119
+ if (prev !== null) {
120
+ const keptId = this.freeArchiveId(id, prev.closedAt ?? this.now());
121
+ this.attachments?.rename(id, keptId);
122
+ if (existsSync(this.keptPath(id)))
123
+ renameSync(this.keptPath(id), this.keptPath(keptId));
124
+ this.write({ ...prev, id: keptId });
125
+ rmSync(this.metaPath(id), { force: true });
126
+ }
127
+ this.write({
128
+ id,
129
+ startedOn: opts.startedOn ?? null,
130
+ cli: opts.cli,
131
+ createdAt: this.now(),
132
+ status: 'open',
133
+ actorId: opts.actorId,
134
+ });
135
+ }
136
+ /** An archive id for a reused chat id that names NOTHING yet — no entry, no kept transcript, no
137
+ * attachments (a client may have chosen `x--T` itself; it is never overwritten). */
138
+ freeArchiveId(id, closedAt) {
139
+ const base = `${id}--${closedAt}`;
140
+ for (let n = 0;; n += 1) {
141
+ const candidate = n === 0 ? base : `${base}-${n}`;
142
+ if (!existsSync(this.metaPath(candidate)) && !existsSync(this.keptPath(candidate)) && !(this.attachments?.exists(candidate) ?? false)) {
143
+ return candidate;
144
+ }
145
+ }
146
+ }
147
+ /** The chat's answering CLI became known (the path's primary agent). */
148
+ setCli(id, cli) {
149
+ const e = this.read(id);
150
+ if (e !== null && e.cli !== cli)
151
+ this.write({ ...e, cli });
152
+ }
153
+ /** The chat ended (any reason): keep its transcript. Idempotent; no entry ⇒ nothing (a chat this
154
+ * daemon never opened). */
155
+ closed(id) {
156
+ const e = this.read(id);
157
+ if (e === null || e.status === 'closed')
158
+ return;
159
+ const live = this.transcripts.pathOf(id);
160
+ if (live !== null && existsSync(live)) {
161
+ this.ensureDir();
162
+ copyFileSync(live, this.keptPath(id));
163
+ if (process.platform !== 'win32')
164
+ chmodSync(this.keptPath(id), 0o600);
165
+ // The copy keeps the conversation's own last-activity time (the list sorts on it), never the
166
+ // moment of the close (xreview r1 on #1140).
167
+ const st = statSync(live);
168
+ utimesSync(this.keptPath(id), st.atime, st.mtime);
169
+ }
170
+ this.write({ ...e, status: 'closed', closedAt: this.now() });
171
+ }
172
+ /** `DELETE /chats/:id`: the entry, its kept transcript and its attachments go. */
173
+ remove(id) {
174
+ if (!this.valid(id))
175
+ return;
176
+ rmSync(this.metaPath(id), { force: true });
177
+ rmSync(this.keptPath(id), { force: true });
178
+ this.attachments?.removeChat(id);
179
+ }
180
+ /** Daemon boot: every entry still `open` belonged to the previous process — close it (keeping its
181
+ * transcript) BEFORE the live transcripts are cleared. */
182
+ closeOrphaned() {
183
+ if (!existsSync(this.dir))
184
+ return 0;
185
+ let n = 0;
186
+ for (const f of readdirSync(this.dir)) {
187
+ if (!f.endsWith('.json'))
188
+ continue;
189
+ const e = this.read(f.slice(0, -5));
190
+ if (e?.status === 'open') {
191
+ this.closed(e.id);
192
+ n += 1;
193
+ }
194
+ }
195
+ return n;
196
+ }
197
+ /** The records of a chat: the live transcript while open, the kept copy once closed. */
198
+ messages(id) {
199
+ const e = this.read(id);
200
+ if (e === null)
201
+ return null;
202
+ return readRecords(this.sourceOf(e) ?? '');
203
+ }
204
+ sourceOf(e) {
205
+ if (e.status === 'closed')
206
+ return this.keptPath(e.id);
207
+ const live = this.transcripts.pathOf(e.id);
208
+ return live;
209
+ }
210
+ updatedAtOf(e) {
211
+ const src = this.sourceOf(e);
212
+ try {
213
+ if (src !== null)
214
+ return Math.max(e.createdAt, Math.floor(statSync(src).mtimeMs));
215
+ }
216
+ catch {
217
+ /* no transcript yet */
218
+ }
219
+ return e.createdAt;
220
+ }
221
+ view(e, updatedAt, liveCli, isLive) {
222
+ // An entry still marked open whose chat this daemon no longer holds ended without the close fold
223
+ // seeing it (a route set without the fold): it reads closed, never a live chat that is not.
224
+ const records = readRecords(this.sourceOf(e) ?? '');
225
+ if (e.status === 'open' && isLive !== undefined && !isLive(e.id))
226
+ e = { ...e, status: 'closed' };
227
+ return {
228
+ id: e.id,
229
+ title: titleOf(records),
230
+ startedOn: e.startedOn,
231
+ cli: liveCli ?? e.cli,
232
+ createdAt: new Date(e.createdAt).toISOString(),
233
+ updatedAt: new Date(updatedAt).toISOString(),
234
+ messageCount: records.filter((r) => r.kind === 'user' || r.kind === 'seat').length,
235
+ attachmentCount: this.attachments?.count(e.id) ?? 0,
236
+ status: e.status,
237
+ ...(e.status === 'closed' && e.closedAt !== undefined ? { closedAt: new Date(e.closedAt).toISOString() } : {}),
238
+ };
239
+ }
240
+ /** Whether `actorId` may see the entry: entries are per opener under `auth: required`
241
+ * (`actorId` null = local mode, everyone). An unknown id is nobody's. */
242
+ visibleTo(id, actorId) {
243
+ const e = this.read(id);
244
+ if (e === null)
245
+ return false;
246
+ return actorId === null || e.actorId === null || e.actorId === actorId;
247
+ }
248
+ /** One entry, or null. `liveCli`: the answering CLI the live path knows now. */
249
+ entry(id, liveCli, isLive) {
250
+ const e = this.read(id);
251
+ return e === null ? null : this.view(e, this.updatedAtOf(e), liveCli, isLive);
252
+ }
253
+ /** A page of entries, newest activity first. */
254
+ list(opts) {
255
+ const limit = Math.min(Math.max(opts.limit ?? CHAT_HISTORY_DEFAULT_LIMIT, 1), CHAT_HISTORY_MAX_LIMIT);
256
+ if (!existsSync(this.dir))
257
+ return { items: [], nextCursor: null };
258
+ const after = opts.cursor ? decodeCursor(opts.cursor) : null;
259
+ const all = readdirSync(this.dir)
260
+ .filter((f) => f.endsWith('.json'))
261
+ .map((f) => this.read(f.slice(0, -5)))
262
+ .filter((e) => e !== null)
263
+ // The EFFECTIVE status (an `open` entry whose chat is not live reads closed) is what filters.
264
+ .map((e) => (e.status === 'open' && opts.isLive !== undefined && !opts.isLive(e.id) ? { ...e, status: 'closed' } : e))
265
+ .filter((e) => opts.status === undefined || opts.status === 'all' || e.status === opts.status)
266
+ .filter((e) => opts.actorId === undefined || opts.actorId === null || e.actorId === opts.actorId)
267
+ .map((e) => ({ e, at: this.updatedAtOf(e) }))
268
+ .sort((a, b) => b.at - a.at || b.e.id.localeCompare(a.e.id));
269
+ const start = after === null ? 0 : all.findIndex((x) => x.at < after.updatedAt || (x.at === after.updatedAt && x.e.id.localeCompare(after.id) < 0));
270
+ const page = start < 0 ? [] : all.slice(start, start + limit);
271
+ const last = page[page.length - 1];
272
+ const more = start >= 0 && start + limit < all.length;
273
+ return {
274
+ items: page.map(({ e, at }) => this.view(e, at, e.status === 'open' ? opts.liveCli?.(e.id) ?? null : null, opts.isLive)),
275
+ nextCursor: more && last !== undefined ? encodeCursor(last.at, last.e.id) : null,
276
+ };
277
+ }
278
+ }
279
+ //# sourceMappingURL=chat-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-history.js","sourceRoot":"","sources":["../../src/api/chat-history.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@
26
26
  * Registered in `tests/fixtures/state-home-subtrees.json` as `chats` (crew half; the core half —
27
27
  * the worker Read fence — landed with core-ts 0.7.26), and named in `state-home-registry.ts`.
28
28
  */
29
- import type { ChatCitationItem, ChatTranscriptRecord, CoreEvent, DecisionView } from '../core/types.js';
29
+ import type { ChatAttachment, ChatCitationItem, ChatTranscriptRecord, CoreEvent, DecisionView } from '../core/types.js';
30
30
  /** The state-home entry (`<state home>/chats/`) — the name the fixture registers. */
31
31
  export declare const CHAT_TRANSCRIPTS_DIRNAME = "chats";
32
32
  export { rewriteHostPaths, withRootAliases, type ChatRepoRoot } from '../core/host-paths.js';
@@ -55,11 +55,13 @@ export declare class ChatTranscriptStore {
55
55
  registerRoots(chatId: string, repos: ReadonlyArray<ChatRepoRoot>): void;
56
56
  /** The directory this store writes under (diagnostics / tests). */
57
57
  get directory(): string;
58
+ /** The live transcript's path (the history copies it when the chat ends — `chat-history.ts`). */
59
+ pathOf(chatId: string): string | null;
58
60
  /** `<dir>/<chatId>.jsonl` — or `null` for an id the chat-id guard refuses (never a path). */
59
61
  private fileOf;
60
62
  private append;
61
63
  /** The operator's message a send delivered, with the seats the engine reached (the 202's `seats`). */
62
- appendUser(chatId: string, turnId: string, text: string, seats: readonly string[]): void;
64
+ appendUser(chatId: string, turnId: string, text: string, seats: readonly string[], attachments?: readonly ChatAttachment[]): void;
63
65
  /** DC-S7: a crew-authored preface the seats received with that turn's message — disclosed, verbatim. */
64
66
  appendSystem(chatId: string, turnId: string, text: string): void;
65
67
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chat-transcripts.d.ts","sourceRoot":"","sources":["../../src/api/chat-transcripts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAa,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKnH,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAIhD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE7F,8FAA8F;AAC9F,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAgBD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkD;IAC5E,yGAAyG;IACzG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAExC,IAAI,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAK3D;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI;IAKvE,mEAAmE;IACnE,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,6FAA6F;IAC7F,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;IAcd,sGAAsG;IACtG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAIxF,wGAAwG;IACxG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhE;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI;IAqBjC;;;;;;;;OAQG;IACH,eAAe,CAAC,KAAK,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,gBAAgB,EAAE,CAAC;KAC3B,GAAG,IAAI;IAmBR,gGAAgG;IAChG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,EAAE;IAe5C;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS;IA+BzC;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOjE;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,EAAE,CAAA;KAAE,GAAG,IAAI;IAMrF,gFAAgF;IAChF,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO1B;;;;OAIG;IACH,aAAa,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;CAU1D"}
1
+ {"version":3,"file":"chat-transcripts.d.ts","sourceRoot":"","sources":["../../src/api/chat-transcripts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAa,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKnI,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAIhD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE7F,8FAA8F;AAC9F,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAgBD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkD;IAC5E,yGAAyG;IACzG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAExC,IAAI,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAK3D;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI;IAKvE,mEAAmE;IACnE,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,iGAAiG;IACjG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrC,6FAA6F;IAC7F,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;IAcd,sGAAsG;IACtG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI;IAWjI,wGAAwG;IACxG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhE;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI;IAqBjC;;;;;;;;OAQG;IACH,eAAe,CAAC,KAAK,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,gBAAgB,EAAE,CAAC;KAC3B,GAAG,IAAI;IAmBR,gGAAgG;IAChG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,EAAE;IAe5C;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS;IA+BzC;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOjE;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,EAAE,CAAA;KAAE,GAAG,IAAI;IAMrF,gFAAgF;IAChF,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO1B;;;;OAIG;IACH,aAAa,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;CAU1D"}
@@ -82,6 +82,10 @@ export class ChatTranscriptStore {
82
82
  get directory() {
83
83
  return this.dir;
84
84
  }
85
+ /** The live transcript's path (the history copies it when the chat ends — `chat-history.ts`). */
86
+ pathOf(chatId) {
87
+ return this.fileOf(chatId);
88
+ }
85
89
  /** `<dir>/<chatId>.jsonl` — or `null` for an id the chat-id guard refuses (never a path). */
86
90
  fileOf(chatId) {
87
91
  return CHAT_ID.test(chatId) ? join(this.dir, `${chatId}.jsonl`) : null;
@@ -102,8 +106,15 @@ export class ChatTranscriptStore {
102
106
  }
103
107
  }
104
108
  /** The operator's message a send delivered, with the seats the engine reached (the 202's `seats`). */
105
- appendUser(chatId, turnId, text, seats) {
106
- this.append(chatId, { at: this.now(), turnId, kind: 'user', text, seats: [...seats] });
109
+ appendUser(chatId, turnId, text, seats, attachments) {
110
+ this.append(chatId, {
111
+ at: this.now(),
112
+ turnId,
113
+ kind: 'user',
114
+ text,
115
+ seats: [...seats],
116
+ ...(attachments !== undefined && attachments.length > 0 ? { attachments: [...attachments] } : {}),
117
+ });
107
118
  }
108
119
  /** DC-S7: a crew-authored preface the seats received with that turn's message — disclosed, verbatim. */
109
120
  appendSystem(chatId, turnId, text) {
@@ -1 +1 @@
1
- {"version":3,"file":"chat-transcripts.js","sourceRoot":"","sources":["../../src/api/chat-transcripts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-transcripts.js","sourceRoot":"","sources":["../../src/api/chat-transcripts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"roster-standing.d.ts","sourceRoot":"","sources":["../../src/api/roster-standing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roster-standing.d.ts","sourceRoot":"","sources":["../../src/api/roster-standing.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ import { signedInHeuristic } from './seat-signin.js';
26
26
  import { SeatProbe } from './seat-probe.js';
27
27
  import { SeatContainerStatus, isContainerLoginCli, isContainerSeatFloor, isHostSeatFloor } from './seat-container-login.js';
28
28
  import { seatGovernanceModes } from './seat-governance.js';
29
- import { HOST_FLOOR_UNKNOWN_COPY, seatStanding, chatSeatAdmission } from './seat-standing.js';
29
+ import { HOST_FLOOR_UNKNOWN_COPY, recentBenchReason, seatStanding, chatSeatAdmission } from './seat-standing.js';
30
30
  import { seatVersion, seatVersions } from './seat-version.js';
31
31
  // The adapter loads this same addon module. Keep the optional 0.11.1 static local until the
32
32
  // adapter's surface catches up; detect it at read time, not when the daemon factory is built.
@@ -255,6 +255,10 @@ export function rosterWithStandingFactory(deps) {
255
255
  seatHealth.clearRecentBench(key);
256
256
  recentBench = null;
257
257
  }
258
+ else if (recentBench === null && probed !== undefined && probed.signedIn === true && probed.check === 'live') {
259
+ // (J4) …and the quota strikes an already-lifted bench left behind.
260
+ seatHealth.clearQuotaStrikesAfterLiveCheck(key, Date.parse(probed.probedAt));
261
+ }
258
262
  const heuristic = containerSeat ? null : signedIn(key, root);
259
263
  const signed = containerSeat
260
264
  ? broker?.signed_in ?? null
@@ -343,6 +347,9 @@ export function rosterWithStandingFactory(deps) {
343
347
  ...(version !== undefined ? { version } : {}),
344
348
  ...(account !== undefined ? { account } : {}),
345
349
  ...(recentBench !== null ? { recent_bench: recentBenchWire(recentBench) } : {}),
350
+ // (J4) The active bench, flat, for the Nerve Center (`SystemCli.benchedUntil` /
351
+ // `stateReason`): when it lifts and why, in the operator's words.
352
+ ...(recentBench !== null ? { benchedUntil: recentBench.until, benchReason: recentBenchReason(recentBench) } : {}),
346
353
  ...(inputs !== null ? { work_admission: workAdmission(inputs) } : {}),
347
354
  ...(inputs !== null && skillAdmitted !== null ? { qe_reviewer: qeReviewer(inputs, skillAdmitted) } : {}),
348
355
  };