@framers/agentos 0.11.1 → 0.11.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"structuredOutputFormat.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/providers/structuredOutputFormat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAGnC;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AA6GD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoCzB"}
1
+ {"version":3,"file":"structuredOutputFormat.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/providers/structuredOutputFormat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAGnC;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AA+JD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoCzB"}
@@ -12,6 +12,60 @@ function sanitizeName(name) {
12
12
  return 'response';
13
13
  return name.replace(SCHEMA_NAME_INVALID_CHARS, '_').slice(0, SCHEMA_NAME_MAX_LEN);
14
14
  }
15
+ /** JSON with object keys sorted, so two schemas that differ only in key order compare equal. */
16
+ function stableStringify(value) {
17
+ if (Array.isArray(value)) {
18
+ return `[${value.map(stableStringify).join(',')}]`;
19
+ }
20
+ if (value && typeof value === 'object') {
21
+ const entries = Object.keys(value)
22
+ .sort()
23
+ .map((k) => `${JSON.stringify(k)}:${stableStringify(value[k])}`);
24
+ return `{${entries.join(',')}}`;
25
+ }
26
+ return JSON.stringify(value) ?? 'undefined';
27
+ }
28
+ /**
29
+ * Merges the schemas that the variants of a top-level union give one property.
30
+ * Enum schemas (a discriminant such as `kind`) become one enum of every value,
31
+ * keeping the fields they all share;
32
+ * otherwise identical schemas collapse to one, and different ones are kept side
33
+ * by side under a nested `anyOf`, which Anthropic accepts below the top level.
34
+ * Keeping only the first variant's schema would tell the model a later
35
+ * variant's value has the first variant's type, and the reply would then fail
36
+ * the caller's Zod schema.
37
+ */
38
+ function mergePropertySchemas(schemas) {
39
+ if (schemas.length === 1) {
40
+ return schemas[0];
41
+ }
42
+ if (schemas.every((s) => s && typeof s === 'object' && Array.isArray(s.enum))) {
43
+ const records = schemas;
44
+ // Fields every variant gives the same value (`type`, a shared `description`) stay.
45
+ const shared = {};
46
+ for (const [field, value] of Object.entries(records[0])) {
47
+ if (field === 'enum')
48
+ continue;
49
+ if (records.every((r) => field in r && stableStringify(r[field]) === stableStringify(value))) {
50
+ shared[field] = value;
51
+ }
52
+ }
53
+ return {
54
+ ...shared,
55
+ enum: Array.from(new Set(records.flatMap((r) => r.enum))),
56
+ };
57
+ }
58
+ const distinct = [];
59
+ const seen = new Set();
60
+ for (const schema of schemas) {
61
+ const key = stableStringify(schema);
62
+ if (!seen.has(key)) {
63
+ seen.add(key);
64
+ distinct.push(schema);
65
+ }
66
+ }
67
+ return distinct.length === 1 ? distinct[0] : { anyOf: distinct };
68
+ }
15
69
  /**
16
70
  * Adapt a lowered JSON Schema into a shape Anthropic's tool `input_schema`
17
71
  * accepts. The Anthropic Messages API requires the tool input_schema to be a
@@ -23,7 +77,8 @@ function sanitizeName(name) {
23
77
  *
24
78
  * 1. **Union of objects → one merged object.** Union the members' `properties`
25
79
  * (merging same-named `enum` members so a discriminant like `kind` becomes
26
- * the full set of variant values), and keep in `required` only the fields
80
+ * the full set of variant values, and keeping a shared property's differing
81
+ * schemas under a nested `anyOf`), and keep in `required` only the fields
27
82
  * required by EVERY member, so variant-specific fields stay optional. The
28
83
  * model returns one flat object; the caller's Zod schema re-validates the
29
84
  * exact variant, so strictness is preserved. Nested `anyOf` (inside a
@@ -47,28 +102,17 @@ function ensureAnthropicObjectSchema(jsonSchema) {
47
102
  if (variants &&
48
103
  variants.length > 0 &&
49
104
  variants.every((v) => v && typeof v === 'object' && v.type === 'object')) {
50
- const mergedProperties = {};
105
+ // Every variant's schema for each property, in the order properties first appear.
106
+ const propertySchemas = new Map();
51
107
  const requiredCounts = {};
52
108
  for (const variant of variants) {
53
109
  const props = variant.properties && typeof variant.properties === 'object'
54
110
  ? variant.properties
55
111
  : {};
56
112
  for (const [key, propSchema] of Object.entries(props)) {
57
- const existing = mergedProperties[key];
58
- const incoming = propSchema;
59
- if (existing &&
60
- Array.isArray(existing.enum) &&
61
- incoming &&
62
- Array.isArray(incoming.enum)) {
63
- // Same field is an enum across variants (e.g. the discriminant) —
64
- // union the allowed values so the model can satisfy any variant.
65
- mergedProperties[key] = {
66
- enum: Array.from(new Set([...existing.enum, ...incoming.enum])),
67
- };
68
- }
69
- else if (!(key in mergedProperties)) {
70
- mergedProperties[key] = propSchema;
71
- }
113
+ const schemas = propertySchemas.get(key) ?? [];
114
+ schemas.push(propSchema);
115
+ propertySchemas.set(key, schemas);
72
116
  }
73
117
  const variantRequired = Array.isArray(variant.required)
74
118
  ? variant.required
@@ -80,6 +124,10 @@ function ensureAnthropicObjectSchema(jsonSchema) {
80
124
  // A field is required in the merged object only when EVERY variant requires
81
125
  // it; variant-specific fields must stay optional.
82
126
  const required = Object.keys(requiredCounts).filter((field) => requiredCounts[field] === variants.length);
127
+ const mergedProperties = {};
128
+ for (const [key, schemas] of propertySchemas) {
129
+ mergedProperties[key] = mergePropertySchemas(schemas);
130
+ }
83
131
  return {
84
132
  type: 'object',
85
133
  properties: mergedProperties,
@@ -1 +1 @@
1
- {"version":3,"file":"structuredOutputFormat.js","sourceRoot":"","sources":["../../../../src/core/llm/providers/structuredOutputFormat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structuredOutputFormat.js","sourceRoot":"","sources":["../../../../src/core/llm/providers/structuredOutputFormat.ts"],"names":[],"mappings":"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"}
@@ -58,11 +58,25 @@ export declare class SpeechProviderResolver extends EventEmitter {
58
58
  private readonly config?;
59
59
  private readonly env;
60
60
  /**
61
- * Internal registry of all providers keyed by their unique string id.
62
- * Overwrites are allowed — re-registering with the same id replaces the
63
- * previous entry, which lets hot-reload and extension refresh work seamlessly.
61
+ * Internal registry of all providers, keyed by kind and id (`keyOf()`), so a
62
+ * speech-to-text and a text-to-speech provider can share an id. Overwrites
63
+ * are allowed — re-registering the same kind and id replaces the previous
64
+ * entry, which lets hot-reload and extension refresh work seamlessly.
64
65
  */
