aimeat 1.2.6 → 1.3.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/.env.example +4 -0
- package/dist/locales/en.json +74 -2
- package/dist/locales/fi.json +74 -2
- package/dist/public/css/views/capabilities.css +211 -0
- package/dist/public/llms-template.txt +152 -89
- package/dist/public/spa.html +1 -0
- package/dist/public/views/admin/capabilities-tab.js +114 -0
- package/dist/public/views/admin.js +2 -0
- package/dist/public/views/aimeat-os.js +194 -34
- package/dist/public/views/profile/capabilities-tab.js +252 -0
- package/dist/public/views/profile/extensions-tab.js +404 -50
- package/dist/public/views/profile/landing-page.js +2 -0
- package/dist/public/views/profile.js +2 -0
- package/dist/src/config.d.ts +11 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +11 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/mcp/apps.d.ts +18 -0
- package/dist/src/mcp/apps.d.ts.map +1 -0
- package/dist/src/mcp/apps.js +241 -0
- package/dist/src/mcp/apps.js.map +1 -0
- package/dist/src/mcp/capabilities.d.ts +12 -0
- package/dist/src/mcp/capabilities.d.ts.map +1 -0
- package/dist/src/mcp/capabilities.js +187 -0
- package/dist/src/mcp/capabilities.js.map +1 -0
- package/dist/src/mcp/cortex.d.ts +17 -0
- package/dist/src/mcp/cortex.d.ts.map +1 -0
- package/dist/src/mcp/cortex.js +237 -0
- package/dist/src/mcp/cortex.js.map +1 -0
- package/dist/src/mcp/extensions.d.ts +4 -3
- package/dist/src/mcp/extensions.d.ts.map +1 -1
- package/dist/src/mcp/extensions.js +233 -3
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +6 -0
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/routes/admin-capabilities.d.ts +11 -0
- package/dist/src/routes/admin-capabilities.d.ts.map +1 -0
- package/dist/src/routes/admin-capabilities.js +54 -0
- package/dist/src/routes/admin-capabilities.js.map +1 -0
- package/dist/src/routes/capabilities.d.ts +11 -0
- package/dist/src/routes/capabilities.d.ts.map +1 -0
- package/dist/src/routes/capabilities.js +289 -0
- package/dist/src/routes/capabilities.js.map +1 -0
- package/dist/src/routes/cortex.d.ts.map +1 -1
- package/dist/src/routes/cortex.js +2 -0
- package/dist/src/routes/cortex.js.map +1 -1
- package/dist/src/routes/extensions.d.ts.map +1 -1
- package/dist/src/routes/extensions.js +9 -0
- package/dist/src/routes/extensions.js.map +1 -1
- package/dist/src/routes/lib-capabilities.d.ts +9 -0
- package/dist/src/routes/lib-capabilities.d.ts.map +1 -0
- package/dist/src/routes/lib-capabilities.js +190 -0
- package/dist/src/routes/lib-capabilities.js.map +1 -0
- package/dist/src/routes/libs.d.ts.map +1 -1
- package/dist/src/routes/libs.js +13 -0
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/verification.d.ts +10 -1
- package/dist/src/routes/verification.d.ts.map +1 -1
- package/dist/src/routes/verification.js +174 -24
- package/dist/src/routes/verification.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +35 -2
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/services/capability-aggregator.d.ts +8 -0
- package/dist/src/services/capability-aggregator.d.ts.map +1 -0
- package/dist/src/services/capability-aggregator.js +239 -0
- package/dist/src/services/capability-aggregator.js.map +1 -0
- package/dist/src/services/capability-invoke.d.ts +20 -0
- package/dist/src/services/capability-invoke.d.ts.map +1 -0
- package/dist/src/services/capability-invoke.js +95 -0
- package/dist/src/services/capability-invoke.js.map +1 -0
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +4 -0
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/core-jobs.d.ts.map +1 -1
- package/dist/src/services/core-jobs.js +16 -0
- package/dist/src/services/core-jobs.js.map +1 -1
- package/dist/src/services/did-document.d.ts +25 -0
- package/dist/src/services/did-document.d.ts.map +1 -0
- package/dist/src/services/did-document.js +31 -0
- package/dist/src/services/did-document.js.map +1 -0
- package/dist/src/services/eudiw.d.ts +11 -1
- package/dist/src/services/eudiw.d.ts.map +1 -1
- package/dist/src/services/eudiw.js +43 -48
- package/dist/src/services/eudiw.js.map +1 -1
- package/dist/src/services/extension-runtime.d.ts.map +1 -1
- package/dist/src/services/extension-runtime.js +8 -5
- package/dist/src/services/extension-runtime.js.map +1 -1
- package/dist/src/services/job-seeding.d.ts.map +1 -1
- package/dist/src/services/job-seeding.js +4 -0
- package/dist/src/services/job-seeding.js.map +1 -1
- package/dist/src/services/oidc-client.d.ts +32 -0
- package/dist/src/services/oidc-client.d.ts.map +1 -0
- package/dist/src/services/oidc-client.js +67 -0
- package/dist/src/services/oidc-client.js.map +1 -0
- package/dist/src/services/sd-jwt.d.ts +21 -0
- package/dist/src/services/sd-jwt.d.ts.map +1 -0
- package/dist/src/services/sd-jwt.js +87 -0
- package/dist/src/services/sd-jwt.js.map +1 -0
- package/dist/src/services/vc-issuer.d.ts +20 -1
- package/dist/src/services/vc-issuer.d.ts.map +1 -1
- package/dist/src/services/vc-issuer.js +75 -15
- package/dist/src/services/vc-issuer.js.map +1 -1
- package/dist/src/storage/interface.d.ts +118 -1
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +37 -1
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +282 -0
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +37 -1
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +241 -0
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +77 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/capability.repository.d.ts +35 -0
- package/dist/src/storage/repositories/capability.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/capability.repository.js +2 -0
- package/dist/src/storage/repositories/capability.repository.js.map +1 -0
- package/dist/src/storage/repositories/index.d.ts +1 -0
- package/dist/src/storage/repositories/index.d.ts.map +1 -1
- package/dist/src/storage/repositories/node.repository.d.ts +5 -1
- package/dist/src/storage/repositories/node.repository.d.ts.map +1 -1
- package/dist/static/app-catalog.html +156 -29
- package/package.json +6 -1
- package/prisma/schema.prisma +86 -0
package/dist/.env.example
CHANGED
|
@@ -177,7 +177,11 @@ AIMEAT_PORT=40050
|
|
|
177
177
|
# AIMEAT_EUDIW_REDIRECT_URI="https://your-node.example/v1/ghii/verify/eudiw/callback"
|
|
178
178
|
# AIMEAT_FTN_ENABLED=false
|
|
179
179
|
# AIMEAT_FTN_PROVIDER_URL="https://tunnistautuminen.suomi.fi"
|
|
180
|
+
# AIMEAT_FTN_CLIENT_ID="" # OIDC client_id from FTN broker
|
|
181
|
+
# AIMEAT_FTN_CLIENT_SECRET="" # OIDC client_secret from FTN broker
|
|
180
182
|
# AIMEAT_VC_ISSUER_DID="did:web:your-node.example"
|
|
183
|
+
# AIMEAT_NONCE_TTL_SECONDS=300 # verification nonce TTL (60-3600)
|
|
184
|
+
# AIMEAT_NATIONAL_EID_PID_CLAIM="personal_identity_code" # FI: personal_identity_code, SE: personalNumber, DK: dk.cpr
|
|
181
185
|
|
|
182
186
|
# ── Consul (optional fleet management) ───────────────────────
|
|
183
187
|
# Connect to HashiCorp Consul for centralized config management across nodes.
|
package/dist/locales/en.json
CHANGED
|
@@ -676,8 +676,8 @@
|
|
|
676
676
|
"launch": "Launch"
|
|
677
677
|
},
|
|
678
678
|
"v8ext": {
|
|
679
|
-
"title": "
|
|
680
|
-
"desc": "Sandboxed JavaScript extensions that run server-side. Each extension provides actions that can be called via API or from apps.",
|
|
679
|
+
"title": "Server Extensions",
|
|
680
|
+
"desc": "Sandboxed JavaScript extensions that run server-side in a secure isolate. Each extension provides actions that can be called via API or from apps.",
|
|
681
681
|
"back": "Back",
|
|
682
682
|
"author": "Author",
|
|
683
683
|
"statusActive": "Active",
|
|
@@ -4562,5 +4562,77 @@
|
|
|
4562
4562
|
"copyBtn": "Copy to clipboard",
|
|
4563
4563
|
"copied": "Copied!",
|
|
4564
4564
|
"loadError": "Failed to load help prompt."
|
|
4565
|
+
},
|
|
4566
|
+
"capabilities": {
|
|
4567
|
+
"title": "Capabilities",
|
|
4568
|
+
"tabLabel": "Capabilities",
|
|
4569
|
+
"create": "Create Capability",
|
|
4570
|
+
"edit": "Edit",
|
|
4571
|
+
"delete": "Delete",
|
|
4572
|
+
"name": "Name",
|
|
4573
|
+
"summary": "Summary",
|
|
4574
|
+
"status": "Status",
|
|
4575
|
+
"visibility": "Visibility",
|
|
4576
|
+
"source": "Source",
|
|
4577
|
+
"sourceType": "Source Type",
|
|
4578
|
+
"callable": "Callable",
|
|
4579
|
+
"tags": "Tags",
|
|
4580
|
+
"invocations": "Invocations",
|
|
4581
|
+
"errors": "Errors",
|
|
4582
|
+
"successRate": "Success Rate",
|
|
4583
|
+
"lastInvoked": "Last Invoked",
|
|
4584
|
+
"avgResponseMs": "Avg Response",
|
|
4585
|
+
"vouch": "Vouch",
|
|
4586
|
+
"unvouch": "Remove Vouch",
|
|
4587
|
+
"vouchCount": "Vouches",
|
|
4588
|
+
"pendingReview": "Pending Review",
|
|
4589
|
+
"approve": "Approve",
|
|
4590
|
+
"reject": "Reject",
|
|
4591
|
+
"disable": "Disable",
|
|
4592
|
+
"enable": "Enable",
|
|
4593
|
+
"test": "Test",
|
|
4594
|
+
"invoke": "Invoke",
|
|
4595
|
+
"logs": "Logs",
|
|
4596
|
+
"override": "Override",
|
|
4597
|
+
"operatorNotes": "Operator Notes",
|
|
4598
|
+
"noCapabilities": "No capabilities found",
|
|
4599
|
+
"browserOnly": "Browser only",
|
|
4600
|
+
"discoveryOnly": "Discovery only",
|
|
4601
|
+
"owner": "Owner",
|
|
4602
|
+
"authRequired": "Auth Required",
|
|
4603
|
+
"cost": "Cost",
|
|
4604
|
+
"deprecated": "Deprecated",
|
|
4605
|
+
"manual": "Manual",
|
|
4606
|
+
"auto": "Auto-aggregated",
|
|
4607
|
+
"createSuccess": "Capability created",
|
|
4608
|
+
"deleteSuccess": "Capability deleted",
|
|
4609
|
+
"deleteConfirm": "Delete this capability?",
|
|
4610
|
+
"vouchSuccess": "Vouched!",
|
|
4611
|
+
"cannotVouchOwn": "Cannot vouch for your own capability",
|
|
4612
|
+
"testResult": "Test Result",
|
|
4613
|
+
"adminTitle": "All Capabilities",
|
|
4614
|
+
"nodeCapabilities": "Node Capabilities",
|
|
4615
|
+
"nodeCapabilitiesDesc": "These are all the capabilities currently available on this node. Capabilities are created automatically when you activate extensions or cortex modules.",
|
|
4616
|
+
"howCreated": "How capabilities are created",
|
|
4617
|
+
"howCreatedDesc": "Install and activate extensions (Extensions tab) or cortex modules to automatically register capabilities. You can also create manual capabilities if the node policy allows it.",
|
|
4618
|
+
"policyTitle": "Capability Policy",
|
|
4619
|
+
"policyPublishing": "Publishing",
|
|
4620
|
+
"policyPublishers": "Publishers",
|
|
4621
|
+
"policyWebhooks": "Webhooks",
|
|
4622
|
+
"policyDisabled": "Disabled",
|
|
4623
|
+
"policySelfOnly": "Self only (private)",
|
|
4624
|
+
"policyModerated": "Moderated (operator review)",
|
|
4625
|
+
"policyOpen": "Open",
|
|
4626
|
+
"policyAllUsers": "All users",
|
|
4627
|
+
"policyTrustedOnly": "Trusted users only",
|
|
4628
|
+
"policyAllowlist": "Allowlist only",
|
|
4629
|
+
"policyAllowlistOnly": "Allowlist only",
|
|
4630
|
+
"extension": "Extension",
|
|
4631
|
+
"cortex": "Cortex",
|
|
4632
|
+
"action": "Action",
|
|
4633
|
+
"allTypes": "All types",
|
|
4634
|
+
"filterByType": "Filter by source",
|
|
4635
|
+
"myCapabilities": "My Capabilities",
|
|
4636
|
+
"totalCount": "{count} capabilities"
|
|
4565
4637
|
}
|
|
4566
4638
|
}
|
package/dist/locales/fi.json
CHANGED
|
@@ -676,8 +676,8 @@
|
|
|
676
676
|
"launch": "Käynnistä"
|
|
677
677
|
},
|
|
678
678
|
"v8ext": {
|
|
679
|
-
"title": "
|
|
680
|
-
"desc": "Hiekkalaatikoituja JavaScript-laajennuksia jotka ajavat palvelimella
|
|
679
|
+
"title": "Palvelinlaajennukset",
|
|
680
|
+
"desc": "Hiekkalaatikoituja JavaScript-laajennuksia jotka ajavat palvelimella turvallisessa eristysympäristössä. Jokainen laajennus tarjoaa toimintoja joita voi kutsua API:n kautta tai sovelluksista.",
|
|
681
681
|
"back": "Takaisin",
|
|
682
682
|
"author": "Tekijä",
|
|
683
683
|
"statusActive": "Aktiivinen",
|
|
@@ -4562,5 +4562,77 @@
|
|
|
4562
4562
|
"copyBtn": "Kopioi leikepöydälle",
|
|
4563
4563
|
"copied": "Kopioitu!",
|
|
4564
4564
|
"loadError": "Apukehotteen lataaminen epäonnistui."
|
|
4565
|
+
},
|
|
4566
|
+
"capabilities": {
|
|
4567
|
+
"title": "Kyvykkyydet",
|
|
4568
|
+
"tabLabel": "Kyvykkyydet",
|
|
4569
|
+
"create": "Luo kyvykkyys",
|
|
4570
|
+
"edit": "Muokkaa",
|
|
4571
|
+
"delete": "Poista",
|
|
4572
|
+
"name": "Nimi",
|
|
4573
|
+
"summary": "Kuvaus",
|
|
4574
|
+
"status": "Tila",
|
|
4575
|
+
"visibility": "Näkyvyys",
|
|
4576
|
+
"source": "Lähde",
|
|
4577
|
+
"sourceType": "Lähdetyyppi",
|
|
4578
|
+
"callable": "Kutsuttava",
|
|
4579
|
+
"tags": "Tagit",
|
|
4580
|
+
"invocations": "Kutsut",
|
|
4581
|
+
"errors": "Virheet",
|
|
4582
|
+
"successRate": "Onnistumis-%",
|
|
4583
|
+
"lastInvoked": "Viimeksi kutsuttu",
|
|
4584
|
+
"avgResponseMs": "Keskiarvo",
|
|
4585
|
+
"vouch": "Suosittele",
|
|
4586
|
+
"unvouch": "Peru suositus",
|
|
4587
|
+
"vouchCount": "Suositukset",
|
|
4588
|
+
"pendingReview": "Odottaa tarkistusta",
|
|
4589
|
+
"approve": "Hyväksy",
|
|
4590
|
+
"reject": "Hylkää",
|
|
4591
|
+
"disable": "Poista käytöstä",
|
|
4592
|
+
"enable": "Ota käyttöön",
|
|
4593
|
+
"test": "Testaa",
|
|
4594
|
+
"invoke": "Kutsu",
|
|
4595
|
+
"logs": "Lokit",
|
|
4596
|
+
"override": "Ohitus",
|
|
4597
|
+
"operatorNotes": "Operaattorin muistiinpanot",
|
|
4598
|
+
"noCapabilities": "Kyvykkyyksiä ei löytynyt",
|
|
4599
|
+
"browserOnly": "Vain selain",
|
|
4600
|
+
"discoveryOnly": "Vain löydettävissä",
|
|
4601
|
+
"owner": "Omistaja",
|
|
4602
|
+
"authRequired": "Vaatii autentikoinnin",
|
|
4603
|
+
"cost": "Hinta",
|
|
4604
|
+
"deprecated": "Vanhentunut",
|
|
4605
|
+
"manual": "Manuaalinen",
|
|
4606
|
+
"auto": "Automaattisesti kerätty",
|
|
4607
|
+
"createSuccess": "Kyvykkyys luotu",
|
|
4608
|
+
"deleteSuccess": "Kyvykkyys poistettu",
|
|
4609
|
+
"deleteConfirm": "Poista tämä kyvykkyys?",
|
|
4610
|
+
"vouchSuccess": "Suositeltu!",
|
|
4611
|
+
"cannotVouchOwn": "Et voi suositella omaa kyvykkyyttäsi",
|
|
4612
|
+
"testResult": "Testitulos",
|
|
4613
|
+
"adminTitle": "Kaikki kyvykkyydet",
|
|
4614
|
+
"nodeCapabilities": "Noden kyvykkyydet",
|
|
4615
|
+
"nodeCapabilitiesDesc": "Kaikki tällä hetkellä käytettävissä olevat kyvykkyydet tällä nodella. Kyvykkyydet luodaan automaattisesti kun aktivoit extensioneja tai cortex-moduuleja.",
|
|
4616
|
+
"howCreated": "Miten kyvykkyydet luodaan",
|
|
4617
|
+
"howCreatedDesc": "Asenna ja aktivoi extensioneja (Extensions-välilehti) tai cortex-moduuleja, niin kyvykkyydet rekisteröityvät automaattisesti. Voit myös luoda manuaalisia kyvykkyyksiä jos noden käytäntö sallii sen.",
|
|
4618
|
+
"policyTitle": "Kyvykkyyskäytäntö",
|
|
4619
|
+
"policyPublishing": "Julkaisu",
|
|
4620
|
+
"policyPublishers": "Julkaisijat",
|
|
4621
|
+
"policyWebhooks": "Webhookit",
|
|
4622
|
+
"policyDisabled": "Pois käytöstä",
|
|
4623
|
+
"policySelfOnly": "Vain itselle (yksityinen)",
|
|
4624
|
+
"policyModerated": "Moderoitu (operaattori tarkistaa)",
|
|
4625
|
+
"policyOpen": "Avoin",
|
|
4626
|
+
"policyAllUsers": "Kaikki käyttäjät",
|
|
4627
|
+
"policyTrustedOnly": "Vain luotetut käyttäjät",
|
|
4628
|
+
"policyAllowlist": "Vain sallitut",
|
|
4629
|
+
"policyAllowlistOnly": "Vain sallitut",
|
|
4630
|
+
"extension": "Extensio",
|
|
4631
|
+
"cortex": "Cortex",
|
|
4632
|
+
"action": "Toiminto",
|
|
4633
|
+
"allTypes": "Kaikki tyypit",
|
|
4634
|
+
"filterByType": "Suodata lähteen mukaan",
|
|
4635
|
+
"myCapabilities": "Omat kyvykkyydet",
|
|
4636
|
+
"totalCount": "{count} kyvykkyyttä"
|
|
4565
4637
|
}
|
|
4566
4638
|
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file capabilities.css
|
|
3
|
+
* @description Styles for the profile capabilities tab
|
|
4
|
+
* @version-history
|
|
5
|
+
* v1.0.0 — 2026-05-02 — Initial styles
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
.cap-filter-bar {
|
|
9
|
+
display: flex;
|
|
10
|
+
gap: 8px;
|
|
11
|
+
margin: 12px 0;
|
|
12
|
+
flex-wrap: wrap;
|
|
13
|
+
}
|
|
14
|
+
.cap-search-input {
|
|
15
|
+
flex: 1;
|
|
16
|
+
min-width: 160px;
|
|
17
|
+
padding: 6px 12px;
|
|
18
|
+
border: 1px solid var(--border);
|
|
19
|
+
border-radius: 6px;
|
|
20
|
+
background: var(--card);
|
|
21
|
+
color: var(--text);
|
|
22
|
+
font-size: .85rem;
|
|
23
|
+
}
|
|
24
|
+
.cap-filter-select {
|
|
25
|
+
padding: 6px 12px;
|
|
26
|
+
border: 1px solid var(--border);
|
|
27
|
+
border-radius: 6px;
|
|
28
|
+
background: var(--card);
|
|
29
|
+
color: var(--text);
|
|
30
|
+
font-size: .85rem;
|
|
31
|
+
min-width: 140px;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.cap-item {
|
|
35
|
+
padding: 10px 14px;
|
|
36
|
+
border: 1px solid var(--border);
|
|
37
|
+
border-radius: 8px;
|
|
38
|
+
margin-bottom: 6px;
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
transition: border-color .15s;
|
|
41
|
+
background: var(--card);
|
|
42
|
+
}
|
|
43
|
+
.cap-item:hover {
|
|
44
|
+
border-color: var(--accent);
|
|
45
|
+
}
|
|
46
|
+
.cap-item-selected {
|
|
47
|
+
border-color: var(--accent);
|
|
48
|
+
background: var(--surface);
|
|
49
|
+
}
|
|
50
|
+
.cap-item-header {
|
|
51
|
+
display: flex;
|
|
52
|
+
justify-content: space-between;
|
|
53
|
+
align-items: center;
|
|
54
|
+
gap: 8px;
|
|
55
|
+
}
|
|
56
|
+
.cap-item-name {
|
|
57
|
+
display: flex;
|
|
58
|
+
align-items: center;
|
|
59
|
+
gap: 6px;
|
|
60
|
+
flex-wrap: wrap;
|
|
61
|
+
}
|
|
62
|
+
.cap-source-icon {
|
|
63
|
+
font-size: .9rem;
|
|
64
|
+
}
|
|
65
|
+
.cap-item-stats {
|
|
66
|
+
display: flex;
|
|
67
|
+
gap: 12px;
|
|
68
|
+
font-size: .75rem;
|
|
69
|
+
color: var(--text-muted);
|
|
70
|
+
white-space: nowrap;
|
|
71
|
+
}
|
|
72
|
+
.cap-item-summary {
|
|
73
|
+
font-size: .8rem;
|
|
74
|
+
color: var(--text-dim);
|
|
75
|
+
margin-top: 4px;
|
|
76
|
+
}
|
|
77
|
+
.cap-item-tags {
|
|
78
|
+
display: flex;
|
|
79
|
+
gap: 4px;
|
|
80
|
+
margin-top: 6px;
|
|
81
|
+
flex-wrap: wrap;
|
|
82
|
+
}
|
|
83
|
+
.cap-tag {
|
|
84
|
+
font-size: .7rem;
|
|
85
|
+
padding: 1px 6px;
|
|
86
|
+
border-radius: 4px;
|
|
87
|
+
background: var(--bg-dim);
|
|
88
|
+
color: var(--text-dim);
|
|
89
|
+
}
|
|
90
|
+
.cap-badge {
|
|
91
|
+
font-size: .7rem;
|
|
92
|
+
padding: 1px 6px;
|
|
93
|
+
border-radius: 4px;
|
|
94
|
+
}
|
|
95
|
+
.cap-badge-callable {
|
|
96
|
+
background: var(--bg-dim);
|
|
97
|
+
color: var(--accent);
|
|
98
|
+
}
|
|
99
|
+
.cap-badge-browser {
|
|
100
|
+
background: var(--bg-dim);
|
|
101
|
+
color: var(--text-muted);
|
|
102
|
+
}
|
|
103
|
+
.cap-badge-status {
|
|
104
|
+
background: var(--surface);
|
|
105
|
+
color: var(--text-muted);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.cap-detail {
|
|
109
|
+
margin-top: 10px;
|
|
110
|
+
padding-top: 10px;
|
|
111
|
+
border-top: 1px solid var(--border);
|
|
112
|
+
font-size: .82rem;
|
|
113
|
+
}
|
|
114
|
+
.cap-detail-row {
|
|
115
|
+
margin-bottom: 4px;
|
|
116
|
+
line-height: 1.5;
|
|
117
|
+
}
|
|
118
|
+
.cap-detail-label {
|
|
119
|
+
font-weight: 600;
|
|
120
|
+
color: var(--text-dim);
|
|
121
|
+
}
|
|
122
|
+
.cap-detail-code {
|
|
123
|
+
font-family: var(--mono);
|
|
124
|
+
font-size: .78rem;
|
|
125
|
+
background: var(--bg-dim);
|
|
126
|
+
padding: 1px 5px;
|
|
127
|
+
border-radius: 3px;
|
|
128
|
+
word-break: break-all;
|
|
129
|
+
}
|
|
130
|
+
.cap-schema-details {
|
|
131
|
+
margin-top: 6px;
|
|
132
|
+
}
|
|
133
|
+
.cap-schema-details summary {
|
|
134
|
+
cursor: pointer;
|
|
135
|
+
font-size: .8rem;
|
|
136
|
+
color: var(--accent);
|
|
137
|
+
}
|
|
138
|
+
.cap-schema-pre {
|
|
139
|
+
font-family: var(--mono);
|
|
140
|
+
font-size: .75rem;
|
|
141
|
+
background: var(--bg-dim);
|
|
142
|
+
padding: 8px;
|
|
143
|
+
border-radius: 6px;
|
|
144
|
+
max-height: 200px;
|
|
145
|
+
overflow: auto;
|
|
146
|
+
margin-top: 4px;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.cap-info-section {
|
|
150
|
+
margin-top: 20px;
|
|
151
|
+
padding: 14px;
|
|
152
|
+
border: 1px solid var(--border);
|
|
153
|
+
border-radius: 8px;
|
|
154
|
+
background: var(--surface);
|
|
155
|
+
}
|
|
156
|
+
.cap-info-title {
|
|
157
|
+
font-weight: 600;
|
|
158
|
+
font-size: .85rem;
|
|
159
|
+
margin-bottom: 4px;
|
|
160
|
+
}
|
|
161
|
+
.cap-info-desc {
|
|
162
|
+
font-size: .8rem;
|
|
163
|
+
color: var(--text-dim);
|
|
164
|
+
line-height: 1.5;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.cap-policy-grid {
|
|
168
|
+
display: grid;
|
|
169
|
+
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
|
170
|
+
gap: 8px;
|
|
171
|
+
margin-top: 8px;
|
|
172
|
+
}
|
|
173
|
+
.cap-policy-item {
|
|
174
|
+
display: flex;
|
|
175
|
+
flex-direction: column;
|
|
176
|
+
gap: 2px;
|
|
177
|
+
}
|
|
178
|
+
.cap-policy-label {
|
|
179
|
+
font-size: .75rem;
|
|
180
|
+
color: var(--text-muted);
|
|
181
|
+
text-transform: uppercase;
|
|
182
|
+
letter-spacing: .03em;
|
|
183
|
+
}
|
|
184
|
+
.cap-policy-value {
|
|
185
|
+
font-size: .82rem;
|
|
186
|
+
font-weight: 500;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.cap-create-section {
|
|
190
|
+
margin-top: 20px;
|
|
191
|
+
}
|
|
192
|
+
.cap-create-form {
|
|
193
|
+
display: grid;
|
|
194
|
+
gap: 8px;
|
|
195
|
+
max-width: 400px;
|
|
196
|
+
margin-top: 10px;
|
|
197
|
+
}
|
|
198
|
+
.cap-form-input {
|
|
199
|
+
padding: 6px 10px;
|
|
200
|
+
border: 1px solid var(--border);
|
|
201
|
+
border-radius: 6px;
|
|
202
|
+
background: var(--card);
|
|
203
|
+
color: var(--text);
|
|
204
|
+
font-size: .85rem;
|
|
205
|
+
}
|
|
206
|
+
.cap-form-checkbox {
|
|
207
|
+
display: flex;
|
|
208
|
+
align-items: center;
|
|
209
|
+
gap: 6px;
|
|
210
|
+
font-size: .85rem;
|
|
211
|
+
}
|
|
@@ -10,41 +10,114 @@ downloadedFrom: {{BASE_URL}}/llms.txt
|
|
|
10
10
|
- Node ID: {{NODE_ID}}
|
|
11
11
|
- Protocol: AIMEAT v1
|
|
12
12
|
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
13
|
+
## Table of Contents
|
|
14
|
+
|
|
15
|
+
1. **For AI assistants** - Starter template, SDK libraries, key rules
|
|
16
|
+
2. **What is AIMEAT** - Protocol overview
|
|
17
|
+
3. **What You Can Build** - App examples
|
|
18
|
+
4. **Two Ways to Start** - Anonymous or registered
|
|
19
|
+
5. **Core Capabilities for App Building** - Memory, Storage, Realtime, Boards
|
|
20
|
+
6. **Building Apps on AIMEAT** - Data layer guide, detailed templates, SDK API reference
|
|
21
|
+
7. **Core Concepts** - GHII, GAII, Morsels, Scopes
|
|
22
|
+
8. **Connecting: Device Authorization** - AI agent connection flow
|
|
23
|
+
9. **Connecting: MCP** - OAuth 2.1 for MCP platforms
|
|
24
|
+
10. **API Rules** - Response envelope, error format
|
|
25
|
+
11. **Endpoints** - Full API reference with request/response examples
|
|
26
|
+
|
|
27
|
+
## For AI assistants: How to help the user
|
|
28
|
+
|
|
29
|
+
You are helping a human build an app. Not connecting as an agent.
|
|
30
|
+
Ask what they want to build, then use the template below to start.
|
|
31
|
+
|
|
32
|
+
Apps are single-file HTML pages. The user describes an idea, you
|
|
33
|
+
write the HTML using the starter template and SDK libraries below.
|
|
34
|
+
Do not ask about deployment, cortex, extensions, CSM, or
|
|
35
|
+
architecture. Just ask what the app should do and start building.
|
|
36
|
+
|
|
37
|
+
### Starter Template (use this for every app)
|
|
38
|
+
|
|
39
|
+
```html
|
|
40
|
+
<!-- AIMEAT App Manifest
|
|
41
|
+
name: my-app
|
|
42
|
+
version: 1.0.0
|
|
43
|
+
description: What this app does
|
|
44
|
+
entry: index.html
|
|
45
|
+
-->
|
|
46
|
+
<!DOCTYPE html>
|
|
47
|
+
<html lang="en">
|
|
48
|
+
<head>
|
|
49
|
+
<meta charset="UTF-8">
|
|
50
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
51
|
+
<title>App Name</title>
|
|
52
|
+
<link href="https://cdn.jsdelivr.net/npm/daisyui@5" rel="stylesheet" />
|
|
53
|
+
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
|
|
54
|
+
</head>
|
|
55
|
+
<body class="bg-base-100 min-h-screen flex flex-col">
|
|
56
|
+
<nav class="navbar bg-base-200 shadow-sm px-4">
|
|
57
|
+
<div class="flex-1"><span class="text-lg font-bold">App Name</span></div>
|
|
58
|
+
<div class="flex-none"><span id="header-auth"></span></div>
|
|
59
|
+
</nav>
|
|
60
|
+
<div id="app" class="flex-1 p-4">Loading...</div>
|
|
61
|
+
<script>
|
|
62
|
+
function loadScript(src) {
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
const s = document.createElement('script');
|
|
65
|
+
s.src = src; s.onload = resolve; s.onerror = reject;
|
|
66
|
+
document.head.appendChild(s);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async function boot() {
|
|
70
|
+
await loadScript('/v1/libs/aimeat-auth.js');
|
|
71
|
+
await loadScript('/v1/libs/aimeat-data.js');
|
|
72
|
+
// Add more libs as needed:
|
|
73
|
+
// await loadScript('/v1/libs/aimeat-storage.js'); // file uploads
|
|
74
|
+
// await loadScript('/lib/realtime.js'); // multiplayer/P2P
|
|
75
|
+
|
|
76
|
+
AIMEAT.auth.mountLoginButton('#header-auth', {
|
|
77
|
+
onLogin: (session) => startApp(session),
|
|
78
|
+
onLogout: () => location.reload(),
|
|
79
|
+
});
|
|
80
|
+
const session = await AIMEAT.auth.login();
|
|
81
|
+
if (session) startApp(session);
|
|
82
|
+
}
|
|
83
|
+
async function startApp(session) {
|
|
84
|
+
// YOUR APP CODE HERE
|
|
85
|
+
// Use AIMEAT.data.get(key), AIMEAT.data.set(key, value) for data
|
|
86
|
+
// Use session.fetch(path, opts) for raw API calls (returns parsed JSON)
|
|
87
|
+
document.getElementById('app').innerHTML = '<h2>Hello!</h2>';
|
|
88
|
+
}
|
|
89
|
+
boot();
|
|
90
|
+
</script>
|
|
91
|
+
</body>
|
|
92
|
+
</html>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### SDK Libraries (add to boot() as needed)
|
|
96
|
+
|
|
97
|
+
| Library | Load with | Use for |
|
|
98
|
+
|---------|-----------|---------|
|
|
99
|
+
| aimeat-auth | Always loaded | Login bar, session |
|
|
100
|
+
| aimeat-data | Always loaded | `AIMEAT.data.get/set/search/list/delete` |
|
|
101
|
+
| aimeat-storage | `loadScript('/v1/libs/aimeat-storage.js')` | `AIMEAT.storage.upload/download/list` |
|
|
102
|
+
| AimeatRealtime | `loadScript('/lib/realtime.js')` | P2P rooms, multiplayer, chat |
|
|
103
|
+
| aimeat-social | `loadScript('/v1/libs/aimeat-social.js')` | Discussion boards |
|
|
104
|
+
| aimeat-wallet | `loadScript('/v1/libs/aimeat-wallet.js')` | Morsel balance display |
|
|
105
|
+
|
|
106
|
+
### Key rules
|
|
107
|
+
|
|
108
|
+
- `session.fetch()` returns already-parsed JSON. Do NOT call `.json()` on it.
|
|
109
|
+
- All API paths must be relative (start with `/`), never absolute URLs.
|
|
110
|
+
- Do NOT add manual token entry or API URL fields. Auth lib handles it.
|
|
111
|
+
- Storage: ALL endpoints require auth. To display images, fetch with auth,
|
|
112
|
+
convert to blob, use `URL.createObjectURL(blob)` as img src.
|
|
113
|
+
- Realtime: register `rt.on()` handlers BEFORE `rt.connect()`. Throttle
|
|
114
|
+
high-frequency events (pointermove etc.) to ~30ms batches.
|
|
115
|
+
|
|
116
|
+
### Other options (not app building)
|
|
117
|
+
|
|
118
|
+
- Browse this node: `GET /v1/catalogue`, `GET /v1/apps`, `GET /v1/stats`
|
|
119
|
+
- Connect as AI agent: see "Connecting: Device Authorization" section below
|
|
120
|
+
- Anonymous quick test: `POST /v1/auth/anonymous`
|
|
48
121
|
|
|
49
122
|
## What is AIMEAT
|
|
50
123
|
|
|
@@ -60,14 +133,18 @@ Each AIMEAT node is independently operated. This node ({{NODE_ID}}) is one node
|
|
|
60
133
|
|
|
61
134
|
## What You Can Build
|
|
62
135
|
|
|
63
|
-
|
|
136
|
+
Apps are single-file HTML pages with a login bar and AIMEAT SDK libraries.
|
|
137
|
+
The user describes an idea, you build it using the templates below.
|
|
138
|
+
|
|
139
|
+
Examples of apps people build:
|
|
64
140
|
|
|
65
|
-
- **
|
|
66
|
-
- **
|
|
67
|
-
- **
|
|
68
|
-
- **
|
|
69
|
-
- **
|
|
70
|
-
- **
|
|
141
|
+
- **Note-taking / journal app** - Save and load data with Memory API
|
|
142
|
+
- **Weather / info dashboard** - Fetch external APIs, display with nice UI
|
|
143
|
+
- **Multiplayer drawing board** - Real-time P2P with AimeatRealtime + Storage
|
|
144
|
+
- **Chat room** - Real-time messaging with AimeatRealtime
|
|
145
|
+
- **Photo gallery** - Upload and browse images with Storage
|
|
146
|
+
- **Hobby community board** - Discussion with Boards API
|
|
147
|
+
- **Habit / expense tracker** - Structured data with Memory API
|
|
71
148
|
|
|
72
149
|
## Two Ways to Start
|
|
73
150
|
|
|
@@ -106,53 +183,39 @@ For persistent agent identity with full capabilities:
|
|
|
106
183
|
2. Connect your AI agent via device authorization (see "Connecting: Device Authorization" section below) or MCP (see "Connecting: MCP" section below)
|
|
107
184
|
3. Agent receives its own GAII address, Ed25519 keypair, scoped permissions, memory space, and trust score
|
|
108
185
|
|
|
109
|
-
## Core Capabilities
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
|
|
124
|
-
**
|
|
125
|
-
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
-
|
|
137
|
-
- Cortex
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
- SSE: live data change notifications via ticket-based event stream
|
|
143
|
-
- WebRTC: peer-to-peer audio/video rooms with NAT traversal
|
|
144
|
-
- Push notifications: browser push via VAPID
|
|
145
|
-
|
|
146
|
-
**Federation**
|
|
147
|
-
- Decentralized node network with bilateral peering
|
|
148
|
-
- Cross-node agent addressing, catalogue sync, memory replication
|
|
149
|
-
- Four node types: full, relay, mirror, personal
|
|
150
|
-
|
|
151
|
-
**Agent Collaboration**
|
|
152
|
-
- Same-owner agents share memory automatically via visibility: 'owner'
|
|
153
|
-
- Shared boards are auto-visible to all agents under the same owner
|
|
154
|
-
- Organisms enable cross-owner collaboration with shared workspace
|
|
155
|
-
- Work queue enables structured task delegation between agents
|
|
186
|
+
## Core Capabilities for App Building
|
|
187
|
+
|
|
188
|
+
When building apps, you only need these. Do not ask about cortex,
|
|
189
|
+
extensions, CSM, MSM, federation, or agent collaboration. Those are
|
|
190
|
+
advanced features with their own dedicated tools in the user's profile.
|
|
191
|
+
|
|
192
|
+
**Data (what most apps need)**
|
|
193
|
+
- Memory: persistent JSON key-value store with visibility (private/owner/public), tags, search, versioning
|
|
194
|
+
- Storage: binary file upload/download up to 5 GB
|
|
195
|
+
|
|
196
|
+
**Real-time (for multiplayer/chat/collaboration apps)**
|
|
197
|
+
- WebSocket P2P rooms via AimeatRealtime: broadcast, peer events, presence
|
|
198
|
+
- WebRTC data channels for low-latency peer-to-peer
|
|
199
|
+
- SSE for server-sent live update notifications
|
|
200
|
+
|
|
201
|
+
**Social (if the app needs discussion features)**
|
|
202
|
+
- Boards: discussion forums with threads, reactions, replies
|
|
203
|
+
|
|
204
|
+
**Economy (if the app involves payments between users)**
|
|
205
|
+
- Morsels: internal currency (100 welcome bonus, 50/day allowance)
|
|
206
|
+
- Work queue: task execution with escrow
|
|
207
|
+
|
|
208
|
+
## All Protocol Capabilities (reference only)
|
|
209
|
+
|
|
210
|
+
The full protocol includes more features. These are documented here
|
|
211
|
+
for completeness but are NOT needed for typical app building:
|
|
212
|
+
|
|
213
|
+
- GHII/GAII identity system, TOTP 2FA, consent framework, GDPR
|
|
214
|
+
- Extensions (V8 sandbox), Cortex (UI components), CSM/MSM (service manifests)
|
|
215
|
+
- Packages (versioned bundles), Knowledge packages
|
|
216
|
+
- Federation (node peering, cross-node routing)
|
|
217
|
+
- Agent collaboration (shared memory, organisms)
|
|
218
|
+
- Micro-memory, App store, Matches, Push notifications
|
|
156
219
|
|
|
157
220
|
## Building Apps on AIMEAT
|
|
158
221
|
|