@felan-ai/felan 0.24.3 → 0.24.5

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 (61) hide show
  1. package/NOTICE +4 -0
  2. package/README.md +101 -16
  3. package/dist/acp/interactions.d.ts +22 -0
  4. package/dist/acp/interactions.d.ts.map +1 -0
  5. package/dist/acp/interactions.js +352 -0
  6. package/dist/acp/interactions.js.map +1 -0
  7. package/dist/acp/login.d.ts +39 -0
  8. package/dist/acp/login.d.ts.map +1 -0
  9. package/dist/acp/login.js +500 -0
  10. package/dist/acp/login.js.map +1 -0
  11. package/dist/acp/server.d.ts +25 -0
  12. package/dist/acp/server.d.ts.map +1 -0
  13. package/dist/acp/server.js +96 -0
  14. package/dist/acp/server.js.map +1 -0
  15. package/dist/acp/session-registry.d.ts +25 -0
  16. package/dist/acp/session-registry.d.ts.map +1 -0
  17. package/dist/acp/session-registry.js +450 -0
  18. package/dist/acp/session-registry.js.map +1 -0
  19. package/dist/acp/session-updates.d.ts +44 -0
  20. package/dist/acp/session-updates.d.ts.map +1 -0
  21. package/dist/acp/session-updates.js +1076 -0
  22. package/dist/acp/session-updates.js.map +1 -0
  23. package/dist/acp/stdio.d.ts +13 -0
  24. package/dist/acp/stdio.d.ts.map +1 -0
  25. package/dist/acp/stdio.js +55 -0
  26. package/dist/acp/stdio.js.map +1 -0
  27. package/dist/cli-main.d.ts +2 -0
  28. package/dist/cli-main.d.ts.map +1 -1
  29. package/dist/cli-main.js +34 -3
  30. package/dist/cli-main.js.map +1 -1
  31. package/dist/dependencies.js +14 -14
  32. package/dist/dependencies.js.map +1 -1
  33. package/dist/extension-settings.js +2 -2
  34. package/dist/extension-settings.js.map +1 -1
  35. package/dist/mcp/oauth-host.js +2 -2
  36. package/dist/mcp/oauth-host.js.map +1 -1
  37. package/dist/memory/coordinator.js +1 -1
  38. package/dist/memory/coordinator.js.map +1 -1
  39. package/dist/process-restart.js +1 -1
  40. package/dist/process-restart.js.map +1 -1
  41. package/dist/restart-command.js +3 -3
  42. package/dist/restart-command.js.map +1 -1
  43. package/dist/runtime.d.ts +8 -2
  44. package/dist/runtime.d.ts.map +1 -1
  45. package/dist/runtime.js +15 -1
  46. package/dist/runtime.js.map +1 -1
  47. package/dist/savings.js +1 -1
  48. package/dist/savings.js.map +1 -1
  49. package/dist/startup-header.js +1 -1
  50. package/dist/startup-header.js.map +1 -1
  51. package/dist/subagents/catalog.js +8 -8
  52. package/dist/subagents/catalog.js.map +1 -1
  53. package/dist/subagents/host.d.ts +4 -0
  54. package/dist/subagents/host.d.ts.map +1 -1
  55. package/dist/subagents/host.js +7 -2
  56. package/dist/subagents/host.js.map +1 -1
  57. package/dist/update-notification.js +2 -2
  58. package/dist/update-notification.js.map +1 -1
  59. package/dist/update.js +8 -8
  60. package/dist/update.js.map +1 -1
  61. package/package.json +8 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/acp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type AgentContext, type ClientCapabilities, type CloseSessionRequest, type LoadSessionRequest, type NewSessionRequest, type PromptRequest, type PromptResponse } from '@agentclientprotocol/sdk';