65
66
  private registrations;
67
+ /**
68
+ * The priority each provider was registered with. `refresh()` restores it
69
+ * before applying the preferred lists, so a provider that is no longer
70
+ * preferred loses its boost.
71
+ */
72
+ private basePriorities;
73
+ /**
74
+ * The providers the last `refresh(extensionManager)` read from the manager,
75
+ * by key, so the next one can drop those the manager no longer lists.
76
+ */
77
+ private discovered;
78
+ /** Map key of a registration: providers of different kinds may share an id. */
79
+ private static keyOf;
66
80
  /**
67
81
  * Creates a new SpeechProviderResolver.
68
82
  *
@@ -83,7 +97,10 @@ export declare class SpeechProviderResolver extends EventEmitter {
83
97
  */
84
98
  constructor(config?: SpeechResolverConfig | undefined, env?: Record<string, string | undefined>);
85
99
  /**
86
- * Register a provider, overwriting any existing registration with the same id.
100
+ * Register a provider, overwriting any existing registration with the same
101
+ * kind and id. Re-registering at the priority the resolver shows (a preferred
102
+ * boost included), as `register({ ...entry, provider })` does, keeps the
103
+ * priority the provider was first registered with.
87
104
  *
88
105
  * Emits a `provider_registered` event with `{ id, kind, source }` so that
89
106
  * listeners (e.g. UI dashboards, logging middleware) can track what's available.
@@ -213,17 +230,20 @@ export declare class SpeechProviderResolver extends EventEmitter {
213
230
  * optionally discovering extension providers, and applying user-configured
214
231
  * preferred priorities.
215
232
  *
216
- * The three-phase refresh sequence is:
217
- * 1. `registerCoreProviders()` — register all built-in providers from the
233
+ * The refresh sequence is:
234
+ * 1. `discoverExtensionProviders()` — if an ExtensionManager is provided, read
235
+ * the speech providers it lists as active, and drop the ones an earlier
236
+ * refresh read from it that it no longer lists.
237
+ * 2. `registerCoreProviders()` — register all built-in providers from the
218
238
  * static catalog, marking each as configured/unconfigured based on env vars.
219
- * 2. `discoverExtensionProviders()` — if an ExtensionManager is provided,
220
- * discover and register any additional speech providers from extensions.
221
- * 3. `applyPreferredPriorities()` — boost priority for providers listed in
239
+ * 3. Register the providers read in step 1, at priority 200.
240
+ * 4. `applyPreferredPriorities()` — boost priority for providers listed in
222
241
  * the user's `config.stt.preferred` / `config.tts.preferred` arrays.
223
242
  *
224
- * @param extensionManager - Optional object exposing `getDescriptorsByKind(kind)`.
225
- * Uses `any` type because the ExtensionManager interface is defined in the
226
- * extensions package and importing it here would create a circular dependency.
243
+ * @param extensionManager - Optional `ExtensionManager` (its speech provider
244
+ * registries are read through `getRegistry(kind).listActive()`), or any
245
+ * object exposing `getDescriptorsByKind(kind)`. Uses `any` type because
246
+ * importing the ExtensionManager type here would create a circular dependency.
227
247
  *
228
248
  * @example
229
249
  * ```ts
@@ -304,27 +324,43 @@ export declare class SpeechProviderResolver extends EventEmitter {
304
324
  */
