@comput/pi-intercom 0.3.0 → 0.4.2

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 (58) hide show
  1. package/README.md +137 -25
  2. package/dist/activity.d.ts +12 -0
  3. package/dist/activity.js +73 -0
  4. package/dist/activity.js.map +1 -0
  5. package/dist/config.d.ts +39 -0
  6. package/dist/config.js +182 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/index.d.ts +3 -0
  9. package/dist/index.js +186 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/launcher.d.ts +17 -0
  12. package/dist/launcher.js +77 -0
  13. package/dist/launcher.js.map +1 -0
  14. package/dist/monitor-launcher.d.ts +17 -0
  15. package/dist/monitor-launcher.js +136 -0
  16. package/dist/monitor-launcher.js.map +1 -0
  17. package/dist/monitor-view.d.ts +6 -0
  18. package/dist/monitor-view.js +134 -0
  19. package/dist/monitor-view.js.map +1 -0
  20. package/dist/monitor.d.ts +22 -0
  21. package/dist/monitor.js +171 -0
  22. package/dist/monitor.js.map +1 -0
  23. package/dist/observability.d.ts +79 -0
  24. package/dist/observability.js +208 -0
  25. package/dist/observability.js.map +1 -0
  26. package/dist/reports.d.ts +12 -0
  27. package/dist/reports.js +160 -0
  28. package/dist/reports.js.map +1 -0
  29. package/dist/runtime.d.ts +59 -0
  30. package/dist/runtime.js +458 -0
  31. package/dist/runtime.js.map +1 -0
  32. package/dist/snapshot.d.ts +15 -0
  33. package/dist/snapshot.js +128 -0
  34. package/dist/snapshot.js.map +1 -0
  35. package/dist/transport.d.ts +24 -0
  36. package/dist/transport.js +122 -0
  37. package/dist/transport.js.map +1 -0
  38. package/dist/worker-status.d.ts +26 -0
  39. package/dist/worker-status.js +76 -0
  40. package/dist/worker-status.js.map +1 -0
  41. package/package.json +13 -7
  42. package/references/observability.md +66 -60
  43. package/references/roadmap.md +68 -0
  44. package/src/activity.ts +66 -0
  45. package/src/config.ts +1 -1
  46. package/src/index.ts +51 -23
  47. package/src/monitor-launcher.ts +110 -0
  48. package/src/monitor-view.ts +123 -0
  49. package/src/monitor.ts +143 -0
  50. package/src/observability.ts +6 -1
  51. package/src/reports.ts +122 -0
  52. package/src/runtime.ts +45 -7
  53. package/src/{dashboard.ts → snapshot.ts} +9 -60
  54. package/src/transport.ts +11 -2
  55. package/src/worker-status.ts +66 -0
  56. package/dashboard/app.js +0 -182
  57. package/dashboard/index.html +0 -41
  58. package/dashboard/style.css +0 -82
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-view.js","sourceRoot":"","sources":["../src/monitor-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ import { type Component } from 'pi-intercom-tui';
3
+ import { readObservationSnapshot } from './snapshot.js';
4
+ export declare function parseMonitorRoot(args: string[]): string;
5
+ export interface MonitorOptions {
6
+ read?: typeof readObservationSnapshot;
7
+ rows: () => number;
8
+ requestRender: () => void;
9
+ onQuit: () => void;
10
+ intervalMs?: number;
11
+ color?: boolean;
12
+ now?: () => number;
13
+ /** Returns a cancellation function; injected by deterministic tests. */
14
+ schedule?: (callback: () => void, delayMs: number) => () => void;
15
+ }
16
+ /** No host, probing, network or writes. Closing never awaits an outstanding read. */
17
+ export declare function createMonitor(root: string, options: MonitorOptions): Component & {
18
+ start(): void;
19
+ close(): void;
20
+ };
21
+ /** CLI-only setup: importing this module never touches raw mode or project files. */
22
+ export declare function runMonitor(args?: string[]): void;
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/env node
2
+ import path from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { Key, matchesKey, ProcessTerminal, TuiAltScreen } from 'pi-intercom-tui';
5
+ import { readObservationSnapshot } from './snapshot.js';
6
+ import { renderMonitor } from './monitor-view.js';
7
+ export function parseMonitorRoot(args) {
8
+ if (args.length !== 2 || args[0] !== '--root' || !path.isAbsolute(args[1])) {
9
+ throw new Error('Usage: node dist/monitor.js --root <absolute-project-path>');
10
+ }
11
+ return path.normalize(args[1]);
12
+ }
13
+ /** No host, probing, network or writes. Closing never awaits an outstanding read. */
14
+ export function createMonitor(root, options) {
15
+ let snapshot;
16
+ let selectedIndex = -1;
17
+ let selectedSessionId;
18
+ let details = false;
19
+ const workers = () => snapshot?.config?.agents.filter(agent => !agent.coordinator) ?? [];
20
+ const requestRender = () => { try {
21
+ options.requestRender();
22
+ }
23
+ catch { /* UI shutdown is independent of reading. */ } };
24
+ let closed = false, started = false;
25
+ let cancel;
26
+ const schedule = options.schedule ?? ((callback, delay) => {
27
+ const timer = setTimeout(callback, delay);
28
+ timer.unref();
29
+ return () => clearTimeout(timer);
30
+ });
31
+ const interval = Math.max(100, options.intervalMs ?? 3000);
32
+ async function refresh() {
33
+ if (closed)
34
+ return;
35
+ let next;
36
+ try {
37
+ next = await (options.read ?? readObservationSnapshot)(root);
38
+ }
39
+ catch { /* Unavailable, no raw errors. */ }
40
+ if (closed)
41
+ return;
42
+ snapshot = next;
43
+ // Preserve identity through reordering, and retain it across transient read failures.
44
+ if (snapshot?.config) {
45
+ const roster = workers();
46
+ const previous = roster.findIndex(agent => agent.sessionId === selectedSessionId);
47
+ selectedIndex = roster.length ? (previous >= 0 ? previous : Math.max(0, Math.min(selectedIndex, roster.length - 1))) : -1;
48
+ selectedSessionId = roster[selectedIndex]?.sessionId;
49
+ if (selectedIndex < 0)
50
+ details = false;
51
+ }
52
+ requestRender();
53
+ if (!closed)
54
+ cancel = schedule(() => { cancel = undefined; void refresh(); }, interval);
55
+ }
56
+ const close = () => {
57
+ if (closed)
58
+ return;
59
+ closed = true;
60
+ cancel?.();
61
+ cancel = undefined;
62
+ };
63
+ return {
64
+ start() { if (started || closed)
65
+ return; started = true; void refresh(); },
66
+ close,
67
+ invalidate() { },
68
+ render(width) {
69
+ const height = Math.max(0, Math.floor(options.rows()));
70
+ if (width <= 0 || !height)
71
+ return [];
72
+ const view = { selectedIndex: snapshot?.config ? selectedIndex : -1, details: !!snapshot?.config && details };
73
+ try {
74
+ return renderMonitor(snapshot, width, height, (options.now ?? Date.now)(), options.color, view);
75
+ }
76
+ catch {
77
+ return renderMonitor(undefined, width, height, Date.now(), options.color, { selectedIndex: -1, details: false });
78
+ }
79
+ },
80
+ handleInput(data) {
81
+ if (closed)
82
+ return;
83
+ if (matchesKey(data, Key.escape) && details) {
84
+ details = false;
85
+ requestRender();
86
+ return;
87
+ }
88
+ if (matchesKey(data, 'q') || matchesKey(data, Key.escape) || matchesKey(data, Key.ctrl('c'))) {
89
+ close();
90
+ options.onQuit();
91
+ return;
92
+ }
93
+ const roster = workers();
94
+ if (!roster.length)
95
+ return;
96
+ if (matchesKey(data, Key.up) || matchesKey(data, Key.down)) {
97
+ const next = Math.max(0, Math.min(roster.length - 1, selectedIndex + (matchesKey(data, Key.up) ? -1 : 1)));
98
+ if (next !== selectedIndex) {
99
+ selectedIndex = next;
100
+ selectedSessionId = roster[next].sessionId;
101
+ requestRender();
102
+ }
103
+ }
104
+ else if (matchesKey(data, Key.enter)) {
105
+ details = !details;
106
+ requestRender();
107
+ }
108
+ },
109
+ };
110
+ }
111
+ /** CLI-only setup: importing this module never touches raw mode or project files. */
112
+ export function runMonitor(args = process.argv.slice(2)) {
113
+ const root = parseMonitorRoot(args);
114
+ if (!process.stdin.isTTY || !process.stdout.isTTY)
115
+ throw new Error('Intercom monitor requires an interactive terminal.');
116
+ // pi-tui supports optional disk diagnostics; this read-only process must not enable them.
117
+ delete process.env.PI_TUI_WRITE_LOG;
118
+ delete process.env.PI_TUI_DEBUG;
119
+ delete process.env.PI_DEBUG_REDRAW;
120
+ const terminal = new ProcessTerminal();
121
+ const tui = new TuiAltScreen(terminal, false, undefined, { mouse: false });
122
+ let stopped = false;
123
+ const stop = () => {
124
+ if (stopped)
125
+ return;
126
+ stopped = true;
127
+ monitor.close();
128
+ process.removeListener('SIGINT', signalQuit);
129
+ process.removeListener('SIGTERM', signalQuit);
130
+ process.removeListener('exit', stop);
131
+ try {
132
+ tui.stop();
133
+ }
134
+ finally {
135
+ terminal.stop();
136
+ }
137
+ };
138
+ // Explicit exit after restoring the terminal: an unresponsive filesystem read
139
+ // must not hold the standalone process open after the owner requests quit.
140
+ const quit = () => { stop(); process.exit(0); };
141
+ const signalQuit = () => quit();
142
+ const monitor = createMonitor(root, {
143
+ rows: () => terminal.rows,
144
+ color: process.env.NO_COLOR === undefined && process.env.TERM !== 'dumb',
145
+ requestRender: () => tui.requestRender(),
146
+ onQuit: quit,
147
+ });
148
+ tui.addChild(monitor);
149
+ tui.setFocus(monitor);
150
+ process.on('SIGINT', signalQuit);
151
+ process.on('SIGTERM', signalQuit);
152
+ process.on('exit', stop);
153
+ try {
154
+ tui.start();
155
+ monitor.start();
156
+ }
157
+ catch (error) {
158
+ stop();
159
+ throw error;
160
+ }
161
+ }
162
+ if (process.argv[1] && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href) {
163
+ try {
164
+ runMonitor();
165
+ }
166
+ catch (error) {
167
+ console.error(error instanceof Error ? error.message : 'Intercom monitor unavailable.');
168
+ process.exitCode = 1;
169
+ }
170
+ }
171
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../src/monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { ActivityPhase, ActivityDetail } from './activity.js';
2
+ export declare const LOG_DIRECTORY = ".pi-intercom/logs";
3
+ export declare const LOG_FILE_PATTERN: RegExp;
4
+ export declare const LOG_LIMITS: {
5
+ readonly fileBytes: number;
6
+ readonly filesPerInstance: 3;
7
+ readonly queueEntries: 256;
8
+ readonly entryBytes: 4096;
9
+ readonly retentionMs: number;
10
+ readonly directoryBytes: number;
11
+ readonly scanEntries: 4096;
12
+ readonly closeTimeoutMs: 250;
13
+ };
14
+ export declare const EVENT_TYPES: readonly ["runtime.starting", "runtime.ready", "runtime.closed", "runtime.failed", "config.changed", "config.reloaded", "transport.send", "transport.receipt", "transport.failed", "transport.received", "transport.rejected", "registration.received", "status.received", "launch.result", "host.submission", "host.activity", "host.ui_prompt"];
15
+ export type EventType = typeof EVENT_TYPES[number];
16
+ declare const OUTCOMES: readonly ["attempted", "returned", "failed", "http_receipt", "handler_failed", "started", "settled", "snapshot", "ended", "written", "removed", "ready"];
17
+ declare const ERROR_CODES: readonly ["operation_failed", "ECONNREFUSED", "ECONNRESET", "ETIMEDOUT", "EADDRINUSE", "EACCES", "EPERM", "ENOENT", "ENOSPC"];
18
+ declare const KINDS: readonly ["message", "report", "registration", "status", "request_status", "reload", "stop", "close"];
19
+ declare const OPERATIONS: readonly ["configure_worker", "set_multiplexer", "remove_worker", "create_worker", "resume_worker", "port_update", "initialize"];
20
+ export interface EventMetadata {
21
+ peerSessionId?: string;
22
+ peerName?: string;
23
+ correlationId?: string;
24
+ kind?: typeof KINDS[number];
25
+ busy?: boolean;
26
+ phase?: ActivityPhase;
27
+ detail?: ActivityDetail;
28
+ port?: number;
29
+ role?: 'coordinator' | 'worker' | 'anonymous';
30
+ outcome?: typeof OUTCOMES[number];
31
+ errorCode?: typeof ERROR_CODES[number];
32
+ operation?: typeof OPERATIONS[number];
33
+ }
34
+ export interface Observation extends EventMetadata {
35
+ version: 1;
36
+ timestamp: string;
37
+ /** Log-file writer identity only: never a transport or agent identity. */
38
+ writerId: string;
39
+ sessionId: string;
40
+ event: EventType;
41
+ }
42
+ export interface Observer {
43
+ record(event: EventType, metadata?: EventMetadata): void;
44
+ close(): Promise<void>;
45
+ maintain?(): void;
46
+ }
47
+ /** Project only explicitly allowed metadata, including when reading untrusted on-disk logs. */
48
+ export declare function sanitizeObservation(value: unknown): Observation | undefined;
49
+ /** Never inspect error.message/stack, response bodies, paths, or arbitrary error codes. */
50
+ export declare function observationError(error: unknown): EventMetadata['errorCode'];
51
+ export declare class LocalObserver implements Observer {
52
+ readonly sessionId: string;
53
+ private readonly limits;
54
+ readonly writerId: `${string}-${string}-${string}-${string}-${string}`;
55
+ readonly directory: string;
56
+ readonly file: string;
57
+ private queue;
58
+ private pending?;
59
+ private initialized;
60
+ private bytes;
61
+ private closed;
62
+ private disabled;
63
+ private maintenance;
64
+ private timer?;
65
+ dropped: number;
66
+ constructor(root: string, sessionId: string, limits?: {
67
+ fileBytes?: number;
68
+ queueEntries?: number;
69
+ });
70
+ record(event: EventType, metadata?: EventMetadata): void;
71
+ private schedule;
72
+ /** Runtime calls only on the coordinator. No process probes or activity inference. */
73
+ maintain(): void;
74
+ protected append(file: string, line: string): Promise<void>;
75
+ private prune;
76
+ private drain;
77
+ close(): Promise<void>;
78
+ }
79
+ export {};
@@ -0,0 +1,208 @@
1
+ import path from 'node:path';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { appendFile, lstat, mkdir, opendir, rename, stat, unlink } from 'node:fs/promises';
4
+ export const LOG_DIRECTORY = '.pi-intercom/logs';
5
+ export const LOG_FILE_PATTERN = /^writer-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.jsonl(?:\.[12]|\.closed)?$/;
6
+ export const LOG_LIMITS = { fileBytes: 1024 * 1024, filesPerInstance: 3, queueEntries: 256, entryBytes: 4096, retentionMs: 7 * 24 * 60 * 60 * 1000, directoryBytes: 32 * 1024 * 1024, scanEntries: 4096, closeTimeoutMs: 250 };
7
+ export const EVENT_TYPES = ['runtime.starting', 'runtime.ready', 'runtime.closed', 'runtime.failed', 'config.changed', 'config.reloaded', 'transport.send', 'transport.receipt', 'transport.failed', 'transport.received', 'transport.rejected', 'registration.received', 'status.received', 'launch.result', 'host.submission', 'host.activity', 'host.ui_prompt'];
8
+ const OUTCOMES = ['attempted', 'returned', 'failed', 'http_receipt', 'handler_failed', 'started', 'settled', 'snapshot', 'ended', 'written', 'removed', 'ready'];
9
+ const ERROR_CODES = ['operation_failed', 'ECONNREFUSED', 'ECONNRESET', 'ETIMEDOUT', 'EADDRINUSE', 'EACCES', 'EPERM', 'ENOENT', 'ENOSPC'];
10
+ const KINDS = ['message', 'report', 'registration', 'status', 'request_status', 'reload', 'stop', 'close'];
11
+ const OPERATIONS = ['configure_worker', 'set_multiplexer', 'remove_worker', 'create_worker', 'resume_worker', 'port_update', 'initialize'];
12
+ const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
13
+ function safeText(value, max) {
14
+ return typeof value === 'string' && value.length > 0 && value.length <= max && !/[\x00-\x1f\x7f]/.test(value);
15
+ }
16
+ function includes(list, value) { return typeof value === 'string' && list.includes(value); }
17
+ /** Project only explicitly allowed metadata, including when reading untrusted on-disk logs. */
18
+ export function sanitizeObservation(value) {
19
+ if (!value || typeof value !== 'object')
20
+ return;
21
+ const v = value;
22
+ if (v.version !== 1 || !includes(EVENT_TYPES, v.event) || !safeText(v.sessionId, 256) || typeof v.writerId !== 'string' || !uuid.test(v.writerId))
23
+ return;
24
+ if (typeof v.timestamp !== 'string' || !/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$/.test(v.timestamp) || !Number.isFinite(Date.parse(v.timestamp)))
25
+ return;
26
+ const result = { version: 1, timestamp: v.timestamp, writerId: v.writerId, sessionId: v.sessionId, event: v.event };
27
+ if (safeText(v.peerSessionId, 256))
28
+ result.peerSessionId = v.peerSessionId;
29
+ if (safeText(v.peerName, 128))
30
+ result.peerName = v.peerName;
31
+ if (safeText(v.correlationId, 128) && /^[a-zA-Z0-9-]+$/.test(v.correlationId))
32
+ result.correlationId = v.correlationId;
33
+ if (includes(KINDS, v.kind))
34
+ result.kind = v.kind;
35
+ if (typeof v.busy === 'boolean')
36
+ result.busy = v.busy;
37
+ if (includes(['working', 'thinking', 'responding', 'tool', 'idle'], v.phase))
38
+ result.phase = v.phase;
39
+ if (includes(['processing', 'thinking', 'responding', 'reading_files', 'editing_files', 'running_command', 'using_tool', 'multiple_tools', 'settled'], v.detail))
40
+ result.detail = v.detail;
41
+ if (Number.isInteger(v.port) && Number(v.port) >= 1 && Number(v.port) <= 65535)
42
+ result.port = Number(v.port);
43
+ if (includes(['coordinator', 'worker', 'anonymous'], v.role))
44
+ result.role = v.role;
45
+ if (includes(OUTCOMES, v.outcome))
46
+ result.outcome = v.outcome;
47
+ if (includes(ERROR_CODES, v.errorCode))
48
+ result.errorCode = v.errorCode;
49
+ if (includes(OPERATIONS, v.operation))
50
+ result.operation = v.operation;
51
+ return result;
52
+ }
53
+ /** Never inspect error.message/stack, response bodies, paths, or arbitrary error codes. */
54
+ export function observationError(error) {
55
+ try {
56
+ const code = error && typeof error === 'object' ? error.code : undefined;
57
+ return includes(ERROR_CODES, code) ? code : 'operation_failed';
58
+ }
59
+ catch {
60
+ return 'operation_failed';
61
+ }
62
+ }
63
+ export class LocalObserver {
64
+ sessionId;
65
+ limits;
66
+ writerId = randomUUID();
67
+ directory;
68
+ file;
69
+ queue = [];
70
+ pending;
71
+ initialized = false;
72
+ bytes = 0;
73
+ closed = false;
74
+ disabled = false;
75
+ maintenance = false;
76
+ timer;
77
+ dropped = 0;
78
+ constructor(root, sessionId, limits = {}) {
79
+ this.sessionId = sessionId;
80
+ this.limits = limits;
81
+ this.directory = path.join(root, LOG_DIRECTORY);
82
+ this.file = path.join(this.directory, `writer-${this.writerId}.jsonl`);
83
+ }
84
+ record(event, metadata = {}) {
85
+ try {
86
+ if (this.closed || this.disabled)
87
+ return;
88
+ const observation = sanitizeObservation({ ...metadata, version: 1, timestamp: new Date().toISOString(), writerId: this.writerId, sessionId: this.sessionId, event });
89
+ if (!observation)
90
+ return;
91
+ const line = JSON.stringify(observation) + '\n';
92
+ const capacity = Math.max(1, Math.min(LOG_LIMITS.queueEntries, this.limits.queueEntries ?? LOG_LIMITS.queueEntries));
93
+ if (Buffer.byteLength(line) > LOG_LIMITS.entryBytes || this.queue.length >= capacity) {
94
+ this.dropped++;
95
+ return;
96
+ }
97
+ this.queue.push(line);
98
+ this.schedule();
99
+ }
100
+ catch { /* Observability must never throw into communication. */ }
101
+ }
102
+ schedule() {
103
+ if (this.pending || this.disabled)
104
+ return;
105
+ this.pending = Promise.resolve().then(() => this.drain()).catch(() => {
106
+ // Disable this writer after an I/O failure; no retry queue and no communication failure.
107
+ this.disabled = true;
108
+ this.dropped += this.queue.length;
109
+ this.queue = [];
110
+ }).finally(() => {
111
+ this.pending = undefined;
112
+ if (this.queue.length && !this.disabled)
113
+ this.schedule();
114
+ });
115
+ }
116
+ /** Runtime calls only on the coordinator. No process probes or activity inference. */
117
+ maintain() {
118
+ if (this.closed || this.disabled || this.timer)
119
+ return;
120
+ const request = () => { this.maintenance = true; this.schedule(); };
121
+ this.timer = setInterval(request, 60_000);
122
+ this.timer.unref();
123
+ request();
124
+ }
125
+ append(file, line) { return appendFile(file, line, { encoding: 'utf8', mode: 0o600 }); }
126
+ async prune() {
127
+ const files = [];
128
+ const closed = new Set();
129
+ let scanned = 0;
130
+ for await (const entry of await opendir(this.directory)) {
131
+ if (++scanned > LOG_LIMITS.scanEntries)
132
+ break;
133
+ if (!entry.isFile() || !LOG_FILE_PATTERN.test(entry.name))
134
+ continue;
135
+ const file = path.join(this.directory, entry.name);
136
+ const base = file.replace(/\.(?:closed|[12])$/, '');
137
+ if (file.endsWith('.closed'))
138
+ closed.add(base);
139
+ const info = await stat(file).catch(() => undefined);
140
+ if (info)
141
+ files.push({ file, base, mtime: info.mtimeMs, bytes: info.size });
142
+ }
143
+ let total = files.reduce((sum, file) => sum + file.bytes, 0);
144
+ const groups = [...closed].map(base => {
145
+ const members = files.filter(file => file.base === base);
146
+ return { members, newest: Math.max(...members.map(file => file.mtime)) };
147
+ }).sort((a, b) => a.newest - b.newest);
148
+ for (const group of groups) {
149
+ // Only gracefully closed writer groups are eligible. Active/crashed writers stay untouched.
150
+ if (Date.now() - group.newest > LOG_LIMITS.retentionMs || total > LOG_LIMITS.directoryBytes) {
151
+ // Remove the closed marker last, retaining eligibility if an earlier unlink fails.
152
+ for (const file of group.members.sort((a, b) => Number(a.file.endsWith('.closed')) - Number(b.file.endsWith('.closed')))) {
153
+ try {
154
+ await unlink(file.file);
155
+ total -= file.bytes;
156
+ }
157
+ catch {
158
+ break;
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ async drain() {
165
+ if (!this.initialized) {
166
+ const parent = path.dirname(this.directory);
167
+ await mkdir(parent, { recursive: true, mode: 0o700 });
168
+ if ((await lstat(parent)).isSymbolicLink())
169
+ throw new Error('log parent must not be a symlink');
170
+ await mkdir(this.directory, { recursive: true, mode: 0o700 });
171
+ if ((await lstat(this.directory)).isSymbolicLink())
172
+ throw new Error('log directory must not be a symlink');
173
+ this.initialized = true;
174
+ }
175
+ if (this.maintenance) {
176
+ this.maintenance = false;
177
+ await this.prune().catch(() => { });
178
+ }
179
+ const maxBytes = Math.max(LOG_LIMITS.entryBytes, Math.min(LOG_LIMITS.fileBytes, this.limits.fileBytes ?? LOG_LIMITS.fileBytes));
180
+ while (this.queue.length) {
181
+ const line = this.queue.shift(), size = Buffer.byteLength(line);
182
+ if (this.bytes + size > maxBytes) {
183
+ await unlink(`${this.file}.2`).catch(e => { if (e.code !== 'ENOENT')
184
+ throw e; });
185
+ await rename(`${this.file}.1`, `${this.file}.2`).catch(e => { if (e.code !== 'ENOENT')
186
+ throw e; });
187
+ await rename(this.file, `${this.file}.1`).catch(e => { if (e.code !== 'ENOENT')
188
+ throw e; });
189
+ this.bytes = 0;
190
+ }
191
+ await this.append(this.file, line);
192
+ this.bytes += size;
193
+ }
194
+ }
195
+ async close() {
196
+ if (this.timer) {
197
+ clearInterval(this.timer);
198
+ this.timer = undefined;
199
+ }
200
+ this.closed = true;
201
+ while (this.pending)
202
+ await this.pending;
203
+ // An atomic suffix change is the sole inactive-writer signal. Crashes leave no such signal.
204
+ if (this.initialized && !this.disabled)
205
+ await rename(this.file, `${this.file}.closed`).catch(() => { });
206
+ }
207
+ }
208
+ //# sourceMappingURL=observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.js","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type ReportStatus = 'blocked' | 'needs_decision' | 'ready_for_review' | 'clear';
2
+ export interface WorkerReport {
3
+ version: 1;
4
+ sessionId: string;
5
+ status: ReportStatus;
6
+ summary: string;
7
+ updatedAt: string;
8
+ }
9
+ /** Persist only the explicitly authored public report; clear is an atomic tombstone. */
10
+ export declare function saveWorkerReport(root: string, report: WorkerReport, assertCurrent?: () => void): Promise<void>;
11
+ /** Read at most 256 configured IDs; no directory scan, repair, transport, or host access. */
12
+ export declare function readWorkerReports(root: string, sessionIds: readonly string[]): Promise<WorkerReport[]>;