aimeat 1.20.6 → 1.22.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 (69) hide show
  1. package/dist/.env.example +9 -0
  2. package/dist/locales/en.json +17 -1
  3. package/dist/locales/fi.json +17 -3
  4. package/dist/public/css/views/profile.css +55 -0
  5. package/dist/public/js/services/memory.js +9 -2
  6. package/dist/public/views/profile/landing-page.js +16 -1
  7. package/dist/public/views/profile/organisms-tab.js +456 -220
  8. package/dist/src/cli/connect/api-client.d.ts +24 -0
  9. package/dist/src/cli/connect/api-client.d.ts.map +1 -1
  10. package/dist/src/cli/connect/api-client.js +29 -33
  11. package/dist/src/cli/connect/api-client.js.map +1 -1
  12. package/dist/src/cli/connect/config.d.ts.map +1 -1
  13. package/dist/src/cli/connect/config.js +4 -1
  14. package/dist/src/cli/connect/config.js.map +1 -1
  15. package/dist/src/cli/connect/mcp/local-server.d.ts +25 -0
  16. package/dist/src/cli/connect/mcp/local-server.d.ts.map +1 -0
  17. package/dist/src/cli/connect/mcp/local-server.js +411 -0
  18. package/dist/src/cli/connect/mcp/local-server.js.map +1 -0
  19. package/dist/src/cli/connect/mcp/poller.d.ts +13 -0
  20. package/dist/src/cli/connect/mcp/poller.d.ts.map +1 -1
  21. package/dist/src/cli/connect/mcp/poller.js +3 -2
  22. package/dist/src/cli/connect/mcp/poller.js.map +1 -1
  23. package/dist/src/cli/connect/mcp/server.d.ts +41 -0
  24. package/dist/src/cli/connect/mcp/server.d.ts.map +1 -1
  25. package/dist/src/cli/connect/mcp/server.js +47 -21
  26. package/dist/src/cli/connect/mcp/server.js.map +1 -1
  27. package/dist/src/cli/connect/tunnel-client.d.ts +109 -0
  28. package/dist/src/cli/connect/tunnel-client.d.ts.map +1 -0
  29. package/dist/src/cli/connect/tunnel-client.js +462 -0
  30. package/dist/src/cli/connect/tunnel-client.js.map +1 -0
  31. package/dist/src/config.d.ts +4 -0
  32. package/dist/src/config.d.ts.map +1 -1
  33. package/dist/src/config.js +9 -0
  34. package/dist/src/config.js.map +1 -1
  35. package/dist/src/generated/api-types.d.ts +139 -0
  36. package/dist/src/generated/api-types.d.ts.map +1 -1
  37. package/dist/src/index.js +72 -7
  38. package/dist/src/index.js.map +1 -1
  39. package/dist/src/models/schemas.d.ts +1 -1
  40. package/dist/src/routes/agent-tasks.d.ts.map +1 -1
  41. package/dist/src/routes/agent-tasks.js +6 -1
  42. package/dist/src/routes/agent-tasks.js.map +1 -1
  43. package/dist/src/routes/connect-tunnel.d.ts +17 -0
  44. package/dist/src/routes/connect-tunnel.d.ts.map +1 -0
  45. package/dist/src/routes/connect-tunnel.js +31 -0
  46. package/dist/src/routes/connect-tunnel.js.map +1 -0
  47. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  48. package/dist/src/server-bootstrap/routes-loader.js +5 -0
  49. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  50. package/dist/src/server-bootstrap/service-init.d.ts +2 -0
  51. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  52. package/dist/src/server-bootstrap/service-init.js +11 -0
  53. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  54. package/dist/src/server.d.ts +2 -0
  55. package/dist/src/server.d.ts.map +1 -1
  56. package/dist/src/server.js +1 -0
  57. package/dist/src/server.js.map +1 -1
  58. package/dist/src/services/config-schema.d.ts.map +1 -1
  59. package/dist/src/services/config-schema.js +5 -0
  60. package/dist/src/services/config-schema.js.map +1 -1
  61. package/dist/src/services/connect-tunnel.d.ts +123 -0
  62. package/dist/src/services/connect-tunnel.d.ts.map +1 -0
  63. package/dist/src/services/connect-tunnel.js +403 -0
  64. package/dist/src/services/connect-tunnel.js.map +1 -0
  65. package/dist/src/services/event-bus.d.ts +14 -0
  66. package/dist/src/services/event-bus.d.ts.map +1 -1
  67. package/dist/src/services/event-bus.js +25 -0
  68. package/dist/src/services/event-bus.js.map +1 -1
  69. package/package.json +1 -1