305
325
  private registerCoreProviders;
306
326
  /**
307
- * Discover speech providers exposed by an ExtensionManager via
308
- * `getDescriptorsByKind()`.
327
+ * Read the speech providers an ExtensionManager lists as active, as
328
+ * registrations for `refresh()` to register.
309
329
  *
310
330
  * Extension providers are registered with `priority: 200` (lower than core's
311
331
  * 100) so they serve as fallbacks unless the user explicitly boosts them via
312
- * `config.stt.preferred` / `config.tts.preferred`.
332
+ * `config.stt.preferred` / `config.tts.preferred`. Each is registered under
333
+ * the provider's own `id` (the descriptor id when the provider has none), the
334
+ * id preferred lists and `SpeechRuntime` use, and counts as configured: the
335
+ * pack built the instance with its own options and secrets.
313
336
  *
314
337
  * The `extensionManager` parameter uses `any` because the ExtensionManager
315
338
  * type lives in the extensions package — importing it would create a circular
316
- * dependency. We only rely on the `getDescriptorsByKind` method signature.
339
+ * dependency. An `ExtensionManager` is read through
340
+ * `getRegistry(kind).listActive()`; another object can expose
341
+ * `getDescriptorsByKind(kind)` instead.
317
342
  *
318
- * @param extensionManager - Object exposing `getDescriptorsByKind(kind)` that
319
- * returns an array of `{ id: string; payload: unknown }` descriptors.
343
+ * @param extensionManager - An `ExtensionManager`, or an object exposing
344
+ * `getDescriptorsByKind(kind)`; either returns `{ id: string; payload: unknown }`
345
+ * descriptors.
346
+ * @returns One registration per active descriptor that carries a provider.
320
347
  *
321
348
  * @example
322
349
  * ```ts
323
350
  * // Called internally by refresh():
324
- * this.discoverExtensionProviders(extensionManager);
351
+ * const discovered = this.discoverExtensionProviders(extensionManager);
325
352
  * ```
326
353
  */
327
354
  private discoverExtensionProviders;
