aimeat 1.29.0 → 1.30.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/dist/locales/en.json +25 -1
- package/dist/locales/fi.json +25 -1
- package/dist/public/css/views/inbox.css +62 -1
- package/dist/public/css/views/profile.css +18 -2
- package/dist/public/js/services/messages.js +4 -3
- package/dist/public/llms-template.txt +38 -1
- package/dist/public/views/profile/agents-tab.js +1 -0
- package/dist/public/views/profile/inbox-tab.js +175 -28
- package/dist/public/views/profile/landing-page.js +67 -0
- package/dist/public/views/profile/organisms-tab.js +61 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts +13 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.js +62 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/index.js +2 -0
- package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +194 -2
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/generated/prisma-postgres/edge.js +4 -3
- package/dist/src/generated/prisma-postgres/index-browser.js +1 -0
- package/dist/src/generated/prisma-postgres/index.d.ts +30 -1
- package/dist/src/generated/prisma-postgres/index.js +4 -3
- package/dist/src/generated/prisma-postgres/package.json +1 -1
- package/dist/src/generated/prisma-postgres/schema.prisma +1 -0
- package/dist/src/generated/prisma-postgres/wasm.js +4 -3
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +3 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions.js +33 -0
- package/dist/src/mcp/catalog/definitions.js.map +1 -1
- package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
- package/dist/src/mcp/catalog/scopes.js +6 -1
- package/dist/src/mcp/catalog/scopes.js.map +1 -1
- package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
- package/dist/src/mcp/catalog/surfaces.js +1 -0
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/dm-messages.d.ts +20 -0
- package/dist/src/mcp/dm-messages.d.ts.map +1 -0
- package/dist/src/mcp/dm-messages.js +120 -0
- package/dist/src/mcp/dm-messages.js.map +1 -0
- package/dist/src/mcp/index.d.ts +2 -1
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +3 -1
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/models/message-schemas.d.ts +3 -0
- package/dist/src/models/message-schemas.d.ts.map +1 -1
- package/dist/src/models/message-schemas.js +4 -0
- package/dist/src/models/message-schemas.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts.map +1 -1
- package/dist/src/routes/app-grants.js +2 -0
- package/dist/src/routes/app-grants.js.map +1 -1
- package/dist/src/routes/bootstrap.js +1 -1
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/catalogue.d.ts.map +1 -1
- package/dist/src/routes/catalogue.js +17 -8
- package/dist/src/routes/catalogue.js.map +1 -1
- package/dist/src/routes/federation-sync.d.ts.map +1 -1
- package/dist/src/routes/federation-sync.js +1 -0
- package/dist/src/routes/federation-sync.js.map +1 -1
- package/dist/src/routes/memory.d.ts.map +1 -1
- package/dist/src/routes/memory.js +10 -3
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/messages.d.ts.map +1 -1
- package/dist/src/routes/messages.js +22 -19
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/public-stats.d.ts +2 -0
- package/dist/src/routes/public-stats.d.ts.map +1 -1
- package/dist/src/routes/public-stats.js +93 -104
- package/dist/src/routes/public-stats.js.map +1 -1
- package/dist/src/routes/stats.d.ts.map +1 -1
- package/dist/src/routes/stats.js +6 -0
- package/dist/src/routes/stats.js.map +1 -1
- package/dist/src/routes/usage.d.ts +17 -0
- package/dist/src/routes/usage.d.ts.map +1 -0
- package/dist/src/routes/usage.js +35 -0
- package/dist/src/routes/usage.js.map +1 -0
- package/dist/src/routes/wallet.d.ts +2 -0
- package/dist/src/routes/wallet.d.ts.map +1 -1
- package/dist/src/routes/wallet.js +13 -6
- package/dist/src/routes/wallet.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +18 -2
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/services/cache.d.ts +61 -0
- package/dist/src/services/cache.d.ts.map +1 -0
- package/dist/src/services/cache.js +143 -0
- package/dist/src/services/cache.js.map +1 -0
- package/dist/src/services/message-delivery.d.ts.map +1 -1
- package/dist/src/services/message-delivery.js +1 -0
- package/dist/src/services/message-delivery.js.map +1 -1
- package/dist/src/services/message-send.d.ts +13 -0
- package/dist/src/services/message-send.d.ts.map +1 -1
- package/dist/src/services/message-send.js +28 -5
- package/dist/src/services/message-send.js.map +1 -1
- package/dist/src/services/usage-summary.d.ts +77 -0
- package/dist/src/services/usage-summary.d.ts.map +1 -0
- package/dist/src/services/usage-summary.js +85 -0
- package/dist/src/services/usage-summary.js.map +1 -0
- package/dist/src/storage/interface.d.ts +5 -1
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +15 -0
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +49 -1
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +15 -0
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +16 -2
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts +15 -0
- package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.js +28 -2
- package/dist/src/storage/providers/sqlite/repos/direct-message.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +4 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/direct-message.repository.d.ts +20 -0
- package/dist/src/storage/repositories/direct-message.repository.d.ts.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.postgres.prisma +1 -0
- package/prisma/schema.prisma +1 -0
|
@@ -15,6 +15,9 @@
|
|
|
15
15
|
* - PresencePill + PresenceDialog — header status pill that opens the availability settings dialog
|
|
16
16
|
* - LandingPage — main orchestrator (default export)
|
|
17
17
|
* @version-history
|
|
18
|
+
* v3.8.0 — 2026-06-22 — Home UsageCard: quota usage bars (memory / files / micro-memory) + resource
|
|
19
|
+
* counts (agents, organisms, apps, connected apps, extensions, cortexes, services), backed by the
|
|
20
|
+
* cached GET /v1/owner/usage endpoint (60s server-side TTL).
|
|
18
21
|
* v3.7.0 — 2026-06-22 — WaitingForYou uses one getWaiting() call (server-aggregated) instead of the
|
|
19
22
|
* per-organism listApprovals + listJoinRequests + listWorkspaces fan-out.
|
|
20
23
|
* v3.6.0 — 2026-06-21 — Change-password modal handles OAuth accounts with no password yet
|
|
@@ -555,6 +558,69 @@ function AgentsCard({ owner }) {
|
|
|
555
558
|
`;
|
|
556
559
|
}
|
|
557
560
|
|
|
561
|
+
/* "Usage" — quota usage bars (memory / storage / micro-memory) + resource counts. Backed by the
|
|
562
|
+
* cached GET /v1/owner/usage endpoint (60s server-side TTL), so it's cheap to refetch on each
|
|
563
|
+
* live-update. Surfaces the same kind of quota bar the Memory tab shows, for the whole account. */
|
|
564
|
+
function fmtBytes(n) {
|
|
565
|
+
if (n == null) return '';
|
|
566
|
+
if (n < 1024) return n + ' B';
|
|
567
|
+
if (n < 1024 * 1024) return (n / 1024).toFixed(n < 10240 ? 1 : 0) + ' KB';
|
|
568
|
+
if (n < 1024 * 1024 * 1024) return (n / (1024 * 1024)).toFixed(1) + ' MB';
|
|
569
|
+
return (n / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
function UsageCard({ switchTab }) {
|
|
573
|
+
const [u, setU] = useState(null);
|
|
574
|
+
const load = useCallback(async () => {
|
|
575
|
+
try { const r = await apiGet('/v1/owner/usage'); setU(r?.data || null); } catch { setU(null); }
|
|
576
|
+
}, []);
|
|
577
|
+
useEffect(() => { load(); }, [load]);
|
|
578
|
+
const liveRef = useRef(load); liveRef.current = load;
|
|
579
|
+
useEffect(() => onLiveUpdate(['memory', 'files', 'agents', 'apps', 'organisms'], () => liveRef.current()), []);
|
|
580
|
+
|
|
581
|
+
if (!u) return null;
|
|
582
|
+
|
|
583
|
+
const bar = (label, q, usedText) => {
|
|
584
|
+
const pct = q.percent >= 0 ? Math.max(0, Math.min(100, q.percent)) : 0;
|
|
585
|
+
return html`
|
|
586
|
+
<div class="pf-usage-row">
|
|
587
|
+
<div class="pf-usage-head">
|
|
588
|
+
<span class="pf-usage-label">${label}</span>
|
|
589
|
+
<span class="text-meta-sm">${usedText}</span>
|
|
590
|
+
</div>
|
|
591
|
+
<div class="pf-usage-bar"><div class="pf-usage-fill ${pct >= 90 ? 'pf-usage-fill--danger' : ''}" style=${`width:${pct}%`}></div></div>
|
|
592
|
+
</div>`;
|
|
593
|
+
};
|
|
594
|
+
|
|
595
|
+
const chip = (label, value, tab) => html`
|
|
596
|
+
<button class="pf-usage-chip" onClick=${tab ? () => switchTab(tab) : undefined} disabled=${!tab}>
|
|
597
|
+
<span class="pf-usage-chip-val">${value}</span>
|
|
598
|
+
<span class="pf-usage-chip-label">${label}</span>
|
|
599
|
+
</button>`;
|
|
600
|
+
|
|
601
|
+
const c = u.counts;
|
|
602
|
+
return html`
|
|
603
|
+
<div class="pf-home-card pf-usage-card">
|
|
604
|
+
<div class="pf-home-card-title">${t('profile.landing.usageTitle') || 'Usage & quotas'}</div>
|
|
605
|
+
${bar(t('profile.landing.usageMemory') || 'Memory', u.memory,
|
|
606
|
+
`${u.memory.used_keys}/${u.memory.max_keys} ${t('profile.memory.keysWord') || 'keys'} · ${fmtBytes(u.memory.used_bytes)} / ${fmtBytes(u.memory.max_bytes)}`)}
|
|
607
|
+
${bar(t('profile.landing.usageStorage') || 'Files', u.storage,
|
|
608
|
+
`${u.storage.used_files} ${t('profile.landing.usageFilesWord') || 'files'} · ${fmtBytes(u.storage.used_bytes)} / ${fmtBytes(u.storage.max_bytes)}`)}
|
|
609
|
+
${bar(t('profile.landing.usageMicro') || 'Micro-memory', u.micro_memory,
|
|
610
|
+
`${u.micro_memory.used_sets}/${u.micro_memory.max_sets} ${t('profile.landing.usageSetsWord') || 'sets'} · ${fmtBytes(u.micro_memory.used_bytes)} / ${fmtBytes(u.micro_memory.max_bytes)}`)}
|
|
611
|
+
<div class="pf-usage-chips">
|
|
612
|
+
${chip(t('profile.landing.usageAgents') || 'Agents', c.agents, 'agents')}
|
|
613
|
+
${chip(t('profile.landing.usageOrganisms') || 'Organisms', c.organisms, 'organisms')}
|
|
614
|
+
${chip(t('profile.landing.usageApps') || 'Apps', `${c.apps.used}/${c.apps.max}`, 'apps')}
|
|
615
|
+
${chip(t('profile.landing.usageEcoApps') || 'Connected apps', c.ecosystem_apps, 'ecosystem')}
|
|
616
|
+
${chip(t('profile.landing.usageExtensions') || 'Extensions', `${c.extensions.used}/${c.extensions.max}`, 'extensions')}
|
|
617
|
+
${chip(t('profile.landing.usageCortexes') || 'Cortexes', c.cortexes, 'extensions')}
|
|
618
|
+
${chip(t('profile.landing.usageServices') || 'Services', `${c.services.used}/${c.services.max}`, 'offers')}
|
|
619
|
+
</div>
|
|
620
|
+
</div>
|
|
621
|
+
`;
|
|
622
|
+
}
|
|
623
|
+
|
|
558
624
|
/* "Presence" — the owner's own availability control. Lives as a compact status
|
|
559
625
|
* pill in the ProfileCard header (<PresencePill>); clicking it opens the settings
|
|
560
626
|
* <PresenceDialog>. The dot the pill shows is the same <PresenceDot> rendered next
|
|
@@ -1182,6 +1248,7 @@ export default function LandingPage({ tier, stats, session, navigate, showToast,
|
|
|
1182
1248
|
<${NextSteps} switchTab=${(id) => open(id, 'main')}
|
|
1183
1249
|
hasApps=${appsLoaded ? apps.length > 0 : undefined} />
|
|
1184
1250
|
<div class="pf-home-grid">
|
|
1251
|
+
<${UsageCard} switchTab=${(id) => open(id, 'main')} />
|
|
1185
1252
|
<${ContinueCard} />
|
|
1186
1253
|
<${AgentsCard} owner=${owner} />
|
|
1187
1254
|
</div>
|
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
* import OrganismsTab from '/views/profile/organisms-tab.js';
|
|
18
18
|
* <OrganismsTab session={session} showToast={showToast} onStats={onStats} />
|
|
19
19
|
* @version-history
|
|
20
|
+
* v2.2.0 — 2026-06-22 — Cross-organism content search on the list view: one box searches ALL my
|
|
21
|
+
* organisms (indexed librarian FTS), results grouped per organism; a hit opens that organism +
|
|
22
|
+
* workspace with the in-workspace search pre-filled. Also listens for the Cmd-K aimeat-open-organism.
|
|
20
23
|
* v2.1.0 — 2026-06-22 — Workspace counts come inline via listOrganisms({include:'counts'}) instead
|
|
21
24
|
* of a per-organism discoverWorkspaces fan-out.
|
|
22
25
|
* v1.31.1 — 2026-06-19 — JSDoc type annotations for frontend type-checking.
|
|
@@ -34,6 +37,8 @@ import { onLiveUpdate } from '/lib/live-updates.js';
|
|
|
34
37
|
const html = htm.bind(h);
|
|
35
38
|
import { t } from '/js/i18n.js';
|
|
36
39
|
import { Spinner, KebabMenu } from './shared.js';
|
|
40
|
+
import { SearchBar } from '/components/SearchBar.js';
|
|
41
|
+
import { EmptyState } from '/components/EmptyState.js';
|
|
37
42
|
import { useConfirm } from '/components/Modal.js';
|
|
38
43
|
import * as orgService from '/js/services/organisms.js';
|
|
39
44
|
import * as memoryService from '/js/services/memory.js';
|
|
@@ -58,6 +63,12 @@ export default function OrganismsTab({ session, showToast, onStats }) {
|
|
|
58
63
|
const [sortMode, setSortMode] = useState('custom');
|
|
59
64
|
const [customOrder, setCustomOrder] = useState([]);
|
|
60
65
|
const [openSettings, setOpenSettings] = useState(false); // open OrganismHome with the Settings panel showing
|
|
66
|
+
// Cross-organism content search (all my organisms at once) — indexed librarian FTS, grouped per
|
|
67
|
+
// organism. Replaces the org lists while a query is active; a hit opens that organism + workspace
|
|
68
|
+
// with the in-workspace search pre-filled to the same query.
|
|
69
|
+
const [gQuery, setGQuery] = useState('');
|
|
70
|
+
const [gHits, setGHits] = useState(null); // null = not searching
|
|
71
|
+
const [gBusy, setGBusy] = useState(false);
|
|
61
72
|
const dragIdRef = useRef(null);
|
|
62
73
|
const [dragOverId, setDragOverId] = useState(null);
|
|
63
74
|
|
|
@@ -184,6 +195,19 @@ export default function OrganismsTab({ session, showToast, onStats }) {
|
|
|
184
195
|
return () => window.removeEventListener('aimeat-open-organism', onOpen);
|
|
185
196
|
}, []);
|
|
186
197
|
|
|
198
|
+
// Cross-organism content search (debounced) — librarian FTS across all my own content.
|
|
199
|
+
useEffect(() => {
|
|
200
|
+
const query = gQuery.trim();
|
|
201
|
+
if (query.length < 2) { setGHits(null); setGBusy(false); return undefined; }
|
|
202
|
+
let cancelled = false;
|
|
203
|
+
setGBusy(true);
|
|
204
|
+
const tid = setTimeout(async () => {
|
|
205
|
+
const hits = await memoryService.librarianSearch(query, 60, 'own').catch(() => []);
|
|
206
|
+
if (!cancelled) { setGHits(hits || []); setGBusy(false); }
|
|
207
|
+
}, 220);
|
|
208
|
+
return () => { cancelled = true; clearTimeout(tid); };
|
|
209
|
+
}, [gQuery]);
|
|
210
|
+
|
|
187
211
|
// Live update listener
|
|
188
212
|
const liveRef = useRef(loadData);
|
|
189
213
|
liveRef.current = loadData;
|
|
@@ -376,6 +400,20 @@ export default function OrganismsTab({ session, showToast, onStats }) {
|
|
|
376
400
|
|
|
377
401
|
if (!myOrganisms) return html`<${Spinner} text=${t('organisms.loading') || 'Loading organisms...'} />`;
|
|
378
402
|
|
|
403
|
+
// Open a cross-organism search hit: jump to its organism + workspace, pre-filling the in-workspace
|
|
404
|
+
// search with the query so you land on the filtered result list (reuses Kerros 1).
|
|
405
|
+
const openGHit = (hit) => {
|
|
406
|
+
try { if (hit.workspaceId) sessionStorage.setItem(`aimeat.ws.${hit.organismId}.${hit.workspaceId}.search`, gQuery.trim()); } catch { /* noop */ }
|
|
407
|
+
setOpenId(hit.organismId);
|
|
408
|
+
setOpenWs(hit.workspaceId || null);
|
|
409
|
+
setOpenSettings(false);
|
|
410
|
+
};
|
|
411
|
+
// Group the librarian hits under each organism (name from my list / discover), for the results view.
|
|
412
|
+
const orgNameOf = (id) => (myOrganisms || []).find(o => o.id === id)?.name
|
|
413
|
+
|| publicOrganisms.find(o => o.id === id)?.name || id;
|
|
414
|
+
const gGroups = {};
|
|
415
|
+
for (const hh of (gHits || [])) { if (!hh.organismId) continue; (gGroups[hh.organismId] = gGroups[hh.organismId] || []).push(hh); }
|
|
416
|
+
|
|
379
417
|
return html`
|
|
380
418
|
<div class="section-title">${t('organisms.title') || 'Organisms'}</div>
|
|
381
419
|
<div class="section-desc">${t('organisms.desc') || 'Organisms are groups — communities, teams, clubs, or projects. Create one or join existing ones to share knowledge, coordinate work, and build together.'}</div>
|
|
@@ -427,6 +465,28 @@ export default function OrganismsTab({ session, showToast, onStats }) {
|
|
|
427
465
|
`}
|
|
428
466
|
</div>
|
|
429
467
|
|
|
468
|
+
<!-- Cross-organism content search: one box over ALL my organisms, results grouped per organism -->
|
|
469
|
+
<div class="pj-org-globalsearch">
|
|
470
|
+
<${SearchBar} value=${gQuery} onInput=${e => setGQuery(e.target.value)}
|
|
471
|
+
placeholder=${t('search.allOrgsPlaceholder') || 'Search across all organisms…'} ariaLabel=${t('search.allOrgsPlaceholder') || 'Search across all organisms'} />
|
|
472
|
+
${gHits !== null ? html`<button class="btn-ghost btn-sm" onClick=${() => setGQuery('')}>${t('search.clear') || 'Clear'}</button>` : null}
|
|
473
|
+
</div>
|
|
474
|
+
|
|
475
|
+
${gHits !== null ? html`
|
|
476
|
+
<div class="pj-search-results">
|
|
477
|
+
${gBusy && !gHits.length ? html`<${Spinner} text=${t('search.searching') || 'Searching…'} />` : null}
|
|
478
|
+
${!gHits.length && !gBusy ? html`<${EmptyState} text=${t('search.noMatches') || 'No matches'} />` : null}
|
|
479
|
+
${Object.entries(gGroups).map(([orgId, hits]) => html`
|
|
480
|
+
<div class="pj-search-group" key=${orgId}>
|
|
481
|
+
<div class="pj-search-group-head">${orgNameOf(orgId)}<span class="pj-org-tab-count">${hits.length}</span></div>
|
|
482
|
+
${hits.map(hh => html`
|
|
483
|
+
<button class="pj-search-hit" key=${hh.key} onClick=${() => openGHit(hh)}>
|
|
484
|
+
<span class="pj-search-hit-title">${hh.title || hh.key}${hh.workspaceId ? html` <span class="pj-mini">· ${hh.workspaceId}</span>` : null}</span>
|
|
485
|
+
<span class="pj-search-hit-snippet">${hh.snippet || ''}</span>
|
|
486
|
+
</button>`)}
|
|
487
|
+
</div>`)}
|
|
488
|
+
</div>
|
|
489
|
+
` : html`
|
|
430
490
|
<!-- Incoming invitations -->
|
|
431
491
|
<${IncomingInvitations} showToast=${showToast} onChanged=${loadData} />
|
|
432
492
|
|
|
@@ -460,6 +520,7 @@ export default function OrganismsTab({ session, showToast, onStats }) {
|
|
|
460
520
|
<div class="section-title section-title-spaced">${t('organisms.discover') || 'Discover'}</div>
|
|
461
521
|
<div class="pj-org-list">${publicOrganisms.map(org => renderOrgRow(org, false))}</div>
|
|
462
522
|
`}
|
|
523
|
+
`}
|
|
463
524
|
<${ConfirmUI} />
|
|
464
525
|
`;
|
|
465
526
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file dm-messages.ts
|
|
3
|
+
* @description Connector MCP tools for the FEDERATED direct-message inbox ("Postilaatikko") — send a DM
|
|
4
|
+
* from the connected agent to anyone on the network, and read replies addressed to it. Thin proxies to
|
|
5
|
+
* the node REST API (POST /v1/messages, GET /v1/messages/agent-inbox|agent-thread). Distinct from the
|
|
6
|
+
* agent↔owner dashboard tools in agent-messages.ts. Mirrors the server MCP surface (src/mcp/dm-messages.ts).
|
|
7
|
+
* @version-history
|
|
8
|
+
* v1.0.0 -- 2026-06-22 -- Initial: aimeat_dm_send / aimeat_dm_inbox / aimeat_dm_thread.
|
|
9
|
+
*/
|
|
10
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
11
|
+
import type { AgentRegistry } from '../../agent-registry.js';
|
|
12
|
+
export declare function registerDmMessagesTools(mcp: McpServer, registry: AgentRegistry): void;
|
|
13
|
+
//# sourceMappingURL=dm-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dm-messages.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/dm-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAK7D,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAkDrF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { agentNameSchema, pickAgent } from './_registry.js';
|
|
3
|
+
import { annotationsFor } from '../../../../mcp/annotations.js';
|
|
4
|
+
import { descriptionFor } from '../../../../mcp/catalog/shape.js';
|
|
5
|
+
export function registerDmMessagesTools(mcp, registry) {
|
|
6
|
+
mcp.tool('aimeat_dm_send', descriptionFor('aimeat_dm_send'), {
|
|
7
|
+
agent_name: agentNameSchema,
|
|
8
|
+
to: z.string().describe('Recipient: owner@node, agent#owner@node, or eco:app#owner@node.'),
|
|
9
|
+
body: z.string().optional().describe('Message body (GFM markdown). Optional if you attach a file.'),
|
|
10
|
+
reply_to: z.string().optional().describe('Id of a message you are replying to (keeps the thread).'),
|
|
11
|
+
subject: z.string().optional().describe('Open a NEW topic thread with this title.'),
|
|
12
|
+
conversation_id: z.string().optional().describe('Continue a specific existing thread by id.'),
|
|
13
|
+
attachments: z.array(z.record(z.string(), z.unknown())).optional().describe('Up to 20 { storage_key, mime, kind, size, name } descriptors (upload files first via aimeat_storage_upload).'),
|
|
14
|
+
}, annotationsFor('aimeat_dm_send'), async ({ agent_name, to, body, reply_to, subject, conversation_id, attachments }) => {
|
|
15
|
+
const { client } = pickAgent(registry, agent_name);
|
|
16
|
+
const payload = { to };
|
|
17
|
+
if (body)
|
|
18
|
+
payload.body = body;
|
|
19
|
+
if (reply_to)
|
|
20
|
+
payload.reply_to = reply_to;
|
|
21
|
+
if (subject)
|
|
22
|
+
payload.subject = subject;
|
|
23
|
+
if (conversation_id)
|
|
24
|
+
payload.conversation_id = conversation_id;
|
|
25
|
+
if (attachments)
|
|
26
|
+
payload.attachments = attachments;
|
|
27
|
+
const resp = await client.post('/v1/messages', payload);
|
|
28
|
+
return { content: [{ type: 'text', text: JSON.stringify(resp.data ?? resp, null, 2) }] };
|
|
29
|
+
});
|
|
30
|
+
mcp.tool('aimeat_dm_inbox', descriptionFor('aimeat_dm_inbox'), {
|
|
31
|
+
agent_name: agentNameSchema,
|
|
32
|
+
page: z.number().int().positive().optional().describe('Page number (default 1)'),
|
|
33
|
+
per_page: z.number().int().positive().max(100).optional().describe('Messages per page (default 20, max 100)'),
|
|
34
|
+
}, annotationsFor('aimeat_dm_inbox'), async ({ agent_name, page, per_page }) => {
|
|
35
|
+
const { client } = pickAgent(registry, agent_name);
|
|
36
|
+
const params = new URLSearchParams();
|
|
37
|
+
if (page)
|
|
38
|
+
params.set('page', String(page));
|
|
39
|
+
if (per_page)
|
|
40
|
+
params.set('per_page', String(per_page));
|
|
41
|
+
const qs = params.toString();
|
|
42
|
+
const resp = await client.get(`/v1/messages/agent-inbox${qs ? '?' + qs : ''}`);
|
|
43
|
+
return { content: [{ type: 'text', text: JSON.stringify(resp.data ?? resp, null, 2) }] };
|
|
44
|
+
});
|
|
45
|
+
mcp.tool('aimeat_dm_thread', descriptionFor('aimeat_dm_thread'), {
|
|
46
|
+
agent_name: agentNameSchema,
|
|
47
|
+
conversation_id: z.string().describe('Conversation id (from aimeat_dm_inbox or aimeat_dm_send).'),
|
|
48
|
+
page: z.number().int().positive().optional().describe('Page number (default 1)'),
|
|
49
|
+
per_page: z.number().int().positive().max(200).optional().describe('Messages per page (default 50, max 200)'),
|
|
50
|
+
}, annotationsFor('aimeat_dm_thread'), async ({ agent_name, conversation_id, page, per_page }) => {
|
|
51
|
+
const { client } = pickAgent(registry, agent_name);
|
|
52
|
+
const params = new URLSearchParams();
|
|
53
|
+
if (page)
|
|
54
|
+
params.set('page', String(page));
|
|
55
|
+
if (per_page)
|
|
56
|
+
params.set('per_page', String(per_page));
|
|
57
|
+
const qs = params.toString();
|
|
58
|
+
const resp = await client.get(`/v1/messages/agent-thread/${encodeURIComponent(conversation_id)}${qs ? '?' + qs : ''}`);
|
|
59
|
+
return { content: [{ type: 'text', text: JSON.stringify(resp.data ?? resp, null, 2) }] };
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=dm-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dm-messages.js","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/dm-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA6B7D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CA2B9E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { registerCoreTools } from './core.js';
|
|
2
2
|
import { registerAgentTasksTools } from './agent-tasks.js';
|
|
3
3
|
import { registerAgentMessagesTools } from './agent-messages.js';
|
|
4
|
+
import { registerDmMessagesTools } from './dm-messages.js';
|
|
4
5
|
import { registerAgentCapsTools } from './agent-caps.js';
|
|
5
6
|
import { registerAgentManagementTools } from './agent-management.js';
|
|
6
7
|
import { registerAgentTelemetryTools } from './agent-telemetry.js';
|
|
@@ -27,6 +28,7 @@ export function registerAllTools(mcp, registry) {
|
|
|
27
28
|
registerCoreTools(mcp, registry);
|
|
28
29
|
registerAgentTasksTools(mcp, registry);
|
|
29
30
|
registerAgentMessagesTools(mcp, registry);
|
|
31
|
+
registerDmMessagesTools(mcp, registry);
|
|
30
32
|
registerAgentCapsTools(mcp, registry);
|
|
31
33
|
registerAgentManagementTools(mcp, registry);
|
|
32
34
|
registerAgentTelemetryTools(mcp, registry);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2750,6 +2750,26 @@ export interface paths {
|
|
|
2750
2750
|
patch?: never;
|
|
2751
2751
|
trace?: never;
|
|
2752
2752
|
};
|
|
2753
|
+
"/v1/owner/usage": {
|
|
2754
|
+
parameters: {
|
|
2755
|
+
query?: never;
|
|
2756
|
+
header?: never;
|
|
2757
|
+
path?: never;
|
|
2758
|
+
cookie?: never;
|
|
2759
|
+
};
|
|
2760
|
+
/**
|
|
2761
|
+
* Owner usage & quota summary
|
|
2762
|
+
* @description Quota usage (memory, files, micro-memory), resource counts (agents, organisms, apps, connected apps, extensions, cortexes, services) and morsel balance for the authenticated owner, in one call. Served from a 60-second in-memory cache so the profile dashboard can poll it cheaply without re-scanning the owner's keyspace on every visit.
|
|
2763
|
+
*/
|
|
2764
|
+
get: operations["getOwnerUsage"];
|
|
2765
|
+
put?: never;
|
|
2766
|
+
post?: never;
|
|
2767
|
+
delete?: never;
|
|
2768
|
+
options?: never;
|
|
2769
|
+
head?: never;
|
|
2770
|
+
patch?: never;
|
|
2771
|
+
trace?: never;
|
|
2772
|
+
};
|
|
2753
2773
|
"/v1/wallet": {
|
|
2754
2774
|
parameters: {
|
|
2755
2775
|
query?: never;
|
|
@@ -10518,6 +10538,43 @@ export interface paths {
|
|
|
10518
10538
|
patch?: never;
|
|
10519
10539
|
trace?: never;
|
|
10520
10540
|
};
|
|
10541
|
+
"/v1/messages/agent-inbox": {
|
|
10542
|
+
parameters: {
|
|
10543
|
+
query?: never;
|
|
10544
|
+
header?: never;
|
|
10545
|
+
path?: never;
|
|
10546
|
+
cookie?: never;
|
|
10547
|
+
};
|
|
10548
|
+
/**
|
|
10549
|
+
* List federated DMs addressed to the calling agent (recipient = the agent)
|
|
10550
|
+
* @description Messages sent to an agent/eco identity are delivered to its owner's mailbox, so the agent cannot see them via the owner-only inbox. This returns messages where recipientGhii is the calling agent. Requires an external principal (agent/eco/app) with the messages:read scope.
|
|
10551
|
+
*/
|
|
10552
|
+
get: operations["listAgentDmInbox"];
|
|
10553
|
+
put?: never;
|
|
10554
|
+
post?: never;
|
|
10555
|
+
delete?: never;
|
|
10556
|
+
options?: never;
|
|
10557
|
+
head?: never;
|
|
10558
|
+
patch?: never;
|
|
10559
|
+
trace?: never;
|
|
10560
|
+
};
|
|
10561
|
+
"/v1/messages/agent-thread/{conversationId}": {
|
|
10562
|
+
parameters: {
|
|
10563
|
+
query?: never;
|
|
10564
|
+
header?: never;
|
|
10565
|
+
path?: never;
|
|
10566
|
+
cookie?: never;
|
|
10567
|
+
};
|
|
10568
|
+
/** Full DM thread as the calling agent sees it (sent + received) */
|
|
10569
|
+
get: operations["getAgentDmThread"];
|
|
10570
|
+
put?: never;
|
|
10571
|
+
post?: never;
|
|
10572
|
+
delete?: never;
|
|
10573
|
+
options?: never;
|
|
10574
|
+
head?: never;
|
|
10575
|
+
patch?: never;
|
|
10576
|
+
trace?: never;
|
|
10577
|
+
};
|
|
10521
10578
|
"/v1/messages/inbox": {
|
|
10522
10579
|
parameters: {
|
|
10523
10580
|
query?: never;
|
|
@@ -13260,6 +13317,8 @@ export interface components {
|
|
|
13260
13317
|
/** @description Whose mailbox copy this row is. */
|
|
13261
13318
|
ownerGhii?: string;
|
|
13262
13319
|
conversationId?: string;
|
|
13320
|
+
/** @description Topic thread title (present only on subject threads). */
|
|
13321
|
+
subject?: string;
|
|
13263
13322
|
senderGhii?: string;
|
|
13264
13323
|
recipientGhii?: string;
|
|
13265
13324
|
/** @description GFM markdown; inline media via cid:{attachmentId}. */
|
|
@@ -13296,14 +13355,18 @@ export interface components {
|
|
|
13296
13355
|
/** Format: date-time */
|
|
13297
13356
|
createdAt?: string;
|
|
13298
13357
|
};
|
|
13299
|
-
/** @description Request body for sending a direct message. */
|
|
13358
|
+
/** @description Request body for sending a direct message. The recipient may be a human GHII (owner@node), an agent GAII (agent#owner@node) or an app GEAI (eco:app#owner@node); messages to an agent/app are delivered to that identity's owner inbox. */
|
|
13300
13359
|
DirectMessageSend: {
|
|
13301
|
-
/** @description Recipient
|
|
13360
|
+
/** @description Recipient GHII/GAII/GEAI (owner@node */
|
|
13302
13361
|
to: string;
|
|
13303
13362
|
/** @description GFM markdown. May be empty if attachment-only. */
|
|
13304
13363
|
body?: string;
|
|
13305
13364
|
/** Format: uuid */
|
|
13306
13365
|
reply_to?: string;
|
|
13366
|
+
/** @description Continue a specific thread by id. Omit for the default per-pair thread. */
|
|
13367
|
+
conversation_id?: string;
|
|
13368
|
+
/** @description Open a NEW topic thread with this title (a fresh conversation id is minted). */
|
|
13369
|
+
subject?: string;
|
|
13307
13370
|
attachments?: {
|
|
13308
13371
|
storage_key: string;
|
|
13309
13372
|
mime: string;
|
|
@@ -13318,6 +13381,8 @@ export interface components {
|
|
|
13318
13381
|
ConversationSummary: {
|
|
13319
13382
|
conversationId?: string;
|
|
13320
13383
|
peerGhii?: string;
|
|
13384
|
+
/** @description Topic thread title (present only for subject threads). */
|
|
13385
|
+
subject?: string;
|
|
13321
13386
|
lastMessage?: string;
|
|
13322
13387
|
/** @enum {string} */
|
|
13323
13388
|
lastDirection?: "inbound" | "outbound";
|
|
@@ -18433,6 +18498,59 @@ export interface operations {
|
|
|
18433
18498
|
};
|
|
18434
18499
|
};
|
|
18435
18500
|
};
|
|
18501
|
+
getOwnerUsage: {
|
|
18502
|
+
parameters: {
|
|
18503
|
+
query?: never;
|
|
18504
|
+
header?: never;
|
|
18505
|
+
path?: never;
|
|
18506
|
+
cookie?: never;
|
|
18507
|
+
};
|
|
18508
|
+
requestBody?: never;
|
|
18509
|
+
responses: {
|
|
18510
|
+
/** @description Usage summary (cached up to ttl_seconds) */
|
|
18511
|
+
200: {
|
|
18512
|
+
headers: {
|
|
18513
|
+
[name: string]: unknown;
|
|
18514
|
+
};
|
|
18515
|
+
content: {
|
|
18516
|
+
"application/json": components["schemas"]["AimeatEnvelope"] & {
|
|
18517
|
+
data?: {
|
|
18518
|
+
owner?: string;
|
|
18519
|
+
memory?: {
|
|
18520
|
+
used_keys?: number;
|
|
18521
|
+
max_keys?: number;
|
|
18522
|
+
used_bytes?: number;
|
|
18523
|
+
max_bytes?: number;
|
|
18524
|
+
percent?: number;
|
|
18525
|
+
};
|
|
18526
|
+
storage?: {
|
|
18527
|
+
used_files?: number;
|
|
18528
|
+
used_bytes?: number;
|
|
18529
|
+
max_bytes?: number;
|
|
18530
|
+
percent?: number;
|
|
18531
|
+
};
|
|
18532
|
+
micro_memory?: {
|
|
18533
|
+
used_sets?: number;
|
|
18534
|
+
max_sets?: number;
|
|
18535
|
+
used_bytes?: number;
|
|
18536
|
+
max_bytes?: number;
|
|
18537
|
+
percent?: number;
|
|
18538
|
+
};
|
|
18539
|
+
/** @description Resource counts; apps/extensions/services carry their per-account max. */
|
|
18540
|
+
counts?: Record<string, never>;
|
|
18541
|
+
morsels?: {
|
|
18542
|
+
balance?: number;
|
|
18543
|
+
};
|
|
18544
|
+
/** Format: date-time */
|
|
18545
|
+
cached_at?: string;
|
|
18546
|
+
ttl_seconds?: number;
|
|
18547
|
+
};
|
|
18548
|
+
};
|
|
18549
|
+
};
|
|
18550
|
+
};
|
|
18551
|
+
401: components["responses"]["Unauthorized"];
|
|
18552
|
+
};
|
|
18553
|
+
};
|
|
18436
18554
|
getWallet: {
|
|
18437
18555
|
parameters: {
|
|
18438
18556
|
query?: never;
|
|
@@ -31043,6 +31161,80 @@ export interface operations {
|
|
|
31043
31161
|
};
|
|
31044
31162
|
};
|
|
31045
31163
|
};
|
|
31164
|
+
listAgentDmInbox: {
|
|
31165
|
+
parameters: {
|
|
31166
|
+
query?: {
|
|
31167
|
+
page?: number;
|
|
31168
|
+
per_page?: number;
|
|
31169
|
+
};
|
|
31170
|
+
header?: never;
|
|
31171
|
+
path?: never;
|
|
31172
|
+
cookie?: never;
|
|
31173
|
+
};
|
|
31174
|
+
requestBody?: never;
|
|
31175
|
+
responses: {
|
|
31176
|
+
/** @description DMs addressed to the agent */
|
|
31177
|
+
200: {
|
|
31178
|
+
headers: {
|
|
31179
|
+
[name: string]: unknown;
|
|
31180
|
+
};
|
|
31181
|
+
content: {
|
|
31182
|
+
"application/json": components["schemas"]["AimeatEnvelope"] & {
|
|
31183
|
+
data?: {
|
|
31184
|
+
messages?: components["schemas"]["DirectMessageRecord"][];
|
|
31185
|
+
total?: number;
|
|
31186
|
+
};
|
|
31187
|
+
};
|
|
31188
|
+
};
|
|
31189
|
+
};
|
|
31190
|
+
401: components["responses"]["Unauthorized"];
|
|
31191
|
+
/** @description Missing messages:read scope */
|
|
31192
|
+
403: {
|
|
31193
|
+
headers: {
|
|
31194
|
+
[name: string]: unknown;
|
|
31195
|
+
};
|
|
31196
|
+
content?: never;
|
|
31197
|
+
};
|
|
31198
|
+
};
|
|
31199
|
+
};
|
|
31200
|
+
getAgentDmThread: {
|
|
31201
|
+
parameters: {
|
|
31202
|
+
query?: {
|
|
31203
|
+
page?: number;
|
|
31204
|
+
per_page?: number;
|
|
31205
|
+
};
|
|
31206
|
+
header?: never;
|
|
31207
|
+
path: {
|
|
31208
|
+
conversationId: string;
|
|
31209
|
+
};
|
|
31210
|
+
cookie?: never;
|
|
31211
|
+
};
|
|
31212
|
+
requestBody?: never;
|
|
31213
|
+
responses: {
|
|
31214
|
+
/** @description Thread page */
|
|
31215
|
+
200: {
|
|
31216
|
+
headers: {
|
|
31217
|
+
[name: string]: unknown;
|
|
31218
|
+
};
|
|
31219
|
+
content: {
|
|
31220
|
+
"application/json": components["schemas"]["AimeatEnvelope"] & {
|
|
31221
|
+
data?: {
|
|
31222
|
+
messages?: components["schemas"]["DirectMessageRecord"][];
|
|
31223
|
+
total?: number;
|
|
31224
|
+
};
|
|
31225
|
+
};
|
|
31226
|
+
};
|
|
31227
|
+
};
|
|
31228
|
+
401: components["responses"]["Unauthorized"];
|
|
31229
|
+
/** @description Missing messages:read scope */
|
|
31230
|
+
403: {
|
|
31231
|
+
headers: {
|
|
31232
|
+
[name: string]: unknown;
|
|
31233
|
+
};
|
|
31234
|
+
content?: never;
|
|
31235
|
+
};
|
|
31236
|
+
};
|
|
31237
|
+
};
|
|
31046
31238
|
listInbox: {
|
|
31047
31239
|
parameters: {
|
|
31048
31240
|
query?: {
|