@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.
- package/NOTICE +4 -0
- package/README.md +85 -0
- package/dist/acp/interactions.d.ts +22 -0
- package/dist/acp/interactions.d.ts.map +1 -0
- package/dist/acp/interactions.js +352 -0
- package/dist/acp/interactions.js.map +1 -0
- package/dist/acp/login.d.ts +39 -0
- package/dist/acp/login.d.ts.map +1 -0
- package/dist/acp/login.js +500 -0
- package/dist/acp/login.js.map +1 -0
- package/dist/acp/server.d.ts +25 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +96 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp/session-registry.d.ts +25 -0
- package/dist/acp/session-registry.d.ts.map +1 -0
- package/dist/acp/session-registry.js +450 -0
- package/dist/acp/session-registry.js.map +1 -0
- package/dist/acp/session-updates.d.ts +44 -0
- package/dist/acp/session-updates.d.ts.map +1 -0
- package/dist/acp/session-updates.js +1076 -0
- package/dist/acp/session-updates.js.map +1 -0
- package/dist/acp/stdio.d.ts +13 -0
- package/dist/acp/stdio.d.ts.map +1 -0
- package/dist/acp/stdio.js +55 -0
- package/dist/acp/stdio.js.map +1 -0
- package/dist/cli-main.d.ts +2 -0
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli-main.js +31 -0
- package/dist/cli-main.js.map +1 -1
- package/dist/runtime.d.ts +8 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +15 -1
- package/dist/runtime.js.map +1 -1
- package/dist/subagents/host.d.ts +4 -0
- package/dist/subagents/host.d.ts.map +1 -1
- package/dist/subagents/host.js +6 -1
- package/dist/subagents/host.js.map +1 -1
- 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"}
|