atom-lite 0.1.0 → 0.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/CHANGELOG.md +46 -0
- package/README.md +58 -10
- package/dist/agent/loop.d.ts +2 -0
- package/dist/agent/loop.js +5 -0
- package/dist/agent/loop.js.map +1 -1
- package/dist/cli/activity.d.ts +45 -0
- package/dist/cli/activity.js +141 -0
- package/dist/cli/activity.js.map +1 -0
- package/dist/cli/app.js +893 -377
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/approval-prompt.d.ts +24 -0
- package/dist/cli/approval-prompt.js +82 -0
- package/dist/cli/approval-prompt.js.map +1 -0
- package/dist/cli/banner.d.ts +5 -1
- package/dist/cli/banner.js +10 -4
- package/dist/cli/banner.js.map +1 -1
- package/dist/cli/commands.d.ts +89 -14
- package/dist/cli/commands.js +315 -52
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/diff.d.ts +1 -0
- package/dist/cli/diff.js +28 -0
- package/dist/cli/diff.js.map +1 -0
- package/dist/cli/input.d.ts +2 -0
- package/dist/cli/input.js +10 -0
- package/dist/cli/input.js.map +1 -0
- package/dist/cli/main.js +2 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/mouse.d.ts +54 -0
- package/dist/cli/mouse.js +83 -0
- package/dist/cli/mouse.js.map +1 -0
- package/dist/cli/palette.d.ts +41 -0
- package/dist/cli/palette.js +212 -0
- package/dist/cli/palette.js.map +1 -0
- package/dist/cli/panel.d.ts +29 -0
- package/dist/cli/panel.js +48 -0
- package/dist/cli/panel.js.map +1 -0
- package/dist/cli/picker.d.ts +8 -0
- package/dist/cli/picker.js +26 -28
- package/dist/cli/picker.js.map +1 -1
- package/dist/cli/status-line.d.ts +6 -0
- package/dist/cli/status-line.js +21 -7
- package/dist/cli/status-line.js.map +1 -1
- package/dist/cli/stream-text.d.ts +4 -8
- package/dist/cli/stream-text.js +25 -12
- package/dist/cli/stream-text.js.map +1 -1
- package/dist/cli/theme.d.ts +48 -0
- package/dist/cli/theme.js +158 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/cli/tool-box.d.ts +41 -0
- package/dist/cli/tool-box.js +177 -0
- package/dist/cli/tool-box.js.map +1 -0
- package/dist/cli/transcript.d.ts +9 -0
- package/dist/cli/transcript.js +25 -1
- package/dist/cli/transcript.js.map +1 -1
- package/dist/config/defaults.d.ts +10 -0
- package/dist/config/defaults.js +10 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/load.d.ts +2 -0
- package/dist/config/load.js +32 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +49 -0
- package/dist/config/schema.js +31 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/config/write.d.ts +2 -0
- package/dist/config/write.js +9 -0
- package/dist/config/write.js.map +1 -1
- package/dist/context/builder.d.ts +7 -0
- package/dist/context/builder.js +11 -0
- package/dist/context/builder.js.map +1 -0
- package/dist/extensions/api.d.ts +51 -0
- package/dist/extensions/api.js +101 -0
- package/dist/extensions/api.js.map +1 -0
- package/dist/extensions/discovery.d.ts +26 -0
- package/dist/extensions/discovery.js +243 -0
- package/dist/extensions/discovery.js.map +1 -0
- package/dist/extensions/loader.d.ts +27 -0
- package/dist/extensions/loader.js +113 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/trust.d.ts +4 -0
- package/dist/extensions/trust.js +40 -0
- package/dist/extensions/trust.js.map +1 -0
- package/dist/extensions/types.d.ts +52 -0
- package/dist/extensions/types.js +2 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/client.d.ts +73 -0
- package/dist/mcp/client.js +363 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/format.d.ts +3 -0
- package/dist/mcp/format.js +37 -0
- package/dist/mcp/format.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +53 -0
- package/dist/mcp/manager.js +349 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/stdio-transport.d.ts +26 -0
- package/dist/mcp/stdio-transport.js +191 -0
- package/dist/mcp/stdio-transport.js.map +1 -0
- package/dist/mcp/tools.d.ts +22 -0
- package/dist/mcp/tools.js +162 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +92 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/providers/factory.js +1 -0
- package/dist/providers/factory.js.map +1 -1
- package/dist/runtime/executor.d.ts +2 -0
- package/dist/runtime/executor.js +4 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/scheduler.js +7 -0
- package/dist/runtime/scheduler.js.map +1 -1
- package/dist/sessions/events.d.ts +9 -0
- package/dist/sessions/events.js +11 -6
- package/dist/sessions/events.js.map +1 -1
- package/dist/sessions/history.d.ts +18 -0
- package/dist/sessions/history.js +76 -0
- package/dist/sessions/history.js.map +1 -0
- package/dist/sessions/index.d.ts +2 -0
- package/dist/sessions/index.js +2 -0
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/search.d.ts +16 -0
- package/dist/sessions/search.js +136 -0
- package/dist/sessions/search.js.map +1 -0
- package/dist/sessions/store.js +5 -1
- package/dist/sessions/store.js.map +1 -1
- package/dist/tools/edit.js +2 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { checkApproval } from "../runtime/approvals.js";
|
|
2
|
+
export const MCP_APPROVAL_REQUIRED = "MCP_APPROVAL_REQUIRED";
|
|
3
|
+
export const MCP_CALL_FAILED = "MCP_CALL_FAILED";
|
|
4
|
+
export const MCP_APPROVAL_PREFIX = "mcp";
|
|
5
|
+
/**
|
|
6
|
+
* Wrap one discovered MCP tool as an Atom-lite `Tool`. The execution path is
|
|
7
|
+
* the same as built-ins: it receives the normal context, honours approval
|
|
8
|
+
* policy, and returns the normal result shape.
|
|
9
|
+
*/
|
|
10
|
+
export class McpTool {
|
|
11
|
+
manager;
|
|
12
|
+
tool;
|
|
13
|
+
definition;
|
|
14
|
+
constructor(manager, tool) {
|
|
15
|
+
this.manager = manager;
|
|
16
|
+
this.tool = tool;
|
|
17
|
+
this.definition = {
|
|
18
|
+
name: tool.name,
|
|
19
|
+
description: tool.description,
|
|
20
|
+
parameters: tool.inputSchema,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async execute(call, ctx) {
|
|
24
|
+
const args = (call.arguments ?? {});
|
|
25
|
+
const current = this.manager
|
|
26
|
+
.tools()
|
|
27
|
+
.find((t) => t.server === this.tool.server &&
|
|
28
|
+
t.remoteName === this.tool.remoteName);
|
|
29
|
+
const requiresApproval = current?.requiresApproval ?? this.tool.requiresApproval;
|
|
30
|
+
const callTimeoutMs = current?.callTimeoutMs ?? this.tool.callTimeoutMs;
|
|
31
|
+
if (requiresApproval) {
|
|
32
|
+
const approvals = ctx.approvals;
|
|
33
|
+
const request = {
|
|
34
|
+
command: `${MCP_APPROVAL_PREFIX} ${this.tool.server}/${this.tool.remoteName} ${JSON.stringify(args)}`,
|
|
35
|
+
cwd: ctx.workspace,
|
|
36
|
+
timeoutMs: callTimeoutMs,
|
|
37
|
+
sandboxed: true,
|
|
38
|
+
};
|
|
39
|
+
if (!approvals) {
|
|
40
|
+
return {
|
|
41
|
+
toolCallId: call.id,
|
|
42
|
+
name: this.tool.name,
|
|
43
|
+
content: `${MCP_APPROVAL_REQUIRED}: approvals unavailable`,
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const decision = await checkApproval(approvals, request);
|
|
48
|
+
if (!decision.allowed) {
|
|
49
|
+
return {
|
|
50
|
+
toolCallId: call.id,
|
|
51
|
+
name: this.tool.name,
|
|
52
|
+
content: `${MCP_APPROVAL_REQUIRED}: ${this.tool.server}/${this.tool.remoteName}`,
|
|
53
|
+
isError: true,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const result = await this.manager.callTool(this.tool.server, this.tool.remoteName, args, { signal: ctx.signal });
|
|
59
|
+
return {
|
|
60
|
+
toolCallId: call.id,
|
|
61
|
+
name: this.tool.name,
|
|
62
|
+
content: summariseMcpResult(result),
|
|
63
|
+
isError: Boolean(result?.isError),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
68
|
+
if (message === "USER_CANCELLED") {
|
|
69
|
+
return {
|
|
70
|
+
toolCallId: call.id,
|
|
71
|
+
name: this.tool.name,
|
|
72
|
+
content: "USER_CANCELLED",
|
|
73
|
+
isError: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
toolCallId: call.id,
|
|
78
|
+
name: this.tool.name,
|
|
79
|
+
content: `${MCP_CALL_FAILED}: ${message}`,
|
|
80
|
+
isError: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export function createMcpTools(manager) {
|
|
86
|
+
return manager.tools().map((tool) => new McpTool(manager, tool));
|
|
87
|
+
}
|
|
88
|
+
/** Map an MCP tool result into the single string Atom-lite tools use. */
|
|
89
|
+
export function summariseMcpResult(result) {
|
|
90
|
+
if (result == null)
|
|
91
|
+
return "";
|
|
92
|
+
if (typeof result !== "object")
|
|
93
|
+
return String(result);
|
|
94
|
+
const record = result;
|
|
95
|
+
if (Array.isArray(record.content)) {
|
|
96
|
+
const parts = record.content.map((part) => {
|
|
97
|
+
if (!part || typeof part !== "object")
|
|
98
|
+
return String(part);
|
|
99
|
+
const typed = part;
|
|
100
|
+
if (typed.type === "text" && typeof typed.text === "string") {
|
|
101
|
+
return typed.text;
|
|
102
|
+
}
|
|
103
|
+
if (typed.type === "image") {
|
|
104
|
+
const mime = typeof typed.mimeType === "string" ? typed.mimeType : "image";
|
|
105
|
+
const bytes = byteLengthOf(typed.data);
|
|
106
|
+
return `[${mime} ${bytes} bytes]`;
|
|
107
|
+
}
|
|
108
|
+
if (typed.type === "audio") {
|
|
109
|
+
const mime = typeof typed.mimeType === "string" ? typed.mimeType : "audio";
|
|
110
|
+
const bytes = byteLengthOf(typed.data);
|
|
111
|
+
return `[${mime} ${bytes} bytes]`;
|
|
112
|
+
}
|
|
113
|
+
if (typed.type === "resource") {
|
|
114
|
+
const resource = typed.resource;
|
|
115
|
+
if (resource && typeof resource === "object") {
|
|
116
|
+
const r = resource;
|
|
117
|
+
const mime = typeof r.mimeType === "string" ? r.mimeType : "resource";
|
|
118
|
+
const bytes = byteLengthOf(r.blob);
|
|
119
|
+
return `[${mime} ${bytes} bytes]`;
|
|
120
|
+
}
|
|
121
|
+
return "[resource]";
|
|
122
|
+
}
|
|
123
|
+
if (typed.type === "resource_link") {
|
|
124
|
+
return typeof typed.uri === "string"
|
|
125
|
+
? `[resource_link ${typed.uri}]`
|
|
126
|
+
: "[resource_link]";
|
|
127
|
+
}
|
|
128
|
+
if (typeof typed.type === "string") {
|
|
129
|
+
const mime = typeof typed.mimeType === "string" ? typed.mimeType : typed.type;
|
|
130
|
+
const bytes = byteLengthOf(typed.data ?? typed.blob);
|
|
131
|
+
if (bytes > 0)
|
|
132
|
+
return `[${mime} ${bytes} bytes]`;
|
|
133
|
+
return `[${typed.type}]`;
|
|
134
|
+
}
|
|
135
|
+
return `[${JSON.stringify(typed).slice(0, 120)}]`;
|
|
136
|
+
});
|
|
137
|
+
return parts.join("\n").trim();
|
|
138
|
+
}
|
|
139
|
+
if (typeof record.result === "string")
|
|
140
|
+
return record.result;
|
|
141
|
+
try {
|
|
142
|
+
return JSON.stringify(record);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return String(record);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function byteLengthOf(value) {
|
|
149
|
+
if (typeof value === "string") {
|
|
150
|
+
// MCP image/audio data is base64.
|
|
151
|
+
try {
|
|
152
|
+
return Buffer.byteLength(value, "base64");
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return Buffer.byteLength(value, "utf8");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (value instanceof Uint8Array)
|
|
159
|
+
return value.byteLength;
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { McpServerConfig } from "../config/schema.js";
|
|
2
|
+
export type { McpServerConfig };
|
|
3
|
+
export type JsonRpcId = number | string;
|
|
4
|
+
export interface JsonRpcRequest {
|
|
5
|
+
jsonrpc: "2.0";
|
|
6
|
+
id: JsonRpcId;
|
|
7
|
+
method: string;
|
|
8
|
+
params?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface JsonRpcNotification {
|
|
11
|
+
jsonrpc: "2.0";
|
|
12
|
+
method: string;
|
|
13
|
+
params?: unknown;
|
|
14
|
+
}
|
|
15
|
+
export interface JsonRpcSuccess {
|
|
16
|
+
jsonrpc: "2.0";
|
|
17
|
+
id: JsonRpcId;
|
|
18
|
+
result: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface JsonRpcFailure {
|
|
21
|
+
jsonrpc: "2.0";
|
|
22
|
+
id: JsonRpcId;
|
|
23
|
+
error: {
|
|
24
|
+
code: number;
|
|
25
|
+
message: string;
|
|
26
|
+
data?: unknown;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export type JsonRpcMessage = JsonRpcRequest | JsonRpcNotification | JsonRpcSuccess | JsonRpcFailure;
|
|
30
|
+
export interface McpTransportCloseInfo {
|
|
31
|
+
code?: number | null;
|
|
32
|
+
signal?: string | null;
|
|
33
|
+
}
|
|
34
|
+
export interface McpTransportHandlers {
|
|
35
|
+
onMessage(message: unknown): void;
|
|
36
|
+
onError(error: Error): void;
|
|
37
|
+
onClose(info: McpTransportCloseInfo): void;
|
|
38
|
+
}
|
|
39
|
+
/** A bidirectional JSON-RPC carrier. Tests inject a fake; production uses stdio. */
|
|
40
|
+
export interface McpTransport {
|
|
41
|
+
start(): Promise<void>;
|
|
42
|
+
send(message: unknown): void;
|
|
43
|
+
close(): void | Promise<void>;
|
|
44
|
+
setHandlers(handlers: McpTransportHandlers): void;
|
|
45
|
+
/** Optional diagnostic text (stderr) for connection failures. */
|
|
46
|
+
stderrText?(): string;
|
|
47
|
+
}
|
|
48
|
+
export type McpTransportFactory = (serverName: string, config: McpServerConfig) => McpTransport;
|
|
49
|
+
export interface McpRemoteTool {
|
|
50
|
+
name: string;
|
|
51
|
+
description?: string;
|
|
52
|
+
inputSchema?: Record<string, unknown>;
|
|
53
|
+
}
|
|
54
|
+
/** A discovered tool after namespacing and policy decoration. */
|
|
55
|
+
export interface McpToolState {
|
|
56
|
+
server: string;
|
|
57
|
+
remoteName: string;
|
|
58
|
+
/** Namespaced model-facing name: `mcp__<server>__<tool>`. */
|
|
59
|
+
name: string;
|
|
60
|
+
description: string;
|
|
61
|
+
inputSchema: Record<string, unknown>;
|
|
62
|
+
requiresApproval: boolean;
|
|
63
|
+
callTimeoutMs: number;
|
|
64
|
+
}
|
|
65
|
+
export type McpServerState = "disabled" | "idle" | "connecting" | "ready" | "failed" | "closed";
|
|
66
|
+
export interface McpServerStatus {
|
|
67
|
+
name: string;
|
|
68
|
+
state: McpServerState;
|
|
69
|
+
enabled: boolean;
|
|
70
|
+
requiresApproval: boolean;
|
|
71
|
+
toolCount: number;
|
|
72
|
+
tools: string[];
|
|
73
|
+
lastError?: string;
|
|
74
|
+
}
|
|
75
|
+
export type McpEvent = {
|
|
76
|
+
type: "mcp_server_connected";
|
|
77
|
+
server: string;
|
|
78
|
+
toolCount: number;
|
|
79
|
+
} | {
|
|
80
|
+
type: "mcp_server_failed";
|
|
81
|
+
server: string;
|
|
82
|
+
error: string;
|
|
83
|
+
} | {
|
|
84
|
+
type: "mcp_tools_changed";
|
|
85
|
+
server: string;
|
|
86
|
+
toolCount: number;
|
|
87
|
+
};
|
|
88
|
+
export interface McpCallResult {
|
|
89
|
+
content?: unknown;
|
|
90
|
+
isError?: boolean;
|
|
91
|
+
[key: string]: unknown;
|
|
92
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,WAAoB,EACpB,aAAsB;IAEtB,MAAM,IAAI,GAAG,WAAW,IAAI,MAAM,CAAC,eAAe,CAAC;IACnD,MAAM,IAAI,GAAI,MAAM,CAAC,SAAiC,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI;QACP,OAAO,IAAI,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,qCAAqC,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,IAAI,uBAAuB,CAAC;YACjC,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,0BAA0B;YACnD,KAAK,EAAE,aAAa,IAAI,IAAI,CAAC,KAAK;YAClC,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,IAAI,aAAa,CAAC;YACvB,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,wBAAwB;YACjD,KAAK,EAAE,aAAa,IAAI,IAAI,CAAC,KAAK;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,IAAI,aAAa,CAAC;YACvB,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,aAAa,IAAI,IAAI,CAAC,KAAK;YAClC,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,YAAY,CAAC;QACtB,EAAE,IAAI,EAAE,iBAAiB,IAAI,CAAC,IAAI,uBAAuB,EAAE;KAC5D,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,WAAoB,EACpB,aAAsB;IAEtB,MAAM,IAAI,GAAG,WAAW,IAAI,MAAM,CAAC,eAAe,CAAC;IACnD,MAAM,IAAI,GAAI,MAAM,CAAC,SAAiC,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI;QACP,OAAO,IAAI,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,qCAAqC,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,IAAI,uBAAuB,CAAC;YACjC,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,0BAA0B;YACnD,KAAK,EAAE,aAAa,IAAI,IAAI,CAAC,KAAK;YAClC,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,IAAI,aAAa,CAAC;YACvB,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,wBAAwB;YACjD,KAAK,EAAE,aAAa,IAAI,IAAI,CAAC,KAAK;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,IAAI,aAAa,CAAC;YACvB,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,aAAa,IAAI,IAAI,CAAC,KAAK;YAClC,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,YAAY,CAAC;QACtB,EAAE,IAAI,EAAE,iBAAiB,IAAI,CAAC,IAAI,uBAAuB,EAAE;KAC5D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/runtime/executor.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,MAAM,OAAO,QAAQ;CAEpB"}
|
|
@@ -14,6 +14,9 @@ function isMutation(call) {
|
|
|
14
14
|
function isBash(call) {
|
|
15
15
|
return call.name === "bash";
|
|
16
16
|
}
|
|
17
|
+
function isRemote(call) {
|
|
18
|
+
return call.name.startsWith("mcp__");
|
|
19
|
+
}
|
|
17
20
|
export async function executeToolBatch(calls, toolMap, ctx, maxParallel, signal, lockManager, bashConcurrency = "serial") {
|
|
18
21
|
const lm = lockManager ?? new LockManager();
|
|
19
22
|
const n = calls.length;
|
|
@@ -28,6 +31,10 @@ export async function executeToolBatch(calls, toolMap, ctx, maxParallel, signal,
|
|
|
28
31
|
// No file lock; network-only. Return a no-op release.
|
|
29
32
|
return () => { };
|
|
30
33
|
}
|
|
34
|
+
if (isRemote(call)) {
|
|
35
|
+
// MCP tools own their side effects; Atom-lite cannot infer file paths.
|
|
36
|
+
return () => { };
|
|
37
|
+
}
|
|
31
38
|
const key = resourceKey(call, ctx.workspace);
|
|
32
39
|
if (key === "")
|
|
33
40
|
return () => { };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/runtime/scheduler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAEvD,SAAS,WAAW,CAAC,IAAc,EAAE,SAAiB;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IAClC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,UAAU,CAAC;IAC5C,MAAM,CAAC,GAAI,IAAY,CAAC,IAAI,IAAK,IAAY,CAAC,GAAG,IAAI,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AACvD,CAAC;AAED,SAAS,MAAM,CAAC,IAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAiB,EACjB,OAA0B,EAC1B,GAAgB,EAChB,WAAmB,EACnB,MAAmB,EACnB,WAAyB,EACzB,kBAAyC,QAAQ;IAEjD,MAAM,EAAE,GAAG,WAAW,IAAI,IAAI,WAAW,EAAE,CAAC;IAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,OAAO,GAAiB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,KAAK,EAAE,IAAc,EAAoB,EAAE;QACzD,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,OAAO,eAAe,KAAK,UAAU;gBACnC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBACjC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1D,sDAAsD;YACtD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAChC,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,mBAAmB;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,SAAS,WAAW;QAClB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,MAAM,GAAG,WAAW,EAAE,CAAC;gBACzB,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,SAAS,WAAW;QAClB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC5B,IAAI,EAAE,CAAC;QACT,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAClC,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAChG,OAAO;YACT,CAAC;YACD,IAAI,OAA4B,CAAC;YACjC,MAAM,WAAW,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oBAChG,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,mBAAmB,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAChH,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBACxC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,CAAC,GAAG;oBACX,UAAU,EAAE,IAAI,CAAC,EAAE;oBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;oBAC9E,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,OAAO;oBAAE,OAAO,EAAE,CAAC;gBACvB,WAAW,EAAE,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/runtime/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,16 @@ export interface SessionSummary {
|
|
|
14
14
|
updatedAt?: string;
|
|
15
15
|
eventCount?: number;
|
|
16
16
|
filePath?: string;
|
|
17
|
+
/** Derived title: first user message or the latest session_renamed title. */
|
|
18
|
+
title?: string;
|
|
19
|
+
/** Number of retained user, assistant, and tool messages. */
|
|
20
|
+
messageCount?: number;
|
|
21
|
+
/** Combined title/content/workspace haystack used by session search. */
|
|
22
|
+
searchText?: string;
|
|
23
|
+
/** Matching excerpt, populated by searchSessions. */
|
|
24
|
+
snippet?: string;
|
|
17
25
|
}
|
|
26
|
+
export declare function contentPartsText(content: unknown): string;
|
|
18
27
|
export declare function nowIso(): string;
|
|
19
28
|
export declare function messageToEvent(message: Message, sessionId: string, seq: number): SessionEvent;
|
|
20
29
|
export declare function eventToMessage(event: SessionEvent): Message | null;
|
package/dist/sessions/events.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
|
+
export function contentPartsText(content) {
|
|
2
|
+
if (typeof content === "string")
|
|
3
|
+
return content;
|
|
4
|
+
if (!Array.isArray(content))
|
|
5
|
+
return "";
|
|
6
|
+
return content
|
|
7
|
+
.map((part) => (part?.type === "text" ? String(part.text ?? "") : ""))
|
|
8
|
+
.join("");
|
|
9
|
+
}
|
|
1
10
|
export function nowIso() {
|
|
2
11
|
return new Date().toISOString();
|
|
3
12
|
}
|
|
4
13
|
export function messageToEvent(message, sessionId, seq) {
|
|
5
14
|
const timestamp = nowIso();
|
|
6
15
|
if (message.role === "user") {
|
|
7
|
-
const text = message.content
|
|
8
|
-
?.map((p) => (p?.type === "text" ? p.text : ""))
|
|
9
|
-
.join("") ?? "";
|
|
16
|
+
const text = contentPartsText(message.content);
|
|
10
17
|
return {
|
|
11
18
|
type: "user_message",
|
|
12
19
|
timestamp,
|
|
@@ -17,9 +24,7 @@ export function messageToEvent(message, sessionId, seq) {
|
|
|
17
24
|
};
|
|
18
25
|
}
|
|
19
26
|
if (message.role === "assistant") {
|
|
20
|
-
const text = message.content
|
|
21
|
-
?.map((p) => (p?.type === "text" ? p.text : ""))
|
|
22
|
-
.join("") ?? "";
|
|
27
|
+
const text = contentPartsText(message.content ?? []);
|
|
23
28
|
return {
|
|
24
29
|
type: "assistant_message",
|
|
25
30
|
timestamp,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/sessions/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/sessions/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Message } from "../types.js";
|
|
2
|
+
import type { SessionEvent } from "./events.js";
|
|
3
|
+
/**
|
|
4
|
+
* Render retained messages for the restored transcript. System messages are
|
|
5
|
+
* omitted: they are prompt scaffolding, not conversation history.
|
|
6
|
+
*/
|
|
7
|
+
export declare function sessionHistoryLines(messages: Message[]): string[];
|
|
8
|
+
export interface SessionSelection {
|
|
9
|
+
provider?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Provider/model last selected inside a session, newest event wins. */
|
|
13
|
+
export declare function sessionSelectionFromEvents(events: SessionEvent[]): SessionSelection;
|
|
14
|
+
/**
|
|
15
|
+
* A short offer to switch provider/model when a resumed session differs from
|
|
16
|
+
* the currently active one.
|
|
17
|
+
*/
|
|
18
|
+
export declare function providerSwitchNotice(current: SessionSelection, saved: SessionSelection): string | undefined;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { contentPartsText } from "./events.js";
|
|
2
|
+
function contentText(content) {
|
|
3
|
+
return contentPartsText(content);
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Render retained messages for the restored transcript. System messages are
|
|
7
|
+
* omitted: they are prompt scaffolding, not conversation history.
|
|
8
|
+
*/
|
|
9
|
+
export function sessionHistoryLines(messages) {
|
|
10
|
+
const lines = [];
|
|
11
|
+
for (const message of messages) {
|
|
12
|
+
if (message.role === "system")
|
|
13
|
+
continue;
|
|
14
|
+
if (message.role === "user") {
|
|
15
|
+
const text = contentText(message.content).trim();
|
|
16
|
+
if (text)
|
|
17
|
+
lines.push(`> ${text}`);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (message.role === "assistant") {
|
|
21
|
+
const text = contentText(message.content).trim();
|
|
22
|
+
if (text)
|
|
23
|
+
lines.push(text);
|
|
24
|
+
for (const call of message.toolCalls ?? []) {
|
|
25
|
+
const args = JSON.stringify(call.arguments ?? {});
|
|
26
|
+
lines.push(`⚙ ${call.name} ${args}`);
|
|
27
|
+
}
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (message.role === "tool") {
|
|
31
|
+
const text = message.content.trim();
|
|
32
|
+
if (text)
|
|
33
|
+
lines.push(`[${message.name}] ${text}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return lines;
|
|
37
|
+
}
|
|
38
|
+
/** Provider/model last selected inside a session, newest event wins. */
|
|
39
|
+
export function sessionSelectionFromEvents(events) {
|
|
40
|
+
let provider;
|
|
41
|
+
let model;
|
|
42
|
+
for (const event of events) {
|
|
43
|
+
if (event.type === "session_started") {
|
|
44
|
+
provider = typeof event.provider === "string" ? event.provider : provider;
|
|
45
|
+
}
|
|
46
|
+
else if (event.type === "provider_selected" ||
|
|
47
|
+
event.type === "model_switched") {
|
|
48
|
+
provider =
|
|
49
|
+
typeof event.provider === "string" ? event.provider : provider;
|
|
50
|
+
model = typeof event.model === "string" ? event.model : model;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { provider, model };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A short offer to switch provider/model when a resumed session differs from
|
|
57
|
+
* the currently active one.
|
|
58
|
+
*/
|
|
59
|
+
export function providerSwitchNotice(current, saved) {
|
|
60
|
+
const savedLabel = saved.provider
|
|
61
|
+
? `${saved.provider}${saved.model ? `/${saved.model}` : ""}`
|
|
62
|
+
: saved.model;
|
|
63
|
+
const currentLabel = current.provider
|
|
64
|
+
? `${current.provider}${current.model ? `/${current.model}` : ""}`
|
|
65
|
+
: current.model;
|
|
66
|
+
if (!savedLabel || !currentLabel)
|
|
67
|
+
return undefined;
|
|
68
|
+
if (saved.provider && current.provider && saved.provider !== current.provider) {
|
|
69
|
+
return `this session used ${savedLabel}; current provider is ${currentLabel}. Run /model or /provider to switch.`;
|
|
70
|
+
}
|
|
71
|
+
if (saved.model && current.model && saved.model !== current.model) {
|
|
72
|
+
return `this session used ${savedLabel}; current model is ${currentLabel}. Run /model to switch.`;
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/sessions/history.ts"],"names":[],"mappings":"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"}
|
package/dist/sessions/index.d.ts
CHANGED
package/dist/sessions/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SessionEvent, SessionSummary } from "./events.js";
|
|
2
|
+
/** First user message, unless a later session_renamed event supplies a title. */
|
|
3
|
+
export declare function sessionTitleFromEvents(events: SessionEvent[]): string;
|
|
4
|
+
export declare function sessionMessageCount(events: SessionEvent[]): number;
|
|
5
|
+
/** Case-insensitive haystack for title, content, and workspace search. */
|
|
6
|
+
export declare function sessionSearchText(events: SessionEvent[]): string;
|
|
7
|
+
/**
|
|
8
|
+
* Filter sessions by title, content, or workspace. Empty queries keep the
|
|
9
|
+
* store's recency order; matches are ranked title > workspace > content.
|
|
10
|
+
*/
|
|
11
|
+
export declare function searchSessions(entries: SessionSummary[], query: string): SessionSummary[];
|
|
12
|
+
/** Stable tab-separated session table, suitable for CLI output and tests. */
|
|
13
|
+
export declare function formatSessionList(entries: SessionSummary[], options?: {
|
|
14
|
+
snippets?: boolean;
|
|
15
|
+
}): string;
|
|
16
|
+
export declare function formatSessionSearch(entries: SessionSummary[]): string;
|