@felan-ai/agent-core 0.4.11 → 0.5.0
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 +11 -4
- package/dist/extension-config.d.ts +58 -0
- package/dist/extension-config.d.ts.map +1 -0
- package/dist/extension-config.js +289 -0
- package/dist/extension-config.js.map +1 -0
- package/dist/extensions.d.ts +15 -3
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +53 -7
- package/dist/extensions.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/model-selection.d.ts +6 -0
- package/dist/model-selection.d.ts.map +1 -0
- package/dist/model-selection.js +26 -0
- package/dist/model-selection.js.map +1 -0
- package/dist/resource-loader.d.ts +0 -1
- package/dist/resource-loader.d.ts.map +1 -1
- package/dist/resource-loader.js +0 -21
- package/dist/resource-loader.js.map +1 -1
- package/dist/session.d.ts +2 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +4 -5
- package/dist/session.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -70,9 +70,13 @@ and runtime-backed coding tools. `createAgentCoreSession` returns a headless,
|
|
|
70
70
|
inactive session, while `createAgentCoreSessionRuntimeFactory` provides the
|
|
71
71
|
typed seam used with Pi's `createAgentSessionRuntime`. Applications retain
|
|
72
72
|
ownership of model credentials, settings, session storage, stream wrappers,
|
|
73
|
-
feature extensions, and presentation listeners. `FelanExtensionAPI` adds
|
|
74
|
-
|
|
75
|
-
API; feature-specific contracts remain in
|
|
73
|
+
feature extensions, and presentation listeners. `FelanExtensionAPI` adds the
|
|
74
|
+
selected `AgentRuntime`, application agent directory, and session-aware model
|
|
75
|
+
selection options to Pi's extension API; feature-specific contracts remain in
|
|
76
|
+
their owning extension packages. Feature automation can pass
|
|
77
|
+
`{ updateDefault: false }` to `setModel` or `setThinkingLevel` to update the
|
|
78
|
+
active session without changing the user's default model or thinking
|
|
79
|
+
preference. Ordinary selections retain Pi's default-updating behavior.
|
|
76
80
|
Applications may also pass adapter-neutral `inlineExtensions` directly into
|
|
77
81
|
session composition for host-owned integration such as presentation controls;
|
|
78
82
|
these remain opt-in and are not discovered from ambient configuration.
|
|
@@ -112,7 +116,10 @@ Unknown naming schemes default to `medium`, and hosts can pass a custom
|
|
|
112
116
|
`classifyModel` function to `selectModelForTier`. Model tiers do not imply a
|
|
113
117
|
thinking level. `FELAN_THINKING_LEVELS` separately defines `off`, `low`,
|
|
114
118
|
`medium`, `high`, `xhigh`, and `max`; `minimal` is outside the Felan-facing
|
|
115
|
-
scale. Agent Core
|
|
119
|
+
scale. Agent Core also re-exports Pi's `clampThinkingLevel` so extensions can
|
|
120
|
+
resolve a requested effort against a host-provided model without duplicating
|
|
121
|
+
provider capability rules. Agent Core does not load model-tier configuration or
|
|
122
|
+
resolve credentials.
|
|
116
123
|
|
|
117
124
|
Agent Core owns the runtime-neutral Felan base system prompt. Every composed
|
|
118
125
|
session uses this prompt; consumers extend it with `appendSystemPrompt` and
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export type ExtensionConfigPrimitive = boolean | number | string;
|
|
2
|
+
export interface ExtensionConfigJsonObject {
|
|
3
|
+
readonly [key: string]: ExtensionConfigValue;
|
|
4
|
+
}
|
|
5
|
+
export interface ExtensionConfigJsonArray extends ReadonlyArray<ExtensionConfigValue> {
|
|
6
|
+
}
|
|
7
|
+
export type ExtensionConfigValue = ExtensionConfigPrimitive | null | ExtensionConfigJsonObject | ExtensionConfigJsonArray;
|
|
8
|
+
export interface ExtensionConfigFieldOptions<T> {
|
|
9
|
+
readonly default: T;
|
|
10
|
+
readonly label?: string;
|
|
11
|
+
readonly description: string;
|
|
12
|
+
readonly cliName?: string | false;
|
|
13
|
+
readonly sensitive?: boolean;
|
|
14
|
+
readonly validate?: (value: unknown) => string | undefined;
|
|
15
|
+
}
|
|
16
|
+
export interface ExtensionConfigField<T = unknown> extends ExtensionConfigFieldOptions<T> {
|
|
17
|
+
readonly type: 'boolean' | 'json' | 'number' | 'string';
|
|
18
|
+
readonly values?: readonly T[];
|
|
19
|
+
}
|
|
20
|
+
export type ExtensionConfigFields = Readonly<Record<string, ExtensionConfigField<unknown>>>;
|
|
21
|
+
export interface ExtensionConfigDefinition<TFields extends ExtensionConfigFields = ExtensionConfigFields> {
|
|
22
|
+
readonly id: string;
|
|
23
|
+
readonly title: string;
|
|
24
|
+
readonly fields: TFields;
|
|
25
|
+
}
|
|
26
|
+
export type ExtensionConfigFieldValue<TField> = TField extends ExtensionConfigField<infer TValue> ? TValue : never;
|
|
27
|
+
export type InferExtensionConfig<TDefinition extends ExtensionConfigDefinition> = Readonly<{
|
|
28
|
+
[TKey in keyof TDefinition['fields']]: ExtensionConfigFieldValue<TDefinition['fields'][TKey]>;
|
|
29
|
+
}>;
|
|
30
|
+
export interface ExtensionConfigOverride {
|
|
31
|
+
readonly extensionId: string;
|
|
32
|
+
readonly values: Readonly<Record<string, unknown>>;
|
|
33
|
+
readonly source: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ExtensionConfigCliOption {
|
|
36
|
+
readonly name: string;
|
|
37
|
+
readonly extensionId: string;
|
|
38
|
+
readonly field: string;
|
|
39
|
+
readonly definition: ExtensionConfigDefinition;
|
|
40
|
+
readonly configField: ExtensionConfigField;
|
|
41
|
+
}
|
|
42
|
+
export declare const configField: {
|
|
43
|
+
boolean(options: ExtensionConfigFieldOptions<boolean>): ExtensionConfigField<boolean>;
|
|
44
|
+
number(options: ExtensionConfigFieldOptions<number>): ExtensionConfigField<number>;
|
|
45
|
+
string(options: ExtensionConfigFieldOptions<string>): ExtensionConfigField<string>;
|
|
46
|
+
enum<const TValues extends readonly [string, ...string[]]>(values: TValues, options: ExtensionConfigFieldOptions<TValues[number]>): ExtensionConfigField<TValues[number]>;
|
|
47
|
+
json<const TValue>(options: ExtensionConfigFieldOptions<TValue>): ExtensionConfigField<TValue>;
|
|
48
|
+
};
|
|
49
|
+
export declare function defineExtensionConfig<const TFields extends ExtensionConfigFields>(definition: ExtensionConfigDefinition<TFields>): ExtensionConfigDefinition<TFields>;
|
|
50
|
+
export declare function associateExtensionConfig(extension: Function, definition: ExtensionConfigDefinition): void;
|
|
51
|
+
export declare function getExtensionConfigDefinition(extension: Function): ExtensionConfigDefinition | undefined;
|
|
52
|
+
export declare function configureExtension<TDefinition extends ExtensionConfigDefinition>(definition: TDefinition, values: Partial<InferExtensionConfig<TDefinition>>, source?: string): ExtensionConfigOverride;
|
|
53
|
+
export declare function extensionConfigOverridesFromObject(definitions: readonly ExtensionConfigDefinition[], value: unknown, source: string): ExtensionConfigOverride[];
|
|
54
|
+
export declare function resolveExtensionConfigs(definitions: readonly ExtensionConfigDefinition[], overrides?: readonly ExtensionConfigOverride[]): ReadonlyMap<string, Readonly<Record<string, ExtensionConfigValue>>>;
|
|
55
|
+
export declare function getExtensionConfigCliOptions(definitions: readonly ExtensionConfigDefinition[]): readonly ExtensionConfigCliOption[];
|
|
56
|
+
export declare function parseExtensionConfigCliValue(option: ExtensionConfigCliOption, value: string | boolean): ExtensionConfigValue;
|
|
57
|
+
export declare function validateExtensionConfigValue(definition: ExtensionConfigDefinition, field: string, value: unknown, source: string): ExtensionConfigValue;
|
|
58
|
+
//# sourceMappingURL=extension-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-config.d.ts","sourceRoot":"","sources":["../src/extension-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAC;CAC9C;AAED,MAAM,WAAW,wBAAyB,SAAQ,aAAa,CAAC,oBAAoB,CAAC;CAAG;AAExF,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,IAAI,GACJ,yBAAyB,GACzB,wBAAwB,CAAC;AAE7B,MAAM,WAAW,2BAA2B,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CAC5D;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,OAAO,CAC/C,SAAQ,2BAA2B,CAAC,CAAC,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE5F,MAAM,WAAW,yBAAyB,CAAC,OAAO,SAAS,qBAAqB,GAAG,qBAAqB;IACtG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,yBAAyB,CAAC,MAAM,IAAI,MAAM,SAAS,oBAAoB,CAAC,MAAM,MAAM,CAAC,GAC7F,MAAM,GACN,KAAK,CAAC;AAEV,MAAM,MAAM,oBAAoB,CAAC,WAAW,SAAS,yBAAyB,IAAI,QAAQ,CAAC;KACxF,IAAI,IAAI,MAAM,WAAW,CAAC,QAAQ,CAAC,GAAG,yBAAyB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;CAC9F,CAAC,CAAC;AAEH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;CAC5C;AAID,eAAO,MAAM,WAAW;qBACL,2BAA2B,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC;oBAGrE,2BAA2B,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,MAAM,CAAC;oBAGlE,2BAA2B,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,MAAM,CAAC;eAGvE,OAAO,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,UAC/C,OAAO,WACN,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GACpD,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;eAG7B,MAAM,WAAW,2BAA2B,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,MAAM,CAAC;CAG/F,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,OAAO,SAAS,qBAAqB,EAC/E,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAC7C,yBAAyB,CAAC,OAAO,CAAC,CAWpC;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,QAAQ,EACnB,UAAU,EAAE,yBAAyB,GACpC,IAAI,CAEN;AAED,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,QAAQ,GAClB,yBAAyB,GAAG,SAAS,CAEvC;AAED,wBAAgB,kBAAkB,CAAC,WAAW,SAAS,yBAAyB,EAC9E,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,EAClD,MAAM,SAAiB,GACtB,uBAAuB,CAMzB;AAED,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,SAAS,yBAAyB,EAAE,EACjD,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,GACb,uBAAuB,EAAE,CAa3B;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,SAAS,yBAAyB,EAAE,EACjD,SAAS,GAAE,SAAS,uBAAuB,EAAO,GACjD,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,CA+BrE;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,yBAAyB,EAAE,GAChD,SAAS,wBAAwB,EAAE,CAiBrC;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,MAAM,GAAG,OAAO,GACtB,oBAAoB,CA0BtB;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,yBAAyB,EACrC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,GACb,oBAAoB,CAKtB"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
const extensionDefinitions = new WeakMap();
|
|
2
|
+
export const configField = {
|
|
3
|
+
boolean(options) {
|
|
4
|
+
return createField('boolean', options);
|
|
5
|
+
},
|
|
6
|
+
number(options) {
|
|
7
|
+
return createField('number', options);
|
|
8
|
+
},
|
|
9
|
+
string(options) {
|
|
10
|
+
return createField('string', options);
|
|
11
|
+
},
|
|
12
|
+
enum(values, options) {
|
|
13
|
+
return createField('string', options, values);
|
|
14
|
+
},
|
|
15
|
+
json(options) {
|
|
16
|
+
return createField('json', options);
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
export function defineExtensionConfig(definition) {
|
|
20
|
+
validateDefinition(definition);
|
|
21
|
+
const fields = Object.fromEntries(Object.entries(definition.fields).map(([name, field]) => [
|
|
22
|
+
name,
|
|
23
|
+
Object.freeze({
|
|
24
|
+
...field,
|
|
25
|
+
default: cloneExtensionConfigValue(field.default),
|
|
26
|
+
...(field.values === undefined ? {} : { values: Object.freeze([...field.values]) }),
|
|
27
|
+
}),
|
|
28
|
+
]));
|
|
29
|
+
return Object.freeze({ ...definition, fields: Object.freeze(fields) });
|
|
30
|
+
}
|
|
31
|
+
export function associateExtensionConfig(extension, definition) {
|
|
32
|
+
extensionDefinitions.set(extension, definition);
|
|
33
|
+
}
|
|
34
|
+
export function getExtensionConfigDefinition(extension) {
|
|
35
|
+
return extensionDefinitions.get(extension);
|
|
36
|
+
}
|
|
37
|
+
export function configureExtension(definition, values, source = 'programmatic') {
|
|
38
|
+
return {
|
|
39
|
+
extensionId: definition.id,
|
|
40
|
+
values: { ...values },
|
|
41
|
+
source,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function extensionConfigOverridesFromObject(definitions, value, source) {
|
|
45
|
+
if (value === undefined)
|
|
46
|
+
return [];
|
|
47
|
+
if (!isRecord(value))
|
|
48
|
+
throw new Error(`${source} must be an object`);
|
|
49
|
+
const definitionsById = definitionMap(definitions);
|
|
50
|
+
const overrides = [];
|
|
51
|
+
for (const [extensionId, fields] of Object.entries(value)) {
|
|
52
|
+
if (!definitionsById.has(extensionId)) {
|
|
53
|
+
throw new Error(`${source} contains unknown extension: ${extensionId}`);
|
|
54
|
+
}
|
|
55
|
+
if (!isRecord(fields))
|
|
56
|
+
throw new Error(`${source}.${extensionId} must be an object`);
|
|
57
|
+
overrides.push({ extensionId, values: { ...fields }, source: `${source}.${extensionId}` });
|
|
58
|
+
}
|
|
59
|
+
return overrides;
|
|
60
|
+
}
|
|
61
|
+
export function resolveExtensionConfigs(definitions, overrides = []) {
|
|
62
|
+
const definitionsById = definitionMap(definitions);
|
|
63
|
+
const resolved = new Map();
|
|
64
|
+
for (const definition of definitions) {
|
|
65
|
+
const values = {};
|
|
66
|
+
for (const [name, field] of Object.entries(definition.fields)) {
|
|
67
|
+
validateFieldValue(definition, name, field, field.default, `default for ${definition.id}.${name}`);
|
|
68
|
+
values[name] = cloneExtensionConfigValue(field.default);
|
|
69
|
+
}
|
|
70
|
+
resolved.set(definition.id, values);
|
|
71
|
+
}
|
|
72
|
+
for (const override of overrides) {
|
|
73
|
+
const definition = definitionsById.get(override.extensionId);
|
|
74
|
+
if (!definition) {
|
|
75
|
+
throw new Error(`${override.source} configures unknown extension: ${override.extensionId}`);
|
|
76
|
+
}
|
|
77
|
+
if (!isRecord(override.values)) {
|
|
78
|
+
throw new Error(`${override.source} must provide an object for ${override.extensionId}`);
|
|
79
|
+
}
|
|
80
|
+
const values = resolved.get(definition.id);
|
|
81
|
+
for (const [name, value] of Object.entries(override.values)) {
|
|
82
|
+
const field = definition.fields[name];
|
|
83
|
+
if (!field)
|
|
84
|
+
throw new Error(`${override.source} contains unknown field: ${definition.id}.${name}`);
|
|
85
|
+
validateFieldValue(definition, name, field, value, `${override.source}.${name}`);
|
|
86
|
+
values[name] = cloneExtensionConfigValue(value);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return new Map([...resolved].map(([id, values]) => [id, Object.freeze({ ...values })]));
|
|
90
|
+
}
|
|
91
|
+
export function getExtensionConfigCliOptions(definitions) {
|
|
92
|
+
definitionMap(definitions);
|
|
93
|
+
const seen = new Set();
|
|
94
|
+
const options = [];
|
|
95
|
+
for (const definition of definitions) {
|
|
96
|
+
for (const [field, configField] of Object.entries(definition.fields)) {
|
|
97
|
+
if (configField.cliName === false || configField.sensitive === true)
|
|
98
|
+
continue;
|
|
99
|
+
const name = configField.cliName ?? `${toKebabCase(definition.id)}-${toKebabCase(field)}`;
|
|
100
|
+
if (!/^[a-z][a-z0-9-]*$/u.test(name)) {
|
|
101
|
+
throw new Error(`Invalid CLI name for ${definition.id}.${field}: ${name}`);
|
|
102
|
+
}
|
|
103
|
+
if (seen.has(name))
|
|
104
|
+
throw new Error(`Duplicate extension configuration CLI option: --${name}`);
|
|
105
|
+
seen.add(name);
|
|
106
|
+
options.push({ name, extensionId: definition.id, field, definition, configField });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return Object.freeze(options);
|
|
110
|
+
}
|
|
111
|
+
export function parseExtensionConfigCliValue(option, value) {
|
|
112
|
+
const { definition, field, configField } = option;
|
|
113
|
+
let parsed;
|
|
114
|
+
if (configField.type === 'boolean') {
|
|
115
|
+
if (typeof value === 'boolean')
|
|
116
|
+
parsed = value;
|
|
117
|
+
else if (value === 'true')
|
|
118
|
+
parsed = true;
|
|
119
|
+
else if (value === 'false')
|
|
120
|
+
parsed = false;
|
|
121
|
+
else
|
|
122
|
+
throw new Error(`--${option.name} must be true or false`);
|
|
123
|
+
}
|
|
124
|
+
else if (configField.type === 'number') {
|
|
125
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
126
|
+
throw new Error(`--${option.name} requires a number`);
|
|
127
|
+
}
|
|
128
|
+
parsed = Number(value);
|
|
129
|
+
}
|
|
130
|
+
else if (configField.type === 'json') {
|
|
131
|
+
if (typeof value !== 'string')
|
|
132
|
+
throw new Error(`--${option.name} requires JSON`);
|
|
133
|
+
try {
|
|
134
|
+
parsed = JSON.parse(value);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
throw new Error(`--${option.name} must be valid JSON: ${errorMessage(error)}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
if (typeof value !== 'string')
|
|
142
|
+
throw new Error(`--${option.name} requires a value`);
|
|
143
|
+
parsed = value;
|
|
144
|
+
}
|
|
145
|
+
validateFieldValue(definition, field, configField, parsed, `--${option.name}`);
|
|
146
|
+
return cloneExtensionConfigValue(parsed);
|
|
147
|
+
}
|
|
148
|
+
export function validateExtensionConfigValue(definition, field, value, source) {
|
|
149
|
+
const configField = definition.fields[field];
|
|
150
|
+
if (!configField)
|
|
151
|
+
throw new Error(`${source} refers to unknown field: ${definition.id}.${field}`);
|
|
152
|
+
validateFieldValue(definition, field, configField, value, source);
|
|
153
|
+
return cloneExtensionConfigValue(value);
|
|
154
|
+
}
|
|
155
|
+
function createField(type, options, values) {
|
|
156
|
+
return Object.freeze({
|
|
157
|
+
type,
|
|
158
|
+
...options,
|
|
159
|
+
...(values === undefined ? {} : { values: Object.freeze([...values]) }),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
function validateDefinition(definition) {
|
|
163
|
+
if (!/^[a-z][a-zA-Z0-9-]*$/u.test(definition.id)) {
|
|
164
|
+
throw new Error(`Invalid extension configuration id: ${definition.id}`);
|
|
165
|
+
}
|
|
166
|
+
if (definition.title.trim().length === 0) {
|
|
167
|
+
throw new Error(`Extension configuration ${definition.id} must have a title`);
|
|
168
|
+
}
|
|
169
|
+
const names = Object.keys(definition.fields);
|
|
170
|
+
if (names.length === 0)
|
|
171
|
+
throw new Error(`Extension configuration ${definition.id} must define fields`);
|
|
172
|
+
for (const [name, field] of Object.entries(definition.fields)) {
|
|
173
|
+
if (!/^[a-z][a-zA-Z0-9]*$/u.test(name)) {
|
|
174
|
+
throw new Error(`Invalid extension configuration field: ${definition.id}.${name}`);
|
|
175
|
+
}
|
|
176
|
+
if (field.description.trim().length === 0) {
|
|
177
|
+
throw new Error(`Extension configuration field ${definition.id}.${name} must have a description`);
|
|
178
|
+
}
|
|
179
|
+
if (field.values && field.values.length === 0) {
|
|
180
|
+
throw new Error(`Extension configuration field ${definition.id}.${name} must not have empty values`);
|
|
181
|
+
}
|
|
182
|
+
validateFieldValue(definition, name, field, field.default, `default for ${definition.id}.${name}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function definitionMap(definitions) {
|
|
186
|
+
const result = new Map();
|
|
187
|
+
for (const definition of definitions) {
|
|
188
|
+
validateDefinition(definition);
|
|
189
|
+
if (result.has(definition.id))
|
|
190
|
+
throw new Error(`Duplicate extension configuration id: ${definition.id}`);
|
|
191
|
+
result.set(definition.id, definition);
|
|
192
|
+
}
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
function validateFieldValue(definition, name, field, value, source) {
|
|
196
|
+
if (field.type === 'json') {
|
|
197
|
+
const issue = jsonValueIssue(value);
|
|
198
|
+
if (issue)
|
|
199
|
+
throw new Error(`${source} must be valid JSON: ${issue}`);
|
|
200
|
+
}
|
|
201
|
+
else if (typeof value !== field.type || (field.type === 'number' && !Number.isFinite(value))) {
|
|
202
|
+
throw new Error(`${source} must be a ${field.type}`);
|
|
203
|
+
}
|
|
204
|
+
if (field.values && !field.values.includes(value)) {
|
|
205
|
+
throw new Error(`${source} must be one of: ${field.values.join(', ')}`);
|
|
206
|
+
}
|
|
207
|
+
const validation = field.validate?.(value);
|
|
208
|
+
if (validation)
|
|
209
|
+
throw new Error(`${source} ${validation}`);
|
|
210
|
+
if (!Object.hasOwn(definition.fields, name)) {
|
|
211
|
+
throw new Error(`${source} refers to unknown field: ${definition.id}.${name}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function cloneExtensionConfigValue(value) {
|
|
215
|
+
if (value === null || typeof value === 'boolean' || typeof value === 'string')
|
|
216
|
+
return value;
|
|
217
|
+
if (typeof value === 'number')
|
|
218
|
+
return value;
|
|
219
|
+
if (Array.isArray(value)) {
|
|
220
|
+
return Object.freeze(value.map((item) => cloneExtensionConfigValue(item)));
|
|
221
|
+
}
|
|
222
|
+
return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, item]) => [
|
|
223
|
+
key,
|
|
224
|
+
cloneExtensionConfigValue(item),
|
|
225
|
+
])));
|
|
226
|
+
}
|
|
227
|
+
function jsonValueIssue(value) {
|
|
228
|
+
return inspectJsonValue(value, '$', new WeakSet(), 0);
|
|
229
|
+
}
|
|
230
|
+
function inspectJsonValue(value, path, ancestors, depth) {
|
|
231
|
+
if (depth > 100)
|
|
232
|
+
return `${path} exceeds the maximum nesting depth of 100`;
|
|
233
|
+
if (value === null || typeof value === 'boolean' || typeof value === 'string')
|
|
234
|
+
return undefined;
|
|
235
|
+
if (typeof value === 'number')
|
|
236
|
+
return Number.isFinite(value) ? undefined : `${path} is not a finite number`;
|
|
237
|
+
if (typeof value !== 'object')
|
|
238
|
+
return `${path} contains ${typeof value}`;
|
|
239
|
+
if (ancestors.has(value))
|
|
240
|
+
return `${path} contains a circular reference`;
|
|
241
|
+
ancestors.add(value);
|
|
242
|
+
try {
|
|
243
|
+
if (Array.isArray(value)) {
|
|
244
|
+
if (Object.keys(value).length !== value.length)
|
|
245
|
+
return `${path} must be a dense JSON array`;
|
|
246
|
+
if (Object.getOwnPropertySymbols(value).length > 0)
|
|
247
|
+
return `${path} contains symbol properties`;
|
|
248
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
249
|
+
if (!Object.hasOwn(value, index))
|
|
250
|
+
return `${path} must be a dense JSON array`;
|
|
251
|
+
const issue = inspectJsonValue(value[index], `${path}[${index}]`, ancestors, depth + 1);
|
|
252
|
+
if (issue)
|
|
253
|
+
return issue;
|
|
254
|
+
}
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
const prototype = Object.getPrototypeOf(value);
|
|
258
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
259
|
+
return `${path} must be a plain object`;
|
|
260
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
261
|
+
if (typeof key !== 'string')
|
|
262
|
+
return `${path} contains symbol properties`;
|
|
263
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
264
|
+
if (!descriptor?.enumerable || !('value' in descriptor)) {
|
|
265
|
+
return `${path}.${key} must be an enumerable data property`;
|
|
266
|
+
}
|
|
267
|
+
const issue = inspectJsonValue(descriptor.value, `${path}.${key}`, ancestors, depth + 1);
|
|
268
|
+
if (issue)
|
|
269
|
+
return issue;
|
|
270
|
+
}
|
|
271
|
+
return undefined;
|
|
272
|
+
}
|
|
273
|
+
finally {
|
|
274
|
+
ancestors.delete(value);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function errorMessage(error) {
|
|
278
|
+
return error instanceof Error ? error.message : String(error);
|
|
279
|
+
}
|
|
280
|
+
function toKebabCase(value) {
|
|
281
|
+
return value
|
|
282
|
+
.replace(/([a-z0-9])([A-Z])/gu, '$1-$2')
|
|
283
|
+
.replace(/_/gu, '-')
|
|
284
|
+
.toLowerCase();
|
|
285
|
+
}
|
|
286
|
+
function isRecord(value) {
|
|
287
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=extension-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-config.js","sourceRoot":"","sources":["../src/extension-config.ts"],"names":[],"mappings":"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"}
|
package/dist/extensions.d.ts
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
import type { ExtensionAPI, InlineExtension } from '@earendil-works/pi-coding-agent';
|
|
2
2
|
import type { AgentRuntime } from './runtime.js';
|
|
3
|
+
import type { ModelSelectionPersistenceScope } from './model-selection.js';
|
|
3
4
|
import { type FelanCapability } from './capabilities.js';
|
|
4
|
-
|
|
5
|
+
import { type ExtensionConfigDefinition, type ExtensionConfigOverride, type ExtensionConfigValue } from './extension-config.js';
|
|
6
|
+
export interface FelanModelSelectionOptions {
|
|
7
|
+
readonly updateDefault?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface FelanExtensionAPI extends Omit<ExtensionAPI, 'getFlag' | 'registerFlag'> {
|
|
5
10
|
readonly agentDir: string;
|
|
6
11
|
readonly runtime: AgentRuntime;
|
|
12
|
+
readonly config: Readonly<Record<string, ExtensionConfigValue>>;
|
|
7
13
|
registerCapability(capability: FelanCapability): void;
|
|
14
|
+
setModel(model: Parameters<ExtensionAPI['setModel']>[0], options?: FelanModelSelectionOptions): ReturnType<ExtensionAPI['setModel']>;
|
|
15
|
+
setThinkingLevel(level: Parameters<ExtensionAPI['setThinkingLevel']>[0], options?: FelanModelSelectionOptions): ReturnType<ExtensionAPI['setThinkingLevel']>;
|
|
8
16
|
}
|
|
9
17
|
export type FelanExtension = (pi: FelanExtensionAPI) => void | Promise<void>;
|
|
18
|
+
export interface ConfiguredFelanExtension extends FelanExtension {
|
|
19
|
+
readonly configDefinition?: ExtensionConfigDefinition;
|
|
20
|
+
}
|
|
10
21
|
export type ExtensionPackageImporter = (packageName: string) => Promise<unknown>;
|
|
11
|
-
export declare function bindFelanExtension(packageName: string, extension: FelanExtension, runtime: AgentRuntime, agentDir?: string): InlineExtension;
|
|
12
|
-
export declare function loadFelanExtensions(packageNames: readonly string[], importExtension: ExtensionPackageImporter, runtime: AgentRuntime, agentDir?: string): Promise<InlineExtension[]>;
|
|
22
|
+
export declare function bindFelanExtension(packageName: string, extension: FelanExtension, runtime: AgentRuntime, agentDir?: string, config?: Readonly<Record<string, ExtensionConfigValue>>): InlineExtension;
|
|
23
|
+
export declare function loadFelanExtensions(packageNames: readonly string[], importExtension: ExtensionPackageImporter, runtime: AgentRuntime, agentDir?: string, configOverrides?: readonly ExtensionConfigOverride[]): Promise<InlineExtension[]>;
|
|
24
|
+
export declare function loadFelanSessionExtensions(packageNames: readonly string[], importExtension: ExtensionPackageImporter, runtime: AgentRuntime, agentDir: string, modelSelectionScope: ModelSelectionPersistenceScope, configOverrides?: readonly ExtensionConfigOverride[]): Promise<InlineExtension[]>;
|
|
13
25
|
//# 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,EAGL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;
|
|
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,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAC3E,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,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;CACvD;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,YAAY,EACrB,QAAQ,GAAE,MAAoB,EAC9B,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAM,GAC1D,eAAe,CAWjB;AAyCD,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,YAAY,EACrB,QAAQ,GAAE,MAAoB,EAC9B,eAAe,GAAE,SAAS,uBAAuB,EAAO,GACvD,OAAO,CAAC,eAAe,EAAE,CAAC,CAS5B;AAED,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,EAChB,mBAAmB,EAAE,8BAA8B,EACnD,eAAe,GAAE,SAAS,uBAAuB,EAAO,GACvD,OAAO,CAAC,eAAe,EAAE,CAAC,CAS5B"}
|
package/dist/extensions.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { associateCapabilityCollector, CapabilityCollector, } from './capabilities.js';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { getExtensionConfigDefinition, resolveExtensionConfigs, } from './extension-config.js';
|
|
3
|
+
export function bindFelanExtension(packageName, extension, runtime, agentDir = runtime.cwd, config = {}) {
|
|
4
|
+
return bindFelanExtensionWithCapabilities(packageName, extension, runtime, agentDir, new CapabilityCollector(), true, undefined, config);
|
|
4
5
|
}
|
|
5
|
-
function bindFelanExtensionWithCapabilities(packageName, extension, runtime, agentDir, capabilityCollector, resetCapabilities) {
|
|
6
|
+
function bindFelanExtensionWithCapabilities(packageName, extension, runtime, agentDir, capabilityCollector, resetCapabilities, modelSelectionScope, config) {
|
|
6
7
|
const inline = {
|
|
7
8
|
name: packageName,
|
|
8
9
|
factory: async (pi) => {
|
|
@@ -16,7 +17,7 @@ function bindFelanExtensionWithCapabilities(packageName, extension, runtime, age
|
|
|
16
17
|
capabilityCollector.register(packageName, capability);
|
|
17
18
|
};
|
|
18
19
|
try {
|
|
19
|
-
await extension(createFelanExtensionAPI(pi, runtime, agentDir, registerCapability));
|
|
20
|
+
await extension(createFelanExtensionAPI(pi, runtime, agentDir, registerCapability, modelSelectionScope, config));
|
|
20
21
|
}
|
|
21
22
|
finally {
|
|
22
23
|
initializing = false;
|
|
@@ -26,7 +27,13 @@ function bindFelanExtensionWithCapabilities(packageName, extension, runtime, age
|
|
|
26
27
|
associateCapabilityCollector(inline, capabilityCollector);
|
|
27
28
|
return inline;
|
|
28
29
|
}
|
|
29
|
-
export async function loadFelanExtensions(packageNames, importExtension, runtime, agentDir = runtime.cwd) {
|
|
30
|
+
export async function loadFelanExtensions(packageNames, importExtension, runtime, agentDir = runtime.cwd, configOverrides = []) {
|
|
31
|
+
return loadFelanExtensionsWithScope(packageNames, importExtension, runtime, agentDir, undefined, configOverrides);
|
|
32
|
+
}
|
|
33
|
+
export async function loadFelanSessionExtensions(packageNames, importExtension, runtime, agentDir, modelSelectionScope, configOverrides = []) {
|
|
34
|
+
return loadFelanExtensionsWithScope(packageNames, importExtension, runtime, agentDir, modelSelectionScope, configOverrides);
|
|
35
|
+
}
|
|
36
|
+
async function loadFelanExtensionsWithScope(packageNames, importExtension, runtime, agentDir, modelSelectionScope, configOverrides) {
|
|
30
37
|
const seen = new Set();
|
|
31
38
|
const extensions = [];
|
|
32
39
|
const capabilityCollector = new CapabilityCollector();
|
|
@@ -56,11 +63,16 @@ export async function loadFelanExtensions(packageNames, importExtension, runtime
|
|
|
56
63
|
if (typeof defaultExport !== 'function') {
|
|
57
64
|
throw new Error(`${packageName} must default-export a Felan extension`);
|
|
58
65
|
}
|
|
59
|
-
|
|
66
|
+
const configuredExtension = defaultExport;
|
|
67
|
+
const definition = getExtensionConfigDefinition(configuredExtension);
|
|
68
|
+
const config = definition === undefined
|
|
69
|
+
? {}
|
|
70
|
+
: 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));
|
|
60
72
|
}
|
|
61
73
|
return extensions;
|
|
62
74
|
}
|
|
63
|
-
function createFelanExtensionAPI(pi, runtime, agentDir, registerCapability) {
|
|
75
|
+
function createFelanExtensionAPI(pi, runtime, agentDir, registerCapability, modelSelectionScope, config) {
|
|
64
76
|
const boundMethods = new Map();
|
|
65
77
|
return new Proxy(pi, {
|
|
66
78
|
get(target, property) {
|
|
@@ -68,12 +80,46 @@ function createFelanExtensionAPI(pi, runtime, agentDir, registerCapability) {
|
|
|
68
80
|
return agentDir;
|
|
69
81
|
if (property === 'runtime')
|
|
70
82
|
return runtime;
|
|
83
|
+
if (property === 'config')
|
|
84
|
+
return config;
|
|
71
85
|
if (property === 'registerCapability') {
|
|
72
86
|
return registerCapability;
|
|
73
87
|
}
|
|
74
88
|
if (property === 'exec') {
|
|
75
89
|
return (command, args, options) => runtime.exec(command, args, options);
|
|
76
90
|
}
|
|
91
|
+
if (property === 'setModel') {
|
|
92
|
+
if (!boundMethods.has(property)) {
|
|
93
|
+
const setModel = target.setModel.bind(target);
|
|
94
|
+
boundMethods.set(property, (model, options) => {
|
|
95
|
+
const updateDefault = options?.updateDefault !== false;
|
|
96
|
+
if (!modelSelectionScope) {
|
|
97
|
+
if (!updateDefault) {
|
|
98
|
+
return Promise.reject(new Error('Session-only model selection requires Agent Core session composition'));
|
|
99
|
+
}
|
|
100
|
+
return setModel(model);
|
|
101
|
+
}
|
|
102
|
+
return modelSelectionScope.run(updateDefault, () => setModel(model));
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return boundMethods.get(property);
|
|
106
|
+
}
|
|
107
|
+
if (property === 'setThinkingLevel') {
|
|
108
|
+
if (!boundMethods.has(property)) {
|
|
109
|
+
const setThinkingLevel = target.setThinkingLevel.bind(target);
|
|
110
|
+
boundMethods.set(property, (level, options) => {
|
|
111
|
+
const updateDefault = options?.updateDefault !== false;
|
|
112
|
+
if (!modelSelectionScope) {
|
|
113
|
+
if (!updateDefault) {
|
|
114
|
+
throw new Error('Session-only thinking selection requires Agent Core session composition');
|
|
115
|
+
}
|
|
116
|
+
return setThinkingLevel(level);
|
|
117
|
+
}
|
|
118
|
+
return modelSelectionScope.run(updateDefault, () => setThinkingLevel(level));
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return boundMethods.get(property);
|
|
122
|
+
}
|
|
77
123
|
const value = Reflect.get(target, property, target);
|
|
78
124
|
if (typeof value !== 'function')
|
|
79
125
|
return value;
|
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":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,10 +7,12 @@ export type { FelanThinkingLevel } from './thinking.js';
|
|
|
7
7
|
export { HostAgentRuntime } from './host-agent-runtime.js';
|
|
8
8
|
export type { HostAgentRuntimeOptions, HostShellOptions } from './host-agent-runtime.js';
|
|
9
9
|
export { bindFelanExtension, loadFelanExtensions, } from './extensions.js';
|
|
10
|
+
export { associateExtensionConfig, configField, configureExtension, defineExtensionConfig, extensionConfigOverridesFromObject, getExtensionConfigCliOptions, getExtensionConfigDefinition, parseExtensionConfigCliValue, resolveExtensionConfigs, validateExtensionConfigValue, } from './extension-config.js';
|
|
11
|
+
export type { ExtensionConfigCliOption, ExtensionConfigDefinition, ExtensionConfigField, ExtensionConfigFieldOptions, ExtensionConfigFields, ExtensionConfigOverride, ExtensionConfigPrimitive, ExtensionConfigValue, ExtensionConfigJsonObject, ExtensionConfigJsonArray, InferExtensionConfig, } from './extension-config.js';
|
|
10
12
|
export { formatCapabilitiesSection } from './capabilities.js';
|
|
11
13
|
export type { FelanCapability, RegisteredFelanCapability } from './capabilities.js';
|
|
12
14
|
export { FELAN_BASE_SYSTEM_PROMPT } from './system-prompt.js';
|
|
13
|
-
export type { ExtensionPackageImporter, FelanExtension, FelanExtensionAPI, } from './extensions.js';
|
|
15
|
+
export type { ExtensionPackageImporter, FelanExtension, FelanExtensionAPI, FelanModelSelectionOptions, } from './extensions.js';
|
|
14
16
|
export { createAgentCoreResourceLoader } from './resource-loader.js';
|
|
15
17
|
export type { CreateAgentCoreResourceLoaderOptions } from './resource-loader.js';
|
|
16
18
|
export { createRuntimeCodingTools } from './tools.js';
|
|
@@ -19,7 +21,7 @@ export { createAgentCoreSession, createAgentCoreSessionRuntime, createAgentCoreS
|
|
|
19
21
|
export type { AgentCoreSessionRuntimeFactoryOptions, AgentCoreSessionRuntimeFactoryRequest, AgentCoreSessionRuntimeOptionsFactory, CreateAgentCoreSessionOptions, StreamFunction, } from './session.js';
|
|
20
22
|
export { AgentSession, CURRENT_SESSION_VERSION, DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager, createAgentSessionRuntime, defineTool, getAgentDir, loadSkillsFromDir, resizeImage, withFileMutationQueue, } from '@earendil-works/pi-coding-agent';
|
|
21
23
|
export type { AgentSessionEvent, AgentSessionEventListener, AgentSessionRuntimeDiagnostic, AgentSessionServices, CreateAgentSessionOptions, CreateAgentSessionResult, CreateAgentSessionRuntimeFactory, CreateAgentSessionRuntimeResult, Extension, ExtensionAPI, ExtensionContext, ExtensionFactory, InlineExtension, LoadExtensionsResult, ResourceDiagnostic, ResourceLoader, ResizedImage, SessionContext, SessionStartEvent, Skill, ToolDefinition, } from '@earendil-works/pi-coding-agent';
|
|
22
|
-
export { InMemoryCredentialStore, StringEnum, createAssistantMessageEventStream, getSupportedThinkingLevels, isContextOverflow, lazyStream, uuidv7, } from '@earendil-works/pi-ai';
|
|
24
|
+
export { InMemoryCredentialStore, StringEnum, clampThinkingLevel, createAssistantMessageEventStream, getSupportedThinkingLevels, isContextOverflow, lazyStream, uuidv7, } from '@earendil-works/pi-ai';
|
|
23
25
|
export type { Api, AssistantMessage, AssistantMessageEvent, AssistantMessageEventStream, Context, Credential, CredentialInfo, CredentialStore, Model, Provider, SimpleStreamOptions, Transport, } from '@earendil-works/pi-ai';
|
|
24
26
|
export { builtinProviders } from '@earendil-works/pi-ai/providers/all';
|
|
25
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,+BAA+B,EAC/B,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,WAAW,EACX,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,12 +3,13 @@ export { MODEL_TIERS, formatModelReference, getModelFamily, getModelStrength, is
|
|
|
3
3
|
export { FELAN_THINKING_LEVELS, isFelanThinkingLevel } from './thinking.js';
|
|
4
4
|
export { HostAgentRuntime } from './host-agent-runtime.js';
|
|
5
5
|
export { bindFelanExtension, loadFelanExtensions, } from './extensions.js';
|
|
6
|
+
export { associateExtensionConfig, configField, configureExtension, defineExtensionConfig, extensionConfigOverridesFromObject, getExtensionConfigCliOptions, getExtensionConfigDefinition, parseExtensionConfigCliValue, resolveExtensionConfigs, validateExtensionConfigValue, } from './extension-config.js';
|
|
6
7
|
export { formatCapabilitiesSection } from './capabilities.js';
|
|
7
8
|
export { FELAN_BASE_SYSTEM_PROMPT } from './system-prompt.js';
|
|
8
9
|
export { createAgentCoreResourceLoader } from './resource-loader.js';
|
|
9
10
|
export { createRuntimeCodingTools } from './tools.js';
|
|
10
11
|
export { createAgentCoreSession, createAgentCoreSessionRuntime, createAgentCoreSessionRuntimeFactory, } from './session.js';
|
|
11
12
|
export { AgentSession, CURRENT_SESSION_VERSION, DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager, createAgentSessionRuntime, defineTool, getAgentDir, loadSkillsFromDir, resizeImage, withFileMutationQueue, } from '@earendil-works/pi-coding-agent';
|
|
12
|
-
export { InMemoryCredentialStore, StringEnum, createAssistantMessageEventStream, getSupportedThinkingLevels, isContextOverflow, lazyStream, uuidv7, } from '@earendil-works/pi-ai';
|
|
13
|
+
export { InMemoryCredentialStore, StringEnum, clampThinkingLevel, createAssistantMessageEventStream, getSupportedThinkingLevels, isContextOverflow, lazyStream, uuidv7, } from '@earendil-works/pi-ai';
|
|
13
14
|
export { builtinProviders } from '@earendil-works/pi-ai/providers/all';
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,kCAAkC,EAClC,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAc/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAO9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,cAAc,CAAC;AAQtB,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AAwBzC,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,kBAAkB,EAClB,iCAAiC,EACjC,0BAA0B,EAC1B,iBAAiB,EACjB,UAAU,EACV,MAAM,GACP,MAAM,uBAAuB,CAAC;AAe/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SettingsManager } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
export interface ModelSelectionPersistenceScope {
|
|
3
|
+
run<T>(updateDefault: boolean, operation: () => T): T;
|
|
4
|
+
}
|
|
5
|
+
export declare function installModelSelectionPersistenceScope(settingsManager: SettingsManager): ModelSelectionPersistenceScope;
|
|
6
|
+
//# sourceMappingURL=model-selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-selection.d.ts","sourceRoot":"","sources":["../src/model-selection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CACvD;AAID,wBAAgB,qCAAqC,CACnD,eAAe,EAAE,eAAe,GAC/B,8BAA8B,CAwBhC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
const installedScopes = new WeakMap();
|
|
3
|
+
export function installModelSelectionPersistenceScope(settingsManager) {
|
|
4
|
+
const installed = installedScopes.get(settingsManager);
|
|
5
|
+
if (installed)
|
|
6
|
+
return installed;
|
|
7
|
+
const updateDefaultScope = new AsyncLocalStorage();
|
|
8
|
+
const setDefaultModelAndProvider = settingsManager.setDefaultModelAndProvider.bind(settingsManager);
|
|
9
|
+
const setDefaultThinkingLevel = settingsManager.setDefaultThinkingLevel.bind(settingsManager);
|
|
10
|
+
settingsManager.setDefaultModelAndProvider = (provider, modelId) => {
|
|
11
|
+
if (updateDefaultScope.getStore() !== false) {
|
|
12
|
+
setDefaultModelAndProvider(provider, modelId);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
settingsManager.setDefaultThinkingLevel = (level) => {
|
|
16
|
+
if (updateDefaultScope.getStore() !== false) {
|
|
17
|
+
setDefaultThinkingLevel(level);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const scope = {
|
|
21
|
+
run: (updateDefault, operation) => updateDefaultScope.run(updateDefault, operation),
|
|
22
|
+
};
|
|
23
|
+
installedScopes.set(settingsManager, scope);
|
|
24
|
+
return scope;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=model-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-selection.js","sourceRoot":"","sources":["../src/model-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrD,MAAM,eAAe,GAAG,IAAI,OAAO,EAAmD,CAAC;AAEvF,MAAM,UAAU,qCAAqC,CACnD,eAAgC;IAEhC,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACvD,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAW,CAAC;IAC5D,MAAM,0BAA0B,GAAG,eAAe,CAAC,0BAA0B,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpG,MAAM,uBAAuB,GAAG,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE9F,eAAe,CAAC,0BAA0B,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QACjE,IAAI,kBAAkB,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE,CAAC;YAC5C,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC;IACF,eAAe,CAAC,uBAAuB,GAAG,CAAC,KAAK,EAAE,EAAE;QAClD,IAAI,kBAAkB,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE,CAAC;YAC5C,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAmC;QAC5C,GAAG,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC;KACpF,CAAC;IACF,eAAe,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -4,7 +4,6 @@ export interface CreateAgentCoreResourceLoaderOptions {
|
|
|
4
4
|
readonly cwd: string;
|
|
5
5
|
readonly agentDir: string;
|
|
6
6
|
readonly extensionFactories: readonly InlineExtension[];
|
|
7
|
-
readonly extensionFlagValues?: ReadonlyMap<string, boolean | string>;
|
|
8
7
|
readonly skillPaths?: readonly string[];
|
|
9
8
|
readonly skills?: readonly Skill[];
|
|
10
9
|
readonly appendSystemPrompt?: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-loader.d.ts","sourceRoot":"","sources":["../src/resource-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,yBAAyB,uCAAuC,CAAC;AAG9E,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,eAAe,EAAE,CAAC;IACxD,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"resource-loader.d.ts","sourceRoot":"","sources":["../src/resource-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,yBAAyB,uCAAuC,CAAC;AAG9E,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,eAAe,EAAE,CAAC;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED,UAAU,4CAA6C,SAAQ,oCAAoC;IACjG,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,EAAE,CAAC;CACL;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,cAAc,CAAC,CAEzB;AAED,wBAAsB,6CAA6C,CACjE,OAAO,EAAE,4CAA4C,GACpD,OAAO,CAAC,cAAc,CAAC,CAyDzB"}
|
package/dist/resource-loader.js
CHANGED
|
@@ -58,27 +58,6 @@ export async function createAgentCoreResourceLoaderWithContextFiles(options) {
|
|
|
58
58
|
const first = extensionsResult.errors[0];
|
|
59
59
|
throw new Error(`${first.path}: ${first.error}`);
|
|
60
60
|
}
|
|
61
|
-
applyExtensionFlagValues(loader, options.extensionFlagValues);
|
|
62
61
|
return loader;
|
|
63
62
|
}
|
|
64
|
-
function applyExtensionFlagValues(loader, values) {
|
|
65
|
-
if (!values)
|
|
66
|
-
return;
|
|
67
|
-
const extensionsResult = loader.getExtensions();
|
|
68
|
-
const registeredFlags = new Map();
|
|
69
|
-
for (const extension of extensionsResult.extensions) {
|
|
70
|
-
for (const [name, flag] of extension.flags) {
|
|
71
|
-
registeredFlags.set(name, flag.type);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
for (const [name, value] of values) {
|
|
75
|
-
const type = registeredFlags.get(name);
|
|
76
|
-
if (!type)
|
|
77
|
-
throw new Error(`Unknown extension flag: ${name}`);
|
|
78
|
-
if (type !== typeof value) {
|
|
79
|
-
throw new Error(`Extension flag ${name} requires a ${type} value`);
|
|
80
|
-
}
|
|
81
|
-
extensionsResult.runtime.flagValues.set(name, value);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
63
|
//# sourceMappingURL=resource-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../src/resource-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,eAAe,GAIhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,CAAC,MAAM,yBAAyB,GAAG,oCAAoC,CAAC;AAC9E,MAAM,yBAAyB,GAAG,WAAW,yBAAyB,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../src/resource-loader.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { type AgentSession, type CreateAgentSessionOptions, type CreateAgentSessionResult, type CreateAgentSessionRuntimeFactory, type CreateAgentSessionRuntimeResult, type InlineExtension, type ModelRuntime, type SessionManager, type SessionStartEvent, type SettingsManager, type Skill, type ToolDefinition } from '@earendil-works/pi-coding-agent';
|
|
2
2
|
import { type ExtensionPackageImporter } from './extensions.js';
|
|
3
3
|
import type { AgentRuntime } from './runtime.js';
|
|
4
|
+
import type { ExtensionConfigOverride } from './extension-config.js';
|
|
4
5
|
export type StreamFunction = AgentSession['agent']['streamFunction'];
|
|
5
6
|
export interface CreateAgentCoreSessionOptions {
|
|
6
7
|
readonly runtime: AgentRuntime;
|
|
7
8
|
readonly wrapStreamFunction?: (original: StreamFunction) => StreamFunction;
|
|
8
9
|
readonly extensionPackages: readonly string[];
|
|
9
10
|
readonly importExtension: ExtensionPackageImporter;
|
|
10
|
-
readonly
|
|
11
|
+
readonly extensionConfigOverrides?: readonly ExtensionConfigOverride[];
|
|
11
12
|
readonly modelRuntime: ModelRuntime;
|
|
12
13
|
readonly settingsManager: SettingsManager;
|
|
13
14
|
readonly sessionManager: SessionManager;
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,KAAK,EACV,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,KAAK,EACV,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAA8B,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAM5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAIrE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,cAAc,CAAC;IAC3E,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,wBAAwB,CAAC;IACnD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACvE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,yBAAyB,CAAC,cAAc,CAAC,CAAC;IAClE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,wBAAwB,CAAC,CAGnC;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,+BAA+B,CAAC,CAO1C;AAED,MAAM,MAAM,qCAAqC,GAAG,UAAU,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpG,MAAM,MAAM,qCAAqC,GAAG,IAAI,CACtD,6BAA6B,EAC7B,UAAU,GAAG,gBAAgB,GAAG,mBAAmB,CACpD,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG,CAClD,OAAO,EAAE,qCAAqC,KAC3C,qCAAqC,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAE5F,wBAAgB,oCAAoC,CAClD,aAAa,EAAE,qCAAqC,GACnD,gCAAgC,CASlC"}
|
package/dist/session.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createAgentSession, } from '@earendil-works/pi-coding-agent';
|
|
2
|
-
import {
|
|
2
|
+
import { loadFelanSessionExtensions } from './extensions.js';
|
|
3
|
+
import { installModelSelectionPersistenceScope } from './model-selection.js';
|
|
3
4
|
import { createAgentCoreResourceLoaderWithContextFiles, runtimeToolsExtensionName, } from './resource-loader.js';
|
|
4
5
|
import { createRuntimeCodingTools } from './tools.js';
|
|
5
6
|
const PROJECT_INSTRUCTION_FILENAMES = ['AGENTS.md', 'CLAUDE.md'];
|
|
@@ -28,7 +29,8 @@ export function createAgentCoreSessionRuntimeFactory(createOptions) {
|
|
|
28
29
|
}
|
|
29
30
|
async function composeAgentCoreSession(options) {
|
|
30
31
|
const agentDir = options.agentDir ?? options.runtime.cwd;
|
|
31
|
-
const
|
|
32
|
+
const modelSelectionScope = installModelSelectionPersistenceScope(options.settingsManager);
|
|
33
|
+
const featureExtensions = await loadFelanSessionExtensions(options.extensionPackages, options.importExtension, options.runtime, agentDir, modelSelectionScope, options.extensionConfigOverrides);
|
|
32
34
|
const extensionFactories = [
|
|
33
35
|
...featureExtensions,
|
|
34
36
|
...(options.inlineExtensions ?? []),
|
|
@@ -39,9 +41,6 @@ async function composeAgentCoreSession(options) {
|
|
|
39
41
|
cwd: options.runtime.cwd,
|
|
40
42
|
agentDir,
|
|
41
43
|
extensionFactories,
|
|
42
|
-
...(options.extensionFlagValues === undefined
|
|
43
|
-
? {}
|
|
44
|
-
: { extensionFlagValues: options.extensionFlagValues }),
|
|
45
44
|
...(options.skillPaths === undefined ? {} : { skillPaths: options.skillPaths }),
|
|
46
45
|
...(options.skills === undefined ? {} : { skills: options.skills }),
|
|
47
46
|
...(projectInstructions === undefined ? {} : { contextFiles: [projectInstructions] }),
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAcnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|