@pellux/goodvibes-sdk 0.18.37 → 0.18.40

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.
@@ -42,10 +42,17 @@ export declare class ControlPlaneGateway {
42
42
  private readonly liveClients;
43
43
  private readonly websocketClients;
44
44
  private readonly recentMessages;
45
- private readonly recentEvents;
45
+ private readonly _recentEventsRing;
46
+ private _recentEventsHead;
47
+ private _recentEventsCount;
48
+ private readonly _recentEventsCapacity;
49
+ /** Back-compat accessor used by getSnapshot / listRecentEvents */
50
+ private get recentEvents();
46
51
  private requestCount;
47
52
  private errorCount;
48
53
  private lastRequestAt;
54
+ private _syncScheduled;
55
+ private _lastEventAt;
49
56
  constructor(config?: ControlPlaneGatewayConfig);
50
57
  attachRuntime(config: {
51
58
  readonly runtimeBus?: RuntimeEventBus | null;
@@ -88,6 +95,7 @@ export declare class ControlPlaneGateway {
88
95
  private replayRecentTraffic;
89
96
  createEventStream(request: Request, options?: ControlPlaneEventStreamOptions): Response;
90
97
  renderWebUi(authTokenHint?: string): Response;
98
+ private _scheduleControlPlaneSync;
91
99
  private rememberEvent;
92
100
  }
93
101
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/gateway.ts"],"names":[],"mappings":"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"}
@@ -51,11 +51,36 @@ export class ControlPlaneGateway {
51
51
  liveClients = new Map();
52
52
  websocketClients = new Map();
53
53
  recentMessages = [];
54
- recentEvents = [];
54
+ // Circular ring buffer for O(1) insert instead of O(n) unshift.
55
+ _recentEventsRing;
56
+ _recentEventsHead = 0;
57
+ _recentEventsCount = 0;
58
+ _recentEventsCapacity = 500;
59
+ /** Back-compat accessor used by getSnapshot / listRecentEvents */
60
+ get recentEvents() {
61
+ const out = [];
62
+ const count = this._recentEventsCount;
63
+ const cap = this._recentEventsCapacity;
64
+ for (let i = 0; i < count; i++) {
65
+ const idx = (this._recentEventsHead - 1 - i + cap) % cap;
66
+ const entry = this._recentEventsRing[idx];
67
+ if (entry) {
68
+ out.push(entry);
69
+ }
70
+ else if (process.env.NODE_ENV !== 'production') {
71
+ // Dev-only: undefined slot despite valid count — ring buffer accounting bug.
72
+ console.error('[ControlPlaneGateway] recentEvents: undefined slot at ring index', idx, { head: this._recentEventsHead, count: this._recentEventsCount, i });
73
+ }
74
+ }
75
+ return out;
76
+ }
55
77
  requestCount = 0;
56
78
  errorCount = 0;
57
79
  lastRequestAt;
80
+ _syncScheduled = false;
81
+ _lastEventAt = 0;
58
82
  constructor(config = {}) {
83
+ this._recentEventsRing = new Array(this._recentEventsCapacity);
59
84
  this.runtimeBus = config.runtimeBus ?? null;
60
85
  this.dispatch = config.runtimeStore ? createDomainDispatch(config.runtimeStore) : null;
61
86
  this.serverConfig = {
@@ -101,7 +126,7 @@ export class ControlPlaneGateway {
101
126
  clients: this.clients.size,
102
127
  activeClients: active.length,
103
128
  surfaceMessages: this.recentMessages.length,
104
- recentEvents: this.recentEvents.length,
129
+ recentEvents: this._recentEventsCount,
105
130
  requests: this.requestCount,
106
131
  errors: this.errorCount,
107
132
  },
@@ -560,6 +585,20 @@ export class ControlPlaneGateway {
560
585
  renderWebUi(authTokenHint = '') {
561
586
  return renderControlPlaneGatewayWebUi(authTokenHint);
562
587
  }
588
+ _scheduleControlPlaneSync() {
589
+ if (this._syncScheduled || !this.dispatch)
590
+ return;
591
+ this._syncScheduled = true;
592
+ setImmediate(() => {
593
+ this._syncScheduled = false;
594
+ this.dispatch?.syncControlPlaneState({
595
+ requestCount: this.requestCount,
596
+ errorCount: this.errorCount,
597
+ lastRequestAt: this.lastRequestAt,
598
+ lastEventAt: this._lastEventAt,
599
+ }, 'control-plane.gateway.event');
600
+ });
601
+ }
563
602
  rememberEvent(event, payload) {
564
603
  const record = {
565
604
  id: `cpe-${randomUUID().slice(0, 8)}`,
@@ -567,16 +606,14 @@ export class ControlPlaneGateway {
567
606
  createdAt: Date.now(),
568
607
  payload,
569
608
  };
570
- this.recentEvents.unshift(record);
571
- if (this.recentEvents.length > 500) {
572
- this.recentEvents.length = 500;
573
- }
574
- this.dispatch?.syncControlPlaneState({
575
- requestCount: this.requestCount,
576
- errorCount: this.errorCount,
577
- lastRequestAt: this.lastRequestAt,
578
- lastEventAt: record.createdAt,
579
- }, 'control-plane.gateway.event');
609
+ // O(1) circular ring buffer write — no array shifting.
610
+ this._recentEventsRing[this._recentEventsHead] = record;
611
+ this._recentEventsHead = (this._recentEventsHead + 1) % this._recentEventsCapacity;
612
+ if (this._recentEventsCount < this._recentEventsCapacity)
613
+ this._recentEventsCount++;
614
+ this._lastEventAt = record.createdAt;
615
+ // Debounced: coalesce N events/frame into 1 store sync.
616
+ this._scheduleControlPlaneSync();
580
617
  return record;
581
618
  }
582
619
  }
@@ -52,12 +52,21 @@ export declare class ConversationManager {
52
52
  private currentBranch;
53
53
  private streamingMessageIndex;
54
54
  private undoStack;
55
+ private _messagesRevision;
56
+ private _cachedLLMMessages;
57
+ private _cachedLLMRevision;
55
58
  constructor();
56
59
  private findToolName;
57
60
  setSessionMemoryStore(store: Pick<SessionMemoryStore, 'list'>): void;
58
61
  getSessionMemoryStore(): Pick<SessionMemoryStore, 'list'> | null;
59
62
  setSessionLineageTracker(tracker: Pick<SessionLineageTracker, 'addCompactionEntry'>): void;
60
63
  getSessionLineageTracker(): Pick<SessionLineageTracker, 'addCompactionEntry'>;
64
+ /**
65
+ * Returns the conversation messages formatted for the LLM provider.
66
+ *
67
+ * @returns readonly reference — do not mutate; the array is shared across
68
+ * cache-hit callers until the next conversation mutation.
69
+ */
61
70
  getMessagesForLLM(): ProviderMessage[];
62
71
  addUserMessage(content: string | ContentPart[]): void;
63
72
  addAssistantMessage(content: string, opts?: {
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/core/conversation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/core/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAYjG,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GACnC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACtE,gBAAgB,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,KAAK,OAAO,GAAG,2BAA2B,CAAC;AAC3C,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,kBAAkB,CAAiD;IAC3E,OAAO,CAAC,qBAAqB,CAE3B;IACF,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,qBAAqB,CAAM;IACnC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,kBAAkB,CAAM;;IAIhC,OAAO,CAAC,YAAY;IAUb,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG,IAAI;IAIpE,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG,IAAI;IAIhE,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,GAAG,IAAI;IAI1F,wBAAwB,IAAI,IAAI,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;IAIpF;;;;;OAKG;IACI,iBAAiB,IAAI,eAAe,EAAE;IA+BtC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,IAAI;IAUrD,mBAAmB,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GACA,IAAI;IAcP;;;;OAIG;IACI,IAAI,IAAI,OAAO;IAetB;;;OAGG;IACI,IAAI,IAAI,OAAO;IAQf,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAgB3C,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKvC,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAUnC,eAAe,IAAI,MAAM;IAIzB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOxC,4BAA4B,IAAI,IAAI;IAUpC,mBAAmB,IAAI,IAAI;IAM3B,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3C,sBAAsB,IAAI,IAAI;IAQ9B,kBAAkB,IAAI,2BAA2B,EAAE;IAInD,uBAAuB;;;;IAIvB,qBAAqB,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,IAAI;IAOrD,OAAO,CAClB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,GAAG,QAAmB,EACrC,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAIhB,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAG7B;IAEM,cAAc,IAAI,uBAAuB;IAIzC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMnC,QAAQ,IAAI,IAAI;IAWhB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,MAAM;IAShD,YAAY,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAYjF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAWlC,gBAAgB,IAAI,MAAM;IAI1B,MAAM,IAAI,MAAM;IAWhB,QAAQ,CAAC,IAAI,EAAE;QACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,uBAAuB,CAAC;KACvC,GAAG,IAAI;CAWT;AAED,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -14,6 +14,9 @@ export class ConversationManager {
14
14
  currentBranch = 'main';
15
15
  streamingMessageIndex = -1;
16
16
  undoStack = [];
17
+ _messagesRevision = 0;
18
+ _cachedLLMMessages = null;
19
+ _cachedLLMRevision = -1;
17
20
  constructor() { }
18
21
  findToolName(callId) {
19
22
  for (let i = this.messages.length - 1; i >= 0; i--) {
@@ -38,7 +41,16 @@ export class ConversationManager {
38
41
  getSessionLineageTracker() {
39
42
  return this.sessionLineageTracker;
40
43
  }
44
+ /**
45
+ * Returns the conversation messages formatted for the LLM provider.
46
+ *
47
+ * @returns readonly reference — do not mutate; the array is shared across
48
+ * cache-hit callers until the next conversation mutation.
49
+ */
41
50
  getMessagesForLLM() {
51
+ if (this._cachedLLMMessages !== null && this._cachedLLMRevision === this._messagesRevision) {
52
+ return this._cachedLLMMessages;
53
+ }
42
54
  const result = [];
43
55
  for (const message of this.messages) {
44
56
  if (message.role === 'system')
@@ -62,6 +74,8 @@ export class ConversationManager {
62
74
  ...(message.toolName ? { name: message.toolName } : {}),
63
75
  });
64
76
  }
77
+ this._cachedLLMMessages = result;
78
+ this._cachedLLMRevision = this._messagesRevision;
65
79
  return result;
66
80
  }
67
81
  addUserMessage(content) {
@@ -71,6 +85,7 @@ export class ConversationManager {
71
85
  this.messages.push({ role: 'user', content });
72
86
  // Clear undo stack when new user input is added (can't redo past new input)
73
87
  this.undoStack = [];
88
+ this._messagesRevision++;
74
89
  }
75
90
  addAssistantMessage(content, opts) {
76
91
  this.messages.push({
@@ -83,6 +98,7 @@ export class ConversationManager {
83
98
  model: opts?.model,
84
99
  provider: opts?.provider,
85
100
  });
101
+ this._messagesRevision++;
86
102
  }
87
103
  /**
88
104
  * undo - Remove the last complete turn (the last user message and all subsequent
@@ -101,6 +117,7 @@ export class ConversationManager {
101
117
  return false;
102
118
  const turn = this.messages.splice(lastUserIdx);
103
119
  this.undoStack.push(turn);
120
+ this._messagesRevision++;
104
121
  return true;
105
122
  }
106
123
  /**
@@ -112,6 +129,7 @@ export class ConversationManager {
112
129
  return false;
113
130
  const turn = this.undoStack.pop();
114
131
  this.messages.push(...turn);
132
+ this._messagesRevision++;
115
133
  return true;
116
134
  }
117
135
  addToolResults(results) {
@@ -127,9 +145,11 @@ export class ConversationManager {
127
145
  ...(toolName ? { toolName } : {}),
128
146
  });
129
147
  }
148
+ this._messagesRevision++;
130
149
  }
131
150
  addSystemMessage(content) {
132
151
  this.messages.push({ role: 'system', content });
152
+ this._messagesRevision++;
133
153
  }
134
154
  getLastUserMessage() {
135
155
  for (let i = this.messages.length - 1; i >= 0; i--) {
@@ -146,12 +166,14 @@ export class ConversationManager {
146
166
  removeMessagesAfter(count) {
147
167
  if (count < this.messages.length) {
148
168
  this.messages.length = count;
169
+ this._messagesRevision++;
149
170
  }
150
171
  }
151
172
  markLastUserMessageCancelled() {
152
173
  for (let i = this.messages.length - 1; i >= 0; i--) {
153
174
  if (this.messages[i].role === 'user') {
154
175
  this.messages[i].cancelled = true;
176
+ this._messagesRevision++;
155
177
  return;
156
178
  }
157
179
  }
@@ -159,6 +181,7 @@ export class ConversationManager {
159
181
  startStreamingBlock() {
160
182
  this.messages.push({ role: 'assistant', content: '' });
161
183
  this.streamingMessageIndex = this.messages.length - 1;
184
+ this._messagesRevision++;
162
185
  }
163
186
  updateStreamingBlock(content) {
164
187
  if (this.streamingMessageIndex < 0)
@@ -166,6 +189,7 @@ export class ConversationManager {
166
189
  const message = this.messages[this.streamingMessageIndex];
167
190
  if (message?.role === 'assistant') {
168
191
  message.content = content;
192
+ this._messagesRevision++;
169
193
  }
170
194
  }
171
195
  finalizeStreamingBlock() {
@@ -173,6 +197,7 @@ export class ConversationManager {
173
197
  this.messages.splice(this.streamingMessageIndex, 1);
174
198
  }
175
199
  this.streamingMessageIndex = -1;
200
+ this._messagesRevision++;
176
201
  }
177
202
  getMessageSnapshot() {
178
203
  return cloneMessages(this.messages);
@@ -184,6 +209,7 @@ export class ConversationManager {
184
209
  const systemMessages = this.messages.filter((message) => message.role === 'system');
185
210
  this.messages = [...systemMessages, ...messagesToInternal(newMessages)];
186
211
  this.streamingMessageIndex = -1;
212
+ this._messagesRevision++;
187
213
  }
188
214
  async compact(registry, modelId, trigger = 'manual', provider, context) {
189
215
  return compactConversation(this, registry, modelId, trigger, provider, context);
@@ -212,6 +238,7 @@ export class ConversationManager {
212
238
  this.currentBranch = 'main';
213
239
  this.streamingMessageIndex = -1;
214
240
  this.undoStack = [];
241
+ this._messagesRevision++;
215
242
  }
216
243
  forkBranch(name, force = false) {
217
244
  const branchName = name?.trim() || `branch-${Date.now()}`;
@@ -240,6 +267,7 @@ export class ConversationManager {
240
267
  this.messages = cloneMessages(stored);
241
268
  this.currentBranch = name;
242
269
  this.streamingMessageIndex = -1;
270
+ this._messagesRevision++;
243
271
  return true;
244
272
  }
245
273
  mergeBranch(name) {
@@ -251,6 +279,7 @@ export class ConversationManager {
251
279
  if (toAppend.length === 0)
252
280
  return true;
253
281
  this.messages.push(...cloneMessages(toAppend));
282
+ this._messagesRevision++;
254
283
  return true;
255
284
  }
256
285
  getCurrentBranch() {
@@ -275,6 +304,7 @@ export class ConversationManager {
275
304
  this.branches = restoreBranchMap(data.branches);
276
305
  this.currentBranch = data.currentBranch ?? 'main';
277
306
  this.streamingMessageIndex = -1;
307
+ this._messagesRevision++;
278
308
  }
279
309
  }
280
310
  export { parseDiffForApply, applyDiffContent } from './conversation-diff.js';
@@ -35,6 +35,8 @@ export declare class ProviderRegistry {
35
35
  private catalogModels;
36
36
  private pricingCatalog;
37
37
  private syntheticCanonicalModels;
38
+ private _cachedModelRegistry;
39
+ private _modelRegistryRevision;
38
40
  constructor(options: ProviderRegistryOptions);
39
41
  private registerBuiltins;
40
42
  private getPersistenceRoot;
@@ -44,6 +46,7 @@ export declare class ProviderRegistry {
44
46
  private getSyntheticBuiltins;
45
47
  private updateCatalogState;
46
48
  private getSuppressedCatalogModelIds;
49
+ private _invalidateModelRegistry;
47
50
  private getModelRegistry;
48
51
  /** Register a provider. Overwrites any existing entry with the same name. */
49
52
  register(provider: LLMProvider): void;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/providers/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/providers/registry.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,8 @@ export class ProviderRegistry {
43
43
  catalogModels = [];
44
44
  pricingCatalog = null;
45
45
  syntheticCanonicalModels = [];
46
+ _cachedModelRegistry = null;
47
+ _modelRegistryRevision = 0;
46
48
  constructor(options) {
47
49
  this.configManager = options.configManager;
48
50
  this.subscriptionManager = options.subscriptionManager;
@@ -98,12 +100,19 @@ export class ProviderRegistry {
98
100
  this.catalogModels = [...models];
99
101
  this.pricingCatalog = { fetchedAt: Date.now(), models: this.catalogModels };
100
102
  this.syntheticCanonicalModels = buildSyntheticCanonicalModels(this.catalogModels);
103
+ this._invalidateModelRegistry();
101
104
  }
102
105
  getSuppressedCatalogModelIds() {
103
106
  return new Set([...this.runtimeCatalogSuppressions.values()].flat());
104
107
  }
108
+ _invalidateModelRegistry() {
109
+ this._cachedModelRegistry = null;
110
+ this._modelRegistryRevision++;
111
+ }
105
112
  getModelRegistry() {
106
- return buildModelRegistry({
113
+ if (this._cachedModelRegistry !== null)
114
+ return this._cachedModelRegistry;
115
+ this._cachedModelRegistry = buildModelRegistry({
107
116
  customModels: this.customModels,
108
117
  runtimeModels: this.runtimeModels,
109
118
  syntheticModels: this.getSyntheticBuiltins(),
@@ -111,10 +120,12 @@ export class ProviderRegistry {
111
120
  discoveredModels: this.discoveredModels,
112
121
  suppressedCatalogIds: this.getSuppressedCatalogModelIds(),
113
122
  });
123
+ return this._cachedModelRegistry;
114
124
  }
115
125
  /** Register a provider. Overwrites any existing entry with the same name. */
116
126
  register(provider) {
117
127
  this.providers.set(provider.name, provider);
128
+ this._invalidateModelRegistry();
118
129
  }
119
130
  /**
120
131
  * Register a runtime/plugin-owned provider and optional model definitions.
@@ -138,6 +149,7 @@ export class ProviderRegistry {
138
149
  ];
139
150
  this.runtimeCatalogSuppressions.set(provider.name, [...new Set(suppressCatalogModels)]);
140
151
  this.capabilityRegistry.invalidate();
152
+ this._invalidateModelRegistry();
141
153
  return () => {
142
154
  if (!this.runtimeProviderNames.has(provider.name))
143
155
  return;
@@ -146,6 +158,7 @@ export class ProviderRegistry {
146
158
  this.runtimeModels = this.runtimeModels.filter((model) => model.provider !== provider.name);
147
159
  this.runtimeCatalogSuppressions.delete(provider.name);
148
160
  this.capabilityRegistry.invalidate();
161
+ this._invalidateModelRegistry();
149
162
  };
150
163
  }
151
164
  listProviders() {
@@ -196,6 +209,7 @@ export class ProviderRegistry {
196
209
  });
197
210
  }
198
211
  }
212
+ this._invalidateModelRegistry();
199
213
  }
200
214
  /** Retrieve a provider by name. Throws if not found. */
201
215
  get(name) {
@@ -379,6 +393,7 @@ export class ProviderRegistry {
379
393
  contextWindow: cap,
380
394
  contextWindowProvenance: 'configured_cap',
381
395
  };
396
+ this._invalidateModelRegistry();
382
397
  return;
383
398
  }
384
399
  const discoveredIdx = this.discoveredModels.findIndex((m) => m.registryKey === registryKey || m.id === registryKey);
@@ -388,6 +403,7 @@ export class ProviderRegistry {
388
403
  contextWindow: cap,
389
404
  contextWindowProvenance: 'configured_cap',
390
405
  };
406
+ this._invalidateModelRegistry();
391
407
  return;
392
408
  }
393
409
  logger.warn('[registry] setModelContextCap: model not found', { registryKey });
@@ -450,6 +466,7 @@ export class ProviderRegistry {
450
466
  }
451
467
  // Swap custom models
452
468
  this.customModels = result.models;
469
+ this._invalidateModelRegistry();
453
470
  return { warnings: result.warnings, added, removed, updated };
454
471
  }
455
472
  /**
@@ -1,6 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- let version = '0.18.37';
3
+ let version = '0.18.40';
4
4
  try {
5
5
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
6
6
  version = pkg.version ?? version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-sdk",
3
- "version": "0.18.37",
3
+ "version": "0.18.40",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/mgd34msu/goodvibes-sdk.git"