@felan-ai/agent-core 0.12.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -1
- package/dist/dynamic-thinking/session.d.ts +2 -1
- package/dist/dynamic-thinking/session.d.ts.map +1 -1
- package/dist/dynamic-thinking/session.js +4 -4
- package/dist/dynamic-thinking/session.js.map +1 -1
- package/dist/extension-config-write.d.ts +7 -0
- package/dist/extension-config-write.d.ts.map +1 -0
- package/dist/extension-config-write.js +52 -0
- package/dist/extension-config-write.js.map +1 -0
- package/dist/extension-ui.d.ts +51 -0
- package/dist/extension-ui.d.ts.map +1 -0
- package/dist/extension-ui.js +22 -0
- package/dist/extension-ui.js.map +1 -0
- package/dist/extensions.d.ts +25 -3
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +56 -11
- package/dist/extensions.js.map +1 -1
- package/dist/host-agent-runtime.d.ts +12 -0
- package/dist/host-agent-runtime.d.ts.map +1 -1
- package/dist/host-agent-runtime.js +171 -7
- package/dist/host-agent-runtime.js.map +1 -1
- package/dist/host-workers.d.ts +31 -0
- package/dist/host-workers.d.ts.map +1 -0
- package/dist/host-workers.js +4 -0
- package/dist/host-workers.js.map +1 -0
- package/dist/index.d.ts +27 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/platform.d.ts +33 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +3 -0
- package/dist/platform.js.map +1 -0
- package/dist/runtime-files.d.ts +28 -0
- package/dist/runtime-files.d.ts.map +1 -0
- package/dist/runtime-files.js +2 -0
- package/dist/runtime-files.js.map +1 -0
- package/dist/runtime.d.ts +20 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/savings.d.ts +12 -0
- package/dist/savings.d.ts.map +1 -1
- package/dist/savings.js +2 -1
- package/dist/savings.js.map +1 -1
- package/dist/services/models.d.ts +40 -0
- package/dist/services/models.d.ts.map +1 -0
- package/dist/services/models.js +3 -0
- package/dist/services/models.js.map +1 -0
- package/dist/services/runtime-dependencies.d.ts +16 -0
- package/dist/services/runtime-dependencies.d.ts.map +1 -0
- package/dist/services/runtime-dependencies.js +3 -0
- package/dist/services/runtime-dependencies.js.map +1 -0
- package/dist/services/secrets.d.ts +39 -0
- package/dist/services/secrets.d.ts.map +1 -0
- package/dist/services/secrets.js +18 -0
- package/dist/services/secrets.js.map +1 -0
- package/dist/services/sessions.d.ts +160 -0
- package/dist/services/sessions.d.ts.map +1 -0
- package/dist/services/sessions.js +37 -0
- package/dist/services/sessions.js.map +1 -0
- package/dist/services.d.ts +31 -0
- package/dist/services.d.ts.map +1 -0
- package/dist/services.js +55 -0
- package/dist/services.js.map +1 -0
- package/dist/session.d.ts +7 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +17 -4
- package/dist/session.js.map +1 -1
- package/package.json +9 -2
package/README.md
CHANGED
|
@@ -6,6 +6,11 @@ Portable Felan agent contracts and the Node.js host runtime.
|
|
|
6
6
|
Felan host and the pinned Pi packages. It is intended for applications and
|
|
7
7
|
portable extensions, not as a complete end-user CLI.
|
|
8
8
|
|
|
9
|
+
The published manifest pins the complete Pi runtime package family to one exact
|
|
10
|
+
version. Workspace overrides alone do not protect npm consumers from upstream
|
|
11
|
+
caret ranges selecting an incompatible Pi minor. Packed-install checks verify
|
|
12
|
+
that every installed Pi package uses the pinned version.
|
|
13
|
+
|
|
9
14
|
```ts
|
|
10
15
|
import { HostAgentRuntime } from '@felan-ai/agent-core';
|
|
11
16
|
|
|
@@ -169,6 +174,65 @@ Runtime-backed coding tools are installed during composition as hidden fallback
|
|
|
169
174
|
extension tools, so feature extensions can override standard tool names while
|
|
170
175
|
explicit application `customTools` retain final precedence.
|
|
171
176
|
|
|
177
|
+
Hosts may pass a `FelanServiceRegistry` to session composition. Providers register
|
|
178
|
+
typed contracts created by `defineServiceContract(id, major)`; an extension
|
|
179
|
+
declares its `serviceRequirements` on its configured default export and accesses
|
|
180
|
+
only those contracts through `pi.services.get(contract)`. Required services
|
|
181
|
+
without a provider skip that extension and call
|
|
182
|
+
`onServiceRequirementFailure(packageName, contract)` when configured. Optional
|
|
183
|
+
services return `undefined` when absent. Hosts own provider loading, validation,
|
|
184
|
+
scope, and lifecycle; Core does not discover provider modules or define an
|
|
185
|
+
extension-specific service table. Revoke the registry when its owning scope is
|
|
186
|
+
disposed so retained handles fail closed.
|
|
187
|
+
|
|
188
|
+
Core supplies shared `MODELS_SERVICE`, `SESSIONS_HISTORY_SERVICE`,
|
|
189
|
+
`SESSIONS_SERVICE`, `SECRETS_SERVICE` and `RUNTIME_DEPENDENCIES_SERVICE`
|
|
190
|
+
contracts. Models exposes authenticated,
|
|
191
|
+
allowed selection metadata and inference, not endpoint configuration or
|
|
192
|
+
credential mutation. Sessions exposes scoped, revision-pinned history and
|
|
193
|
+
admitted execution. History-only consumers declare `SESSIONS_HISTORY_SERVICE`
|
|
194
|
+
without receiving execution methods. History IDs and cursors are opaque, and reads must not
|
|
195
|
+
restore, adopt or execute a historical session. Secrets provides versioned,
|
|
196
|
+
namespaced storage, not sign-in authority. Runtime dependency installation is
|
|
197
|
+
an explicit host operation; a session form answer alone does not authorize it.
|
|
198
|
+
Providers determine availability and enforce these boundaries.
|
|
199
|
+
|
|
200
|
+
Models providers resolve `{ provider, id }` against the current authenticated,
|
|
201
|
+
allowed scope on every call. Selection metadata never grants endpoint or
|
|
202
|
+
credential authority. Providers own activation, cancellation and settlement;
|
|
203
|
+
discovery may run during extension registration, but inference must wait for
|
|
204
|
+
canonical session activation. Draining prevents new inference while joining
|
|
205
|
+
existing work.
|
|
206
|
+
|
|
207
|
+
Secrets exposes `read`, conditional `write`, and conditional `remove` within
|
|
208
|
+
provider-granted namespaces. `expectedVersion: null` creates only an absent
|
|
209
|
+
record. Versions are opaque content identities, not monotonic counters or
|
|
210
|
+
authorization tokens. Keep values out of model results, UI, logs and events;
|
|
211
|
+
storage access never grants permission to start an OAuth flow.
|
|
212
|
+
|
|
213
|
+
Every extension receives `pi.ui`. It publishes bounded generic statuses,
|
|
214
|
+
documents, views and progress, and requests forms with explicit action IDs.
|
|
215
|
+
Applications supply `createExtensionUi(packageName)` to session composition;
|
|
216
|
+
the package-specific binding owns validation, revisions, action dispatch and
|
|
217
|
+
cleanup. A missing binding returns an unsupported cancellation for requests
|
|
218
|
+
and rejects publication; it does not silently approve or discard an action.
|
|
219
|
+
Presentation hints are optional and never change the allowed values or
|
|
220
|
+
outcomes. Terminal components belong in an explicit client entrypoint, not
|
|
221
|
+
the portable default export.
|
|
222
|
+
|
|
223
|
+
Form requests default to the current session. `audience: 'owner'` requests an
|
|
224
|
+
owner-only session approval, such as existing-Chrome access;
|
|
225
|
+
`audience: 'host'` requests a local-console host interaction, such as MCP sign-in
|
|
226
|
+
or installation consent. The daemon applies authenticated identity, transport
|
|
227
|
+
authority, capabilities and host policy. TUI and ACP clients with equivalent
|
|
228
|
+
capabilities have equivalent eligibility; neither a client-kind label nor a
|
|
229
|
+
presenter hint grants authority.
|
|
230
|
+
|
|
231
|
+
Extension execution contributions also travel with the configured default
|
|
232
|
+
export. Importers must preserve their configuration and execution metadata;
|
|
233
|
+
they must not separately apply a provider-specific stream wrapper a second
|
|
234
|
+
time. Application policy still controls activation and the final tool loadout.
|
|
235
|
+
|
|
172
236
|
Agent Core owns the exact Pi dependency versions used by its consumers. Its
|
|
173
237
|
public entry point exposes the Pi model, credential, streaming, session,
|
|
174
238
|
resource, skill, tool, and context-inspection symbols needed to compose Felan applications, so
|
|
@@ -182,7 +246,7 @@ does not enable it automatically. Felan's local host supports `codemode.mode`
|
|
|
182
246
|
values `off`, `on`, and `only`, defaults to `off`, and disables the sandbox's
|
|
183
247
|
extra model helpers with `models: false`.
|
|
184
248
|
|
|
185
|
-
Agent Core 0.
|
|
249
|
+
Agent Core 0.13 follows Pi 1.1's public contracts. Extension integrations must
|
|
186
250
|
handle `aborted` on `agent_settled` events, include `durationMs` and `outputPad`
|
|
187
251
|
when implementing Pi tool-render callbacks, and provide
|
|
188
252
|
`ToolLoadout.getPromptGuidelines()`. Custom stream functions should return an
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import type { Api, Model } from '@earendil-works/pi-ai';
|
|
1
2
|
import type { InlineExtension } from '@earendil-works/pi-coding-agent';
|
|
2
3
|
import { type TurnClassificationRegistry } from '../classifier/turn-classification.js';
|
|
3
4
|
import type { AgentRuntime } from '../runtime.js';
|
|
4
5
|
import type { SavingsReporter } from '../savings.js';
|
|
5
6
|
import type { ModelSelectionPersistenceScope } from '../model-selection.js';
|
|
6
7
|
export declare const DYNAMIC_THINKING_PRODUCER = "@felan-ai/agent-core/dynamic-thinking";
|
|
7
|
-
export declare function createDynamicThinkingSession(runtime: AgentRuntime,
|
|
8
|
+
export declare function createDynamicThinkingSession(runtime: AgentRuntime, supportsNativeThinkingUpdates: (model: Model<Api>) => boolean, reporter?: SavingsReporter, options?: {
|
|
8
9
|
selectionScope?: ModelSelectionPersistenceScope;
|
|
9
10
|
turnClassification?: TurnClassificationRegistry;
|
|
10
11
|
}): InlineExtension;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/dynamic-thinking/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/dynamic-thinking/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAoB,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAoC,KAAK,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AACzH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAK5E,eAAO,MAAM,yBAAyB,0CAA0C,CAAC;AAEjF,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,YAAY,EACrB,6BAA6B,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAC7D,QAAQ,CAAC,EAAE,eAAe,EAC1B,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,8BAA8B,CAAC;IAAC,kBAAkB,CAAC,EAAE,0BAA0B,CAAA;CAAO,GACjH,eAAe,CA6HjB"}
|
|
@@ -3,7 +3,7 @@ import { isFelanThinkingLevel } from '../thinking.js';
|
|
|
3
3
|
import { reportDynamicThinkingSavings } from './savings.js';
|
|
4
4
|
import { dynamicThinkingQuestion, dynamicThinkingDecision, supportsDynamicThinking } from './selection.js';
|
|
5
5
|
export const DYNAMIC_THINKING_PRODUCER = '@felan-ai/agent-core/dynamic-thinking';
|
|
6
|
-
export function createDynamicThinkingSession(runtime,
|
|
6
|
+
export function createDynamicThinkingSession(runtime, supportsNativeThinkingUpdates, reporter, options = {}) {
|
|
7
7
|
const classifier = runtime.classifier;
|
|
8
8
|
if (!classifier)
|
|
9
9
|
throw new Error('Dynamic thinking requires a classifier');
|
|
@@ -12,8 +12,8 @@ export function createDynamicThinkingSession(runtime, codexEffortUpdatesAvailabl
|
|
|
12
12
|
let expectedLevel;
|
|
13
13
|
let lastAutomaticLevel;
|
|
14
14
|
let pendingSavings;
|
|
15
|
-
const canClassify = (
|
|
16
|
-
||
|
|
15
|
+
const canClassify = (model) => (model.api !== 'openai-codex-responses' && model.api !== 'openai-responses')
|
|
16
|
+
|| supportsNativeThinkingUpdates(model);
|
|
17
17
|
const local = options.turnClassification ? undefined : createTurnClassificationRegistry(classifier, runtime.logger);
|
|
18
18
|
const registry = options.turnClassification ?? local;
|
|
19
19
|
let prepared;
|
|
@@ -51,7 +51,7 @@ export function createDynamicThinkingSession(runtime, codexEffortUpdatesAvailabl
|
|
|
51
51
|
prepare(input, ctx) {
|
|
52
52
|
prepared = undefined;
|
|
53
53
|
if (!input.prompt.trim() || options.selectionScope?.owner || manualOverride || lifetime.signal.aborted
|
|
54
|
-
|| !supportsDynamicThinking(ctx.model) || !canClassify(ctx.model
|
|
54
|
+
|| !supportsDynamicThinking(ctx.model) || !canClassify(ctx.model))
|
|
55
55
|
return undefined;
|
|
56
56
|
const original = pi.getThinkingLevel();
|
|
57
57
|
if (lastAutomaticLevel !== undefined && original !== lastAutomaticLevel) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/dynamic-thinking/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gCAAgC,EAAmC,MAAM,sCAAsC,CAAC;AAIzH,OAAO,EAAE,oBAAoB,EAA2B,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE3G,MAAM,CAAC,MAAM,yBAAyB,GAAG,uCAAuC,CAAC;AAEjF,MAAM,UAAU,4BAA4B,CAC1C,OAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/dynamic-thinking/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gCAAgC,EAAmC,MAAM,sCAAsC,CAAC;AAIzH,OAAO,EAAE,oBAAoB,EAA2B,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE3G,MAAM,CAAC,MAAM,yBAAyB,GAAG,uCAAuC,CAAC;AAEjF,MAAM,UAAU,4BAA4B,CAC1C,OAAqB,EACrB,6BAA6D,EAC7D,QAA0B,EAC1B,UAAgH,EAAE;IAElH,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,aAA6C,CAAC;IAClD,IAAI,kBAAkD,CAAC;IACvD,IAAI,cAQS,CAAC;IACd,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,wBAAwB,IAAI,KAAK,CAAC,GAAG,KAAK,kBAAkB,CAAC;WAClH,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gCAAgC,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACpH,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,IAAI,KAAM,CAAC;IACtD,IAAI,QAAyE,CAAC;IAE9E,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;YACd,OAAO,CAAC,cAAc,EAAE,yBAAyB,CAAC,GAAG,EAAE;gBACrD,cAAc,GAAG,IAAI,CAAC;gBACtB,cAAc,GAAG,SAAS,CAAC;YAC7B,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,EAAE,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvC,IAAI,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC;oBAC1C,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;wBACnE,aAAa,GAAG,SAAS,CAAC;wBAC1B,OAAO;oBACT,CAAC;oBACD,aAAa,GAAG,SAAS,CAAC;oBAC1B,kBAAkB,GAAG,SAAS,CAAC;oBAC/B,cAAc,GAAG,SAAS,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa;oBAAE,aAAa,GAAG,SAAS,CAAC;qBACnF,CAAC;oBAAC,cAAc,GAAG,IAAI,CAAC;oBAAC,cAAc,GAAG,SAAS,CAAC;gBAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,QAAQ,CAAC;gBAChB,EAAE,EAAE,UAAU;gBACd,OAAO,CAAC,KAAK,EAAE,GAAG;oBAChB,QAAQ,GAAG,SAAS,CAAC;oBACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI,cAAc,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO;2BACjG,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;wBAAE,OAAO,SAAS,CAAC;oBACtF,MAAM,QAAQ,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;oBACvC,IAAI,kBAAkB,KAAK,SAAS,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;wBACxE,cAAc,GAAG,IAAI,CAAC;wBACtB,OAAO,SAAS,CAAC;oBACnB,CAAC;oBACD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;wBAAE,OAAO,SAAS,CAAC;oBACtD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACpD,IAAI,CAAC,QAAQ;wBAAE,OAAO,SAAS,CAAC;oBAChC,QAAQ,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;oBAC1C,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;gBAC7C,CAAC;aACF,CAAC,CAAC;YACH,IAAI,KAAK,EAAE,CAAC;gBACV,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBAC5B,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS;wBAAE,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC7H,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC1C,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC/C,cAAc,GAAG,SAAS,CAAC;gBAC3B,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChF,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC3B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC;gBACxB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI,cAAc,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO;gBAC7G,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;gBACnC,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;uBACpE,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE,KAAK,QAAQ;oBAAE,OAAO;gBAC7E,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClE,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBACtB,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;gBACpD,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC/B,IAAI,OAAO,CAAC,cAAc;oBAAE,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;;oBACpG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACzC,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC;gBACpC,IAAI,QAAQ,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACjG,cAAc,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK;wBAC/E,GAAG,CAAC,QAAQ,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;gBAC7G,CAAC;YACH,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;oBAAE,OAAO;gBAC/C,MAAM,OAAO,GAAG,cAAc,CAAC;gBAC/B,IAAI,CAAC,OAAO,IAAI,cAAc,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO;uBACpD,OAAO,CAAC,SAAS,KAAK,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE;uBACvD,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ;uBACtF,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE,KAAK,OAAO,CAAC,QAAQ;uBAChF,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ;uBAC5F,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;oBAC9C,cAAc,GAAG,SAAS,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC,OAAO,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC;uBAC9E,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;oBAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACjF,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAChD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO;gBACvE,MAAM,OAAO,GAAG,cAAc,CAAC;gBAC/B,cAAc,GAAG,SAAS,CAAC;gBAC3B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW;uBACrF,cAAc,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE;uBACpG,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ;uBACtF,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE,KAAK,OAAO,CAAC,QAAQ;oBAAE,OAAO;gBAC9F,MAAM,4BAA4B,CAChC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,EACnF,OAAO,CAAC,iBAAiB,CAC1B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ExtensionConfigDefinition, type ExtensionConfigValue } from './extension-config.js';
|
|
2
|
+
export type ExtensionConfigWriter = (packageName: string, patch: Readonly<Record<string, ExtensionConfigValue>>) => Promise<void>;
|
|
3
|
+
export declare function createExtensionConfigBinding(packageName: string, definition: ExtensionConfigDefinition | undefined, writer: ExtensionConfigWriter | undefined): () => {
|
|
4
|
+
updateConfig(patch: Readonly<Record<string, ExtensionConfigValue>>): Promise<void>;
|
|
5
|
+
revoke(): void;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=extension-config-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-config-write.d.ts","sourceRoot":"","sources":["../src/extension-config-write.ts"],"names":[],"mappings":"AAAA,OAAO,EACoB,KAAK,yBAAyB,EAAE,KAAK,oBAAoB,EACnF,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,qBAAqB,GAAG,CAClC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,KAClD,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,yBAAyB,GAAG,SAAS,EACjD,MAAM,EAAE,qBAAqB,GAAG,SAAS,GACxC,MAAM;IAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,IAAI,IAAI,CAAA;CAAE,CAyB9G"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { resolveExtensionConfigs, } from './extension-config.js';
|
|
2
|
+
export function createExtensionConfigBinding(packageName, definition, writer) {
|
|
3
|
+
let generation = 0;
|
|
4
|
+
let pending = Promise.resolve();
|
|
5
|
+
return () => {
|
|
6
|
+
const activation = ++generation;
|
|
7
|
+
const assertCurrent = () => {
|
|
8
|
+
if (activation !== generation)
|
|
9
|
+
throw new Error('Extension configuration binding is no longer active.');
|
|
10
|
+
};
|
|
11
|
+
return {
|
|
12
|
+
revoke() { if (generation === activation)
|
|
13
|
+
generation++; },
|
|
14
|
+
async updateConfig(patch) {
|
|
15
|
+
assertCurrent();
|
|
16
|
+
if (!writer)
|
|
17
|
+
throw new Error('Extension configuration persistence is unsupported without a configured writer.');
|
|
18
|
+
if (!definition)
|
|
19
|
+
throw new Error('This extension does not declare a configuration definition.');
|
|
20
|
+
const validated = validatePatch(definition, patch);
|
|
21
|
+
const work = pending.then(async () => {
|
|
22
|
+
assertCurrent();
|
|
23
|
+
await writer(packageName, validated);
|
|
24
|
+
assertCurrent();
|
|
25
|
+
});
|
|
26
|
+
pending = work.catch(() => { });
|
|
27
|
+
return work;
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function validatePatch(definition, patch) {
|
|
33
|
+
if (!patch || typeof patch !== 'object' || Array.isArray(patch)
|
|
34
|
+
|| (Object.getPrototypeOf(patch) !== Object.prototype && Object.getPrototypeOf(patch) !== null)) {
|
|
35
|
+
throw new Error('Extension configuration patch must be a plain object.');
|
|
36
|
+
}
|
|
37
|
+
const values = Object.create(null);
|
|
38
|
+
const keys = Reflect.ownKeys(patch);
|
|
39
|
+
for (const key of keys) {
|
|
40
|
+
if (typeof key !== 'string' || !Object.hasOwn(definition.fields, key))
|
|
41
|
+
throw new Error('Unknown extension configuration field.');
|
|
42
|
+
if (definition.fields[key].sensitive)
|
|
43
|
+
throw new Error('Sensitive extension configuration fields cannot be updated through this API.');
|
|
44
|
+
const descriptor = Object.getOwnPropertyDescriptor(patch, key);
|
|
45
|
+
if (!descriptor.enumerable || !('value' in descriptor))
|
|
46
|
+
throw new Error('Extension configuration fields must be enumerable data properties.');
|
|
47
|
+
values[key] = descriptor.value;
|
|
48
|
+
}
|
|
49
|
+
const resolved = resolveExtensionConfigs([definition], [{ extensionId: definition.id, values, source: 'extension configuration update' }]).get(definition.id);
|
|
50
|
+
return Object.freeze(Object.fromEntries(keys.map(key => [key, resolved[key]])));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=extension-config-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-config-write.js","sourceRoot":"","sources":["../src/extension-config-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { UiActionRequest, UiActionSource, UiFormAnswer, UiForm, UiStatus } from '@felan-ai/session-protocol';
|
|
2
|
+
export type UiCancelReason = 'user' | 'abort' | 'timeout' | 'unsupported' | 'drain' | 'restart';
|
|
3
|
+
export type UiRequestResult = {
|
|
4
|
+
readonly state: 'answered';
|
|
5
|
+
readonly answer: UiFormAnswer;
|
|
6
|
+
} | {
|
|
7
|
+
readonly state: 'deferred';
|
|
8
|
+
readonly interactionId: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly state: 'cancelled';
|
|
11
|
+
readonly reason: UiCancelReason;
|
|
12
|
+
};
|
|
13
|
+
export interface UiActionContext {
|
|
14
|
+
readonly requestId: string;
|
|
15
|
+
readonly signal: AbortSignal;
|
|
16
|
+
}
|
|
17
|
+
export type UiInteractiveElement = UiActionSource;
|
|
18
|
+
export interface UiElementHandle {
|
|
19
|
+
update(element: UiInteractiveElement): Promise<void>;
|
|
20
|
+
close(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export interface UiRequestOptions {
|
|
23
|
+
readonly signal?: AbortSignal;
|
|
24
|
+
readonly timeoutMs?: number;
|
|
25
|
+
readonly deferrable?: boolean;
|
|
26
|
+
/** Host-only: keeps the form out of durable state; answer admission remains durable, so do not collect secrets. */
|
|
27
|
+
readonly transient?: boolean;
|
|
28
|
+
readonly audience?: 'session' | 'owner' | 'host';
|
|
29
|
+
}
|
|
30
|
+
export interface UiPresentOptions {
|
|
31
|
+
readonly signal?: AbortSignal;
|
|
32
|
+
readonly onAction?: (request: UiActionRequest, context: UiActionContext) => Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
export interface ExtensionUi {
|
|
35
|
+
/** Current presentation availability only; this does not grant consent or authorization. */
|
|
36
|
+
canRequest(form: UiForm, options?: Pick<UiRequestOptions, 'audience'>): boolean;
|
|
37
|
+
notify(message: {
|
|
38
|
+
readonly level: 'info' | 'warning' | 'error';
|
|
39
|
+
readonly text: string;
|
|
40
|
+
}): Promise<void>;
|
|
41
|
+
status(item: UiStatus): Promise<void>;
|
|
42
|
+
removeStatus(id: string): Promise<void>;
|
|
43
|
+
request(form: UiForm, options?: UiRequestOptions): Promise<UiRequestResult>;
|
|
44
|
+
present(element: UiInteractiveElement, options?: UiPresentOptions): Promise<UiElementHandle>;
|
|
45
|
+
}
|
|
46
|
+
export type ExtensionUiBindingFactory = (packageName: string) => ExtensionUi;
|
|
47
|
+
export declare class ExtensionUiUnavailableError extends Error {
|
|
48
|
+
constructor();
|
|
49
|
+
}
|
|
50
|
+
export declare function createUnavailableExtensionUi(): ExtensionUi;
|
|
51
|
+
//# sourceMappingURL=extension-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-ui.d.ts","sourceRoot":"","sources":["../src/extension-ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,MAAM,EACN,QAAQ,EACT,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhG,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,mHAAmH;IACnH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3F;AAED,MAAM,WAAW,WAAW;IAC1B,4FAA4F;IAC5F,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC;IAChF,MAAM,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxG,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5E,OAAO,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC9F;AAED,MAAM,MAAM,yBAAyB,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,WAAW,CAAC;AAE7E,qBAAa,2BAA4B,SAAQ,KAAK;;CAKrD;AAED,wBAAgB,4BAA4B,IAAI,WAAW,CAc1D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export class ExtensionUiUnavailableError extends Error {
|
|
2
|
+
constructor() {
|
|
3
|
+
super('Extension UI is unavailable in this host.');
|
|
4
|
+
this.name = 'ExtensionUiUnavailableError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export function createUnavailableExtensionUi() {
|
|
8
|
+
const unavailable = async () => { throw new ExtensionUiUnavailableError(); };
|
|
9
|
+
const ui = {
|
|
10
|
+
canRequest: () => false,
|
|
11
|
+
notify: unavailable,
|
|
12
|
+
status: unavailable,
|
|
13
|
+
removeStatus: unavailable,
|
|
14
|
+
request: async (_form, options) => ({
|
|
15
|
+
state: 'cancelled',
|
|
16
|
+
reason: options?.signal?.aborted ? 'abort' : 'unsupported',
|
|
17
|
+
}),
|
|
18
|
+
present: unavailable,
|
|
19
|
+
};
|
|
20
|
+
return Object.freeze(ui);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=extension-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-ui.js","sourceRoot":"","sources":["../src/extension-ui.ts"],"names":[],"mappings":"AAqDA,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IACpD;QACE,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,UAAU,4BAA4B;IAC1C,MAAM,WAAW,GAAG,KAAK,IAAoB,EAAE,GAAG,MAAM,IAAI,2BAA2B,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,EAAE,GAAgB;QACtB,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK;QACvB,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,WAAW;QACnB,YAAY,EAAE,WAAW;QACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YAClC,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa;SAC3D,CAAC;QACF,OAAO,EAAE,WAAW;KACrB,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/extensions.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import type { ExtensionAPI, InlineExtension } from '@earendil-works/pi-coding-agent';
|
|
2
2
|
import type { AgentRuntime } from './runtime.js';
|
|
3
|
+
import type { Api, Model } from '@earendil-works/pi-ai';
|
|
4
|
+
import type { StreamFunction } from './session.js';
|
|
3
5
|
import type { TurnClassificationRegistry } from './classifier/turn-classification.js';
|
|
4
6
|
import type { ModelSelectionPersistenceScope, SessionSelectionAutomation } from './model-selection.js';
|
|
5
7
|
import type { SavingsReporter, SavingsReporterProvider } from './savings.js';
|
|
8
|
+
import { type ExtensionUi, type ExtensionUiBindingFactory } from './extension-ui.js';
|
|
9
|
+
import { type ExtensionConfigWriter } from './extension-config-write.js';
|
|
10
|
+
import { type ExtensionServiceAccess, type ExtensionServiceRequirements, type FelanServiceRegistry } from './services.js';
|
|
6
11
|
import { type FelanCapability } from './capabilities.js';
|
|
7
12
|
import { type ExtensionConfigDefinition, type ExtensionConfigOverride, type ExtensionConfigValue } from './extension-config.js';
|
|
13
|
+
export type { ExtensionConfigWriter } from './extension-config-write.js';
|
|
8
14
|
export interface FelanModelSelectionOptions {
|
|
9
15
|
readonly updateDefault?: boolean;
|
|
10
16
|
}
|
|
@@ -13,6 +19,9 @@ export interface FelanExtensionAPI extends Omit<ExtensionAPI, 'getFlag' | 'regis
|
|
|
13
19
|
readonly runtime: AgentRuntime;
|
|
14
20
|
readonly config: Readonly<Record<string, ExtensionConfigValue>>;
|
|
15
21
|
readonly savings?: SavingsReporter;
|
|
22
|
+
readonly services: ExtensionServiceAccess;
|
|
23
|
+
readonly ui: ExtensionUi;
|
|
24
|
+
updateConfig(patch: Readonly<Record<string, ExtensionConfigValue>>): Promise<void>;
|
|
16
25
|
readonly turnClassification?: TurnClassificationRegistry;
|
|
17
26
|
readonly selectionAutomation?: SessionSelectionAutomation;
|
|
18
27
|
registerCapability(capability: FelanCapability): void;
|
|
@@ -22,9 +31,22 @@ export interface FelanExtensionAPI extends Omit<ExtensionAPI, 'getFlag' | 'regis
|
|
|
22
31
|
export type FelanExtension = (pi: FelanExtensionAPI) => void | Promise<void>;
|
|
23
32
|
export interface ConfiguredFelanExtension extends FelanExtension {
|
|
24
33
|
readonly configDefinition?: ExtensionConfigDefinition;
|
|
34
|
+
readonly serviceRequirements?: ExtensionServiceRequirements;
|
|
35
|
+
/** Resolved once per package load, after config validation and required-service admission. */
|
|
36
|
+
readonly execution?: (context: FelanExecutionContext) => FelanExecutionContribution;
|
|
25
37
|
}
|
|
38
|
+
export interface FelanExecutionContext {
|
|
39
|
+
readonly config: Readonly<Record<string, ExtensionConfigValue>>;
|
|
40
|
+
readonly services: ExtensionServiceAccess;
|
|
41
|
+
}
|
|
42
|
+
export interface FelanExecutionContribution {
|
|
43
|
+
/** Applied in package order, before the caller's wrapStreamFunction. */
|
|
44
|
+
readonly wrapStreamFunction?: (original: StreamFunction) => StreamFunction;
|
|
45
|
+
readonly supportsNativeThinkingUpdates?: (model: Model<Api>) => boolean;
|
|
46
|
+
}
|
|
47
|
+
export declare function getExecutionContribution(extension: InlineExtension): FelanExecutionContribution | undefined;
|
|
26
48
|
export type ExtensionPackageImporter = (packageName: string) => Promise<unknown>;
|
|
27
|
-
export declare function bindFelanExtension(packageName: string, extension: FelanExtension, runtime: AgentRuntime, agentDir?: string, config?: Readonly<Record<string, ExtensionConfigValue>>, savings?: SavingsReporterProvider): InlineExtension;
|
|
28
|
-
export declare function loadFelanExtensions(packageNames: readonly string[], importExtension: ExtensionPackageImporter, runtime: AgentRuntime, agentDir?: string, configOverrides?: readonly ExtensionConfigOverride[], savings?: SavingsReporterProvider): Promise<InlineExtension[]>;
|
|
29
|
-
export declare function loadFelanSessionExtensions(packageNames: readonly string[], importExtension: ExtensionPackageImporter, runtime: AgentRuntime, agentDir: string, modelSelectionScope: ModelSelectionPersistenceScope, configOverrides?: readonly ExtensionConfigOverride[], savings?: SavingsReporterProvider, turnClassification?: TurnClassificationRegistry): Promise<InlineExtension[]>;
|
|
49
|
+
export declare function bindFelanExtension(packageName: string, extension: FelanExtension, runtime: AgentRuntime, agentDir?: string, config?: Readonly<Record<string, ExtensionConfigValue>>, savings?: SavingsReporterProvider, services?: FelanServiceRegistry, serviceRequirements?: ExtensionServiceRequirements, createExtensionUi?: ExtensionUiBindingFactory, updateExtensionConfig?: ExtensionConfigWriter): InlineExtension;
|
|
50
|
+
export declare function loadFelanExtensions(packageNames: readonly string[], importExtension: ExtensionPackageImporter, runtime: AgentRuntime, agentDir?: string, configOverrides?: readonly ExtensionConfigOverride[], savings?: SavingsReporterProvider, services?: FelanServiceRegistry, onServiceRequirementFailure?: (packageName: string, service: string) => void, createExtensionUi?: ExtensionUiBindingFactory, updateExtensionConfig?: ExtensionConfigWriter): Promise<InlineExtension[]>;
|
|
51
|
+
export declare function loadFelanSessionExtensions(packageNames: readonly string[], importExtension: ExtensionPackageImporter, runtime: AgentRuntime, agentDir: string, modelSelectionScope: ModelSelectionPersistenceScope, configOverrides?: readonly ExtensionConfigOverride[], savings?: SavingsReporterProvider, turnClassification?: TurnClassificationRegistry, services?: FelanServiceRegistry, onServiceRequirementFailure?: (packageName: string, service: string) => void, createExtensionUi?: ExtensionUiBindingFactory, updateExtensionConfig?: ExtensionConfigWriter): Promise<InlineExtension[]>;
|
|
30
52
|
//# sourceMappingURL=extensions.d.ts.map
|
package/dist/extensions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,KAAK,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EAG1B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,cAAc,CAAC;IACvF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,0BAA0B,CAAC;IACzD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;IAC1D,kBAAkB,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACtD,QAAQ,CACN,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAC9C,OAAO,CAAC,EAAE,0BAA0B,GACnC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IACxC,gBAAgB,CACd,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE,0BAA0B,GACnC,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,EAAE,EAAE,iBAAiB,KAClB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
|
package/dist/extensions.js
CHANGED
|
@@ -1,12 +1,29 @@
|
|
|
1
|
+
import { createUnavailableExtensionUi } from './extension-ui.js';
|
|
2
|
+
import { createExtensionConfigBinding } from './extension-config-write.js';
|
|
3
|
+
import { createExtensionServiceAccess, createFelanServiceRegistry } from './services.js';
|
|
1
4
|
import { associateCapabilityCollector, CapabilityCollector, } from './capabilities.js';
|
|
2
5
|
import { getExtensionConfigDefinition, resolveExtensionConfigs, } from './extension-config.js';
|
|
3
|
-
|
|
4
|
-
|
|
6
|
+
const executionContributions = new WeakMap();
|
|
7
|
+
export function getExecutionContribution(extension) {
|
|
8
|
+
const entry = executionContributions.get(extension);
|
|
9
|
+
return entry?.initialized ? entry.contribution : undefined;
|
|
5
10
|
}
|
|
6
|
-
function
|
|
11
|
+
export function bindFelanExtension(packageName, extension, runtime, agentDir = runtime.cwd, config = {}, savings, services = createFelanServiceRegistry(), serviceRequirements = {}, createExtensionUi, updateExtensionConfig) {
|
|
12
|
+
return bindFelanExtensionWithCapabilities(packageName, extension, runtime, agentDir, new CapabilityCollector(), true, undefined, config, savings, undefined, services, serviceRequirements, createExtensionUi, updateExtensionConfig);
|
|
13
|
+
}
|
|
14
|
+
function bindFelanExtensionWithCapabilities(packageName, extension, runtime, agentDir, capabilityCollector, resetCapabilities, modelSelectionScope, config, savings, turnClassification, services = createFelanServiceRegistry(), serviceRequirements = {}, createExtensionUi, updateExtensionConfig) {
|
|
15
|
+
const createConfigBinding = createExtensionConfigBinding(packageName, getExtensionConfigDefinition(extension), updateExtensionConfig);
|
|
16
|
+
const contribution = extension.execution?.({
|
|
17
|
+
config,
|
|
18
|
+
services: createExtensionServiceAccess(services, serviceRequirements),
|
|
19
|
+
});
|
|
20
|
+
const execution = contribution === undefined ? undefined : { contribution, initialized: false };
|
|
7
21
|
const inline = {
|
|
8
22
|
name: packageName,
|
|
9
23
|
factory: async (pi) => {
|
|
24
|
+
const configBinding = createConfigBinding();
|
|
25
|
+
if (execution)
|
|
26
|
+
execution.initialized = false;
|
|
10
27
|
if (resetCapabilities)
|
|
11
28
|
capabilityCollector.beginLoad();
|
|
12
29
|
let initializing = true;
|
|
@@ -17,23 +34,33 @@ function bindFelanExtensionWithCapabilities(packageName, extension, runtime, age
|
|
|
17
34
|
capabilityCollector.register(packageName, capability);
|
|
18
35
|
};
|
|
19
36
|
try {
|
|
20
|
-
await extension(createFelanExtensionAPI(pi, runtime, agentDir, registerCapability, modelSelectionScope, config, savings?.createReporter(packageName), turnClassification));
|
|
37
|
+
await extension(createFelanExtensionAPI(pi, runtime, agentDir, registerCapability, modelSelectionScope, config, savings?.createReporter(packageName), turnClassification, services, serviceRequirements, createExtensionUi ? createExtensionUi(packageName) : createUnavailableExtensionUi(), configBinding.updateConfig));
|
|
38
|
+
if (updateExtensionConfig)
|
|
39
|
+
pi.on('session_shutdown', () => { configBinding.revoke(); });
|
|
40
|
+
if (execution)
|
|
41
|
+
execution.initialized = true;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
configBinding.revoke();
|
|
45
|
+
throw error;
|
|
21
46
|
}
|
|
22
47
|
finally {
|
|
23
48
|
initializing = false;
|
|
24
49
|
}
|
|
25
50
|
},
|
|
26
51
|
};
|
|
52
|
+
if (execution)
|
|
53
|
+
executionContributions.set(inline, execution);
|
|
27
54
|
associateCapabilityCollector(inline, capabilityCollector);
|
|
28
55
|
return inline;
|
|
29
56
|
}
|
|
30
|
-
export async function loadFelanExtensions(packageNames, importExtension, runtime, agentDir = runtime.cwd, configOverrides = [], savings) {
|
|
31
|
-
return loadFelanExtensionsWithScope(packageNames, importExtension, runtime, agentDir, undefined, configOverrides, savings);
|
|
57
|
+
export async function loadFelanExtensions(packageNames, importExtension, runtime, agentDir = runtime.cwd, configOverrides = [], savings, services, onServiceRequirementFailure, createExtensionUi, updateExtensionConfig) {
|
|
58
|
+
return loadFelanExtensionsWithScope(packageNames, importExtension, runtime, agentDir, undefined, configOverrides, savings, undefined, services, onServiceRequirementFailure, createExtensionUi, updateExtensionConfig);
|
|
32
59
|
}
|
|
33
|
-
export async function loadFelanSessionExtensions(packageNames, importExtension, runtime, agentDir, modelSelectionScope, configOverrides = [], savings, turnClassification) {
|
|
34
|
-
return loadFelanExtensionsWithScope(packageNames, importExtension, runtime, agentDir, modelSelectionScope, configOverrides, savings, turnClassification);
|
|
60
|
+
export async function loadFelanSessionExtensions(packageNames, importExtension, runtime, agentDir, modelSelectionScope, configOverrides = [], savings, turnClassification, services, onServiceRequirementFailure, createExtensionUi, updateExtensionConfig) {
|
|
61
|
+
return loadFelanExtensionsWithScope(packageNames, importExtension, runtime, agentDir, modelSelectionScope, configOverrides, savings, turnClassification, services, onServiceRequirementFailure, createExtensionUi, updateExtensionConfig);
|
|
35
62
|
}
|
|
36
|
-
async function loadFelanExtensionsWithScope(packageNames, importExtension, runtime, agentDir, modelSelectionScope, configOverrides, savings, turnClassification) {
|
|
63
|
+
async function loadFelanExtensionsWithScope(packageNames, importExtension, runtime, agentDir, modelSelectionScope, configOverrides, savings, turnClassification, services, onServiceRequirementFailure, createExtensionUi, updateExtensionConfig) {
|
|
37
64
|
const seen = new Set();
|
|
38
65
|
const extensions = [];
|
|
39
66
|
const capabilityCollector = new CapabilityCollector();
|
|
@@ -64,15 +91,21 @@ async function loadFelanExtensionsWithScope(packageNames, importExtension, runti
|
|
|
64
91
|
throw new Error(`${packageName} must default-export a Felan extension`);
|
|
65
92
|
}
|
|
66
93
|
const configuredExtension = defaultExport;
|
|
94
|
+
const serviceRequirements = configuredExtension.serviceRequirements ?? {};
|
|
95
|
+
const missing = (serviceRequirements.required ?? []).find(contract => services?.get(contract) === undefined);
|
|
96
|
+
if (missing) {
|
|
97
|
+
onServiceRequirementFailure?.(packageName, missing.key);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
67
100
|
const definition = getExtensionConfigDefinition(configuredExtension);
|
|
68
101
|
const config = definition === undefined
|
|
69
102
|
? {}
|
|
70
103
|
: resolveExtensionConfigs([definition], configOverrides.filter(({ extensionId }) => extensionId === definition.id)).get(definition.id);
|
|
71
|
-
extensions.push(bindFelanExtensionWithCapabilities(packageName, defaultExport, runtime, agentDir, capabilityCollector, extensions.length === 0, modelSelectionScope, config, savings, turnClassification));
|
|
104
|
+
extensions.push(bindFelanExtensionWithCapabilities(packageName, defaultExport, runtime, agentDir, capabilityCollector, extensions.length === 0, modelSelectionScope, config, savings, turnClassification, services, serviceRequirements, createExtensionUi, updateExtensionConfig));
|
|
72
105
|
}
|
|
73
106
|
return extensions;
|
|
74
107
|
}
|
|
75
|
-
function createFelanExtensionAPI(pi, runtime, agentDir, registerCapability, modelSelectionScope, config, savings, turnClassification) {
|
|
108
|
+
function createFelanExtensionAPI(pi, runtime, agentDir, registerCapability, modelSelectionScope, config, savings, turnClassification, services = createFelanServiceRegistry(), serviceRequirements = {}, ui = createUnavailableExtensionUi(), updateConfig = async () => { throw new Error('Extension configuration persistence is unsupported.'); }) {
|
|
76
109
|
const boundMethods = new Map();
|
|
77
110
|
return new Proxy(pi, {
|
|
78
111
|
get(target, property) {
|
|
@@ -82,10 +115,16 @@ function createFelanExtensionAPI(pi, runtime, agentDir, registerCapability, mode
|
|
|
82
115
|
return runtime;
|
|
83
116
|
if (property === 'config')
|
|
84
117
|
return config;
|
|
118
|
+
if (property === 'updateConfig')
|
|
119
|
+
return updateConfig;
|
|
85
120
|
if (property === 'savings')
|
|
86
121
|
return savings;
|
|
87
122
|
if (property === 'turnClassification')
|
|
88
123
|
return turnClassification;
|
|
124
|
+
if (property === 'services')
|
|
125
|
+
return createExtensionServiceAccess(services, serviceRequirements);
|
|
126
|
+
if (property === 'ui')
|
|
127
|
+
return ui;
|
|
89
128
|
if (property === 'selectionAutomation')
|
|
90
129
|
return modelSelectionScope;
|
|
91
130
|
if (property === 'registerCapability') {
|
|
@@ -138,13 +177,19 @@ function createFelanExtensionAPI(pi, runtime, agentDir, registerCapability, mode
|
|
|
138
177
|
if (property === 'agentDir'
|
|
139
178
|
|| property === 'runtime'
|
|
140
179
|
|| property === 'config'
|
|
180
|
+
|| property === 'updateConfig'
|
|
141
181
|
|| property === 'savings'
|
|
142
182
|
|| property === 'turnClassification'
|
|
183
|
+
|| property === 'services'
|
|
184
|
+
|| property === 'ui'
|
|
143
185
|
|| property === 'selectionAutomation'
|
|
144
186
|
|| property === 'registerCapability')
|
|
145
187
|
return false;
|
|
146
188
|
return Reflect.set(target, property, value, target);
|
|
147
189
|
},
|
|
190
|
+
has(target, property) {
|
|
191
|
+
return property === 'ui' || property === 'updateConfig' || Reflect.has(target, property);
|
|
192
|
+
},
|
|
148
193
|
});
|
|
149
194
|
}
|
|
150
195
|
function getDefaultExport(imported) {
|
package/dist/extensions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,4BAA4B,EAAoD,MAAM,mBAAmB,CAAC;AACnH,OAAO,EAAE,4BAA4B,EAA8B,MAAM,6BAA6B,CAAC;AACvG,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAA6F,MAAM,eAAe,CAAC;AACpL,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAmD/B,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAGtC,CAAC;AAEL,MAAM,UAAU,wBAAwB,CAAC,SAA0B;IACjE,MAAM,KAAK,GAAG,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpD,OAAO,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAMD,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,SAAyB,EACzB,OAAqB,EACrB,WAAmB,OAAO,CAAC,GAAG,EAC9B,SAAyD,EAAE,EAC3D,OAAiC,EACjC,WAAiC,0BAA0B,EAAE,EAC7D,sBAAoD,EAAE,EACtD,iBAA6C,EAC7C,qBAA6C;IAE7C,OAAO,kCAAkC,CACvC,WAAW,EACX,SAAS,EACT,OAAO,EACP,QAAQ,EACR,IAAI,mBAAmB,EAAE,EACzB,IAAI,EACJ,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,CACtB,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CACzC,WAAmB,EACnB,SAAyB,EACzB,OAAqB,EACrB,QAAgB,EAChB,mBAAwC,EACxC,iBAA0B,EAC1B,mBAA+D,EAC/D,MAAsD,EACtD,OAA4C,EAC5C,kBAA+C,EAC/C,WAAiC,0BAA0B,EAAE,EAC7D,sBAAoD,EAAE,EACtD,iBAA6C,EAC7C,qBAA6C;IAE7C,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,WAAW,EAAE,4BAA4B,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAC,CAAC;IACtI,MAAM,YAAY,GAAI,SAAsC,CAAC,SAAS,EAAE,CAAC;QACvE,MAAM;QACN,QAAQ,EAAE,4BAA4B,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACtE,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAChG,MAAM,MAAM,GAAoB;QAC9B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACpB,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;YAC5C,IAAI,SAAS;gBAAE,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7C,IAAI,iBAAiB;gBAAE,mBAAmB,CAAC,SAAS,EAAE,CAAC;YACvD,IAAI,YAAY,GAAG,IAAI,CAAC;YACxB,MAAM,kBAAkB,GAAG,CAAC,UAA2B,EAAQ,EAAE;gBAC/D,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,WAAW,0CAA0C,CAAC,CAAC;gBACzG,CAAC;gBACD,mBAAmB,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YACxD,CAAC,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,uBAAuB,CACrC,EAAE,EACF,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,EACpC,kBAAkB,EAClB,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,4BAA4B,EAAE,EACnF,aAAa,CAAC,YAAY,CAC3B,CAAC,CAAC;gBACH,IAAI,qBAAqB;oBAAE,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxF,IAAI,SAAS;oBAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,KAAK,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;KACF,CAAC;IACF,IAAI,SAAS;QAAE,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7D,4BAA4B,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAA+B,EAC/B,eAAyC,EACzC,OAAqB,EACrB,WAAmB,OAAO,CAAC,GAAG,EAC9B,kBAAsD,EAAE,EACxD,OAAiC,EACjC,QAA+B,EAC/B,2BAA4E,EAC5E,iBAA6C,EAC7C,qBAA6C;IAE7C,OAAO,4BAA4B,CACjC,YAAY,EACZ,eAAe,EACf,OAAO,EACP,QAAQ,EACR,SAAS,EACT,eAAe,EACf,OAAO,EACP,SAAS,EACT,QAAQ,EACR,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,YAA+B,EAC/B,eAAyC,EACzC,OAAqB,EACrB,QAAgB,EAChB,mBAAmD,EACnD,kBAAsD,EAAE,EACxD,OAAiC,EACjC,kBAA+C,EAC/C,QAA+B,EAC/B,2BAA4E,EAC5E,iBAA6C,EAC7C,qBAA6C;IAE7C,OAAO,4BAA4B,CACjC,YAAY,EACZ,eAAe,EACf,OAAO,EACP,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,OAAO,EACP,kBAAkB,EAClB,QAAQ,EACR,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,CACtB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,YAA+B,EAC/B,eAAyC,EACzC,OAAqB,EACrB,QAAgB,EAChB,mBAA+D,EAC/D,eAAmD,EACnD,OAA4C,EAC5C,kBAA+C,EAC/C,QAA+B,EAC/B,2BAA4E,EAC5E,iBAA6C,EAC7C,qBAA6C;IAE7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAEtD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEtB,IAAI,QAAiB,CAAC;QACtB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE;gBACzF,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;QAED,IAAI,aAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,WAAW,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC1F,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,wCAAwC,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,mBAAmB,GAAG,aAAyC,CAAC;QACtE,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,mBAAmB,IAAI,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAG,CAAC,mBAAmB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC;QAC7G,IAAI,OAAO,EAAE,CAAC;YACZ,2BAA2B,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACxD,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,4BAA4B,CAAC,mBAAmB,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,uBAAuB,CAAC,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAE,CAAC;QAC1I,UAAU,CAAC,IAAI,CAAC,kCAAkC,CAChD,WAAW,EACX,aAA+B,EAC/B,OAAO,EACP,QAAQ,EACR,mBAAmB,EACnB,UAAU,CAAC,MAAM,KAAK,CAAC,EACvB,mBAAmB,EACnB,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,CACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,uBAAuB,CAC9B,EAAgB,EAChB,OAAqB,EACrB,QAAgB,EAChB,kBAAyD,EACzD,mBAA+D,EAC/D,MAAsD,EACtD,OAAoC,EACpC,kBAA+C,EAC/C,WAAiC,0BAA0B,EAAE,EAC7D,sBAAoD,EAAE,EACtD,KAAkB,4BAA4B,EAAE,EAChD,eAAkD,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC,CAAC,CAAC;IAEzI,MAAM,YAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;IAErD,OAAO,IAAI,KAAK,CAAC,EAAkC,EAAE;QACnD,GAAG,CAAC,MAAM,EAAE,QAAQ;YAClB,IAAI,QAAQ,KAAK,UAAU;gBAAE,OAAO,QAAQ,CAAC;YAC7C,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC;YAC3C,IAAI,QAAQ,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC;YACzC,IAAI,QAAQ,KAAK,cAAc;gBAAE,OAAO,YAAY,CAAC;YACrD,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC;YAC3C,IAAI,QAAQ,KAAK,oBAAoB;gBAAE,OAAO,kBAAkB,CAAC;YACjE,IAAI,QAAQ,KAAK,UAAU;gBAAE,OAAO,4BAA4B,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YAChG,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC;YACjC,IAAI,QAAQ,KAAK,qBAAqB;gBAAE,OAAO,mBAAmB,CAAC;YACnE,IAAI,QAAQ,KAAK,oBAAoB,EAAE,CAAC;gBACtC,OAAO,kBAAkB,CAAC;YAC5B,CAAC;YACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACxB,OAAO,CACL,OAAe,EACf,IAAc,EACd,OAA6C,EAC7C,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC9C,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,CACzB,KAA8C,EAC9C,OAAoC,EACpC,EAAE;wBACF,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,KAAK,KAAK,CAAC;wBACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;4BACzB,IAAI,CAAC,aAAa,EAAE,CAAC;gCACnB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAC7B,sEAAsE,CACvE,CAAC,CAAC;4BACL,CAAC;4BACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;wBACzB,CAAC;wBACD,OAAO,mBAAmB,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBACvE,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;gBACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAChC,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC9D,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,CACzB,KAAsD,EACtD,OAAoC,EACpC,EAAE;wBACF,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,KAAK,KAAK,CAAC;wBACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;4BACzB,IAAI,CAAC,aAAa,EAAE,CAAC;gCACnB,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;4BACJ,CAAC;4BACD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;wBACjC,CAAC;wBACD,OAAO,mBAAmB,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC/E,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACpD,IAAI,OAAO,KAAK,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YAE9C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QACD,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK;YACzB,IACE,QAAQ,KAAK,UAAU;mBACpB,QAAQ,KAAK,SAAS;mBACtB,QAAQ,KAAK,QAAQ;mBACrB,QAAQ,KAAK,cAAc;mBAC3B,QAAQ,KAAK,SAAS;mBACtB,QAAQ,KAAK,oBAAoB;mBACjC,QAAQ,KAAK,UAAU;mBACvB,QAAQ,KAAK,IAAI;mBACjB,QAAQ,KAAK,qBAAqB;mBAClC,QAAQ,KAAK,oBAAoB;gBACpC,OAAO,KAAK,CAAC;YACf,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QACD,GAAG,CAAC,MAAM,EAAE,QAAQ;YAClB,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3F,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAiB;IACzC,IAAI,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC1F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import type { AgentRuntime, AgentRuntimeExecOptions, AgentRuntimeFileReadOptions, AgentRuntimeFileWriteOptions, AgentRuntimeListFilesOptions, AgentRuntimeProcesses, AgentRuntimePrivateRuntime, AgentRuntimeShellOptions, AgentRuntimeStorage, AgentRuntimeStorageScope, AgentRuntimeTerminals, ExecResult } from './runtime.js';
|
|
2
2
|
import type { Classifier } from './classifier/index.js';
|
|
3
3
|
import { type Logger } from './logger.js';
|
|
4
|
+
import type { RuntimeFiles } from './runtime-files.js';
|
|
4
5
|
export type HostShellOptions = AgentRuntimeShellOptions;
|
|
5
6
|
export interface HostAgentRuntimeOptions {
|
|
7
|
+
readonly host?: {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly version: string;
|
|
10
|
+
};
|
|
6
11
|
readonly sessionStorageRoot: string;
|
|
7
12
|
readonly agentStorageRoot: string;
|
|
8
13
|
readonly agentDir?: string;
|
|
@@ -13,12 +18,19 @@ export interface HostAgentRuntimeOptions {
|
|
|
13
18
|
}
|
|
14
19
|
export declare class HostAgentRuntime implements AgentRuntime {
|
|
15
20
|
#private;
|
|
21
|
+
readonly host?: {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly version: string;
|
|
24
|
+
};
|
|
16
25
|
readonly classifier?: Classifier;
|
|
17
26
|
readonly logger: Logger;
|
|
18
27
|
readonly processes: AgentRuntimeProcesses;
|
|
19
28
|
readonly privateRuntime: AgentRuntimePrivateRuntime;
|
|
20
29
|
readonly terminals: AgentRuntimeTerminals;
|
|
30
|
+
readonly userHome?: string;
|
|
31
|
+
readonly files: RuntimeFiles;
|
|
21
32
|
constructor(cwd: string, options: HostAgentRuntimeOptions);
|
|
33
|
+
getEnvironmentVariable(name: string): string | undefined;
|
|
22
34
|
get kind(): 'host';
|
|
23
35
|
get cwd(): string;
|
|
24
36
|
storage(scope?: AgentRuntimeStorageScope): AgentRuntimeStorage;
|