neoctl 0.2.2 → 0.2.3

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 (51) hide show
  1. package/dist/repl/index.js +2 -2
  2. package/dist/repl/index.js.map +1 -1
  3. package/package.json +3 -2
  4. package/dist/core/commands.d.ts +0 -66
  5. package/dist/core/commands.js +0 -151
  6. package/dist/core/commands.js.map +0 -1
  7. package/dist/core/runtime.d.ts +0 -59
  8. package/dist/core/runtime.js +0 -161
  9. package/dist/core/runtime.js.map +0 -1
  10. package/dist/repl/render.d.ts +0 -2
  11. package/dist/repl/render.js +0 -45
  12. package/dist/repl/render.js.map +0 -1
  13. package/dist/repl/status-line.d.ts +0 -19
  14. package/dist/repl/status-line.js +0 -160
  15. package/dist/repl/status-line.js.map +0 -1
  16. package/dist/repl/transcript-flush.d.ts +0 -6
  17. package/dist/repl/transcript-flush.js +0 -54
  18. package/dist/repl/transcript-flush.js.map +0 -1
  19. package/dist/repl/transcript-format.d.ts +0 -16
  20. package/dist/repl/transcript-format.js +0 -199
  21. package/dist/repl/transcript-format.js.map +0 -1
  22. package/dist/server/agent-manager.d.ts +0 -56
  23. package/dist/server/agent-manager.js +0 -171
  24. package/dist/server/agent-manager.js.map +0 -1
  25. package/dist/server/connection-manager.d.ts +0 -18
  26. package/dist/server/connection-manager.js +0 -52
  27. package/dist/server/connection-manager.js.map +0 -1
  28. package/dist/server/event-mapper.d.ts +0 -4
  29. package/dist/server/event-mapper.js +0 -31
  30. package/dist/server/event-mapper.js.map +0 -1
  31. package/dist/server/query-runtime.d.ts +0 -29
  32. package/dist/server/query-runtime.js +0 -61
  33. package/dist/server/query-runtime.js.map +0 -1
  34. package/dist/server/rpc-router.d.ts +0 -24
  35. package/dist/server/rpc-router.js +0 -165
  36. package/dist/server/rpc-router.js.map +0 -1
  37. package/dist/server/rpc-types.d.ts +0 -92
  38. package/dist/server/rpc-types.js +0 -2
  39. package/dist/server/rpc-types.js.map +0 -1
  40. package/dist/server/ws-server.d.ts +0 -22
  41. package/dist/server/ws-server.js +0 -84
  42. package/dist/server/ws-server.js.map +0 -1
  43. package/dist/tasks/task-record.d.ts +0 -50
  44. package/dist/tasks/task-record.js +0 -50
  45. package/dist/tasks/task-record.js.map +0 -1
  46. package/dist/tools/builtins/echo-tool.d.ts +0 -4
  47. package/dist/tools/builtins/echo-tool.js +0 -26
  48. package/dist/tools/builtins/echo-tool.js.map +0 -1
  49. package/dist/tools/builtins/vision-tool.d.ts +0 -38
  50. package/dist/tools/builtins/vision-tool.js +0 -351
  51. package/dist/tools/builtins/vision-tool.js.map +0 -1