355
+ /**
356
+ * Remove the providers an earlier `refresh(extensionManager)` read that the
357
+ * manager no longer lists as active (an unloaded pack or a deactivated
358
+ * descriptor), so the resolve methods stop returning them. A registration
359
+ * that now holds a different provider is left alone.
360
+ *
361
+ * @param discovered - The registrations read from the manager this refresh.
362
+ */
363
+ private dropProvidersNoLongerDiscovered;
328
364
  /**
329
365
  * Boost priority for providers listed in `config.stt.preferred` /
330
366
  * `config.tts.preferred`.
@@ -1 +1 @@
1
- {"version":3,"file":"SpeechProviderResolver.d.ts","sourceRoot":"","sources":["../../../src/io/speech/SpeechProviderResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IA2BpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IA3BtB;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAA2C;IAEhE;;;;;;;;;;;;;;;;;OAiBG;gBAEgB,MAAM,CAAC,EAAE,oBAAoB,YAAA,EAC7B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe;IAKxE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI;IAKzC;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,EAAE;IAM/D;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,UAAU,CAAC,YAAY,CAAC,EAAE,oBAAoB,GAAG,oBAAoB;IAiBrE;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,UAAU,CAAC,YAAY,CAAC,EAAE,oBAAoB,GAAG,oBAAoB;IAgBrE;;;;;;;;;;;;;;;OAeG;IACH,UAAU,IAAI,iBAAiB;IAQ/B;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,IAAI,gBAAgB,GAAG,IAAI;IAS1C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,OAAO,CAAC,gBAAgB,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,aAAa;IA4BrB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,qBAAqB;IAsD7B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,0BAA0B;IA6ClC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,wBAAwB;CAcjC"}
1
+ {"version":3,"file":"SpeechProviderResolver.d.ts","sourceRoot":"","sources":["../../../src/io/speech/SpeechProviderResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IA8CpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IA9CtB;;;;;OAKG;IACH,OAAO,CAAC,aAAa,CAA2C;IAEhE;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAA6B;IAEnD;;;OAGG;IACH,OAAO,CAAC,UAAU,CAA8B;IAEhD,+EAA+E;IAC/E,OAAO,CAAC,MAAM,CAAC,KAAK;IAIpB;;;;;;;;;;;;;;;;;OAiBG;gBAEgB,MAAM,CAAC,EAAE,oBAAoB,YAAA,EAC7B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe;IAKxE;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,QAAQ,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI;IAYzC;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,EAAE;IAM/D;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,UAAU,CAAC,YAAY,CAAC,EAAE,oBAAoB,GAAG,oBAAoB;IAiBrE;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,UAAU,CAAC,YAAY,CAAC,EAAE,oBAAoB,GAAG,oBAAoB;IAgBrE;;;;;;;;;;;;;;;OAeG;IACH,UAAU,IAAI,iBAAiB;IAQ/B;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,IAAI,gBAAgB,GAAG,IAAI;IAS1C;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACG,OAAO,CAAC,gBAAgB,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,aAAa;IA4BrB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,qBAAqB;IAsD7B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,OAAO,CAAC,0BAA0B;IAoDlC;;;;;;;OAOG;IACH,OAAO,CAAC,+BAA+B;IAUvC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,wBAAwB;CAmBjC"}
@@ -56,6 +56,10 @@ import { findSpeechProviderCatalogEntry } from './providerCatalog.js';
56
56
  * ```
57
57
  */
58
58
  export class SpeechProviderResolver extends EventEmitter {
59
+ /** Map key of a registration: providers of different kinds may share an id. */
60
+ static keyOf(kind, id) {
61
+ return `${kind}:${id}`;
62
+ }
59
63
  /**
60
64
  * Creates a new SpeechProviderResolver.
61
65
  *
@@ -79,14 +83,29 @@ export class SpeechProviderResolver extends EventEmitter {
79
83
  this.config = config;
80
84
  this.env = env;
81
85
  /**
82
- * Internal registry of all providers keyed by their unique string id.
83
- * Overwrites are allowed — re-registering with the same id replaces the
84
- * previous entry, which lets hot-reload and extension refresh work seamlessly.
86
+ * Internal registry of all providers, keyed by kind and id (`keyOf()`), so a
87
+ * speech-to-text and a text-to-speech provider can share an id. Overwrites
88
+ * are allowed — re-registering the same kind and id replaces the previous
89
+ * entry, which lets hot-reload and extension refresh work seamlessly.
85
90
  */
86
91
  this.registrations = new Map();
92
+ /**
93
+ * The priority each provider was registered with. `refresh()` restores it
94
+ * before applying the preferred lists, so a provider that is no longer
95
+ * preferred loses its boost.
96
+ */
97
+ this.basePriorities = new Map();
98
+ /**
99
+ * The providers the last `refresh(extensionManager)` read from the manager,
100
+ * by key, so the next one can drop those the manager no longer lists.
101
+ */
102
+ this.discovered = new Map();
87
103
  }
