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.
Files changed (124) hide show
  1. package/dist/locales/en.json +25 -1
  2. package/dist/locales/fi.json +25 -1
  3. package/dist/public/css/views/inbox.css +62 -1
  4. package/dist/public/css/views/profile.css +18 -2
  5. package/dist/public/js/services/messages.js +4 -3
  6. package/dist/public/llms-template.txt +38 -1
  7. package/dist/public/views/profile/agents-tab.js +1 -0
  8. package/dist/public/views/profile/inbox-tab.js +175 -28
  9. package/dist/public/views/profile/landing-page.js +67 -0
  10. package/dist/public/views/profile/organisms-tab.js +61 -0
  11. package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts +13 -0
  12. package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts.map +1 -0
  13. package/dist/src/cli/connect/mcp/tools/dm-messages.js +62 -0
  14. package/dist/src/cli/connect/mcp/tools/dm-messages.js.map +1 -0
  15. package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
  16. package/dist/src/cli/connect/mcp/tools/index.js +2 -0
  17. package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
  18. package/dist/src/generated/api-types.d.ts +194 -2
  19. package/dist/src/generated/api-types.d.ts.map +1 -1
  20. package/dist/src/generated/prisma-postgres/edge.js +4 -3
  21. package/dist/src/generated/prisma-postgres/index-browser.js +1 -0
  22. package/dist/src/generated/prisma-postgres/index.d.ts +30 -1
  23. package/dist/src/generated/prisma-postgres/index.js +4 -3
  24. package/dist/src/generated/prisma-postgres/package.json +1 -1
  25. package/dist/src/generated/prisma-postgres/schema.prisma +1 -0
  26. package/dist/src/generated/prisma-postgres/wasm.js +4 -3
  27. package/dist/src/index.js +2 -0
  28. package/dist/src/index.js.map +1 -1
  29. package/dist/src/mcp/annotations.d.ts.map +1 -1
  30. package/dist/src/mcp/annotations.js +3 -0
  31. package/dist/src/mcp/annotations.js.map +1 -1
  32. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  33. package/dist/src/mcp/catalog/definitions.js +33 -0
  34. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  35. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
  36. package/dist/src/mcp/catalog/scopes.js +6 -1
  37. package/dist/src/mcp/catalog/scopes.js.map +1 -1
  38. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  39. package/dist/src/mcp/catalog/surfaces.js +1 -0
  40. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  41. package/dist/src/mcp/dm-messages.d.ts +20 -0
  42. package/dist/src/mcp/dm-messages.d.ts.map +1 -0
  43. package/dist/src/mcp/dm-messages.js +120 -0
  44. package/dist/src/mcp/dm-messages.js.map +1 -0
  45. package/dist/src/mcp/index.d.ts +2 -1
  46. package/dist/src/mcp/index.d.ts.map +1 -1
  47. package/dist/src/mcp/index.js +3 -1
  48. package/dist/src/mcp/index.js.map +1 -1
  49. package/dist/src/models/message-schemas.d.ts +3 -0
  50. package/dist/src/models/message-schemas.d.ts.map +1 -1
  51. package/dist/src/models/message-schemas.js +4 -0
  52. package/dist/src/models/message-schemas.js.map +1 -1
  53. package/dist/src/routes/app-grants.d.ts.map +1 -1
  54. package/dist/src/routes/app-grants.js +2 -0
  55. package/dist/src/routes/app-grants.js.map +1 -1
  56. package/dist/src/routes/bootstrap.js +1 -1
  57. package/dist/src/routes/bootstrap.js.map +1 -1
  58. package/dist/src/routes/catalogue.d.ts.map +1 -1
  59. package/dist/src/routes/catalogue.js +17 -8
  60. package/dist/src/routes/catalogue.js.map +1 -1
  61. package/dist/src/routes/federation-sync.d.ts.map +1 -1
  62. package/dist/src/routes/federation-sync.js +1 -0
  63. package/dist/src/routes/federation-sync.js.map +1 -1
  64. package/dist/src/routes/memory.d.ts.map +1 -1
  65. package/dist/src/routes/memory.js +10 -3
  66. package/dist/src/routes/memory.js.map +1 -1
  67. package/dist/src/routes/messages.d.ts.map +1 -1
  68. package/dist/src/routes/messages.js +22 -19
  69. package/dist/src/routes/messages.js.map +1 -1
  70. package/dist/src/routes/public-stats.d.ts +2 -0
  71. package/dist/src/routes/public-stats.d.ts.map +1 -1
  72. package/dist/src/routes/public-stats.js +93 -104
  73. package/dist/src/routes/public-stats.js.map +1 -1
  74. package/dist/src/routes/stats.d.ts.map +1 -1
  75. package/dist/src/routes/stats.js +6 -0
  76. package/dist/src/routes/stats.js.map +1 -1
  77. package/dist/src/routes/usage.d.ts +17 -0
  78. package/dist/src/routes/usage.d.ts.map +1 -0
  79. package/dist/src/routes/usage.js +35 -0
  80. package/dist/src/routes/usage.js.map +1 -0
  81. package/dist/src/routes/wallet.d.ts +2 -0
  82. package/dist/src/routes/wallet.d.ts.map +1 -1
  83. package/dist/src/routes/wallet.js +13 -6
  84. package/dist/src/routes/wallet.js.map +1 -1
  85. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  86. package/dist/src/server-bootstrap/routes-loader.js +18 -2
  87. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  88. package/dist/src/services/cache.d.ts +61 -0
  89. package/dist/src/services/cache.d.ts.map +1 -0
  90. package/dist/src/services/cache.js +143 -0
  91. package/dist/src/services/cache.js.map +1 -0
  92. package/dist/src/services/message-delivery.d.ts.map +1 -1
  93. package/dist/src/services/message-delivery.js +1 -0
  94. package/dist/src/services/message-delivery.js.map +1 -1
  95. package/dist/src/services/message-send.d.ts +13 -0
  96. package/dist/src/services/message-send.d.ts.map +1 -1
  97. package/dist/src/services/message-send.js +28 -5
  98. package/dist/src/services/message-send.js.map +1 -1
  99. package/dist/src/services/usage-summary.d.ts +77 -0
  100. package/dist/src/services/usage-summary.d.ts.map +1 -0
  101. package/dist/src/services/usage-summary.js +85 -0
  102. package/dist/src/services/usage-summary.js.map +1 -0
  103. package/dist/src/storage/interface.d.ts +5 -1
  104. package/dist/src/storage/interface.d.ts.map +1 -1
  105. package/dist/src/storage/providers/mongodb/index.d.ts +15 -0
  106. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  107. package/dist/src/storage/providers/mongodb/index.js +49 -1
  108. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  109. package/dist/src/storage/providers/sqlite/index.d.ts +15 -0
  110. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  111. package/dist/src/storage/providers/sqlite/index.js +16 -2
  112. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  113. package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts +15 -0
  114. package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts.map +1 -1
  115. package/dist/src/storage/providers/sqlite/repos/direct-message.js +28 -2
  116. package/dist/src/storage/providers/sqlite/repos/direct-message.js.map +1 -1
  117. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  118. package/dist/src/storage/providers/sqlite/schema.js +4 -0
  119. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  120. package/dist/src/storage/repositories/direct-message.repository.d.ts +20 -0
  121. package/dist/src/storage/repositories/direct-message.repository.d.ts.map +1 -1
  122. package/package.json +1 -1
  123. package/prisma/schema.postgres.prisma +1 -0
  124. 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":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,UAAU,uBAAuB,CAAC,GAAc,EAAE,QAAuB;IAE7E,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAAE;QAC3D,UAAU,EAAE,eAAe;QAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;QAC1F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;QACnG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;QACnG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACnF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QAC7F,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8GAA8G,CAAC;KAC5L,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,EAAE;QACvH,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,OAAO,GAA4B,EAAE,EAAE,EAAE,CAAC;QAChD,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC9B,IAAI,QAAQ;YAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC1C,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QACvC,IAAI,eAAe;YAAE,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;QAC/D,IAAI,WAAW;YAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAAE;QAC7D,UAAU,EAAE,eAAe;QAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAChF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KAC9G,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7E,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,IAAI,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,kBAAkB,CAAC,EAAE;QAC/D,UAAU,EAAE,eAAe;QAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;QACjG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAChF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KAC9G,EAAE,cAAc,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/F,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,IAAI,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,6BAA6B,kBAAkB,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -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;AA4B7D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CA0B9E"}
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 human GHII (owner@node). */
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?: {