@pentoshi/clai 4.9.0 → 4.10.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.
- package/README.md +22 -1
- package/dist/agent/compaction-executor.d.ts +3 -5
- package/dist/agent/compaction-executor.js +165 -28
- package/dist/agent/compaction-executor.js.map +1 -1
- package/dist/app/commands/catalog.js +5 -0
- package/dist/app/commands/catalog.js.map +1 -1
- package/dist/app/commands/registry.js +1 -0
- package/dist/app/commands/registry.js.map +1 -1
- package/dist/classic/bootstrap/start-classic.d.ts +1 -0
- package/dist/classic/bootstrap/start-classic.js +13 -0
- package/dist/classic/bootstrap/start-classic.js.map +1 -1
- package/dist/index.js +60 -7
- package/dist/index.js.map +1 -1
- package/dist/interactive-session/transport-node-pty.d.ts +10 -1
- package/dist/interactive-session/transport-node-pty.js +36 -12
- package/dist/interactive-session/transport-node-pty.js.map +1 -1
- package/dist/llm/operation-ledger.js +6 -2
- package/dist/llm/operation-ledger.js.map +1 -1
- package/dist/session-runtime/binding.d.ts +5 -0
- package/dist/session-runtime/binding.js +28 -0
- package/dist/session-runtime/binding.js.map +1 -0
- package/dist/session-runtime/child-bridge.d.ts +31 -0
- package/dist/session-runtime/child-bridge.js +169 -0
- package/dist/session-runtime/child-bridge.js.map +1 -0
- package/dist/session-runtime/client.d.ts +8 -0
- package/dist/session-runtime/client.js +448 -0
- package/dist/session-runtime/client.js.map +1 -0
- package/dist/session-runtime/discovery.d.ts +6 -0
- package/dist/session-runtime/discovery.js +100 -0
- package/dist/session-runtime/discovery.js.map +1 -0
- package/dist/session-runtime/host.d.ts +77 -0
- package/dist/session-runtime/host.js +758 -0
- package/dist/session-runtime/host.js.map +1 -0
- package/dist/session-runtime/launch.d.ts +11 -0
- package/dist/session-runtime/launch.js +68 -0
- package/dist/session-runtime/launch.js.map +1 -0
- package/dist/session-runtime/paths.d.ts +8 -0
- package/dist/session-runtime/paths.js +92 -0
- package/dist/session-runtime/paths.js.map +1 -0
- package/dist/session-runtime/protocol.d.ts +22 -0
- package/dist/session-runtime/protocol.js +149 -0
- package/dist/session-runtime/protocol.js.map +1 -0
- package/dist/session-runtime/replay-buffer.d.ts +12 -0
- package/dist/session-runtime/replay-buffer.js +50 -0
- package/dist/session-runtime/replay-buffer.js.map +1 -0
- package/dist/session-runtime/store.d.ts +14 -0
- package/dist/session-runtime/store.js +143 -0
- package/dist/session-runtime/store.js.map +1 -0
- package/dist/session-runtime/types.d.ts +102 -0
- package/dist/session-runtime/types.js +2 -0
- package/dist/session-runtime/types.js.map +1 -0
- package/dist/tui-v2/bootstrap/start-tui-v2.d.ts +1 -0
- package/dist/tui-v2/bootstrap/start-tui-v2.js +13 -0
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/ui-core/bootstrap/composition-root.d.ts +4 -0
- package/dist/ui-core/bootstrap/composition-root.js +2 -0
- package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
- package/dist/ui-core/commands/command-handlers.js +3 -2
- package/dist/ui-core/commands/command-handlers.js.map +1 -1
- package/dist/ui-core/commands/config-commands.d.ts +1 -0
- package/dist/ui-core/commands/config-commands.js +6 -0
- package/dist/ui-core/commands/config-commands.js.map +1 -1
- package/dist/ui-core/commands/picker-commands.js +68 -25
- package/dist/ui-core/commands/picker-commands.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/dist/version.generated.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { rm } from "node:fs/promises";
|
|
2
|
+
import { processIdentityTracker } from "../os/process-identity.js";
|
|
3
|
+
import { processAlive } from "../os/process-tree.js";
|
|
4
|
+
import { connectRuntimeSocket, readFirstFrame, sendFrame } from "./protocol.js";
|
|
5
|
+
import { isRuntimeSocketPath } from "./paths.js";
|
|
6
|
+
import { deleteRuntimeLock, deleteRuntimeMetadata, listRuntimeMetadata, } from "./store.js";
|
|
7
|
+
import { RUNTIME_PROTOCOL_VERSION, } from "./types.js";
|
|
8
|
+
function isAck(value, sessionId) {
|
|
9
|
+
if (!value || typeof value !== "object")
|
|
10
|
+
return false;
|
|
11
|
+
const frame = value;
|
|
12
|
+
return (frame.version === RUNTIME_PROTOCOL_VERSION &&
|
|
13
|
+
frame.type === "ack" &&
|
|
14
|
+
frame.sessionId === sessionId);
|
|
15
|
+
}
|
|
16
|
+
export async function probeRuntime(metadata, timeoutMs = 500) {
|
|
17
|
+
let socket;
|
|
18
|
+
try {
|
|
19
|
+
socket = await connectRuntimeSocket(metadata.socketPath, timeoutMs);
|
|
20
|
+
sendFrame(socket, {
|
|
21
|
+
version: RUNTIME_PROTOCOL_VERSION,
|
|
22
|
+
type: "auth",
|
|
23
|
+
role: "probe",
|
|
24
|
+
token: metadata.token,
|
|
25
|
+
});
|
|
26
|
+
const first = await readFirstFrame(socket, timeoutMs);
|
|
27
|
+
return isAck(first.value, metadata.sessionId);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
socket?.destroy();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function reapIfStale(metadata) {
|
|
37
|
+
const comparison = processIdentityTracker.compare(metadata.hostPid, metadata.hostIdentity);
|
|
38
|
+
const stale = comparison === "gone" ||
|
|
39
|
+
comparison === "mismatch" ||
|
|
40
|
+
(comparison === "unknown" && !processAlive(metadata.hostPid));
|
|
41
|
+
if (!stale)
|
|
42
|
+
return;
|
|
43
|
+
await Promise.all([
|
|
44
|
+
deleteRuntimeMetadata(metadata.sessionId),
|
|
45
|
+
deleteRuntimeLock(metadata.sessionId),
|
|
46
|
+
isRuntimeSocketPath(metadata.socketPath)
|
|
47
|
+
? rm(metadata.socketPath, { force: true }).catch(() => undefined)
|
|
48
|
+
: Promise.resolve(),
|
|
49
|
+
]);
|
|
50
|
+
}
|
|
51
|
+
export async function listLiveRuntimeMetadata() {
|
|
52
|
+
const candidates = await listRuntimeMetadata();
|
|
53
|
+
const checked = await Promise.all(candidates.map(async (metadata) => {
|
|
54
|
+
if (await probeRuntime(metadata))
|
|
55
|
+
return metadata;
|
|
56
|
+
await reapIfStale(metadata);
|
|
57
|
+
return undefined;
|
|
58
|
+
}));
|
|
59
|
+
const bySession = new Map();
|
|
60
|
+
for (const metadata of checked) {
|
|
61
|
+
if (!metadata)
|
|
62
|
+
continue;
|
|
63
|
+
const previous = bySession.get(metadata.sessionId);
|
|
64
|
+
if (!previous || previous.updatedAt < metadata.updatedAt) {
|
|
65
|
+
bySession.set(metadata.sessionId, metadata);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return [...bySession.values()].sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
|
|
69
|
+
}
|
|
70
|
+
export async function findLiveRuntime(sessionIdOrPrefix) {
|
|
71
|
+
const needle = sessionIdOrPrefix.trim().toLowerCase();
|
|
72
|
+
if (!needle)
|
|
73
|
+
return undefined;
|
|
74
|
+
const records = await listLiveRuntimeMetadata();
|
|
75
|
+
const exact = records.find((record) => record.sessionId.toLowerCase() === needle);
|
|
76
|
+
if (exact)
|
|
77
|
+
return exact;
|
|
78
|
+
const matches = records.filter((record) => record.sessionId.toLowerCase().startsWith(needle));
|
|
79
|
+
if (matches.length > 1) {
|
|
80
|
+
throw new Error(`"${sessionIdOrPrefix}" matches ${matches.length} live sessions — pass a longer id`);
|
|
81
|
+
}
|
|
82
|
+
return matches[0];
|
|
83
|
+
}
|
|
84
|
+
export async function latestLiveRuntime(cwd) {
|
|
85
|
+
const normalized = cwd.replace(/[\\/]+$/, "");
|
|
86
|
+
return (await listLiveRuntimeMetadata()).find((record) => record.cwd.replace(/[\\/]+$/, "") === normalized);
|
|
87
|
+
}
|
|
88
|
+
export async function listLiveSessionRuntimes() {
|
|
89
|
+
return (await listLiveRuntimeMetadata()).map((record) => ({
|
|
90
|
+
sessionId: record.sessionId,
|
|
91
|
+
cwd: record.cwd,
|
|
92
|
+
...(record.title ? { title: record.title } : {}),
|
|
93
|
+
startedAt: record.startedAt,
|
|
94
|
+
updatedAt: record.updatedAt,
|
|
95
|
+
phase: record.phase,
|
|
96
|
+
busy: record.busy,
|
|
97
|
+
attached: record.attached,
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/session-runtime/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type RuntimeHostPayload } from "./types.js";
|
|
2
|
+
export declare class SessionRuntimeHost {
|
|
3
|
+
private readonly payload;
|
|
4
|
+
private readonly token;
|
|
5
|
+
private readonly replay;
|
|
6
|
+
private readonly startedAt;
|
|
7
|
+
private sessionId;
|
|
8
|
+
private cwd;
|
|
9
|
+
private socketPath;
|
|
10
|
+
private title;
|
|
11
|
+
private busy;
|
|
12
|
+
private attached;
|
|
13
|
+
private phase;
|
|
14
|
+
private error;
|
|
15
|
+
private lease;
|
|
16
|
+
private server;
|
|
17
|
+
private readonly connections;
|
|
18
|
+
private transport;
|
|
19
|
+
private client;
|
|
20
|
+
private childSocket;
|
|
21
|
+
private childChannel;
|
|
22
|
+
private idleTimer;
|
|
23
|
+
private forceTimer;
|
|
24
|
+
private livenessTimer;
|
|
25
|
+
private livenessMisses;
|
|
26
|
+
private expectedExitCode;
|
|
27
|
+
private metadataTimer;
|
|
28
|
+
private metadataDirty;
|
|
29
|
+
private outputPausedFor;
|
|
30
|
+
private outputDrainHandler;
|
|
31
|
+
private metadataWrites;
|
|
32
|
+
private inputWrites;
|
|
33
|
+
private statusWrites;
|
|
34
|
+
private closing;
|
|
35
|
+
private cleaning;
|
|
36
|
+
private exitOutcome;
|
|
37
|
+
private resolveExit;
|
|
38
|
+
private readonly exitPromise;
|
|
39
|
+
private readonly signalHandlers;
|
|
40
|
+
constructor(payload: RuntimeHostPayload);
|
|
41
|
+
run(): Promise<void>;
|
|
42
|
+
private startServer;
|
|
43
|
+
private startChild;
|
|
44
|
+
private armChildLiveness;
|
|
45
|
+
private accept;
|
|
46
|
+
private acknowledge;
|
|
47
|
+
private acceptClientControl;
|
|
48
|
+
private acceptClientTerminal;
|
|
49
|
+
private acceptChild;
|
|
50
|
+
private handleClientFrame;
|
|
51
|
+
private handleChildFrame;
|
|
52
|
+
private applyStatus;
|
|
53
|
+
private rebind;
|
|
54
|
+
private publishOutput;
|
|
55
|
+
private writeToTerminal;
|
|
56
|
+
private applyOutputBackpressure;
|
|
57
|
+
private releaseOutputBackpressure;
|
|
58
|
+
private flushTerminalOutput;
|
|
59
|
+
private queueInput;
|
|
60
|
+
private resize;
|
|
61
|
+
private clientClosed;
|
|
62
|
+
private sendToClient;
|
|
63
|
+
private disconnectClient;
|
|
64
|
+
private closeClientSockets;
|
|
65
|
+
private scheduleIdleTimer;
|
|
66
|
+
private cancelIdleTimer;
|
|
67
|
+
private requestGracefulStop;
|
|
68
|
+
private metadataSnapshot;
|
|
69
|
+
private queueMetadata;
|
|
70
|
+
private flushQueuedMetadata;
|
|
71
|
+
private writeMetadataNow;
|
|
72
|
+
private installSignals;
|
|
73
|
+
private removeSignals;
|
|
74
|
+
private cleanup;
|
|
75
|
+
}
|
|
76
|
+
export declare function runRuntimeHostFromEnvironment(): Promise<boolean>;
|
|
77
|
+
export declare function runtimeHostClientId(): string;
|