aimeat 1.25.1 → 1.27.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/README.md +15 -1
- package/dist/.env.example +17 -0
- package/dist/locales/en.json +178 -6
- package/dist/locales/fi.json +185 -13
- package/dist/public/components/ImageDeliverable.js +2 -1
- package/dist/public/components/Modal.js +3 -2
- package/dist/public/components/NotificationBell.js +2 -1
- package/dist/public/components/PresenceDot.js +53 -0
- package/dist/public/css/components/app-sandbox.css +62 -0
- package/dist/public/css/components/markdown.css +67 -0
- package/dist/public/css/theme.css +30 -0
- package/dist/public/css/views/app-grant.css +51 -0
- package/dist/public/css/views/landing.css +8 -2
- package/dist/public/css/views/notebook.css +195 -0
- package/dist/public/css/views/profile.css +15 -0
- package/dist/public/js/api.js +5 -3
- package/dist/public/js/app-sandbox.js +83 -0
- package/dist/public/js/components/auth-image.js +3 -2
- package/dist/public/js/components/tag-cloud.js +1 -1
- package/dist/public/js/components/tag-editor.js +1 -1
- package/dist/public/js/hooks.js +1 -2
- package/dist/public/js/presence-store.js +97 -0
- package/dist/public/js/services/admin.js +6 -0
- package/dist/public/js/services/boards.js +1 -1
- package/dist/public/js/services/ecosystem.js +1 -1
- package/dist/public/js/services/foundry-prompts-base.js +2 -2
- package/dist/public/js/services/foundry-smoke.js +2 -1
- package/dist/public/js/services/foundry-validate.js +6 -8
- package/dist/public/js/services/foundry.js +4 -3
- package/dist/public/js/services/generator-prompts-base.js +2 -2
- package/dist/public/js/services/generator-smoke.js +2 -1
- package/dist/public/js/services/generator-validate.js +5 -7
- package/dist/public/js/services/generator.js +2 -1
- package/dist/public/js/services/memory.js +13 -0
- package/dist/public/js/services/messages.js +2 -1
- package/dist/public/js/services/notebook.js +124 -0
- package/dist/public/js/services/packages.js +3 -2
- package/dist/public/js/services/presence.js +35 -0
- package/dist/public/js/style-testbed.js +6 -5
- package/dist/public/lib/minidenticons.min.js +1 -0
- package/dist/public/lib/yaml.mjs +1 -0
- package/dist/public/spa.html +84 -9
- package/dist/public/types/aimeat-globals.d.ts +52 -0
- package/dist/public/types/vendored-libs.d.ts +56 -0
- package/dist/public/views/_template.js +3 -1
- package/dist/public/views/admin/agent-integration-tab.js +4 -3
- package/dist/public/views/admin/agents-tab.js +3 -2
- package/dist/public/views/admin/config-tab.js +4 -3
- package/dist/public/views/admin/economy-tab.js +4 -3
- package/dist/public/views/admin/federation-tab.js +138 -1
- package/dist/public/views/admin/maintenance-tab.js +1 -1
- package/dist/public/views/admin/overview-tab.js +4 -3
- package/dist/public/views/admin/portal-tab.js +90 -2
- package/dist/public/views/admin/push-tab.js +8 -6
- package/dist/public/views/admin/security-tab.js +7 -7
- package/dist/public/views/admin.js +2 -1
- package/dist/public/views/app-grant.js +107 -0
- package/dist/public/views/business.js +8 -1
- package/dist/public/views/doc-solo.js +3 -1
- package/dist/public/views/guides.js +8 -4
- package/dist/public/views/hobbies.js +4 -2
- package/dist/public/views/how-it-works.js +5 -1
- package/dist/public/views/landing.js +83 -76
- package/dist/public/views/marketplace.js +10 -9
- package/dist/public/views/openclaw.js +1 -1
- package/dist/public/views/portal-dev.js +5 -2
- package/dist/public/views/portal.js +3 -2
- package/dist/public/views/profile/access-tab.js +75 -0
- package/dist/public/views/profile/agents/shared-board.js +4 -2
- package/dist/public/views/profile/agents/tab-messages.js +13 -11
- package/dist/public/views/profile/agents-messages-subtab.js +2 -1
- package/dist/public/views/profile/apps-tab.js +2 -1
- package/dist/public/views/profile/boards-tab.js +3 -2
- package/dist/public/views/profile/calibrator-batch.js +3 -2
- package/dist/public/views/profile/data-wallet-tab.js +2 -1
- package/dist/public/views/profile/extensions-tab.js +4 -3
- package/dist/public/views/profile/federation-tab.js +4 -0
- package/dist/public/views/profile/foundry-dashboard/use-autopilot.js +3 -2
- package/dist/public/views/profile/foundry-detail.js +1 -1
- package/dist/public/views/profile/generator-detail.js +1 -1
- package/dist/public/views/profile/inbox-tab.js +7 -3
- package/dist/public/views/profile/inline-panels.js +3 -1
- package/dist/public/views/profile/knowledge-tab.js +2 -1
- package/dist/public/views/profile/landing-page.js +88 -0
- package/dist/public/views/profile/memory-tab.js +6 -5
- package/dist/public/views/profile/notebook-tab.js +500 -0
- package/dist/public/views/profile/organisms/activity-panel.js +135 -0
- package/dist/public/views/profile/organisms/agents.js +141 -0
- package/dist/public/views/profile/organisms/document.js +274 -0
- package/dist/public/views/profile/organisms/helpers.js +61 -0
- package/dist/public/views/profile/organisms/home.js +315 -0
- package/dist/public/views/profile/organisms/members.js +220 -0
- package/dist/public/views/profile/organisms/panels.js +173 -0
- package/dist/public/views/profile/organisms/participants-panel.js +160 -0
- package/dist/public/views/profile/organisms/schema-form.js +127 -0
- package/dist/public/views/profile/organisms/sources-panel.js +164 -0
- package/dist/public/views/profile/organisms/widgets.js +58 -0
- package/dist/public/views/profile/organisms/workspace-comments.js +99 -0
- package/dist/public/views/profile/organisms/workspace-list.js +268 -0
- package/dist/public/views/profile/organisms/workspace.js +1272 -0
- package/dist/public/views/profile/organisms-tab.js +456 -3819
- package/dist/public/views/profile/shared.js +64 -2
- package/dist/public/views/profile/workflows-form.js +1 -1
- package/dist/public/views/profile.js +16 -14
- package/dist/public/views/public-knowledge-viewer.js +3 -2
- package/dist/public/views/public-workspace-viewer.js +2 -1
- package/dist/scripts/check-importmap.d.ts +2 -0
- package/dist/scripts/check-importmap.d.ts.map +1 -0
- package/dist/scripts/check-importmap.js +102 -0
- package/dist/scripts/check-importmap.js.map +1 -0
- package/dist/scripts/screenshot-worker.d.ts +2 -0
- package/dist/scripts/screenshot-worker.d.ts.map +1 -0
- package/dist/scripts/screenshot-worker.js +14 -0
- package/dist/scripts/screenshot-worker.js.map +1 -0
- package/dist/src/auth/jwt.d.ts +2 -0
- package/dist/src/auth/jwt.d.ts.map +1 -1
- package/dist/src/auth/jwt.js +2 -0
- package/dist/src/auth/jwt.js.map +1 -1
- package/dist/src/auth/middleware.d.ts.map +1 -1
- package/dist/src/auth/middleware.js +6 -2
- package/dist/src/auth/middleware.js.map +1 -1
- package/dist/src/cli/init-wizard.d.ts +7 -3
- package/dist/src/cli/init-wizard.d.ts.map +1 -1
- package/dist/src/cli/init-wizard.js +50 -5
- package/dist/src/cli/init-wizard.js.map +1 -1
- package/dist/src/cli/screenshot-worker.d.ts +2 -0
- package/dist/src/cli/screenshot-worker.d.ts.map +1 -0
- package/dist/src/cli/screenshot-worker.js +156 -0
- package/dist/src/cli/screenshot-worker.js.map +1 -0
- package/dist/src/config.d.ts +27 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +30 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +1432 -62
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/generated/prisma-postgres/edge.js +35 -5
- package/dist/src/generated/prisma-postgres/index-browser.js +32 -2
- package/dist/src/generated/prisma-postgres/index.d.ts +2040 -161
- package/dist/src/generated/prisma-postgres/index.js +35 -5
- package/dist/src/generated/prisma-postgres/package.json +1 -1
- package/dist/src/generated/prisma-postgres/schema.prisma +50 -12
- package/dist/src/generated/prisma-postgres/wasm.js +35 -5
- package/dist/src/index.js +8 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/apps.d.ts +2 -0
- package/dist/src/mcp/apps.d.ts.map +1 -1
- package/dist/src/mcp/apps.js +18 -1
- package/dist/src/mcp/apps.js.map +1 -1
- package/dist/src/mcp/extensions.d.ts +1 -0
- package/dist/src/mcp/extensions.d.ts.map +1 -1
- package/dist/src/mcp/extensions.js +10 -1
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/middleware/rate-limit.d.ts +10 -0
- package/dist/src/middleware/rate-limit.d.ts.map +1 -1
- package/dist/src/middleware/rate-limit.js +24 -4
- package/dist/src/middleware/rate-limit.js.map +1 -1
- package/dist/src/middleware/subdomain.d.ts +15 -3
- package/dist/src/middleware/subdomain.d.ts.map +1 -1
- package/dist/src/middleware/subdomain.js +35 -12
- package/dist/src/middleware/subdomain.js.map +1 -1
- package/dist/src/routes/admin.js +4 -2
- package/dist/src/routes/admin.js.map +1 -1
- package/dist/src/routes/agent-webhook.d.ts.map +1 -1
- package/dist/src/routes/agent-webhook.js +3 -2
- package/dist/src/routes/agent-webhook.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts +32 -0
- package/dist/src/routes/app-grants.d.ts.map +1 -0
- package/dist/src/routes/app-grants.js +257 -0
- package/dist/src/routes/app-grants.js.map +1 -0
- package/dist/src/routes/apps.d.ts +9 -0
- package/dist/src/routes/apps.d.ts.map +1 -1
- package/dist/src/routes/apps.js +127 -2
- package/dist/src/routes/apps.js.map +1 -1
- package/dist/src/routes/extensions.d.ts +2 -0
- package/dist/src/routes/extensions.d.ts.map +1 -1
- package/dist/src/routes/extensions.js +18 -9
- package/dist/src/routes/extensions.js.map +1 -1
- package/dist/src/routes/federation-peer.d.ts.map +1 -1
- package/dist/src/routes/federation-peer.js +327 -43
- package/dist/src/routes/federation-peer.js.map +1 -1
- package/dist/src/routes/federation-sync.d.ts +2 -0
- package/dist/src/routes/federation-sync.d.ts.map +1 -1
- package/dist/src/routes/federation-sync.js +20 -1
- package/dist/src/routes/federation-sync.js.map +1 -1
- package/dist/src/routes/foundry.d.ts.map +1 -1
- package/dist/src/routes/foundry.js +13 -1
- package/dist/src/routes/foundry.js.map +1 -1
- package/dist/src/routes/generator.d.ts.map +1 -1
- package/dist/src/routes/generator.js +13 -1
- package/dist/src/routes/generator.js.map +1 -1
- package/dist/src/routes/librarian.d.ts +18 -0
- package/dist/src/routes/librarian.d.ts.map +1 -0
- package/dist/src/routes/librarian.js +88 -0
- package/dist/src/routes/librarian.js.map +1 -0
- package/dist/src/routes/libs.d.ts +6 -0
- package/dist/src/routes/libs.d.ts.map +1 -1
- package/dist/src/routes/libs.js +40 -0
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/oauth-login.d.ts +22 -0
- package/dist/src/routes/oauth-login.d.ts.map +1 -0
- package/dist/src/routes/oauth-login.js +219 -0
- package/dist/src/routes/oauth-login.js.map +1 -0
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +10 -1
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/presence.d.ts +23 -0
- package/dist/src/routes/presence.d.ts.map +1 -0
- package/dist/src/routes/presence.js +88 -0
- package/dist/src/routes/presence.js.map +1 -0
- package/dist/src/routes/site.d.ts +2 -0
- package/dist/src/routes/site.d.ts.map +1 -1
- package/dist/src/routes/site.js +27 -0
- package/dist/src/routes/site.js.map +1 -1
- package/dist/src/routes/sse.d.ts +2 -0
- package/dist/src/routes/sse.d.ts.map +1 -1
- package/dist/src/routes/sse.js +9 -0
- package/dist/src/routes/sse.js.map +1 -1
- package/dist/src/routes/subdomains.d.ts +5 -0
- package/dist/src/routes/subdomains.d.ts.map +1 -1
- package/dist/src/routes/subdomains.js +55 -9
- package/dist/src/routes/subdomains.js.map +1 -1
- package/dist/src/routes/wellknown.d.ts.map +1 -1
- package/dist/src/routes/wellknown.js +5 -0
- package/dist/src/routes/wellknown.js.map +1 -1
- package/dist/src/routes/work.d.ts.map +1 -1
- package/dist/src/routes/work.js +6 -0
- package/dist/src/routes/work.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +29 -0
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/service-init.js +34 -0
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts +3 -0
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +19 -2
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +5 -0
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +2 -0
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/federation-availability.d.ts +28 -0
- package/dist/src/services/federation-availability.d.ts.map +1 -0
- package/dist/src/services/federation-availability.js +58 -0
- package/dist/src/services/federation-availability.js.map +1 -0
- package/dist/src/services/federation-book.d.ts +70 -0
- package/dist/src/services/federation-book.d.ts.map +1 -0
- package/dist/src/services/federation-book.js +198 -0
- package/dist/src/services/federation-book.js.map +1 -0
- package/dist/src/services/federation-tiers.d.ts +45 -0
- package/dist/src/services/federation-tiers.d.ts.map +1 -0
- package/dist/src/services/federation-tiers.js +58 -0
- package/dist/src/services/federation-tiers.js.map +1 -0
- package/dist/src/services/federation.d.ts +15 -0
- package/dist/src/services/federation.d.ts.map +1 -1
- package/dist/src/services/federation.js +12 -0
- package/dist/src/services/federation.js.map +1 -1
- package/dist/src/services/hooks.js +2 -2
- package/dist/src/services/hooks.js.map +1 -1
- package/dist/src/services/librarian.d.ts +62 -0
- package/dist/src/services/librarian.d.ts.map +1 -0
- package/dist/src/services/librarian.js +135 -0
- package/dist/src/services/librarian.js.map +1 -0
- package/dist/src/services/network-policy.d.ts +88 -0
- package/dist/src/services/network-policy.d.ts.map +1 -0
- package/dist/src/services/network-policy.js +154 -0
- package/dist/src/services/network-policy.js.map +1 -0
- package/dist/src/services/notebook-classify-prompt.d.ts +15 -0
- package/dist/src/services/notebook-classify-prompt.d.ts.map +1 -0
- package/dist/src/services/notebook-classify-prompt.js +39 -0
- package/dist/src/services/notebook-classify-prompt.js.map +1 -0
- package/dist/src/services/notebook-classify.d.ts +80 -0
- package/dist/src/services/notebook-classify.d.ts.map +1 -0
- package/dist/src/services/notebook-classify.js +150 -0
- package/dist/src/services/notebook-classify.js.map +1 -0
- package/dist/src/services/oidc-client.d.ts +3 -0
- package/dist/src/services/oidc-client.d.ts.map +1 -1
- package/dist/src/services/oidc-client.js +17 -2
- package/dist/src/services/oidc-client.js.map +1 -1
- package/dist/src/services/presence.d.ts +108 -0
- package/dist/src/services/presence.d.ts.map +1 -0
- package/dist/src/services/presence.js +304 -0
- package/dist/src/services/presence.js.map +1 -0
- package/dist/src/services/prompt-defaults.d.ts.map +1 -1
- package/dist/src/services/prompt-defaults.js +13 -0
- package/dist/src/services/prompt-defaults.js.map +1 -1
- package/dist/src/services/quota.d.ts +14 -1
- package/dist/src/services/quota.d.ts.map +1 -1
- package/dist/src/services/quota.js +28 -1
- package/dist/src/services/quota.js.map +1 -1
- package/dist/src/services/site.d.ts +20 -0
- package/dist/src/services/site.d.ts.map +1 -1
- package/dist/src/services/site.js +70 -0
- package/dist/src/services/site.js.map +1 -1
- package/dist/src/services/webhook-dispatcher.d.ts.map +1 -1
- package/dist/src/services/webhook-dispatcher.js +3 -2
- package/dist/src/services/webhook-dispatcher.js.map +1 -1
- package/dist/src/storage/interface.d.ts +35 -2
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/interface.js.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +20 -1
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +171 -2
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +11 -1
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +112 -6
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/identity.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/repos/identity.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/identity.js +10 -4
- package/dist/src/storage/providers/sqlite/repos/identity.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts +2 -0
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.js +55 -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 +67 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/app-grant.repository.d.ts +22 -0
- package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/app-grant.repository.js +2 -0
- package/dist/src/storage/repositories/app-grant.repository.js.map +1 -0
- package/dist/src/storage/repositories/identity.repository.d.ts +1 -0
- package/dist/src/storage/repositories/identity.repository.d.ts.map +1 -1
- 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/memory.repository.d.ts +25 -0
- package/dist/src/storage/repositories/memory.repository.d.ts.map +1 -1
- package/dist/src/utils/env-config.d.ts +5 -2
- package/dist/src/utils/env-config.d.ts.map +1 -1
- package/dist/src/utils/env-config.js +45 -2
- package/dist/src/utils/env-config.js.map +1 -1
- package/dist/src/utils/env-validator.d.ts +6 -3
- package/dist/src/utils/env-validator.d.ts.map +1 -1
- package/dist/src/utils/env-validator.js +14 -3
- package/dist/src/utils/env-validator.js.map +1 -1
- package/dist/src/utils/node-descriptor.d.ts +34 -0
- package/dist/src/utils/node-descriptor.d.ts.map +1 -0
- package/dist/src/utils/node-descriptor.js +42 -0
- package/dist/src/utils/node-descriptor.js.map +1 -0
- package/dist/src/utils/url-validator.d.ts +15 -0
- package/dist/src/utils/url-validator.d.ts.map +1 -1
- package/dist/src/utils/url-validator.js +120 -30
- package/dist/src/utils/url-validator.js.map +1 -1
- package/dist/src/utils/version.d.ts +3 -0
- package/dist/src/utils/version.d.ts.map +1 -0
- package/dist/src/utils/version.js +40 -0
- package/dist/src/utils/version.js.map +1 -0
- package/dist/static/app-catalog.html +723 -27
- package/package.json +7 -2
- package/prisma/schema.postgres.prisma +57 -19
- package/prisma/schema.prisma +34 -0
package/README.md
CHANGED
|
@@ -346,6 +346,13 @@ npx aimeat seed # seed example packages (in another terminal, server must be
|
|
|
346
346
|
npx aimeat connect --url https://your-node --owner your-handle
|
|
347
347
|
```
|
|
348
348
|
|
|
349
|
+
**App thumbnails (optional).** `aimeat screenshot-worker` renders each published app and stores a
|
|
350
|
+
thumbnail shown in the App Catalogue and on the landing wall (`--watch N` keeps it backfilling). It
|
|
351
|
+
drives your machine's installed **Chrome/Edge** via Playwright — **no browser download** on
|
|
352
|
+
Windows/desktop; a headless server runs `npx playwright install chromium` once. Auth uses a
|
|
353
|
+
long-lived operator token (mint one with `POST /v1/access/tokens`, `grant_operator: true`). The node
|
|
354
|
+
runs fine without it — screenshots are an opt-in operator feature.
|
|
355
|
+
|
|
349
356
|
### From source
|
|
350
357
|
|
|
351
358
|
Requires Node.js 24+ and pnpm 10+. MongoDB is optional.
|
|
@@ -389,7 +396,14 @@ prerequisites** to install. A small control panel starts/stops the node, shows s
|
|
|
389
396
|
it (port, federation role), connects a local AI (Ollama / LM Studio) to your account, and opens the web
|
|
390
397
|
dashboard in your browser. Your data lives in your own app-data folder and survives restarts.
|
|
391
398
|
|
|
392
|
-
**Download:** get the latest installer from the [GitHub Releases page](https://github.com/miikkij/aimeat-protocol/releases/latest).
|
|
399
|
+
**Download:** get the latest installer from the [GitHub Releases page](https://github.com/miikkij/aimeat-protocol/releases/latest).
|
|
400
|
+
|
|
401
|
+
> **Windows SmartScreen note.** The installer is not yet code-signed, so Windows may show a blue
|
|
402
|
+
> *"Windows protected your PC"* SmartScreen prompt the first time you run it. This is expected for
|
|
403
|
+
> new independent software and does **not** mean anything is wrong with the download. To continue,
|
|
404
|
+
> click **More info → Run anyway**. If you'd like to verify the file first, every release lists the
|
|
405
|
+
> binaries on its [Releases page](https://github.com/miikkij/aimeat-protocol/releases/latest) — you
|
|
406
|
+
> can also build it yourself from source (below). A signed installer is on our roadmap.
|
|
393
407
|
|
|
394
408
|
<p align="center">
|
|
395
409
|
<img src="assets/screenshots/aimeat-desktop.png" alt="AIMEAT Personal Node desktop app — control panel with Getting Started steps, node status (running on port 40050), and node info" width="640" />
|
package/dist/.env.example
CHANGED
|
@@ -8,6 +8,15 @@ AIMEAT_PORT=40050
|
|
|
8
8
|
# AIMEAT_NODE_TYPE="full" # full | relay | mirror
|
|
9
9
|
# AIMEAT_BASE_URL="https://your-domain.com" # Public URL (default: http://localhost:$PORT)
|
|
10
10
|
|
|
11
|
+
# ── App Origin Isolation (H-2) ─────────────────────────────────
|
|
12
|
+
# User-published apps run on a dedicated origin so they can never reach the
|
|
13
|
+
# authenticated SPA's session. Requires DNS + a *.apps.<host> TLS cert + an nginx
|
|
14
|
+
# server_name block (see docs/internal/app-origin-deployment.md). Keep DISABLED
|
|
15
|
+
# until that infra is live — enabling it without DNS/cert would 301 apps to a host
|
|
16
|
+
# that does not resolve.
|
|
17
|
+
# AIMEAT_APP_HOST="apps.your-domain.com" # default: apps.<AIMEAT_BASE_URL host>, empty for localhost/IP
|
|
18
|
+
# AIMEAT_APP_ORIGIN_ENABLED=false # true → apex inline app HTML 301s to the app origin
|
|
19
|
+
|
|
11
20
|
# ── Storage Backend ───────────────────────────────────────────
|
|
12
21
|
# Choose storage: memory (default, data lost on restart), sqlite (file-based, zero-config),
|
|
13
22
|
# mongodb (production), or postgresql (production). `postgres` is accepted as an alias.
|
|
@@ -250,6 +259,14 @@ AIMEAT_PORT=40050
|
|
|
250
259
|
# AIMEAT_NONCE_TTL_SECONDS=300 # verification nonce TTL (60-3600)
|
|
251
260
|
# AIMEAT_NATIONAL_EID_PID_CLAIM="personal_identity_code" # FI: personal_identity_code, SE: personalNumber, DK: dk.cpr
|
|
252
261
|
|
|
262
|
+
# ── Social login — Google sign-in (OIDC) ─────────────────────
|
|
263
|
+
# Create OAuth credentials at https://console.cloud.google.com/apis/credentials
|
|
264
|
+
# Authorized redirect URI must exactly match the callback below.
|
|
265
|
+
# AIMEAT_GOOGLE_OAUTH_ENABLED=false
|
|
266
|
+
# AIMEAT_GOOGLE_OAUTH_CLIENT_ID="" # OAuth 2.0 client ID from Google Cloud Console
|
|
267
|
+
# AIMEAT_GOOGLE_OAUTH_CLIENT_SECRET="" # OAuth 2.0 client secret
|
|
268
|
+
# AIMEAT_GOOGLE_OAUTH_REDIRECT_URI="" # default: <baseUrl>/v1/ghii/login/google/callback
|
|
269
|
+
|
|
253
270
|
# ── Consul (optional fleet management) ───────────────────────
|
|
254
271
|
# Connect to HashiCorp Consul for centralized config management across nodes.
|
|
255
272
|
# Values in Consul KV take precedence over file/.env but below database overrides.
|
package/dist/locales/en.json
CHANGED
|
@@ -50,6 +50,62 @@
|
|
|
50
50
|
"imageDeliverable.open": "Open full image",
|
|
51
51
|
"profile.landing.home": "Home",
|
|
52
52
|
"profile.landing.menu": "Menu",
|
|
53
|
+
"profile.tabs.notebook": "Notebook",
|
|
54
|
+
"profile.notebook.title": "Notebook",
|
|
55
|
+
"profile.notebook.desc": "Write anything freely — capture it now, find it later. The librarian searches across everything you have: every shared space (organism) you have contributed to, plus your personal notes.",
|
|
56
|
+
"profile.notebook.capturePlaceholder": "Write anything — a thought, an idea, a note to keep…",
|
|
57
|
+
"profile.notebook.captureBtn": "Capture",
|
|
58
|
+
"profile.notebook.captureHint": "Saved to your notebook inbox. Sorting into organisms/workspaces comes next.",
|
|
59
|
+
"profile.notebook.saved": "Captured",
|
|
60
|
+
"profile.notebook.saveFailed": "Could not capture",
|
|
61
|
+
"profile.notebook.inboxTitle": "Inbox",
|
|
62
|
+
"profile.notebook.inboxEmpty": "Nothing captured yet — write something above.",
|
|
63
|
+
"profile.notebook.inboxLoading": "Loading…",
|
|
64
|
+
"profile.notebook.deleteBtn": "Delete",
|
|
65
|
+
"profile.notebook.deleteConfirm": "Delete this note?",
|
|
66
|
+
"profile.notebook.deleted": "Deleted",
|
|
67
|
+
"profile.notebook.librarianTitle": "Librarian",
|
|
68
|
+
"profile.notebook.librarianDesc": "Ask for anything you have — it searches every organism and note, ranked.",
|
|
69
|
+
"profile.notebook.searchPlaceholder": "What are you looking for?",
|
|
70
|
+
"profile.notebook.searchBtn": "Search",
|
|
71
|
+
"profile.notebook.searching": "Searching…",
|
|
72
|
+
"profile.notebook.noHits": "No matches.",
|
|
73
|
+
"profile.notebook.hitsCount": "{n} results",
|
|
74
|
+
"profile.notebook.personalNote": "Personal",
|
|
75
|
+
"profile.notebook.openInMemory": "Open",
|
|
76
|
+
"profile.notebook.suggestBtn": "Suggest placement",
|
|
77
|
+
"profile.notebook.sorting": "Sorting…",
|
|
78
|
+
"profile.notebook.fieldOrganism": "Organism",
|
|
79
|
+
"profile.notebook.fieldWorkspace": "Workspace",
|
|
80
|
+
"profile.notebook.fieldSpace": "Document space",
|
|
81
|
+
"profile.notebook.fieldTitle": "Title",
|
|
82
|
+
"profile.notebook.fieldBody": "Document",
|
|
83
|
+
"profile.notebook.newOrganism": "New organism",
|
|
84
|
+
"profile.notebook.newWorkspace": "New workspace",
|
|
85
|
+
"profile.notebook.newOrgNamePlaceholder": "New organism name",
|
|
86
|
+
"profile.notebook.newWsNamePlaceholder": "New workspace name",
|
|
87
|
+
"profile.notebook.alternatives": "Alternatives:",
|
|
88
|
+
"profile.notebook.materializeBtn": "Save as document",
|
|
89
|
+
"profile.notebook.cancelBtn": "Cancel",
|
|
90
|
+
"profile.notebook.materialized": "Filed as a document",
|
|
91
|
+
"profile.notebook.titleRequired": "A title is required",
|
|
92
|
+
"profile.notebook.orgNameRequired": "Name the new organism",
|
|
93
|
+
"profile.notebook.step1": "Reading your organism structure…",
|
|
94
|
+
"profile.notebook.step2": "Asking the AI for the best placement — this can take up to a couple of minutes with a slow model…",
|
|
95
|
+
"profile.notebook.step3": "Preparing the suggestion…",
|
|
96
|
+
"profile.notebook.sortErrorTitle": "Sorting failed",
|
|
97
|
+
"profile.notebook.needKey": "AI sorting needs your own OpenRouter API key. Add it here, then try again:",
|
|
98
|
+
"profile.notebook.filterPlaceholder": "Filter notes…",
|
|
99
|
+
"profile.notebook.sortNew": "Newest first",
|
|
100
|
+
"profile.notebook.sortOld": "Oldest first",
|
|
101
|
+
"profile.notebook.toggleView": "Collapse / expand",
|
|
102
|
+
"profile.notebook.noMatch": "No notes match the filter.",
|
|
103
|
+
"profile.notebook.scopeOwn": "Mine",
|
|
104
|
+
"profile.notebook.scopePublic": "Public knowledge",
|
|
105
|
+
"profile.notebook.kindKnowledge": "knowledge",
|
|
106
|
+
"profile.notebook.producer": "Producer",
|
|
107
|
+
"profile.notebook.tryAgain": "Try again",
|
|
108
|
+
"profile.notebook.dismiss": "Dismiss",
|
|
53
109
|
"profile.tabs.workflows": "Workflows",
|
|
54
110
|
"profile.workflows.title": "Workflows",
|
|
55
111
|
"profile.workflows.desc": "Declared, ordered agent pipelines with per-step health checks — they show whether each step actually produced, not just that it fired.",
|
|
@@ -187,10 +243,25 @@
|
|
|
187
243
|
"profile.scheduler.soon": "soon",
|
|
188
244
|
"profile.scheduler.paused": "paused",
|
|
189
245
|
"profile.scheduler.autoKey": "(auto)",
|
|
246
|
+
"appGrant": {
|
|
247
|
+
"title": "Allow this app to access your data?",
|
|
248
|
+
"intro": "It will receive its own scoped, revocable token — never your login session. You can revoke it anytime in Profile › Access.",
|
|
249
|
+
"scopesLabel": "Requested access",
|
|
250
|
+
"approve": "Allow access",
|
|
251
|
+
"approving": "Approving…",
|
|
252
|
+
"deny": "Deny",
|
|
253
|
+
"loginTitle": "Log in to continue",
|
|
254
|
+
"loginBody": "Log in on aimeat.io, then re-open the app’s link to approve access.",
|
|
255
|
+
"loginCta": "Log in",
|
|
256
|
+
"errorTitle": "Cannot grant access",
|
|
257
|
+
"missing": "No authorization request.",
|
|
258
|
+
"expired": "This request has expired."
|
|
259
|
+
},
|
|
190
260
|
"common": {
|
|
191
261
|
"cancel": "Cancel",
|
|
192
262
|
"confirm": "Confirm",
|
|
193
263
|
"delete": "Delete",
|
|
264
|
+
"back": "Back",
|
|
194
265
|
"somethingWentWrong": "Something went wrong",
|
|
195
266
|
"retry": "Retry",
|
|
196
267
|
"save": "Save",
|
|
@@ -324,8 +395,8 @@
|
|
|
324
395
|
"offerPosted": "Your service is now listed in the directory.",
|
|
325
396
|
"backToChoices": "Back",
|
|
326
397
|
"registerTitle": "Create your free identity",
|
|
327
|
-
"registerDesc": "When you register, you get
|
|
328
|
-
"registerBtn": "Create free
|
|
398
|
+
"registerDesc": "When you register, you get your own private space — your own digital identity. Your data is protected by your password: only you can access it. No one else can see your private memory, not even the server operator. You don't have to share anything with anyone.",
|
|
399
|
+
"registerBtn": "Create your free space",
|
|
329
400
|
"registerBenefits": [
|
|
330
401
|
"Your own private memory space, password-protected",
|
|
331
402
|
"Full control — only you access your data",
|
|
@@ -406,6 +477,33 @@
|
|
|
406
477
|
"workaroundNote": "Copy your memories and paste directly into any AI chat. Always works, everywhere."
|
|
407
478
|
},
|
|
408
479
|
"comingSoon": "Coming soon",
|
|
480
|
+
"presence": {
|
|
481
|
+
"status": {
|
|
482
|
+
"available": "Available",
|
|
483
|
+
"busy": "Busy",
|
|
484
|
+
"away": "Away",
|
|
485
|
+
"offline": "Offline",
|
|
486
|
+
"invisible": "Invisible",
|
|
487
|
+
"unknown": "Unknown"
|
|
488
|
+
},
|
|
489
|
+
"control": {
|
|
490
|
+
"title": "Presence",
|
|
491
|
+
"desc": "Let others see whether you're reachable. Keep it automatic, set it manually, or choose who can see it.",
|
|
492
|
+
"modeLabel": "How your status is set",
|
|
493
|
+
"modeAuto": "Automatic",
|
|
494
|
+
"modeAutoHint": "Shown as available while you have the portal open.",
|
|
495
|
+
"modeManual": "Manual",
|
|
496
|
+
"statusLabel": "Your status",
|
|
497
|
+
"visibilityLabel": "Who can see it",
|
|
498
|
+
"visEveryone": "Everyone",
|
|
499
|
+
"visEveryoneHint": "Anyone on the network (shared with federated nodes).",
|
|
500
|
+
"visContacts": "Contacts only",
|
|
501
|
+
"visContactsHint": "People you've messaged (this node only).",
|
|
502
|
+
"visNobody": "Nobody",
|
|
503
|
+
"saved": "Presence updated",
|
|
504
|
+
"saveError": "Couldn't update presence"
|
|
505
|
+
}
|
|
506
|
+
},
|
|
409
507
|
"profile": {
|
|
410
508
|
"title": "My Profile",
|
|
411
509
|
"subtitle": "Profile",
|
|
@@ -686,7 +784,7 @@
|
|
|
686
784
|
"setupStep3Why": "Turn on automation and your agent runs the moment new data arrives — you get fresh insights without lifting a finger.",
|
|
687
785
|
"setupStep3Cta": "Set up automation",
|
|
688
786
|
"setupStep4Title": "Get your insights everywhere",
|
|
689
|
-
"setupStep4Why": "Pick an organism and your results show up in Claude / Grok / ChatGPT, ready to reuse for marketing or reports and to share with your team — not locked inside this one app.",
|
|
787
|
+
"setupStep4Why": "Pick a shared space (an organism) and your results show up in Claude / Grok / ChatGPT, ready to reuse for marketing or reports and to share with your team — not locked inside this one app.",
|
|
690
788
|
"setupStep4Cta": "Pick an organism",
|
|
691
789
|
"mcpTitle": "Ask your insights in Claude, Grok, or ChatGPT",
|
|
692
790
|
"mcpSub": "Connect AIMEAT to your AI chat once → then just ask, and get answers, exploration, save and follow-up — straight from everything this app and your agent produce.",
|
|
@@ -1966,6 +2064,11 @@
|
|
|
1966
2064
|
"peers": "Connected Peers",
|
|
1967
2065
|
"online": "Online",
|
|
1968
2066
|
"offline": "Offline",
|
|
2067
|
+
"tier_visiting": "Visiting",
|
|
2068
|
+
"tier_member": "Member",
|
|
2069
|
+
"tier_genesis": "Genesis",
|
|
2070
|
+
"avail_temporary": "Temporary",
|
|
2071
|
+
"avail_permanent": "Permanent",
|
|
1969
2072
|
"statusConnected": "Connected to {count} nodes",
|
|
1970
2073
|
"statusStandalone": "Standalone"
|
|
1971
2074
|
},
|
|
@@ -1986,6 +2089,17 @@
|
|
|
1986
2089
|
"hoverReveal": "Click to copy",
|
|
1987
2090
|
"keepSafe": "Keep this safe — it's your owner recovery key.",
|
|
1988
2091
|
"keyCopied": "Key copied to clipboard!",
|
|
2092
|
+
"agTitle": "Connected Apps",
|
|
2093
|
+
"agDesc": "Published apps you have granted scoped access to your data. Each holds its own revocable token — never your login session.",
|
|
2094
|
+
"agLoading": "Loading...",
|
|
2095
|
+
"agEmpty": "No apps have access to your data.",
|
|
2096
|
+
"agScopes": "scopes",
|
|
2097
|
+
"agGrantedAt": "Granted",
|
|
2098
|
+
"agLastUsed": "Last used",
|
|
2099
|
+
"agNever": "never",
|
|
2100
|
+
"agConfirmRevoke": "Revoke access for \"{name}\"? It loses access immediately.",
|
|
2101
|
+
"agRevoked": "App access revoked",
|
|
2102
|
+
"agRevoke": "Revoke",
|
|
1989
2103
|
"patTitle": "Agent Access Tokens",
|
|
1990
2104
|
"patDesc": "Create a revocable token an agent can use (as a Bearer header) to log in and test your apps. One token can be shared across all your agents.",
|
|
1991
2105
|
"patLabelRequired": "Give the token a name",
|
|
@@ -3561,7 +3675,11 @@
|
|
|
3561
3675
|
"realtimeMaxPeersPerRoom": "Maximum peers per room",
|
|
3562
3676
|
"extensionsEnabled": "Enable V8 isolate extension system?",
|
|
3563
3677
|
"extensionMaxMemoryMb": "Max memory per extension isolate (MB)",
|
|
3564
|
-
"extensionTimeoutMs": "Extension execution timeout (ms)"
|
|
3678
|
+
"extensionTimeoutMs": "Extension execution timeout (ms)",
|
|
3679
|
+
"appOrigin": "Serve user apps from a separate app origin (*.apps.<domain>) to isolate them from your session? Requires DNS + a wildcard TLS cert (see docs/internal/app-origin-deployment.md). Defaults to off.",
|
|
3680
|
+
"appHost": "App origin host (e.g. apps.example.com)",
|
|
3681
|
+
"appHostHint": "Set up DNS (apps.<domain> + wildcard *.apps.<domain>) and a wildcard TLS cert first — see docs/internal/app-origin-deployment.md",
|
|
3682
|
+
"appHostRequired": "App host is required when app origin isolation is enabled"
|
|
3565
3683
|
},
|
|
3566
3684
|
"join": {
|
|
3567
3685
|
"title": "Join AIMEAT Federation",
|
|
@@ -3642,6 +3760,8 @@
|
|
|
3642
3760
|
"displayNamePlaceholder": "Display Name (optional, for new accounts)",
|
|
3643
3761
|
"signInBtn": "Sign In / Register",
|
|
3644
3762
|
"cancelBtn": "Cancel",
|
|
3763
|
+
"orLabel": "OR",
|
|
3764
|
+
"googleSignIn": "Continue with Google",
|
|
3645
3765
|
"working": "Working...",
|
|
3646
3766
|
"errUserShort": "Username must be at least 3 characters",
|
|
3647
3767
|
"errPassShort": "Password must be at least 4 characters",
|
|
@@ -3674,7 +3794,7 @@
|
|
|
3674
3794
|
"sendUsername": "Send My Username",
|
|
3675
3795
|
"usernameSent": "If an account with that email exists, your username was sent.",
|
|
3676
3796
|
"whyTitle": "✨ What do you get?",
|
|
3677
|
-
"whyGhii": "
|
|
3797
|
+
"whyGhii": "Your own digital identity — only you control it",
|
|
3678
3798
|
"whyPrivacy": "Your own private memory space, protected by your password",
|
|
3679
3799
|
"whyControl": "Full control: only you can access your data, no need to share with anyone",
|
|
3680
3800
|
"whyAgents": "Connect AI agents that remember you and work on your behalf",
|
|
@@ -4142,6 +4262,17 @@
|
|
|
4142
4262
|
"portal": "Portal",
|
|
4143
4263
|
"portalDesc": "Manage your node's public portal — the landing page visitors see. Customize the HTML template, set dynamic content via memory keys and KV pairs, preview changes live, and generate an AI-friendly prompt summary of your portal for chat integrations.",
|
|
4144
4264
|
"portalTemplate": "Template Editor",
|
|
4265
|
+
"portalNavTitle": "Header Navigation",
|
|
4266
|
+
"portalNavExplain": "Choose which public links appear in the site header and in what order. Auth-only links (Apps, Profile, Admin) always follow their sign-in/role rules and aren't listed here.",
|
|
4267
|
+
"portalNavLink": "Link",
|
|
4268
|
+
"portalNavVisible": "Visible",
|
|
4269
|
+
"portalNavOrder": "Order",
|
|
4270
|
+
"portalNavShown": "Shown",
|
|
4271
|
+
"portalNavHidden": "Hidden",
|
|
4272
|
+
"portalNavMoveUp": "Move up",
|
|
4273
|
+
"portalNavMoveDown": "Move down",
|
|
4274
|
+
"portalNavSave": "Save Navigation",
|
|
4275
|
+
"portalNavSaved": "Header navigation saved",
|
|
4145
4276
|
"portalPreview": "Portal Preview",
|
|
4146
4277
|
"portalMemoryKeys": "Portal Memory Keys",
|
|
4147
4278
|
"portalKvPairs": "KV Pairs (Environment)",
|
|
@@ -4597,6 +4728,37 @@
|
|
|
4597
4728
|
"fedPeerApproved": "Peering request approved successfully",
|
|
4598
4729
|
"fedPeerRejected": "Peering request rejected",
|
|
4599
4730
|
"fedLivePeersTitle": "Live Peers",
|
|
4731
|
+
"fedTierLabel": "Tier",
|
|
4732
|
+
"fedVersionLabel": "Version",
|
|
4733
|
+
"fedBehind": "behind",
|
|
4734
|
+
"fedBookTitle": "Federation Book",
|
|
4735
|
+
"fedBookDesc": "Directory of the federation: each node's operators, offered resources, version and settings. The primary (genesis) maintains it; other nodes mirror it.",
|
|
4736
|
+
"fedBookRebuild": "Rebuild",
|
|
4737
|
+
"fedBookPull": "Mirror from genesis",
|
|
4738
|
+
"fedBookRebuilt": "Federation book rebuilt",
|
|
4739
|
+
"fedBookPulled": "Federation book mirrored",
|
|
4740
|
+
"fedBookUpToDate": "Already up to date",
|
|
4741
|
+
"fedBookEmpty": "The federation book is empty. The primary node builds it from its peers; mirrors pull it from the genesis.",
|
|
4742
|
+
"fedBookOperators": "Operators",
|
|
4743
|
+
"fedBookResources": "Resources",
|
|
4744
|
+
"fedBookSettings": "Settings",
|
|
4745
|
+
"fedBookOpenJoin": "open join",
|
|
4746
|
+
"fedBookCrossFed": "cross-fed",
|
|
4747
|
+
"fedBookVersion": "Book version",
|
|
4748
|
+
"fedTier_visiting": "Visiting",
|
|
4749
|
+
"fedTier_member": "Member",
|
|
4750
|
+
"fedTier_genesis": "Genesis",
|
|
4751
|
+
"fedAvail_temporary": "Temporary",
|
|
4752
|
+
"fedAvail_permanent": "Permanent",
|
|
4753
|
+
"fedOpenJoinLabel": "Open join",
|
|
4754
|
+
"fedOpenJoinDesc": "Let any node self-join as a low-trust visiting peer (browse + request work) without manual approval. Promote good ones to full members later.",
|
|
4755
|
+
"fedOpenJoinUpdated": "Open-join setting saved",
|
|
4756
|
+
"fedPromote": "Promote",
|
|
4757
|
+
"fedPromoteHint": "Promote this visiting node to a full member (grants provider, relay and replication rights).",
|
|
4758
|
+
"fedPromoteConfirm": "Promote this visiting node to a full member? This vouches for it and grants full federation rights.",
|
|
4759
|
+
"fedPromoteNotEligible": "Not yet eligible",
|
|
4760
|
+
"fedPromoteForceConfirm": "This node does not yet meet the promotion criteria. Promote anyway (your vouch)?",
|
|
4761
|
+
"fedPromoted": "Peer promoted to member",
|
|
4600
4762
|
"fedLivePeersExplain": "Currently registered peers and their real-time health status. The heartbeat monitor pings each peer every 5 minutes.",
|
|
4601
4763
|
"fedLivePeersHelpTitle": "Understanding peer statuses",
|
|
4602
4764
|
"fedLivePeersHelpDetail": "Active: Peer is healthy and responding to heartbeats. Approved: Peer has been approved but not yet activated (needs activation). Degraded: Peer has failed 3+ consecutive heartbeats but is still reachable. Offline: Peer has failed 10+ consecutive heartbeats. Depeering: Peer is in the grace period before removal (default 72h) — in-flight work can still complete.",
|
|
@@ -5406,7 +5568,7 @@
|
|
|
5406
5568
|
"loggedIn": "logged in",
|
|
5407
5569
|
"logoutBtn": "Logout",
|
|
5408
5570
|
"whyTitle": "✨ What do you get?",
|
|
5409
|
-
"whyGhii": "
|
|
5571
|
+
"whyGhii": "Your own digital identity — only you control it",
|
|
5410
5572
|
"whyPrivacy": "Your own private memory space, protected by your password",
|
|
5411
5573
|
"whyControl": "Full control: only you can access your data, no need to share with anyone",
|
|
5412
5574
|
"whyAgents": "Connect AI agents that remember you and work on your behalf",
|
|
@@ -6970,6 +7132,16 @@
|
|
|
6970
7132
|
"heroSub2": "A real app, built and run by AI on AIMEAT — look before you sign up.",
|
|
6971
7133
|
"heroTryFree": "Try it free →",
|
|
6972
7134
|
"heroGetOwn": "Get your own →",
|
|
7135
|
+
"buildHeroKicker": "A safe place to build with AI.",
|
|
7136
|
+
"buildHeroTitle": "Build a real app with your AI in minutes, and it’s yours.",
|
|
7137
|
+
"buildHeroSub": "Copy one prompt into Claude, ChatGPT or any AI. It builds you a working app on AIMEAT, published live and yours to keep. Then let your agents run it for you, the way AIMEAT Sanomat writes itself every evening.",
|
|
7138
|
+
"buildHeroCopy": "Copy the build prompt →",
|
|
7139
|
+
"buildHeroCopied": "Copied ✓ — paste into your AI",
|
|
7140
|
+
"wallTitle": "Built by people with their AI. Yours goes here too.",
|
|
7141
|
+
"wallEmpty": "Be the first — copy the prompt above, build something, and it lands here.",
|
|
7142
|
+
"wallAnon": "someone",
|
|
7143
|
+
"wallSearch": "Search apps…",
|
|
7144
|
+
"wallNoMatch": "No apps match your search.",
|
|
6973
7145
|
"agentBuildTitle": "Build an agent in 10 minutes — copy this prompt",
|
|
6974
7146
|
"agentBuildSub": "Paste into Claude, ChatGPT or any AI. It builds a local AI agent — running on your own machine, no API keys — connected to your node, and shows you how to share it. For coders and tinkerers; beginners can use the desktop app instead."
|
|
6975
7147
|
},
|