@jeffusion/bungee-core 6.4.1 → 6.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.
@@ -77,6 +77,8 @@
77
77
  let routeChoice = $state('new'), routesLoading = $state(false), routeError = $state('');
78
78
  let routeGeneration = 0;
79
79
  let selectedRoute = $derived(routes.find(route => route.path === routeChoice));
80
+ let referencedRouteServices = $derived((selectedRoute?.service_references ?? []).map(reference => ({id:reference.service_id,
81
+ service:services.find(service => service._uid === reference.service_id)})));
80
82
  let routeSelection = $derived($isLoading ? undefined : { value: routeChoice, label: routeChoice === 'new' ? t('ui.newRoute') : selectedRoute?.path ?? routeChoice });
81
83
  let resetOpen = $state(false), resetAccount = $state<Account | null>(null), resetCredit = $state<Credit | null>(null);
82
84
  let resetRequestId = $state(''), resetBusy = $state(false), resetNotice = $state('');
@@ -395,7 +397,7 @@
395
397
  async function loadRoutes() {
396
398
  const generation = ++routeGeneration;
397
399
  routesLoading = true; routeError = '';
398
- try { const loaded = await RoutesAPI.list(); if (generation === routeGeneration) routes = loaded; }
400
+ try { const [loaded,loadedServices] = await Promise.all([RoutesAPI.list(),ServicesAPI.list()]); if (generation === routeGeneration) { routes = loaded; services = loadedServices; } }
399
401
  catch { if (generation === routeGeneration) routeError = 'ui.routesFailed'; }
400
402
  finally { if (generation === routeGeneration) routesLoading = false; }
401
403
  }
@@ -405,7 +407,7 @@
405
407
  routeAccount = account; routeChoice = 'new'; routes = []; routeOpen = true; void loadRoutes();
406
408
  }
407
409
  async function continueToRoute() {
408
- if (!routeAccount?.available || routesLoading || routeError || selectedRoute?.service) return;
410
+ if (!routeAccount?.available || routesLoading || routeError || selectedRoute?.service_references?.length) return;
409
411
  if (routeChoice !== 'new' && !selectedRoute?._uid) { routeError = 'ui.routeMissing'; return; }
410
412
  const handoff = { sourcePlugin: pluginName, sourceId: accountSourceId(routeAccount), accountRef: routeAccount.id,
411
413
  mode: selectedRoute ? 'existing' as const : 'new' as const,
@@ -415,12 +417,12 @@
415
417
  if (lifetime.signal.aborted) return;
416
418
  void push(routeSourceHandoffUrl(handoff, selectedRoute?.path));
417
419
  }
418
- async function editReferencedService() {
419
- const service = selectedRoute?.service;
420
+ async function editReferencedService(serviceId:string) {
421
+ const service = services.find(service => service._uid === serviceId);
420
422
  if (!service) return;
421
423
  routeOpen = false;
422
424
  await tick();
423
- if (!lifetime.signal.aborted) void push(`/services/edit/${encodeURIComponent(service)}`);
425
+ if (!lifetime.signal.aborted) void push(`/services/edit/${encodeURIComponent(service.name)}`);
424
426
  }
425
427
  function invalidatePolling() { pollGeneration += 1; clearTimeout(timer); timer = undefined; }
426
428
  function clearSession() { invalidatePolling(); clearSecrets(); session = null; status = ''; }
@@ -602,16 +604,18 @@
602
604
  </Select.Root>
603
605
  </div>
604
606
  {#if routesLoading}<p role="status" class="text-sm text-zinc-400">{t('ui.routesLoading')}</p>{/if}
605
- {#if selectedRoute?.service}
607
+ {#if referencedRouteServices.length}
606
608
  <div role="alert" class="border-l-2 border-amber-500 bg-amber-500/5 px-3 py-2 text-sm text-amber-300 space-y-2">
607
- <p>{t('ui.routeUsesService', { name: selectedRoute.service })}</p>
608
- <Button variant="outline" size="sm" onclick={editReferencedService}>{@render actionIcon(Server)}{t('ui.editReferencedService')}</Button>
609
+ <p>{t('ui.routeUsesService', { name: referencedRouteServices.map(reference => reference.service?.name ?? reference.id).join(', ') })}</p>
610
+ {#each referencedRouteServices as reference (reference.id)}
611
+ <Button variant="outline" size="sm" disabled={!reference.service} onclick={() => editReferencedService(reference.id)}>{@render actionIcon(Server)}{t('ui.editReferencedService')} · {reference.service?.name ?? reference.id}</Button>
612
+ {/each}
609
613
  </div>
610
614
  {:else}<p class="text-sm text-zinc-400">{t('ui.routeHelp')}</p>{/if}
611
615
  {#if routeError}<p role="alert" class="text-sm text-red-300">{t(routeError)}</p><Button variant="outline" disabled={routesLoading} aria-busy={routesLoading} onclick={loadRoutes}>{@render actionIcon(RefreshCw, routesLoading)}{t('ui.reloadRoutes')}</Button>{/if}
612
616
  {/snippet}
613
617
  {#snippet footer()}
614
- <Button disabled={routesLoading || !!routeError || !!selectedRoute?.service} aria-busy={routesLoading} onclick={continueToRoute}>{@render actionIcon(ArrowRight, routesLoading)}{t('ui.continueRoute')}</Button>
618
+ <Button disabled={routesLoading || !!routeError || !!selectedRoute?.service_references?.length} aria-busy={routesLoading} onclick={continueToRoute}>{@render actionIcon(ArrowRight, routesLoading)}{t('ui.continueRoute')}</Button>
615
619
  {/snippet}
616
620
  </IndustrialDialog>
617
621
 
@@ -6715,7 +6715,13 @@ function adapterError(error) {
6715
6715
  }
6716
6716
  function responseHandler(input) {
6717
6717
  let context, terminal, flushed = false;
6718
- const dispose = () => input.session.dispose();
6718
+ let disposed = false;
6719
+ const dispose = () => {
6720
+ if (disposed)
6721
+ return;
6722
+ disposed = true;
6723
+ input.session.dispose();
6724
+ };
6719
6725
  input.signal?.addEventListener("abort", dispose, { once: true });
6720
6726
  const release = () => {
6721
6727
  input.signal?.removeEventListener("abort", dispose);
@@ -6730,6 +6736,7 @@ function responseHandler(input) {
6730
6736
  return { bodyRequirements() {
6731
6737
  return { request: "none", response: ["json", "sse-json"] };
6732
6738
  }, register(hooks) {
6739
+ hooks.onFinally.tap("llm-adapter.dispose", release);
6733
6740
  hooks.onValidateOutbound.tapPromise("llm-adapter.target", async (outbound) => {
6734
6741
  check();
6735
6742
  try {
@@ -7147,4 +7154,4 @@ export {
7147
7154
  targetPath
7148
7155
  };
7149
7156
 
7150
- //# debugId=7C2FFBD5947C86DA64756E2164756E21
7157
+ //# debugId=D696087DA66CE8D864756E2164756E21