pi-sdk-web 0.5.3 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.js CHANGED
@@ -581,6 +581,11 @@ export class PiWebServer {
581
581
  break;
582
582
  }
583
583
  case "get_scoped_models":
584
+ // Refresh model catalogs (e.g. pi-deepinfra's lazy catalog swap)
585
+ // before broadcasting, so late-swapped models (zai-org/GLM-5.3-
586
+ // Flash etc.) appear in the list like they do in the TUI. Timeout
587
+ // is bounded by the refresh implementation (network wait).
588
+ await this.session.modelRuntime.refresh().catch(() => { });
584
589
  this.broadcast({
585
590
  type: "scoped_models",
586
591
  data: {
@@ -590,6 +595,11 @@ export class PiWebServer {
590
595
  thinkingLevel: s.thinkingLevel,
591
596
  })),
592
597
  available: this.session.modelRuntime.getAvailableSnapshot(),
598
+ // Settings' enabled-model patterns. TUI's scoped-models selector
599
+ // also shows configured patterns that have no matching provider
600
+ // model (diagnostic no-match) - mirror that so configured models
601
+ // (e.g. deepinfra/zai-org/GLM-5.3-Flash) aren't missing here.
602
+ configured: this.session.settingsManager.getEnabledModels() ?? [],
593
603
  },
594
604
  });
595
605
  break;
@@ -2369,7 +2369,18 @@ class PiWebClient {
2369
2369
 
2370
2370
  handleScopedModels(data) {
2371
2371
  if (this.modalMode !== 'scoped-models') return;
2372
- this.scopedModelsAll = data.available || [];
2372
+ const available = data.available || [];
2373
+ // Merge settings' configured model patterns (e.g. deepinfra/zai-org/
2374
+ // GLM-5.3-Flash) that have no matching provider model - TUI's selector
2375
+ // shows these as configured entries (no-match diagnostics) too.
2376
+ const known = new Set(available.map((m) => `${m.provider}/${m.id}`));
2377
+ const configured = (data.configured || [])
2378
+ .filter((p) => !known.has(p))
2379
+ .map((p) => {
2380
+ const slash = p.indexOf('/');
2381
+ return { provider: p.slice(0, slash), id: p.slice(slash + 1), configured: true };
2382
+ });
2383
+ this.scopedModelsAll = [...available, ...configured];
2373
2384
  this.scopedModelsData = data;
2374
2385
  this.scopedModelsSelected = new Set(
2375
2386
  (data.scoped || []).map((s) => `${s.provider}/${s.id}`),
@@ -2395,7 +2406,7 @@ class PiWebClient {
2395
2406
  return (
2396
2407
  `<div class="modal-item scoped-model ${checked ? 'selected' : ''}" data-key="${key}">` +
2397
2408
  `<span class="modal-check">${checked ? '☑' : '☐'}</span>` +
2398
- `<span class="modal-item-name">${this.escapeHtml(key)}</span>` +
2409
+ `<span class="modal-item-name">${this.escapeHtml(key)}${m.configured ? ' <span class="configured-badge">[configured]</span>' : ''}</span>` +
2399
2410
  `</div>`
2400
2411
  );
2401
2412
  })
@@ -1475,3 +1475,13 @@ body {
1475
1475
  #usage-close:hover {
1476
1476
  color: var(--text);
1477
1477
  }
1478
+
1479
+ .configured-badge {
1480
+ font-size: 9px;
1481
+ color: var(--dim);
1482
+ background: var(--tool-pending-bg);
1483
+ padding: 1px 4px;
1484
+ border-radius: 3px;
1485
+ margin-left: 4px;
1486
+ vertical-align: middle;
1487
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-sdk-web",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "Browser Web access for Pi (AI coding agent) via the Pi SDK - standalone module, zero modification to Pi itself",
5
5
  "type": "module",
6
6
  "bin": {