aimeat 1.22.0 → 1.23.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 (31) hide show
  1. package/dist/locales/en.json +2 -0
  2. package/dist/locales/fi.json +2 -0
  3. package/dist/public/css/views/profile.css +54 -51
  4. package/dist/public/js/services/organisms.js +23 -11
  5. package/dist/public/views/profile/organisms-tab.js +27 -4
  6. package/dist/src/cli/connect/mcp/local-server.d.ts.map +1 -1
  7. package/dist/src/cli/connect/mcp/local-server.js +44 -1
  8. package/dist/src/cli/connect/mcp/local-server.js.map +1 -1
  9. package/dist/src/cli/connect/mcp/tools/workspaces.d.ts +4 -0
  10. package/dist/src/cli/connect/mcp/tools/workspaces.d.ts.map +1 -1
  11. package/dist/src/cli/connect/mcp/tools/workspaces.js +22 -3
  12. package/dist/src/cli/connect/mcp/tools/workspaces.js.map +1 -1
  13. package/dist/src/mcp/catalog/definitions.js +1 -1
  14. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  15. package/dist/src/mcp/workspaces.d.ts +4 -0
  16. package/dist/src/mcp/workspaces.d.ts.map +1 -1
  17. package/dist/src/mcp/workspaces.js +24 -4
  18. package/dist/src/mcp/workspaces.js.map +1 -1
  19. package/dist/src/routes/organisms.d.ts +4 -0
  20. package/dist/src/routes/organisms.d.ts.map +1 -1
  21. package/dist/src/routes/organisms.js +6 -2
  22. package/dist/src/routes/organisms.js.map +1 -1
  23. package/dist/src/services/manifest-schema.d.ts +21 -4
  24. package/dist/src/services/manifest-schema.d.ts.map +1 -1
  25. package/dist/src/services/manifest-schema.js +30 -7
  26. package/dist/src/services/manifest-schema.js.map +1 -1
  27. package/dist/src/services/workspace-meta.d.ts +22 -0
  28. package/dist/src/services/workspace-meta.d.ts.map +1 -1
  29. package/dist/src/services/workspace-meta.js +34 -6
  30. package/dist/src/services/workspace-meta.js.map +1 -1
  31. package/package.json +1 -1
@@ -5673,6 +5673,8 @@
5673
5673
  "rejected": "Rejected",
5674
5674
  "decisions": "Recent decisions",
5675
5675
  "noneYet": "none yet",
5676
+ "spaceTasksBacked": "This space points at the task system — its items are tasks, not workspace records. Manage them in the Tasks views.",
5677
+ "spaceBackingUnsupported": "This space's backing is not supported, so its content is not shown here. Edit the workspace (manifest) and set this space's backing to \"memory\" to restore it — files and knowledge packages attach via Sources or document images instead.",
5676
5678
  "onePerLine": "one per line",
5677
5679
  "docs": "docs",
5678
5680
  "newPage": "New document",
@@ -5673,6 +5673,8 @@
5673
5673
  "rejected": "Hylätty",
5674
5674
  "decisions": "Viimeisimmät päätökset",
5675
5675
  "noneYet": "ei vielä mitään",
5676
+ "spaceTasksBacked": "Tämä tila osoittaa tehtäväjärjestelmään — sen sisältö on tehtäviä, ei työtilan tietueita. Hallitse niitä Tehtävät-näkymissä.",
5677
+ "spaceBackingUnsupported": "Tämän tilan backing-arvoa ei tueta, joten sen sisältöä ei näytetä tässä. Muokkaa työtilaa (manifestia) ja vaihda tilan backing-arvoksi \"memory\" palauttaaksesi sen — tiedostot ja tietopaketit liitetään Lähteiden tai dokumenttien kuvien kautta.",
5676
5678
  "onePerLine": "yksi per rivi",
5677
5679
  "docs": "dokumentit",
5678
5680
  "newPage": "Uusi dokumentti",
@@ -2066,6 +2066,9 @@
2066
2066
  /* Lift the add-actions off the panel background so they read as buttons. */
