aimeat 1.30.2 → 1.32.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 +246 -1
- package/dist/locales/fi.json +246 -1
- package/dist/public/components/InboxLink.js +29 -0
- package/dist/public/components/offer-card-view.js +87 -0
- package/dist/public/css/views/companies.css +65 -0
- package/dist/public/css/views/inbox.css +153 -1
- package/dist/public/css/views/members.css +33 -0
- package/dist/public/css/views/my-company.css +315 -0
- package/dist/public/css/views/profile.css +22 -0
- package/dist/public/js/services/messages.js +21 -3
- package/dist/public/js/services/notebook.js +16 -6
- package/dist/public/llms-template.txt +7 -0
- package/dist/public/spa.html +14 -0
- package/dist/public/views/companies.js +190 -0
- package/dist/public/views/members.js +42 -0
- package/dist/public/views/my-company.js +664 -0
- package/dist/public/views/portfolio-themes.js +77 -0
- package/dist/public/views/profile/agents-tab.js +4 -1
- package/dist/public/views/profile/discover-tab.js +118 -0
- package/dist/public/views/profile/inbox-tab.js +663 -16
- package/dist/public/views/profile/landing-page.js +2 -1
- package/dist/public/views/profile/notebook-card.js +11 -3
- package/dist/public/views/profile/offers-tab.js +5 -24
- package/dist/public/views/profile/organisms/home.js +5 -3
- package/dist/public/views/profile/organisms/mindmap.js +14 -3
- package/dist/public/views/profile/organisms/workspace.js +5 -2
- package/dist/public/views/profile/organisms-tab.js +12 -4
- package/dist/public/views/profile.js +2 -0
- package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.js +34 -0
- package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts +1 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/dm-messages.js +23 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.js +31 -0
- package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/workspaces.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/workspaces.js +4 -0
- package/dist/src/cli/connect/mcp/tools/workspaces.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +249 -0
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/generated/prisma-postgres/edge.js +6 -3
- package/dist/src/generated/prisma-postgres/index-browser.js +3 -0
- package/dist/src/generated/prisma-postgres/index.d.ts +112 -1
- package/dist/src/generated/prisma-postgres/index.js +6 -3
- package/dist/src/generated/prisma-postgres/package.json +1 -1
- package/dist/src/generated/prisma-postgres/schema.prisma +4 -0
- package/dist/src/generated/prisma-postgres/wasm.js +6 -3
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +2 -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 -1
- 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 +1 -0
- 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 +7 -4
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/core.d.ts.map +1 -1
- package/dist/src/mcp/core.js +49 -0
- package/dist/src/mcp/core.js.map +1 -1
- package/dist/src/mcp/dm-messages.d.ts +2 -0
- package/dist/src/mcp/dm-messages.d.ts.map +1 -1
- package/dist/src/mcp/dm-messages.js +45 -1
- package/dist/src/mcp/dm-messages.js.map +1 -1
- package/dist/src/models/message-schemas.d.ts +140 -2
- package/dist/src/models/message-schemas.d.ts.map +1 -1
- package/dist/src/models/message-schemas.js +60 -3
- package/dist/src/models/message-schemas.js.map +1 -1
- package/dist/src/routes/bootstrap.d.ts.map +1 -1
- package/dist/src/routes/bootstrap.js +3 -0
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/discover.d.ts +22 -0
- package/dist/src/routes/discover.d.ts.map +1 -0
- package/dist/src/routes/discover.js +123 -0
- package/dist/src/routes/discover.js.map +1 -0
- package/dist/src/routes/federation-sync.d.ts.map +1 -1
- package/dist/src/routes/federation-sync.js +69 -2
- package/dist/src/routes/federation-sync.js.map +1 -1
- package/dist/src/routes/messages.d.ts.map +1 -1
- package/dist/src/routes/messages.js +102 -3
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/organisms.d.ts +3 -0
- package/dist/src/routes/organisms.d.ts.map +1 -1
- package/dist/src/routes/organisms.js +11 -32
- package/dist/src/routes/organisms.js.map +1 -1
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +3 -0
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/portfolio.d.ts.map +1 -1
- package/dist/src/routes/portfolio.js +30 -0
- package/dist/src/routes/portfolio.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +2 -0
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/services/connect-tunnel.d.ts +3 -0
- package/dist/src/services/connect-tunnel.d.ts.map +1 -1
- package/dist/src/services/connect-tunnel.js +6 -0
- package/dist/src/services/connect-tunnel.js.map +1 -1
- package/dist/src/services/discovery/__tests__/discovery.test.d.ts +2 -0
- package/dist/src/services/discovery/__tests__/discovery.test.d.ts.map +1 -0
- package/dist/src/services/discovery/__tests__/discovery.test.js +178 -0
- package/dist/src/services/discovery/__tests__/discovery.test.js.map +1 -0
- package/dist/src/services/discovery/classify.d.ts +36 -0
- package/dist/src/services/discovery/classify.d.ts.map +1 -0
- package/dist/src/services/discovery/classify.js +61 -0
- package/dist/src/services/discovery/classify.js.map +1 -0
- package/dist/src/services/discovery/facets.d.ts +21 -0
- package/dist/src/services/discovery/facets.d.ts.map +1 -0
- package/dist/src/services/discovery/facets.js +0 -0
- package/dist/src/services/discovery/facets.js.map +1 -0
- package/dist/src/services/discovery/index.d.ts +22 -0
- package/dist/src/services/discovery/index.d.ts.map +1 -0
- package/dist/src/services/discovery/index.js +22 -0
- package/dist/src/services/discovery/index.js.map +1 -0
- package/dist/src/services/discovery/normalize.d.ts +25 -0
- package/dist/src/services/discovery/normalize.d.ts.map +1 -0
- package/dist/src/services/discovery/normalize.js +108 -0
- package/dist/src/services/discovery/normalize.js.map +1 -0
- package/dist/src/services/discovery/registry.d.ts +30 -0
- package/dist/src/services/discovery/registry.d.ts.map +1 -0
- package/dist/src/services/discovery/registry.js +31 -0
- package/dist/src/services/discovery/registry.js.map +1 -0
- package/dist/src/services/discovery/run.d.ts +23 -0
- package/dist/src/services/discovery/run.d.ts.map +1 -0
- package/dist/src/services/discovery/run.js +20 -0
- package/dist/src/services/discovery/run.js.map +1 -0
- package/dist/src/services/discovery/setup.d.ts +16 -0
- package/dist/src/services/discovery/setup.d.ts.map +1 -0
- package/dist/src/services/discovery/setup.js +12 -0
- package/dist/src/services/discovery/setup.js.map +1 -0
- package/dist/src/services/discovery/sources/memory-source.d.ts +24 -0
- package/dist/src/services/discovery/sources/memory-source.d.ts.map +1 -0
- package/dist/src/services/discovery/sources/memory-source.js +183 -0
- package/dist/src/services/discovery/sources/memory-source.js.map +1 -0
- package/dist/src/services/discovery/sources/table-sources.d.ts +27 -0
- package/dist/src/services/discovery/sources/table-sources.d.ts.map +1 -0
- package/dist/src/services/discovery/sources/table-sources.js +128 -0
- package/dist/src/services/discovery/sources/table-sources.js.map +1 -0
- package/dist/src/services/discovery/types.d.ts +117 -0
- package/dist/src/services/discovery/types.d.ts.map +1 -0
- package/dist/src/services/discovery/types.js +19 -0
- package/dist/src/services/discovery/types.js.map +1 -0
- package/dist/src/services/handbooks/agent.d.ts +1 -1
- package/dist/src/services/handbooks/agent.d.ts.map +1 -1
- package/dist/src/services/handbooks/agent.js +9 -3
- package/dist/src/services/handbooks/agent.js.map +1 -1
- package/dist/src/services/message-broadcast.d.ts +49 -0
- package/dist/src/services/message-broadcast.d.ts.map +1 -0
- package/dist/src/services/message-broadcast.js +116 -0
- package/dist/src/services/message-broadcast.js.map +1 -0
- package/dist/src/services/message-delivery.d.ts.map +1 -1
- package/dist/src/services/message-delivery.js +3 -0
- package/dist/src/services/message-delivery.js.map +1 -1
- package/dist/src/services/message-send.d.ts +9 -1
- package/dist/src/services/message-send.d.ts.map +1 -1
- package/dist/src/services/message-send.js +11 -5
- package/dist/src/services/message-send.js.map +1 -1
- package/dist/src/services/presence.d.ts +8 -0
- package/dist/src/services/presence.d.ts.map +1 -1
- package/dist/src/services/presence.js +38 -0
- package/dist/src/services/presence.js.map +1 -1
- package/dist/src/services/workspace-enrichment.d.ts +15 -5
- package/dist/src/services/workspace-enrichment.d.ts.map +1 -1
- package/dist/src/services/workspace-enrichment.js +52 -14
- package/dist/src/services/workspace-enrichment.js.map +1 -1
- package/dist/src/storage/interface.d.ts +49 -0
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +1 -0
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +16 -0
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +3 -0
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts +3 -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 +15 -2
- package/dist/src/storage/providers/sqlite/repos/direct-message.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +10 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/direct-message.repository.d.ts +3 -0
- package/dist/src/storage/repositories/direct-message.repository.d.ts.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.postgres.prisma +4 -0
- package/prisma/schema.prisma +4 -0
package/dist/locales/en.json
CHANGED
|
@@ -8,6 +8,65 @@
|
|
|
8
8
|
"inbox.send": "Send",
|
|
9
9
|
"inbox.sending": "Sending…",
|
|
10
10
|
"inbox.reply": "Reply",
|
|
11
|
+
"inbox.contactAgentSuffix": "(your agent)",
|
|
12
|
+
"inbox.messageThis": "Send a message",
|
|
13
|
+
"nav.members": "Members",
|
|
14
|
+
"members.title": "Members",
|
|
15
|
+
"members.desc": "People on this node who have published a portfolio.",
|
|
16
|
+
"members.empty": "No published portfolios yet.",
|
|
17
|
+
"inbox.broadcast": "Broadcast",
|
|
18
|
+
"inbox.broadcastTitle": "Send to many",
|
|
19
|
+
"inbox.bcModeBroadcast": "Message (repliable)",
|
|
20
|
+
"inbox.bcModeAnnouncement": "Announcement (read-only)",
|
|
21
|
+
"inbox.bcAddPlaceholder": "Add a recipient…",
|
|
22
|
+
"inbox.bcAdd": "Add",
|
|
23
|
+
"inbox.bcRemove": "Remove",
|
|
24
|
+
"inbox.bcNoGroup": "— Share Group (optional) —",
|
|
25
|
+
"inbox.bcSend": "Send to all",
|
|
26
|
+
"inbox.bcNoRecipients": "Add at least one recipient or a group",
|
|
27
|
+
"inbox.bcSent": "Broadcast sent",
|
|
28
|
+
"inbox.bcNoAudience": "— Audience (optional) —",
|
|
29
|
+
"inbox.bcNodeUsers": "All node users (operator)",
|
|
30
|
+
"inbox.bcFederationUsers": "All federation users (operator)",
|
|
31
|
+
"inbox.close": "Close",
|
|
32
|
+
"inbox.loading": "Loading…",
|
|
33
|
+
"inbox.cmdTitle": "Commands",
|
|
34
|
+
"inbox.cmdInsert": "Insert into message",
|
|
35
|
+
"inbox.schedTitle": "Schedule",
|
|
36
|
+
"inbox.schedNone": "No scheduled tasks yet.",
|
|
37
|
+
"inbox.schedOff": "off",
|
|
38
|
+
"inbox.schedTaskPh": "Task title",
|
|
39
|
+
"inbox.schedDescPh": "What should the agent do? (optional)",
|
|
40
|
+
"inbox.schedCreate": "Schedule",
|
|
41
|
+
"inbox.schedCreated": "Scheduled.",
|
|
42
|
+
"inbox.schedError": "Could not schedule.",
|
|
43
|
+
"inbox.parkToNotebook": "Add to notebook for later",
|
|
44
|
+
"inbox.parkedToNotebook": "Added to your notebook.",
|
|
45
|
+
"inbox.announcementNote": "Announcement — replies are disabled",
|
|
46
|
+
"inbox.bcTypeMessage": "Message",
|
|
47
|
+
"inbox.bcTypePoll": "Poll",
|
|
48
|
+
"inbox.pollSend": "Send poll",
|
|
49
|
+
"inbox.pollHeader": "Short label (chip)",
|
|
50
|
+
"inbox.pollPrompt": "Question",
|
|
51
|
+
"inbox.pollOption": "Option",
|
|
52
|
+
"inbox.pollAddOption": "Add option",
|
|
53
|
+
"inbox.pollRemoveQ": "Remove question",
|
|
54
|
+
"inbox.pollAddQuestion": "Add question",
|
|
55
|
+
"inbox.pollMulti": "Multiple choice",
|
|
56
|
+
"inbox.pollAllowOther": "Allow \"Other\"",
|
|
57
|
+
"inbox.pollRequired": "Required",
|
|
58
|
+
"inbox.pollNeedQuestion": "Add at least one question with options",
|
|
59
|
+
"inbox.results": "Results",
|
|
60
|
+
"inbox.resultsTitle": "Broadcast results",
|
|
61
|
+
"inbox.resultsEmpty": "No broadcasts sent yet",
|
|
62
|
+
"inbox.resultsRecipients": "Recipients",
|
|
63
|
+
"inbox.resultsDelivered": "Delivered",
|
|
64
|
+
"inbox.resultsRead": "Read",
|
|
65
|
+
"inbox.resultsAnswered": "Answered",
|
|
66
|
+
"inbox.answer.other": "Other",
|
|
67
|
+
"inbox.answer.otherPlaceholder": "Type your answer…",
|
|
68
|
+
"inbox.answer.send": "Send answers",
|
|
69
|
+
"inbox.answer.summaryTitle": "Answers",
|
|
11
70
|
"inbox.requests": "Requests",
|
|
12
71
|
"inbox.accept": "Accept",
|
|
13
72
|
"inbox.block": "Block",
|
|
@@ -483,7 +542,166 @@
|
|
|
483
542
|
"themeToDark": "Switch to dark mode",
|
|
484
543
|
"themeToLight": "Switch to light mode",
|
|
485
544
|
"howItWorks": "How it works",
|
|
486
|
-
"business": "For your business"
|
|
545
|
+
"business": "For your business",
|
|
546
|
+
"myCompany": "My Company",
|
|
547
|
+
"companies": "Companies"
|
|
548
|
+
},
|
|
549
|
+
"companies": {
|
|
550
|
+
"title": "Companies",
|
|
551
|
+
"desc": "Browse companies on this node and order their agents' offerings.",
|
|
552
|
+
"directory": "Directory",
|
|
553
|
+
"none": "No companies yet.",
|
|
554
|
+
"offeringsShort": "offerings",
|
|
555
|
+
"selectHint": "Pick a company to see its profile and catalogue.",
|
|
556
|
+
"businessId": "Business ID (Y-tunnus)",
|
|
557
|
+
"catalogue": "Offerings for sale",
|
|
558
|
+
"noOfferings": "This company has no offerings listed yet.",
|
|
559
|
+
"callable": "Runs instantly — result appears below.",
|
|
560
|
+
"viaInbox": "Handled by the seller's agent — track it in My orders.",
|
|
561
|
+
"usePlaceholder": "Describe what you need (optional)…",
|
|
562
|
+
"order": "Order",
|
|
563
|
+
"morsels": "morsels",
|
|
564
|
+
"loginToOrder": "Log in to order",
|
|
565
|
+
"orderResult": "Done — result below.",
|
|
566
|
+
"orderTask": "Order received — the seller's agent {agent} will handle it.",
|
|
567
|
+
"charged": "Charged {n} morsels",
|
|
568
|
+
"myOrders": "My orders",
|
|
569
|
+
"noMyOrders": "You haven't ordered anything yet.",
|
|
570
|
+
"done": "Done",
|
|
571
|
+
"free": "Free",
|
|
572
|
+
"fromCompany": "Company",
|
|
573
|
+
"stQueued": "Queued",
|
|
574
|
+
"stActive": "In progress",
|
|
575
|
+
"stDone": "Done",
|
|
576
|
+
"stFailed": "Failed",
|
|
577
|
+
"stInstant": "Instant",
|
|
578
|
+
"viewPortfolio": "View portfolio",
|
|
579
|
+
"enterpriseRequired": "The company directory requires the AIMEAT Enterprise edition. This node runs the free Community edition."
|
|
580
|
+
},
|
|
581
|
+
"myCompany": {
|
|
582
|
+
"title": "My Company",
|
|
583
|
+
"desc": "Create a company and sell your agents' capabilities (priced in morsels).",
|
|
584
|
+
"yourCompanies": "Your companies",
|
|
585
|
+
"noCompanies": "No companies yet — create one below.",
|
|
586
|
+
"createCompany": "Create a company",
|
|
587
|
+
"slug": "Slug (URL id)",
|
|
588
|
+
"name": "Company name",
|
|
589
|
+
"create": "Create company",
|
|
590
|
+
"selectHint": "Select a company on the left, or create one.",
|
|
591
|
+
"offerings": "Catalog",
|
|
592
|
+
"noOfferings": "Catalog is empty — add a capability from your agents below.",
|
|
593
|
+
"addFromOffers": "+ Add to catalog",
|
|
594
|
+
"done": "Done",
|
|
595
|
+
"pickHint": "Pick one of your agents' capabilities to add to the catalog:",
|
|
596
|
+
"noOffersToList": "Your agents have no offerings yet. Create offers on your agents first.",
|
|
597
|
+
"putUpForSale": "Put up for sale",
|
|
598
|
+
"listed": "Listed ✓",
|
|
599
|
+
"free": "free",
|
|
600
|
+
"callable": "instant",
|
|
601
|
+
"viaInbox": "via agent inbox",
|
|
602
|
+
"use": "Order",
|
|
603
|
+
"usePlaceholder": "What do you want? (optional)…",
|
|
604
|
+
"result": "Result",
|
|
605
|
+
"manage": "Manage",
|
|
606
|
+
"edit": "Edit",
|
|
607
|
+
"cancel": "Cancel",
|
|
608
|
+
"visibilityLabel": "Visibility",
|
|
609
|
+
"priceLabel": "Price",
|
|
610
|
+
"lastSavedBy": "Last saved by",
|
|
611
|
+
"notForSale": "not for sale",
|
|
612
|
+
"neverEdited": "Not configured yet — click Edit to set price + visibility.",
|
|
613
|
+
"tabCatalog": "Catalog",
|
|
614
|
+
"tabOrders": "Orders",
|
|
615
|
+
"tabCustomers": "Customers",
|
|
616
|
+
"tabMembers": "Members",
|
|
617
|
+
"noCustomers": "No customers yet.",
|
|
618
|
+
"orderCount": "Orders",
|
|
619
|
+
"lastOrder": "Last order",
|
|
620
|
+
"creator": "creator",
|
|
621
|
+
"byMember": "Offered by",
|
|
622
|
+
"roleAdmin": "Admin",
|
|
623
|
+
"roleMember": "Member",
|
|
624
|
+
"roleVisitor": "Visitor",
|
|
625
|
+
"removeMember": "Remove",
|
|
626
|
+
"addMember": "Add a member",
|
|
627
|
+
"memberUsername": "Username",
|
|
628
|
+
"addMemberBtn": "Add",
|
|
629
|
+
"visPrivate": "Private (only me)",
|
|
630
|
+
"visUnlisted": "Unlisted (by link)",
|
|
631
|
+
"visPublic": "Public (listed)",
|
|
632
|
+
"savePrice": "Save",
|
|
633
|
+
"saved": "Saved ✓",
|
|
634
|
+
"removeFromCatalog": "Remove from catalog",
|
|
635
|
+
"privateHint": "Private — others can't see or order this. Set Public to sell it.",
|
|
636
|
+
"agentNoOfferings": "No offerings yet — create one in Profile › Offerings.",
|
|
637
|
+
"orderPlacedTask": "Order received — the seller's agent {agent} will handle it. Track it under My orders.",
|
|
638
|
+
"orderPlacedResult": "Done — result below.",
|
|
639
|
+
"charged": "Charged {n} morsels",
|
|
640
|
+
"ordersReceived": "Orders received",
|
|
641
|
+
"myOrders": "My orders",
|
|
642
|
+
"noOrdersReceived": "No orders yet.",
|
|
643
|
+
"noMyOrders": "You haven't ordered anything yet.",
|
|
644
|
+
"orderedBy": "From",
|
|
645
|
+
"orderedWhat": "Order",
|
|
646
|
+
"fromCompany": "Company",
|
|
647
|
+
"statusLabel": "Status",
|
|
648
|
+
"stQueued": "Queued",
|
|
649
|
+
"stActive": "In progress",
|
|
650
|
+
"stDone": "Done",
|
|
651
|
+
"stFailed": "Failed",
|
|
652
|
+
"stInstant": "Instant",
|
|
653
|
+
"wallet": "Company wallet",
|
|
654
|
+
"morsels": "morsels",
|
|
655
|
+
"enterpriseBadge": "Enterprise feature",
|
|
656
|
+
"enterpriseRequired": "Company commerce requires the AIMEAT Enterprise edition. This node runs the free Community edition.",
|
|
657
|
+
"loginRequired": "Please log in to manage your companies.",
|
|
658
|
+
"tabSettings": "Settings",
|
|
659
|
+
"businessId": "Business ID (Y-tunnus)",
|
|
660
|
+
"businessIdOptional": "Business ID (Y-tunnus) — optional",
|
|
661
|
+
"businessIdHint": "Finnish format: 1234567-8. Required to sell as a registered company (KYB).",
|
|
662
|
+
"noBusinessId": "No business ID set — add it in Settings.",
|
|
663
|
+
"description": "Description",
|
|
664
|
+
"commission": "Company commission %",
|
|
665
|
+
"commissionHint": "The company's cut of each sale; the rest goes to the fulfilling member. Default 20%.",
|
|
666
|
+
"settingsSaved": "Settings saved ✓",
|
|
667
|
+
"saveSettings": "Save settings",
|
|
668
|
+
"receiptLabel": "Receipt",
|
|
669
|
+
"logo": "Company logo",
|
|
670
|
+
"noLogo": "No logo",
|
|
671
|
+
"uploadLogo": "Upload logo",
|
|
672
|
+
"removeLogo": "Remove",
|
|
673
|
+
"uploading": "Uploading…",
|
|
674
|
+
"logoTooBig": "Logo must be under 1 MB.",
|
|
675
|
+
"listedLabel": "Show this company in the public AIMEAT company directory",
|
|
676
|
+
"listedHint": "When on, your company — with its published services and pricing — appears in the corp catalogue. Turn off to stay private.",
|
|
677
|
+
"unlistedBadge": "not in directory",
|
|
678
|
+
"tabPortfolio": "Portfolio",
|
|
679
|
+
"pfIntro": "Build a public portfolio page for your company. Pick what to include, generate a prompt, paste it into your AI chat, then paste the HTML it returns back here and publish.",
|
|
680
|
+
"pfLive": "Portfolio is live ✓",
|
|
681
|
+
"pfVisit": "Visit",
|
|
682
|
+
"pfUnpublish": "Unpublish",
|
|
683
|
+
"pfLastPublished": "Last published",
|
|
684
|
+
"pfStep1": "1. Choose what to include",
|
|
685
|
+
"pfIncludeInfo": "Company info (name, Y-tunnus, about)",
|
|
686
|
+
"pfIncludeOfferings": "Services & pricing",
|
|
687
|
+
"pfUseLogo": "Use the company logo",
|
|
688
|
+
"pfNoLogo": "upload one in Settings first",
|
|
689
|
+
"pfLook": "Describe how you'd like it to look",
|
|
690
|
+
"pfLookPlaceholder": "e.g. clean and modern, dark theme, bold headings, trustworthy and corporate…",
|
|
691
|
+
"pfGenerate": "Generate prompt",
|
|
692
|
+
"pfStep2": "2. Copy this prompt into your AI chat",
|
|
693
|
+
"pfStep2Hint": "Paste it into ChatGPT / Claude / any AI, then copy the HTML it produces.",
|
|
694
|
+
"pfCopyPrompt": "Copy prompt",
|
|
695
|
+
"pfStep3": "3. Paste the HTML here and publish",
|
|
696
|
+
"pfPublish": "Publish portfolio",
|
|
697
|
+
"pfPublished": "Portfolio published ✓",
|
|
698
|
+
"pfNeedHtml": "Paste the HTML your AI produced first.",
|
|
699
|
+
"pfCopied": "Prompt copied ✓",
|
|
700
|
+
"pfThemeHeading": "Ready-made theme",
|
|
701
|
+
"pfThemeHint": "Pick a theme and publish instantly — no AI needed. Uses your choices above.",
|
|
702
|
+
"pfPreview": "Preview",
|
|
703
|
+
"pfPublishTheme": "Publish with this theme",
|
|
704
|
+
"pfOrAi": "Or design your own with AI"
|
|
487
705
|
},
|
|
488
706
|
"hero": {
|
|
489
707
|
"title": "Your data is yours. Your AI works for you.",
|
|
@@ -6188,6 +6406,33 @@
|
|
|
6188
6406
|
"exportSuccess": "Exported {count} config values in {format} format",
|
|
6189
6407
|
"migrationHint": "Tip: To migrate .env to database, run: aimeat config import --file .env"
|
|
6190
6408
|
},
|
|
6409
|
+
"discover": {
|
|
6410
|
+
"tabLabel": "Discover",
|
|
6411
|
+
"title": "Discover",
|
|
6412
|
+
"desc": "The master directory — find anything on the node across every domain: capabilities, workflows, knowledge, decisions, research, produced material, companies and their offerings, documents, apps, and memory.",
|
|
6413
|
+
"searchPlaceholder": "Search everything…",
|
|
6414
|
+
"allTypes": "All",
|
|
6415
|
+
"empty": "Nothing matches yet. Try a different scope or query.",
|
|
6416
|
+
"scope": {
|
|
6417
|
+
"own": "Mine",
|
|
6418
|
+
"public": "Public",
|
|
6419
|
+
"shared": "Shared with me"
|
|
6420
|
+
},
|
|
6421
|
+
"type": {
|
|
6422
|
+
"capability": "Capability",
|
|
6423
|
+
"workflow": "Workflow",
|
|
6424
|
+
"knowledge": "Knowledge",
|
|
6425
|
+
"decision": "Decision",
|
|
6426
|
+
"research": "Research",
|
|
6427
|
+
"material": "Material",
|
|
6428
|
+
"company": "Company",
|
|
6429
|
+
"offering": "Offering",
|
|
6430
|
+
"document": "Document",
|
|
6431
|
+
"organism": "Organism",
|
|
6432
|
+
"app": "App",
|
|
6433
|
+
"memory": "Memory"
|
|
6434
|
+
}
|
|
6435
|
+
},
|
|
6191
6436
|
"knowledge": {
|
|
6192
6437
|
"tabLabel": "Knowledge",
|
|
6193
6438
|
"actionBar": {
|
package/dist/locales/fi.json
CHANGED
|
@@ -8,6 +8,65 @@
|
|
|
8
8
|
"inbox.send": "Lähetä",
|
|
9
9
|
"inbox.sending": "Lähetetään…",
|
|
10
10
|
"inbox.reply": "Vastaa",
|
|
11
|
+
"inbox.contactAgentSuffix": "(agenttisi)",
|
|
12
|
+
"inbox.messageThis": "Lähetä viesti",
|
|
13
|
+
"nav.members": "Jäsenet",
|
|
14
|
+
"members.title": "Jäsenet",
|
|
15
|
+
"members.desc": "Tämän solmun käyttäjät, jotka ovat julkaisseet portfolion.",
|
|
16
|
+
"members.empty": "Ei julkaistuja portfolioita vielä.",
|
|
17
|
+
"inbox.broadcast": "Joukkoviesti",
|
|
18
|
+
"inbox.broadcastTitle": "Lähetä monelle",
|
|
19
|
+
"inbox.bcModeBroadcast": "Viesti (vastattava)",
|
|
20
|
+
"inbox.bcModeAnnouncement": "Tiedote (vain luku)",
|
|
21
|
+
"inbox.bcAddPlaceholder": "Lisää vastaanottaja…",
|
|
22
|
+
"inbox.bcAdd": "Lisää",
|
|
23
|
+
"inbox.bcRemove": "Poista",
|
|
24
|
+
"inbox.bcNoGroup": "— Jakoryhmä (valinnainen) —",
|
|
25
|
+
"inbox.bcSend": "Lähetä kaikille",
|
|
26
|
+
"inbox.bcNoRecipients": "Lisää vähintään yksi vastaanottaja tai ryhmä",
|
|
27
|
+
"inbox.bcSent": "Joukkoviesti lähetetty",
|
|
28
|
+
"inbox.bcNoAudience": "— Yleisö (valinnainen) —",
|
|
29
|
+
"inbox.bcNodeUsers": "Kaikki solmun käyttäjät (operaattori)",
|
|
30
|
+
"inbox.bcFederationUsers": "Koko federaatio (operaattori)",
|
|
31
|
+
"inbox.close": "Sulje",
|
|
32
|
+
"inbox.loading": "Ladataan…",
|
|
33
|
+
"inbox.cmdTitle": "Komennot",
|
|
34
|
+
"inbox.cmdInsert": "Lisää viestiin",
|
|
35
|
+
"inbox.schedTitle": "Ajastus",
|
|
36
|
+
"inbox.schedNone": "Ei ajastettuja tehtäviä vielä.",
|
|
37
|
+
"inbox.schedOff": "pois",
|
|
38
|
+
"inbox.schedTaskPh": "Tehtävän otsikko",
|
|
39
|
+
"inbox.schedDescPh": "Mitä agentin pitäisi tehdä? (valinnainen)",
|
|
40
|
+
"inbox.schedCreate": "Ajasta",
|
|
41
|
+
"inbox.schedCreated": "Ajastettu.",
|
|
42
|
+
"inbox.schedError": "Ajastus epäonnistui.",
|
|
43
|
+
"inbox.parkToNotebook": "Lisää muistikirjaan myöhempää varten",
|
|
44
|
+
"inbox.parkedToNotebook": "Lisätty muistikirjaasi.",
|
|
45
|
+
"inbox.announcementNote": "Tiedote — vastaaminen ei ole käytössä",
|
|
46
|
+
"inbox.bcTypeMessage": "Viesti",
|
|
47
|
+
"inbox.bcTypePoll": "Kysely",
|
|
48
|
+
"inbox.pollSend": "Lähetä kysely",
|
|
49
|
+
"inbox.pollHeader": "Lyhyt otsikko",
|
|
50
|
+
"inbox.pollPrompt": "Kysymys",
|
|
51
|
+
"inbox.pollOption": "Vaihtoehto",
|
|
52
|
+
"inbox.pollAddOption": "Lisää vaihtoehto",
|
|
53
|
+
"inbox.pollRemoveQ": "Poista kysymys",
|
|
54
|
+
"inbox.pollAddQuestion": "Lisää kysymys",
|
|
55
|
+
"inbox.pollMulti": "Monivalinta",
|
|
56
|
+
"inbox.pollAllowOther": "Salli \"Muu\"",
|
|
57
|
+
"inbox.pollRequired": "Pakollinen",
|
|
58
|
+
"inbox.pollNeedQuestion": "Lisää vähintään yksi kysymys vaihtoehtoineen",
|
|
59
|
+
"inbox.results": "Tulokset",
|
|
60
|
+
"inbox.resultsTitle": "Joukkoviestin tulokset",
|
|
61
|
+
"inbox.resultsEmpty": "Ei lähetettyjä joukkoviestejä vielä",
|
|
62
|
+
"inbox.resultsRecipients": "Vastaanottajat",
|
|
63
|
+
"inbox.resultsDelivered": "Toimitettu",
|
|
64
|
+
"inbox.resultsRead": "Luettu",
|
|
65
|
+
"inbox.resultsAnswered": "Vastattu",
|
|
66
|
+
"inbox.answer.other": "Muu",
|
|
67
|
+
"inbox.answer.otherPlaceholder": "Kirjoita vastauksesi…",
|
|
68
|
+
"inbox.answer.send": "Lähetä vastaukset",
|
|
69
|
+
"inbox.answer.summaryTitle": "Vastaukset",
|
|
11
70
|
"inbox.requests": "Pyynnöt",
|
|
12
71
|
"inbox.accept": "Hyväksy",
|
|
13
72
|
"inbox.block": "Estä",
|
|
@@ -483,7 +542,166 @@
|
|
|
483
542
|
"themeToDark": "Vaihda tummaan tilaan",
|
|
484
543
|
"themeToLight": "Vaihda vaaleaan tilaan",
|
|
485
544
|
"howItWorks": "Miten se toimii",
|
|
486
|
-
"business": "Yrityksellesi"
|
|
545
|
+
"business": "Yrityksellesi",
|
|
546
|
+
"myCompany": "Yritykseni",
|
|
547
|
+
"companies": "Yritykset"
|
|
548
|
+
},
|
|
549
|
+
"companies": {
|
|
550
|
+
"title": "Yritykset",
|
|
551
|
+
"desc": "Selaa noden yrityksiä ja tilaa niiden agenttien tarjoamia.",
|
|
552
|
+
"directory": "Hakemisto",
|
|
553
|
+
"none": "Ei vielä yrityksiä.",
|
|
554
|
+
"offeringsShort": "tarjoamaa",
|
|
555
|
+
"selectHint": "Valitse yritys nähdäksesi sen profiilin ja katalogin.",
|
|
556
|
+
"businessId": "Y-tunnus",
|
|
557
|
+
"catalogue": "Tarjoamat myynnissä",
|
|
558
|
+
"noOfferings": "Tällä yrityksellä ei ole vielä tarjoamia listattuna.",
|
|
559
|
+
"callable": "Suoritetaan heti — tulos näkyy alla.",
|
|
560
|
+
"viaInbox": "Myyjän agentti hoitaa — seuraa kohdasta Omat tilaukset.",
|
|
561
|
+
"usePlaceholder": "Kuvaile mitä tarvitset (valinnainen)…",
|
|
562
|
+
"order": "Tilaa",
|
|
563
|
+
"morsels": "morselia",
|
|
564
|
+
"loginToOrder": "Kirjaudu tilataksesi",
|
|
565
|
+
"orderResult": "Valmis — tulos alla.",
|
|
566
|
+
"orderTask": "Tilaus vastaanotettu — myyjän agentti {agent} hoitaa sen.",
|
|
567
|
+
"charged": "Veloitettu {n} morselia",
|
|
568
|
+
"myOrders": "Omat tilaukset",
|
|
569
|
+
"noMyOrders": "Et ole vielä tilannut mitään.",
|
|
570
|
+
"done": "Valmis",
|
|
571
|
+
"free": "Ilmainen",
|
|
572
|
+
"fromCompany": "Yritys",
|
|
573
|
+
"stQueued": "Jonossa",
|
|
574
|
+
"stActive": "Käynnissä",
|
|
575
|
+
"stDone": "Valmis",
|
|
576
|
+
"stFailed": "Epäonnistui",
|
|
577
|
+
"stInstant": "Heti",
|
|
578
|
+
"viewPortfolio": "Katso portfolio",
|
|
579
|
+
"enterpriseRequired": "Yrityshakemisto vaatii AIMEAT Enterprise -version. Tämä node ajaa ilmaista Community-versiota."
|
|
580
|
+
},
|
|
581
|
+
"myCompany": {
|
|
582
|
+
"title": "Yritykseni",
|
|
583
|
+
"desc": "Luo yritys ja myy agenttiesi kyvykkyyksiä (hinta morseleina).",
|
|
584
|
+
"yourCompanies": "Yrityksesi",
|
|
585
|
+
"noCompanies": "Ei vielä yrityksiä — luo sellainen alta.",
|
|
586
|
+
"createCompany": "Luo yritys",
|
|
587
|
+
"slug": "Tunnus (URL-id)",
|
|
588
|
+
"name": "Yrityksen nimi",
|
|
589
|
+
"create": "Luo yritys",
|
|
590
|
+
"selectHint": "Valitse yritys vasemmalta tai luo uusi.",
|
|
591
|
+
"offerings": "Agenttikatalogi",
|
|
592
|
+
"noOfferings": "Katalogi on tyhjä — lisää agenttiesi kyvykkyyksiä alta.",
|
|
593
|
+
"addFromOffers": "+ Lisää katalogiin",
|
|
594
|
+
"done": "Valmis",
|
|
595
|
+
"pickHint": "Valitse agentin kyvykkyys katalogiin:",
|
|
596
|
+
"noOffersToList": "Agenteillasi ei ole vielä tarjoamia. Luo ensin tarjoamia agenteillesi.",
|
|
597
|
+
"putUpForSale": "Laita myyntiin",
|
|
598
|
+
"listed": "Myynnissä ✓",
|
|
599
|
+
"free": "ilmainen",
|
|
600
|
+
"callable": "heti",
|
|
601
|
+
"viaInbox": "agentin inboxin kautta",
|
|
602
|
+
"use": "Tilaa",
|
|
603
|
+
"usePlaceholder": "Mitä haluat? (valinnainen)…",
|
|
604
|
+
"result": "Tulos",
|
|
605
|
+
"manage": "Hallinta",
|
|
606
|
+
"edit": "Muokkaa",
|
|
607
|
+
"cancel": "Peruuta",
|
|
608
|
+
"visibilityLabel": "Näkyvyys",
|
|
609
|
+
"priceLabel": "Hinta",
|
|
610
|
+
"lastSavedBy": "Viimeksi tallentanut",
|
|
611
|
+
"notForSale": "ei myynnissä",
|
|
612
|
+
"neverEdited": "Ei vielä konfiguroitu — paina Muokkaa asettaaksesi hinnan + näkyvyyden.",
|
|
613
|
+
"tabCatalog": "Katalogi",
|
|
614
|
+
"tabOrders": "Tilaukset",
|
|
615
|
+
"tabCustomers": "Asiakkaat",
|
|
616
|
+
"tabMembers": "Jäsenet",
|
|
617
|
+
"noCustomers": "Ei vielä asiakkaita.",
|
|
618
|
+
"orderCount": "Tilauksia",
|
|
619
|
+
"lastOrder": "Viimeisin tilaus",
|
|
620
|
+
"creator": "perustaja",
|
|
621
|
+
"byMember": "Tarjoaa",
|
|
622
|
+
"roleAdmin": "Ylläpitäjä",
|
|
623
|
+
"roleMember": "Jäsen",
|
|
624
|
+
"roleVisitor": "Vierailija",
|
|
625
|
+
"removeMember": "Poista",
|
|
626
|
+
"addMember": "Lisää jäsen",
|
|
627
|
+
"memberUsername": "Käyttäjänimi",
|
|
628
|
+
"addMemberBtn": "Lisää",
|
|
629
|
+
"visPrivate": "Yksityinen (vain minä)",
|
|
630
|
+
"visUnlisted": "Linkillä (ei listattu)",
|
|
631
|
+
"visPublic": "Julkinen (myynnissä)",
|
|
632
|
+
"savePrice": "Tallenna",
|
|
633
|
+
"saved": "Tallennettu ✓",
|
|
634
|
+
"removeFromCatalog": "Poista katalogista",
|
|
635
|
+
"privateHint": "Yksityinen — muut eivät näe tai voi tilata. Aseta Julkiseksi myydäksesi.",
|
|
636
|
+
"agentNoOfferings": "Ei vielä tarjoamia — luo profiilissa › Tarjoama.",
|
|
637
|
+
"orderPlacedTask": "Tilaus vastaanotettu — myyjän agentti {agent} käsittelee. Seuraa Omat tilaukset -kohdasta.",
|
|
638
|
+
"orderPlacedResult": "Valmis — tulos alla.",
|
|
639
|
+
"charged": "Veloitettu {n} morselia",
|
|
640
|
+
"ordersReceived": "Saapuneet tilaukset",
|
|
641
|
+
"myOrders": "Omat tilaukset",
|
|
642
|
+
"noOrdersReceived": "Ei vielä tilauksia.",
|
|
643
|
+
"noMyOrders": "Et ole vielä tilannut mitään.",
|
|
644
|
+
"orderedBy": "Tilaaja",
|
|
645
|
+
"orderedWhat": "Tilaus",
|
|
646
|
+
"fromCompany": "Yritys",
|
|
647
|
+
"statusLabel": "Tila",
|
|
648
|
+
"stQueued": "Jonossa",
|
|
649
|
+
"stActive": "Työn alla",
|
|
650
|
+
"stDone": "Valmis",
|
|
651
|
+
"stFailed": "Epäonnistui",
|
|
652
|
+
"stInstant": "Heti",
|
|
653
|
+
"wallet": "Yrityksen lompakko",
|
|
654
|
+
"morsels": "morselia",
|
|
655
|
+
"enterpriseBadge": "Enterprise-ominaisuus",
|
|
656
|
+
"enterpriseRequired": "Yrityskauppa vaatii AIMEAT Enterprise -version. Tämä node ajaa ilmaista Community-versiota.",
|
|
657
|
+
"loginRequired": "Kirjaudu sisään hallitaksesi yrityksiäsi.",
|
|
658
|
+
"tabSettings": "Asetukset",
|
|
659
|
+
"businessId": "Y-tunnus",
|
|
660
|
+
"businessIdOptional": "Y-tunnus — valinnainen",
|
|
661
|
+
"businessIdHint": "Suomalainen muoto: 1234567-8. Vaaditaan myyntiin rekisteröitynä yrityksenä (KYB).",
|
|
662
|
+
"noBusinessId": "Y-tunnusta ei asetettu — lisää se Asetuksissa.",
|
|
663
|
+
"description": "Kuvaus",
|
|
664
|
+
"commission": "Yrityksen komissio %",
|
|
665
|
+
"commissionHint": "Yrityksen osuus jokaisesta myynnistä; loppu menee tarjoaman toteuttavalle jäsenelle. Oletus 20 %.",
|
|
666
|
+
"settingsSaved": "Asetukset tallennettu ✓",
|
|
667
|
+
"saveSettings": "Tallenna asetukset",
|
|
668
|
+
"receiptLabel": "Kuitti",
|
|
669
|
+
"logo": "Yrityksen logo",
|
|
670
|
+
"noLogo": "Ei logoa",
|
|
671
|
+
"uploadLogo": "Lataa logo",
|
|
672
|
+
"removeLogo": "Poista",
|
|
673
|
+
"uploading": "Ladataan…",
|
|
674
|
+
"logoTooBig": "Logon tulee olla alle 1 Mt.",
|
|
675
|
+
"listedLabel": "Näytä tämä yritys julkisessa AIMEAT-yrityshakemistossa",
|
|
676
|
+
"listedHint": "Päällä yrityksesi — julkaistuine palveluineen ja hinnastoineen — näkyy corp-katalogissa. Pois päältä pysyt yksityisenä.",
|
|
677
|
+
"unlistedBadge": "ei hakemistossa",
|
|
678
|
+
"tabPortfolio": "Portfolio",
|
|
679
|
+
"pfIntro": "Rakenna yrityksellesi julkinen portfolio-sivu. Valitse mukaan otettavat, generoi prompt, liitä se AI-chattiisi, ja liitä sen palauttama HTML takaisin tähän ja julkaise.",
|
|
680
|
+
"pfLive": "Portfolio julkaistu ✓",
|
|
681
|
+
"pfVisit": "Avaa",
|
|
682
|
+
"pfUnpublish": "Poista julkaisu",
|
|
683
|
+
"pfLastPublished": "Viimeksi julkaistu",
|
|
684
|
+
"pfStep1": "1. Valitse mitä otetaan mukaan",
|
|
685
|
+
"pfIncludeInfo": "Yritystiedot (nimi, Y-tunnus, esittely)",
|
|
686
|
+
"pfIncludeOfferings": "Palvelut & hinnasto",
|
|
687
|
+
"pfUseLogo": "Käytä yrityksen logoa",
|
|
688
|
+
"pfNoLogo": "lataa logo ensin Asetuksissa",
|
|
689
|
+
"pfLook": "Kuvaile millaiselta toivoisit sen näyttävän",
|
|
690
|
+
"pfLookPlaceholder": "esim. selkeä ja moderni, tumma teema, isot otsikot, luotettava ja yritysmäinen…",
|
|
691
|
+
"pfGenerate": "Generoi prompt",
|
|
692
|
+
"pfStep2": "2. Kopioi tämä prompt AI-chattiisi",
|
|
693
|
+
"pfStep2Hint": "Liitä se ChatGPT:hen / Claudeen / mihin tahansa AI:hin, ja kopioi sen tuottama HTML.",
|
|
694
|
+
"pfCopyPrompt": "Kopioi prompt",
|
|
695
|
+
"pfStep3": "3. Liitä HTML tähän ja julkaise",
|
|
696
|
+
"pfPublish": "Julkaise portfolio",
|
|
697
|
+
"pfPublished": "Portfolio julkaistu ✓",
|
|
698
|
+
"pfNeedHtml": "Liitä ensin AI:n tuottama HTML.",
|
|
699
|
+
"pfCopied": "Prompt kopioitu ✓",
|
|
700
|
+
"pfThemeHeading": "Valmis teema",
|
|
701
|
+
"pfThemeHint": "Valitse teema ja julkaise heti — ei AI:ta tarvita. Käyttää yllä tekemiäsi valintoja.",
|
|
702
|
+
"pfPreview": "Esikatsele",
|
|
703
|
+
"pfPublishTheme": "Julkaise tällä teemalla",
|
|
704
|
+
"pfOrAi": "Tai suunnittele oma tekoälyllä"
|
|
487
705
|
},
|
|
488
706
|
"hero": {
|
|
489
707
|
"title": "Tietosi on sinun. AI:si työskentelee puolestasi.",
|
|
@@ -6188,6 +6406,33 @@
|
|
|
6188
6406
|
"exportSuccess": "Vietiin {count} asetusarvoa {format}-muodossa",
|
|
6189
6407
|
"migrationHint": "Vinkki: Siirrä .env tietokantaan komennolla: aimeat config import --file .env"
|
|
6190
6408
|
},
|
|
6409
|
+
"discover": {
|
|
6410
|
+
"tabLabel": "Löydä",
|
|
6411
|
+
"title": "Löydä",
|
|
6412
|
+
"desc": "Päähakemisto — löydä mitä tahansa solmusta kaikilta alueilta: kyvyt, työnkulut, tieto, päätökset, tutkimus, tuotettu materiaali, yritykset ja niiden tarjoukset, dokumentit, sovellukset ja muisti.",
|
|
6413
|
+
"searchPlaceholder": "Hae kaikkea…",
|
|
6414
|
+
"allTypes": "Kaikki",
|
|
6415
|
+
"empty": "Ei vielä osumia. Kokeile eri näkymää tai hakusanaa.",
|
|
6416
|
+
"scope": {
|
|
6417
|
+
"own": "Omat",
|
|
6418
|
+
"public": "Julkiset",
|
|
6419
|
+
"shared": "Jaetut minulle"
|
|
6420
|
+
},
|
|
6421
|
+
"type": {
|
|
6422
|
+
"capability": "Kyky",
|
|
6423
|
+
"workflow": "Työnkulku",
|
|
6424
|
+
"knowledge": "Tieto",
|
|
6425
|
+
"decision": "Päätös",
|
|
6426
|
+
"research": "Tutkimus",
|
|
6427
|
+
"material": "Materiaali",
|
|
6428
|
+
"company": "Yritys",
|
|
6429
|
+
"offering": "Tarjous",
|
|
6430
|
+
"document": "Dokumentti",
|
|
6431
|
+
"organism": "Organismi",
|
|
6432
|
+
"app": "Sovellus",
|
|
6433
|
+
"memory": "Muisti"
|
|
6434
|
+
}
|
|
6435
|
+
},
|
|
6191
6436
|
"knowledge": {
|
|
6192
6437
|
"tabLabel": "Tietopankki",
|
|
6193
6438
|
"actionBar": {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file InboxLink.js
|
|
3
|
+
* @description Mailto-style "message this person/agent" link. Renders an anchor to the inbox compose
|
|
4
|
+
* prefilled with the recipient(s) + optional subject — drop it next to any GHII/GAII (people directory,
|
|
5
|
+
* organism members, agent cards) for one-click DM. The inbox tab reads ?to=&subject= on mount and opens
|
|
6
|
+
* a prefilled compose (single recipient) or broadcast (multiple, comma-separated).
|
|
7
|
+
* @structure inboxLinkHref(to, subject) -> string · InboxLink({ to, subject?, title?, className?, children? })
|
|
8
|
+
* @usage import { InboxLink } from '/components/InboxLink.js';
|
|
9
|
+
* html`<${InboxLink} to=${gaii} title=${t('inbox.messageThis')}>✉️</${InboxLink}>`
|
|
10
|
+
* @version-history
|
|
11
|
+
* v1.0.0 — 2026-06-23 — Initial inbox-link (mailto-style deep link to a prefilled compose).
|
|
12
|
+
*/
|
|
13
|
+
import { h } from 'preact';
|
|
14
|
+
import htm from 'htm';
|
|
15
|
+
const html = htm.bind(h);
|
|
16
|
+
|
|
17
|
+
/** Build the inbox-compose deep link for one or more recipients (array or comma-joined string). */
|
|
18
|
+
export function inboxLinkHref(to, subject) {
|
|
19
|
+
const ids = Array.isArray(to) ? to.join(',') : String(to || '');
|
|
20
|
+
const params = new URLSearchParams({ tab: 'messages', to: ids });
|
|
21
|
+
if (subject) params.set('subject', subject);
|
|
22
|
+
return `/v1/profile?${params.toString()}`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** A clickable link that opens the inbox composer prefilled to `to` (with an optional `subject`). */
|
|
26
|
+
export function InboxLink({ to, subject, title, className, children }) {
|
|
27
|
+
return html`<a class=${className || 'inbox-link'} href=${inboxLinkHref(to, subject)}
|
|
28
|
+
title=${title || 'Message'}>${children || '✉️'}</a>`;
|
|
29
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file offer-card-view.js
|
|
3
|
+
* @description Single source for the agent-offer card presentation. Exports small presentational
|
|
4
|
+
* pieces (badges, example, requirements, deliverable + sample) shared by every surface that shows
|
|
5
|
+
* an offer — the profile Offers feed AND the company catalog — so the format is identical and lives
|
|
6
|
+
* in ONE place instead of duplicated bespoke cards. `OfferCardView` composes them into the full
|
|
7
|
+
* card with an `actions` slot for the per-surface controls (run / order / sell).
|
|
8
|
+
* @structure OfferBadges · OfferExample · OfferRequirements · OfferDeliverable · OfferCardView
|
|
9
|
+
* @usage
|
|
10
|
+
* html`<${OfferCardView} entry=${{ agent, online }} offer=${offer} actions=${html`…`} />`
|
|
11
|
+
* // or use the pieces directly inside an existing card (e.g. offers-tab):
|
|
12
|
+
* html`<${OfferBadges} offer=${offer} /> … <${OfferDeliverable} offer=${offer} />`
|
|
13
|
+
* @version-history
|
|
14
|
+
* v1.0.0 — 2026-06-23 — extracted from views/profile/offers-tab.js OfferCard
|
|
15
|
+
* v1.1.0 — 2026-06-23 — split into reusable pieces; offers-tab migrated to use them (single source)
|
|
16
|
+
*/
|
|
17
|
+
import { h } from 'preact';
|
|
18
|
+
import htm from 'htm';
|
|
19
|
+
import { t } from '/js/i18n.js';
|
|
20
|
+
import { escHtml } from '/js/utils.js';
|
|
21
|
+
import { DeliverableBody } from '/components/ImageDeliverable.js';
|
|
22
|
+
|
|
23
|
+
const html = htm.bind(h);
|
|
24
|
+
|
|
25
|
+
/** Trust/price chips for an offer. */
|
|
26
|
+
export function OfferBadges({ offer }) {
|
|
27
|
+
const chips = [];
|
|
28
|
+
if (offer.visibility && offer.visibility !== 'private') chips.push(['vis', t('profile.offers.visibility.' + offer.visibility) || offer.visibility]);
|
|
29
|
+
if (offer.price && offer.price.morsels > 0) chips.push(['price', offer.price.morsels + ' ' + (t('profile.offers.morsels') || 'morsels')]);
|
|
30
|
+
if (offer.verification) chips.push(['ver', t('profile.offers.verification.' + offer.verification) || offer.verification]);
|
|
31
|
+
if (offer.dataHandling) chips.push(['data', t('profile.offers.dataHandling.' + offer.dataHandling) || offer.dataHandling]);
|
|
32
|
+
if (offer.cost) chips.push(['cost', t('profile.offers.cost.' + offer.cost) || offer.cost]);
|
|
33
|
+
if (offer.latency) chips.push(['lat', t('profile.offers.latency.' + offer.latency) || offer.latency]);
|
|
34
|
+
return html`<span class="of-badges">${chips.map(([k, label]) => html`<span class="of-badge of-badge--${k}" key=${k}>${escHtml(label)}</span>`)}</span>`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** The "Example:" line. */
|
|
38
|
+
export function OfferExample({ offer }) {
|
|
39
|
+
if (!offer.example) return null;
|
|
40
|
+
return html`<div class="of-example"><span class="of-label">${t('profile.offers.example') || 'Example'}:</span> ${escHtml(offer.example)}</div>`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** The "Before you ask" requirements list. */
|
|
44
|
+
export function OfferRequirements({ offer }) {
|
|
45
|
+
const reqs = offer.requirements || [];
|
|
46
|
+
if (!reqs.length) return null;
|
|
47
|
+
return html`
|
|
48
|
+
<div class="of-label">${t('profile.offers.requirements') || 'Before you ask'}</div>
|
|
49
|
+
<div class="of-req-list">${reqs.map((r, i) => html`
|
|
50
|
+
<span class="of-req" key=${i}>${escHtml(r.need)}${r.instruction ? html` <span class="of-mini">— ${escHtml(r.instruction)}</span>` : null}${r.fix ? html` <span class="of-fix">${escHtml(r.fix)}</span>` : null}</span>`)}</div>`;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** The "You'll get back" deliverable label + sample (or "untested" badge). */
|
|
54
|
+
export function OfferDeliverable({ offer }) {
|
|
55
|
+
if (!offer.deliverable) return null;
|
|
56
|
+
return html`
|
|
57
|
+
<div class="of-label">${t('profile.offers.deliverable') || 'You’ll get back'}: ${escHtml(offer.deliverable.format || '')}${offer.deliverable.location?.space ? html` <span class="of-mini">→ ${escHtml(offer.deliverable.location.space)}</span>` : null}</div>
|
|
58
|
+
${offer.deliverable.sample === 'untested'
|
|
59
|
+
? html`<span class="of-badge of-badge--untested">${t('profile.offers.untested') || 'untested — no sample yet'}</span>`
|
|
60
|
+
: html`<div class="of-md of-sample-md"><${DeliverableBody} value=${offer.deliverable.sample} alt=${offer.title} format=${offer.deliverable.format} /></div>`}`;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Full presentational offer card. `entry` = { agent, online }, `offer` = the Offer object, `actions`
|
|
65
|
+
* = an optional vnode rendered at the bottom of the detail (run/order/sell controls per surface).
|
|
66
|
+
*/
|
|
67
|
+
export function OfferCardView({ entry, offer, actions }) {
|
|
68
|
+
return html`
|
|
69
|
+
<div class="of-card of-card--open">
|
|
70
|
+
<div class="of-card-head of-card-head--static">
|
|
71
|
+
<div class="of-card-title">
|
|
72
|
+
<span class="of-offer-title">${escHtml(offer.title)}</span>
|
|
73
|
+
<span class="of-agent">${escHtml(entry.agent)} <span class="of-dot ${entry.online ? 'of-dot--on' : 'of-dot--off'}"></span></span>
|
|
74
|
+
</div>
|
|
75
|
+
<${OfferBadges} offer=${offer} />
|
|
76
|
+
</div>
|
|
77
|
+
<div class="of-ask">${escHtml(offer.ask)}</div>
|
|
78
|
+
<div class="of-detail">
|
|
79
|
+
<${OfferExample} offer=${offer} />
|
|
80
|
+
<${OfferRequirements} offer=${offer} />
|
|
81
|
+
<${OfferDeliverable} offer=${offer} />
|
|
82
|
+
${actions ?? null}
|
|
83
|
+
</div>
|
|
84
|
+
</div>`;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export default OfferCardView;
|