@felan-ai/felan 0.24.3 → 0.24.4

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 (39) hide show
  1. package/NOTICE +4 -0
  2. package/README.md +85 -0
  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 +31 -0
  30. package/dist/cli-main.js.map +1 -1
  31. package/dist/runtime.d.ts +8 -2
  32. package/dist/runtime.d.ts.map +1 -1
  33. package/dist/runtime.js +15 -1
  34. package/dist/runtime.js.map +1 -1
  35. package/dist/subagents/host.d.ts +4 -0
  36. package/dist/subagents/host.d.ts.map +1 -1
  37. package/dist/subagents/host.js +6 -1
  38. package/dist/subagents/host.js.map +1 -1
  39. package/package.json +11 -10
package/NOTICE CHANGED
@@ -23,6 +23,10 @@ Copyright (c) 2025 Mario Zechner.
23
23
  It also uses @earendil-works/pi-server 0.85.1 from the same project under the
24
24
  MIT License.
25
25
 
26
+ This package uses @agentclientprotocol/sdk 1.4.0 from
27
+ https://github.com/agentclientprotocol/typescript-sdk, licensed under the
28
+ Apache License 2.0. Copyright 2025 Zed Industries, Inc. and contributors.
29
+
26
30
  The local powerline subscription host adapts provider request behavior from
27
31
  packages/pi-powerline in https://github.com/mslavov/pi-extensions at commit
28
32
  7e72e509fe45a5a87c4c2e176cb711de994a8c1d. Copyright (c) 2026 Milko Slavov.
package/README.md CHANGED
@@ -53,6 +53,8 @@ felan [options] [message]
53
53
  --diagnostics Print runtime versions and configuration mode
54
54
  update Update a global npm installation of Felan
55
55
  savings Show persisted estimated API-equivalent savings
56
+ acp Serve Agent Client Protocol v1 over stdio
57
+ acp login Configure model-provider credentials in a finite terminal flow
56
58
  -h, --help Show help
57
59
  -v, --version Print the Felan version
58
60
  --verbose Show verbose startup details
@@ -84,6 +86,89 @@ support `--continue` and `--session`, and accept `--provider`, `--model`, and
84
86
  `--thinking` for reproducible model selection. `--resume` remains interactive-only.
85
87
  Headless startup never runs dependency onboarding or the interactive update check.
86
88
 
89
+ ## Native ACP v1
90
+
91
+ Run Felan as a local Agent Client Protocol server:
92
+
93
+ ```sh
94
+ felan acp
95
+ ```
96
+
97
+ Or run the published package without a global install:
98
+
99
+ ```sh
100
+ npx --yes @felan-ai/felan acp
101
+ ```
102
+
103
+ `felan acp` serves stable ACP v1 over newline-delimited JSON on stdio. Stdout
104
+ is reserved for protocol frames; diagnostics go to stderr. ACP clients receive
105
+ the machine name `felan` and display title `Felan Code`. Each ACP session gets
106
+ an isolated local runtime and can create, load, prompt, cancel, and close Felan
107
+ sessions. Felan accepts baseline text and resource-link prompt blocks, replays
108
+ the current persisted branch on load, and streams user, assistant, thought,
109
+ and bounded tool-call updates.
110
+
111
+ When the client advertises terminal authentication, Felan offers a terminal
112
+ method that appends `login` to the configured `felan acp` invocation. Run the
113
+ same flow manually with:
114
+
115
+ ```sh
116
+ felan acp login
117
+ ```
118
+
119
+ When the client launches Felan through `npx`, the equivalent command is:
120
+
121
+ ```sh
122
+ npx --yes @felan-ai/felan acp login
123
+ ```
124
+
125
+ The finite login process supports configurable API-key and OAuth provider
126
+ methods, hides secret and manual-code input, and saves credentials only through
127
+ the local `ModelRuntime` credential store at `$FELAN_AGENT_DIR/auth.json`
128
+ (`~/.felan/auth.json` by default). Do not commit or share that file. An ACP
129
+ client should reconnect after successful terminal authentication. Form-capable
130
+ clients also receive `ask_user` and Prewalk review as ACP elicitations.
131
+
132
+ ### Zed custom agent
133
+
134
+ Install `felan` on Zed's `PATH`, then add this custom agent in Zed's
135
+ `settings.json`:
136
+
137
+ ```json
138
+ {
139
+ "agent_servers": {
140
+ "Felan Code": {
141
+ "type": "custom",
142
+ "command": "felan",
143
+ "args": ["acp"],
144
+ "env": {}
145
+ }
146
+ }
147
+ }
148
+ ```
149
+
150
+ For an on-demand package launch, use `"command": "npx"` and
151
+ `"args": ["--yes", "@felan-ai/felan", "acp"]`. The advertised terminal
152
+ auth arguments are appended, producing the separate
153
+ `npx --yes @felan-ai/felan acp login` flow.
154
+
155
+ Zed and Felan do not share provider credentials automatically. If Felan needs
156
+ authentication, select its terminal login method or run `felan acp login`, then
157
+ start a new external-agent connection.
158
+
159
+ ACP action safety is host-owned. Known mutation, process, network, and unknown
160
+ tools request `allow once` or `reject once`; known read-only/internal tools can
161
+ proceed. This is not a durable permission policy or sandbox. MCP definitions
162
+ supplied in ACP `session/new` or `session/load` are accepted for client
163
+ compatibility and ignored. Configure Felan's separate OAuth-only remote HTTP
164
+ MCP gateway through `mcp.json` instead.
165
+
166
+ Current non-goals include remote ACP transports, additional workspace roots,
167
+ image/audio/embedded-resource prompt blocks, session modes and config options,
168
+ and all session-provided MCP servers. ACP does not launch client-provided MCP
169
+ processes or expose client-provided MCP tools, resources, prompts, sampling,
170
+ Apps, or scripting.
171
+
87
172
  `felan --resume` opens a selection-only session picker. Press Tab to switch