2
+ import { SessionManager, type ModelRuntime } from '@felan-ai/agent-core';
3
+ import { type CreateLocalFelanRuntimeOptions, type LocalFelanRuntime } from '../runtime.js';
4
+ export type AcpRuntimeFactory = (options: CreateLocalFelanRuntimeOptions) => Promise<LocalFelanRuntime>;
5
+ export interface AcpSessionRegistryOptions {
6
+ readonly agentDir?: string;
7
+ readonly createModelRuntime?: (agentDir: string) => Promise<ModelRuntime>;
8
+ readonly createRuntime?: AcpRuntimeFactory;
9
+ readonly writeDiagnostic?: (message: string) => void;
10
+ readonly openSession?: (sessionId: string, cwd: string, agentDir: string) => Promise<SessionManager | undefined>;
11
+ }
12
+ export declare class AcpSessionRegistry {
13
+ #private;
14
+ constructor(options?: AcpSessionRegistryOptions);
15
+ initialize(capabilities: ClientCapabilities): void;
16
+ newSession(params: NewSessionRequest, client: AgentContext): Promise<{
17
+ sessionId: string;
18
+ }>;
19
+ loadSession(params: LoadSessionRequest, client: AgentContext): Promise<Record<string, never>>;
20
+ prompt(params: PromptRequest, client: AgentContext): Promise<PromptResponse>;
21
+ cancel(sessionId: string): Promise<void>;
22
+ closeSession(params: CloseSessionRequest): Promise<Record<string, never>>;
23
+ dispose(): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=session-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../../src/acp/session-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,cAAc,EAEd,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAIL,KAAK,8BAA8B,EACnC,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AAevB,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,8BAA8B,KACpC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1E,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,CACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;CAC1C;AAqBD,qBAAa,kBAAkB;;gBAiBjB,OAAO,GAAE,yBAA8B;IAQnD,UAAU,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAKlD,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAuC3F,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IA2GvF,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAsB5E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAYzE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAuKzB"}
@@ -0,0 +1,450 @@
1
+ import { RequestError, } from '@agentclientprotocol/sdk';
2
+ import { SessionManager, } from '@felan-ai/agent-core';
3
+ import { stat } from 'node:fs/promises';
4
+ import { isAbsolute, join, resolve } from 'node:path';
5
+ import { createLocalFelanRuntime, createLocalModelRuntime, getLocalAgentDir, } from '../runtime.js';
6
+ import { createLocalSettingsManager } from '../settings.js';
7
+ import { AcpPromptUpdateStream, AcpToolCallIdRegistry, prepareAcpPrompt, replayAcpSessionEntries, sanitizeAcpErrorMessage, toAcpPromptError, } from './session-updates.js';
8
+ import { AcpSessionInteractions } from './interactions.js';
9
+ const AUTHENTICATION_REFRESH_TIMEOUT_MS = 15_000;
10
+ class AcpRuntimeCleanupError extends AggregateError {
11
+ constructor(errors, message) {
12
+ super(errors, message);
13
+ this.name = 'AcpRuntimeCleanupError';
14
+ }
15
+ }
16
+ export class AcpSessionRegistry {
17
+ #agentDir;
18
+ #createModelRuntime;
19
+ #modelRuntime;
20
+ #createRuntime;
21
+ #writeDiagnostic;
22
+ #openSession;
23
+ #sessions = new Map();
24
+ #loadingSessions = new Map();
25
+ #reservedSessionIds = new Set();
26
+ #closingSessionIds = new Set();
27
+ #pendingLifecycle = new Set();
28
+ #cleanupFailures = new Set();
29
+ #disposePromise;
30
+ #disposed = false;
31
+ #supportsFormElicitation = false;
32
+ constructor(options = {}) {
33
+ this.#agentDir = resolve(options.agentDir ?? getLocalAgentDir());
34
+ this.#createRuntime = options.createRuntime ?? createLocalFelanRuntime;
35
+ this.#writeDiagnostic = options.writeDiagnostic ?? (() => { });
36
+ this.#openSession = options.openSession ?? openPersistedSession;
37
+ this.#createModelRuntime = options.createModelRuntime ?? createLocalModelRuntime;
38
+ }
39
+ initialize(capabilities) {
40
+ this.#assertOpen();
41
+ this.#supportsFormElicitation = capabilities.elicitation?.form != null;
42
+ }
43
+ newSession(params, client) {
44
+ this.#assertOpen();
45
+ return this.#trackLifecycle(this.#newSession(params, client));
46
+ }
47
+ async #newSession(params, client) {
48
+ const request = await validateSessionRequest(params);
49
+ const toolCallIds = new AcpToolCallIdRegistry();
50
+ const { runtime, interactions } = await this.#createSession(request.cwd, client, toolCallIds);
51
+ try {
52
+ const sessionId = runtime.session.sessionManager.getSessionId();
53
+ this.#assertOpen();
54
+ if (this.#sessions.has(sessionId)
55
+ || this.#reservedSessionIds.has(sessionId)
56
+ || this.#closingSessionIds.has(sessionId)) {
57
+ throw RequestError.internalError({ sessionId }, 'A duplicate session ID was created');
58
+ }
59
+ this.#sessions.set(sessionId, {
60
+ runtime,
61
+ interactions,
62
+ client,
63
+ cancelRequested: false,
64
+ closed: false,
65
+ nextPromptTurn: 0,
66
+ toolCallIds,
67
+ });
68
+ return { sessionId };
69
+ }
70
+ catch (error) {
71
+ interactions.close();
72
+ return disposeRuntimeAfterFailure(runtime, error, 'Failed to discard an unregistered ACP session');
73
+ }
74
+ }
75
+ loadSession(params, client) {
76
+ this.#assertOpen();
77
+ if (this.#sessions.has(params.sessionId)) {
78
+ throw RequestError.invalidParams({ sessionId: params.sessionId }, 'Session is already active');
79
+ }
80
+ if (this.#reservedSessionIds.has(params.sessionId)) {
81
+ throw RequestError.invalidParams({ sessionId: params.sessionId }, 'Session is already loading');
82
+ }
83
+ if (this.#closingSessionIds.has(params.sessionId)) {
84
+ throw RequestError.invalidParams({ sessionId: params.sessionId }, 'Session is closing');
85
+ }
86
+ this.#reservedSessionIds.add(params.sessionId);
87
+ return this.#trackLifecycle(this.#loadSession(params, client));
88
+ }
89
+ async #loadSession(params, client) {
90
+ let active;
91
+ try {
92
+ const request = await validateSessionRequest(params);
93
+ const { cwd } = request;
94
+ const sessionManager = await this.#openSession(params.sessionId, cwd, this.#agentDir);
95
+ if (!sessionManager || sessionManager.getSessionId() !== params.sessionId) {
96
+ throw RequestError.resourceNotFound(params.sessionId);
97
+ }
98
+ if (!pathsEqual(sessionManager.getCwd(), cwd)) {
99
+ throw RequestError.invalidParams({ sessionId: params.sessionId, cwd }, 'Session cwd does not match the persisted session');
100
+ }
101
+ const toolCallIds = new AcpToolCallIdRegistry();
102
+ const { runtime, interactions } = await this.#createSession(cwd, client, toolCallIds, sessionManager);
103
+ if (runtime.session.sessionManager.getSessionId() !== params.sessionId) {
104
+ interactions.close();
105
+ return disposeRuntimeAfterFailure(runtime, RequestError.internalError({ sessionId: params.sessionId }, 'Felan Code runtime opened a different session'), 'Failed to discard a mismatched ACP session');
106
+ }
107
+ if (this.#sessions.has(params.sessionId)) {
108
+ interactions.close();
109
+ return disposeRuntimeAfterFailure(runtime, RequestError.invalidParams({ sessionId: params.sessionId }, 'Session is already active'), 'Failed to discard a duplicate ACP session');
110
+ }
111
+ const createdActive = {
112
+ runtime,
113
+ interactions,
114
+ client,
115
+ cancelRequested: false,
116
+ closed: false,
117
+ nextPromptTurn: 0,
118
+ toolCallIds,
119
+ };
120
+ active = createdActive;
121
+ this.#loadingSessions.set(params.sessionId, createdActive);
122
+ await replayAcpSessionEntries(params.sessionId, cwd, runtime.session.sessionManager.getBranch(), client, () => this.#loadingSessions.get(params.sessionId) === createdActive && !createdActive.closed, createdActive.toolCallIds);
123
+ if (this.#loadingSessions.get(params.sessionId) !== createdActive || createdActive.closed) {
124
+ throw RequestError.requestCancelled({ sessionId: params.sessionId }, 'Session closed while loading');
125
+ }
126
+ this.#loadingSessions.delete(params.sessionId);
127
+ this.#sessions.set(params.sessionId, createdActive);
128
+ return {};
129
+ }
130
+ catch (error) {
131
+ if (active !== undefined) {
132
+ if (this.#loadingSessions.get(params.sessionId) === active) {
133
+ this.#loadingSessions.delete(params.sessionId);
134
+ }
135
+ try {
136
+ await closeActiveSession(active);
137
+ }
138
+ catch (cleanupError) {
139
+ throw new AcpRuntimeCleanupError([error, cleanupError], 'ACP session load and cleanup both failed');
140
+ }
141
+ }
142
+ throw error;
143
+ }
144
+ finally {
145
+ this.#reservedSessionIds.delete(params.sessionId);
146
+ }
147
+ }
148
+ async prompt(params, client) {
149
+ const active = this.#require(params.sessionId);
150
+ if (active.activePrompt) {
151
+ throw RequestError.invalidRequest({ sessionId: params.sessionId }, 'Only one prompt may run per session');
152
+ }
153
+ const preparedPrompt = prepareAcpPrompt(params.prompt);
154
+ active.client = client;
155
+ active.cancelRequested = false;
156
+ active.interactions.beginPrompt(client);
157
+ active.nextPromptTurn += 1;
158
+ const running = this.#runPrompt(active, params, preparedPrompt, active.nextPromptTurn);
159
+ active.activePrompt = running;
160
+ try {
161
+ return await running;
162
+ }
163
+ finally {
164
+ if (active.activePrompt === running)
165
+ delete active.activePrompt;
166
+ }
167
+ }
168
+ async cancel(sessionId) {
169
+ const active = this.#sessions.get(sessionId);
170
+ if (!active || active.closed)
171
+ return;
172
+ active.cancelRequested = true;
173
+ active.interactions.cancelPending();
174
+ await active.runtime.session.abort();
175
+ }
176
+ closeSession(params) {
177
+ this.#assertOpen();
178
+ if (this.#loadingSessions.has(params.sessionId)) {
179
+ throw RequestError.invalidRequest({ sessionId: params.sessionId }, 'Session is still loading');
180
+ }
181
+ const active = this.#sessions.get(params.sessionId);
182
+ if (!active)
183
+ throw RequestError.resourceNotFound(params.sessionId);
184
+ this.#sessions.delete(params.sessionId);
185
+ this.#closingSessionIds.add(params.sessionId);
186
+ return this.#trackLifecycle(this.#closeSession(params.sessionId, active));
187
+ }
188
+ dispose() {
189
+ if (this.#disposePromise !== undefined)
190
+ return this.#disposePromise;
191
+ this.#disposed = true;
192
+ this.#disposePromise = this.#performDispose();
193
+ return this.#disposePromise;
194
+ }
195
+ async #performDispose() {
196
+ const active = [...this.#sessions.values(), ...this.#loadingSessions.values()];
197
+ this.#sessions.clear();
198
+ this.#loadingSessions.clear();
199
+ const pendingLifecycle = [...this.#pendingLifecycle];
200
+ const results = await Promise.allSettled(active.map(closeActiveSession));
201
+ await Promise.all(pendingLifecycle);
202
+ const failures = new Set(this.#cleanupFailures);
203
+ for (const result of results) {
204
+ if (result.status === 'rejected')
205
+ failures.add(result.reason);
206
+ }
207
+ if (failures.size > 0)
208
+ throw new AggregateError(failures, 'Failed to close ACP sessions');
209
+ }
210
+ #getModelRuntime() {
211
+ this.#modelRuntime ??= this.#createModelRuntime(this.#agentDir);
212
+ return this.#modelRuntime;
213
+ }
214
+ async #createSession(cwd, client, toolCallIds, sessionManager) {
215
+ const interactions = new AcpSessionInteractions({
216
+ client,
217
+ supportsFormElicitation: this.#supportsFormElicitation,
218
+ toolCallIds,
219
+ });
220
+ let runtime;
221
+ try {
222
+ this.#assertOpen();
223
+ const modelRuntime = await this.#getModelRuntime();
224
+ this.#assertOpen();
225
+ await requireConfiguredAuthentication(modelRuntime);
226
+ this.#assertOpen();
227
+ runtime = await this.#createRuntime({
228
+ cwd,
229
+ agentDir: this.#agentDir,
230
+ modelRuntime,
231
+ inlineExtensions: [interactions.inlineExtension],
232
+ ...(interactions.uiContext === undefined
233
+ ? {}
234
+ : { subagentUiContext: interactions.uiContext }),
235
+ ...(sessionManager === undefined ? {} : { sessionManager }),
236
+ });
237
+ this.#assertOpen();
238
+ for (const diagnostic of runtime.diagnostics) {
239
+ if (diagnostic.type !== 'info') {
240
+ this.#writeDiagnostic(sanitizeAcpErrorMessage(diagnostic.message));
241
+ }
242
+ }
243
+ const errors = runtime.diagnostics.filter(({ type }) => type === 'error');
244
+ if (errors.length > 0) {
245
+ throw RequestError.internalError({ diagnostics: errors.map(({ message }) => sanitizeAcpErrorMessage(message)) }, 'Felan Code runtime could not start');
246
+ }
247
+ interactions.bindSession(runtime.session.sessionManager.getSessionId());
248
+ await runtime.session.bindExtensions(interactions.uiContext === undefined
249
+ ? { mode: 'rpc' }
250
+ : { mode: 'rpc', uiContext: interactions.uiContext });
251
+ this.#assertOpen();
252
+ return { runtime, interactions };
253
+ }
254
+ catch (error) {
255
+ interactions.close();
256
+ if (runtime === undefined)
257
+ throw error;
258
+ return disposeRuntimeAfterFailure(runtime, error, 'Felan Code runtime startup cleanup failed');
259
+ }
260
+ }
261
+ async #runPrompt(active, params, prompt, turn) {
262
+ const updates = new AcpPromptUpdateStream({
263
+ sessionId: params.sessionId,
264
+ cwd: active.runtime.cwd,
265
+ turn,
266
+ client: active.client,
267
+ isActive: () => !active.closed && this.#sessions.get(params.sessionId) === active,
268
+ toolCallIds: active.toolCallIds,
269
+ });
270
+ const unsubscribe = active.runtime.session.subscribe((event) => updates.handle(event));
271
+ updates.emitPrompt(prompt.blocks);
272
+ let promptError;
273
+ let postPreflightAbort;
274
+ try {
275
+ await active.runtime.session.prompt(prompt.text, {
276
+ expandPromptTemplates: false,
277
+ source: 'rpc',
278
+ preflightResult: (accepted) => {
279
+ if (!accepted || (!active.cancelRequested && !active.closed))
280
+ return;
281
+ postPreflightAbort ??= Promise.resolve().then(() => active.runtime.session.abort());
282
+ },
283
+ });
284
+ }
285
+ catch (error) {
286
+ promptError = error;
287
+ }
288
+ finally {
289
+ unsubscribe();
290
+ }
291
+ if (postPreflightAbort !== undefined) {
292
+ try {
293
+ await postPreflightAbort;
294
+ }
295
+ catch (error) {
296
+ promptError ??= error;
297
+ }
298
+ }
299
+ const cancelled = active.cancelRequested || active.closed;
300
+ updates.finish(cancelled);
301
+ try {
302
+ await updates.flush();
303
+ }
304
+ catch (error) {
305
+ if (!active.cancelRequested && !active.closed)
306
+ throw toAcpPromptError(error);
307
+ }
308
+ if (active.cancelRequested || active.closed)
309
+ return { stopReason: 'cancelled' };
310
+ if (promptError !== undefined)
311
+ throw toAcpPromptError(promptError);
312
+ return { stopReason: stopReason(active.runtime.session, false) };
313
+ }
314
+ #require(sessionId) {
315
+ if (this.#loadingSessions.has(sessionId)) {
316
+ throw RequestError.invalidRequest({ sessionId }, 'Session is still loading');
317
+ }
318
+ const active = this.#sessions.get(sessionId);
319
+ if (!active || active.closed)
320
+ throw RequestError.resourceNotFound(sessionId);
321
+ return active;
322
+ }
323
+ #assertOpen() {
324
+ if (this.#disposed)
325
+ throw RequestError.internalError(undefined, 'ACP server is closed');
326
+ }
327
+ async #closeSession(sessionId, active) {
328
+ await closeActiveSession(active);
329
+ this.#closingSessionIds.delete(sessionId);
330
+ return {};
331
+ }
332
+ #trackLifecycle(operation) {
333
+ const settled = operation.then(() => { }, (error) => {
334
+ if (error instanceof AcpRuntimeCleanupError)
335
+ this.#cleanupFailures.add(error);
336
+ });
337
+ this.#pendingLifecycle.add(settled);
338
+ void settled.then(() => this.#pendingLifecycle.delete(settled));
339
+ return operation;
340
+ }
341
+ }
342
+ async function requireConfiguredAuthentication(modelRuntime) {
343
+ try {
344
+ const providers = modelRuntime.getProviders();
345
+ if (providers.some(({ id }) => modelRuntime.hasConfiguredAuth(id)))
346
+ return;
347
+ const signal = AbortSignal.timeout(AUTHENTICATION_REFRESH_TIMEOUT_MS);
348
+ await modelRuntime.refresh({
349
+ allowNetwork: false,
350
+ signal,
351
+ });
352
+ if (modelRuntime.getProviders().some(({ id }) => modelRuntime.hasConfiguredAuth(id)))
353
+ return;
354
+ throw RequestError.authRequired(undefined, 'Configure a model provider before creating a session');
355
+ }
356
+ catch (error) {
357
+ if (error instanceof RequestError)
358
+ throw error;
359
+ throw RequestError.internalError(undefined, sanitizeAcpErrorMessage(error));
360
+ }
361
+ }
362
+ async function validateSessionRequest(params) {
363
+ if (!isAbsolute(params.cwd)) {
364
+ throw RequestError.invalidParams({ cwd: params.cwd }, 'cwd must be an absolute path');
365
+ }
366
+ const cwd = resolve(params.cwd);
367
+ let metadata;
368
+ try {
369
+ metadata = await stat(cwd);
370
+ }
371
+ catch {
372
+ throw RequestError.resourceNotFound(cwd);
373
+ }
374
+ if (!metadata.isDirectory()) {
375
+ throw RequestError.invalidParams({ cwd }, 'cwd must be a directory');
376
+ }
377
+ if ((params.additionalDirectories?.length ?? 0) > 0) {
378
+ throw RequestError.invalidParams({ additionalDirectories: params.additionalDirectories }, 'Additional directories are not supported');
379
+ }
380
+ return { cwd };
381
+ }
382
+ async function openPersistedSession(sessionId, cwd, agentDir) {
383
+ const settings = createLocalSettingsManager(cwd, agentDir);
384
+ const sessionDir = settings.getSessionDir() ?? join(agentDir, 'sessions');
385
+ const sessions = await SessionManager.list(cwd, sessionDir);
386
+ const match = sessions.find(({ id }) => id === sessionId);
387
+ return match ? SessionManager.open(match.path, sessionDir) : undefined;
388
+ }
389
+ function closeActiveSession(active) {
390
+ active.closePromise ??= performCloseActiveSession(active);
391
+ return active.closePromise;
392
+ }
393
+ async function performCloseActiveSession(active) {
394
+ active.closed = true;
395
+ active.cancelRequested = true;
396
+ active.interactions.close();
397
+ const failures = [];
398
+ try {
399
+ await active.runtime.session.abort();
400
+ }
401
+ catch (error) {
402
+ failures.push(error);
403
+ }
404
+ if (active.activePrompt) {
405
+ await active.activePrompt.catch(() => { });
406
+ }
407
+ try {
408
+ await active.runtime.dispose();
409
+ }
410
+ catch (error) {
411
+ failures.push(error);
412
+ }
413
+ if (failures.length > 0) {
414
+ throw new AcpRuntimeCleanupError(failures, 'Failed to clean up an ACP session');
415
+ }
416
+ }
417
+ function stopReason(session, cancelled) {
418
+ if (cancelled)
419
+ return 'cancelled';
420
+ const assistant = [...session.messages].reverse().find(({ role }) => role === 'assistant');
421
+ if (!assistant || assistant.role !== 'assistant')
422
+ return 'end_turn';
423
+ if (assistant.stopReason === 'aborted')
424
+ return 'cancelled';
425
+ if (assistant.stopReason === 'length')
426
+ return 'max_tokens';
427
+ if (assistant.rawStopReason?.toLowerCase().includes('refusal'))
428
+ return 'refusal';
429
+ if (assistant.stopReason === 'error') {
430
+ throw RequestError.internalError(undefined, sanitizeAcpErrorMessage(assistant.errorMessage ?? 'Model request failed'));
431
+ }
432
+ return 'end_turn';
433
+ }
434
+ async function disposeRuntimeAfterFailure(runtime, error, message) {
435
+ try {
436
+ await runtime.dispose();
437
+ }
438
+ catch (cleanupError) {
439
+ throw new AcpRuntimeCleanupError([error, cleanupError], message);
440
+ }
441
+ throw error;
442
+ }
443
+ function pathsEqual(left, right) {
444
+ const normalizedLeft = resolve(left);
445
+ const normalizedRight = resolve(right);
446
+ return process.platform === 'win32'
447
+ ? normalizedLeft.toLowerCase() === normalizedRight.toLowerCase()
448
+ : normalizedLeft === normalizedRight;
449
+ }
450
+ //# sourceMappingURL=session-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../src/acp/session-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { RequestError, type AgentContext, type ContentBlock, type ToolCallLocation, type ToolKind } from '@agentclientprotocol/sdk';
2
+ import { type AgentSessionEvent, type SessionEntry } from '@felan-ai/agent-core';
3
+ type SupportedPromptBlock = Extract<ContentBlock, {
4
+ type: 'text' | 'resource_link';
5
+ }>;
6
+ export interface PreparedAcpPrompt {
7
+ readonly text: string;
8
+ readonly blocks: readonly SupportedPromptBlock[];
9
+ }
10
+ interface AcpPromptUpdateStreamOptions {
11
+ readonly sessionId: string;
12
+ readonly cwd: string;
13
+ readonly turn: number;
14
+ readonly client: AgentContext;
15
+ readonly isActive: () => boolean;
16
+ readonly toolCallIds?: AcpToolCallIdRegistry;
17
+ }
18
+ export declare function prepareAcpPrompt(content: readonly ContentBlock[]): PreparedAcpPrompt;
19
+ export declare class AcpToolCallIdRegistry {
20
+ #private;
21
+ claim(id: string, scope?: string): string;
22
+ current(id: string, scope?: string): string | undefined;
23
+ }
24
+ export interface AcpToolCallDetails {
25
+ readonly toolCallId: string;
26
+ readonly title: string;
27
+ readonly kind: ToolKind;
28
+ readonly locations?: ToolCallLocation[];
29
+ readonly rawInput: unknown;
30
+ }
31
+ export declare function createAcpToolCallUpdate(cwd: string, toolCallId: string, name: string, args: unknown): AcpToolCallDetails;
32
+ export declare class AcpPromptUpdateStream {
33
+ #private;
34
+ constructor(options: AcpPromptUpdateStreamOptions);
35
+ emitPrompt(blocks: readonly SupportedPromptBlock[]): void;
36
+ handle(event: AgentSessionEvent): void;
37
+ finish(cancelled: boolean): void;
38
+ flush(): Promise<void>;
39
+ }
40
+ export declare function replayAcpSessionEntries(sessionId: string, cwd: string, entries: readonly SessionEntry[], client: AgentContext, isActive?: () => boolean, toolCallIds?: AcpToolCallIdRegistry): Promise<void>;
41
+ export declare function toAcpPromptError(error: unknown): RequestError;
42
+ export declare function sanitizeAcpErrorMessage(error: unknown): string;
43
+ export {};
44
+ //# sourceMappingURL=session-updates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-updates.d.ts","sourceRoot":"","sources":["../../src/acp/session-updates.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAEZ,KAAK,YAAY,EACjB,KAAK,YAAY,EAGjB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AA0D9B,KAAK,oBAAoB,GAAG,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAAC,CAAC;AAEtF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAClD;AAED,UAAU,4BAA4B;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC;CAC9C;AAqBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,iBAAiB,CAgFpF;AAED,qBAAa,qBAAqB;;IAIhC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM;IA4BrC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,GAAG,SAAS;CAGpD;AAMD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,GACZ,kBAAkB,CAUpB;AAED,qBAAa,qBAAqB;;gBAiBpB,OAAO,EAAE,4BAA4B;IASjD,UAAU,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI;IAOzD,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAwCtC,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAc1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA0O7B;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,MAAM,EAAE,YAAY,EACpB,QAAQ,GAAE,MAAM,OAAoB,EACpC,WAAW,GAAE,qBAAmD,GAC/D,OAAO,CAAC,IAAI,CAAC,CA+Hf;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAK7D;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK9D"}