88
104
  /**
89
- * Register a provider, overwriting any existing registration with the same id.
105
+ * Register a provider, overwriting any existing registration with the same
106
+ * kind and id. Re-registering at the priority the resolver shows (a preferred
107
+ * boost included), as `register({ ...entry, provider })` does, keeps the
108
+ * priority the provider was first registered with.
90
109
  *
91
110
  * Emits a `provider_registered` event with `{ id, kind, source }` so that
92
111
  * listeners (e.g. UI dashboards, logging middleware) can track what's available.
@@ -108,7 +127,13 @@ export class SpeechProviderResolver extends EventEmitter {
108
127
  * ```
109
128
  */
110
129
  register(reg) {
111
- this.registrations.set(reg.id, reg);
130
+ const key = SpeechProviderResolver.keyOf(reg.kind, reg.id);
131
+ const current = this.registrations.get(key);
132
+ const base = current && reg.priority === current.priority
133
+ ? (this.basePriorities.get(key) ?? reg.priority)
134
+ : reg.priority;
135
+ this.registrations.set(key, reg);
136
+ this.basePriorities.set(key, base);
112
137
  this.emit('provider_registered', { id: reg.id, kind: reg.kind, source: reg.source });
113
138
  }
114
139
  /**
@@ -256,17 +281,20 @@ export class SpeechProviderResolver extends EventEmitter {
256
281
  * optionally discovering extension providers, and applying user-configured
257
282
  * preferred priorities.
258
283
  *
259
- * The three-phase refresh sequence is:
260
- * 1. `registerCoreProviders()` — register all built-in providers from the
284
+ * The refresh sequence is:
285
+ * 1. `discoverExtensionProviders()` — if an ExtensionManager is provided, read
286
+ * the speech providers it lists as active, and drop the ones an earlier
287
+ * refresh read from it that it no longer lists.
288
+ * 2. `registerCoreProviders()` — register all built-in providers from the
261
289
  * static catalog, marking each as configured/unconfigured based on env vars.
262
- * 2. `discoverExtensionProviders()` — if an ExtensionManager is provided,
263
- * discover and register any additional speech providers from extensions.
264
- * 3. `applyPreferredPriorities()` — boost priority for providers listed in
290
+ * 3. Register the providers read in step 1, at priority 200.
291
+ * 4. `applyPreferredPriorities()` — boost priority for providers listed in
265
292
  * the user's `config.stt.preferred` / `config.tts.preferred` arrays.
266
293
  *
267
- * @param extensionManager - Optional object exposing `getDescriptorsByKind(kind)`.
268
- * Uses `any` type because the ExtensionManager interface is defined in the
269
- * extensions package and importing it here would create a circular dependency.
294
+ * @param extensionManager - Optional `ExtensionManager` (its speech provider
295
+ * registries are read through `getRegistry(kind).listActive()`), or any
296
+ * object exposing `getDescriptorsByKind(kind)`. Uses `any` type because
297
+ * importing the ExtensionManager type here would create a circular dependency.
270
298
  *
271
299
  * @example
272
300
  * ```ts
@@ -276,9 +304,15 @@ export class SpeechProviderResolver extends EventEmitter {
276
304
  * ```
277
305
  */