88
173
  between the current folder and all local sessions, Ctrl+S to change sorting,
89
174
  Ctrl+N to filter to named sessions, and Ctrl+P to toggle session paths. Escape
@@ -0,0 +1,22 @@
1
+ import { type AgentContext } from '@agentclientprotocol/sdk';
2
+ import type { AgentSession, CreateAgentCoreSessionOptions } from '@felan-ai/agent-core';
3
+ import { AcpToolCallIdRegistry } from './session-updates.js';
4
+ type InlineExtension = NonNullable<CreateAgentCoreSessionOptions['inlineExtensions']>[number];
5
+ type ExtensionUiContext = NonNullable<NonNullable<Parameters<AgentSession['bindExtensions']>[0]>['uiContext']>;
6
+ export interface AcpSessionInteractionsOptions {
7
+ readonly client: AgentContext;
8
+ readonly supportsFormElicitation: boolean;
9
+ readonly toolCallIds: AcpToolCallIdRegistry;
10
+ }
11
+ export declare class AcpSessionInteractions {
12
+ #private;
13
+ readonly inlineExtension: InlineExtension;
14
+ constructor(options: AcpSessionInteractionsOptions);
15
+ get uiContext(): ExtensionUiContext | undefined;
16
+ bindSession(sessionId: string): void;
17
+ beginPrompt(client: AgentContext): void;
18
+ cancelPending(): void;
19
+ close(): void;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=interactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../src/acp/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,YAAY,EACZ,6BAA6B,EAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,qBAAqB,EAEtB,MAAM,sBAAsB,CAAC;AAmC9B,KAAK,eAAe,GAAG,WAAW,CAChC,6BAA6B,CAAC,kBAAkB,CAAC,CAClD,CAAC,MAAM,CAAC,CAAC;AACV,KAAK,kBAAkB,GAAG,WAAW,CACnC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CACxE,CAAC;AAGF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;CAC7C;AAED,qBAAa,sBAAsB;;IAWjC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAiBvC;gBAIU,OAAO,EAAE,6BAA6B;IAOlD,IAAI,SAAS,IAAI,kBAAkB,GAAG,SAAS,CAE9C;IAED,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOpC,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IASvC,aAAa,IAAI,IAAI;IAMrB,KAAK,IAAI,IAAI;CA4Od"}
@@ -0,0 +1,352 @@
1
+ import { methods, } from '@agentclientprotocol/sdk';
2
+ import { AcpToolCallIdRegistry, createAcpToolCallUpdate, } from './session-updates.js';
3
+ const MAX_PENDING_REQUESTS = 32;
4
+ const MAX_DETACHED_REQUESTS = 128;
5
+ const MAX_MESSAGE_BYTES = 192 * 1024;
6
+ const MAX_FIELD_LABEL_BYTES = 8 * 1024;
7
+ const MAX_OPTION_BYTES = 2 * 1024;
8
+ const MAX_OPTIONS = 100;
9
+ const MAX_VALUE_LENGTH = 32 * 1024;
10
+ const MAX_TIMEOUT_MS = 2_147_483_647;
11
+ const ALLOW_ONCE = 'allow-once';
12
+ const REJECT_ONCE = 'reject-once';
13
+ const UNSAFE_CONTROL_CHARACTERS = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/u;
14
+ const SAFE_TOOL_NAMES = new Set([
15
+ 'TaskGet',
16
+ 'TaskList',
17
+ 'ask_user',
18
+ 'codebase_memory',
19
+ 'enter_prewalk',
20
+ 'exit_plan_mode',
21
+ 'find',
22
+ 'get_subagent_result',
23
+ 'grep',
24
+ 'list_background_bash',
25
+ 'list_subagents',
26
+ 'ls',
27
+ 'read',
28
+ 'read_background_bash',
29
+ 'read_symbol',
30
+ 'search_and_read_symbols',
31
+ 'search_code',
32
+ 'wait_background_bash',
33
+ ]);
34
+ export class AcpSessionInteractions {
35
+ #supportsFormElicitation;
36
+ #toolCallIds;
37
+ #activeRequests = new Set();
38
+ #detachedRequests = new Set();
39
+ #client;
40
+ #sessionId;
41
+ #requestController = new AbortController();
42
+ #cancelled = false;
43
+ #closed = false;
44
+ inlineExtension = {
45
+ name: '@felan-ai/felan/acp-action-permissions',
46
+ hidden: true,
47
+ factory: (pi) => {
48
+ pi.on('tool_call', (event, ctx) => {
49
+ if (SAFE_TOOL_NAMES.has(event.toolName))
50
+ return undefined;
51
+ return this.#authorizeToolCall(event.toolCallId, event.toolName, event.input, ctx.cwd, ctx.sessionManager.getSessionId(), ctx.signal, () => ctx.abort());
52
+ });
53
+ },
54
+ };
55
+ #uiContext;
56
+ constructor(options) {
57
+ this.#client = options.client;
58
+ this.#supportsFormElicitation = options.supportsFormElicitation;
59
+ this.#toolCallIds = options.toolCallIds;
60
+ this.#uiContext = this.#createUiContext();
61
+ }
62
+ get uiContext() {
63
+ return this.#supportsFormElicitation ? this.#uiContext : undefined;
64
+ }
65
+ bindSession(sessionId) {
66
+ if (this.#sessionId !== undefined && this.#sessionId !== sessionId) {
67
+ throw new Error('ACP interaction channel is already bound to another session');
68
+ }
69
+ this.#sessionId = sessionId;
70
+ }
71
+ beginPrompt(client) {
72
+ if (this.#closed)
73
+ return;
74
+ this.#client = client;
75
+ if (this.#cancelled) {
76
+ this.#requestController = new AbortController();
77
+ this.#cancelled = false;
78
+ }
79
+ }
80
+ cancelPending() {
81
+ if (this.#closed || this.#cancelled)
82
+ return;
83
+ this.#cancelled = true;
84
+ this.#requestController.abort();
85
+ }
86
+ close() {
87
+ if (this.#closed)
88
+ return;
89
+ this.#closed = true;
90
+ this.#requestController.abort();
91
+ }
92
+ #createUiContext() {
93
+ return {
94
+ select: async (title, options, requestOptions) => {
95
+ if (options.length === 0
96
+ || options.length > MAX_OPTIONS
97
+ || new Set(options).size !== options.length
98
+ || options.some((option) => !isBoundedString(option, MAX_OPTION_BYTES)))
99
+ return undefined;
100
+ const response = await this.#elicit(title, {
101
+ type: 'object',
102
+ properties: {
103
+ value: {
104
+ type: 'string',
105
+ title: boundString(title, MAX_FIELD_LABEL_BYTES),
106
+ enum: options,
107
+ },
108
+ },
109
+ required: ['value'],
110
+ }, requestOptions?.signal, requestOptions?.timeout);
111
+ const value = acceptedValue(response);
112
+ return typeof value === 'string' && options.includes(value) ? value : undefined;
113
+ },
114
+ confirm: async (title, message, requestOptions) => {
115
+ const response = await this.#elicit(`${title}\n\n${message}`, {
116
+ type: 'object',
117
+ properties: {
118
+ value: {
119
+ type: 'boolean',
120
+ title: boundString(title, MAX_FIELD_LABEL_BYTES),
121
+ description: boundString(message, MAX_MESSAGE_BYTES),
122
+ },
123
+ },
124
+ required: ['value'],
125
+ }, requestOptions?.signal, requestOptions?.timeout);
126
+ return acceptedValue(response) === true;
127
+ },
128
+ input: async (title, placeholder, requestOptions) => {
129
+ if (placeholder !== undefined && !isSafeBoundedText(placeholder, MAX_MESSAGE_BYTES)) {
130
+ return undefined;
131
+ }
132
+ const response = await this.#elicit(title, stringSchema(title, placeholder), requestOptions?.signal, requestOptions?.timeout);
133
+ const value = acceptedValue(response);
134
+ return isBoundedValue(value) ? value : undefined;
135
+ },
136
+ editor: async (title, prefill) => {
137
+ if (prefill !== undefined && !isBoundedValue(prefill))
138
+ return undefined;
139
+ const response = await this.#elicit(title, stringSchema(title, undefined, prefill));
140
+ const value = acceptedValue(response);
141
+ return isBoundedValue(value) ? value : undefined;
142
+ },
143
+ notify: () => { },
144
+ onTerminalInput: () => () => { },
145
+ setStatus: () => { },
146
+ setWorkingMessage: () => { },
147
+ setWorkingVisible: () => { },
148
+ setWorkingIndicator: () => { },
149
+ setHiddenThinkingLabel: () => { },
150
+ setWidget: () => { },
151
+ setFooter: () => { },
152
+ setHeader: () => { },
153
+ setTitle: () => { },
154
+ custom: async () => undefined,
155
+ pasteToEditor: () => { },
156
+ setEditorText: () => { },
157
+ getEditorText: () => '',
158
+ addAutocompleteProvider: () => { },
159
+ setEditorComponent: () => { },
160
+ getEditorComponent: () => undefined,
161
+ theme: neutralTheme,
162
+ getAllThemes: () => [],
163
+ getTheme: () => undefined,
164
+ setTheme: () => ({ success: false, error: 'Themes are unavailable over ACP' }),
165
+ getToolsExpanded: () => false,
166
+ setToolsExpanded: () => { },
167
+ };
168
+ }
169
+ async #elicit(message, requestedSchema, signal, timeout) {
170
+ if (!this.#supportsFormElicitation || !isBoundedString(message, MAX_MESSAGE_BYTES)) {
171
+ return undefined;
172
+ }
173
+ const sessionId = this.#sessionId;
174
+ if (sessionId === undefined)
175
+ return undefined;
176
+ return this.#request((cancellationSignal) => this.#client.request(methods.client.elicitation.create, {
177
+ mode: 'form',
178
+ sessionId,
179
+ message,
180
+ requestedSchema,
181
+ }, { cancellationSignal }), signal, timeout);
182
+ }
183
+ async #authorizeToolCall(providerToolCallId, toolName, input, cwd, sourceSessionId, signal, abort) {
184
+ const sessionId = this.#sessionId;
185
+ if (sessionId === undefined)
186
+ return denyToolCall(abort);
187
+ const wireId = sourceSessionId === sessionId
188
+ ? this.#toolCallIds.current(providerToolCallId) ?? this.#toolCallIds.claim(providerToolCallId)
189
+ : this.#toolCallIds.claim(providerToolCallId, sourceSessionId);
190
+ const response = await this.#request((cancellationSignal) => this.#client.request(methods.client.session.requestPermission, {
191
+ sessionId,
192
+ toolCall: {
193
+ ...createAcpToolCallUpdate(cwd, wireId, toolName, input),
194
+ status: 'pending',
195
+ },
196
+ options: [
197
+ { optionId: ALLOW_ONCE, name: 'Allow once', kind: 'allow_once' },
198
+ { optionId: REJECT_ONCE, name: 'Reject once', kind: 'reject_once' },
199
+ ],
200
+ }, { cancellationSignal }), signal);
201
+ if (isAllowOnceResponse(response))
202
+ return undefined;
203
+ return denyToolCall(abort);
204
+ }
205
+ async #request(send, externalSignal, timeout) {
206
+ if (this.#closed
207
+ || this.#cancelled
208
+ || this.#activeRequests.size >= MAX_PENDING_REQUESTS
209
+ || this.#detachedRequests.size >= MAX_DETACHED_REQUESTS
210
+ || externalSignal?.aborted
211
+ || (timeout !== undefined && (!Number.isFinite(timeout) || timeout <= 0)))
212
+ return undefined;
213
+ const timeoutController = new AbortController();
214
+ const signals = [this.#requestController.signal, timeoutController.signal];
215
+ if (externalSignal !== undefined)
216
+ signals.push(externalSignal);
217
+ const signal = AbortSignal.any(signals);
218
+ if (signal.aborted)
219
+ return undefined;
220
+ const requestToken = Symbol('request');
221
+ this.#activeRequests.add(requestToken);
222
+ let timeoutHandle;
223
+ if (timeout !== undefined && Number.isFinite(timeout) && timeout > 0) {
224
+ timeoutHandle = setTimeout(() => timeoutController.abort(), Math.min(Math.ceil(timeout), MAX_TIMEOUT_MS));
225
+ }
226
+ let wireRequest;
227
+ try {
228
+ wireRequest = send(signal);
229
+ }
230
+ catch {
231
+ if (timeoutHandle !== undefined)
232
+ clearTimeout(timeoutHandle);
233
+ this.#activeRequests.delete(requestToken);
234
+ return undefined;
235
+ }
236
+ let wireSettled = false;
237
+ const detachedRequests = this.#detachedRequests;
238
+ void wireRequest.then(() => {
239
+ wireSettled = true;
240
+ detachedRequests.delete(wireRequest);
241
+ }, () => {
242
+ wireSettled = true;
243
+ detachedRequests.delete(wireRequest);
244
+ });
245
+ const aborted = Symbol('aborted');
246
+ let abortListener;
247
+ const abortPromise = new Promise((resolve) => {
248
+ abortListener = () => resolve(aborted);
249
+ if (signal.aborted)
250
+ abortListener();
251
+ else
252
+ signal.addEventListener('abort', abortListener, { once: true });
253
+ });
254
+ try {
255
+ const result = await Promise.race([wireRequest, abortPromise]);
256
+ if (result !== aborted)
257
+ return result;
258
+ if (!wireSettled)
259
+ this.#detachedRequests.add(wireRequest);
260
+ return undefined;
261
+ }
262
+ catch {
263
+ return undefined;
264
+ }
265
+ finally {
266
+ if (timeoutHandle !== undefined)
267
+ clearTimeout(timeoutHandle);
268
+ if (abortListener !== undefined)
269
+ signal.removeEventListener('abort', abortListener);
270
+ this.#activeRequests.delete(requestToken);
271
+ }
272
+ }
273
+ }
274
+ function stringSchema(title, description, defaultValue) {
275
+ return {
276
+ type: 'object',
277
+ properties: {
278
+ value: {
279
+ type: 'string',
280
+ title: boundString(title, MAX_FIELD_LABEL_BYTES),
281
+ maxLength: MAX_VALUE_LENGTH,
282
+ ...(description === undefined
283
+ ? {}
284
+ : { description: boundString(description, MAX_MESSAGE_BYTES) }),
285
+ ...(defaultValue === undefined ? {} : { default: defaultValue }),
286
+ },
287
+ },
288
+ required: ['value'],
289
+ };
290
+ }
291
+ function acceptedValue(response) {
292
+ if (response?.action !== 'accept')
293
+ return undefined;
294
+ const content = response.content;
295
+ return typeof content === 'object' && content !== null && 'value' in content
296
+ ? content.value
297
+ : undefined;
298
+ }
299
+ function isAllowOnceResponse(response) {
300
+ if (typeof response !== 'object' || response === null || !('outcome' in response))
301
+ return false;
302
+ const outcome = response.outcome;
303
+ return typeof outcome === 'object'
304
+ && outcome !== null
305
+ && 'outcome' in outcome
306
+ && outcome.outcome === 'selected'
307
+ && 'optionId' in outcome
308
+ && outcome.optionId === ALLOW_ONCE;
309
+ }
310
+ function isBoundedValue(value) {
311
+ return typeof value === 'string'
312
+ && value.length <= MAX_VALUE_LENGTH
313
+ && isSafeBoundedText(value, MAX_VALUE_LENGTH * 4);
314
+ }
315
+ function isBoundedString(value, maxBytes) {
316
+ return value.length > 0 && isSafeBoundedText(value, maxBytes);
317
+ }
318
+ function isSafeBoundedText(value, maxBytes) {
319
+ return Buffer.byteLength(value, 'utf8') <= maxBytes
320
+ && !UNSAFE_CONTROL_CHARACTERS.test(value);
321
+ }
322
+ function boundString(value, maxBytes) {
323
+ if (Buffer.byteLength(value, 'utf8') <= maxBytes)
324
+ return value;
325
+ return Buffer.from(value, 'utf8').subarray(0, maxBytes).toString('utf8').replace(/�$/u, '');
326
+ }
327
+ function denyToolCall(abort) {
328
+ try {
329
+ abort();
330
+ }
331
+ catch { }
332
+ return {
333
+ block: true,
334
+ reason: 'The tool call was not approved by the user.',
335
+ terminate: true,
336
+ };
337
+ }
338
+ const neutralTheme = {
339
+ fg: (_color, text) => text,
340
+ bg: (_color, text) => text,
341
+ bold: (text) => text,
342
+ italic: (text) => text,
343
+ underline: (text) => text,
344
+ inverse: (text) => text,
345
+ strikethrough: (text) => text,
346
+ getFgAnsi: () => '',
347
+ getBgAnsi: () => '',
348
+ getColorMode: () => 'truecolor',
349
+ getThinkingBorderColor: () => (text) => text,
350
+ getBashModeBorderColor: () => (text) => text,
351
+ };
352
+ //# sourceMappingURL=interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../src/acp/interactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { type ModelRuntime } from '@felan-ai/agent-core';
2
+ export interface AcpLoginChoice {
3
+ readonly id: string;
4
+ readonly label: string;
5
+ readonly description?: string;
6
+ }
7
+ export interface AcpLoginTerminal {
8
+ select(message: string, options: readonly AcpLoginChoice[], signal: AbortSignal): Promise<string | undefined>;
9
+ input(message: string, options: {
10
+ readonly secret: boolean;
11
+ readonly placeholder?: string;
12
+ }, signal: AbortSignal): Promise<string | undefined>;
13
+ writeLine(message: string): void;
14
+ }
15
+ export interface AcpLoginSignalSource {
16
+ once(signal: 'SIGINT' | 'SIGTERM', listener: () => void): unknown;
17
+ off(signal: 'SIGINT' | 'SIGTERM', listener: () => void): unknown;
18
+ }
19
+ export interface RunLocalFelanAcpLoginOptions {
20
+ readonly agentDir?: string;
21
+ readonly terminal?: AcpLoginTerminal;
22
+ readonly createModelRuntime?: (agentDir: string, signal: AbortSignal) => Promise<ModelRuntime>;
23
+ readonly writeError?: (message: string) => void;
24
+ readonly signalSource?: AcpLoginSignalSource;
25
+ readonly signal?: AbortSignal;
26
+ readonly terminateProcess?: (exitCode: number) => void;
27
+ }
28
+ export declare function runLocalFelanAcpLogin(options?: RunLocalFelanAcpLoginOptions): Promise<number>;
29
+ export declare class NodeAcpLoginTerminal implements AcpLoginTerminal {
30
+ #private;
31
+ constructor(input?: NodeJS.ReadStream, output?: NodeJS.WriteStream);
32
+ select(message: string, options: readonly AcpLoginChoice[], signal: AbortSignal): Promise<string | undefined>;
33
+ input(message: string, options: {
34
+ readonly secret: boolean;
35
+ readonly placeholder?: string;
36
+ }, signal: AbortSignal): Promise<string | undefined>;
37
+ writeLine(message: string): void;
38
+ }
39
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/acp/login.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAoB9B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CACJ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/B,KAAK,CACH,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EACpE,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IAClE,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;CAClE;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAuBD,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,MAAM,CAAC,CA4GjB;AAyOD,qBAAa,oBAAqB,YAAW,gBAAgB;;gBAKzD,KAAK,GAAE,MAAM,CAAC,UAA0B,EACxC,MAAM,GAAE,MAAM,CAAC,WAA4B;IAMvC,MAAM,CACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAkB9B,KAAK,CACH,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EACpE,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQ9B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAsIjC"}