aimeat 1.20.0 → 1.20.2

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.
Files changed (48) hide show
  1. package/dist/locales/en.json +42 -1
  2. package/dist/locales/fi.json +42 -1
  3. package/dist/public/css/views/profile.css +81 -5
  4. package/dist/public/css/views/public-workspace-viewer.css +206 -0
  5. package/dist/public/js/services/organisms.js +122 -1
  6. package/dist/public/llms-template.txt +7 -2
  7. package/dist/public/spa.html +2 -0
  8. package/dist/public/views/profile/organisms-tab.js +157 -9
  9. package/dist/public/views/public-workspace-viewer.js +128 -0
  10. package/dist/src/cli/connect/mcp/tools/workspaces.d.ts.map +1 -1
  11. package/dist/src/cli/connect/mcp/tools/workspaces.js +15 -9
  12. package/dist/src/cli/connect/mcp/tools/workspaces.js.map +1 -1
  13. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  14. package/dist/src/cli/connect/tool-call.js +10 -6
  15. package/dist/src/cli/connect/tool-call.js.map +1 -1
  16. package/dist/src/generated/api-types.d.ts +204 -0
  17. package/dist/src/generated/api-types.d.ts.map +1 -1
  18. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  19. package/dist/src/mcp/catalog/definitions.js +3 -2
  20. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  21. package/dist/src/mcp/workspaces.d.ts +19 -0
  22. package/dist/src/mcp/workspaces.d.ts.map +1 -1
  23. package/dist/src/mcp/workspaces.js +147 -51
  24. package/dist/src/mcp/workspaces.js.map +1 -1
  25. package/dist/src/middleware/workspace-access.d.ts +5 -0
  26. package/dist/src/middleware/workspace-access.d.ts.map +1 -1
  27. package/dist/src/middleware/workspace-access.js +52 -15
  28. package/dist/src/middleware/workspace-access.js.map +1 -1
  29. package/dist/src/routes/organisms.d.ts +11 -0
  30. package/dist/src/routes/organisms.d.ts.map +1 -1
  31. package/dist/src/routes/organisms.js +357 -31
  32. package/dist/src/routes/organisms.js.map +1 -1
  33. package/dist/src/routes/portal.d.ts.map +1 -1
  34. package/dist/src/routes/portal.js +1 -0
  35. package/dist/src/routes/portal.js.map +1 -1
  36. package/dist/src/services/handbooks/agent.d.ts +3 -1
  37. package/dist/src/services/handbooks/agent.d.ts.map +1 -1
  38. package/dist/src/services/handbooks/agent.js +3 -1
  39. package/dist/src/services/handbooks/agent.js.map +1 -1
  40. package/dist/src/services/handbooks/appdev.d.ts +3 -1
  41. package/dist/src/services/handbooks/appdev.d.ts.map +1 -1
  42. package/dist/src/services/handbooks/appdev.js +19 -0
  43. package/dist/src/services/handbooks/appdev.js.map +1 -1
  44. package/dist/src/services/workspace-meta.d.ts +10 -0
  45. package/dist/src/services/workspace-meta.d.ts.map +1 -1
  46. package/dist/src/services/workspace-meta.js +50 -3
  47. package/dist/src/services/workspace-meta.js.map +1 -1
  48. package/package.json +1 -1
@@ -51,6 +51,15 @@
51
51
  * (⬆ in the bar, uploads a ZIP → new workspace) buttons.
52
52
  * v1.12.0 — 2026-06-09 — Organism-level backup: "Export organism" (whole org ZIP) in the org view +
53
53
  * "Import organism" (→ new org) in the My Organisms header.
54
+ * v1.13.0 — 2026-06-09 — Workspace header restyle: parent-organism breadcrumb so you always see
55
+ * which organism the workspace is in; status badge moved inline with the name; the action row
56
+ * became a tinted .pj-toolbar (consistent buttons + vertical separators, review-gate pushed
57
+ * apart); "+ Space" relabelled "+ Document space"; horizontal dividers split header / charts /
58
+ * manifest panels; section-head add-actions sit next to their title and lift off the panel.
59
+ * v1.14.0 — 2026-06-09 — ParticipantsPanel "Manage who can work here" (creator-only): add a member by
60
+ * name with a role (viewer/contributor), switch roles, remove; approve/deny pending requests. New
61
+ * "Create contract agent" AI-prompt button (orgService.buildContractAgentPrompt) copies a full
62
+ * contract-agent build prompt for THIS workspace. See docs/agent-workspace-contracts.md.
54
63
  */
55
64
  import { h } from 'preact';
56
65
  import { useState, useEffect, useCallback, useRef } from 'preact/hooks';