278
306
  async refresh(extensionManager) {
307
+ const discovered = extensionManager ? this.discoverExtensionProviders(extensionManager) : null;
308
+ if (discovered) {
309
+ this.dropProvidersNoLongerDiscovered(discovered);
310
+ }
279
311
  this.registerCoreProviders();
280
- if (extensionManager) {
281
- this.discoverExtensionProviders(extensionManager);
312
+ if (discovered) {
313
+ for (const reg of discovered)
314
+ this.register(reg);
315
+ this.discovered = new Map(discovered.map((reg) => [SpeechProviderResolver.keyOf(reg.kind, reg.id), reg.provider]));
282
316
  }
283
317
  this.applyPreferredPriorities();
284
318
  }
@@ -316,7 +350,7 @@ export class SpeechProviderResolver extends EventEmitter {
316
350
  if (requirements?.preferredIds?.length) {
317
351
  const results = [];
318
352
  for (const id of requirements.preferredIds) {
319
- const reg = this.registrations.get(id);
353
+ const reg = this.registrations.get(SpeechProviderResolver.keyOf(kind, id));
320
354
  if (reg &&
321
355
  reg.kind === kind &&
322
356
  reg.isConfigured &&
@@ -418,7 +452,7 @@ export class SpeechProviderResolver extends EventEmitter {
418
452
  ];
419
453
  for (const def of coreProviders) {
420
454
  // Keep an instance that SpeechRuntime or an extension registered under this id.
421
- if (this.registrations.get(def.id)?.provider)
455
+ if (this.registrations.get(SpeechProviderResolver.keyOf(def.kind, def.id))?.provider)
422
456
  continue;
423
457
  const catalogEntry = findSpeechProviderCatalogEntry(def.id);
424
458
  // Skip providers not found in the catalog (should not happen, but defensive)
@@ -442,24 +476,31 @@ export class SpeechProviderResolver extends EventEmitter {
442
476
  }
443
477
  }
444
478
  /**
445
- * Discover speech providers exposed by an ExtensionManager via
446
- * `getDescriptorsByKind()`.
479
+ * Read the speech providers an ExtensionManager lists as active, as
480
+ * registrations for `refresh()` to register.
447
481
  *
448
482
  * Extension providers are registered with `priority: 200` (lower than core's
449
483
  * 100) so they serve as fallbacks unless the user explicitly boosts them via
450
- * `config.stt.preferred` / `config.tts.preferred`.
484
+ * `config.stt.preferred` / `config.tts.preferred`. Each is registered under
485
+ * the provider's own `id` (the descriptor id when the provider has none), the
486
+ * id preferred lists and `SpeechRuntime` use, and counts as configured: the
487
+ * pack built the instance with its own options and secrets.
451
488
  *
452
489
  * The `extensionManager` parameter uses `any` because the ExtensionManager
453
490
  * type lives in the extensions package — importing it would create a circular
454
- * dependency. We only rely on the `getDescriptorsByKind` method signature.
491
+ * dependency. An `ExtensionManager` is read through
492
+ * `getRegistry(kind).listActive()`; another object can expose
493
+ * `getDescriptorsByKind(kind)` instead.
455
494
  *
456
- * @param extensionManager - Object exposing `getDescriptorsByKind(kind)` that
457
- * returns an array of `{ id: string; payload: unknown }` descriptors.
495
+ * @param extensionManager - An `ExtensionManager`, or an object exposing
496
+ * `getDescriptorsByKind(kind)`; either returns `{ id: string; payload: unknown }`
497
+ * descriptors.
498
+ * @returns One registration per active descriptor that carries a provider.
458
499
  *
459
500
  * @example
460
501
  * ```ts
461
502
  * // Called internally by refresh():
462
- * this.discoverExtensionProviders(extensionManager);
503
+ * const discovered = this.discoverExtensionProviders(extensionManager);
463
504
  * ```
464
505
  */
465
506
  discoverExtensionProviders(extensionManager) {
@@ -474,34 +515,58 @@ export class SpeechProviderResolver extends EventEmitter {
474
515
  'vad-provider': 'vad',
475
516
  'wake-word-provider': 'wake-word',
476
517
  };
518
+ const found = [];
477
519
  for (const descriptorKind of Object.keys(kindMap)) {
478
- const descriptors = extensionManager.getDescriptorsByKind?.(descriptorKind) ?? [];
520
+ const kind = kindMap[descriptorKind] ?? 'stt';
521
+ const descriptors = typeof extensionManager.getDescriptorsByKind === 'function'
522
+ ? (extensionManager.getDescriptorsByKind(descriptorKind) ?? [])
523
+ : typeof extensionManager.getRegistry === 'function'
524
+ ? (extensionManager.getRegistry(descriptorKind)?.listActive?.() ?? [])
525
+ : [];
479
526
  for (const desc of descriptors) {
480
- // Try to find a catalog entry for known extensions; fall back to a
481
- // synthetic entry for unknown/third-party extensions.
482
- const catalogEntry = findSpeechProviderCatalogEntry(desc.id);
483
- const isConfigured = catalogEntry
484
- ? catalogEntry.envVars.length === 0 ||
485
- catalogEntry.envVars.every((v) => Boolean(this.env[v]))
486
- : true; // Unknown extensions are assumed configured since we can't check
487
- this.register({
488
- id: desc.id,
489
- kind: kindMap[descriptorKind] ?? 'stt',
490
- provider: desc.payload,
527
+ const provider = desc?.payload;
528
+ if (!provider)
529
+ continue;
530
+ const id = typeof provider.id === 'string' && provider.id ? provider.id : desc.id;
531
+ // Known providers keep their catalog entry (capabilities); others get a
532
+ // synthetic one.
533
+ const catalogEntry = findSpeechProviderCatalogEntry(id);
534
+ found.push({
535
+ id,
536
+ kind,
537
+ provider,
491
538
  catalogEntry: catalogEntry ?? {
492
- id: desc.id,
493
- kind: kindMap[descriptorKind] ?? 'stt',
494
- label: desc.id,
539
+ id,
540
+ kind,
541
+ label: id,
495
542
  envVars: [],
496
543
  local: false,
497
544
  description: '',
498
545
  },
499
- isConfigured,
546
+ isConfigured: true,
500
547
  priority: 200, // Extensions rank below core by default
501
548
  source: 'extension',
502
549
  });
503
550
  }
504
551
  }
552
+ return found;
553
+ }
554
+ /**
555
+ * Remove the providers an earlier `refresh(extensionManager)` read that the
556
+ * manager no longer lists as active (an unloaded pack or a deactivated
557
+ * descriptor), so the resolve methods stop returning them. A registration
558
+ * that now holds a different provider is left alone.
559
+ *
560
+ * @param discovered - The registrations read from the manager this refresh.
561
+ */
562
+ dropProvidersNoLongerDiscovered(discovered) {
563
+ const current = new Set(discovered.map((reg) => SpeechProviderResolver.keyOf(reg.kind, reg.id)));
564
+ for (const [key, provider] of this.discovered) {
565
+ if (!current.has(key) && this.registrations.get(key)?.provider === provider) {
566
+ this.registrations.delete(key);
567
+ this.basePriorities.delete(key);
568
+ }
569
+ }
505
570
  }
506
571
  /**
507
572
  * Boost priority for providers listed in `config.stt.preferred` /
@@ -521,16 +586,21 @@ export class SpeechProviderResolver extends EventEmitter {
521
586
  * ```
522
587
  */
523
588
  applyPreferredPriorities() {
589
+ // Start from the registered priorities, so a provider dropped from a
590
+ // preferred list does not keep the boost an earlier refresh gave it.
591
+ for (const [key, reg] of this.registrations) {
592
+ reg.priority = this.basePriorities.get(key) ?? reg.priority;
593
+ }
524
594
  if (this.config?.stt?.preferred) {
525
595
  for (let i = 0; i < this.config.stt.preferred.length; i++) {
526
- const reg = this.registrations.get(this.config.stt.preferred[i]);
596
+ const reg = this.registrations.get(SpeechProviderResolver.keyOf('stt', this.config.stt.preferred[i]));
527
597
  if (reg)
528
598
  reg.priority = 50 + i;
529
599
  }
530
600
  }
531
601
  if (this.config?.tts?.preferred) {
532
602
  for (let i = 0; i < this.config.tts.preferred.length; i++) {
533
- const reg = this.registrations.get(this.config.tts.preferred[i]);
603
+ const reg = this.registrations.get(SpeechProviderResolver.keyOf('tts', this.config.tts.preferred[i]));
534
604
  if (reg)
535
605
  reg.priority = 50 + i;
536
606
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SpeechProviderResolver.js","sourceRoot":"","sources":["../../../src/io/speech/SpeechProviderResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpeechProviderResolver.js","sourceRoot":"","sources":["../../../src/io/speech/SpeechProviderResolver.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@framers/agentos",
3
- "version": "0.11.1",
3
+ "version": "0.11.3",
4
4
  "description": "AgentOS: open-source TypeScript framework for autonomous AI agents. Unified graph orchestration, cognitive memory, runtime tool forging, multi-tier guardrails, voice pipeline, and 11 LLM providers.",
5
5
  "homepage": "https://agentos.sh",
6
6
  "repository": {