@oddessentials/agent-guild 1.4.0 → 1.6.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/web/yard/view.js CHANGED
@@ -27,7 +27,7 @@ export function initYard(controller) {
27
27
  const root = document.documentElement;
28
28
  let view = root.dataset.view === 'yard' ? 'yard' : 'cards';
29
29
  let snapshot = controller.snapshot();
30
- let lastSkin = '', lastTheme = '';
30
+ let lastSkin = '', lastTheme = '', wasConnected = false;
31
31
  const sceneVisible = () => view === 'yard' && !$('app').hidden && document.visibilityState !== 'hidden' && $('terminal-panel').hidden;
32
32
  const skinEntry = (skin = root.dataset.skin) => (window.agentGuildSkins || []).find((item) => item.id === skin) || null;
33
33
  // A skin has a yard only when model.mjs has its world.
@@ -50,7 +50,7 @@ export function initYard(controller) {
50
50
  const allowed = skinAllowsYard();
51
51
  view = next === 'yard' && allowed ? 'yard' : 'cards';
52
52
  root.dataset.view = view;
53
- if (remember) { try { localStorage.setItem('agentGuild.view', next === 'yard' && allowed ? 'yard' : 'cards'); } catch {} }
53
+ if (remember && !controller.expand) { try { localStorage.setItem('agentGuild.view', next === 'yard' && allowed ? 'yard' : 'cards'); } catch {} }
54
54
  $('view-cards').checked = view === 'cards';
55
55
  const yardChoice = $('view-yard');
56
56
  yardChoice.checked = view === 'yard';
@@ -242,6 +242,9 @@ export function initYard(controller) {
242
242
  function update() {
243
243
  if (disposed || view !== 'yard') return;
244
244
  snapshot = controller.snapshot();
245
+ if (snapshot.connected) wasConnected = true;
246
+ $('yard-offline').hidden = !controller.expand || snapshot.connected || !(wasConnected || snapshot.retrying);
247
+ $('yard-offline-text').textContent = wasConnected ? 'Agent Guild disconnected. Reconnecting…' : 'Can’t reach Agent Guild. Retrying…';
245
248
  if (selected && !(selected.kind === 'provider' ? snapshot.providers : snapshot.sessions).some(x => x.id === selected.id)) {
246
249
  const row = rows.get(selected.kind + ':' + selected.id);
247
250
  const restoreFocus = row?.contains(document.activeElement) || $('yard-inspector').contains(document.activeElement);
@@ -275,11 +278,17 @@ export function initYard(controller) {
275
278
  }
276
279
  $('view-cards').addEventListener('change',() => setView('cards'));
277
280
  $('view-yard').addEventListener('change',() => { if (skinAllowsYard()) setView('yard'); });
278
- $('yard-cards').addEventListener('click',() => { setView('cards'); ($('settings').checkVisibility() ? $('settings') : $('menu-toggle')).focus(); });
281
+ const showCards = () => {
282
+ if (controller.expand) return controller.expand();
283
+ setView('cards'); ($('settings').checkVisibility() ? $('settings') : $('menu-toggle')).focus();
284
+ };
285
+ if (controller.expand) for (const id of ['yard-cards','yard-download-cards']) $(id).textContent = 'Open Agent Guild';
286
+ $('yard-cards').addEventListener('click',showCards);
287
+ $('yard-offline-open').addEventListener('click',() => controller.expand?.());
279
288
  $('yard-retry').addEventListener('click',() => { failed=false; ensureScene(); });
280
289
  $('yard-download-cancel').addEventListener('click',() => artAction('cancel'));
281
290
  $('yard-download-retry').addEventListener('click',() => artAction('download'));
282
- $('yard-download-cards').addEventListener('click',() => { setView('cards'); ($('settings').checkVisibility() ? $('settings') : $('menu-toggle')).focus(); });
291
+ $('yard-download-cards').addEventListener('click',showCards);
283
292
  $('yard-swap-retry').addEventListener('click',() => {
284
293
  if ($('yard-swap-failure').contains(document.activeElement)) $('yard-stage').focus();
285
294
  $('yard-swap-failure').hidden = true;
@@ -305,8 +314,8 @@ export function initYard(controller) {
305
314
  const visibility = () => { update(); renderer?.setActive(sceneVisible()); };
306
315
  // A skin change keeps the saved preference and only changes what is on screen.
307
316
  const onAppearance = () => {
308
- let preferYard = false;
309
- try { preferYard = localStorage.getItem('agentGuild.view') === 'yard'; } catch {}
317
+ let preferYard = Boolean(controller.expand);
318
+ if (!preferYard) try { preferYard = localStorage.getItem('agentGuild.view') === 'yard'; } catch {}
310
319
  setView(preferYard && skinAllowsYard() ? 'yard' : 'cards', { remember: false });
311
320
  renderer?.setActive(sceneVisible());
312
321
  };
package/web/yard/yard.css CHANGED
@@ -116,6 +116,16 @@
116
116
  #yard-help { font-size:9px; }
117
117
  }
118
118
  @media(max-width:640px) { :root[data-view="yard"] .cwd { flex-basis:100%; } }
119
+ :root[data-layout="compact"] .topbar, :root[data-layout="compact"] #app > .launcher, :root[data-layout="compact"] .yard-heading, :root[data-layout="compact"] .yard-news, :root[data-layout="compact"] .yard-sidebar, :root[data-layout="compact"] #yard-help, :root[data-layout="compact"] #yard-failure > p { display:none; }
120
+ :root[data-layout="compact"] body { min-height:0; }
121
+ :root[data-layout="compact"] #yard { display:flex; height:100dvh; min-height:0; }
122
+ :root[data-layout="compact"] .yard-main { flex:1; height:auto; min-height:0; }
123
+ :root[data-layout="compact"] .yard-stage { min-height:0; }
124
+ :root[data-layout="compact"] .yard-camera { right:8px; bottom:8px; }
125
+ :root[data-layout="compact"] #yard-offline { top:8px; bottom:auto; left:8px; right:8px; transform:none; flex-wrap:wrap; justify-content:center; text-align:center; border-radius:var(--radius); background:var(--surface); }
126
+ :root[data-layout="compact"] #yard-stage:has(#yard-offline:not([hidden])) :is(canvas, .yard-labels) { opacity:.5; filter:grayscale(1); }
127
+ :root[data-layout="compact"] #yard-stage:has(#yard-offline:not([hidden])) :is(#yard-download, #yard-loading) { display:none; }
128
+ :root[data-layout="compact"] .yard-failure { top:50%; max-height:calc(100% - 16px); overflow:auto; padding:14px; }
119
129
  .yard-help-touch { display:none; }
120
130
  @media(pointer:coarse) { .yard-help-pointer { display:none; } .yard-help-touch { display:inline; } }
121
131
  @media(prefers-reduced-motion:reduce) {