@claudexor/cli 3.3.16 → 3.4.1
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/dist/acp-surface-runner.d.ts +3 -2
- package/dist/acp-surface-runner.d.ts.map +1 -1
- package/dist/acp-surface-runner.js +20 -17
- package/dist/acp-surface-runner.js.map +1 -1
- package/dist/claudexord-entry.d.ts +7 -0
- package/dist/claudexord-entry.d.ts.map +1 -1
- package/dist/claudexord-entry.js +14 -0
- package/dist/claudexord-entry.js.map +1 -1
- package/dist/claudexord.d.ts +0 -10
- package/dist/claudexord.d.ts.map +1 -1
- package/dist/claudexord.js +95 -100
- package/dist/claudexord.js.map +1 -1
- package/dist/cli.js +10 -12
- package/dist/cli.js.map +1 -1
- package/dist/control-services.d.ts +26 -23
- package/dist/control-services.d.ts.map +1 -1
- package/dist/control-services.js +22 -21
- package/dist/control-services.js.map +1 -1
- package/dist/daemon-admission-runtime.d.ts +63 -0
- package/dist/daemon-admission-runtime.d.ts.map +1 -0
- package/dist/daemon-admission-runtime.js +180 -0
- package/dist/daemon-admission-runtime.js.map +1 -0
- package/dist/daemon-launch.d.ts +53 -0
- package/dist/daemon-launch.d.ts.map +1 -0
- package/dist/daemon-launch.js +211 -0
- package/dist/daemon-launch.js.map +1 -0
- package/dist/daemon-lifecycle.d.ts +14 -2
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +53 -10
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/daemon-run.d.ts +6 -1
- package/dist/daemon-run.d.ts.map +1 -1
- package/dist/daemon-run.js +70 -19
- package/dist/daemon-run.js.map +1 -1
- package/dist/daemon-start-report.d.ts +8 -0
- package/dist/daemon-start-report.d.ts.map +1 -0
- package/dist/daemon-start-report.js +24 -0
- package/dist/daemon-start-report.js.map +1 -0
- package/dist/daemon-startup.d.ts +90 -0
- package/dist/daemon-startup.d.ts.map +1 -0
- package/dist/daemon-startup.js +156 -0
- package/dist/daemon-startup.js.map +1 -0
- package/dist/engine-skew.d.ts +4 -0
- package/dist/engine-skew.d.ts.map +1 -1
- package/dist/engine-skew.js +10 -3
- package/dist/engine-skew.js.map +1 -1
- package/dist/mcp-run-projections.d.ts +78 -1
- package/dist/mcp-run-projections.d.ts.map +1 -1
- package/dist/mcp-run-projections.js +57 -3
- package/dist/mcp-run-projections.js.map +1 -1
- package/dist/mcp-runner.d.ts.map +1 -1
- package/dist/mcp-runner.js +41 -37
- package/dist/mcp-runner.js.map +1 -1
- package/dist/native-login.d.ts.map +1 -1
- package/dist/native-login.js +3 -7
- package/dist/native-login.js.map +1 -1
- package/dist/ops-commands.d.ts +9 -0
- package/dist/ops-commands.d.ts.map +1 -1
- package/dist/ops-commands.js +61 -66
- package/dist/ops-commands.js.map +1 -1
- package/dist/ops-harness-selection.d.ts +6 -0
- package/dist/ops-harness-selection.d.ts.map +1 -0
- package/dist/ops-harness-selection.js +29 -0
- package/dist/ops-harness-selection.js.map +1 -0
- package/dist/orphan-sweeper.js +13 -3
- package/dist/orphan-sweeper.js.map +1 -1
- package/dist/remote-command.d.ts +10 -1
- package/dist/remote-command.d.ts.map +1 -1
- package/dist/remote-command.js +34 -10
- package/dist/remote-command.js.map +1 -1
- package/dist/runtime-replacement-stop.d.ts +13 -2
- package/dist/runtime-replacement-stop.d.ts.map +1 -1
- package/dist/runtime-replacement-stop.js +46 -11
- package/dist/runtime-replacement-stop.js.map +1 -1
- package/dist/setup-client-pty.d.ts +8 -0
- package/dist/setup-client-pty.d.ts.map +1 -1
- package/dist/setup-client-pty.js +17 -0
- package/dist/setup-client-pty.js.map +1 -1
- package/dist/setup-job-store.d.ts +4 -4
- package/dist/setup-jobs.d.ts +10 -10
- package/dist/setup-jobs.d.ts.map +1 -1
- package/dist/setup-jobs.js +6 -8
- package/dist/setup-jobs.js.map +1 -1
- package/dist/setup-lifecycle-binding.d.ts +7 -1
- package/dist/setup-lifecycle-binding.d.ts.map +1 -1
- package/dist/setup-lifecycle-binding.js +27 -17
- package/dist/setup-lifecycle-binding.js.map +1 -1
- package/dist/setup-login-runner.d.ts +2 -2
- package/dist/setup-login-runner.d.ts.map +1 -1
- package/dist/setup-login-runner.js +10 -22
- package/dist/setup-login-runner.js.map +1 -1
- package/dist/startup-diagnostics.d.ts +61 -0
- package/dist/startup-diagnostics.d.ts.map +1 -0
- package/dist/startup-diagnostics.js +416 -0
- package/dist/startup-diagnostics.js.map +1 -0
- package/dist/thread-turn-services.d.ts +1 -1
- package/dist/thread-turn-services.d.ts.map +1 -1
- package/dist/thread-turn-services.js.map +1 -1
- package/package.json +23 -23
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bounded, private daemon startup diagnostic owner.
|
|
3
|
+
*
|
|
4
|
+
* This module deliberately does not acquire root authority. Its factory name
|
|
5
|
+
* and required call contract make the ordering explicit: only a daemon that
|
|
6
|
+
* already owns the data root may open the canonical log. Callers must treat
|
|
7
|
+
* every diagnostic failure as non-authoritative for daemon lifecycle safety.
|
|
8
|
+
*/
|
|
9
|
+
import { closeSync, constants, fchmodSync, fstatSync, fsyncSync, ftruncateSync, lstatSync, openSync, readSync, realpathSync, renameSync, unlinkSync, writeSync, } from "node:fs";
|
|
10
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
11
|
+
import { logPath as canonicalLogPath } from "@claudexor/daemon";
|
|
12
|
+
import { redactSecrets, safeProblemMessage } from "@claudexor/util";
|
|
13
|
+
const DEFAULT_CURRENT_BYTES = 256 * 1024;
|
|
14
|
+
const DEFAULT_RECORD_BYTES = 16 * 1024;
|
|
15
|
+
const MAX_TAIL_BYTES = DEFAULT_CURRENT_BYTES;
|
|
16
|
+
const MAX_TAIL_LINES = 200;
|
|
17
|
+
const MIN_RECORD_BYTES = 256;
|
|
18
|
+
const SAFE_LABEL = /^[a-z0-9][a-z0-9._-]{0,127}$/;
|
|
19
|
+
const activeWriters = new Set();
|
|
20
|
+
function boundedPositiveInt(value, name, minimum) {
|
|
21
|
+
if (!Number.isSafeInteger(value) || value < minimum) {
|
|
22
|
+
throw new Error(`${name} must be an integer >= ${minimum}`);
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function diagnosticError(message, error) {
|
|
27
|
+
const detail = error === undefined ? "" : `: ${safeProblemMessage(error)}`;
|
|
28
|
+
return new Error(`daemon diagnostic target is not safe and owner-controlled (${message})${detail}`);
|
|
29
|
+
}
|
|
30
|
+
function validatePrivateParent(path, platform, uid) {
|
|
31
|
+
const parent = dirname(path);
|
|
32
|
+
try {
|
|
33
|
+
const stat = lstatSync(parent);
|
|
34
|
+
if (stat.isSymbolicLink() || !stat.isDirectory()) {
|
|
35
|
+
throw diagnosticError("parent is not a regular directory");
|
|
36
|
+
}
|
|
37
|
+
if (platform !== "win32" && uid !== undefined) {
|
|
38
|
+
if (stat.uid !== uid)
|
|
39
|
+
throw diagnosticError("parent has a foreign uid");
|
|
40
|
+
if ((stat.mode & 0o077) !== 0)
|
|
41
|
+
throw diagnosticError("parent permissions are not private");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (error instanceof Error && error.message.startsWith("daemon diagnostic target"))
|
|
46
|
+
throw error;
|
|
47
|
+
throw diagnosticError("parent cannot be proven", error);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function validateOpenedPath(path, fd, options) {
|
|
51
|
+
const opened = fstatSync(fd);
|
|
52
|
+
const named = lstatSync(path);
|
|
53
|
+
if (named.isSymbolicLink() ||
|
|
54
|
+
!opened.isFile() ||
|
|
55
|
+
!named.isFile() ||
|
|
56
|
+
opened.nlink !== 1 ||
|
|
57
|
+
named.nlink !== 1 ||
|
|
58
|
+
opened.dev !== named.dev ||
|
|
59
|
+
opened.ino !== named.ino) {
|
|
60
|
+
throw diagnosticError("target is not a singly-linked regular file");
|
|
61
|
+
}
|
|
62
|
+
if (options.platform !== "win32" &&
|
|
63
|
+
options.uid !== undefined &&
|
|
64
|
+
(opened.uid !== options.uid || named.uid !== options.uid)) {
|
|
65
|
+
throw diagnosticError("target has a foreign uid");
|
|
66
|
+
}
|
|
67
|
+
if (options.platform !== "win32" && options.repairMode && (opened.mode & 0o777) !== 0o600) {
|
|
68
|
+
fchmodSync(fd, 0o600);
|
|
69
|
+
fsyncSync(fd);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function openSafeFile(path, options) {
|
|
73
|
+
validatePrivateParent(path, options.platform, options.uid);
|
|
74
|
+
const access = options.readOnly ? constants.O_RDONLY : constants.O_RDWR | constants.O_APPEND;
|
|
75
|
+
const create = options.create ? constants.O_CREAT : 0;
|
|
76
|
+
const exclusive = options.exclusive ? constants.O_EXCL : 0;
|
|
77
|
+
let fd;
|
|
78
|
+
try {
|
|
79
|
+
fd = openSync(path, access | create | exclusive | constants.O_NOFOLLOW, 0o600);
|
|
80
|
+
validateOpenedPath(path, fd, options);
|
|
81
|
+
return fd;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (fd !== undefined)
|
|
85
|
+
closeSync(fd);
|
|
86
|
+
throw diagnosticError("file proof failed", error);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function closeQuietly(fd) {
|
|
90
|
+
if (fd === undefined)
|
|
91
|
+
return;
|
|
92
|
+
try {
|
|
93
|
+
closeSync(fd);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
/* diagnostics never own lifecycle success */
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function pathExistsWithoutFollowing(path) {
|
|
100
|
+
try {
|
|
101
|
+
lstatSync(path);
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error.code === "ENOENT")
|
|
106
|
+
return false;
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function openExistingSafe(path, options) {
|
|
111
|
+
if (!pathExistsWithoutFollowing(path))
|
|
112
|
+
return undefined;
|
|
113
|
+
return openSafeFile(path, { ...options, create: false });
|
|
114
|
+
}
|
|
115
|
+
function writerIdentity(path) {
|
|
116
|
+
try {
|
|
117
|
+
return join(realpathSync.native(dirname(path)), basename(path));
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return path;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function writeAll(fd, bytes) {
|
|
124
|
+
let offset = 0;
|
|
125
|
+
while (offset < bytes.length)
|
|
126
|
+
offset += writeSync(fd, bytes, offset, bytes.length - offset);
|
|
127
|
+
}
|
|
128
|
+
function truncateUtf8(value, maxBytes) {
|
|
129
|
+
if (Buffer.byteLength(value) <= maxBytes)
|
|
130
|
+
return value;
|
|
131
|
+
const marker = "[redacted]";
|
|
132
|
+
const markerAt = value.indexOf(marker);
|
|
133
|
+
const markerSuffix = `…${marker}`;
|
|
134
|
+
const preserveMarker = markerAt >= 0 && Buffer.byteLength(markerSuffix) <= maxBytes;
|
|
135
|
+
const source = preserveMarker ? value.slice(0, markerAt) : value;
|
|
136
|
+
const suffix = preserveMarker ? markerSuffix : maxBytes >= 3 ? "…" : "";
|
|
137
|
+
const suffixBytes = Buffer.byteLength(suffix);
|
|
138
|
+
let low = 0;
|
|
139
|
+
let high = source.length;
|
|
140
|
+
while (low < high) {
|
|
141
|
+
const mid = Math.ceil((low + high) / 2);
|
|
142
|
+
if (Buffer.byteLength(source.slice(0, mid)) + suffixBytes <= maxBytes)
|
|
143
|
+
low = mid;
|
|
144
|
+
else
|
|
145
|
+
high = mid - 1;
|
|
146
|
+
}
|
|
147
|
+
let prefix = source.slice(0, low);
|
|
148
|
+
if (/\p{Surrogate}$/u.test(prefix))
|
|
149
|
+
prefix = prefix.slice(0, -1);
|
|
150
|
+
return `${prefix}${suffix}`;
|
|
151
|
+
}
|
|
152
|
+
function redactedString(value, maxBytes) {
|
|
153
|
+
return truncateUtf8(redactSecrets(String(value)), maxBytes);
|
|
154
|
+
}
|
|
155
|
+
function diagnosticLine(context, input, now, maxRecordBytes) {
|
|
156
|
+
const error = input.error;
|
|
157
|
+
const failureClass = error instanceof Error
|
|
158
|
+
? error.name || error.constructor?.name || "Error"
|
|
159
|
+
: error === undefined
|
|
160
|
+
? undefined
|
|
161
|
+
: "NonErrorThrown";
|
|
162
|
+
const stack = error instanceof Error
|
|
163
|
+
? error.stack || `${failureClass}: ${error.message}`
|
|
164
|
+
: error === undefined
|
|
165
|
+
? undefined
|
|
166
|
+
: String(error);
|
|
167
|
+
const perField = maxRecordBytes;
|
|
168
|
+
const record = {
|
|
169
|
+
timestamp: redactedString(now().toISOString(), perField),
|
|
170
|
+
runtimeVersion: redactedString(context.runtimeVersion, perField),
|
|
171
|
+
buildSha: redactedString(context.buildSha, perField),
|
|
172
|
+
entryPath: redactedString(context.entryPath, perField),
|
|
173
|
+
pid: context.pid,
|
|
174
|
+
dataRoot: redactedString(context.dataRoot, perField),
|
|
175
|
+
launchSource: redactedString(context.launchSource, perField),
|
|
176
|
+
stage: redactedString(input.stage, perField),
|
|
177
|
+
message: redactedString(input.message, perField),
|
|
178
|
+
};
|
|
179
|
+
if (failureClass !== undefined)
|
|
180
|
+
record.failureClass = redactedString(failureClass, 128);
|
|
181
|
+
if (stack !== undefined)
|
|
182
|
+
record.stack = redactedString(stack, perField);
|
|
183
|
+
let encoded = Buffer.from(`${JSON.stringify(record)}\n`, "utf8");
|
|
184
|
+
const shrinkOrder = ["message", "entryPath", "dataRoot", "stack", "runtimeVersion", "buildSha"];
|
|
185
|
+
const minimumBytes = {
|
|
186
|
+
message: 8,
|
|
187
|
+
entryPath: 16,
|
|
188
|
+
dataRoot: 16,
|
|
189
|
+
stack: 160,
|
|
190
|
+
runtimeVersion: 8,
|
|
191
|
+
buildSha: 8,
|
|
192
|
+
};
|
|
193
|
+
while (encoded.length > maxRecordBytes) {
|
|
194
|
+
const key = shrinkOrder.find((candidate) => {
|
|
195
|
+
const value = record[candidate];
|
|
196
|
+
return typeof value === "string" && Buffer.byteLength(value) > (minimumBytes[candidate] ?? 8);
|
|
197
|
+
});
|
|
198
|
+
if (!key)
|
|
199
|
+
throw new Error("diagnostic record metadata exceeds the configured bound");
|
|
200
|
+
const value = record[key];
|
|
201
|
+
const currentBytes = Buffer.byteLength(value);
|
|
202
|
+
const nextBytes = Math.max(minimumBytes[key] ?? 8, currentBytes - Math.max(16, encoded.length - maxRecordBytes));
|
|
203
|
+
record[key] = truncateUtf8(value, nextBytes);
|
|
204
|
+
encoded = Buffer.from(`${JSON.stringify(record)}\n`, "utf8");
|
|
205
|
+
}
|
|
206
|
+
return encoded;
|
|
207
|
+
}
|
|
208
|
+
function writeOversizeDiscardReceipt(path, context, options) {
|
|
209
|
+
const line = diagnosticLine(context, {
|
|
210
|
+
stage: "diagnostic_legacy_log_discarded",
|
|
211
|
+
message: "an oversized legacy diagnostic generation was discarded without copying its bytes",
|
|
212
|
+
}, options.now, options.maxRecordBytes);
|
|
213
|
+
let fd = openExistingSafe(path, {
|
|
214
|
+
platform: options.platform,
|
|
215
|
+
uid: options.uid,
|
|
216
|
+
repairMode: true,
|
|
217
|
+
create: false,
|
|
218
|
+
});
|
|
219
|
+
try {
|
|
220
|
+
if (fd === undefined) {
|
|
221
|
+
fd = openSafeFile(path, {
|
|
222
|
+
platform: options.platform,
|
|
223
|
+
uid: options.uid,
|
|
224
|
+
repairMode: true,
|
|
225
|
+
create: true,
|
|
226
|
+
exclusive: true,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
ftruncateSync(fd, 0);
|
|
230
|
+
writeAll(fd, line);
|
|
231
|
+
fsyncSync(fd);
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
closeQuietly(fd);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/** Coerce an environment-supplied launch source into a SAFE_LABEL value —
|
|
238
|
+
* "unknown" when absent or unsafe. Diagnostics never fail daemon startup, so
|
|
239
|
+
* a malformed environment must degrade to a safe label, not a throw. */
|
|
240
|
+
export function safeDaemonLaunchSource(value) {
|
|
241
|
+
const trimmed = value?.trim() ?? "";
|
|
242
|
+
return SAFE_LABEL.test(trimmed) ? trimmed : "unknown";
|
|
243
|
+
}
|
|
244
|
+
/** Open the canonical writer only after a separate root-authority owner won. */
|
|
245
|
+
export function openDaemonStartupDiagnosticsAfterAuthority(context, options = {}) {
|
|
246
|
+
if (!Number.isSafeInteger(context.pid) || context.pid <= 0)
|
|
247
|
+
throw new Error("invalid daemon pid");
|
|
248
|
+
if (!SAFE_LABEL.test(context.launchSource))
|
|
249
|
+
throw new Error("invalid daemon launch source");
|
|
250
|
+
const path = resolve(options.path ?? canonicalLogPath());
|
|
251
|
+
const rotatedPath = `${path}.1`;
|
|
252
|
+
const maxCurrentBytes = boundedPositiveInt(options.maxCurrentBytes ?? DEFAULT_CURRENT_BYTES, "maxCurrentBytes", MIN_RECORD_BYTES);
|
|
253
|
+
const maxRecordBytes = boundedPositiveInt(options.maxRecordBytes ?? DEFAULT_RECORD_BYTES, "maxRecordBytes", MIN_RECORD_BYTES);
|
|
254
|
+
if (maxRecordBytes > maxCurrentBytes) {
|
|
255
|
+
throw new Error("maxRecordBytes must not exceed maxCurrentBytes");
|
|
256
|
+
}
|
|
257
|
+
const platform = options.platform ?? process.platform;
|
|
258
|
+
const uid = options.uid ?? process.getuid?.();
|
|
259
|
+
const now = options.now ?? (() => new Date());
|
|
260
|
+
const writerKey = writerIdentity(path);
|
|
261
|
+
if (activeWriters.has(writerKey))
|
|
262
|
+
throw new Error(`one diagnostic writer is already active for ${path}`);
|
|
263
|
+
let fd;
|
|
264
|
+
let closed = false;
|
|
265
|
+
let failure = null;
|
|
266
|
+
try {
|
|
267
|
+
fd = openSafeFile(path, { platform, uid, repairMode: true, create: true });
|
|
268
|
+
const current = fstatSync(fd);
|
|
269
|
+
const rotated = openExistingSafe(rotatedPath, {
|
|
270
|
+
platform,
|
|
271
|
+
uid,
|
|
272
|
+
repairMode: true,
|
|
273
|
+
create: false,
|
|
274
|
+
});
|
|
275
|
+
if (rotated !== undefined) {
|
|
276
|
+
const size = fstatSync(rotated).size;
|
|
277
|
+
closeQuietly(rotated);
|
|
278
|
+
if (size > maxCurrentBytes) {
|
|
279
|
+
writeOversizeDiscardReceipt(rotatedPath, context, {
|
|
280
|
+
maxRecordBytes,
|
|
281
|
+
platform,
|
|
282
|
+
uid,
|
|
283
|
+
now,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (current.size > maxCurrentBytes) {
|
|
288
|
+
ftruncateSync(fd, 0);
|
|
289
|
+
fsyncSync(fd);
|
|
290
|
+
writeOversizeDiscardReceipt(rotatedPath, context, {
|
|
291
|
+
maxRecordBytes,
|
|
292
|
+
platform,
|
|
293
|
+
uid,
|
|
294
|
+
now,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
activeWriters.add(writerKey);
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
closeQuietly(fd);
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
303
|
+
const rotate = () => {
|
|
304
|
+
if (fd === undefined)
|
|
305
|
+
throw new Error("diagnostic writer is closed");
|
|
306
|
+
validateOpenedPath(path, fd, { platform, uid, repairMode: true, create: false });
|
|
307
|
+
const prior = openExistingSafe(rotatedPath, {
|
|
308
|
+
platform,
|
|
309
|
+
uid,
|
|
310
|
+
repairMode: true,
|
|
311
|
+
create: false,
|
|
312
|
+
});
|
|
313
|
+
closeQuietly(prior);
|
|
314
|
+
if (prior !== undefined)
|
|
315
|
+
unlinkSync(rotatedPath);
|
|
316
|
+
closeSync(fd);
|
|
317
|
+
fd = undefined;
|
|
318
|
+
renameSync(path, rotatedPath);
|
|
319
|
+
fd = openSafeFile(path, {
|
|
320
|
+
platform,
|
|
321
|
+
uid,
|
|
322
|
+
repairMode: true,
|
|
323
|
+
create: true,
|
|
324
|
+
exclusive: true,
|
|
325
|
+
});
|
|
326
|
+
};
|
|
327
|
+
return {
|
|
328
|
+
path,
|
|
329
|
+
rotatedPath,
|
|
330
|
+
record(input) {
|
|
331
|
+
if (closed || fd === undefined) {
|
|
332
|
+
failure = "diagnostic writer is closed";
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
try {
|
|
336
|
+
if (!SAFE_LABEL.test(input.stage))
|
|
337
|
+
throw new Error("invalid diagnostic stage");
|
|
338
|
+
const line = diagnosticLine(context, input, now, maxRecordBytes);
|
|
339
|
+
if (fstatSync(fd).size + line.length > maxCurrentBytes)
|
|
340
|
+
rotate();
|
|
341
|
+
if (fd === undefined)
|
|
342
|
+
throw new Error("diagnostic writer closed during rotation");
|
|
343
|
+
writeAll(fd, line);
|
|
344
|
+
return true;
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
failure = safeProblemMessage(error);
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
close() {
|
|
352
|
+
if (closed)
|
|
353
|
+
return;
|
|
354
|
+
closed = true;
|
|
355
|
+
activeWriters.delete(writerKey);
|
|
356
|
+
closeQuietly(fd);
|
|
357
|
+
fd = undefined;
|
|
358
|
+
},
|
|
359
|
+
lastFailure: () => failure,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Read a current-generation tail through the same inode proof.
|
|
364
|
+
*
|
|
365
|
+
* A file larger than the writer's current-generation cap is legacy or otherwise
|
|
366
|
+
* outside the bounded writer contract. Do not select a byte window from it:
|
|
367
|
+
* that boundary can remove the prefix/header required to redact any token family
|
|
368
|
+
* or multiline private-key block. Return typed omission evidence without reading
|
|
369
|
+
* file content instead. Files within the cap are read in full, redacted, and only
|
|
370
|
+
* then reduced to the requested line tail.
|
|
371
|
+
*/
|
|
372
|
+
export function readDaemonDiagnosticTail(options = {}) {
|
|
373
|
+
const path = resolve(options.path ?? canonicalLogPath());
|
|
374
|
+
const lines = boundedPositiveInt(options.lines ?? 40, "lines", 1);
|
|
375
|
+
if (lines > MAX_TAIL_LINES)
|
|
376
|
+
throw new Error(`lines must not exceed ${MAX_TAIL_LINES}`);
|
|
377
|
+
const platform = options.platform ?? process.platform;
|
|
378
|
+
const uid = options.uid ?? process.getuid?.();
|
|
379
|
+
const fd = openSafeFile(path, {
|
|
380
|
+
platform,
|
|
381
|
+
uid,
|
|
382
|
+
repairMode: false,
|
|
383
|
+
create: false,
|
|
384
|
+
readOnly: true,
|
|
385
|
+
});
|
|
386
|
+
try {
|
|
387
|
+
const size = fstatSync(fd).size;
|
|
388
|
+
if (size > MAX_TAIL_BYTES) {
|
|
389
|
+
return {
|
|
390
|
+
kind: "oversize_omitted",
|
|
391
|
+
observedBytes: size,
|
|
392
|
+
limitBytes: MAX_TAIL_BYTES,
|
|
393
|
+
text: `[daemon diagnostic tail omitted: oversize_omitted; ${size} bytes exceeds the ${MAX_TAIL_BYTES}-byte safe read limit]\n`,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
const bytes = Buffer.alloc(size);
|
|
397
|
+
let offset = 0;
|
|
398
|
+
while (offset < size) {
|
|
399
|
+
const read = readSync(fd, bytes, offset, size - offset, offset);
|
|
400
|
+
if (read === 0)
|
|
401
|
+
break;
|
|
402
|
+
offset += read;
|
|
403
|
+
}
|
|
404
|
+
const text = redactSecrets(bytes.subarray(0, offset).toString("utf8"));
|
|
405
|
+
const split = text.split("\n");
|
|
406
|
+
const terminated = split.at(-1) === "";
|
|
407
|
+
if (terminated)
|
|
408
|
+
split.pop();
|
|
409
|
+
const tail = split.slice(-lines).join("\n");
|
|
410
|
+
return { kind: "retained", text: terminated && tail ? `${tail}\n` : tail };
|
|
411
|
+
}
|
|
412
|
+
finally {
|
|
413
|
+
closeSync(fd);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
//# sourceMappingURL=startup-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-diagnostics.js","sourceRoot":"","sources":["../src/startup-diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ProjectPartitions, ResourceStore } from "@claudexor/daemon";
|
|
2
2
|
import type { ResourceAttachmentRef, TurnEnqueueProblem } from "@claudexor/schema";
|
|
3
3
|
/** Thin Control API bindings over the daemon's durable thread-turn authority. */
|
|
4
|
-
export declare function threadTurnServices(threads: ProjectPartitions, resources: ResourceStore): {
|
|
4
|
+
export declare function threadTurnServices(threads: ProjectPartitions, resources: Pick<ResourceStore, "resolve">): {
|
|
5
5
|
threadDetail: (id: string) => Promise<{
|
|
6
6
|
thread: unknown;
|
|
7
7
|
sessions: unknown[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-turn-services.d.ts","sourceRoot":"","sources":["../src/thread-turn-services.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEnF,iFAAiF;AACjF,wBAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"thread-turn-services.d.ts","sourceRoot":"","sources":["../src/thread-turn-services.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEnF,iFAAiF;AACjF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;IAGvC,YAAY,OAAa,MAAM;gBAIT,OAAO;kBACkB,OAAO,EAAE;eACrB,OAAO,EAAE;;IAG5C,gBAAgB,OACV,MAAM,UACF,MAAM,WACL;QACP,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;QACtC,WAAW,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC;KACjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAYH,2BAA2B,OACrB,MAAM,eACG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEhE,mBAAmB,WAAW,MAAM,WAAW,kBAAkB;EAGpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-turn-services.js","sourceRoot":"","sources":["../src/thread-turn-services.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,
|
|
1
|
+
{"version":3,"file":"thread-turn-services.js","sourceRoot":"","sources":["../src/thread-turn-services.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAChC,OAA0B,EAC1B,SAAyC;IAEzC,OAAO;QACL,YAAY,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM;gBAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACtF,OAAO;gBACL,MAAM,EAAE,MAAiB;gBACzB,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAc;gBACpD,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAc;aACzC,CAAC;QACJ,CAAC;QACD,gBAAgB,EAAE,KAAK,EACrB,EAAU,EACV,MAAc,EACd,OASC,EACD,EAAE,CACF,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE;YAC7B,IAAI,EAAE,OAAO,CAAC,IAAW;YACzB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YACnD,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;QACJ,2BAA2B,EAAE,KAAK,EAChC,EAAU,EACV,WAA8D,EAC9D,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,IAAI;QAC3D,mBAAmB,EAAE,CAAC,MAAc,EAAE,OAA2B,EAAE,EAAE,CACnE,OAAO,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;KAC/C,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claudexor/cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Claudexor CLI (claudexor). Thin surface over the orchestrator.",
|
|
6
6
|
"type": "module",
|
|
@@ -10,28 +10,28 @@
|
|
|
10
10
|
"dist"
|
|
11
11
|
],
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@claudexor/
|
|
14
|
-
"@claudexor/
|
|
15
|
-
"@claudexor/
|
|
16
|
-
"@claudexor/control-api": "3.
|
|
17
|
-
"@claudexor/delivery": "3.
|
|
18
|
-
"@claudexor/core": "3.
|
|
19
|
-
"@claudexor/daemon": "3.
|
|
20
|
-
"@claudexor/
|
|
21
|
-
"@claudexor/
|
|
22
|
-
"@claudexor/
|
|
23
|
-
"@claudexor/
|
|
24
|
-
"@claudexor/
|
|
25
|
-
"@claudexor/harness-
|
|
26
|
-
"@claudexor/harness-
|
|
27
|
-
"@claudexor/harness-
|
|
28
|
-
"@claudexor/harness-
|
|
29
|
-
"@claudexor/harness-raw-api": "3.
|
|
30
|
-
"@claudexor/schema": "3.
|
|
31
|
-
"@claudexor/
|
|
32
|
-
"@claudexor/
|
|
33
|
-
"@claudexor/
|
|
34
|
-
"@claudexor/workspace": "3.
|
|
13
|
+
"@claudexor/artifact-store": "3.4.1",
|
|
14
|
+
"@claudexor/config": "3.4.1",
|
|
15
|
+
"@claudexor/acp-server": "3.4.1",
|
|
16
|
+
"@claudexor/control-api": "3.4.1",
|
|
17
|
+
"@claudexor/delivery": "3.4.1",
|
|
18
|
+
"@claudexor/core": "3.4.1",
|
|
19
|
+
"@claudexor/daemon": "3.4.1",
|
|
20
|
+
"@claudexor/gateway": "3.4.1",
|
|
21
|
+
"@claudexor/mcp-server": "3.4.1",
|
|
22
|
+
"@claudexor/journal": "3.4.1",
|
|
23
|
+
"@claudexor/orchestrator": "3.4.1",
|
|
24
|
+
"@claudexor/review": "3.4.1",
|
|
25
|
+
"@claudexor/harness-claude": "3.4.1",
|
|
26
|
+
"@claudexor/harness-codex": "3.4.1",
|
|
27
|
+
"@claudexor/harness-fake": "3.4.1",
|
|
28
|
+
"@claudexor/harness-opencode": "3.4.1",
|
|
29
|
+
"@claudexor/harness-raw-api": "3.4.1",
|
|
30
|
+
"@claudexor/schema": "3.4.1",
|
|
31
|
+
"@claudexor/harness-cursor": "3.4.1",
|
|
32
|
+
"@claudexor/secrets": "3.4.1",
|
|
33
|
+
"@claudexor/util": "3.4.1",
|
|
34
|
+
"@claudexor/workspace": "3.4.1"
|
|
35
35
|
},
|
|
36
36
|
"repository": {
|
|
37
37
|
"type": "git",
|