@getpaseo/server 0.1.91-beta.2 → 0.1.92
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/scripts/supervisor.js +21 -0
- package/dist/server/server/agent/agent-manager.d.ts +13 -5
- package/dist/server/server/agent/agent-manager.js +110 -74
- package/dist/server/server/agent/agent-projections.d.ts +4 -2
- package/dist/server/server/agent/agent-projections.js +8 -28
- package/dist/server/server/agent/agent-sdk-types.d.ts +30 -10
- package/dist/server/server/agent/import-sessions.d.ts +3 -2
- package/dist/server/server/agent/import-sessions.js +23 -55
- package/dist/server/server/agent/prompt-attachments.js +8 -0
- package/dist/server/server/agent/provider-registry.d.ts +0 -1
- package/dist/server/server/agent/provider-registry.js +55 -16
- package/dist/server/server/agent/provider-session-import.d.ts +10 -0
- package/dist/server/server/agent/provider-session-import.js +49 -0
- package/dist/server/server/agent/providers/acp-agent.d.ts +12 -2
- package/dist/server/server/agent/providers/acp-agent.js +78 -36
- package/dist/server/server/agent/providers/claude/agent.d.ts +3 -2
- package/dist/server/server/agent/providers/claude/agent.js +28 -24
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +3 -2
- package/dist/server/server/agent/providers/codex-app-server-agent.js +29 -26
- package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +1 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.js +1 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +9 -0
- package/dist/server/server/agent/providers/generic-acp-agent.js +18 -1
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +3 -2
- package/dist/server/server/agent/providers/mock-load-test-agent.js +11 -1
- package/dist/server/server/agent/providers/mock-slow-provider.d.ts +1 -2
- package/dist/server/server/agent/providers/mock-slow-provider.js +0 -3
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts +3 -0
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js +12 -0
- package/dist/server/server/agent/providers/opencode-agent.d.ts +18 -3
- package/dist/server/server/agent/providers/opencode-agent.js +135 -36
- package/dist/server/server/agent/providers/pi/agent.d.ts +25 -2
- package/dist/server/server/agent/providers/pi/agent.js +243 -14
- package/dist/server/server/agent/providers/pi/cli-runtime.js +9 -0
- package/dist/server/server/agent/providers/pi/rpc-types.d.ts +9 -0
- package/dist/server/server/agent/providers/pi/runtime.d.ts +2 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +11 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.js +284 -0
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts +8 -0
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js +22 -0
- package/dist/server/server/agent/runtime-mcp-config.d.ts +8 -0
- package/dist/server/server/agent/runtime-mcp-config.js +50 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +2 -2
- package/dist/server/server/daemon-worker.js +84 -1
- package/dist/server/server/file-upload/index.d.ts +27 -0
- package/dist/server/server/file-upload/index.js +158 -0
- package/dist/server/server/loop-service.d.ts +12 -12
- package/dist/server/server/persisted-config.d.ts +8 -0
- package/dist/server/server/persisted-config.js +1 -1
- package/dist/server/server/persistence-hooks.js +6 -4
- package/dist/server/server/session.d.ts +5 -2
- package/dist/server/server/session.js +20 -3
- package/dist/server/server/speech/providers/local/runtime.js +1 -0
- package/dist/server/server/speech/providers/local/worker-client.d.ts +14 -1
- package/dist/server/server/speech/providers/local/worker-client.js +169 -7
- package/dist/server/server/websocket-server.d.ts +2 -0
- package/dist/server/server/websocket-server.js +20 -7
- package/dist/server/server/workspace-registry.d.ts +4 -4
- package/dist/src/server/persisted-config.js +1 -1
- package/package.json +5 -5
|
@@ -23,7 +23,7 @@ export function normalizeImportAgentRequest(msg) {
|
|
|
23
23
|
return { error: "Import requires providerId and providerHandleId" };
|
|
24
24
|
}
|
|
25
25
|
return {
|
|
26
|
-
provider,
|
|
26
|
+
provider: provider,
|
|
27
27
|
providerHandleId,
|
|
28
28
|
cwd: msg.cwd,
|
|
29
29
|
labels: msg.labels,
|
|
@@ -36,7 +36,7 @@ export async function listImportableProviderSessions(input) {
|
|
|
36
36
|
const sinceTimestamp = parseRecentProviderSessionsSince(request.since);
|
|
37
37
|
const providerFilter = request.providers ? new Set(request.providers) : undefined;
|
|
38
38
|
const importedHandles = await collectImportedProviderSessionHandles(agentManager, agentStorage);
|
|
39
|
-
const
|
|
39
|
+
const sessions = await agentManager.listImportableSessions({
|
|
40
40
|
limit,
|
|
41
41
|
providerFilter,
|
|
42
42
|
cwd: request.cwd,
|
|
@@ -44,25 +44,21 @@ export async function listImportableProviderSessions(input) {
|
|
|
44
44
|
let filteredAlreadyImportedCount = 0;
|
|
45
45
|
const candidates = [];
|
|
46
46
|
const matchesRequestCwd = request.cwd ? createRealpathAwarePathMatcher(request.cwd) : null;
|
|
47
|
-
for (const
|
|
48
|
-
if (matchesRequestCwd && !matchesRequestCwd(
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
if (sinceTimestamp !== null && descriptor.lastActivityAt.getTime() < sinceTimestamp) {
|
|
47
|
+
for (const session of sessions) {
|
|
48
|
+
if (matchesRequestCwd && !matchesRequestCwd(session.cwd)) {
|
|
52
49
|
continue;
|
|
53
50
|
}
|
|
54
|
-
if (
|
|
51
|
+
if (sinceTimestamp !== null && session.lastActivityAt.getTime() < sinceTimestamp) {
|
|
55
52
|
continue;
|
|
56
53
|
}
|
|
57
|
-
if (
|
|
54
|
+
if (isMetadataGenerationSession(session)) {
|
|
58
55
|
continue;
|
|
59
56
|
}
|
|
60
|
-
|
|
61
|
-
if (importedHandles.has(toProviderSessionHandleKey(descriptor.provider, providerHandleId))) {
|
|
57
|
+
if (importedHandles.has(toProviderSessionHandleKey(session.provider, session.providerHandleId))) {
|
|
62
58
|
filteredAlreadyImportedCount += 1;
|
|
63
59
|
continue;
|
|
64
60
|
}
|
|
65
|
-
candidates.push(
|
|
61
|
+
candidates.push(session);
|
|
66
62
|
}
|
|
67
63
|
const entries = candidates
|
|
68
64
|
.sort((a, b) => b.lastActivityAt.getTime() - a.lastActivityAt.getTime())
|
|
@@ -74,23 +70,19 @@ export async function listImportableProviderSessions(input) {
|
|
|
74
70
|
}
|
|
75
71
|
export async function importProviderSession(input) {
|
|
76
72
|
const { provider, providerHandleId, cwd, labels } = input.request;
|
|
77
|
-
|
|
78
|
-
cwd
|
|
79
|
-
});
|
|
80
|
-
if (!descriptor && provider === "opencode" && !cwd) {
|
|
81
|
-
throw new Error("OpenCode sessions require --cwd when the session cannot be found in persisted agents");
|
|
73
|
+
if (!cwd) {
|
|
74
|
+
throw new Error("Import requires cwd from the selected provider session");
|
|
82
75
|
}
|
|
83
|
-
const handle =
|
|
84
|
-
? applyImportCwdOverride(descriptor.persistence, cwd)
|
|
85
|
-
: buildImportPersistenceHandle({ provider, providerHandleId, cwd });
|
|
86
|
-
const overrides = cwd ? { cwd } : undefined;
|
|
76
|
+
const handle = buildImportPersistenceHandle({ provider, providerHandleId, cwd });
|
|
87
77
|
await unarchiveAgentByHandle(input.agentStorage, input.agentManager, handle);
|
|
88
|
-
const snapshot = await input.agentManager.
|
|
78
|
+
const snapshot = await input.agentManager.importProviderSession({
|
|
79
|
+
provider,
|
|
80
|
+
providerHandleId,
|
|
81
|
+
cwd,
|
|
89
82
|
labels,
|
|
90
83
|
});
|
|
91
84
|
await unarchiveAgentState(input.agentStorage, input.agentManager, snapshot.id);
|
|
92
|
-
|
|
93
|
-
await applyImportedAgentTitle({
|
|
85
|
+
scheduleImportedAgentMetadata({
|
|
94
86
|
snapshot,
|
|
95
87
|
agentManager: input.agentManager,
|
|
96
88
|
workspaceGitService: input.workspaceGitService,
|
|
@@ -108,24 +100,22 @@ export async function importProviderSession(input) {
|
|
|
108
100
|
async function unarchiveAgentByHandle(agentStorage, agentManager, handle) {
|
|
109
101
|
const records = await agentStorage.list();
|
|
110
102
|
const matched = records.find((record) => record.persistence?.provider === handle.provider &&
|
|
111
|
-
record.persistence
|
|
103
|
+
(record.persistence.sessionId === handle.sessionId ||
|
|
104
|
+
record.persistence.nativeHandle === handle.nativeHandle));
|
|
112
105
|
if (!matched) {
|
|
113
106
|
return;
|
|
114
107
|
}
|
|
115
108
|
await unarchiveAgentState(agentStorage, agentManager, matched.id);
|
|
116
109
|
}
|
|
117
|
-
|
|
110
|
+
function scheduleImportedAgentMetadata(input) {
|
|
118
111
|
const initialPrompt = getFirstUserMessageText(input.agentManager.getTimeline(input.snapshot.id));
|
|
119
112
|
if (!initialPrompt) {
|
|
120
113
|
return;
|
|
121
114
|
}
|
|
122
|
-
const { explicitTitle
|
|
115
|
+
const { explicitTitle } = resolveCreateAgentTitles({
|
|
123
116
|
configTitle: input.snapshot.config.title,
|
|
124
117
|
initialPrompt,
|
|
125
118
|
});
|
|
126
|
-
if (!explicitTitle && provisionalTitle) {
|
|
127
|
-
await input.agentManager.setTitle(input.snapshot.id, provisionalTitle);
|
|
128
|
-
}
|
|
129
119
|
input.scheduleAgentMetadataGeneration({
|
|
130
120
|
agentManager: input.agentManager,
|
|
131
121
|
agentId: input.snapshot.id,
|
|
@@ -157,27 +147,13 @@ function parseRecentProviderSessionsSince(since) {
|
|
|
157
147
|
return timestamp;
|
|
158
148
|
}
|
|
159
149
|
function buildImportPersistenceHandle(input) {
|
|
160
|
-
const cwd = input.cwd ?? process.cwd();
|
|
161
150
|
return {
|
|
162
151
|
provider: input.provider,
|
|
163
152
|
sessionId: input.providerHandleId,
|
|
164
153
|
nativeHandle: input.providerHandleId,
|
|
165
154
|
metadata: {
|
|
166
155
|
provider: input.provider,
|
|
167
|
-
cwd,
|
|
168
|
-
},
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
function applyImportCwdOverride(handle, cwd) {
|
|
172
|
-
if (!cwd) {
|
|
173
|
-
return handle;
|
|
174
|
-
}
|
|
175
|
-
return {
|
|
176
|
-
...handle,
|
|
177
|
-
metadata: {
|
|
178
|
-
...handle.metadata,
|
|
179
|
-
provider: handle.provider,
|
|
180
|
-
cwd,
|
|
156
|
+
cwd: input.cwd,
|
|
181
157
|
},
|
|
182
158
|
};
|
|
183
159
|
}
|
|
@@ -206,16 +182,8 @@ async function collectImportedProviderSessionHandles(agentManager, agentStorage)
|
|
|
206
182
|
function toProviderSessionHandleKey(provider, providerHandleId) {
|
|
207
183
|
return `${provider}\0${providerHandleId}`;
|
|
208
184
|
}
|
|
209
|
-
function
|
|
210
|
-
|
|
211
|
-
if (item.type !== "user_message")
|
|
212
|
-
continue;
|
|
213
|
-
return item.text.trimStart().startsWith(METADATA_GENERATION_PROMPT_PREFIX);
|
|
214
|
-
}
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
function hasUserPrompt(descriptor) {
|
|
218
|
-
return descriptor.timeline.some((item) => item.type === "user_message" && item.text.trim() !== "");
|
|
185
|
+
function isMetadataGenerationSession(input) {
|
|
186
|
+
return (input.firstPromptPreview?.trimStart().startsWith(METADATA_GENERATION_PROMPT_PREFIX) ?? false);
|
|
219
187
|
}
|
|
220
188
|
function collectProviderSessionHandleKeys(target, provider, persistence) {
|
|
221
189
|
if (!persistence) {
|
|
@@ -45,6 +45,14 @@ export function renderPromptAttachmentAsText(attachment) {
|
|
|
45
45
|
});
|
|
46
46
|
return lines.join("\n");
|
|
47
47
|
}
|
|
48
|
+
case "uploaded_file": {
|
|
49
|
+
return [
|
|
50
|
+
`Uploaded file: ${attachment.fileName}`,
|
|
51
|
+
`Path: ${attachment.path}`,
|
|
52
|
+
`MIME: ${attachment.mimeType}`,
|
|
53
|
+
`Size: ${attachment.size} bytes`,
|
|
54
|
+
].join("\n");
|
|
55
|
+
}
|
|
48
56
|
default:
|
|
49
57
|
throw new Error("unreachable");
|
|
50
58
|
}
|
|
@@ -19,7 +19,6 @@ export interface ProviderDefinition extends AgentProviderDefinition {
|
|
|
19
19
|
fetchModels: (options: ListModelsOptions) => Promise<AgentModelDefinition[]>;
|
|
20
20
|
fetchModes: (options: ListModesOptions) => Promise<AgentMode[]>;
|
|
21
21
|
}
|
|
22
|
-
export { IMPORTABLE_PROVIDERS } from "@getpaseo/protocol/importable-providers";
|
|
23
22
|
export interface BuildProviderRegistryOptions {
|
|
24
23
|
runtimeSettings?: AgentProviderRuntimeSettingsMap;
|
|
25
24
|
providerOverrides?: Record<string, ProviderOverride>;
|
|
@@ -14,7 +14,6 @@ function isNonEmptyStringArray(value) {
|
|
|
14
14
|
return value.length > 0;
|
|
15
15
|
}
|
|
16
16
|
export { AGENT_PROVIDER_DEFINITIONS, getAgentProviderDefinition };
|
|
17
|
-
export { IMPORTABLE_PROVIDERS } from "@getpaseo/protocol/importable-providers";
|
|
18
17
|
const PROVIDER_CLIENT_FACTORIES = {
|
|
19
18
|
claude: (logger, runtimeSettings) => new ClaudeAgentClient({
|
|
20
19
|
logger,
|
|
@@ -34,9 +33,22 @@ const PROVIDER_CLIENT_FACTORIES = {
|
|
|
34
33
|
env: runtimeSettings?.env,
|
|
35
34
|
}),
|
|
36
35
|
opencode: (logger, runtimeSettings) => new OpenCodeAgentClient(logger, runtimeSettings),
|
|
37
|
-
pi: (logger, runtimeSettings) => new PiRpcAgentClient({
|
|
36
|
+
pi: (logger, runtimeSettings, options) => new PiRpcAgentClient({
|
|
38
37
|
logger,
|
|
39
38
|
runtimeSettings,
|
|
39
|
+
providerParams: options?.providerParams,
|
|
40
|
+
}),
|
|
41
|
+
omp: (logger, runtimeSettings, options) => new PiRpcAgentClient({
|
|
42
|
+
logger,
|
|
43
|
+
runtimeSettings: mergeRuntimeSettings({
|
|
44
|
+
command: {
|
|
45
|
+
mode: "replace",
|
|
46
|
+
argv: ["omp"],
|
|
47
|
+
},
|
|
48
|
+
}, runtimeSettings),
|
|
49
|
+
providerParams: options?.providerParams ?? {
|
|
50
|
+
sessionDir: "~/.omp/agent/sessions",
|
|
51
|
+
},
|
|
40
52
|
}),
|
|
41
53
|
mock: (logger) => new MockLoadTestAgentClient(logger),
|
|
42
54
|
"mock-slow": () => new MockSlowProviderClient(),
|
|
@@ -129,16 +141,6 @@ function mapStreamEvent(provider, event) {
|
|
|
129
141
|
provider,
|
|
130
142
|
};
|
|
131
143
|
}
|
|
132
|
-
function mapPersistedAgentDescriptor(provider, descriptor) {
|
|
133
|
-
return {
|
|
134
|
-
...descriptor,
|
|
135
|
-
provider,
|
|
136
|
-
persistence: {
|
|
137
|
-
...descriptor.persistence,
|
|
138
|
-
provider,
|
|
139
|
-
},
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
144
|
function mapModel(provider, model) {
|
|
143
145
|
return normalizeAgentModelDefinition({ ...model, provider });
|
|
144
146
|
}
|
|
@@ -210,7 +212,8 @@ export function wrapSessionProvider(provider, inner) {
|
|
|
210
212
|
};
|
|
211
213
|
}
|
|
212
214
|
function wrapClientProvider(provider, inner, profileModels, additionalModels, profileModelsAreAdditive) {
|
|
213
|
-
const
|
|
215
|
+
const listImportableSessions = inner.listImportableSessions?.bind(inner);
|
|
216
|
+
const importSession = inner.importSession?.bind(inner);
|
|
214
217
|
return {
|
|
215
218
|
provider,
|
|
216
219
|
capabilities: inner.capabilities,
|
|
@@ -233,8 +236,36 @@ function wrapClientProvider(provider, inner, profileModels, additionalModels, pr
|
|
|
233
236
|
listModes: inner.listModes?.bind(inner),
|
|
234
237
|
resolveCreateConfig: inner.resolveCreateConfig?.bind(inner),
|
|
235
238
|
isCreateConfigUnattended: inner.isCreateConfigUnattended?.bind(inner),
|
|
236
|
-
|
|
237
|
-
? async (options) =>
|
|
239
|
+
listImportableSessions: listImportableSessions
|
|
240
|
+
? async (options) => await listImportableSessions(options)
|
|
241
|
+
: undefined,
|
|
242
|
+
importSession: importSession
|
|
243
|
+
? async (input, context) => {
|
|
244
|
+
const imported = await importSession(input, {
|
|
245
|
+
...context,
|
|
246
|
+
config: {
|
|
247
|
+
...context.config,
|
|
248
|
+
provider: inner.provider,
|
|
249
|
+
},
|
|
250
|
+
storedConfig: {
|
|
251
|
+
...context.storedConfig,
|
|
252
|
+
provider: inner.provider,
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
const persistence = mapPersistenceHandle(provider, imported.persistence);
|
|
256
|
+
if (!persistence) {
|
|
257
|
+
throw new Error(`Provider '${provider}' import did not return persistence`);
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
...imported,
|
|
261
|
+
session: wrapSessionProvider(provider, imported.session),
|
|
262
|
+
config: {
|
|
263
|
+
...imported.config,
|
|
264
|
+
provider,
|
|
265
|
+
},
|
|
266
|
+
persistence,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
238
269
|
: undefined,
|
|
239
270
|
isAvailable: () => inner.isAvailable(),
|
|
240
271
|
getDiagnostic: inner.getDiagnostic?.bind(inner),
|
|
@@ -293,10 +324,12 @@ function buildResolvedBuiltinProviders(providerOverrides, runtimeSettings, optio
|
|
|
293
324
|
profileModels: override?.models ?? [],
|
|
294
325
|
additionalModels: override?.additionalModels ?? [],
|
|
295
326
|
profileModelsAreAdditive: false,
|
|
296
|
-
enabled: override?.enabled
|
|
327
|
+
enabled: override?.enabled ?? definition.enabledByDefault ?? true,
|
|
297
328
|
derivedFromProviderId: null,
|
|
329
|
+
providerParams: override?.params,
|
|
298
330
|
createBaseClient: (logger) => factory(logger, mergedRuntimeSettings, {
|
|
299
331
|
workspaceGitService: options.workspaceGitService,
|
|
332
|
+
providerParams: override?.params,
|
|
300
333
|
}),
|
|
301
334
|
});
|
|
302
335
|
}
|
|
@@ -330,6 +363,7 @@ function addDerivedProviders(resolvedProviders, providerOverrides) {
|
|
|
330
363
|
profileModelsAreAdditive: false,
|
|
331
364
|
enabled: override.enabled !== false,
|
|
332
365
|
derivedFromProviderId: null,
|
|
366
|
+
providerParams: override.params,
|
|
333
367
|
createBaseClient: (logger) => providerId === "cursor"
|
|
334
368
|
? new CursorACPAgentClient({
|
|
335
369
|
logger,
|
|
@@ -337,6 +371,7 @@ function addDerivedProviders(resolvedProviders, providerOverrides) {
|
|
|
337
371
|
env: override.env,
|
|
338
372
|
providerId,
|
|
339
373
|
label: override.label ?? providerId,
|
|
374
|
+
providerParams: override.params,
|
|
340
375
|
})
|
|
341
376
|
: new GenericACPAgentClient({
|
|
342
377
|
logger,
|
|
@@ -344,6 +379,7 @@ function addDerivedProviders(resolvedProviders, providerOverrides) {
|
|
|
344
379
|
env: override.env,
|
|
345
380
|
providerId,
|
|
346
381
|
label: override.label ?? providerId,
|
|
382
|
+
providerParams: override.params,
|
|
347
383
|
}),
|
|
348
384
|
});
|
|
349
385
|
continue;
|
|
@@ -356,6 +392,7 @@ function addDerivedProviders(resolvedProviders, providerOverrides) {
|
|
|
356
392
|
const mergedRuntimeSettings = mergeRuntimeSettings(baseProvider.runtimeSettings, toRuntimeSettings(override));
|
|
357
393
|
const baseDefinition = baseProvider.definition;
|
|
358
394
|
const baseFactory = getProviderClientFactory(baseProviderId);
|
|
395
|
+
const providerParams = override.params ?? baseProvider.providerParams;
|
|
359
396
|
resolvedProviders.set(providerId, {
|
|
360
397
|
definition: createDerivedDefinition(providerId, baseDefinition, override),
|
|
361
398
|
runtimeSettings: mergedRuntimeSettings,
|
|
@@ -364,7 +401,9 @@ function addDerivedProviders(resolvedProviders, providerOverrides) {
|
|
|
364
401
|
profileModelsAreAdditive: false,
|
|
365
402
|
enabled: override.enabled !== false,
|
|
366
403
|
derivedFromProviderId: baseProviderId,
|
|
404
|
+
providerParams,
|
|
367
405
|
createBaseClient: (logger) => baseFactory(logger, mergedRuntimeSettings, {
|
|
406
|
+
providerParams,
|
|
368
407
|
customProvider: {
|
|
369
408
|
id: providerId,
|
|
370
409
|
label: override.label ?? providerId,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AgentClient, AgentPersistenceHandle, AgentProvider, AgentSessionConfig, ImportedProviderSession, ImportProviderSessionContext, ImportProviderSessionInput } from "./agent-sdk-types.js";
|
|
2
|
+
export declare function importSessionFromPersistence(input: {
|
|
3
|
+
provider: AgentProvider;
|
|
4
|
+
request: ImportProviderSessionInput;
|
|
5
|
+
context: ImportProviderSessionContext;
|
|
6
|
+
resumeSession: AgentClient["resumeSession"];
|
|
7
|
+
config?: Partial<AgentSessionConfig>;
|
|
8
|
+
persistence?: AgentPersistenceHandle;
|
|
9
|
+
}): Promise<ImportedProviderSession>;
|
|
10
|
+
//# sourceMappingURL=provider-session-import.d.ts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export async function importSessionFromPersistence(input) {
|
|
2
|
+
const config = {
|
|
3
|
+
...input.context.config,
|
|
4
|
+
...input.config,
|
|
5
|
+
provider: input.provider,
|
|
6
|
+
cwd: input.request.cwd,
|
|
7
|
+
};
|
|
8
|
+
const storedConfig = {
|
|
9
|
+
...input.context.storedConfig,
|
|
10
|
+
...input.config,
|
|
11
|
+
provider: input.provider,
|
|
12
|
+
cwd: input.request.cwd,
|
|
13
|
+
};
|
|
14
|
+
const persistence = input.persistence ?? buildImportPersistenceHandle(input.provider, input.request, storedConfig);
|
|
15
|
+
const session = await input.resumeSession(persistence, config, input.context.launchContext);
|
|
16
|
+
const timeline = await collectImportedTimeline(session.streamHistory());
|
|
17
|
+
return {
|
|
18
|
+
session,
|
|
19
|
+
config: storedConfig,
|
|
20
|
+
persistence,
|
|
21
|
+
timeline,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function buildImportPersistenceHandle(provider, input, config) {
|
|
25
|
+
return {
|
|
26
|
+
provider,
|
|
27
|
+
sessionId: input.providerHandleId,
|
|
28
|
+
nativeHandle: input.providerHandleId,
|
|
29
|
+
metadata: {
|
|
30
|
+
...config,
|
|
31
|
+
provider,
|
|
32
|
+
cwd: input.cwd,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async function collectImportedTimeline(events) {
|
|
37
|
+
const timeline = [];
|
|
38
|
+
for await (const event of events) {
|
|
39
|
+
if (event.type !== "timeline") {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
timeline.push({
|
|
43
|
+
item: event.item,
|
|
44
|
+
...(event.timestamp ? { timestamp: event.timestamp } : {}),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return timeline;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=provider-session-import.js.map
|
|
@@ -2,8 +2,14 @@ import { type ChildProcessWithoutNullStreams } from "node:child_process";
|
|
|
2
2
|
import type { ReadableStream as NodeReadableStream, WritableStream as NodeWritableStream } from "node:stream/web";
|
|
3
3
|
import { ClientSideConnection, type Client as ACPClient, type CreateTerminalRequest, type InitializeResponse, type KillTerminalRequest, type LoadSessionResponse, type NewSessionResponse, type ReadTextFileRequest, type RequestPermissionRequest, type RequestPermissionResponse, type ResumeSessionResponse, type SessionConfigOption, type SessionMode, type SessionModelState, type SessionNotification, type TerminalOutputRequest, type TerminalOutputResponse, type ToolCallContent, type ToolCallLocation, type ToolCallStatus, type ToolKind, type Usage, type WaitForTerminalExitRequest, type WriteTextFileRequest, type Stream as ACPStream } from "@agentclientprotocol/sdk";
|
|
4
4
|
import type { Logger } from "pino";
|
|
5
|
-
import { type AgentCapabilityFlags, type AgentClient, type AgentLaunchContext, type AgentMode, type AgentModelDefinition, type AgentPermissionRequest, type AgentPermissionResponse, type AgentPersistenceHandle, type AgentPromptInput, type AgentRunOptions, type AgentRunResult, type AgentRuntimeInfo, type AgentSession, type AgentSessionConfig, type AgentSlashCommand, type AgentStreamEvent, type AgentUsage, type
|
|
5
|
+
import { type AgentCapabilityFlags, type AgentClient, type AgentLaunchContext, type AgentMode, type AgentModelDefinition, type AgentPermissionRequest, type AgentPermissionResponse, type AgentPersistenceHandle, type AgentPromptInput, type AgentRunOptions, type AgentRunResult, type AgentRuntimeInfo, type AgentSession, type AgentSessionConfig, type AgentSlashCommand, type AgentStreamEvent, type AgentUsage, type ImportableProviderSession, type ImportProviderSessionContext, type ImportProviderSessionInput, type ListImportableSessionsOptions, type ListModesOptions, type ListModelsOptions } from "../agent-sdk-types.js";
|
|
6
6
|
import { type ProviderRuntimeSettings } from "../provider-launch-config.js";
|
|
7
|
+
export declare function summarizeACPRequestError(error: unknown): {
|
|
8
|
+
message: string;
|
|
9
|
+
code?: string;
|
|
10
|
+
diagnostic?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const DEFAULT_ACP_CAPABILITIES: AgentCapabilityFlags;
|
|
7
13
|
export declare function createLoggedNdJsonStream(output: NodeWritableStream, input: NodeReadableStream, options: {
|
|
8
14
|
logger: Logger;
|
|
9
15
|
provider: string;
|
|
@@ -147,13 +153,15 @@ export declare class ACPAgentClient implements AgentClient {
|
|
|
147
153
|
resumeSession(handle: AgentPersistenceHandle, overrides?: Partial<AgentSessionConfig>, launchContext?: AgentLaunchContext): Promise<AgentSession>;
|
|
148
154
|
listModels(options: ListModelsOptions): Promise<AgentModelDefinition[]>;
|
|
149
155
|
listModes(options: ListModesOptions): Promise<AgentMode[]>;
|
|
150
|
-
|
|
156
|
+
listImportableSessions(options?: ListImportableSessionsOptions): Promise<ImportableProviderSession[]>;
|
|
157
|
+
importSession(input: ImportProviderSessionInput, context: ImportProviderSessionContext): Promise<import("../agent-sdk-types.js").ImportedProviderSession>;
|
|
151
158
|
isAvailable(): Promise<boolean>;
|
|
152
159
|
protected spawnProcess(launchEnv?: Record<string, string>, options?: {
|
|
153
160
|
initializeTimeoutMs?: number;
|
|
154
161
|
}): Promise<SpawnedACPProcess>;
|
|
155
162
|
protected buildProbeClient(): ACPClient;
|
|
156
163
|
protected closeProbe(probe: SpawnedACPProcess): Promise<void>;
|
|
164
|
+
protected runACPRequest<T>(request: () => Promise<T>): Promise<T>;
|
|
157
165
|
protected resolveLaunchCommand(): Promise<{
|
|
158
166
|
command: string;
|
|
159
167
|
args: string[];
|
|
@@ -257,6 +265,8 @@ export declare class ACPAgentSession implements AgentSession, ACPClient {
|
|
|
257
265
|
}): Promise<void>;
|
|
258
266
|
killTerminal(params: KillTerminalRequest): Promise<Record<string, never>>;
|
|
259
267
|
private spawnProcess;
|
|
268
|
+
private runACPRequest;
|
|
269
|
+
private acpMcpServers;
|
|
260
270
|
private applySessionState;
|
|
261
271
|
private transformConfigOptions;
|
|
262
272
|
private transformModeId;
|