package/dist/.env.example CHANGED
@@ -168,6 +168,15 @@ AIMEAT_PORT=40050
168
168
  # AIMEAT_PERSONAL_HEARTBEAT_MS=30000
169
169
  # AIMEAT_PERSONAL_OFFLINE_MS=300000
170
170
 
171
+ # ── Connector Forward Tunnel ─────────────────────────────────
172
+ # One persistent WS per agent identity at /v1/connect/tunnel: carries forward
173
+ # API calls (agent→server) + realtime reverse delivery (server→agent push).
174
+ # OPT-IN — off by default until the Node connector client (Phase 3) ships.
175
+ # AIMEAT_CONNECT_TUNNEL_ENABLED=false
176
+ # AIMEAT_CONNECT_TUNNEL_HEARTBEAT_MS=30000
177
+ # AIMEAT_CONNECT_TUNNEL_OFFLINE_MS=90000
178
+ # AIMEAT_CONNECT_TUNNEL_REQUEST_TIMEOUT_MS=30000
179
+
171
180
  # ── Email / SMTP (Phase 1.1) ────────────────────────────────
172
181
  # AIMEAT_SMTP_HOST="smtp.example.com"
173
182
  # AIMEAT_SMTP_PORT=587
@@ -5463,7 +5463,6 @@
5463
5463
  },
5464
5464
  "organisms": {
5465
5465
  "title": "Organisms",
5466
- "openWorkspace": "Open workspace",
5467
5466
  "backToList": "All organisms",
5468
5467
  "noWorkspace": "This organism has no workspace yet. Set one up to track goals, plans, deliverables and decisions — versioned on publish.",
5469
5468
  "setupWorkspace": "Set up workspace",
@@ -5712,6 +5711,23 @@
5712
5711
  "restructure": "✨ Restructure / add types with AI",
5713
5712
  "restructureTitle": "Restructure / add types with AI",
5714
5713
  "restructureDesc": "Describe what to add or change. Existing types and their data are kept — the AI extends the current structure. (To start completely fresh, delete the workspace below first.)",
5714
+ "open": "Open",
5715
+ "sortTitle": "Sort",
5716
+ "sortCustom": "My order",
5717
+ "sortName": "Name A–Z",
5718
+ "sortNewest": "Newest first",
5719
+ "reorderHint": "Drag rows to reorder — the order is saved to your profile.",
5720
+ "moreActions": "More actions",
5721
+ "policyLabel": "Join policy",
5722
+ "tabWorkspaces": "Workspaces",
5723
+ "tabMembers": "Members",
5724
+ "tabAgents": "Agents",
5725
+ "tabBoard": "Board",
5726
+ "openBoardsTab": "Open in Boards",
5727
+ "boardDesc": "This organism has a discussion board. Open it in the Boards view.",
5728
+ "noBoard": "This organism has no board.",
5729
+ "copyId": "Copy ID",
5730
+ "copied": "Copied!",
5715
5731
  "dangerZone": "Danger zone",
5716
5732
  "deleteWarn": "Deleting the workspace removes the manifest and ALL its data — drafts, published records, version history — and its schemas. The organism stays. This cannot be undone.",
5717
5733
  "deleteConfirmLabel": "Type the workspace name to confirm",
@@ -5463,7 +5463,6 @@
5463
5463
  },
