aimeat 1.28.0 → 1.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/locales/en.json +71 -2
- package/dist/locales/fi.json +71 -2
- package/dist/public/css/views/agents-detail.css +11 -0
- package/dist/public/css/views/inbox.css +62 -1
- package/dist/public/css/views/profile.css +87 -10
- package/dist/public/js/services/memory.js +62 -4
- package/dist/public/js/services/messages.js +4 -3
- package/dist/public/js/services/organisms.js +49 -3
- package/dist/public/js/services/workflows.js +4 -3
- package/dist/public/llms-template.txt +38 -1
- package/dist/public/spa.html +3 -0
- package/dist/public/views/command-palette.js +145 -0
- package/dist/public/views/profile/agents-tab.js +1 -0
- package/dist/public/views/profile/inbox-tab.js +175 -28
- package/dist/public/views/profile/knowledge-tab.js +6 -9
- package/dist/public/views/profile/landing-page.js +74 -29
- package/dist/public/views/profile/memory-tab.js +251 -26
- package/dist/public/views/profile/organisms/agents.js +6 -11
- package/dist/public/views/profile/organisms/home.js +1 -1
- package/dist/public/views/profile/organisms/members.js +9 -5
- package/dist/public/views/profile/organisms/mindmap.js +157 -59
- package/dist/public/views/profile/organisms/panels.js +36 -19
- package/dist/public/views/profile/organisms/timeline-panel.js +30 -1
- package/dist/public/views/profile/organisms/workspace-comments.js +15 -5
- package/dist/public/views/profile/organisms/workspace-list.js +35 -23
- package/dist/public/views/profile/organisms/workspace.js +166 -31
- package/dist/public/views/profile/organisms-tab.js +78 -5
- package/dist/public/views/profile/workflows-tab.js +6 -6
- package/dist/src/cli/connect/mcp/local-server.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/local-server.js +28 -0
- package/dist/src/cli/connect/mcp/local-server.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts +13 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.js +62 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/index.js +2 -0
- package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +527 -12
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/generated/prisma-postgres/edge.js +4 -3
- package/dist/src/generated/prisma-postgres/index-browser.js +1 -0
- package/dist/src/generated/prisma-postgres/index.d.ts +30 -1
- package/dist/src/generated/prisma-postgres/index.js +4 -3
- package/dist/src/generated/prisma-postgres/package.json +1 -1
- package/dist/src/generated/prisma-postgres/schema.prisma +1 -0
- package/dist/src/generated/prisma-postgres/wasm.js +4 -3
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +3 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions.js +33 -0
- package/dist/src/mcp/catalog/definitions.js.map +1 -1
- package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
- package/dist/src/mcp/catalog/scopes.js +6 -1
- package/dist/src/mcp/catalog/scopes.js.map +1 -1
- package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
- package/dist/src/mcp/catalog/surfaces.js +1 -0
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/dm-messages.d.ts +20 -0
- package/dist/src/mcp/dm-messages.d.ts.map +1 -0
- package/dist/src/mcp/dm-messages.js +120 -0
- package/dist/src/mcp/dm-messages.js.map +1 -0
- package/dist/src/mcp/index.d.ts +2 -1
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +3 -1
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/models/message-schemas.d.ts +3 -0
- package/dist/src/models/message-schemas.d.ts.map +1 -1
- package/dist/src/models/message-schemas.js +4 -0
- package/dist/src/models/message-schemas.js.map +1 -1
- package/dist/src/routes/agent-tasks.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks.js +13 -0
- package/dist/src/routes/agent-tasks.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts.map +1 -1
- package/dist/src/routes/app-grants.js +2 -0
- package/dist/src/routes/app-grants.js.map +1 -1
- package/dist/src/routes/bootstrap.js +1 -1
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/catalogue.d.ts.map +1 -1
- package/dist/src/routes/catalogue.js +17 -8
- package/dist/src/routes/catalogue.js.map +1 -1
- package/dist/src/routes/federation-sync.d.ts.map +1 -1
- package/dist/src/routes/federation-sync.js +1 -0
- package/dist/src/routes/federation-sync.js.map +1 -1
- package/dist/src/routes/memory.d.ts +3 -0
- package/dist/src/routes/memory.d.ts.map +1 -1
- package/dist/src/routes/memory.js +242 -14
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/messages.d.ts.map +1 -1
- package/dist/src/routes/messages.js +22 -19
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/organisms.d.ts.map +1 -1
- package/dist/src/routes/organisms.js +321 -3
- package/dist/src/routes/organisms.js.map +1 -1
- package/dist/src/routes/public-stats.d.ts +2 -0
- package/dist/src/routes/public-stats.d.ts.map +1 -1
- package/dist/src/routes/public-stats.js +93 -104
- package/dist/src/routes/public-stats.js.map +1 -1
- package/dist/src/routes/stats.d.ts.map +1 -1
- package/dist/src/routes/stats.js +6 -0
- package/dist/src/routes/stats.js.map +1 -1
- package/dist/src/routes/usage.d.ts +17 -0
- package/dist/src/routes/usage.d.ts.map +1 -0
- package/dist/src/routes/usage.js +35 -0
- package/dist/src/routes/usage.js.map +1 -0
- package/dist/src/routes/wallet.d.ts +2 -0
- package/dist/src/routes/wallet.d.ts.map +1 -1
- package/dist/src/routes/wallet.js +13 -6
- package/dist/src/routes/wallet.js.map +1 -1
- package/dist/src/routes/workflows.d.ts.map +1 -1
- package/dist/src/routes/workflows.js +13 -2
- package/dist/src/routes/workflows.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +18 -2
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/services/cache.d.ts +61 -0
- package/dist/src/services/cache.d.ts.map +1 -0
- package/dist/src/services/cache.js +143 -0
- package/dist/src/services/cache.js.map +1 -0
- package/dist/src/services/connect-tunnel.d.ts +11 -0
- package/dist/src/services/connect-tunnel.d.ts.map +1 -1
- package/dist/src/services/connect-tunnel.js +36 -0
- package/dist/src/services/connect-tunnel.js.map +1 -1
- package/dist/src/services/message-delivery.d.ts.map +1 -1
- package/dist/src/services/message-delivery.js +1 -0
- package/dist/src/services/message-delivery.js.map +1 -1
- package/dist/src/services/message-send.d.ts +13 -0
- package/dist/src/services/message-send.d.ts.map +1 -1
- package/dist/src/services/message-send.js +28 -5
- package/dist/src/services/message-send.js.map +1 -1
- package/dist/src/services/organism-search.d.ts +12 -7
- package/dist/src/services/organism-search.d.ts.map +1 -1
- package/dist/src/services/organism-search.js +93 -60
- package/dist/src/services/organism-search.js.map +1 -1
- package/dist/src/services/usage-summary.d.ts +77 -0
- package/dist/src/services/usage-summary.d.ts.map +1 -0
- package/dist/src/services/usage-summary.js +85 -0
- package/dist/src/services/usage-summary.js.map +1 -0
- package/dist/src/services/workspace-enrichment.d.ts +76 -0
- package/dist/src/services/workspace-enrichment.d.ts.map +1 -0
- package/dist/src/services/workspace-enrichment.js +144 -0
- package/dist/src/services/workspace-enrichment.js.map +1 -0
- package/dist/src/storage/interface.d.ts +5 -1
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +16 -0
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +51 -1
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +16 -0
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +20 -2
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts +15 -0
- package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.js +28 -2
- package/dist/src/storage/providers/sqlite/repos/direct-message.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.js +4 -0
- package/dist/src/storage/providers/sqlite/repos/memory.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +4 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/direct-message.repository.d.ts +20 -0
- package/dist/src/storage/repositories/direct-message.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/memory.repository.d.ts +1 -0
- package/dist/src/storage/repositories/memory.repository.d.ts.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.postgres.prisma +1 -0
- package/prisma/schema.prisma +1 -0
package/dist/locales/en.json
CHANGED
|
@@ -18,6 +18,14 @@
|
|
|
18
18
|
"inbox.empty": "Nothing here yet.",
|
|
19
19
|
"inbox.attachmentPending": "attachment pending",
|
|
20
20
|
"inbox.attachmentExpired": "attachment expired",
|
|
21
|
+
"inbox.attachmentOpen": "Open in a new tab",
|
|
22
|
+
"inbox.attachmentView": "View",
|
|
23
|
+
"inbox.attachmentOpenRaw": "Open raw",
|
|
24
|
+
"inbox.attachmentDownload": "Download",
|
|
25
|
+
"inbox.attachmentLoadError": "Could not load this attachment.",
|
|
26
|
+
"inbox.close": "Close",
|
|
27
|
+
"inbox.directThread": "Direct",
|
|
28
|
+
"inbox.subjectPlaceholder": "Subject (optional — starts a new thread)",
|
|
21
29
|
"admin.messages.title": "Direct messages",
|
|
22
30
|
"admin.messages.desc": "Delivery telemetry for user-to-user messages. No message content or participant identities are shown.",
|
|
23
31
|
"admin.messages.total": "Total sent",
|
|
@@ -1108,6 +1116,7 @@
|
|
|
1108
1116
|
"domainStorage": "Storage (files)",
|
|
1109
1117
|
"domainWork": "Work",
|
|
1110
1118
|
"domainSocial": "Social",
|
|
1119
|
+
"domainMessages": "Direct messages (inbox)",
|
|
1111
1120
|
"domainWallet": "Wallet",
|
|
1112
1121
|
"domainConsent": "Consent",
|
|
1113
1122
|
"domainTunnel": "Tunnel",
|
|
@@ -1122,6 +1131,7 @@
|
|
|
1122
1131
|
"permWrite": "Write",
|
|
1123
1132
|
"permDelete": "Delete",
|
|
1124
1133
|
"permRequest": "Request",
|
|
1134
|
+
"permSend": "Send",
|
|
1125
1135
|
"permAccept": "Accept",
|
|
1126
1136
|
"permPublish": "Publish",
|
|
1127
1137
|
"permManage": "Manage",
|
|
@@ -1506,7 +1516,7 @@
|
|
|
1506
1516
|
"readme": "README",
|
|
1507
1517
|
"integration": "Integration",
|
|
1508
1518
|
"tasks": "Tasks",
|
|
1509
|
-
"messages": "
|
|
1519
|
+
"messages": "Chat",
|
|
1510
1520
|
"data_access": "Memory",
|
|
1511
1521
|
"directives": "Directives",
|
|
1512
1522
|
"agent_config": "Agent Config",
|
|
@@ -2055,7 +2065,36 @@
|
|
|
2055
2065
|
"bulkClear": "Clear selection",
|
|
2056
2066
|
"bulkDone": "{n} updated",
|
|
2057
2067
|
"bulkDeleted": "{n} deleted",
|
|
2058
|
-
"bulkDeleteConfirm": "Delete {n} memory entries? This cannot be undone."
|
|
2068
|
+
"bulkDeleteConfirm": "Delete {n} memory entries? This cannot be undone.",
|
|
2069
|
+
"toolsLabel": "Tools",
|
|
2070
|
+
"storageUsed": "Storage",
|
|
2071
|
+
"keysWord": "keys",
|
|
2072
|
+
"sizeLabel": "Value size",
|
|
2073
|
+
"sortSize": "Largest first",
|
|
2074
|
+
"loadingValue": "Loading value…",
|
|
2075
|
+
"loadContents": "Load all contents",
|
|
2076
|
+
"searchContents": "Search content or key…",
|
|
2077
|
+
"searchResultCount": "{n} matches",
|
|
2078
|
+
"searchEmpty": "No matches",
|
|
2079
|
+
"searchClear": "Clear search",
|
|
2080
|
+
"searchInGroup": "Search in this group",
|
|
2081
|
+
"searchInGroupHint": "Type a query to search within {g}",
|
|
2082
|
+
"exportBtn": "Export",
|
|
2083
|
+
"exportDone": "Exported {n} entries",
|
|
2084
|
+
"importBtn": "Import",
|
|
2085
|
+
"importModeLabel": "Conflict handling",
|
|
2086
|
+
"importMode": {
|
|
2087
|
+
"skip": "Skip existing",
|
|
2088
|
+
"overwrite": "Overwrite",
|
|
2089
|
+
"rename": "Import as new"
|
|
2090
|
+
},
|
|
2091
|
+
"importConfirm": "Import {n} entries? Existing keys are handled by mode: {mode}.",
|
|
2092
|
+
"importDone": "Imported: {c} new, {u} updated, {s} skipped",
|
|
2093
|
+
"importBadJson": "Not a valid JSON backup",
|
|
2094
|
+
"importEmpty": "No entries found in file",
|
|
2095
|
+
"deleteGroup": "Delete group",
|
|
2096
|
+
"deleteGroupConfirm": "Delete all {n} entries under \"{g}\"? This cannot be undone.",
|
|
2097
|
+
"deleteGroupUnsupported": "This group cannot be bulk-deleted"
|
|
2059
2098
|
},
|
|
2060
2099
|
"files": {
|
|
2061
2100
|
"title": "Stored Files",
|
|
@@ -3452,6 +3491,19 @@
|
|
|
3452
3491
|
"viewBtn": "View",
|
|
3453
3492
|
"continueTitle": "Continue",
|
|
3454
3493
|
"agentsTitle": "Agents",
|
|
3494
|
+
"usageTitle": "Usage & quotas",
|
|
3495
|
+
"usageMemory": "Memory",
|
|
3496
|
+
"usageStorage": "Files",
|
|
3497
|
+
"usageMicro": "Micro-memory",
|
|
3498
|
+
"usageFilesWord": "files",
|
|
3499
|
+
"usageSetsWord": "sets",
|
|
3500
|
+
"usageAgents": "Agents",
|
|
3501
|
+
"usageOrganisms": "Organisms",
|
|
3502
|
+
"usageApps": "Apps",
|
|
3503
|
+
"usageEcoApps": "Connected apps",
|
|
3504
|
+
"usageExtensions": "Extensions",
|
|
3505
|
+
"usageCortexes": "Cortexes",
|
|
3506
|
+
"usageServices": "Services",
|
|
3455
3507
|
"activeTodayCount": "{n} active today",
|
|
3456
3508
|
"agentActiveToday": "active today",
|
|
3457
3509
|
"nextRunAt": "next run {time}",
|
|
@@ -6306,6 +6358,10 @@
|
|
|
6306
6358
|
"mindmap": {
|
|
6307
6359
|
"titleOrg": "Organism map",
|
|
6308
6360
|
"titleWs": "Workspace map",
|
|
6361
|
+
"chart": "Chart",
|
|
6362
|
+
"chartMindmap": "Mindmap",
|
|
6363
|
+
"chartLr": "Flowchart →",
|
|
6364
|
+
"chartTd": "Flowchart ↓",
|
|
6309
6365
|
"level": "Level",
|
|
6310
6366
|
"levelWs": "Workspaces",
|
|
6311
6367
|
"levelSpaces": "+ Spaces",
|
|
@@ -6323,6 +6379,19 @@
|
|
|
6323
6379
|
"pick": "Pick a point to see the structure then.",
|
|
6324
6380
|
"changed": "structure changed"
|
|
6325
6381
|
},
|
|
6382
|
+
"search": {
|
|
6383
|
+
"wsPlaceholder": "Search this workspace…",
|
|
6384
|
+
"orgPlaceholder": "Search this organism…",
|
|
6385
|
+
"allOrgsPlaceholder": "Search across all organisms…",
|
|
6386
|
+
"clear": "Clear",
|
|
6387
|
+
"noMatches": "No matches",
|
|
6388
|
+
"paletteTitle": "Search everything",
|
|
6389
|
+
"palettePlaceholder": "Search organisms, workspaces, records…",
|
|
6390
|
+
"recents": "Recent",
|
|
6391
|
+
"results": "Results",
|
|
6392
|
+
"openHint": "↵ open · Esc close",
|
|
6393
|
+
"searching": "Searching…"
|
|
6394
|
+
},
|
|
6326
6395
|
"organisms": {
|
|
6327
6396
|
"title": "Organisms",
|
|
6328
6397
|
"backToList": "All organisms",
|
package/dist/locales/fi.json
CHANGED
|
@@ -18,6 +18,14 @@
|
|
|
18
18
|
"inbox.empty": "Ei mitään vielä.",
|
|
19
19
|
"inbox.attachmentPending": "liite odottaa",
|
|
20
20
|
"inbox.attachmentExpired": "liite vanhentui",
|
|
21
|
+
"inbox.attachmentOpen": "Avaa uudessa välilehdessä",
|
|
22
|
+
"inbox.attachmentView": "Näytä",
|
|
23
|
+
"inbox.attachmentOpenRaw": "Avaa raakana",
|
|
24
|
+
"inbox.attachmentDownload": "Lataa",
|
|
25
|
+
"inbox.attachmentLoadError": "Liitettä ei voitu ladata.",
|
|
26
|
+
"inbox.close": "Sulje",
|
|
27
|
+
"inbox.directThread": "Suora",
|
|
28
|
+
"inbox.subjectPlaceholder": "Aihe (valinnainen — aloittaa uuden ketjun)",
|
|
21
29
|
"admin.messages.title": "Suorat viestit",
|
|
22
30
|
"admin.messages.desc": "Toimitustelemetria käyttäjien välisille viesteille. Viestien sisältöä tai osapuolten henkilöllisyyttä ei näytetä.",
|
|
23
31
|
"admin.messages.total": "Lähetetty yhteensä",
|
|
@@ -1108,6 +1116,7 @@
|
|
|
1108
1116
|
"domainStorage": "Tallennustila (tiedostot)",
|
|
1109
1117
|
"domainWork": "Työ",
|
|
1110
1118
|
"domainSocial": "Sosiaalinen",
|
|
1119
|
+
"domainMessages": "Suorat viestit (postilaatikko)",
|
|
1111
1120
|
"domainWallet": "Lompakko",
|
|
1112
1121
|
"domainConsent": "Suostumus",
|
|
1113
1122
|
"domainTunnel": "Tunneli",
|
|
@@ -1122,6 +1131,7 @@
|
|
|
1122
1131
|
"permWrite": "Kirjoitus",
|
|
1123
1132
|
"permDelete": "Poisto",
|
|
1124
1133
|
"permRequest": "Pyyntö",
|
|
1134
|
+
"permSend": "Lähetys",
|
|
1125
1135
|
"permAccept": "Hyväksyntä",
|
|
1126
1136
|
"permPublish": "Julkaisu",
|
|
1127
1137
|
"permManage": "Hallinta",
|
|
@@ -1506,7 +1516,7 @@
|
|
|
1506
1516
|
"readme": "README",
|
|
1507
1517
|
"integration": "Integraatio",
|
|
1508
1518
|
"tasks": "Tehtävät",
|
|
1509
|
-
"messages": "
|
|
1519
|
+
"messages": "Keskustelu",
|
|
1510
1520
|
"data_access": "Muisti",
|
|
1511
1521
|
"directives": "Ohjeistukset",
|
|
1512
1522
|
"agent_config": "Agenttiasetukset",
|
|
@@ -2055,7 +2065,36 @@
|
|
|
2055
2065
|
"bulkClear": "Tyhjennä valinta",
|
|
2056
2066
|
"bulkDone": "{n} päivitetty",
|
|
2057
2067
|
"bulkDeleted": "{n} poistettu",
|
|
2058
|
-
"bulkDeleteConfirm": "Poistetaanko {n} muistimerkintää? Ei voi perua."
|
|
2068
|
+
"bulkDeleteConfirm": "Poistetaanko {n} muistimerkintää? Ei voi perua.",
|
|
2069
|
+
"toolsLabel": "Työkalut",
|
|
2070
|
+
"storageUsed": "Tallennustila",
|
|
2071
|
+
"keysWord": "avainta",
|
|
2072
|
+
"sizeLabel": "Arvon koko",
|
|
2073
|
+
"sortSize": "Suurimmat ensin",
|
|
2074
|
+
"loadingValue": "Ladataan sisältöä…",
|
|
2075
|
+
"loadContents": "Lataa kaikki sisällöt",
|
|
2076
|
+
"searchContents": "Hae sisällöstä tai avaimesta…",
|
|
2077
|
+
"searchResultCount": "{n} osumaa",
|
|
2078
|
+
"searchEmpty": "Ei osumia",
|
|
2079
|
+
"searchClear": "Tyhjennä haku",
|
|
2080
|
+
"searchInGroup": "Hae tästä ryhmästä",
|
|
2081
|
+
"searchInGroupHint": "Kirjoita hakusana hakeaksesi ryhmästä {g}",
|
|
2082
|
+
"exportBtn": "Vie",
|
|
2083
|
+
"exportDone": "Vietiin {n} merkintää",
|
|
2084
|
+
"importBtn": "Tuo",
|
|
2085
|
+
"importModeLabel": "Ristiriitojen käsittely",
|
|
2086
|
+
"importMode": {
|
|
2087
|
+
"skip": "Ohita olemassa olevat",
|
|
2088
|
+
"overwrite": "Korvaa",
|
|
2089
|
+
"rename": "Tuo uusina"
|
|
2090
|
+
},
|
|
2091
|
+
"importConfirm": "Tuodaanko {n} merkintää? Olemassa olevat avaimet käsitellään tilassa: {mode}.",
|
|
2092
|
+
"importDone": "Tuotiin: {c} uutta, {u} päivitetty, {s} ohitettu",
|
|
2093
|
+
"importBadJson": "Ei kelvollinen JSON-varmuuskopio",
|
|
2094
|
+
"importEmpty": "Tiedostosta ei löytynyt merkintöjä",
|
|
2095
|
+
"deleteGroup": "Poista ryhmä",
|
|
2096
|
+
"deleteGroupConfirm": "Poistetaanko kaikki {n} merkintää ryhmästä \"{g}\"? Ei voi perua.",
|
|
2097
|
+
"deleteGroupUnsupported": "Tätä ryhmää ei voi poistaa joukkona"
|
|
2059
2098
|
},
|
|
2060
2099
|
"files": {
|
|
2061
2100
|
"title": "Tallennetut tiedostot",
|
|
@@ -3452,6 +3491,19 @@
|
|
|
3452
3491
|
"viewBtn": "Avaa",
|
|
3453
3492
|
"continueTitle": "Jatka",
|
|
3454
3493
|
"agentsTitle": "Agentit",
|
|
3494
|
+
"usageTitle": "Käyttö & kiintiöt",
|
|
3495
|
+
"usageMemory": "Muisti",
|
|
3496
|
+
"usageStorage": "Tiedostot",
|
|
3497
|
+
"usageMicro": "Mikromuisti",
|
|
3498
|
+
"usageFilesWord": "tiedostoa",
|
|
3499
|
+
"usageSetsWord": "settiä",
|
|
3500
|
+
"usageAgents": "Agentit",
|
|
3501
|
+
"usageOrganisms": "Organismit",
|
|
3502
|
+
"usageApps": "Sovellukset",
|
|
3503
|
+
"usageEcoApps": "Liitetyt sovellukset",
|
|
3504
|
+
"usageExtensions": "Laajennukset",
|
|
3505
|
+
"usageCortexes": "Korteksit",
|
|
3506
|
+
"usageServices": "Palvelut",
|
|
3455
3507
|
"activeTodayCount": "{n} aktiivista tänään",
|
|
3456
3508
|
"agentActiveToday": "aktiivinen tänään",
|
|
3457
3509
|
"nextRunAt": "seuraava ajo {time}",
|
|
@@ -6306,6 +6358,10 @@
|
|
|
6306
6358
|
"mindmap": {
|
|
6307
6359
|
"titleOrg": "Organismin kartta",
|
|
6308
6360
|
"titleWs": "Työtilan kartta",
|
|
6361
|
+
"chart": "Kaavio",
|
|
6362
|
+
"chartMindmap": "Mindmap",
|
|
6363
|
+
"chartLr": "Vuokaavio →",
|
|
6364
|
+
"chartTd": "Vuokaavio ↓",
|
|
6309
6365
|
"level": "Taso",
|
|
6310
6366
|
"levelWs": "Työtilat",
|
|
6311
6367
|
"levelSpaces": "+ Spacet",
|
|
@@ -6323,6 +6379,19 @@
|
|
|
6323
6379
|
"pick": "Valitse kohta nähdäksesi rakenteen silloin.",
|
|
6324
6380
|
"changed": "rakenne muuttui"
|
|
6325
6381
|
},
|
|
6382
|
+
"search": {
|
|
6383
|
+
"wsPlaceholder": "Hae tästä työtilasta…",
|
|
6384
|
+
"orgPlaceholder": "Hae tästä organismista…",
|
|
6385
|
+
"allOrgsPlaceholder": "Hae kaikista organismeista…",
|
|
6386
|
+
"clear": "Tyhjennä",
|
|
6387
|
+
"noMatches": "Ei osumia",
|
|
6388
|
+
"paletteTitle": "Hae kaikkea",
|
|
6389
|
+
"palettePlaceholder": "Hae organismeja, työtiloja, recordeja…",
|
|
6390
|
+
"recents": "Viimeisimmät",
|
|
6391
|
+
"results": "Tulokset",
|
|
6392
|
+
"openHint": "↵ avaa · Esc sulje",
|
|
6393
|
+
"searching": "Haetaan…"
|
|
6394
|
+
},
|
|
6326
6395
|
"organisms": {
|
|
6327
6396
|
"title": "Organismit",
|
|
6328
6397
|
"backToList": "Kaikki organismit",
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* Uses agd- prefix to avoid collisions with other profile styles.
|
|
5
5
|
* All colors use CSS variables from theme.css.
|
|
6
6
|
* @version-history
|
|
7
|
+
* v1.12.0 -- 2026-06-22 -- Add .pf-agd-capwrap rule so the capabilities summary
|
|
8
|
+
* ("N tools · N skills · N langs") gets the card content inset (1rem) instead of
|
|
9
|
+
* sitting flush against the edge, plus a small top gap from the tag/badge strip.
|
|
7
10
|
* v1.11.0 -- 2026-06-21 -- Add has-unseen DOT badge modifier (.pf-agd-*-badge--dot): a small
|
|
8
11
|
* round indicator replacing the old numeric change-count badge.
|
|
9
12
|
* v1.10.0 -- 2026-06-03 -- Add fleet "running now" panel styles (.pf-agd-active,
|
|
@@ -1796,6 +1799,14 @@
|
|
|
1796
1799
|
color: var(--text-dim, #6B7280);
|
|
1797
1800
|
}
|
|
1798
1801
|
|
|
1802
|
+
/* Capabilities summary (collapsed one-liner "N tools · N skills · N langs").
|
|
1803
|
+
The wrapper carries the card's content inset (1rem) so the summary doesn't sit
|
|
1804
|
+
flush against the card edge, plus a little top gap to separate it from the
|
|
1805
|
+
tag/badge strip above. */
|
|
1806
|
+
.pf .pf-agd-capwrap {
|
|
1807
|
+
padding: 0.4rem 1rem 0.1rem;
|
|
1808
|
+
}
|
|
1809
|
+
|
|
1799
1810
|
/* Capabilities badges */
|
|
1800
1811
|
.pf .pf-agd-capabilities {
|
|
1801
1812
|
display: flex;
|
|
@@ -116,6 +116,25 @@
|
|
|
116
116
|
}
|
|
117
117
|
.inbox-conv:hover { background: var(--card-bg-alt); }
|
|
118
118
|
.inbox-conv--active { background: var(--accent-subtle); }
|
|
119
|
+
|
|
120
|
+
/* A person group: header (the human) + their threads (human + agents) nested + indented beneath. */
|
|
121
|
+
.inbox-conv-group { margin-bottom: 2px; }
|
|
122
|
+
.inbox-conv-group-head {
|
|
123
|
+
display: flex; align-items: center; gap: 8px;
|
|
124
|
+
padding: 6px 8px 2px; font-weight: 600;
|
|
125
|
+
}
|
|
126
|
+
.inbox-conv-group-head .inbox-name { flex: 1; min-width: 0; }
|
|
127
|
+
.inbox-conv--nested { padding-left: 18px; }
|
|
128
|
+
.inbox-conv--nested .inbox-name { font-weight: 400; }
|
|
129
|
+
.inbox-conv-subico {
|
|
130
|
+
width: 28px; flex: none; text-align: center; font-size: 15px; opacity: 0.8;
|
|
131
|
+
}
|
|
132
|
+
/* Subject thread chips (conversation list + thread header). */
|
|
133
|
+
.inbox-conv-subject {
|
|
134
|
+
flex: none; max-width: 60%; font-size: 11px; color: var(--accent);
|
|
135
|
+
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
|
136
|
+
}
|
|
137
|
+
.inbox-thread-subject { font-size: 12px; color: var(--accent); margin-top: 1px; }
|
|
119
138
|
.inbox-conv-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
120
139
|
.inbox-conv-line1, .inbox-conv-line2 { display: flex; align-items: center; gap: 6px; }
|
|
121
140
|
.inbox-conv-line1 .inbox-name { flex: 1; }
|
|
@@ -228,10 +247,52 @@
|
|
|
228
247
|
text-decoration: none;
|
|
229
248
|
color: inherit;
|
|
230
249
|
}
|
|
231
|
-
.inbox-attach-chip--pending { opacity: 0.55;
|
|
250
|
+
.inbox-attach-chip--pending { opacity: 0.55; }
|
|
232
251
|
.inbox-attach-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
233
252
|
.inbox-attach-pending { color: var(--text-dim); font-style: italic; }
|
|
234
253
|
|
|
254
|
+
/* The chip's main affordance (link or button) opens/views the file; the download button sits beside it. */
|
|
255
|
+
.inbox-attach-open {
|
|
256
|
+
display: inline-flex; align-items: center; gap: 5px; min-width: 0;
|
|
257
|
+
background: none; border: none; padding: 0; margin: 0; cursor: pointer;
|
|
258
|
+
font: inherit; color: inherit; text-decoration: none;
|
|
259
|
+
}
|
|
260
|
+
.inbox-attach-open:hover .inbox-attach-name { text-decoration: underline; }
|
|
261
|
+
.inbox-attach-dl {
|
|
262
|
+
flex-shrink: 0; text-decoration: none; color: var(--text-dim);
|
|
263
|
+
font-size: 13px; line-height: 1; padding: 2px 4px; border-radius: var(--radius-xs);
|
|
264
|
+
}
|
|
265
|
+
.inbox-attach-dl:hover { color: var(--text); background: var(--bg-dim); }
|
|
266
|
+
|
|
267
|
+
/* Image attachment: thumbnail + caption row (name + download). */
|
|
268
|
+
.inbox-attach-item {
|
|
269
|
+
display: inline-flex; flex-direction: column; gap: 4px; max-width: 200px;
|
|
270
|
+
}
|
|
271
|
+
.inbox-attach-thumb-link { display: block; line-height: 0; }
|
|
272
|
+
.inbox-attach-thumb {
|
|
273
|
+
max-width: 200px; max-height: 160px; border-radius: var(--radius-sm);
|
|
274
|
+
border: 1px solid var(--border); object-fit: cover; cursor: zoom-in;
|
|
275
|
+
}
|
|
276
|
+
.inbox-attach-cap { display: flex; align-items: center; gap: 6px; font-size: 12px; max-width: 200px; }
|
|
277
|
+
.inbox-attach-cap .inbox-attach-name { flex: 1; min-width: 0; color: var(--text-dim); }
|
|
278
|
+
|
|
279
|
+
/* In-app markdown viewer overlay. */
|
|
280
|
+
.inbox-mdviewer-overlay {
|
|
281
|
+
position: fixed; inset: 0; z-index: 1200; background: rgba(0, 0, 0, 0.6);
|
|
282
|
+
display: flex; align-items: center; justify-content: center; padding: 24px;
|
|
283
|
+
}
|
|
284
|
+
.inbox-mdviewer {
|
|
285
|
+
display: flex; flex-direction: column; width: min(860px, 100%); max-height: 88vh;
|
|
286
|
+
background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden;
|
|
287
|
+
}
|
|
288
|
+
.inbox-mdviewer-head {
|
|
289
|
+
display: flex; align-items: center; justify-content: space-between; gap: 12px;
|
|
290
|
+
padding: 10px 14px; border-bottom: 1px solid var(--border); background: var(--surface);
|
|
291
|
+
}
|
|
292
|
+
.inbox-mdviewer-title { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
293
|
+
.inbox-mdviewer-actions { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
|
|
294
|
+
.inbox-mdviewer-body { padding: 18px 22px; overflow: auto; }
|
|
295
|
+
|
|
235
296
|
/* ── Composer ── */
|
|
236
297
|
.inbox-compose-fields { padding: 12px 12px 0; }
|
|
237
298
|
.inbox-composer {
|
|
@@ -4,6 +4,11 @@
|
|
|
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
|
+
* v2.7.0 — 2026-06-22 — Home "Usage & quotas" card: .pf-usage-card/.pf-usage-row/.pf-usage-bar/
|
|
8
|
+
* .pf-usage-fill (quota bars) + .pf-usage-chips/.pf-usage-chip (count chips).
|
|
9
|
+
* v2.6.0 — 2026-06-22 — Scalable Memory tab: .pf-mem-quota* (storage-usage bar), .pf-mem-size
|
|
10
|
+
* (value-size column), .mem-tools-bar/.mem-import-group (server search + export/import row),
|
|
11
|
+
* .mem-group-actions (hover search/delete on group headers), .mem-search-summary.
|
|
7
12
|
* v2.5.0 — 2026-06-16 — Grouped workspace nav: .pj-org-groups/.pj-org-group/.pj-org-group-cap
|
|
8
13
|
* (clickable group caption, -static variant)/.pj-org-group-tabs cluster the tab row, with a
|
|
9
14
|
* vertical divider (border-left) between groups; stacked-group content .pj-group-view/
|
|
@@ -273,6 +278,23 @@
|
|
|
273
278
|
.pf .mem-vis{font-size:.7rem}
|
|
274
279
|
.pf .shield-icon{font-size:.85rem;cursor:pointer;opacity:.6;transition:opacity .2s}
|
|
275
280
|
.pf .shield-icon:hover{opacity:1}
|
|
281
|
+
/* ── Scalable Memory tab (2026-06-22): storage bar, size column, tools bar, group actions ── */
|
|
282
|
+
.pf .pf-mem-quota{margin:.25rem 0 .6rem}
|
|
283
|
+
.pf .pf-mem-quota-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:.25rem}
|
|
284
|
+
.pf .pf-mem-quota-bar{height:6px;border-radius:999px;background:var(--bg-dim);overflow:hidden}
|
|
285
|
+
.pf .pf-mem-quota-fill{height:100%;background:var(--accent);border-radius:999px;transition:width .3s}
|
|
286
|
+
.pf .pf-mem-quota-fill--danger{background:var(--danger)}
|
|
287
|
+
.pf .pf-mem-size{font-size:.68rem;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}
|
|
288
|
+
/* Data-management tools grouped in their own bordered panel, above the search/sort rows */
|
|
289
|
+
.pf .mem-tools-section{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;padding:.5rem .75rem;margin:.25rem 0 .6rem;background:var(--bg-surface,var(--bg-dim));border:1px solid var(--border);border-radius:8px}
|
|
290
|
+
.pf .mem-tools-label{font-size:.68rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-dim)}
|
|
291
|
+
.pf .mem-tools-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
|
|
292
|
+
.pf .mem-import-group{display:inline-flex;align-items:center;gap:.35rem}
|
|
293
|
+
.pf .mem-bottom-bar{gap:.75rem}
|
|
294
|
+
.pf .mem-bottom-bar .mem-new-btn{margin-left:auto}
|
|
295
|
+
.pf .mem-group-actions{margin-left:auto;display:inline-flex;align-items:center;gap:.15rem;opacity:0;transition:opacity .15s}
|
|
296
|
+
.pf .mem-group-header:hover .mem-group-actions{opacity:1}
|
|
297
|
+
.pf .mem-search-summary{display:flex;justify-content:space-between;align-items:center;padding:.35rem .2rem;border-bottom:1px solid var(--border);margin-bottom:.25rem}
|
|
276
298
|
.pf .key-rules-box{background:var(--bg-surface);border:1px solid rgba(139,92,246,.3);border-radius:8px;padding:.75rem;margin-top:.75rem;margin-bottom:.5rem}
|
|
277
299
|
.pf .mem-detail{background:rgba(0,0,0,.04);border:1px solid rgba(232,86,74,.1);border-radius:8px;padding:1rem;margin-top:.5rem;font-size:.85rem}
|
|
278
300
|
.pf .mem-detail pre{white-space:pre-wrap;word-break:break-all;font-family:monospace;color:var(--text,#1A1A2E);font-size:.8rem}
|
|
@@ -2152,10 +2174,14 @@
|
|
|
2152
2174
|
.pj-item .btn-ghost { background: var(--card); box-shadow: var(--shadow-sm); }
|
|
2153
2175
|
.pj-item .btn-ghost:hover { background: var(--bg-surface); border-color: var(--text-muted); }
|
|
2154
2176
|
.pj-item-text { flex: 1; font-size: 0.9rem; }
|
|
2155
|
-
|
|
2177
|
+
/* Each record is its own card with air around it, so stacked records read as separate units. */
|
|
2178
|
+
.pj-rec { border: 1px solid var(--border); background: var(--card); border-radius: 8px; padding: 0.4rem 0.7rem; margin: 0.5rem 0; }
|
|
2156
2179
|
.pj-rec-title { flex: 1; text-align: left; background: none; border: none; cursor: pointer; font-size: 0.9rem; color: var(--text); padding: 0; }
|
|
2157
2180
|
.pj-rec-title:hover { color: var(--accent); }
|
|
2158
|
-
.pj-rec-fields { margin: 0.
|
|
2181
|
+
.pj-rec-fields { margin: 0.4rem 0 0.2rem; padding: 0.5rem 0.7rem; border-top: 1px solid var(--border); background: var(--bg-dim); border-radius: 6px; }
|
|
2182
|
+
/* Inline editor — replaces the field view in the SAME card while editing (one editor at a time). */
|
|
2183
|
+
.pj-rec-edit { margin: 0.4rem 0 0.2rem; padding: 0.5rem 0.7rem; border-top: 1px solid var(--border); background: var(--bg-dim); border-radius: 6px; }
|
|
2184
|
+
.pj-rec-edit-new { border-top: none; }
|
|
2159
2185
|
/* Comment thread on a workspace object (record/document) */
|
|
2160
2186
|
.pj-comments { margin: 0.5rem 0 0.25rem; padding-top: 0.5rem; border-top: 1px solid var(--border); }
|
|
2161
2187
|
.pj-comment { padding: 0.4rem 0.5rem; margin: 0.3rem 0; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; }
|
|
@@ -2165,14 +2191,45 @@
|
|
|
2165
2191
|
.pj-comment-actions { display: flex; gap: 0.3rem; }
|
|
2166
2192
|
.pj-comment-compose { display: flex; flex-direction: column; gap: 0.35rem; margin-top: 0.5rem; }
|
|
2167
2193
|
.pj-comment-compose textarea { resize: vertical; }
|
|
2168
|
-
/*
|
|
2169
|
-
|
|
2170
|
-
.pj-rec-
|
|
2171
|
-
.pj-rec-
|
|
2172
|
-
.pj-rec-
|
|
2173
|
-
.pj-rec-
|
|
2194
|
+
/* Record fields: label ON TOP (small, muted), value below at full width, LEFT-aligned and wrapping
|
|
2195
|
+
— natural left-to-right reading (was a right-aligned single line that ran off and didn't wrap). */
|
|
2196
|
+
.pj-rec-field { margin: 0 0 0.6rem; }
|
|
2197
|
+
.pj-rec-field:last-child { margin-bottom: 0; }
|
|
2198
|
+
.pj-rec-field-label { font-size: 0.72rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.02em; color: var(--muted); margin-bottom: 0.12rem; }
|
|
2199
|
+
.pj-rec-field-val { font-size: 0.88rem; color: var(--text); text-align: left; overflow-wrap: anywhere; }
|
|
2200
|
+
.pj-rec-field-text { white-space: pre-wrap; }
|
|
2201
|
+
.pj-rec-field-list { margin: 0.1rem 0 0; padding-left: 1.1rem; }
|
|
2202
|
+
.pj-rec-field-list li { margin: 0.1rem 0; }
|
|
2203
|
+
.pj-rec-json { margin: 0.1rem 0 0; padding: 0.4rem 0.55rem; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; font-size: 0.78rem; white-space: pre-wrap; overflow-wrap: anywhere; max-height: 18rem; overflow: auto; }
|
|
2204
|
+
/* Markdown inside a record field — tighten the first/last margins so it sits flush in the field. */
|
|
2205
|
+
.pj-rec-md .md-body { font-size: 0.88rem; line-height: 1.5; }
|
|
2206
|
+
.pj-rec-md .md-body > :first-child { margin-top: 0; }
|
|
2207
|
+
.pj-rec-md .md-body > :last-child { margin-bottom: 0; }
|
|
2174
2208
|
.pj-rec-empty { font-size: 0.82rem; padding: 0.2rem 0; }
|
|
2175
2209
|
.pj-empty { color: var(--muted); font-size: 0.85rem; padding: 0.2rem 0; }
|
|
2210
|
+
|
|
2211
|
+
/* ── In-context content search (Kerros 1): filter tabs to matches + grouped result list ── */
|
|
2212
|
+
.pj-ws-searchbar, .pj-org-globalsearch { display: flex; align-items: center; gap: 0.5rem; margin: 0.4rem 0 0.6rem; }
|
|
2213
|
+
.pj-ws-searchbar .search-bar, .pj-org-globalsearch .search-bar { flex: 1; }
|
|
2214
|
+
.pj-org-tab-match { background: var(--accent); color: #fff; }
|
|
2215
|
+
.pj-search-results { margin-top: 0.4rem; }
|
|
2216
|
+
.pj-search-group { margin: 0 0 0.9rem; }
|
|
2217
|
+
.pj-search-group-head { display: flex; align-items: center; gap: 0.4rem; font-size: 0.8rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.02em; color: var(--text-dim); margin: 0 0 0.35rem; padding-bottom: 0.25rem; border-bottom: 1px solid var(--border); }
|
|
2218
|
+
.pj-search-hit { display: flex; flex-direction: column; gap: 0.15rem; width: 100%; text-align: left; background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 0.5rem 0.7rem; margin: 0.35rem 0; cursor: pointer; }
|
|
2219
|
+
.pj-search-hit:hover { border-color: var(--accent); background: var(--bg-dim); }
|
|
2220
|
+
.pj-search-hit-title { font-size: 0.9rem; font-weight: 600; color: var(--text); }
|
|
2221
|
+
.pj-search-hit-snippet { font-size: 0.8rem; color: var(--muted); overflow-wrap: anywhere; }
|
|
2222
|
+
|
|
2223
|
+
/* ── Global command palette (Cmd-K, Kerros 2) ── */
|
|
2224
|
+
.cmdk { display: flex; flex-direction: column; gap: 0.4rem; min-width: min(92vw, 40rem); }
|
|
2225
|
+
.cmdk-hint { font-size: 0.72rem; text-align: right; }
|
|
2226
|
+
.cmdk-list { max-height: 50vh; overflow: auto; margin-top: 0.2rem; }
|
|
2227
|
+
.cmdk-group { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); margin: 0.6rem 0 0.2rem; }
|
|
2228
|
+
.cmdk-item { display: flex; flex-direction: column; gap: 0.1rem; width: 100%; text-align: left; background: none; border: 1px solid transparent; border-radius: 8px; padding: 0.45rem 0.6rem; cursor: pointer; color: var(--text); }
|
|
2229
|
+
.cmdk-item.is-sel, .cmdk-item:hover { background: var(--bg-dim); border-color: var(--border); }
|
|
2230
|
+
.cmdk-item-label { font-size: 0.9rem; font-weight: 600; }
|
|
2231
|
+
.cmdk-item-sub { font-size: 0.75rem; color: var(--muted); }
|
|
2232
|
+
.cmdk-item-snippet { font-size: 0.76rem; color: var(--text-dim); overflow-wrap: anywhere; max-height: 2.6em; overflow: hidden; }
|
|
2176
2233
|
.pj-decision { font-size: 0.85rem; color: var(--muted); }
|
|
2177
2234
|
.pj-field { display: flex; flex-direction: column; gap: 0.2rem; margin-bottom: 0.35rem; }
|
|
2178
2235
|
.pj-field > span { font-size: 0.75rem; color: var(--muted); }
|
|
@@ -2560,13 +2617,19 @@
|
|
|
2560
2617
|
.pj-mm-opt select { width: auto; }
|
|
2561
2618
|
.pj-mm-check { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.8rem; color: var(--text-dim); cursor: pointer; }
|
|
2562
2619
|
.pj-mindmap-canvas { overflow: auto; max-height: 36rem; }
|
|
2563
|
-
.pj-mindmap-canvas .node { cursor: pointer; }
|
|
2564
|
-
.pj-mindmap-canvas .node:hover { opacity: 0.82; }
|
|
2620
|
+
.pj-mindmap-canvas .node, .pj-mindmap-canvas .mindmap-node { cursor: pointer; }
|
|
2621
|
+
.pj-mindmap-canvas .node:hover, .pj-mindmap-canvas .mindmap-node:hover { opacity: 0.82; }
|
|
2565
2622
|
.pj-mindmap-hint { margin-top: 0.4rem; }
|
|
2623
|
+
/* Mindmap heatmap: `:::heatN` attaches the class to the node; colour its shape from theme vars
|
|
2624
|
+
(flowchart modes colour via Mermaid classDef with the same theme-derived values). */
|
|
2625
|
+
.pj-mindmap-canvas .heat1 rect, .pj-mindmap-canvas .heat1 path, .pj-mindmap-canvas .heat1 circle { fill: var(--success-bg); stroke: var(--success-fg); }
|
|
2626
|
+
.pj-mindmap-canvas .heat2 rect, .pj-mindmap-canvas .heat2 path, .pj-mindmap-canvas .heat2 circle { fill: var(--warn-bg); stroke: var(--warn-fg); }
|
|
2627
|
+
.pj-mindmap-canvas .heat3 rect, .pj-mindmap-canvas .heat3 path, .pj-mindmap-canvas .heat3 circle { fill: var(--danger-bg); stroke: var(--danger-fg); }
|
|
2566
2628
|
|
|
2567
2629
|
/* ── Structure timeline / development (Osa D) ── */
|
|
2568
2630
|
.pj-timeline { margin: 0.4rem 0 0.9rem; }
|
|
2569
2631
|
.pj-timeline-body { margin-top: 0.4rem; padding: 0.75rem 0.9rem; background: var(--card); border: 1px solid var(--border); border-radius: 10px; }
|
|
2632
|
+
.pj-timeline-diagram { overflow: auto; max-height: 22rem; margin-bottom: 0.8rem; padding-bottom: 0.6rem; border-bottom: 1px solid var(--border); }
|
|
2570
2633
|
.pj-timeline-grid { display: grid; grid-template-columns: minmax(14rem, 22rem) 1fr; gap: 1rem; align-items: start; }
|
|
2571
2634
|
.pj-timeline-list { list-style: none; margin: 0; padding: 0; max-height: 30rem; overflow: auto; }
|
|
2572
2635
|
.pj-timeline-item { margin: 0; }
|
|
@@ -2662,6 +2725,20 @@
|
|
|
2662
2725
|
.pf-home-row-meta.pf-ok { color: var(--success-fg, var(--text)); }
|
|
2663
2726
|
.pf-lp-stat-link { background: none; border: none; padding: 0.15rem 0.35rem; border-radius: 8px; cursor: pointer; font: inherit; color: inherit; }
|
|
2664
2727
|
.pf-lp-stat-link:hover { background: var(--bg-surface); }
|
|
2728
|
+
/* Home "Usage & quotas" card — quota bars + count chips */
|
|
2729
|
+
.pf-usage-card { grid-column: 1 / -1; }
|
|
2730
|
+
.pf-usage-row { margin-bottom: 0.55rem; }
|
|
2731
|
+
.pf-usage-head { display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem; margin-bottom: 0.25rem; }
|
|
2732
|
+
.pf-usage-label { font-size: 0.82rem; font-weight: 600; color: var(--text); }
|
|
2733
|
+
.pf-usage-bar { height: 6px; border-radius: 999px; background: var(--bg-dim); overflow: hidden; }
|
|
2734
|
+
.pf-usage-fill { height: 100%; background: var(--accent); border-radius: 999px; transition: width 0.3s; }
|
|
2735
|
+
.pf-usage-fill--danger { background: var(--danger); }
|
|
2736
|
+
.pf-usage-chips { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.7rem; }
|
|
2737
|
+
.pf-usage-chip { display: inline-flex; flex-direction: column; align-items: flex-start; gap: 0.1rem; padding: 0.35rem 0.6rem; border: 1px solid var(--border); border-radius: 10px; background: var(--bg-surface); cursor: pointer; text-align: left; }
|
|
2738
|
+
.pf-usage-chip[disabled] { cursor: default; }
|
|
2739
|
+
.pf-usage-chip:not([disabled]):hover { border-color: var(--accent); }
|
|
2740
|
+
.pf-usage-chip-val { font-size: 0.95rem; font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }
|
|
2741
|
+
.pf-usage-chip-label { font-size: 0.7rem; color: var(--muted); }
|
|
2665
2742
|
.pf-promo-dismiss { float: right; background: none; border: none; cursor: pointer; color: var(--muted); font-size: 0.85rem; padding: 0 0.2rem; }
|
|
2666
2743
|
.pf-promo-dismiss:hover { color: var(--text); }
|
|
2667
2744
|
/* Edit profile / password dialogs */
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* v1.1.0 — 2026-06-10 — Add getMemory(key) single-entry read (GET /v1/memory/:key).
|
|
6
6
|
* v1.2.0 — 2026-06-21 — getMemory(key, { soft }) — optional ?soft=1 read returning 200/null
|
|
7
7
|
* for keys that may not exist yet (kills browser-console 404 noise).
|
|
8
|
+
* v1.3.0 — 2026-06-22 — Scalable Memory tab helpers: listMemoriesMeta (include=meta, values omitted),
|
|
9
|
+
* searchMemory prefix arg, exportMemory/importMemory/bulkDeleteMemory.
|
|
8
10
|
*/
|
|
9
11
|
import { api, apiGet, apiPost, apiDelete } from '/js/api.js';
|
|
10
12
|
|
|
@@ -16,6 +18,19 @@ export async function listMemories(agentGaii) {
|
|
|
16
18
|
return Array.isArray(list) ? list : [];
|
|
17
19
|
}
|
|
18
20
|
|
|
21
|
+
/**
|
|
22
|
+
* List memory metadata only — keys/tags/visibility/timestamps + per-entry `bytes`, NO values
|
|
23
|
+
* (include=meta). Fast for thousands of keys; values are fetched per-key on expand via getMemory().
|
|
24
|
+
* Returns { items, quota } so the tab can render the storage-usage bar.
|
|
25
|
+
*/
|
|
26
|
+
export async function listMemoriesMeta(agentGaii) {
|
|
27
|
+
let url = '/v1/memory?include=meta';
|
|
28
|
+
if (agentGaii) url += `&agent=${encodeURIComponent(agentGaii)}`;
|
|
29
|
+
const data = await apiGet(url);
|
|
30
|
+
const list = data?.data?.items || data?.data?.entries || [];
|
|
31
|
+
return { items: Array.isArray(list) ? list : [], quota: data?.data?.quota || null };
|
|
32
|
+
}
|
|
33
|
+
|
|
19
34
|
/** Cheap count of owner-scope memory entries (no values transferred). For stat displays. */
|
|
20
35
|
export async function countMemories() {
|
|
21
36
|
const data = await apiGet('/v1/memory?count=true');
|
|
@@ -29,19 +44,62 @@ export async function countMemories() {
|
|
|
29
44
|
* instead of a 404, avoiding browser-console 404 noise.
|
|
30
45
|
*/
|
|
31
46
|
export async function getMemory(key, opts) {
|
|
32
|
-
const
|
|
33
|
-
|
|
47
|
+
const params = new URLSearchParams();
|
|
48
|
+
if (opts && opts.soft) params.set('soft', '1');
|
|
49
|
+
if (opts && opts.agent) params.set('agent', opts.agent);
|
|
50
|
+
const q = params.toString();
|
|
51
|
+
return apiGet(`/v1/memory/${encodeURIComponent(key)}${q ? '?' + q : ''}`);
|
|
34
52
|
}
|
|
35
53
|
|
|
36
|
-
/**
|
|
37
|
-
|
|
54
|
+
/**
|
|
55
|
+
* Search memory by query string (server-side: matches key, value, and tags). Returns array.
|
|
56
|
+
* @param {string} [agentGaii] Owner-session: restrict to one agent's keyspace.
|
|
57
|
+
* @param {string} [prefix] Scope the search to a namespace/group (keys beginning with prefix).
|
|
58
|
+
*/
|
|
59
|
+
export async function searchMemory(query, agentGaii, prefix) {
|
|
38
60
|
let url = `/v1/memory/search?q=${encodeURIComponent(query)}`;
|
|
39
61
|
if (agentGaii) url += `&agent=${encodeURIComponent(agentGaii)}`;
|
|
62
|
+
if (prefix) url += `&prefix=${encodeURIComponent(prefix)}`;
|
|
40
63
|
const data = await apiGet(url);
|
|
41
64
|
const list = data?.data?.results || data?.data || [];
|
|
42
65
|
return Array.isArray(list) ? list : [];
|
|
43
66
|
}
|
|
44
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Export all of the caller's memory entries (full values) as a JSON backup object
|
|
70
|
+
* ({ exported_at, node_id, count, entries }). Optional agentGaii / prefix scope.
|
|
71
|
+
*/
|
|
72
|
+
export async function exportMemory(agentGaii, prefix) {
|
|
73
|
+
const params = new URLSearchParams();
|
|
74
|
+
if (agentGaii) params.set('agent', agentGaii);
|
|
75
|
+
if (prefix) params.set('prefix', prefix);
|
|
76
|
+
const qs = params.toString();
|
|
77
|
+
const data = await apiGet('/v1/memory/export' + (qs ? '?' + qs : ''));
|
|
78
|
+
return data?.data || { entries: [], count: 0 };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Import (restore/merge) a backup's entries. mode = 'skip' | 'overwrite' | 'rename'.
|
|
83
|
+
* Returns the summary envelope ({ data: { created, updated, skipped, failed } }).
|
|
84
|
+
*/
|
|
85
|
+
export async function importMemory(entries, mode, agentGaii) {
|
|
86
|
+
const body = { entries, mode: mode || 'skip' };
|
|
87
|
+
if (agentGaii) body.agent = agentGaii;
|
|
88
|
+
return apiPost('/v1/memory/import', body);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Bulk-delete memory entries by prefix and/or an explicit key list. Returns envelope ({ data: { deleted } }).
|
|
93
|
+
* @param {{ prefix?: string, keys?: string[], agentGaii?: string }} [opts]
|
|
94
|
+
*/
|
|
95
|
+
export async function bulkDeleteMemory({ prefix, keys, agentGaii } = {}) {
|
|
96
|
+
const body = {};
|
|
97
|
+
if (prefix) body.prefix = prefix;
|
|
98
|
+
if (keys && keys.length) body.keys = keys;
|
|
99
|
+
if (agentGaii) body.agent = agentGaii;
|
|
100
|
+
return apiPost('/v1/memory/bulk-delete', body);
|
|
101
|
+
}
|
|
102
|
+
|
|
45
103
|
/**
|
|
46
104
|
* Librarian full-text search across all of the caller's content (GET /v1/librarian/search).
|
|
47
105
|
* Returns the ranked hits array (each: { key, title, snippet, score, organismId, workspaceId, ... }).
|
|
@@ -15,11 +15,12 @@ import { api, apiGet } from '/js/api.js';
|
|
|
15
15
|
|
|
16
16
|
const enc = encodeURIComponent;
|
|
17
17
|
|
|
18
|
-
/** Send a direct message. `attachments` is an array of descriptors (storage_key, mime, size, kind, inline, id).
|
|
19
|
-
|
|
18
|
+
/** Send a direct message. `attachments` is an array of descriptors (storage_key, mime, size, kind, inline, id).
|
|
19
|
+
* `subject` opens a new topic thread; `conversationId` continues a specific existing thread. */
|
|
20
|
+
export async function send({ to, body, attachments, replyTo, subject, conversationId } = /** @type {{ to?: any, body?: any, attachments?: any, replyTo?: any, subject?: any, conversationId?: any }} */ ({})) {
|
|
20
21
|
return api('/v1/messages', {
|
|
21
22
|
method: 'POST',
|
|
22
|
-
body: JSON.stringify({ to, body, attachments, reply_to: replyTo }),
|
|
23
|
+
body: JSON.stringify({ to, body, attachments, reply_to: replyTo, subject, conversation_id: conversationId }),
|
|
23
24
|
});
|
|
24
25
|
}
|
|
25
26
|
|