@@ -1,160 +0,0 @@
1
- import readline from "node:readline";
2
- export class ReplStatusLine {
3
- output;
4
- phase = "ready";
5
- lastDetail = "";
6
- metrics;
7
- lastUsage;
8
- outputTokensStreamed = 0;
9
- visible = false;
10
- pulseFrame = 0;
11
- constructor(output) {
12
- this.output = output;
13
- }
14
- handle(event) {
15
- if (event.type === "state") {
16
- this.phase = event.phase;
17
- this.lastDetail = event.detail ?? "";
18
- if (event.phase === "preparing") {
19
- this.lastUsage = undefined;
20
- this.outputTokensStreamed = 0;
21
- }
22
- }
23
- if (event.type === "context.metrics") {
24
- this.metrics = event.metrics;
25
- }
26
- if (event.type === "assistant.delta") {
27
- this.outputTokensStreamed += estimateDeltaTokens(event.text);
28
- }
29
- if (event.type === "usage") {
30
- this.lastUsage = event.usage;
31
- }
32
- if (event.type === "terminal") {
33
- this.phase = "stopped";
34
- this.lastDetail = event.reason;
35
- }
36
- }
37
- clear() {
38
- if (!this.visible || !this.output.isTTY)
39
- return;
40
- readline.clearLine(this.output, 0);
41
- readline.cursorTo(this.output, 0);
42
- this.visible = false;
43
- }
44
- render() {
45
- if (!this.output.isTTY)
46
- return;
47
- const line = this.renderLine();
48
- readline.clearLine(this.output, 0);
49
- readline.cursorTo(this.output, 0);
50
- this.output.write(line);
51
- this.visible = true;
52
- }
53
- renderLine() {
54
- const input = this.lastUsage?.inputTokens ?? this.metrics?.estimatedInputTokens;
55
- const output = this.lastUsage?.outputTokens ?? this.outputTokensStreamed;
56
- const context = renderContext(this.metrics);
57
- const model = this.metrics?.model ?? "model?";
58
- const source = this.metrics?.contextWindowSource ?? "unknown";
59
- const detail = this.lastDetail ? ` - ${this.lastDetail}` : "";
60
- const width = terminalWidth(this.output);
61
- const label = animatedPhaseLabel(this.phase, this.pulseFrame);
62
- if (isActivePhase(this.phase))
63
- this.pulseFrame += 1;
64
- const fixedPrefix = [
65
- fixed(label, 12, "left"),
66
- contextMeter(this.metrics, 10),
67
- `model ${fixed(truncateMiddle(model, 20), 20, "left")}`,
68
- `in ${fixed(formatCompact(input), 7, "left")}`,
69
- `out ${fixed(formatCompact(output), 7, "left")}`,
70
- `ctx ${fixed(context, 20, "left")}`,
71
- `src ${fixed(source, 7, "left")}`,
72
- ].join(" ");
73
- return fitToWidth(`${fixedPrefix}${detail}`, width);
74
- }
75
- }
76
- function renderContext(metrics) {
77
- if (!metrics)
78
- return "unknown";
79
- const used = formatCompact(metrics.estimatedInputTokens);
80
- if (!metrics.contextWindowTokens)
81
- return `${used}/?`;
82
- const window = formatCompact(metrics.contextWindowTokens);
83
- const percent = metrics.contextUsageRatio === undefined ? "?" : `${(metrics.contextUsageRatio * 100).toFixed(1)}%`;
84
- return `${used}/${window} ${percent}`;
85
- }
86
- function estimateDeltaTokens(text) {
87
- if (!text)
88
- return 0;
89
- return Math.max(1, Math.ceil(text.length / 4));
90
- }
91
- function formatCompact(value) {
92
- if (value === undefined)
93
- return "?";
94
- const rounded = Math.max(0, Math.round(value));
95
- if (rounded >= 1_000_000)
96
- return `${trimFixed(rounded / 1_000_000)}m`;
97
- if (rounded >= 10_000)
98
- return `${Math.round(rounded / 1000)}k`;
99
- if (rounded >= 1000)
100
- return `${trimFixed(rounded / 1000)}k`;
101
- return String(rounded);
102
- }
103
- function trimFixed(value) {
104
- return value >= 10 ? value.toFixed(0) : value.toFixed(1).replace(/\.0$/, "");
105
- }
106
- function terminalWidth(output) {
107
- return Math.max(72, Math.min(output.columns ?? 100, 160)) - 1;
108
- }
109
- function animatedPhaseLabel(phase, tick) {
110
- const label = phaseLabel(phase).toUpperCase();
111
- if (!isActivePhase(phase))
112
- return label;
113
- return `${label}${STATUS_PULSE_FRAMES[tick % STATUS_PULSE_FRAMES.length]}`;
114
- }
115
- function phaseLabel(phase) {
116
- if (phase === "calling_model")
117
- return "model";
118
- if (phase === "running_tools")
119
- return "tools";
120
- if (phase === "injecting_context")
121
- return "context";
122
- return phase;
123
- }
124
- function isActivePhase(phase) {
125
- return phase === "running" ||
126
- phase === "preparing" ||
127
- phase === "calling_model" ||
128
- phase === "running_tools" ||
129
- phase === "compacting" ||
130
- phase === "injecting_context";
131
- }
132
- function contextMeter(metrics, width) {
133
- if (!metrics || metrics.contextUsageRatio === undefined)
134
- return `[${"-".repeat(width)}]`;
135
- const ratio = Math.max(0, Math.min(1, metrics.contextUsageRatio));
136
- const filled = Math.min(width, Math.max(0, Math.round(ratio * width)));
137
- return `[${"#".repeat(filled)}${"-".repeat(width - filled)}]`;
138
- }
139
- function fixed(value, width, align = "right") {
140
- const clipped = value.length > width ? value.slice(0, width) : value;
141
- return align === "left" ? clipped.padEnd(width, " ") : clipped.padStart(width, " ");
142
- }
143
- function fitToWidth(value, width) {
144
- if (value.length === width)
145
- return value;
146
- if (value.length > width)
147
- return value.slice(0, width);
148
- return value.padEnd(width, " ");
149
- }
150
- function truncateMiddle(value, maxLength) {
151
- if (value.length <= maxLength)
152
- return value;
153
- if (maxLength <= 3)
154
- return value.slice(0, maxLength);
155
- const left = Math.ceil((maxLength - 3) / 2);
156
- const right = Math.floor((maxLength - 3) / 2);
157
- return `${value.slice(0, left)}...${value.slice(value.length - right)}`;
158
- }
159
- const STATUS_PULSE_FRAMES = ["", ".", "..", "..."];
160
- //# sourceMappingURL=status-line.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/repl/status-line.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { type TranscriptUiLine } from "./transcript-format.js";
2
- export declare function TranscriptFlusher({ lines, columns, resetEpoch, }: {
3
- lines: readonly TranscriptUiLine[];
4
- columns: number;
5
- resetEpoch: number;
6
- }): null;
@@ -1,54 +0,0 @@
1
- import { useStdout } from "ink";
2
- import { useLayoutEffect } from "react";
3
- import { markdownRenderKey } from "./markdown-renderer.js";
4
- import { formatTranscriptBlock } from "./transcript-format.js";
5
- function messageContentWidth(columns) {
6
- return Math.max(10, columns - 2);
7
- }
8
- function lineNeedsDynamicRender(line, columns) {
9
- const w = messageContentWidth(columns);
10
- if (line.live || line.pendingReplacement)
11
- return true;
12
- if (line.previewStyle === "summary" || line.format === "ansi")
13
- return false;
14
- return line.renderedKey !== markdownRenderKey(line.text, line.kind, w);
15
- }
16
- function lineDigest(line) {
17
- return `${line.text}\0${line.renderedKey ?? ""}\0${Boolean(line.live)}\0${Boolean(line.pendingReplacement)}\0${line.title ?? ""}\0${line.format ?? ""}\0${line.previewStyle ?? ""}`;
18
- }
19
- /** Survives React remount / HMR so we do not re-append the same transcript blocks to scrollback. */
20
- let transcriptDigestMap = new Map();
21
- let transcriptDigestLastEpoch = -1;
22
- export function TranscriptFlusher({ lines, columns, resetEpoch, }) {
23
- const { write } = useStdout();
24
- useLayoutEffect(() => {
25
- if (transcriptDigestLastEpoch !== resetEpoch) {
26
- transcriptDigestMap.clear();
27
- transcriptDigestLastEpoch = resetEpoch;
28
- }
29
- const w = messageContentWidth(columns);
30
- let tailIndex = lines.findIndex((l) => lineNeedsDynamicRender(l, columns));
31
- if (tailIndex === -1)
32
- tailIndex = lines.length;
33
- const parts = [];
34
- for (let i = 0; i < tailIndex; i++) {
35
- const line = lines[i];
36
- if (!line)
37
- continue;
38
- const digest = lineDigest(line);
39
- const mapKey = `${resetEpoch}:${line.id}`;
40
- const prev = transcriptDigestMap.get(mapKey);
41
- if (prev === digest)
42
- continue;
43
- transcriptDigestMap.set(mapKey, digest);
44
- const block = formatTranscriptBlock(line, w);
45
- if (block.length === 0)
46
- continue;
47
- parts.push(block.endsWith("\n") ? block : `${block}\n`);
48
- }
49
- if (parts.length > 0)
50
- write(parts.join(""));
51
- }, [lines, columns, write, resetEpoch]);
52
- return null;
53
- }
54
- //# sourceMappingURL=transcript-flush.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcript-flush.js","sourceRoot":"","sources":["../../src/repl/transcript-flush.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export interface TranscriptUiLine {
2
- id: number;
3
- kind: "system" | "user" | "assistant" | "thinking" | "tool" | "error" | "meta";
4
- text: string;
5
- title?: string;
6
- bodyTitle?: string;
7
- titleStatus?: "success" | "failure";
8
- format?: "markdown" | "ansi" | "plain";
9
- previewStyle?: "summary";
10
- summaryMaxLines?: number;
11
- live?: boolean;
12
- pendingReplacement?: boolean;
13
- renderedKey?: string;
14
- }
15
- /** Full message block as ANSI (including role marker), for scrollback via Ink `write`. */
16
- export declare function formatTranscriptBlock(line: TranscriptUiLine, width: number): string;
@@ -1,199 +0,0 @@
1
- import chalk from "chalk";
2
- import stripAnsi from "strip-ansi";
3
- import wrapAnsi from "wrap-ansi";
4
- import { getRenderedMarkdownLines, markdownRenderKey, renderedLinesToAnsi, renderMarkdownPreviewToLines, } from "./markdown-renderer.js";
5
- const SUMMARY_BLOCK = {
6
- maxLines: 6,
7
- detailIndent: " ",
8
- };
9
- const THINKING_COLOR = "#a855f7";
10
- const THINKING_MARKER = "◆";
11
- const MESSAGE_ROLE_MARKER = "● ";
12
- function colorForKind(kind) {
13
- if (kind === "user")
14
- return chalk.cyan;
15
- if (kind === "assistant")
16
- return chalk.green;
17
- if (kind === "thinking")
18
- return chalk.hex(THINKING_COLOR);
19
- if (kind === "tool")
20
- return chalk.hex("#d4b04c");
21
- if (kind === "error")
22
- return chalk.red;
23
- if (kind === "meta")
24
- return chalk.gray;
25
- return chalk.white;
26
- }
27
- function markerColorForKind(kind) {
28
- if (kind === "thinking")
29
- return chalk.hex(THINKING_COLOR);
30
- return colorForKind(kind);
31
- }
32
- function messageRoleMarker(kind) {
33
- if (kind === "thinking")
34
- return `${THINKING_MARKER} `;
35
- return MESSAGE_ROLE_MARKER;
36
- }
37
- function titleForKind(kind) {
38
- if (kind === "thinking")
39
- return `${THINKING_MARKER} think`;
40
- if (kind === "tool")
41
- return "Tool";
42
- if (kind === "error")
43
- return "Error";
44
- if (kind === "meta")
45
- return "Meta";
46
- if (kind === "system")
47
- return "System";
48
- if (kind === "user")
49
- return "User";
50
- return "Assistant";
51
- }
52
- function titleStatusMarker(status) {
53
- return status === "success" ? "✓" : "✗";
54
- }
55
- function titleStatusColor(status) {
56
- return status === "success" ? chalk.green : chalk.red;
57
- }
58
- function summaryTitle(line) {
59
- if (summaryUsesRoleMarker(line))
60
- return "";
61
- const title = line.title ?? titleForKind(line.kind);
62
- if (!line.titleStatus)
63
- return title;
64
- return `${title} ${titleStatusMarker(line.titleStatus)}`;
65
- }
66
- function summaryUsesRoleMarker(line) {
67
- return line.previewStyle === "summary" && (line.kind === "system" || line.kind === "meta");
68
- }
69
- function titleProvidesToolMarker(line) {
70
- return line.kind === "tool" && !!line.title && (line.title.startsWith("◇ ") || line.title.startsWith("◆ "));
71
- }
72
- function truncateAnsi(value, maxLength) {
73
- let visible = 0;
74
- let cut = value.length;
75
- let inAnsi = false;
76
- for (let i = 0; i < value.length; i++) {
77
- const ch = value[i];
78
- if (ch === "\x1B") {
79
- inAnsi = true;
80
- continue;
81
- }
82
- if (inAnsi) {
83
- if (ch === "m")
84
- inAnsi = false;
85
- continue;
86
- }
87
- visible++;
88
- if (visible > maxLength) {
89
- cut = i;
90
- break;
91
- }
92
- }
93
- return value.slice(0, cut);
94
- }
95
- function renderSummaryLines(line, width) {
96
- const content = line.text;
97
- const detailWidth = Math.max(10, width - SUMMARY_BLOCK.detailIndent.length);
98
- const title = summaryTitle(line);
99
- const rawLines = content.replace(/\r\n/g, "\n").split("\n");
100
- const wrapped = rawLines.flatMap((rawLine, index) => {
101
- const lineWidth = index === 0 && !title ? width : detailWidth;
102
- return wrapAnsi(rawLine, Math.max(10, lineWidth), { hard: true, trim: false }).split("\n");
103
- });
104
- const maxLines = line.summaryMaxLines ?? SUMMARY_BLOCK.maxLines;
105
- const preview = [title, ...wrapped].filter((value) => stripAnsi(value).length > 0).slice(0, maxLines);
106
- if (wrapped.length + (title ? 1 : 0) > maxLines && preview.length > 0) {
107
- preview[preview.length - 1] = truncateAnsi(preview[preview.length - 1], Math.max(1, detailWidth - 1)) + "…";
108
- }
109
- return preview.length ? preview : [""];
110
- }
111
- function formatSummaryTranscript(line, width) {
112
- const useRoleMarker = summaryUsesRoleMarker(line);
113
- const summaryWidth = useRoleMarker ? width : Math.max(10, width - 2);
114
- const lines = renderSummaryLines(line, summaryWidth);
115
- const out = [];
116
- for (let index = 0; index < lines.length; index++) {
117
- const previewLine = lines[index] ?? "";
118
- const detail = index > 0;
119
- const text = detail ? `${SUMMARY_BLOCK.detailIndent}${previewLine}` : previewLine;
120
- if (!detail && line.titleStatus) {
121
- const marker = titleStatusMarker(line.titleStatus);
122
- const markerSuffix = ` ${marker}`;
123
- const titleText = text.endsWith(markerSuffix) ? text.slice(0, -markerSuffix.length) : `${text} `;
124
- out.push(`${colorForKind(line.kind).bold(titleText)}${titleStatusColor(line.titleStatus).bold(marker)}`);
125
- }
126
- else if (line.format === "ansi") {
127
- out.push(detail ? chalk.gray.dim(text) : `${colorForKind(line.kind).bold(text)}`);
128
- }
129
- else {
130
- out.push(detail ? chalk.gray.dim(text) : colorForKind(line.kind).bold(text));
131
- }
132
- }
133
- const prefix = useRoleMarker ? markerColorForKind(line.kind)(messageRoleMarker(line.kind)) : "";
134
- const body = out.join("\n");
135
- return useRoleMarker ? `${prefix}${body}` : body;
136
- }
137
- function formatPlainTranscript(line, width) {
138
- const useRoleMarker = !titleProvidesToolMarker(line);
139
- const lineWidth = useRoleMarker ? width : Math.max(10, width - 2);
140
- const parts = [];
141
- if (line.title) {
142
- const t = line.titleStatus
143
- ? `${colorForKind(line.kind).bold(line.title)} ${titleStatusColor(line.titleStatus).bold(titleStatusMarker(line.titleStatus))}`
144
- : colorForKind(line.kind).bold(line.title);
145
- parts.push(t);
146
- }
147
- if (line.bodyTitle)
148
- parts.push(chalk.bold(line.bodyTitle));
149
- const mdKind = line.kind;
150
- const rendered = getRenderedMarkdownLines(line.text, mdKind, lineWidth);
151
- parts.push(renderedLinesToAnsi(rendered, mdKind));
152
- const body = parts.join("\n");
153
- return useRoleMarker ? `${markerColorForKind(line.kind)(messageRoleMarker(line.kind))}${body}` : body;
154
- }
155
- function formatAnsiTranscript(line, width) {
156
- const useRoleMarker = !titleProvidesToolMarker(line);
157
- const lineWidth = useRoleMarker ? width : Math.max(10, width - 2);
158
- const wrapped = wrapAnsi(line.text, Math.max(10, lineWidth), { hard: true, trim: false }).split("\n");
159
- const parts = [];
160
- if (line.title) {
161
- const t = line.titleStatus
162
- ? `${colorForKind(line.kind).bold(line.title)} ${titleStatusColor(line.titleStatus).bold(titleStatusMarker(line.titleStatus))}`
163
- : colorForKind(line.kind).bold(line.title);
164
- parts.push(t);
165
- }
166
- if (line.bodyTitle)
167
- parts.push(chalk.bold(line.bodyTitle));
168
- parts.push(...wrapped);
169
- const body = parts.join("\n");
170
- return useRoleMarker ? `${markerColorForKind(line.kind)(messageRoleMarker(line.kind))}${body}` : body;
171
- }
172
- /** Full message block as ANSI (including role marker), for scrollback via Ink `write`. */
173
- export function formatTranscriptBlock(line, width) {
174
- if (line.previewStyle === "summary")
175
- return formatSummaryTranscript(line, width);
176
- if (line.format === "ansi")
177
- return formatAnsiTranscript(line, width);
178
- const key = markdownRenderKey(line.text, line.kind, width);
179
- if (line.renderedKey === key) {
180
- return formatPlainTranscript(line, width);
181
- }
182
- const mdKind = line.kind;
183
- const useRoleMarker = !titleProvidesToolMarker(line);
184
- const lineWidth = useRoleMarker ? width : Math.max(10, width - 2);
185
- const parts = [];
186
- if (line.title) {
187
- const t = line.titleStatus
188
- ? `${colorForKind(line.kind).bold(line.title)} ${titleStatusColor(line.titleStatus).bold(titleStatusMarker(line.titleStatus))}`
189
- : colorForKind(line.kind).bold(line.title);
190
- parts.push(t);
191
- }
192
- if (line.bodyTitle)
193
- parts.push(chalk.bold(line.bodyTitle));
194
- const preview = renderMarkdownPreviewToLines(line.text, mdKind, lineWidth);
195
- parts.push(renderedLinesToAnsi(preview, mdKind));
196
- const body = parts.join("\n");
197
- return useRoleMarker ? `${markerColorForKind(line.kind)(messageRoleMarker(line.kind))}${body}` : body;
198
- }
199
- //# sourceMappingURL=transcript-format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcript-format.js","sourceRoot":"","sources":["../../src/repl/transcript-format.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- import type { QueryEngine } from "../core/query-engine.js";
2
- import { type CoreRuntime, type CoreServices, type CreateCoreRuntimeOptions } from "../core/runtime.js";
3
- import type { RpcAgentSnapshot } from "./rpc-types.js";
4
- import { QueryRun, type QueryRunOptions } from "./query-runtime.js";
5
- export type ManagedAgentState = "attached" | "idle" | "running" | "detached_idle" | "detached_running" | "disposed";
6
- export interface AgentManagerOptions {
7
- idleAgentTtlMs?: number;
8
- reconnectGraceMs?: number;
9
- runningDetachedKeepAliveMs?: number;
10
- createRuntime?: (options: CreateCoreRuntimeOptions) => Promise<CoreRuntime>;
11
- services?: CoreServices;
12
- sessionCwd?: string;
13
- }
14
- export interface AgentIdentity {
15
- userId: string;
16
- agentId: string;
17
- sessionId?: string;
18
- }
19
- export interface ManagedAgent extends AgentIdentity {
20
- key: string;
21
- runtime: CoreRuntime;
22
- engine: QueryEngine;
23
- state: ManagedAgentState;
24
- attachedConnections: Set<string>;
25
- createdAt: Date;
26
- updatedAt: Date;
27
- lastDetachedAt?: Date;
28
- activeQuery?: QueryRun;
29
- }
30
- export declare class AgentManager {
31
- private readonly agents;
32
- private readonly createRuntime;
33
- private readonly idleAgentTtlMs;
34
- private readonly reconnectGraceMs;
35
- private readonly runningDetachedKeepAliveMs;
36
- private readonly services?;
37
- private readonly sessionCwd?;
38
- constructor(options?: AgentManagerOptions);
39
- getOrCreate(identity: AgentIdentity, options?: {
40
- resume?: boolean;
41
- }): Promise<ManagedAgent>;
42
- get(identity: AgentIdentity): ManagedAgent | undefined;
43
- attach(connectionId: string, identity: AgentIdentity, options?: {
44
- create?: boolean;
45
- resume?: boolean;
46
- }): Promise<ManagedAgent>;
47
- detach(connectionId: string, identity: AgentIdentity): ManagedAgent | undefined;
48
- detachConnectionFromAll(connectionId: string): void;
49
- startQuery(identity: AgentIdentity, input: Pick<QueryRunOptions, "queryId" | "text" | "displayText" | "disconnectPolicy" | "onEvent">): Promise<QueryRun>;
50
- cancelQuery(identity: AgentIdentity, queryId: string): boolean;
51
- listSnapshots(): RpcAgentSnapshot[];
52
- sweep(now?: number): string[];
53
- dispose(key: string): boolean;
54
- private mustGet;
55
- }
56
- export declare function agentKey(identity: AgentIdentity): string;