2067
2067
  .pj-section-head .btn-outline, .pj-section-head .btn-ghost { background: var(--card); box-shadow: var(--shadow-sm); }
2068
2068
  .pj-section-head .btn-outline:hover, .pj-section-head .btn-ghost:hover { background: var(--bg-surface); border-color: var(--text-muted); }
2069
+ /* A declared space whose data does not live in workspace records (backing 'tasks', or a legacy
2070
+ unsupported backing) — shown as a notice instead of silently dropped from the view. */
2071
+ .pj-space-notice { font-size: 0.88rem; color: var(--muted); padding: 0.2rem 0 0.3rem; }
2069
2072
  .pj-draft-form { margin: 0.4rem 0; }
2070
2073
  .pj-drafts { display: flex; flex-direction: column; gap: 0.3rem; margin-bottom: 0.3rem; }
2071
2074
  .pj-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0; }
@@ -2327,55 +2330,55 @@
2327
2330
  .md-wikilink:hover { border-bottom-style: solid; }
2328
2331
  .md-img { max-width: 100%; height: auto; border-radius: 6px; }
2329
2332
  @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; }
2333
+
2334
+ /* ───────────────── Organisms list renew (phase 1) ─────────────────
2335
+ * Compact list rows + kebab menu + organism home page. All colors via theme tokens. */
2336
+
2337
+ /* Topbar action cluster (sort select + Import + Create) */
2338
+ .pj-org-topbar-actions { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
2339
+ .pj-org-sort { width: auto; }
2340
+
2341
+ /* Compact rows */
2342
+ .pj-org-list { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 0.75rem; }
2343
+ .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); }
2344
+ .pj-org-row[draggable="true"] { cursor: grab; }
2345
+ .pj-org-row.pj-org-drag-over { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
2346
+ .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; }
2347
+ .pj-org-avatar-lg { width: 46px; height: 46px; font-size: 1.05rem; border-radius: 11px; }
2348
+ .pj-org-main { flex: 1; min-width: 220px; cursor: pointer; }
2349
+ .pj-org-titlerow { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; min-width: 0; }
2350
+ .pj-org-name { font-weight: 600; font-size: 0.95rem; color: var(--text); }
2351
+ .pj-org-lock { font-size: 0.75rem; }
2352
+ .pj-org-desc { font-size: 0.78rem; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 48ch; }
2353
+ .pj-org-stats { display: flex; align-items: center; gap: 0.8rem; font-size: 0.78rem; color: var(--muted); flex: none; }
2354
+ .pj-org-stat { display: inline-flex; align-items: center; gap: 0.25rem; white-space: nowrap; }
2355
+ .pj-org-openbtn { flex: none; white-space: nowrap; }
2356
+ .pj-org-detail { flex-basis: 100%; border-top: 1px solid var(--border); margin-top: 0.35rem; padding-top: 0.5rem; cursor: default; }
2357
+ .pj-org-hint { font-size: 0.74rem; color: var(--muted); margin: -0.35rem 0 0.75rem; }
2358
+
2359
+ /* Kebab ("…") menu */
2360
+ .pj-menu { position: relative; flex: none; }
2361
+ .pj-menu-btn { font-size: 1.05rem; padding: 0.2rem 0.35rem; border-radius: 6px; }
2362
+ .pj-menu-btn:hover { background: var(--bg-surface); }
2363
+ .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; }
2364
+ .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; }
2365
+ .pj-menu-item:hover { background: var(--bg-surface); }
2366
+ .pj-menu-item-danger { color: var(--danger-fg); }
2367
+
2368
+ /* Organism home page */
2369
+ .pj-org-breadcrumb { font-size: 0.8rem; color: var(--muted); margin-bottom: 0.6rem; display: flex; align-items: center; gap: 0.35rem; }
2370
+ .pj-org-crumb-link { background: none; border: none; padding: 0; font-size: inherit; color: var(--accent); cursor: pointer; }
2371
+ .pj-org-crumb-link:hover { text-decoration: underline; }
2372
+ .pj-org-home-head { display: flex; align-items: flex-start; gap: 0.75rem; flex-wrap: wrap; margin-bottom: 0.5rem; }
2373
+ .pj-org-home-title { flex: 1; min-width: 220px; }
2374
+ .pj-org-home-name { font-weight: 700; font-size: 1.25rem; color: var(--text); }
2375
+ .pj-org-home-desc { margin-top: 0.15rem; }
2376
+ .pj-org-home-actions { display: flex; gap: 0.4rem; flex: none; align-items: flex-start; }
2377
+ .pj-org-btn-active { border-color: var(--accent); color: var(--accent); }
2378
+ .pj-org-settings { margin-bottom: 0.75rem; }
2379
+ .pj-org-tabs { display: flex; gap: 1.1rem; border-bottom: 1px solid var(--border); margin: 0.6rem 0 1rem; flex-wrap: wrap; }
2380
+ .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; }
2381
+ .pj-org-tab:hover { color: var(--text); }
2382
+ .pj-org-tab.active { color: var(--text); border-bottom-color: var(--accent); font-weight: 600; }
2383
+ .pj-org-tab-count { color: var(--muted); font-size: 0.75rem; margin-left: 0.3rem; }
2381
2384
  .pj-org-boardrow { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
@@ -6,6 +6,16 @@
6
6
  */
7
7
  import { api, apiGet, apiPost, apiPut, apiPatch, apiDelete } from '/js/api.js';
8
8
 
9
+ /** Does this space's data live in workspace memory keys (records/documents the workspace view can
10
+ * show)? Missing backing counts as memory. Mirrors the server's isMemoryBackedSpace — THE one
11
+ * frontend predicate; hand-rolled per-view variants of this check are how published content once
12
+ * went invisible. backing:'tasks' points at the task system; other values are legacy/unsupported. */
13
+ export const isMemorySpace = (ot) => !ot?.backing || ot.backing === 'memory';
14
+
15
+ /** Is this space a document space? Old manifests declared kind:'document' without a mode — honour
16
+ * the intent (mirrors the server's normalizeObjectTypes inference). */
17
+ export const isDocSpace = (ot) => ot?.mode === 'document' || (!ot?.mode && ot?.kind === 'document');
18
+
9
19
  /** List organisms. */
10
20
  export async function listOrganisms(opts = {}) {
11
21
  const params = new URLSearchParams();
@@ -342,7 +352,9 @@ export function validateGenerated(generated) {
342
352
  if (!['active', 'paused', 'done', 'archived'].includes(m.status)) errors.push('manifest.status must be one of: active, paused, done, archived');
343
353
  const ots = Array.isArray(m.objectTypes) ? m.objectTypes : [];
344
354
  if (ots.length === 0) errors.push('manifest.objectTypes must have at least one entry');
345
- const backings = ['memory', 'tasks', 'storage', 'knowledge'];
355
+ // 'storage'/'knowledge' are NOT valid backings: files and knowledge packages attach via workspace
356
+ // Sources or document images, never as a backed space (the server gate rejects them too).
357
+ const backings = ['memory', 'tasks'];
346
358
  const roles = ['owner', 'admin', 'member'];
347
359
  for (const ot of ots) {
348
360
  const n = (ot && ot.name) || '(unnamed)';
@@ -595,8 +607,8 @@ export async function buildOrganismOverviewMermaid(orgId) {
595
607
  for (const w of wsList) {
596
608
  const ws = await getWorkspace(orgId, w.id).catch(() => null);
597
609
  const sources = await getWorkspaceSources(orgId, w.id).catch(() => []);
598
- const types = (ws?.manifest?.objectTypes || []).filter(o => o.backing === 'memory')
599
- .map(o => `${o.name} (${o.mode === 'document' ? 'doc' : 'rec'})`);
610
+ const types = (ws?.manifest?.objectTypes || []).filter(isMemorySpace)
611
+ .map(o => `${o.name} (${isDocSpace(o) ? 'doc' : 'rec'})`);
600
612
  const knowledge = sources.filter(s => s.type === 'knowledge').map(s => s.label || s.packageId);
601
613
  wsData.push({ name: w.name || w.id, types, knowledge });
602
614
  }
@@ -653,9 +665,9 @@ export async function buildOrganismOverviewMermaid(orgId) {
653
665
  /** Chart 2 — the edit→publish lifecycle this workspace's manifest defines (deterministic). Records
654
666
  * are schema-validated; the publish gate + the manifest's policy.alwaysGate add a review step. */
655
667
  export function buildEditFlowMermaid(manifest, gateOn) {
656
- const types = (manifest?.objectTypes || []).filter(o => o.backing === 'memory');
657
- const recTypes = types.filter(o => o.mode !== 'document').map(o => o.name);
658
- const docTypes = types.filter(o => o.mode === 'document').map(o => o.name);
668
+ const types = (manifest?.objectTypes || []).filter(isMemorySpace);
669
+ const recTypes = types.filter(o => !isDocSpace(o)).map(o => o.name);
670
+ const docTypes = types.filter(isDocSpace).map(o => o.name);
659
671
  const alwaysGate = (manifest?.policy && manifest.policy.alwaysGate) || [];
660
672
 
661
673
  const L = ['flowchart LR'];
@@ -684,7 +696,7 @@ export function buildEditFlowMermaid(manifest, gateOn) {
684
696
 
685
697
  /** Format one objectType's full schema for the prompt's STRUCTURE block. */
686
698
  function describeType(ot, schema) {
687
- if (ot.mode === 'document') {
699
+ if (isDocSpace(ot)) {
688
700
  return `• ${ot.name} (document) — namespace "${ot.namespace}". Free-form markdown pages { id, title, markdown }, organised into sections (read organism.{id}.w.{ws}.meta.sections.${ot.name}).`;
689
701
  }
690
702
  const props = (schema && schema.properties) || {};
@@ -705,11 +717,11 @@ export async function buildAccessPrompt(orgId, orgName, wsId, ws, variant = 'hum
705
717
  const nodeUrl = window.location.origin;
706
718
  const m = ws?.manifest || {};
707
719
  const wsName = m.name || wsId;
708
- const types = (m.objectTypes || []).filter(ot => ot.backing === 'memory');
720
+ const types = (m.objectTypes || []).filter(isMemorySpace);
709
721
  const described = [];
710
722
  for (const ot of types) {
711
723
  // records is the default mode (mode may be undefined) — fetch the schema unless it's a document.
712
- const schema = ot.mode !== 'document' ? await getObjectSchema(orgId, wsId, ot.namespace).catch(() => null) : null;
724
+ const schema = !isDocSpace(ot) ? await getObjectSchema(orgId, wsId, ot.namespace).catch(() => null) : null;
713
725
  described.push(describeType(ot, schema));
714
726
  }
715
727
  const structure = described.join('\n') || '(no spaces declared yet)';
@@ -802,10 +814,10 @@ export async function buildContractAgentPrompt(orgId, orgName, wsId, ws) {
802
814
  const nodeUrl = window.location.origin;
803
815
  const m = ws?.manifest || {};
804
816
  const wsName = m.name || wsId;
805
- const types = (m.objectTypes || []).filter(ot => ot.backing === 'memory');
817
+ const types = (m.objectTypes || []).filter(isMemorySpace);
806
818
  const described = [];
807
819
  for (const ot of types) {
808
- const schema = ot.mode !== 'document' ? await getObjectSchema(orgId, wsId, ot.namespace).catch(() => null) : null;
820
+ const schema = !isDocSpace(ot) ? await getObjectSchema(orgId, wsId, ot.namespace).catch(() => null) : null;
809
821
  described.push(describeType(ot, schema));
810
822
  }
811
823
  const structure = described.join('\n') || '(no spaces declared yet)';
@@ -69,6 +69,10 @@
69
69
  * Nothing removed: every former card action has a new home (list "…" menu, home header, or a tab).
70
70
  * v1.16.0 — 2026-06-10 — Row button "Open workspace" → "Open"; new 📁 workspace-count stat next to
71
71
  * the members counter (lazy discoverWorkspaces per own org) so empty organisms are obvious.
72
+ * v1.17.0 — 2026-06-10 — No space silently vanishes: non-memory-backed spaces (backing 'tasks', or
73
+ * a legacy unsupported value like 'knowledge') render as a notice card instead of being filtered
74
+ * out — published content disappearing without a trace is how the invisible-documents bug hid for
75
+ * a month. Missing backing counts as memory; kind:'document' without mode renders as a doc space.
72
76
  */
73
77
  import { h } from 'preact';
74
78
  import { useState, useEffect, useCallback, useRef, useMemo } from 'preact/hooks';
@@ -1944,13 +1948,20 @@ function Workspace({ org, wsId, showToast, onBack }) {
1944
1948
  `;
1945
1949
  }
1946
1950
 
1947
- const types = (ws.manifest?.objectTypes || []).filter(ot => ot.backing === 'memory');
1951
+ // Memory-backed spaces render normally (missing backing counts as memory — the shared service
1952
+ // predicate mirrors the server's). Every OTHER declared space still renders, as a notice card — a
1953
+ // space the manifest declares must never silently vanish from the view (that's how published
1954
+ // documents once became unfindable: writes succeeded, every list surface skipped the space).
1955
+ const allTypes = ws.manifest?.objectTypes || [];
1956
+ const types = allTypes.filter(orgService.isMemorySpace);
1957
+ const otherTypes = allTypes.filter(ot => !orgService.isMemorySpace(ot));
1958
+ const isDocSpace = orgService.isDocSpace;
1948
1959
  const draftsFor = (name) => (ws.drafts && ws.drafts[name]) || [];
1949
1960
  const objectsFor = (name) => (ws.objects && ws.objects[name]) || [];
1950
1961
 
1951
1962
  // ── Public sharing (meta.share) — what published document-space pages anyone can read via the
1952
1963
  // no-login viewer. Independent of the access roles. Lazy-loaded the first time the panel opens. ──
1953
- const docTypes = types.filter(ot => ot.mode === 'document');
1964
+ const docTypes = types.filter(isDocSpace);
1954
1965
  const loadShare = async () => {
1955
1966
  setShareBusy(true);
1956
1967
  try { setShare(await orgService.getWorkspaceShare(orgId, wsId)); } finally { setShareBusy(false); }
@@ -2181,7 +2192,7 @@ function Workspace({ org, wsId, showToast, onBack }) {
2181
2192
  <div class="card-h3">${t('organisms.spaces') || 'Spaces'}</div>
2182
2193
  ${(ws.manifest?.objectTypes || []).map(ot => html`
2183
2194
  <div class="pj-doc-row" key=${'sp' + ot.name}>
2184
- <span class="pj-space-name">${escHtml(ot.name)}<span class="pj-doc-tag">${ot.mode === 'document' ? (t('organisms.docs') || 'docs') : (t('organisms.recordsMode') || 'records')}</span></span>
2195
+ <span class="pj-space-name">${escHtml(ot.name)}<span class="pj-doc-tag">${isDocSpace(ot) ? (t('organisms.docs') || 'docs') : (t('organisms.recordsMode') || 'records')}</span></span>
2185
2196
  <button class="btn-ghost btn-sm" onClick=${() => removeSpaceHandler(ot.name)} disabled=${busy}>${t('organisms.remove') || 'Remove'}</button>
2186
2197
  </div>
2187
2198
  `)}
@@ -2243,7 +2254,7 @@ function Workspace({ org, wsId, showToast, onBack }) {
2243
2254
 
2244
2255
  ${types.length > 0 ? html`<div class="pj-divider"></div>` : null}
2245
2256
 
2246
- ${types.map(ot => ot.mode === 'document' ? renderDocSpace(ot) : html`
2257
+ ${types.map(ot => isDocSpace(ot) ? renderDocSpace(ot) : html`
2247
2258
  <div class="pj-section" key=${ot.name}>
2248
2259
  <div class="pj-section-head">
2249
2260
  <span class="pj-section-title">${escHtml(ot.name)}</span>
@@ -2284,6 +2295,18 @@ function Workspace({ org, wsId, showToast, onBack }) {
2284
2295
  </div>
2285
2296
  `)}
2286
2297
 
2298
+ ${otherTypes.map(ot => html`
2299
+ <div class="pj-section" key=${ot.name}>
2300
+ <div class="pj-section-head">
2301
+ <span class="pj-section-title">${escHtml(ot.name)}</span>
2302
+ <span class="badge badge-warn">${escHtml(String(ot.backing))}</span>
2303
+ </div>
2304
+ <div class="pj-space-notice">${ot.backing === 'tasks'
2305
+ ? (t('organisms.spaceTasksBacked') || 'This space points at the task system — its items are tasks, not workspace records. Manage them in the Tasks views.')
2306
+ : (t('organisms.spaceBackingUnsupported') || 'This space’s backing is not supported, so its content is not shown here. Edit the workspace (manifest) and set this space’s backing to "memory" to restore it — files and knowledge packages attach via Sources or document images instead.')}</div>
2307
+ </div>
2308
+ `)}
2309
+
2287
2310
  <${SourcesPanel} orgId=${orgId} wsId=${wsId} showToast=${showToast} />
2288
2311
 
2289
2312
  ${(ws.decisions || []).length > 0 && html`
@@ -1 +1 @@
1
- {"version":3,"file":"local-server.d.ts","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/local-server.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,sBAAsB,CAAC;AAK3E,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAqFD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,iFAAiF;IACjF,QAAQ,EAAE,MAAM,SAAS,CAAC;CAC3B;AAQD,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoQ5E"}
1
+ {"version":3,"file":"local-server.d.ts","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/local-server.ts"],"names":[],"mappings":"AAgDA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,sBAAsB,CAAC;AAM3E,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAqFD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,iFAAiF;IACjF,QAAQ,EAAE,MAAM,SAAS,CAAC;CAC3B;AAQD,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsS5E"}
@@ -13,6 +13,9 @@
13
13
  * - `GET /local/tasks/next?wait=ms[&agent=name]` — long-poll fed by the
14
14
  * tunnel's `deliver`/`backlog` frames: realtime task delivery for
15
15
  * synchronous clients, no upstream polling.
16
+ * - `POST /local/call/:tool` — deterministic shell-callable tool dispatch
17
+ * (same registry as `aimeat connect call`) routed over the agent's
18
+ * tunnel-backed client; one loopback POST, no subprocess / fresh TLS.
16
19
  * - `GET /local/status`, `POST /local/shutdown` — introspection + clean stop.
17
20
  * Writes the discovery file `<AIMEAT_HOME>/serve.json` (schema_version, port,
18
21
  * pid, agents, started_at) atomically on start, removes it on clean exit, and
@@ -33,6 +36,9 @@
33
36
  * @version-history
34
37
  * v1.0.0 — 2026-06-10 — Phase 4: initial loopback daemon (local MCP + REST
35
38
  * proxy + long-poll push surface + discovery file + degraded fallback).
39
+ * v1.1.0 — 2026-06-10 — Add `POST /local/call/:tool` — deterministic
40
+ * shell-callable tool dispatch over the tunnel (kills `connect call`
41
+ * subprocess + per-call TLS churn for plain-Python crews).
36
42
  */
37
43
  import express from 'express';
38
44
  import { randomBytes } from 'node:crypto';
@@ -45,6 +51,7 @@ import { getConfigDir } from '../config.js';
45
51
  import { wakeAgent } from './wakeup.js';
46
52
  import { startPollerForAgent, legacyWakeAdapter } from './poller.js';
47
53
  import { launchTaskRunner, isRunner } from '../task-runner.js';
54
+ import { CONNECT_CLI_TOOLS } from '../tool-call.js';
48
55
  export const SERVE_DISCOVERY_SCHEMA_VERSION = 1;
49
56
  export function serveDiscoveryPath() {
50
57
  return join(getConfigDir(), 'serve.json');
@@ -281,6 +288,42 @@ export async function runServeDaemon(opts) {
281
288
  data: { agent: entry.agent, owner: entry.owner, via: item.via, received_at: item.receivedAt, task: item.task },
282
289
  });
283
290
  });
291
+ // ── Tool-call surface: deterministic shell-callable tool dispatch over the
292
+ // tunnel. Same handler registry as `aimeat connect call`, but routed through
293
+ // the agent's tunnel-backed client — one loopback POST, no per-call subprocess
294
+ // and no fresh TLS per call. Body = the tool's JSON input (as `connect call
295
+ // --json`); response = the AIMEAT envelope (callers check `ok`). Agent picked
296
+ // by `X-Aimeat-Agent` / `?agent=` (defaults to the registry primary).
297
+ app.post('/local/call/:tool', async (req, res) => {
298
+ let entry;
299
+ try {
300
+ entry = resolveAgent(req);
301
+ }
302
+ catch (err) {
303
+ res.status(400).json({ ok: false, error: { code: 'UNKNOWN_AGENT', message: err.message } });
304
+ return;
305
+ }
306
+ const toolName = req.params.tool;
307
+ const tool = CONNECT_CLI_TOOLS.find(t => t.name === toolName);
308
+ if (!tool) {
309
+ res.status(404).json({ ok: false, error: { code: 'UNKNOWN_TOOL', message: `Unknown shell-callable tool: ${toolName}` } });
310
+ return;
311
+ }
312
+ const input = (req.body && typeof req.body === 'object' && !Array.isArray(req.body))
313
+ ? req.body
314
+ : {};
315
+ try {
316
+ const response = await tool.handler({
317
+ client: entry.client, // tunnel-backed in tunnel mode, direct fetch when degraded
318
+ config: { node_url: entry.config.node_url, agent: entry.agent, owner: entry.owner },
319
+ agentPath: encodeURIComponent(entry.agent),
320
+ }, input);
321
+ res.status(response.ok ? 200 : 400).json(response);
322
+ }
323
+ catch (err) {
324
+ res.status(400).json({ ok: false, error: { code: 'TOOL_CALL_ERROR', message: err.message } });
325
+ }
326
+ });
284
327
  app.get('/local/status', (_req, res) => {
285
328
  res.json({
286
329
  ok: true,
@@ -404,7 +447,7 @@ export async function runServeDaemon(opts) {
404
447
  const summary = registry.list()
405
448
  .map(e => `${e.agent}@${e.owner} [${channels.get(e.agent).transportMode}]`)
406
449
  .join(', ');
407
- console.error(`AIMEAT serve daemon listening on http://127.0.0.1:${port} (MCP: /v1/mcp, proxy: /v1/*, push: /local/tasks/next)`);
450
+ console.error(`AIMEAT serve daemon listening on http://127.0.0.1:${port} (MCP: /v1/mcp, proxy: /v1/*, tool-call: /local/call/:tool, push: /local/tasks/next)`);
408
451
  console.error(`[serve] discovery: ${discoveryFile}`);
409
452
  console.error(`[serve] ${registry.size()} agent(s): ${summary} — ${tunnelCount} over tunnel`);
410
453
  }
@@ -1 +1 @@
1
- {"version":3,"file":"local-server.js","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/local-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-server.js","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/local-server.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,10 @@
8
8
  * the server and the v2 surface allowlists (appdev/agent/service).
9
9
  * @version-history
10
10
  * v1.0.0 -- 2026-06-08 -- Initial: 5 workspace tools as REST wrappers for the connector.
11
+ * v1.1.0 -- 2026-06-10 -- Backing gate (the invisible-documents bug happened through THIS path):
12
+ * _create normalizes objectTypes (rejects backing 'storage'/'knowledge', infers mode:'document'
13
+ * from kind:'document'); _write refuses non-memory spaces and honours kind:'document' on old
14
+ * manifests instead of silently falling into records mode.
11
15
  */
12
16
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
13
17
  import type { AgentRegistry } from '../../agent-registry.js';
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/workspaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAuOpF"}
1
+ {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/workspaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAK7D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAuPpF"}
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { annotationsFor } from '../../../../mcp/annotations.js';
3
3
  import { descriptionFor } from '../../../../mcp/catalog/shape.js';
4
+ import { normalizeObjectTypes, isMemoryBackedSpace, WorkspaceMetaError } from '../../../../services/workspace-meta.js';
4
5
  export function registerWorkspaceTools(mcp, registry) {
5
6
  const { client } = registry.resolve();
6
7
  const root = (orgId, ws) => `organism.${orgId}.w.${ws}`;
@@ -56,10 +57,18 @@ export function registerWorkspaceTools(mcp, registry) {
56
57
  section: z.string().optional().describe('Document spaces only: section id/name to file the document under.'),
57
58
  }, annotationsFor('aimeat_workspace_write'), async ({ organism_id, ws, space, value, id, section }) => {
58
59
  const wsResp = await client.get(`/v1/organisms/${encodeURIComponent(organism_id)}/workspace?ws=${encodeURIComponent(ws)}`);
59
- const ot = (wsResp.data?.manifest?.objectTypes ?? []).find(o => o.name === space);
60
+ const ot = (wsResp.data?.manifest?.objectTypes ?? []).find(o => o.name === space || o.namespace === space);
60
61
  if (!ot || !ot.namespace)
61
62
  return text({ error: `No space named "${space}" in this workspace.` }, true);
62
- const isDoc = ot.mode === 'document';
63
+ // A non-memory space's data does not live in workspace records — writing here would store
64
+ // memory keys no read surface ever lists (the invisible-documents bug). Refuse loudly.
65
+ if (!isMemoryBackedSpace(ot)) {
66
+ return text({ error: ot.backing === 'tasks'
67
+ ? `Space "${ot.name}" is backed by the task system (backing:'tasks') — create tasks with the task tools, not workspace writes.`
68
+ : `Space "${ot.name}" has backing '${ot.backing}', which workspace writes do not support. Update the space to backing:'memory' (aimeat_workspace_update); files and knowledge packages attach via workspace Sources or embedded document images.` }, true);
69
+ }
70
+ // Old manifests declared documents as kind:'document' without a mode — honour the intent.
71
+ const isDoc = ot.mode === 'document' || (!ot.mode && ot.kind === 'document');
63
72
  const v0 = parseObj(value);
64
73
  let instanceId = (id && String(id).trim()) || (v0 && typeof v0 === 'object' && !Array.isArray(v0) ? String(v0.id ?? '').trim() : '');
65
74
  if (!instanceId && isDoc)
@@ -81,7 +90,7 @@ export function registerWorkspaceTools(mcp, registry) {
81
90
  await client.post('/v1/memory', { key: secKey, value: { sections }, visibility: 'private' });
82
91
  }
83
92
  }
84
- return text({ written: key, id: instanceId, space, mode: ot.mode ?? 'records', section: section ?? null });
93
+ return text({ written: key, id: instanceId, space, mode: isDoc ? 'document' : 'records', section: section ?? null });
85
94
  });
86
95
  mcp.tool('aimeat_workspace_publish', descriptionFor('aimeat_workspace_publish'), { organism_id: z.string(), ws: z.string(), namespace: z.string(), id: z.string() }, annotationsFor('aimeat_workspace_publish'), async ({ organism_id, ws, namespace, id }) => {
87
96
  const resp = await client.post(`/v1/organisms/${encodeURIComponent(organism_id)}/publish`, { ws, namespace, id });
@@ -173,6 +182,16 @@ export function registerWorkspaceTools(mcp, registry) {
173
182
  if (!man || typeof man !== 'object' || !Array.isArray(man.objectTypes)) {
174
183
  return text({ error: 'manifest must be an object with an objectTypes array.' }, true);
175
184
  }
185
+ // Gate: reject unsupported backings + infer mode from kind BEFORE anything is written, so a
186
+ // misdeclared space fails the very first call instead of becoming invisible data.
187
+ try {
188
+ man.objectTypes = normalizeObjectTypes(man.objectTypes);
189
+ }
190
+ catch (e) {
191
+ if (e instanceof WorkspaceMetaError)
192
+ return text({ error: e.message }, true);
193
+ throw e;
194
+ }
176
195
  const schemaMap = (parseObj(schemas) ?? {});
177
196
  const wsId = 'ws-' + Date.now().toString(36) + Math.random().toString(36).slice(2, 5);
178
197
  const base = root(organism_id, wsId);