@@ -818,6 +827,10 @@ function ActivityPanel({ orgId, wsId }) {
818
827
  function ParticipantsPanel({ orgId, wsId }) {
819
828
  const [data, setData] = useState(null);
820
829
  const [show, setShow] = useState(true);
830
+ const [access, setAccess] = useState(null); // { requests, members } — only for the workspace creator
831
+ const [grantee, setGrantee] = useState('');
832
+ const [role, setRole] = useState('contributor');
833
+ const [busy, setBusy] = useState(false);
821
834
  useEffect(() => {
822
835
  let cancelled = false;
823
836
  const fetchIt = () => orgService.getWorkspaceParticipants(orgId, wsId).then(d => { if (!cancelled) setData(d); }).catch(() => {});
@@ -825,9 +838,20 @@ function ParticipantsPanel({ orgId, wsId }) {
825
838
  window.addEventListener('aimeat-live-update', fetchIt);
826
839
  return () => { cancelled = true; window.removeEventListener('aimeat-live-update', fetchIt); };
827
840
  }, [orgId, wsId]);
841
+ const isManager = !!(data && (data.nodes || []).some(n => (n.owners || []).some(o => o.isSelf && o.isCreator)));
842
+ const loadAccess = () => orgService.getWorkspaceAccess(orgId, wsId).then(setAccess).catch(() => {});
843
+ useEffect(() => { if (isManager) loadAccess(); }, [isManager, orgId, wsId, data]); // eslint-disable-line react-hooks/exhaustive-deps
828
844
  if (!data || !(data.nodes || []).length) return null;
829
845
  const owners = [];
830
846
  for (const n of data.nodes) for (const o of (n.owners || [])) owners.push({ ...o, node: n.id, isLocalNode: n.isLocal });
847
+
848
+ const after = async (p) => { setBusy(true); try { await p; await loadAccess(); } catch (e) { /* the row stays so the user can retry */ } finally { setBusy(false); } };
849
+ const doGrant = (g, r) => { const name = (g || '').trim(); if (name) { after(orgService.grantWorkspaceRole(orgId, wsId, name, r)); setGrantee(''); } };
850
+ const doRevoke = (g) => after(orgService.revokeWorkspaceRole(orgId, wsId, g));
851
+ const doDecide = (requester, decision) => after(orgService.decideWorkspaceAccess(orgId, wsId, requester, decision));
852
+ const pending = (access?.requests || []).filter(r => r.status === 'pending');
853
+ const members = access?.members || [];
854
+
831
855
  return html`
832
856
  <div class="pj-chart">
833
857
  <div class="pj-chart-head">
@@ -856,6 +880,37 @@ function ParticipantsPanel({ orgId, wsId }) {
856
880
  </div>` : null}
857
881
  </div>`)}
858
882
  </div>
883
+ ${isManager ? html`
884
+ <div class="pj-access">
885
+ <div class="pj-access-title">${t('organisms.manageAccess') || 'Manage who can work here'}</div>
886
+ ${pending.map(r => html`<div class="pj-access-row" key=${'req-' + r.requester}>
887
+ <span class="pj-access-who">${'🙋 '}<strong>${escHtml(r.requester)}</strong> <span class="pj-access-note">${t('organisms.requestedAccess') || 'requested access'}</span></span>
888
+ <span class="pj-access-actions">
889
+ <button class="btn-success btn-sm" disabled=${busy} onClick=${() => doDecide(r.requester, 'contributor')}>${t('organisms.addAsContributor') || 'Add as contributor'}</button>
890
+ <button class="btn-outline btn-sm" disabled=${busy} onClick=${() => doDecide(r.requester, 'viewer')}>${t('organisms.addAsViewer') || 'as viewer'}</button>
891
+ <button class="btn-danger btn-sm" disabled=${busy} onClick=${() => doDecide(r.requester, 'deny')}>${t('organisms.deny') || 'Deny'}</button>
892
+ </span>
893
+ </div>`)}
894
+ ${members.map(m => html`<div class="pj-access-row" key=${'mem-' + m.owner}>
895
+ <span class="pj-access-who">${'👤 '}<strong>${escHtml(m.owner)}</strong> <span class="badge ${m.role === 'contributor' ? 'badge-success' : 'badge-info'} pj-mini">${m.role === 'contributor' ? (t('organisms.roleContributorShort') || 'contributor') : (t('organisms.roleViewerShort') || 'viewer')}</span></span>
896
+ <span class="pj-access-actions">
897
+ ${m.role === 'viewer'
898
+ ? html`<button class="btn-outline btn-sm" disabled=${busy} onClick=${() => doGrant(m.owner, 'contributor')}>${t('organisms.makeContributor') || '→ can write'}</button>`
899
+ : html`<button class="btn-outline btn-sm" disabled=${busy} onClick=${() => doGrant(m.owner, 'viewer')}>${t('organisms.makeViewer') || '→ read only'}</button>`}
900
+ <button class="btn-danger btn-sm" disabled=${busy} onClick=${() => doRevoke(m.owner)}>${t('organisms.remove') || 'Remove'}</button>
901
+ </span>
902
+ </div>`)}
903
+ <div class="pj-access-add">
904
+ <input class="pj-access-input" placeholder=${t('organisms.addMemberPlaceholder') || 'owner name (or owner@node / agent#owner@node)'} value=${grantee}
905
+ onInput=${e => setGrantee(e.target.value)} onKeyDown=${e => { if (e.key === 'Enter') doGrant(grantee, role); }} />
906
+ <select class="pj-access-role" value=${role} onChange=${e => setRole(e.target.value)}>
907
+ <option value="contributor">${t('organisms.roleContributor') || 'contributor (read + write)'}</option>
908
+ <option value="viewer">${t('organisms.roleViewer') || 'viewer (read only)'}</option>
909
+ </select>
910
+ <button class="btn-primary btn-sm" disabled=${busy || !grantee.trim()} onClick=${() => doGrant(grantee, role)}>${'+ '}${t('organisms.addMember') || 'Add'}</button>
911
+ </div>
912
+ <div class="pj-access-hint">${t('organisms.accessHint') || 'Members can be a different account; their agents inherit the role. Viewers read; contributors read + write.'}</div>
913
+ </div>` : null}
859
914
  </div>` : null}
860
915
  </div>`;
861
916
  }
@@ -909,6 +964,9 @@ function Workspace({ org, wsId, showToast, onBack }) {
909
964
  const [expandedRec, setExpandedRec] = useState({}); // { "type:id": true } — records expanded to view fields
910
965
  const [showSpaces, setShowSpaces] = useState(false); // inline add-space form at the workspace top
911
966
  const [showFlow, setShowFlow] = useState(true); // the manifest-defined edit-flow chart (first item)
967
+ const [showShare, setShowShare] = useState(false); // public-sharing panel
968
+ const [share, setShare] = useState(null); // { public, spaces, docs } — lazy-loaded when the panel opens
969
+ const [shareBusy, setShareBusy] = useState(false);
912
970
 
913
971
  const load = useCallback(async () => {
914
972
  const w = await orgService.getWorkspace(orgId, wsId).catch(() => null);
@@ -1216,6 +1274,14 @@ function Workspace({ org, wsId, showToast, onBack }) {
1216
1274
  } catch (e) { showToast((e && e.message) || 'Failed to build prompt'); }
1217
1275
  }, [orgId, org, wsId, ws, showToast]);
1218
1276
 
1277
+ const copyContractPrompt = useCallback(async () => {
1278
+ try {
1279
+ const text = await orgService.buildContractAgentPrompt(orgId, org.name, wsId, ws);
1280
+ await copyToClipboard(text);
1281
+ showToast(t('organisms.contractPromptCopied') || 'Contract-agent prompt copied — paste it to your AI / coding agent.');
1282
+ } catch (e) { showToast((e && e.message) || 'Failed to build prompt'); }
1283
+ }, [orgId, org, wsId, ws, showToast]);
1284
+
1219
1285
  // The AI / paste generator — reused for a fresh workspace AND for "restructure" (where, via
1220
1286
  // showRegenerate, generate/copyPrompt pass the current manifest so the AI EXTENDS it additively).
1221
1287
  const renderGenerator = () => html`
@@ -1270,7 +1336,12 @@ function Workspace({ org, wsId, showToast, onBack }) {
1270
1336
  </div>
1271
1337
  `;
1272
1338
 
1273
- const back = html`<div class="card-actions mb-half"><button class="btn-ghost btn-sm" onClick=${onBack}>${'← '}${t('organisms.backToWorkspaces') || 'Workspaces'}</button></div>`;
1339
+ const back = html`
1340
+ <div class="pj-ws-crumbs">
1341
+ <button class="btn-ghost btn-sm" onClick=${onBack}>${'← '}${t('organisms.backToWorkspaces') || 'Workspaces'}</button>
1342
+ <span class="pj-crumb-sep">/</span>
1343
+ <span class="pj-crumb-org" title=${t('organisms.workspaceOrganism') || 'Organism'}>${'🧬 '}${escHtml(org.name || '')}</span>
1344
+ </div>`;
1274
1345
 
1275
1346
  if (ws === undefined) return html`<div>${back}<${Spinner} text=${t('organisms.loading') || 'Loading...'} /></div>`;
1276
1347
 
@@ -1290,6 +1361,34 @@ function Workspace({ org, wsId, showToast, onBack }) {
1290
1361
  const draftsFor = (name) => (ws.drafts && ws.drafts[name]) || [];
1291
1362
  const objectsFor = (name) => (ws.objects && ws.objects[name]) || [];
1292
1363
 
1364
+ // ── Public sharing (meta.share) — what published document-space pages anyone can read via the
1365
+ // no-login viewer. Independent of the access roles. Lazy-loaded the first time the panel opens. ──
1366
+ const docTypes = types.filter(ot => ot.mode === 'document');
1367
+ const loadShare = async () => {
1368
+ setShareBusy(true);
1369
+ try { setShare(await orgService.getWorkspaceShare(orgId, wsId)); } finally { setShareBusy(false); }
1370
+ };
1371
+ const patchShare = async (patch) => {
1372
+ setShareBusy(true);
1373
+ try { setShare(await orgService.setWorkspaceShare(orgId, wsId, patch)); }
1374
+ catch (e) { showToast((e && e.message) || (t('organisms.shareFailed') || 'Failed to update sharing')); }
1375
+ finally { setShareBusy(false); }
1376
+ };
1377
+ // Effective public state of one doc — mirrors the backend: doc override → space flag → workspace flag.
1378
+ const isDocPublic = (typeName, id) => {
1379
+ if (!share) return false;
1380
+ const dk = `${typeName}/${id}`;
1381
+ if (Object.prototype.hasOwnProperty.call(share.docs || {}, dk)) return !!share.docs[dk];
1382
+ if (Object.prototype.hasOwnProperty.call(share.spaces || {}, typeName)) return !!share.spaces[typeName];
1383
+ return !!share.public;
1384
+ };
1385
+ const anythingPublic = () => !!share && (!!share.public
1386
+ || Object.values(share.spaces || {}).some(Boolean) || Object.values(share.docs || {}).some(Boolean));
1387
+ const copyShareLink = async (url) => {
1388
+ try { await navigator.clipboard.writeText(window.location.origin + url); showToast(t('organisms.linkCopied') || 'Link copied'); }
1389
+ catch { showToast(t('organisms.copyFailed') || 'Copy failed'); }
1390
+ };
1391
+
1293
1392
  // A document-space: left index (section tree + documents, with an Unsorted group) + a main
1294
1393
  // area showing the active document (view/edit). Sections nest via parentId; documents are
1295
1394
  // tied to a section's documents[] (or unsorted). Edits to the tree persist immediately.
@@ -1393,23 +1492,29 @@ function Workspace({ org, wsId, showToast, onBack }) {
1393
1492
  <div class="pj-ws">
1394
1493
  <${ConfirmUI} />
1395
1494
  ${back}
1396
- <div class="section-title">${escHtml(ws.manifest?.name || org.name || 'Workspace')}</div>
1397
- <div class="section-desc">
1495
+ <div class="pj-ws-titlerow">
1496
+ <span class="section-title pj-ws-title">${escHtml(ws.manifest?.name || org.name || 'Workspace')}</span>
1398
1497
  <span class="badge badge-success">${escHtml(ws.manifest?.status || 'active')}</span>
1399
- ${ws.manifest?.summary ? html` ${escHtml(ws.manifest.summary)}` : null}
1400
1498
  </div>
1499
+ ${ws.manifest?.summary ? html`<div class="section-desc">${escHtml(ws.manifest.summary)}</div>` : null}
1500
+
1501
+ <div class="pj-divider"></div>
1401
1502
 
1402
- <div class="pj-gate">
1403
- <button class="btn-outline btn-sm" onClick=${() => setShowSettings(s => !s)}>${'⚙ '}${t('organisms.settings') || 'Settings'}</button>
1404
- <button class="btn-outline btn-sm" onClick=${() => setShowSpaces(s => !s)}>${'+ '}${t('organisms.addSpaceBtn') || 'Space'}</button>
1503
+ <div class="pj-toolbar">
1504
+ <button class="btn-ghost btn-sm" onClick=${() => setShowSettings(s => !s)}>${'⚙ '}${t('organisms.settings') || 'Settings'}</button>
1505
+ <button class="btn-ghost btn-sm" onClick=${() => setShowSpaces(s => !s)}>${'+ '}${t('organisms.addSpaceBtn') || 'Document space'}</button>
1506
+ ${docTypes.length > 0 ? html`<button class="btn-ghost btn-sm" title=${t('organisms.shareHint') || 'Publish document pages to a public, no-login link'} onClick=${() => { const n = !showShare; setShowShare(n); if (n && share === null) loadShare(); }}>${'🌐 '}${t('organisms.share') || 'Share'}</button>` : null}
1507
+ <span class="pj-toolbar-sep"></span>
1405
1508
  <span class="pj-ai-prompt">
1406
1509
  <span class="pj-ai-prompt-label">${'🤖 '}${t('organisms.aiPrompt') || 'AI access prompt:'}</span>
1407
1510
  <button class="btn-ghost btn-sm" onClick=${() => copyAccessPrompt('human')}>${t('organisms.aiPromptHuman') || 'For chat'}</button>
1408
1511
  <button class="btn-ghost btn-sm" onClick=${() => copyAccessPrompt('agent')}>${t('organisms.aiPromptAgent') || 'For coding agent'}</button>
1512
+ <button class="btn-ghost btn-sm" title=${t('organisms.contractPromptHint') || 'Copy a prompt to build an agent that processes this workspace (reads requests → writes results)'} onClick=${copyContractPrompt}>${'⚙️ '}${t('organisms.contractPrompt') || 'Create contract agent'}</button>
1409
1513
  </span>
1410
- <label class="pj-gate-label">
1514
+ <span class="pj-toolbar-sep"></span>
1515
+ <label class="pj-gate-label pj-toolbar-gate" title=${t('organisms.publishGateHint') || 'When on, an agent’s publish is held for your review instead of going live'}>
1411
1516
  <input type="checkbox" checked=${gateOn} onChange=${toggleGate} disabled=${busy} />
1412
- ${' '}${t('organisms.publishGate') || 'Require review before publishing'}
1517
+ ${'🔒 '}${t('organisms.publishGate') || 'Require review before publishing'}
1413
1518
  </label>
1414
1519
  </div>
1415
1520
 
@@ -1428,6 +1533,45 @@ function Workspace({ org, wsId, showToast, onBack }) {
1428
1533
  </div>
1429
1534
  </div>`}
1430
1535
 
1536
+ ${showShare && html`
1537
+ <div class="pj-inbox">
1538
+ <div class="card-h3">${'🌐 '}${t('organisms.sharePublicTitle') || 'Public sharing'}</div>
1539
+ <div class="section-desc">${t('organisms.sharePublicDesc') || 'Make published document-space pages readable by anyone with the link — no login required. Drafts are never shared.'}</div>
1540
+ ${!share && shareBusy ? html`<div class="pj-empty">${t('organisms.loading') || 'Loading…'}</div>` : null}
1541
+ ${share && docTypes.length === 0 ? html`<div class="pj-empty">${t('organisms.noDocSpaces') || 'This workspace has no document spaces to share.'}</div>` : null}
1542
+ ${share ? docTypes.map(ot => {
1543
+ const docs = objectsFor(ot.name);
1544
+ const spaceOn = !!(share.spaces && share.spaces[ot.name]);
1545
+ return html`
1546
+ <div class="pj-share-space" key=${'sh' + ot.name}>
1547
+ <label class="pj-share-row">
1548
+ <input type="checkbox" checked=${spaceOn} disabled=${shareBusy} onChange=${e => patchShare({ spaces: { [ot.name]: e.target.checked } })} />
1549
+ <span class="pj-space-name">${escHtml(ot.name)}</span>
1550
+ <span class="pj-doc-tag">${docs.length} ${t('organisms.docs') || 'docs'}</span>
1551
+ </label>
1552
+ ${docs.length === 0
1553
+ ? html`<div class="pj-empty pj-share-empty">${t('organisms.noPublishedDocs') || 'No published documents yet — publish a page to share it.'}</div>`
1554
+ : html`<div class="pj-share-docs">
1555
+ ${docs.map(d => {
1556
+ const on = isDocPublic(ot.name, d.id);
1557
+ return html`
1558
+ <label class="pj-share-doc" key=${'shd' + d.id}>
1559
+ <input type="checkbox" checked=${on} disabled=${shareBusy} onChange=${e => patchShare({ docs: { [`${ot.name}/${d.id}`]: e.target.checked } })} />
1560
+ <span class="pj-share-doc-title">${escHtml(d.title || d.id)}</span>
1561
+ ${on ? html`<a class="pj-share-link" href=${orgService.publicViewerUrl(orgId, wsId, { type: ot.name, id: d.id })} target="_blank" rel="noopener">${t('organisms.openLink') || 'open ↗'}</a>` : null}
1562
+ </label>`;
1563
+ })}
1564
+ </div>`}
1565
+ </div>`;
1566
+ }) : null}
1567
+ ${anythingPublic() ? html`
1568
+ <div class="pj-divider"></div>
1569
+ <div class="pj-share-actions">
1570
+ <a class="btn-outline btn-sm" href=${orgService.publicViewerUrl(orgId, wsId)} target="_blank" rel="noopener">${'🔗 '}${t('organisms.openPublicViewer') || 'Open public viewer'}</a>
1571
+ <button class="btn-ghost btn-sm" onClick=${() => copyShareLink(orgService.publicViewerUrl(orgId, wsId))}>${t('organisms.copyLink') || 'Copy link'}</button>
1572
+ </div>` : null}
1573
+ </div>`}
1574
+
1431
1575
  ${showSettings && html`
1432
1576
  <div class="pj-inbox">
1433
1577
  <div class="card-h3">${t('organisms.settings') || 'Workspace settings'}</div>
@@ -1494,6 +1638,8 @@ function Workspace({ org, wsId, showToast, onBack }) {
1494
1638
  </div>
1495
1639
  `}
1496
1640
 
1641
+ <div class="pj-divider"></div>
1642
+
1497
1643
  <${ParticipantsPanel} orgId=${orgId} wsId=${wsId} />
1498
1644
 
1499
1645
  ${ws.manifest ? html`
@@ -1507,6 +1653,8 @@ function Workspace({ org, wsId, showToast, onBack }) {
1507
1653
 
1508
1654
  <${ActivityPanel} orgId=${orgId} wsId=${wsId} />
1509
1655
 
1656
+ ${types.length > 0 ? html`<div class="pj-divider"></div>` : null}
1657
+
1510
1658
  ${types.map(ot => ot.mode === 'document' ? renderDocSpace(ot) : html`
1511
1659
  <div class="pj-section" key=${ot.name}>
1512
1660
  <div class="pj-section-head">
@@ -0,0 +1,128 @@
1
+ /**
2
+ * @file public-workspace-viewer.js
3
+ * @description Public, no-login viewer for an organism workspace's shared document-space pages.
4
+ * Reads the no-auth endpoint GET /v1/organisms/:id/workspace/public/documents?ws=… (which serves
5
+ * only PUBLISHED docs the workspace's meta.share marks public) and renders each page's markdown with
6
+ * the safe Markdown component. A table-of-contents lists the shared pages; [[Wiki links]] jump
7
+ * between them. "Print / Save as PDF" uses the browser's native print (a print stylesheet hides the
8
+ * chrome) — there is no server-side PDF. Deep-link a single page with &type=…&id=….
9
+ * @structure PublicWorkspaceViewer (default export)
10
+ * @usage route /v1/publicworkspaceviewer?org=<id>&ws=<ws>[&type=<space>&id=<docId>]
11
+ * @version-history
12
+ * v1.0.0 — 2026-06-09 — Initial: slice 2 of the workspace public-sharing plan.
13
+ */
14
+ import { h } from 'preact';
15
+ import { useState, useEffect, useCallback } from 'preact/hooks';
16
+ import htm from 'htm';
17
+ import { t } from '/js/i18n.js';
18
+ import { Markdown } from '/components/Markdown.js';
19
+ import { useViewCSS } from '/components/useViewCSS.js';
20
+
21
+ const html = htm.bind(h);
22
+
23
+ const docKey = (d) => `${d.type}/${d.id}`;
24
+
25
+ function parseParams() {
26
+ const p = new URLSearchParams(window.location.search);
27
+ return { org: p.get('org') || '', ws: p.get('ws') || '', type: p.get('type') || '', id: p.get('id') || '' };
28
+ }
29
+
30
+ export default function PublicWorkspaceViewer() {
31
+ useViewCSS('/css/views/public-workspace-viewer.css');
32
+ const { org, ws, type, id } = parseParams();
33
+ const [docs, setDocs] = useState(undefined); // undefined = loading, [] = none/unavailable, array = loaded
34
+ const [selected, setSelected] = useState(null);
35
+ const [error, setError] = useState(null);
36
+
37
+ const load = useCallback(async () => {
38
+ if (!org || !ws) { setDocs([]); return; }
39
+ setError(null);
40
+ try {
41
+ const res = await fetch(`/v1/organisms/${encodeURIComponent(org)}/workspace/public/documents?ws=${encodeURIComponent(ws)}`);
42
+ if (res.status === 404) { setDocs([]); return; }
43
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
44
+ const body = await res.json();
45
+ const list = Array.isArray(body?.data?.documents) ? body.data.documents : [];
46
+ setDocs(list);
47
+ const want = type && id ? `${type}/${id}` : null;
48
+ setSelected(
49
+ (want && list.some(d => docKey(d) === want)) ? want
50
+ : (list[0] ? docKey(list[0]) : null),
51
+ );
52
+ } catch (e) {
53
+ setError((e && e.message) || 'Failed to load');
54
+ setDocs([]);
55
+ }
56
+ }, [org, ws, type, id]);
57
+
58
+ useEffect(() => { load(); }, [load]);
59
+
60
+ // Mark the body while this view is mounted so the print stylesheet can hide the SPA shell chrome
61
+ // (the global nav lives outside this component) without a `:has()` dependency.
62
+ useEffect(() => {
63
+ document.body.classList.add('pwv-active');
64
+ return () => document.body.classList.remove('pwv-active');
65
+ }, []);
66
+
67
+ const current = Array.isArray(docs) ? docs.find(d => docKey(d) === selected) : null;
68
+ useEffect(() => {
69
+ if (current?.title) document.title = `${current.title} — AIMEAT`;
70
+ }, [current?.title]);
71
+
72
+ // [[Wiki links]] jump to another shared page by (case-insensitive) title.
73
+ const onWikiLink = useCallback((title) => {
74
+ if (!Array.isArray(docs)) return;
75
+ const want = String(title).split('#')[0].trim().toLowerCase();
76
+ const hit = docs.find(d => String(d.title).trim().toLowerCase() === want);
77
+ if (hit) setSelected(docKey(hit));
78
+ }, [docs]);
79
+
80
+ if (docs === undefined) {
81
+ return html`<div class="pwv-container"><div class="pwv-state">${t('pwv.loading') || 'Loading…'}</div></div>`;
82
+ }
83
+
84
+ if (error) {
85
+ return html`<div class="pwv-container"><div class="pwv-state pwv-error">${error}</div></div>`;
86
+ }
87
+
88
+ if (!org || !ws || docs.length === 0) {
89
+ return html`
90
+ <div class="pwv-container">
91
+ <div class="pwv-empty">
92
+ <div class="pwv-empty-icon">🔒</div>
93
+ <h2>${t('pwv.unavailableTitle') || 'Nothing to show here'}</h2>
94
+ <p>${t('pwv.unavailableDesc') || 'This workspace has no publicly shared documents, or the link is incomplete.'}</p>
95
+ </div>
96
+ </div>
97
+ `;
98
+ }
99
+
100
+ return html`
101
+ <div class="pwv-container">
102
+ <aside class="pwv-toc">
103
+ <div class="pwv-toc-head">${t('pwv.sharedDocuments') || 'Shared documents'}</div>
104
+ <nav class="pwv-toc-list">
105
+ ${docs.map(d => html`
106
+ <button
107
+ class="pwv-toc-item ${docKey(d) === selected ? 'pwv-active' : ''}"
108
+ onClick=${() => setSelected(docKey(d))}
109
+ >${d.title || d.id}</button>
110
+ `)}
111
+ </nav>
112
+ </aside>
113
+
114
+ <main class="pwv-main">
115
+ <div class="pwv-bar">
116
+ <span class="pwv-badge">${t('pwv.publicBadge') || 'Public document'}</span>
117
+ <button class="btn-outline btn-sm pwv-print" onClick=${() => window.print()}>
118
+ ${t('pwv.print') || 'Print / Save as PDF'}
119
+ </button>
120
+ </div>
121
+ ${current
122
+ ? html`<article class="pwv-doc"><${Markdown} text=${current.markdown || ''} onWikiLink=${onWikiLink} /></article>`
123
+ : html`<div class="pwv-state">${t('pwv.selectDocument') || 'Select a document.'}</div>`
124
+ }
125
+ </main>
126
+ </div>
127
+ `;
128
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/workspaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CA+NpF"}
1
+ {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/workspaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAkOpF"}
@@ -35,11 +35,13 @@ export function registerWorkspaceTools(mcp, registry) {
35
35
  return v;
36
36
  };
37
37
  mcp.tool('aimeat_workspace_list', descriptionFor('aimeat_workspace_list'), { organism_id: z.string().describe('Organism id') }, annotationsFor('aimeat_workspace_list'), async ({ organism_id }) => {
38
- const key = `organism.${organism_id}.meta.workspaces`;
39
- const resp = await client.get(`/v1/memory?prefix=${encodeURIComponent(key)}`);
40
- const items = resp.data?.items ?? [];
41
- const reg = items.find(i => i.key === key);
42
- return text({ organism_id, workspaces: reg?.value?.workspaces ?? [] });
38
+ // Membership-gated discovery route (aggregates the registry across all members + resolves access
39
+ // by owner). A raw /v1/memory prefix read is caller-scoped → a sub-agent would see an empty list.
40
+ const resp = await client.get(`/v1/organisms/${encodeURIComponent(organism_id)}/workspaces`);
41
+ if (resp.ok === false)
42
+ return text(resp.error ?? resp, true);
43
+ const workspaces = resp.data?.workspaces ?? [];
44
+ return text({ organism_id, workspaces });
43
45
  });
44
46
  mcp.tool('aimeat_workspace_read', descriptionFor('aimeat_workspace_read'), { organism_id: z.string(), ws: z.string().describe('Workspace id (from aimeat_workspace_list)') }, annotationsFor('aimeat_workspace_read'), async ({ organism_id, ws }) => {
45
47
  const resp = await client.get(`/v1/organisms/${encodeURIComponent(organism_id)}/workspace?ws=${encodeURIComponent(ws)}`);
@@ -89,22 +91,26 @@ export function registerWorkspaceTools(mcp, registry) {
89
91
  organism_id: z.string(), ws: z.string(),
90
92
  name: z.string().optional().describe('New workspace name (synced to manifest + registry)'),
91
93
  readme: z.string().optional().describe('New markdown readme/intro (replaces the current one)'),
92
- manifest: z.any().optional().describe('FULL replacement manifest (objectTypes + policy/gate + settings) as a JSON OBJECT. Read the workspace first, then add/remove an objectType to add/remove a space, or set policy.alwaysGate for the publish gate. The id is preserved.'),
94
+ add_spaces: z.any().optional().describe('ADDITIVE (safe): an ARRAY of objectTypes to UNION into the manifest — the server keeps everything else and skips any whose name/namespace already exists. Pass just { name, namespace, mode } (+ a schema in `schemas`); defaults are filled. Prefer this over `manifest` to add spaces. Cannot remove/rename.'),
95
+ manifest: z.any().optional().describe('FULL replacement manifest (objectTypes + policy/gate + settings) as a JSON OBJECT. For genuine restructuring (rename/remove a space, change policy.alwaysGate). Read the workspace first; the id is preserved.'),
93
96
  schemas: z.any().optional().describe('Map of namespace → JSON Schema (object) to lock (strict) for a records space.'),
94
- }, annotationsFor('aimeat_workspace_update'), async ({ organism_id, ws, name, readme, manifest, schemas }) => {
97
+ }, annotationsFor('aimeat_workspace_update'), async ({ organism_id, ws, name, readme, add_spaces, manifest, schemas }) => {
95
98
  const body = {};
96
99
  if (typeof name === 'string')
97
100
  body.name = name;
98
101
  if (typeof readme === 'string')
99
102
  body.readme = readme;
103
+ const add = parseObj(add_spaces);
104
+ if (Array.isArray(add))
105
+ body.add_spaces = add;
100
106
  const man = parseObj(manifest);
101
107
  if (man !== undefined)
102
108
  body.manifest = man;
103
109
  const sch = parseObj(schemas);
104
110
  if (sch !== undefined)
105
111
  body.schemas = sch;
106
- if (body.name === undefined && body.readme === undefined && body.manifest === undefined && body.schemas === undefined)
107
- return text({ error: 'Provide a name, readme, manifest and/or schemas.' }, true);
112
+ if (body.name === undefined && body.readme === undefined && body.add_spaces === undefined && body.manifest === undefined && body.schemas === undefined)
113
+ return text({ error: 'Provide a name, readme, add_spaces, manifest and/or schemas.' }, true);
108
114
  const r = await client.put(`/v1/organisms/${encodeURIComponent(organism_id)}/workspace?ws=${encodeURIComponent(ws)}`, body);
109
115
  if (r.ok === false)
110
116
  return text({ error: r.error?.message || 'Update failed' }, true);
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/workspaces.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,UAAU,sBAAsB,CAAC,GAAc,EAAE,QAAuB;IAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAU,EAAE,EAAE,CAAC,YAAY,KAAK,MAAM,EAAE,EAAE,CAAC;IACxE,MAAM,IAAI,GAAG,CAAC,GAAY,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAC,CAAC;IACH;6DACyD;IACzD,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,EAAU,EAAW,EAAE;QAC1D,IAAI,CAAC,GAAG,KAAK,CAAC;QACd,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAAC,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,sCAAsC,CAAC,CAAC;QAAC,CAAC;QACvJ,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAI,CAA6B,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC,CAAC;IACF,6FAA6F;IAC7F,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAW,EAAE;QACvC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAAC,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAAC,CAAC;QACrI,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,uBAAuB,CAAC,EACvE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,EACnD,cAAc,CAAC,uBAAuB,CAAC,EACvC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,YAAY,WAAW,kBAAkB,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAI,IAAI,CAAC,IAAsF,EAAE,KAAK,IAAI,EAAE,CAAC;QACxH,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,uBAAuB,CAAC,EACvE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC,EAAE,EACjG,cAAc,CAAC,uBAAuB,CAAC,EACvC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzH,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,cAAc,CAAC,wBAAwB,CAAC,EACzE;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iGAAiG,CAAC;QAC7H,mGAAmG;QACnG,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,yHAAyH,CAAC;QAClJ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2FAA2F,CAAC;QAC/H,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;KAC7G,EACD,cAAc,CAAC,wBAAwB,CAAC,EACxC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3H,MAAM,EAAE,GAAG,CAAE,MAAM,CAAC,IAA2G,EAAE,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAC1L,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,KAAK,sBAAsB,EAAE,EAAE,IAAI,CAAC,CAAC;QACvG,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,KAAK,UAAU,CAAC;QACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,UAAU,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAE,EAA8B,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClK,IAAI,CAAC,UAAU,IAAI,KAAK;YAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjH,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,gEAAgE,EAAE,EAAE,IAAI,CAAC,CAAC;QAChH,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,IAAI,UAAU,QAAQ,CAAC;QAC3E,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACrF,IAAI,EAAE,CAAC,EAAE,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,CAAC;YACnE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpF,MAAM,QAAQ,GAAI,OAAO,CAAC,IAAgI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;YACtN,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YAC1E,IAAI,MAAM,EAAE,CAAC;gBAAC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;gBAAC,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YAAC,CAAC;QAC3M,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,SAAS,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,cAAc,CAAC,0BAA0B,CAAC,EAC7E,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAClF,cAAc,CAAC,0BAA0B,CAAC,EAC1C,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAClH,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAC,yBAAyB,CAAC,EAC3E;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QAC1F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;QAC9F,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uOAAuO,CAAC;QAC9Q,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;KACtH,EACD,cAAc,CAAC,yBAAyB,CAAC,EACzC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7D,MAAM,IAAI,GAA8E,EAAE,CAAC;QAC3F,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAAC,IAAI,GAAG,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC3E,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,GAAG,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACzE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,kDAAkD,EAAE,EAAE,IAAI,CAAC,CAAC;QACxM,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5H,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAG,CAAC,CAAC,KAA0C,EAAE,OAAO,IAAI,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5H,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,cAAc,CAAC,gCAAgC,CAAC,EACzF;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;QACtF,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;KACrF,EACD,cAAc,CAAC,gCAAgC,CAAC,EAChD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,kBAAkB,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QACvF,MAAM,KAAK,GAAI,MAAM,CAAC,IAAkD,EAAE,KAAK,IAAI,EAAE,CAAC;QACtF,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,kBAAkB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3E,IAAI,EAAE,CAAC,EAAE,KAAK,KAAK;oBAAE,OAAO,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;QACD,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,IAAI,6BAA6B,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3G,0FAA0F;QAC1F,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3H,MAAM,EAAE,GAAG,CAAE,MAAM,CAAC,IAA4F,EAAE,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QACpL,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,CAAC;YACnE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpF,MAAM,QAAQ,GAAI,OAAO,CAAC,IAAqG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC;YACrL,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;wBAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;wBAAC,OAAO,GAAG,IAAI,CAAC;oBAAC,CAAC;gBAAC,CAAC;gBAChJ,IAAI,OAAO;oBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAC,yBAAyB,CAAC,EAC3E;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC3C,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;QAC3G,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;QAC3G,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAClE,EACD,cAAc,CAAC,yBAAyB,CAAC,EACzC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAwC,CAAC;QACtE,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,uDAAuD,EAAE,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAA4C,CAAC;QACvF,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,sGAAsG;QACtG,uEAAuE;QACvE,MAAM,aAAa,GAA6D,EAAE,CAAC;QACnF,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACpD,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,kBAAkB,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrJ,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAClH,CAAC;QACD,MAAM,aAAa,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAClF,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1H,IAAI,EAAE,CAAC,EAAE,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,cAAc,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1L,MAAM,MAAM,GAAG,YAAY,WAAW,kBAAkB,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpF,MAAM,UAAU,GAAG,CAAE,OAAO,CAAC,IAAsF,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;QAClL,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACvM,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAG,GAAG,CAAC,WAAkC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;IACpI,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAC,yBAAyB,CAAC,EAC3E;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACvC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,sIAAsI,CAAC;QAC9L,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAClF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACxF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;KAC3F,EACD,cAAc,CAAC,yBAAyB,CAAC,EACzC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QAClE,MAAM,OAAO,GAAG,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,mBAAmB,CAAC;QACpF,IAAI,IAAI,CAAC;QACT,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,OAAO,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnF,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,WAAW,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACzH,CAAC;aAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,GAA4B,EAAE,EAAE,EAAE,CAAC;YAC7C,IAAI,OAAO,IAAI,IAAI;gBAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAC5C,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,+CAA+C,EAAE,EAAE,IAAI,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,cAAc,CAAC,2BAA2B,CAAC,EAC/E;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,mFAAmF,CAAC;QACrI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACpF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;KACrG,EACD,cAAc,CAAC,2BAA2B,CAAC,EAC3C,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACnD,IAAI,IAAI,CAAC;QACT,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAAE,IAAI,CAAC,CAAC;YACxE,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAC1I,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,EAAE,IAAI,CAAC,CAAC;YACtF,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAChH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/workspaces.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-call.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/tool-call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAA0D,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC/H,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAA+B,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEpF,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,UAAU,wBAAwB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9E;AAED,UAAU,eAAe;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACrB;AAkHD,eAAO,MAAM,iBAAiB,EAAE,wBAAwB,EA24BvD,CAAC;AAyDF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAS/D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAahE;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD5G"}
1
+ {"version":3,"file":"tool-call.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/tool-call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAA0D,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC/H,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAA+B,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEpF,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,UAAU,wBAAwB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9E;AAED,UAAU,eAAe;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACrB;AAkHD,eAAO,MAAM,iBAAiB,EAAE,wBAAwB,EA64BvD,CAAC;AAyDF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAS/D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAahE;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD5G"}
@@ -761,15 +761,16 @@ export const CONNECT_CLI_TOOLS = [
761
761
  // schema validation, the creator-gate, and the publish gate — so authz is unchanged here) ──
762
762
  {
763
763
  name: 'aimeat_workspace_list',
764
+ // The membership-gated discovery route aggregates the registry across ALL member identities and
765
+ // resolves access by owner — a raw /v1/memory prefix read is caller-scoped, so a sub-agent (whose
766
+ // identity ≠ the owner that wrote the registry) would see an empty list.
764
767
  handler: async ({ client }, input) => {
765
768
  const orgId = requiredString(input, 'organism_id');
766
- const key = `organism.${orgId}.meta.workspaces`;
767
- const resp = await client.get(`/v1/memory${query({ prefix: key })}`);
769
+ const resp = await client.get(`/v1/organisms/${encodeURIComponent(orgId)}/workspaces`);
768
770
  if (!resp.ok)
769
771
  return resp;
770
- const items = resp.data?.items ?? [];
771
- const reg = items.find(i => i.key === key);
772
- return { ok: true, data: { organism_id: orgId, workspaces: reg?.value?.workspaces ?? [] } };
772
+ const workspaces = resp.data?.workspaces ?? [];
773
+ return { ok: true, data: { organism_id: orgId, workspaces } };
773
774
  },
774
775
  },
775
776
  {
@@ -828,12 +829,15 @@ export const CONNECT_CLI_TOOLS = [
828
829
  body.name = input.name;
829
830
  if (typeof input.readme === 'string')
830
831
  body.readme = input.readme;
832
+ const add = coerceObject(input.add_spaces);
833
+ if (Array.isArray(add))
834
+ body.add_spaces = add;
831
835
  if (input.manifest !== undefined)
832
836
  body.manifest = coerceObject(input.manifest);
833
837
  if (input.schemas !== undefined)
834
838
  body.schemas = coerceObject(input.schemas);
835
839
  if (Object.keys(body).length === 0)
836
- throw new Error('Provide a name, readme, manifest and/or schemas.');
840
+ throw new Error('Provide a name, readme, add_spaces, manifest and/or schemas.');
837
841
  return client.put(`/v1/organisms/${encodeURIComponent(requiredString(input, 'organism_id'))}/workspace${query({ ws: requiredString(input, 'ws') })}`, body);
838
842
  },
839
843
  },