5464
5464
  "organisms": {
5465
5465
  "title": "Organismit",
5466
- "openWorkspace": "Avaa työtila",
5467
5466
  "backToList": "Kaikki organismit",
5468
5467
  "noWorkspace": "Tällä organismilla ei ole vielä työtilaa. Luo sellainen seurataksesi tavoitteita, suunnitelmia, tuotoksia ja päätöksiä — versioituna julkaistaessa.",
5469
5468
  "setupWorkspace": "Luo työtila",
@@ -5629,8 +5628,6 @@
5629
5628
  "publishedAt": "Julkaistu",
5630
5629
  "fileVisibility": "Tiedostojen näkyvyys",
5631
5630
  "fileVisibilityNote": "Yksityiset tiedostot näkyvät vain sinulle — tee niistä julkisia jakaaksesi dokumentin.",
5632
- "imageVisibility": "Kuvien näkyvyys",
5633
- "imageVisibilityNote": "Yksityiset kuvat näkyvät vain sinulle — tee niistä julkisia jakaaksesi dokumentin.",
5634
5631
  "makeAllPublic": "Tee kaikista julkisia",
5635
5632
  "toggleVisibility": "Vaihda julkinen / yksityinen",
5636
5633
  "public": "Julkinen",
@@ -5714,6 +5711,23 @@
5714
5711
  "restructure": "✨ Muokkaa rakennetta / lisää tyyppejä tekoälyllä",
5715
5712
  "restructureTitle": "Muokkaa rakennetta / lisää tyyppejä tekoälyllä",
5716
5713
  "restructureDesc": "Kuvaile mitä lisätä tai muuttaa. Olemassa olevat tyypit ja niiden data säilyvät — tekoäly laajentaa nykyistä rakennetta. (Aloita kokonaan alusta poistamalla työtila ensin alta.)",
5714
+ "open": "Avaa",
5715
+ "sortTitle": "Järjestä",
5716
+ "sortCustom": "Oma järjestys",
5717
+ "sortName": "Nimi A–Ö",
5718
+ "sortNewest": "Uusin ensin",
5719
+ "reorderHint": "Raahaa rivejä järjestääksesi — järjestys tallentuu profiiliisi.",
5720
+ "moreActions": "Lisätoiminnot",
5721
+ "policyLabel": "Liittymiskäytäntö",
5722
+ "tabWorkspaces": "Työtilat",
5723
+ "tabMembers": "Jäsenet",
5724
+ "tabAgents": "Agentit",
5725
+ "tabBoard": "Taulu",
5726
+ "openBoardsTab": "Avaa Taulut-näkymässä",
5727
+ "boardDesc": "Tällä organismilla on keskustelutaulu. Avaa se Taulut-näkymässä.",
5728
+ "noBoard": "Tällä organismilla ei ole taulua.",
5729
+ "copyId": "Kopioi ID",
5730
+ "copied": "Kopioitu!",
5717
5731
  "dangerZone": "Vaaravyöhyke",
5718
5732
  "deleteWarn": "Työtilan poistaminen poistaa manifestin ja KAIKEN sen datan — luonnokset, julkaistut tietueet, versiohistorian — ja sen skeemat. Organismi säilyy. Tätä ei voi perua.",
5719
5733
  "deleteConfirmLabel": "Vahvista kirjoittamalla työtilan nimi",
@@ -4,6 +4,9 @@
4
4
  * wallet, memory, agents, extensions, packages, knowledge, generator, and
5
5
  * edit panels. Consumes theme.css tokens so it flips with dark/light mode.
6
6
  * @version-history
7
+ * v1.12.0 — 2026-06-10 — Organisms list renew, phase 1: compact .pj-org-row list
8
+ * (avatar, one-line meta, kebab menu, drag-over state), .pj-menu dropdown,
9
+ * organism home page (.pj-org-home-head, underline .pj-org-tabs, breadcrumb).
7
10
  * v1.11.0 — 2026-06-08 — Full-bleed dashboard shell: drop the 1000px cap on the
8
11
  * .pf wrapper so the sidebar+content fill the viewport like the admin dashboard
9
12
  * (tab content was squeezed to ~760px). Sidebar stays left-anchored; .pf-content
@@ -2324,3 +2327,55 @@
2324
2327
  .md-wikilink:hover { border-bottom-style: solid; }
2325
2328
  .md-img { max-width: 100%; height: auto; border-radius: 6px; }
2326
2329
  @media (max-width: 640px) { .pj-docspace { flex-direction: column; } .pj-doc-index { flex: none; width: 100%; } }
2330
+
2331
+ /* ───────────────── Organisms list renew (phase 1) ─────────────────
2332
+ * Compact list rows + kebab menu + organism home page. All colors via theme tokens. */
2333
+
2334
+ /* Topbar action cluster (sort select + Import + Create) */
2335
+ .pj-org-topbar-actions { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
2336
+ .pj-org-sort { width: auto; }
2337
+
2338
+ /* Compact rows */
2339
+ .pj-org-list { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 0.75rem; }
2340
+ .pj-org-row { display: flex; align-items: center; flex-wrap: wrap; gap: 0.65rem; border: 1px solid var(--border); border-radius: 10px; background: var(--card); padding: 0.5rem 0.65rem; box-shadow: var(--shadow-sm); }
2341
+ .pj-org-row[draggable="true"] { cursor: grab; }
2342
+ .pj-org-row.pj-org-drag-over { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
2343
+ .pj-org-avatar { width: 36px; height: 36px; border-radius: 9px; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.85rem; background: var(--bg-dim); color: var(--text-dim); border: 1px solid var(--border); flex: none; user-select: none; }
2344
+ .pj-org-avatar-lg { width: 46px; height: 46px; font-size: 1.05rem; border-radius: 11px; }
2345
+ .pj-org-main { flex: 1; min-width: 220px; cursor: pointer; }
2346
+ .pj-org-titlerow { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; min-width: 0; }
2347
+ .pj-org-name { font-weight: 600; font-size: 0.95rem; color: var(--text); }
2348
+ .pj-org-lock { font-size: 0.75rem; }
2349
+ .pj-org-desc { font-size: 0.78rem; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 48ch; }
2350
+ .pj-org-stats { display: flex; align-items: center; gap: 0.8rem; font-size: 0.78rem; color: var(--muted); flex: none; }
2351
+ .pj-org-stat { display: inline-flex; align-items: center; gap: 0.25rem; white-space: nowrap; }
2352
+ .pj-org-openbtn { flex: none; white-space: nowrap; }
2353
+ .pj-org-detail { flex-basis: 100%; border-top: 1px solid var(--border); margin-top: 0.35rem; padding-top: 0.5rem; cursor: default; }
2354
+ .pj-org-hint { font-size: 0.74rem; color: var(--muted); margin: -0.35rem 0 0.75rem; }
2355
+
2356
+ /* Kebab ("…") menu */
2357
+ .pj-menu { position: relative; flex: none; }
2358
+ .pj-menu-btn { font-size: 1.05rem; padding: 0.2rem 0.35rem; border-radius: 6px; }
2359
+ .pj-menu-btn:hover { background: var(--bg-surface); }
2360
+ .pj-menu-pop { position: absolute; right: 0; top: calc(100% + 4px); background: var(--card); border: 1px solid var(--border); border-radius: 8px; box-shadow: var(--shadow-md); display: flex; flex-direction: column; min-width: 170px; z-index: 30; padding: 0.25rem; }
2361
+ .pj-menu-item { text-align: left; background: none; border: none; padding: 0.45rem 0.6rem; font-size: 0.83rem; color: var(--text); cursor: pointer; border-radius: 6px; white-space: nowrap; }
2362
+ .pj-menu-item:hover { background: var(--bg-surface); }
2363
+ .pj-menu-item-danger { color: var(--danger-fg); }
2364
+
2365
+ /* Organism home page */
2366
+ .pj-org-breadcrumb { font-size: 0.8rem; color: var(--muted); margin-bottom: 0.6rem; display: flex; align-items: center; gap: 0.35rem; }
2367
+ .pj-org-crumb-link { background: none; border: none; padding: 0; font-size: inherit; color: var(--accent); cursor: pointer; }
2368
+ .pj-org-crumb-link:hover { text-decoration: underline; }
2369
+ .pj-org-home-head { display: flex; align-items: flex-start; gap: 0.75rem; flex-wrap: wrap; margin-bottom: 0.5rem; }
2370
+ .pj-org-home-title { flex: 1; min-width: 220px; }
2371
+ .pj-org-home-name { font-weight: 700; font-size: 1.25rem; color: var(--text); }
2372
+ .pj-org-home-desc { margin-top: 0.15rem; }
2373
+ .pj-org-home-actions { display: flex; gap: 0.4rem; flex: none; align-items: flex-start; }
2374
+ .pj-org-btn-active { border-color: var(--accent); color: var(--accent); }
2375
+ .pj-org-settings { margin-bottom: 0.75rem; }
2376
+ .pj-org-tabs { display: flex; gap: 1.1rem; border-bottom: 1px solid var(--border); margin: 0.6rem 0 1rem; flex-wrap: wrap; }
2377
+ .pj-org-tab { background: none; border: none; padding: 0.45rem 0.1rem; font-size: 0.88rem; color: var(--text-dim); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
2378
+ .pj-org-tab:hover { color: var(--text); }
2379
+ .pj-org-tab.active { color: var(--text); border-bottom-color: var(--accent); font-weight: 600; }
2380
+ .pj-org-tab-count { color: var(--muted); font-size: 0.75rem; margin-left: 0.3rem; }
2381
+ .pj-org-boardrow { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
@@ -1,6 +1,8 @@
1
1
  /**
2
- * AIMEAT Memory Service
3
- * Key-value memory CRUD, search, file management.
2
+ * @file memory.js
3
+ * @description AIMEAT Memory Service — key-value memory CRUD, search, file management.
4
+ * @version-history
5
+ * v1.1.0 — 2026-06-10 — Add getMemory(key) single-entry read (GET /v1/memory/:key).
4
6
  */
5
7
  import { api, apiGet, apiPost, apiDelete } from '/js/api.js';
6
8
 
@@ -12,6 +14,11 @@ export async function listMemories(agentGaii) {
12
14
  return Array.isArray(list) ? list : [];
13
15
  }
14
16
 
17
+ /** Read a single memory entry. Returns the envelope ({ data: { key, value, version, ... } }); throws/404s if missing. */
18
+ export async function getMemory(key) {
19
+ return apiGet(`/v1/memory/${encodeURIComponent(key)}`);
20
+ }
21
+
15
22
  /** Search memory by query string. Returns array. Optional agentGaii. */
16
23
  export async function searchMemory(query, agentGaii) {
17
24
  let url = `/v1/memory/search?q=${encodeURIComponent(query)}`;
@@ -15,6 +15,10 @@
15
15
  * AppStrip — home/section sub-components
16
16
  * - LandingPage — main orchestrator (default export)
17
17
  * @version-history
18
+ * v2.3.0 — 2026-06-10 — Drop the "← Home" button from the content header (visual noise,
19
+ * duplicated the sidebar's 🏠 Home item); the header keeps the current-tab label.
20
+ * v2.2.0 — 2026-06-10 — Listen for the `aimeat-open-tab` CustomEvent so tab components can
21
+ * navigate to another profile tab (first user: organism home's Board tab → Boards view).
18
22
  * v2.1.0 — 2026-06-09 — Remembered open view (openView) now persists in
19
23
  * sessionStorage instead of localStorage, so it is per browser TAB: with
20
24
  * multiple profile tabs open, an F5 restores that tab's own view rather than
@@ -619,6 +623,18 @@ export default function LandingPage({ tier, stats, session, navigate, showToast,
619
623
  setOpenView(null);
620
624
  }, []);
621
625
 
626
+ /* Cross-tab navigation: any tab component can dispatch
627
+ * `new CustomEvent('aimeat-open-tab', { detail: { tabId } })` to open another
628
+ * profile tab inline (e.g. an organism's Board tab → the Boards view). */
629
+ useEffect(() => {
630
+ const handler = (e) => {
631
+ const tabId = e.detail?.tabId;
632
+ if (tabId) open(tabId, e.detail?.slot || 'main');
633
+ };
634
+ window.addEventListener('aimeat-open-tab', handler);
635
+ return () => window.removeEventListener('aimeat-open-tab', handler);
636
+ }, [open]);
637
+
622
638
  /* Render inline view if it matches the given slot */
623
639
  const viewAt = (slot) => {
624
640
  if (!openView || openView.slot !== slot) return null;
@@ -683,7 +699,6 @@ export default function LandingPage({ tier, stats, session, navigate, showToast,
683
699
  <main class="pf-content">
684
700
  ${openView ? html`
685
701
  <div class="pf-content-head">
686
- <button class="pf-back-btn" onClick=${close}>← ${t('profile.landing.home')}</button>
687
702
  <span class="pf-back-current">${getTabLabel(openView.tabId)}</span>
688
703
  </div>
689
704
  <div class="pf-content-body">${renderTab(openView.tabId)}</div>