aimeat 1.40.1 → 2.1.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 +24 -15
- package/dist/.env.example +528 -495
- package/dist/locales/en.json +349 -298
- package/dist/locales/fi.json +349 -298
- package/dist/public/components/ContactPicker.js +145 -0
- package/dist/public/components/EmptyState.js +22 -7
- package/dist/public/components/LinkPreview.js +101 -0
- package/dist/public/components/NotificationBell.js +110 -8
- package/dist/public/cortex-bundled/aimeat-dag.js +553 -0
- package/dist/public/cortex-bundled/aimeat-dag.yaml +77 -0
- package/dist/public/cortex-bundled/aimeat-flow.js +225 -0
- package/dist/public/cortex-bundled/aimeat-flow.yaml +101 -0
- package/dist/public/cortex-bundled/aimeat-ui-motion.js +323 -0
- package/dist/public/cortex-bundled/aimeat-ui-motion.yaml +86 -0
- package/dist/public/css/components/contact-picker.css +26 -0
- package/dist/public/css/theme.css +109 -9
- package/dist/public/css/views/admin.css +59 -2
- package/dist/public/css/views/agents-detail.css +78 -14
- package/dist/public/css/views/app-grant.css +18 -0
- package/dist/public/css/views/capabilities.css +2 -0
- package/dist/public/css/views/companies.css +0 -1
- package/dist/public/css/views/inbox.css +188 -7
- package/dist/public/css/views/landing.css +2 -0
- package/dist/public/css/views/members.css +0 -1
- package/dist/public/css/views/my-company.css +5 -5
- package/dist/public/css/views/offers.css +0 -3
- package/dist/public/css/views/portal-dev.css +49 -0
- package/dist/public/css/views/portfolio.css +46 -0
- package/dist/public/css/views/profile.css +200 -17
- package/dist/public/css/views/public-knowledge-viewer.css +0 -17
- package/dist/public/css/views/scheduler.css +37 -1
- package/dist/public/css/views/workflows.css +1 -1
- package/dist/public/js/services/admin.js +10 -0
- package/dist/public/js/services/agent-activity.js +15 -0
- package/dist/public/js/services/agent-directives.js +14 -0
- package/dist/public/js/services/agent-integration.js +15 -0
- package/dist/public/js/services/agent-messages.js +14 -0
- package/dist/public/js/services/agent-tasks.js +14 -0
- package/dist/public/js/services/appdev.js +67 -0
- package/dist/public/js/services/apps.js +47 -3
- package/dist/public/js/services/calibrator.js +14 -1
- package/dist/public/js/services/consent.js +17 -0
- package/dist/public/js/services/contacts.js +47 -0
- package/dist/public/js/services/ecosystem.js +14 -0
- package/dist/public/js/services/generator.js +71 -35
- package/dist/public/js/services/knowledge.js +14 -0
- package/dist/public/js/services/ledger.js +18 -0
- package/dist/public/js/services/living.js +14 -0
- package/dist/public/js/services/messages-ai-prompts.js +38 -0
- package/dist/public/js/services/messages.js +33 -5
- package/dist/public/js/services/notebook.js +76 -0
- package/dist/public/js/services/organisms.js +48 -4
- package/dist/public/js/services/schedules.js +19 -2
- package/dist/public/js/services/security.js +14 -0
- package/dist/public/js/services/unfurl.js +43 -0
- package/dist/public/js/services/work.js +14 -0
- package/dist/public/lib/VENDORED.md +77 -0
- package/dist/public/lib/drawflow@0.min.css +1 -0
- package/dist/public/lib/drawflow@0.min.js +1 -0
- package/dist/public/lib/fonts/LICENSE.md +13 -0
- package/dist/public/lib/fonts/baloo2-latin-ext.woff2 +0 -0
- package/dist/public/lib/fonts/baloo2-latin.woff2 +0 -0
- package/dist/public/lib/fonts/bangers-latin-ext.woff2 +0 -0
- package/dist/public/lib/fonts/bangers-latin.woff2 +0 -0
- package/dist/public/lib/fonts.css +51 -0
- package/dist/public/lib/p5@1.min.js +2 -0
- package/dist/public/lib/phaser@3.min.js +1 -0
- package/dist/public/lib/pixi-unsafe-eval@8.min.js +22 -0
- package/dist/public/lib/pixi@8.min.js +2329 -0
- package/dist/public/lib/realtime.js +120 -3
- package/dist/public/lib/samples/LICENSE.md +31 -8
- package/dist/public/lib/samples/bass/A1.mp3 +0 -0
- package/dist/public/lib/samples/bass/B2.mp3 +0 -0
- package/dist/public/lib/samples/bass/D2.mp3 +0 -0
- package/dist/public/lib/samples/bass/E1.mp3 +0 -0
- package/dist/public/lib/samples/bass/E3.mp3 +0 -0
- package/dist/public/lib/samples/bass/G2.mp3 +0 -0
- package/dist/public/lib/samples/drums/clap.mp3 +0 -0
- package/dist/public/lib/samples/drums/cowbell.mp3 +0 -0
- package/dist/public/lib/samples/drums/crash.mp3 +0 -0
- package/dist/public/lib/samples/drums/hihat-open.mp3 +0 -0
- package/dist/public/lib/samples/drums/hihat.mp3 +0 -0
- package/dist/public/lib/samples/drums/kick.mp3 +0 -0
- package/dist/public/lib/samples/drums/ride.mp3 +0 -0
- package/dist/public/lib/samples/drums/snare.mp3 +0 -0
- package/dist/public/lib/samples/drums/tom-high.mp3 +0 -0
- package/dist/public/lib/samples/drums/tom-low.mp3 +0 -0
- package/dist/public/lib/samples/drums/tom-mid.mp3 +0 -0
- package/dist/public/lib/samples/epiano/C2.mp3 +0 -0
- package/dist/public/lib/samples/epiano/C3.mp3 +0 -0
- package/dist/public/lib/samples/epiano/C4.mp3 +0 -0
- package/dist/public/lib/samples/epiano/C5.mp3 +0 -0
- package/dist/public/lib/samples/epiano/C6.mp3 +0 -0
- package/dist/public/lib/samples/epiano/G2.mp3 +0 -0
- package/dist/public/lib/samples/epiano/G3.mp3 +0 -0
- package/dist/public/lib/samples/epiano/G4.mp3 +0 -0
- package/dist/public/lib/samples/epiano/G5.mp3 +0 -0
- package/dist/public/lib/samples/flute/A4.mp3 +0 -0
- package/dist/public/lib/samples/flute/A5.mp3 +0 -0
- package/dist/public/lib/samples/flute/C4.mp3 +0 -0
- package/dist/public/lib/samples/flute/C5.mp3 +0 -0
- package/dist/public/lib/samples/flute/C6.mp3 +0 -0
- package/dist/public/lib/samples/flute/E4.mp3 +0 -0
- package/dist/public/lib/samples/flute/E5.mp3 +0 -0
- package/dist/public/lib/samples/guitar/A2.mp3 +0 -0
- package/dist/public/lib/samples/guitar/A4.mp3 +0 -0
- package/dist/public/lib/samples/guitar/B3.mp3 +0 -0
- package/dist/public/lib/samples/guitar/D3.mp3 +0 -0
- package/dist/public/lib/samples/guitar/E2.mp3 +0 -0
- package/dist/public/lib/samples/guitar/E4.mp3 +0 -0
- package/dist/public/lib/samples/guitar/E5.mp3 +0 -0
- package/dist/public/lib/samples/guitar/G3.mp3 +0 -0
- package/dist/public/lib/samples/guitar-el/A2.mp3 +0 -0
- package/dist/public/lib/samples/guitar-el/A4.mp3 +0 -0
- package/dist/public/lib/samples/guitar-el/B3.mp3 +0 -0
- package/dist/public/lib/samples/guitar-el/D3.mp3 +0 -0
- package/dist/public/lib/samples/guitar-el/E2.mp3 +0 -0
- package/dist/public/lib/samples/guitar-el/E4.mp3 +0 -0
- package/dist/public/lib/samples/guitar-el/E5.mp3 +0 -0
- package/dist/public/lib/samples/guitar-el/G3.mp3 +0 -0
- package/dist/public/lib/samples/guitar-steel/A2.mp3 +0 -0
- package/dist/public/lib/samples/guitar-steel/A4.mp3 +0 -0
- package/dist/public/lib/samples/guitar-steel/B3.mp3 +0 -0
- package/dist/public/lib/samples/guitar-steel/D3.mp3 +0 -0
- package/dist/public/lib/samples/guitar-steel/E2.mp3 +0 -0
- package/dist/public/lib/samples/guitar-steel/E4.mp3 +0 -0
- package/dist/public/lib/samples/guitar-steel/E5.mp3 +0 -0
- package/dist/public/lib/samples/guitar-steel/G3.mp3 +0 -0
- package/dist/public/lib/samples/organ/C2.mp3 +0 -0
- package/dist/public/lib/samples/organ/C3.mp3 +0 -0
- package/dist/public/lib/samples/organ/C4.mp3 +0 -0
- package/dist/public/lib/samples/organ/C5.mp3 +0 -0
- package/dist/public/lib/samples/organ/C6.mp3 +0 -0
- package/dist/public/lib/samples/organ/G2.mp3 +0 -0
- package/dist/public/lib/samples/organ/G3.mp3 +0 -0
- package/dist/public/lib/samples/organ/G4.mp3 +0 -0
- package/dist/public/lib/samples/organ/G5.mp3 +0 -0
- package/dist/public/lib/samples/strings/C2.mp3 +0 -0
- package/dist/public/lib/samples/strings/C3.mp3 +0 -0
- package/dist/public/lib/samples/strings/C4.mp3 +0 -0
- package/dist/public/lib/samples/strings/C5.mp3 +0 -0
- package/dist/public/lib/samples/strings/C6.mp3 +0 -0
- package/dist/public/lib/samples/strings/G2.mp3 +0 -0
- package/dist/public/lib/samples/strings/G3.mp3 +0 -0
- package/dist/public/lib/samples/strings/G4.mp3 +0 -0
- package/dist/public/lib/samples/strings/G5.mp3 +0 -0
- package/dist/public/lib/samples/trumpet/A3.mp3 +0 -0
- package/dist/public/lib/samples/trumpet/A4.mp3 +0 -0
- package/dist/public/lib/samples/trumpet/A5.mp3 +0 -0
- package/dist/public/lib/samples/trumpet/C4.mp3 +0 -0
- package/dist/public/lib/samples/trumpet/C5.mp3 +0 -0
- package/dist/public/lib/samples/trumpet/E3.mp3 +0 -0
- package/dist/public/lib/samples/trumpet/E4.mp3 +0 -0
- package/dist/public/lib/samples/trumpet/E5.mp3 +0 -0
- package/dist/public/llms-template.txt +42 -21
- package/dist/public/spa.html +42 -34
- package/dist/public/style-testbed.html +0 -2
- package/dist/public/sw.js +23 -4
- package/dist/public/views/_template.js +21 -8
- package/dist/public/views/admin/cortex-tab.js +2 -2
- package/dist/public/views/admin/database-tab.js +140 -0
- package/dist/public/views/admin/feedback-tab.js +162 -0
- package/dist/public/views/admin/owners-tab.js +19 -29
- package/dist/public/views/admin/push-tab.js +2 -2
- package/dist/public/views/admin/services-tab.js +4 -4
- package/dist/public/views/admin/shared.js +9 -3
- package/dist/public/views/admin/sharing-groups-tab.js +13 -25
- package/dist/public/views/admin/stats-tab.js +33 -33
- package/dist/public/views/admin.js +52 -49
- package/dist/public/views/app-grant.js +24 -4
- package/dist/public/views/companies.js +9 -7
- package/dist/public/views/help.js +2 -1
- package/dist/public/views/invite-accept.js +64 -19
- package/dist/public/views/landing.js +41 -8
- package/dist/public/views/members.js +4 -2
- package/dist/public/views/my-company.js +27 -77
- package/dist/public/views/my-company.payments.js +177 -0
- package/dist/public/views/portal-classic.js +0 -4
- package/dist/public/views/portal-dev.js +11 -0
- package/dist/public/views/portal-dev.panels.js +52 -58
- package/dist/public/views/portal.components.js +18 -36
- package/dist/public/views/portal.prompts.js +9 -10
- package/dist/public/views/portfolio.js +61 -6
- package/dist/public/views/profile/access-tab/access-tokens.js +3 -3
- package/dist/public/views/profile/access-tab/agent-defaults.js +3 -3
- package/dist/public/views/profile/access-tab/connected-apps.js +5 -3
- package/dist/public/views/profile/access-tab/sharing-groups.js +8 -7
- package/dist/public/views/profile/access-tab.js +26 -10
- package/dist/public/views/profile/agents/agent-card.js +16 -5
- package/dist/public/views/profile/agents/tab-activity.js +27 -9
- package/dist/public/views/profile/agents/tab-agent-config.js +4 -1
- package/dist/public/views/profile/agents/tab-contracts.js +11 -3
- package/dist/public/views/profile/agents/tab-data-access.js +36 -20
- package/dist/public/views/profile/agents/tab-directives.js +2 -1
- package/dist/public/views/profile/agents/tab-integration.js +46 -23
- package/dist/public/views/profile/agents/tab-messages.js +37 -6
- package/dist/public/views/profile/agents/tab-quality.js +32 -8
- package/dist/public/views/profile/agents/tab-schedules.js +15 -10
- package/dist/public/views/profile/agents/tab-usage.js +19 -8
- package/dist/public/views/profile/agents-capabilities-subtab.js +3 -3
- package/dist/public/views/profile/agents-tab.js +11 -1
- package/dist/public/views/profile/appdev-tab.js +275 -0
- package/dist/public/views/profile/apps-tab.js +248 -2
- package/dist/public/views/profile/calibrator-batch.js +2 -2
- package/dist/public/views/profile/calibrator-tab.js +69 -37
- package/dist/public/views/profile/capabilities-tab.js +24 -13
- package/dist/public/views/profile/contacts-tab.js +139 -0
- package/dist/public/views/profile/data-wallet-tab.js +37 -18
- package/dist/public/views/profile/discover-tab.js +2 -1
- package/dist/public/views/profile/ecosystem-tab.automation.js +21 -7
- package/dist/public/views/profile/extensions-tab.js +4 -2
- package/dist/public/views/profile/extensions-tab.maturity.js +40 -0
- package/dist/public/views/profile/generator-dashboard/DebugPanel.js +16 -9
- package/dist/public/views/profile/generator-dashboard/use-dashboard-core.js +46 -26
- package/dist/public/views/profile/generator-dashboard/use-edit-mode.js +29 -25
- package/dist/public/views/profile/generator-dashboard/use-test-execution.js +14 -14
- package/dist/public/views/profile/generator-detail.ai.js +21 -0
- package/dist/public/views/profile/generator-detail.js +59 -26
- package/dist/public/views/profile/generator-detail.results.js +1 -1
- package/dist/public/views/profile/generator-settings.js +51 -47
- package/dist/public/views/profile/generator-tab.js +28 -7
- package/dist/public/views/profile/inbox-tab/ai-actions.js +86 -0
- package/dist/public/views/profile/inbox-tab/components.js +229 -14
- package/dist/public/views/profile/inbox-tab/helpers.js +38 -0
- package/dist/public/views/profile/inbox-tab/panels.js +51 -6
- package/dist/public/views/profile/inbox-tab/use-thread-ux.js +121 -0
- package/dist/public/views/profile/inbox-tab.js +134 -90
- package/dist/public/views/profile/knowledge-tab.helpers.js +20 -0
- package/dist/public/views/profile/knowledge-tab.js +31 -28
- package/dist/public/views/profile/landing-page.cards.js +66 -46
- package/dist/public/views/profile/landing-page.js +18 -6
- package/dist/public/views/profile/landing-page.modals.js +5 -2
- package/dist/public/views/profile/libraries-tab.js +196 -0
- package/dist/public/views/profile/living-tab.js +11 -0
- package/dist/public/views/profile/memory-tab.js +45 -4
- package/dist/public/views/profile/node-stats-tab.js +29 -24
- package/dist/public/views/profile/notebook-card.js +1 -1
- package/dist/public/views/profile/notebook-tab.js +20 -1
- package/dist/public/views/profile/offers-tab.js +2 -1
- package/dist/public/views/profile/openrouter-settings.js +613 -0
- package/dist/public/views/profile/organisms/invite-panel.js +254 -0
- package/dist/public/views/profile/organisms/members.js +110 -177
- package/dist/public/views/profile/organisms/participants-panel.js +6 -2
- package/dist/public/views/profile/organisms/skills-panel.js +2 -1
- package/dist/public/views/profile/organisms/workspace/generator.js +1 -1
- package/dist/public/views/profile/organisms-tab.js +24 -16
- package/dist/public/views/profile/packages-tab.js +28 -38
- package/dist/public/views/profile/scheduler-calendar.js +72 -4
- package/dist/public/views/profile/scheduler-tab.js +16 -5
- package/dist/public/views/profile/security-tab.js +44 -44
- package/dist/public/views/profile/skills-tab.js +4 -3
- package/dist/public/views/profile/wallet-tab.js +34 -7
- package/dist/public/views/profile/work-tab.js +10 -1
- package/dist/public/views/profile/workflows-tab.js +3 -2
- package/dist/public/views/profile.js +38 -44
- package/dist/public/views/public-knowledge-viewer.js +6 -7
- package/dist/public/views/public-workspace-viewer.js +1 -1
- package/dist/public/views/start-flows.js +16 -0
- package/dist/public/views/start.js +2 -1
- package/dist/scripts/aeb-ledger.d.ts +2 -0
- package/dist/scripts/aeb-ledger.d.ts.map +1 -0
- package/dist/scripts/aeb-ledger.js +28 -0
- package/dist/scripts/aeb-ledger.js.map +1 -0
- package/dist/scripts/aeb-prove.d.ts +2 -0
- package/dist/scripts/aeb-prove.d.ts.map +1 -0
- package/dist/scripts/aeb-prove.js +124 -0
- package/dist/scripts/aeb-prove.js.map +1 -0
- package/dist/scripts/archive-stale-versions.js +1 -59
- package/dist/scripts/archive-stale-versions.js.map +1 -1
- package/dist/scripts/audit-mcp-tools.d.ts +1 -0
- package/dist/scripts/audit-mcp-tools.d.ts.map +1 -1
- package/dist/scripts/audit-mcp-tools.js +25 -0
- package/dist/scripts/audit-mcp-tools.js.map +1 -1
- package/dist/scripts/build-sdk-libs.d.ts +16 -0
- package/dist/scripts/build-sdk-libs.d.ts.map +1 -0
- package/dist/scripts/build-sdk-libs.js +112 -0
- package/dist/scripts/build-sdk-libs.js.map +1 -0
- package/dist/scripts/consent-audit-prune.js +5 -58
- package/dist/scripts/consent-audit-prune.js.map +1 -1
- package/dist/scripts/db-reset.d.ts +3 -3
- package/dist/scripts/db-reset.js +21 -62
- package/dist/scripts/db-reset.js.map +1 -1
- package/dist/scripts/kill-port.js +25 -5
- package/dist/scripts/kill-port.js.map +1 -1
- package/dist/scripts/kill-test-servers.d.ts +3 -0
- package/dist/scripts/kill-test-servers.d.ts.map +1 -0
- package/dist/scripts/kill-test-servers.js +84 -0
- package/dist/scripts/kill-test-servers.js.map +1 -0
- package/dist/scripts/migrate-to-postgres-kysely.d.ts +2 -0
- package/dist/scripts/migrate-to-postgres-kysely.d.ts.map +1 -0
- package/dist/scripts/migrate-to-postgres-kysely.js +194 -0
- package/dist/scripts/migrate-to-postgres-kysely.js.map +1 -0
- package/dist/scripts/reassign-apps.js +1 -1
- package/dist/scripts/telemetry-prune.d.ts +2 -1
- package/dist/scripts/telemetry-prune.d.ts.map +1 -1
- package/dist/scripts/telemetry-prune.js +7 -58
- package/dist/scripts/telemetry-prune.js.map +1 -1
- package/dist/src/auth/middleware.d.ts +9 -0
- package/dist/src/auth/middleware.d.ts.map +1 -1
- package/dist/src/auth/middleware.js +31 -0
- package/dist/src/auth/middleware.js.map +1 -1
- package/dist/src/cli/config-import.js +2 -2
- package/dist/src/cli/config-import.js.map +1 -1
- package/dist/src/cli/connect/auth.d.ts +15 -0
- package/dist/src/cli/connect/auth.d.ts.map +1 -1
- package/dist/src/cli/connect/auth.js +25 -6
- package/dist/src/cli/connect/auth.js.map +1 -1
- package/dist/src/cli/connect/keychain.d.ts +9 -0
- package/dist/src/cli/connect/keychain.d.ts.map +1 -1
- package/dist/src/cli/connect/keychain.js +21 -8
- package/dist/src/cli/connect/keychain.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-management.d.ts +2 -0
- package/dist/src/cli/connect/mcp/tools/agent-management.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-management.js +8 -0
- package/dist/src/cli/connect/mcp/tools/agent-management.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/appdev.d.ts +17 -0
- package/dist/src/cli/connect/mcp/tools/appdev.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/appdev.js +123 -0
- package/dist/src/cli/connect/mcp/tools/appdev.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/apps.d.ts +3 -1
- package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.js +49 -1
- package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/commerce.d.ts +16 -0
- package/dist/src/cli/connect/mcp/tools/commerce.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/commerce.js +102 -0
- package/dist/src/cli/connect/mcp/tools/commerce.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/contacts.d.ts +13 -0
- package/dist/src/cli/connect/mcp/tools/contacts.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/contacts.js +35 -0
- package/dist/src/cli/connect/mcp/tools/contacts.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts +3 -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 +24 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/exchange.d.ts +18 -0
- package/dist/src/cli/connect/mcp/tools/exchange.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/exchange.js +170 -0
- package/dist/src/cli/connect/mcp/tools/exchange.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/feedback.d.ts +14 -0
- package/dist/src/cli/connect/mcp/tools/feedback.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/feedback.js +29 -0
- package/dist/src/cli/connect/mcp/tools/feedback.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/index.js +12 -0
- package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/onboarding.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/onboarding.js +4 -1
- package/dist/src/cli/connect/mcp/tools/onboarding.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/operator.d.ts +18 -0
- package/dist/src/cli/connect/mcp/tools/operator.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/operator.js +65 -0
- package/dist/src/cli/connect/mcp/tools/operator.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts +2 -0
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.js +101 -2
- package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/workflows.d.ts +1 -0
- package/dist/src/cli/connect/mcp/tools/workflows.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/workflows.js +13 -0
- package/dist/src/cli/connect/mcp/tools/workflows.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.d.ts +6 -0
- package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.js +126 -0
- package/dist/src/cli/connect/tool-call-defs-agent.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-apps.d.ts +4 -0
- package/dist/src/cli/connect/tool-call-defs-apps.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-apps.js +379 -1
- package/dist/src/cli/connect/tool-call-defs-apps.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-exchange.d.ts +3 -0
- package/dist/src/cli/connect/tool-call-defs-exchange.d.ts.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-exchange.js +146 -0
- package/dist/src/cli/connect/tool-call-defs-exchange.js.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-organism.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-organism.js +46 -1
- package/dist/src/cli/connect/tool-call-defs-organism.js.map +1 -1
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +2 -0
- package/dist/src/cli/connect/tool-call.js.map +1 -1
- package/dist/src/cli/init-wizard/generate.js +2 -2
- package/dist/src/cli/init-wizard/generate.js.map +1 -1
- package/dist/src/cli/init-wizard/helpers.d.ts +1 -1
- package/dist/src/cli/init-wizard/helpers.d.ts.map +1 -1
- package/dist/src/cli/init-wizard/helpers.js +2 -5
- package/dist/src/cli/init-wizard/helpers.js.map +1 -1
- package/dist/src/cli/init-wizard/presets.d.ts.map +1 -1
- package/dist/src/cli/init-wizard/presets.js +0 -1
- package/dist/src/cli/init-wizard/presets.js.map +1 -1
- package/dist/src/cli/init-wizard/steps-core.d.ts.map +1 -1
- package/dist/src/cli/init-wizard/steps-core.js +7 -11
- package/dist/src/cli/init-wizard/steps-core.js.map +1 -1
- package/dist/src/commerce/sellable-resolvers.d.ts +11 -1
- package/dist/src/commerce/sellable-resolvers.d.ts.map +1 -1
- package/dist/src/commerce/sellable-resolvers.js +55 -0
- package/dist/src/commerce/sellable-resolvers.js.map +1 -1
- package/dist/src/commerce/session-service.d.ts +14 -0
- package/dist/src/commerce/session-service.d.ts.map +1 -1
- package/dist/src/commerce/session-service.js +1 -1
- package/dist/src/commerce/session-service.js.map +1 -1
- package/dist/src/commerce/test-money-handler.d.ts +5 -0
- package/dist/src/commerce/test-money-handler.d.ts.map +1 -0
- package/dist/src/commerce/test-money-handler.js +27 -0
- package/dist/src/commerce/test-money-handler.js.map +1 -0
- package/dist/src/commerce/x402-facilitator.d.ts +113 -0
- package/dist/src/commerce/x402-facilitator.d.ts.map +1 -0
- package/dist/src/commerce/x402-facilitator.js +143 -0
- package/dist/src/commerce/x402-facilitator.js.map +1 -0
- package/dist/src/commerce/x402-handler.d.ts +35 -0
- package/dist/src/commerce/x402-handler.d.ts.map +1 -0
- package/dist/src/commerce/x402-handler.js +54 -0
- package/dist/src/commerce/x402-handler.js.map +1 -0
- package/dist/src/commerce/x402.d.ts +32 -8
- package/dist/src/commerce/x402.d.ts.map +1 -1
- package/dist/src/commerce/x402.js +41 -9
- package/dist/src/commerce/x402.js.map +1 -1
- package/dist/src/config-types.d.ts +21 -2
- package/dist/src/config-types.d.ts.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +27 -5
- package/dist/src/config.js.map +1 -1
- package/dist/src/data/app-templates/components.d.ts +13 -1
- package/dist/src/data/app-templates/components.d.ts.map +1 -1
- package/dist/src/data/app-templates/components.js +149 -1
- package/dist/src/data/app-templates/components.js.map +1 -1
- package/dist/src/data/app-templates/shells.d.ts +7 -3
- package/dist/src/data/app-templates/shells.d.ts.map +1 -1
- package/dist/src/data/app-templates/shells.js +10 -6
- package/dist/src/data/app-templates/shells.js.map +1 -1
- package/dist/src/data/app-templates.d.ts +13 -0
- package/dist/src/data/app-templates.d.ts.map +1 -1
- package/dist/src/data/app-templates.js +39 -1
- package/dist/src/data/app-templates.js.map +1 -1
- package/dist/src/data/appdev-pitfalls.d.ts +58 -0
- package/dist/src/data/appdev-pitfalls.d.ts.map +1 -0
- package/dist/src/data/appdev-pitfalls.js +365 -0
- package/dist/src/data/appdev-pitfalls.js.map +1 -0
- package/dist/src/data/builtin-skills.d.ts +6 -0
- package/dist/src/data/builtin-skills.d.ts.map +1 -1
- package/dist/src/data/builtin-skills.js +151 -0
- package/dist/src/data/builtin-skills.js.map +1 -1
- package/dist/src/data/library-packs/cortex.d.ts +18 -0
- package/dist/src/data/library-packs/cortex.d.ts.map +1 -0
- package/dist/src/data/library-packs/cortex.js +339 -0
- package/dist/src/data/library-packs/cortex.js.map +1 -0
- package/dist/src/data/library-packs/sdk.d.ts +16 -0
- package/dist/src/data/library-packs/sdk.d.ts.map +1 -0
- package/dist/src/data/library-packs/sdk.js +439 -0
- package/dist/src/data/library-packs/sdk.js.map +1 -0
- package/dist/src/data/library-packs/vendored.d.ts +21 -0
- package/dist/src/data/library-packs/vendored.d.ts.map +1 -0
- package/dist/src/data/library-packs/vendored.js +381 -0
- package/dist/src/data/library-packs/vendored.js.map +1 -0
- package/dist/src/data/library-packs.d.ts +151 -0
- package/dist/src/data/library-packs.d.ts.map +1 -0
- package/dist/src/data/library-packs.js +169 -0
- package/dist/src/data/library-packs.js.map +1 -0
- package/dist/src/generated/api-types.d.ts +30401 -17751
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/index-help.d.ts +1 -1
- package/dist/src/index-help.d.ts.map +1 -1
- package/dist/src/index-help.js +3 -3
- package/dist/src/mcp/agent-onboarding.d.ts.map +1 -1
- package/dist/src/mcp/agent-onboarding.js +8 -2
- package/dist/src/mcp/agent-onboarding.js.map +1 -1
- package/dist/src/mcp/annotations.d.ts +1 -0
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +44 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/app-template-proposals.d.ts +17 -0
- package/dist/src/mcp/app-template-proposals.d.ts.map +1 -0
- package/dist/src/mcp/app-template-proposals.js +94 -0
- package/dist/src/mcp/app-template-proposals.js.map +1 -0
- package/dist/src/mcp/appdev-pitfalls.d.ts +22 -0
- package/dist/src/mcp/appdev-pitfalls.d.ts.map +1 -0
- package/dist/src/mcp/appdev-pitfalls.js +208 -0
- package/dist/src/mcp/appdev-pitfalls.js.map +1 -0
- package/dist/src/mcp/appdev-proofs.d.ts +21 -0
- package/dist/src/mcp/appdev-proofs.d.ts.map +1 -0
- package/dist/src/mcp/appdev-proofs.js +103 -0
- package/dist/src/mcp/appdev-proofs.js.map +1 -0
- package/dist/src/mcp/appdev-research.d.ts +17 -0
- package/dist/src/mcp/appdev-research.d.ts.map +1 -0
- package/dist/src/mcp/appdev-research.js +27 -0
- package/dist/src/mcp/appdev-research.js.map +1 -0
- package/dist/src/mcp/apps.d.ts +6 -0
- package/dist/src/mcp/apps.d.ts.map +1 -1
- package/dist/src/mcp/apps.js +64 -5
- package/dist/src/mcp/apps.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/agent-messaging.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/agent-messaging.js +38 -0
- package/dist/src/mcp/catalog/definitions/agent-messaging.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/capabilities-groups-skills.d.ts +2 -0
- package/dist/src/mcp/catalog/definitions/capabilities-groups-skills.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/capabilities-groups-skills.js +139 -5
- package/dist/src/mcp/catalog/definitions/capabilities-groups-skills.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/exchange.d.ts +18 -0
- package/dist/src/mcp/catalog/definitions/exchange.d.ts.map +1 -0
- package/dist/src/mcp/catalog/definitions/exchange.js +182 -0
- package/dist/src/mcp/catalog/definitions/exchange.js.map +1 -0
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +41 -3
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +20 -0
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
- package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions.js +2 -0
- package/dist/src/mcp/catalog/definitions.js.map +1 -1
- package/dist/src/mcp/catalog/scopes.d.ts +1 -0
- package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
- package/dist/src/mcp/catalog/scopes.js +40 -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 +31 -4
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/catalogue.d.ts +1 -0
- package/dist/src/mcp/catalogue.d.ts.map +1 -1
- package/dist/src/mcp/catalogue.js +10 -2
- package/dist/src/mcp/catalogue.js.map +1 -1
- package/dist/src/mcp/commerce.js +1 -1
- package/dist/src/mcp/commerce.js.map +1 -1
- package/dist/src/mcp/contacts.d.ts +19 -0
- package/dist/src/mcp/contacts.d.ts.map +1 -0
- package/dist/src/mcp/contacts.js +58 -0
- package/dist/src/mcp/contacts.js.map +1 -0
- package/dist/src/mcp/core-admin.js +1 -1
- package/dist/src/mcp/core-admin.js.map +1 -1
- package/dist/src/mcp/exchange-run.d.ts +5 -0
- package/dist/src/mcp/exchange-run.d.ts.map +1 -0
- package/dist/src/mcp/exchange-run.js +226 -0
- package/dist/src/mcp/exchange-run.js.map +1 -0
- package/dist/src/mcp/exchange.d.ts +5 -0
- package/dist/src/mcp/exchange.d.ts.map +1 -0
- package/dist/src/mcp/exchange.js +351 -0
- package/dist/src/mcp/exchange.js.map +1 -0
- package/dist/src/mcp/extensions.d.ts +4 -0
- package/dist/src/mcp/extensions.d.ts.map +1 -1
- package/dist/src/mcp/extensions.js +85 -12
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/mcp/feedback.d.ts +20 -0
- package/dist/src/mcp/feedback.d.ts.map +1 -0
- package/dist/src/mcp/feedback.js +61 -0
- package/dist/src/mcp/feedback.js.map +1 -0
- package/dist/src/mcp/index.d.ts +1 -0
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +19 -2
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/knowledge.d.ts +4 -0
- package/dist/src/mcp/knowledge.d.ts.map +1 -1
- package/dist/src/mcp/knowledge.js +39 -22
- package/dist/src/mcp/knowledge.js.map +1 -1
- package/dist/src/mcp/organisms-name-invites.d.ts +18 -0
- package/dist/src/mcp/organisms-name-invites.d.ts.map +1 -0
- package/dist/src/mcp/organisms-name-invites.js +143 -0
- package/dist/src/mcp/organisms-name-invites.js.map +1 -0
- package/dist/src/mcp/organisms.d.ts +3 -0
- package/dist/src/mcp/organisms.d.ts.map +1 -1
- package/dist/src/mcp/organisms.js +12 -86
- package/dist/src/mcp/organisms.js.map +1 -1
- package/dist/src/mcp/workflows.d.ts +2 -0
- package/dist/src/mcp/workflows.d.ts.map +1 -1
- package/dist/src/mcp/workflows.js +43 -3
- package/dist/src/mcp/workflows.js.map +1 -1
- package/dist/src/mcp/workspaces.d.ts +4 -0
- package/dist/src/mcp/workspaces.d.ts.map +1 -1
- package/dist/src/mcp/workspaces.js +15 -12
- package/dist/src/mcp/workspaces.js.map +1 -1
- package/dist/src/middleware/workspace-access.d.ts +3 -0
- package/dist/src/middleware/workspace-access.d.ts.map +1 -1
- package/dist/src/middleware/workspace-access.js +7 -3
- package/dist/src/middleware/workspace-access.js.map +1 -1
- package/dist/src/models/agent-onboarding-schemas.d.ts +2 -0
- package/dist/src/models/agent-onboarding-schemas.d.ts.map +1 -1
- package/dist/src/models/agent-onboarding-schemas.js +5 -0
- package/dist/src/models/agent-onboarding-schemas.js.map +1 -1
- package/dist/src/models/app-tool-schemas.d.ts +55 -1
- package/dist/src/models/app-tool-schemas.d.ts.map +1 -1
- package/dist/src/models/app-tool-schemas.js +20 -1
- package/dist/src/models/app-tool-schemas.js.map +1 -1
- package/dist/src/models/contribution-proof.d.ts +29 -0
- package/dist/src/models/contribution-proof.d.ts.map +1 -0
- package/dist/src/models/contribution-proof.js +23 -0
- package/dist/src/models/contribution-proof.js.map +1 -0
- package/dist/src/models/crew-def-schemas.d.ts +114 -0
- package/dist/src/models/crew-def-schemas.d.ts.map +1 -0
- package/dist/src/models/crew-def-schemas.js +140 -0
- package/dist/src/models/crew-def-schemas.js.map +1 -0
- package/dist/src/models/offer-schemas.d.ts +2 -2
- package/dist/src/models/schemas.d.ts +1 -0
- package/dist/src/models/schemas.d.ts.map +1 -1
- package/dist/src/models/schemas.js +3 -0
- package/dist/src/models/schemas.js.map +1 -1
- package/dist/src/models/workflow-schemas.d.ts +69 -1
- package/dist/src/models/workflow-schemas.d.ts.map +1 -1
- package/dist/src/models/workflow-schemas.js +26 -0
- package/dist/src/models/workflow-schemas.js.map +1 -1
- package/dist/src/routes/access-tokens.d.ts +2 -0
- package/dist/src/routes/access-tokens.d.ts.map +1 -1
- package/dist/src/routes/access-tokens.js +15 -0
- package/dist/src/routes/access-tokens.js.map +1 -1
- package/dist/src/routes/admin-config.js +1 -1
- package/dist/src/routes/admin-config.js.map +1 -1
- package/dist/src/routes/admin-maintenance.d.ts +3 -0
- package/dist/src/routes/admin-maintenance.d.ts.map +1 -1
- package/dist/src/routes/admin-maintenance.js +20 -0
- package/dist/src/routes/admin-maintenance.js.map +1 -1
- package/dist/src/routes/admin-storage-stats.d.ts +17 -0
- package/dist/src/routes/admin-storage-stats.d.ts.map +1 -0
- package/dist/src/routes/admin-storage-stats.js +56 -0
- package/dist/src/routes/admin-storage-stats.js.map +1 -0
- package/dist/src/routes/admin.d.ts +1 -0
- package/dist/src/routes/admin.d.ts.map +1 -1
- package/dist/src/routes/admin.js +10 -12
- package/dist/src/routes/admin.js.map +1 -1
- package/dist/src/routes/agent-activity.d.ts +6 -0
- package/dist/src/routes/agent-activity.d.ts.map +1 -1
- package/dist/src/routes/agent-activity.js +57 -0
- package/dist/src/routes/agent-activity.js.map +1 -1
- package/dist/src/routes/agent-directives.d.ts.map +1 -1
- package/dist/src/routes/agent-directives.js +30 -0
- package/dist/src/routes/agent-directives.js.map +1 -1
- package/dist/src/routes/agent-messages.d.ts +2 -0
- package/dist/src/routes/agent-messages.d.ts.map +1 -1
- package/dist/src/routes/agent-messages.js +18 -0
- package/dist/src/routes/agent-messages.js.map +1 -1
- package/dist/src/routes/agent-onboarding.d.ts +16 -0
- package/dist/src/routes/agent-onboarding.d.ts.map +1 -1
- package/dist/src/routes/agent-onboarding.js +6 -1
- package/dist/src/routes/agent-onboarding.js.map +1 -1
- package/dist/src/routes/agent-webhook.d.ts +3 -0
- package/dist/src/routes/agent-webhook.d.ts.map +1 -1
- package/dist/src/routes/agent-webhook.js +28 -0
- package/dist/src/routes/agent-webhook.js.map +1 -1
- package/dist/src/routes/agents/device-auth.d.ts +10 -0
- package/dist/src/routes/agents/device-auth.d.ts.map +1 -1
- package/dist/src/routes/agents/device-auth.js +241 -139
- package/dist/src/routes/agents/device-auth.js.map +1 -1
- package/dist/src/routes/agents/offers.d.ts +4 -0
- package/dist/src/routes/agents/offers.d.ts.map +1 -1
- package/dist/src/routes/agents/offers.js +0 -0
- package/dist/src/routes/agents/offers.js.map +1 -1
- package/dist/src/routes/agents/profile-metadata.d.ts +3 -0
- package/dist/src/routes/agents/profile-metadata.d.ts.map +1 -1
- package/dist/src/routes/agents/profile-metadata.js +23 -10
- package/dist/src/routes/agents/profile-metadata.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts +6 -0
- package/dist/src/routes/app-grants.d.ts.map +1 -1
- package/dist/src/routes/app-grants.js +37 -2
- package/dist/src/routes/app-grants.js.map +1 -1
- package/dist/src/routes/appdev-overview.d.ts +17 -0
- package/dist/src/routes/appdev-overview.d.ts.map +1 -0
- package/dist/src/routes/appdev-overview.js +75 -0
- package/dist/src/routes/appdev-overview.js.map +1 -0
- package/dist/src/routes/appdev-pitfalls.d.ts +20 -0
- package/dist/src/routes/appdev-pitfalls.d.ts.map +1 -0
- package/dist/src/routes/appdev-pitfalls.js +103 -0
- package/dist/src/routes/appdev-pitfalls.js.map +1 -0
- package/dist/src/routes/appeals.d.ts +1 -0
- package/dist/src/routes/appeals.d.ts.map +1 -1
- package/dist/src/routes/appeals.js +3 -1
- package/dist/src/routes/appeals.js.map +1 -1
- package/dist/src/routes/apps/agents-deploy.d.ts +24 -0
- package/dist/src/routes/apps/agents-deploy.d.ts.map +1 -0
- package/dist/src/routes/apps/agents-deploy.js +214 -0
- package/dist/src/routes/apps/agents-deploy.js.map +1 -0
- package/dist/src/routes/apps/catalogue-admin.d.ts +5 -0
- package/dist/src/routes/apps/catalogue-admin.d.ts.map +1 -1
- package/dist/src/routes/apps/catalogue-admin.js +34 -10
- package/dist/src/routes/apps/catalogue-admin.js.map +1 -1
- package/dist/src/routes/apps/drafts.d.ts +2 -0
- package/dist/src/routes/apps/drafts.d.ts.map +1 -1
- package/dist/src/routes/apps/drafts.js +4 -0
- package/dist/src/routes/apps/drafts.js.map +1 -1
- package/dist/src/routes/apps/fork-manage.d.ts +3 -1
- package/dist/src/routes/apps/fork-manage.d.ts.map +1 -1
- package/dist/src/routes/apps/fork-manage.js +50 -1
- package/dist/src/routes/apps/fork-manage.js.map +1 -1
- package/dist/src/routes/apps/publish.d.ts +7 -0
- package/dist/src/routes/apps/publish.d.ts.map +1 -1
- package/dist/src/routes/apps/publish.js +69 -1
- package/dist/src/routes/apps/publish.js.map +1 -1
- package/dist/src/routes/apps-cost.d.ts +25 -0
- package/dist/src/routes/apps-cost.d.ts.map +1 -0
- package/dist/src/routes/apps-cost.js +107 -0
- package/dist/src/routes/apps-cost.js.map +1 -0
- package/dist/src/routes/apps.d.ts +2 -0
- package/dist/src/routes/apps.d.ts.map +1 -1
- package/dist/src/routes/apps.js +4 -0
- package/dist/src/routes/apps.js.map +1 -1
- package/dist/src/routes/auth.d.ts +2 -0
- package/dist/src/routes/auth.d.ts.map +1 -1
- package/dist/src/routes/auth.js +11 -0
- package/dist/src/routes/auth.js.map +1 -1
- package/dist/src/routes/bootstrap.d.ts +5 -0
- package/dist/src/routes/bootstrap.d.ts.map +1 -1
- package/dist/src/routes/bootstrap.js +21 -14
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/calibrator.d.ts +2 -0
- package/dist/src/routes/calibrator.d.ts.map +1 -1
- package/dist/src/routes/calibrator.js +43 -0
- package/dist/src/routes/calibrator.js.map +1 -1
- package/dist/src/routes/catalogue.d.ts +2 -0
- package/dist/src/routes/catalogue.d.ts.map +1 -1
- package/dist/src/routes/catalogue.js +20 -30
- package/dist/src/routes/catalogue.js.map +1 -1
- package/dist/src/routes/commerce.d.ts.map +1 -1
- package/dist/src/routes/commerce.js +18 -8
- package/dist/src/routes/commerce.js.map +1 -1
- package/dist/src/routes/consent.d.ts.map +1 -1
- package/dist/src/routes/consent.js +10 -0
- package/dist/src/routes/consent.js.map +1 -1
- package/dist/src/routes/contacts.d.ts +20 -0
- package/dist/src/routes/contacts.d.ts.map +1 -0
- package/dist/src/routes/contacts.js +86 -0
- package/dist/src/routes/contacts.js.map +1 -0
- package/dist/src/routes/ecosystem-apps.d.ts +2 -0
- package/dist/src/routes/ecosystem-apps.d.ts.map +1 -1
- package/dist/src/routes/ecosystem-apps.js +34 -0
- package/dist/src/routes/ecosystem-apps.js.map +1 -1
- package/dist/src/routes/exchange-market.d.ts +28 -0
- package/dist/src/routes/exchange-market.d.ts.map +1 -0
- package/dist/src/routes/exchange-market.js +454 -0
- package/dist/src/routes/exchange-market.js.map +1 -0
- package/dist/src/routes/exchange.d.ts +33 -0
- package/dist/src/routes/exchange.d.ts.map +1 -0
- package/dist/src/routes/exchange.js +395 -0
- package/dist/src/routes/exchange.js.map +1 -0
- package/dist/src/routes/extensions/actions.d.ts +3 -0
- package/dist/src/routes/extensions/actions.d.ts.map +1 -1
- package/dist/src/routes/extensions/actions.js +43 -6
- package/dist/src/routes/extensions/actions.js.map +1 -1
- package/dist/src/routes/extensions/entitlement-gate.d.ts +33 -0
- package/dist/src/routes/extensions/entitlement-gate.d.ts.map +1 -0
- package/dist/src/routes/extensions/entitlement-gate.js +143 -0
- package/dist/src/routes/extensions/entitlement-gate.js.map +1 -0
- package/dist/src/routes/extensions/manifest.d.ts +11 -0
- package/dist/src/routes/extensions/manifest.d.ts.map +1 -1
- package/dist/src/routes/extensions/manifest.js +100 -8
- package/dist/src/routes/extensions/manifest.js.map +1 -1
- package/dist/src/routes/extensions/paywall.d.ts +30 -0
- package/dist/src/routes/extensions/paywall.d.ts.map +1 -0
- package/dist/src/routes/extensions/paywall.js +116 -0
- package/dist/src/routes/extensions/paywall.js.map +1 -0
- package/dist/src/routes/federation-sync/messaging.d.ts.map +1 -1
- package/dist/src/routes/federation-sync/messaging.js +7 -1
- package/dist/src/routes/federation-sync/messaging.js.map +1 -1
- package/dist/src/routes/feedback.d.ts +23 -0
- package/dist/src/routes/feedback.d.ts.map +1 -0
- package/dist/src/routes/feedback.js +111 -0
- package/dist/src/routes/feedback.js.map +1 -0
- package/dist/src/routes/generator/projects.d.ts.map +1 -1
- package/dist/src/routes/generator/projects.js +18 -0
- package/dist/src/routes/generator/projects.js.map +1 -1
- package/dist/src/routes/generator/prompts.d.ts +14 -3
- package/dist/src/routes/generator/prompts.d.ts.map +1 -1
- package/dist/src/routes/generator/prompts.js +165 -90
- package/dist/src/routes/generator/prompts.js.map +1 -1
- package/dist/src/routes/generator.d.ts +2 -0
- package/dist/src/routes/generator.d.ts.map +1 -1
- package/dist/src/routes/generator.js +2 -0
- package/dist/src/routes/generator.js.map +1 -1
- package/dist/src/routes/ghii/profile.d.ts +2 -0
- package/dist/src/routes/ghii/profile.d.ts.map +1 -1
- package/dist/src/routes/ghii/profile.js +16 -11
- package/dist/src/routes/ghii/profile.js.map +1 -1
- package/dist/src/routes/ghii/recovery.d.ts +2 -0
- package/dist/src/routes/ghii/recovery.d.ts.map +1 -1
- package/dist/src/routes/ghii/recovery.js +7 -0
- package/dist/src/routes/ghii/recovery.js.map +1 -1
- package/dist/src/routes/ghii/register-login.d.ts +4 -0
- package/dist/src/routes/ghii/register-login.d.ts.map +1 -1
- package/dist/src/routes/ghii/register-login.js +45 -22
- package/dist/src/routes/ghii/register-login.js.map +1 -1
- package/dist/src/routes/ghii/web-verify.d.ts +5 -0
- package/dist/src/routes/ghii/web-verify.d.ts.map +1 -1
- package/dist/src/routes/ghii/web-verify.js +24 -3
- package/dist/src/routes/ghii/web-verify.js.map +1 -1
- package/dist/src/routes/knowledge/admin.d.ts +1 -0
- package/dist/src/routes/knowledge/admin.d.ts.map +1 -1
- package/dist/src/routes/knowledge/admin.js +30 -40
- package/dist/src/routes/knowledge/admin.js.map +1 -1
- package/dist/src/routes/knowledge/helpers.d.ts +1 -0
- package/dist/src/routes/knowledge/helpers.d.ts.map +1 -1
- package/dist/src/routes/knowledge/helpers.js +5 -1
- package/dist/src/routes/knowledge/helpers.js.map +1 -1
- package/dist/src/routes/knowledge/organism.d.ts +1 -0
- package/dist/src/routes/knowledge/organism.d.ts.map +1 -1
- package/dist/src/routes/knowledge/organism.js +7 -11
- package/dist/src/routes/knowledge/organism.js.map +1 -1
- package/dist/src/routes/knowledge/packages-core.d.ts +1 -0
- package/dist/src/routes/knowledge/packages-core.d.ts.map +1 -1
- package/dist/src/routes/knowledge/packages-core.js +6 -16
- package/dist/src/routes/knowledge/packages-core.js.map +1 -1
- package/dist/src/routes/knowledge/sharing.d.ts +1 -0
- package/dist/src/routes/knowledge/sharing.d.ts.map +1 -1
- package/dist/src/routes/knowledge/sharing.js +11 -31
- package/dist/src/routes/knowledge/sharing.js.map +1 -1
- package/dist/src/routes/knowledge.d.ts +2 -0
- package/dist/src/routes/knowledge.d.ts.map +1 -1
- package/dist/src/routes/knowledge.js +15 -0
- package/dist/src/routes/knowledge.js.map +1 -1
- package/dist/src/routes/ledger.d.ts +4 -0
- package/dist/src/routes/ledger.d.ts.map +1 -1
- package/dist/src/routes/ledger.js +93 -53
- package/dist/src/routes/ledger.js.map +1 -1
- package/dist/src/routes/lib-data.d.ts +2 -0
- package/dist/src/routes/lib-data.d.ts.map +1 -1
- package/dist/src/routes/lib-data.js +7 -4
- package/dist/src/routes/lib-data.js.map +1 -1
- package/dist/src/routes/lib-intake.d.ts +21 -0
- package/dist/src/routes/lib-intake.d.ts.map +1 -0
- package/dist/src/routes/lib-intake.js +63 -0
- package/dist/src/routes/lib-intake.js.map +1 -0
- package/dist/src/routes/lib-organism.d.ts +13 -0
- package/dist/src/routes/lib-organism.d.ts.map +1 -1
- package/dist/src/routes/lib-organism.js +80 -0
- package/dist/src/routes/lib-organism.js.map +1 -1
- package/dist/src/routes/lib-workflows.d.ts +24 -0
- package/dist/src/routes/lib-workflows.d.ts.map +1 -0
- package/dist/src/routes/lib-workflows.js +125 -0
- package/dist/src/routes/lib-workflows.js.map +1 -0
- package/dist/src/routes/library-packs.d.ts +31 -0
- package/dist/src/routes/library-packs.d.ts.map +1 -0
- package/dist/src/routes/library-packs.js +187 -0
- package/dist/src/routes/library-packs.js.map +1 -0
- package/dist/src/routes/libs/audio-lib-part2.d.ts +2 -0
- package/dist/src/routes/libs/audio-lib-part2.d.ts.map +1 -1
- package/dist/src/routes/libs/audio-lib-part2.js +4 -0
- package/dist/src/routes/libs/audio-lib-part2.js.map +1 -1
- package/dist/src/routes/libs/auth-lib-part2.d.ts +5 -0
- package/dist/src/routes/libs/auth-lib-part2.d.ts.map +1 -1
- package/dist/src/routes/libs/auth-lib-part2.js +118 -5
- package/dist/src/routes/libs/auth-lib-part2.js.map +1 -1
- package/dist/src/routes/libs/sdk-serve.d.ts +11 -0
- package/dist/src/routes/libs/sdk-serve.d.ts.map +1 -0
- package/dist/src/routes/libs/sdk-serve.js +53 -0
- package/dist/src/routes/libs/sdk-serve.js.map +1 -0
- package/dist/src/routes/libs.d.ts +17 -1
- package/dist/src/routes/libs.d.ts.map +1 -1
- package/dist/src/routes/libs.js +83 -285
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/living.d.ts +2 -0
- package/dist/src/routes/living.d.ts.map +1 -1
- package/dist/src/routes/living.js +12 -0
- package/dist/src/routes/living.js.map +1 -1
- package/dist/src/routes/matches.d.ts +3 -0
- package/dist/src/routes/matches.d.ts.map +1 -1
- package/dist/src/routes/matches.js +47 -51
- package/dist/src/routes/matches.js.map +1 -1
- package/dist/src/routes/memory/bulk.d.ts.map +1 -1
- package/dist/src/routes/memory/bulk.js +185 -70
- package/dist/src/routes/memory/bulk.js.map +1 -1
- package/dist/src/routes/memory/crud.d.ts +2 -0
- package/dist/src/routes/memory/crud.d.ts.map +1 -1
- package/dist/src/routes/memory/crud.js +70 -39
- package/dist/src/routes/memory/crud.js.map +1 -1
- package/dist/src/routes/memory/key.d.ts +2 -0
- package/dist/src/routes/memory/key.d.ts.map +1 -1
- package/dist/src/routes/memory/key.js +23 -4
- package/dist/src/routes/memory/key.js.map +1 -1
- package/dist/src/routes/memory/shared.d.ts +4 -0
- package/dist/src/routes/memory/shared.d.ts.map +1 -1
- package/dist/src/routes/memory/shared.js.map +1 -1
- package/dist/src/routes/memory.d.ts.map +1 -1
- package/dist/src/routes/memory.js +29 -1
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/messages.d.ts +9 -0
- package/dist/src/routes/messages.d.ts.map +1 -1
- package/dist/src/routes/messages.js +48 -26
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/notifications.d.ts +8 -3
- package/dist/src/routes/notifications.d.ts.map +1 -1
- package/dist/src/routes/notifications.js +53 -5
- package/dist/src/routes/notifications.js.map +1 -1
- package/dist/src/routes/organisms/crud.d.ts +6 -0
- package/dist/src/routes/organisms/crud.d.ts.map +1 -1
- package/dist/src/routes/organisms/crud.js +80 -62
- package/dist/src/routes/organisms/crud.js.map +1 -1
- package/dist/src/routes/organisms/gates.d.ts.map +1 -1
- package/dist/src/routes/organisms/gates.js +82 -1
- package/dist/src/routes/organisms/gates.js.map +1 -1
- package/dist/src/routes/organisms/intake.d.ts +29 -0
- package/dist/src/routes/organisms/intake.d.ts.map +1 -0
- package/dist/src/routes/organisms/intake.js +251 -0
- package/dist/src/routes/organisms/intake.js.map +1 -0
- package/dist/src/routes/organisms/membership.d.ts +4 -1
- package/dist/src/routes/organisms/membership.d.ts.map +1 -1
- package/dist/src/routes/organisms/membership.js +103 -60
- package/dist/src/routes/organisms/membership.js.map +1 -1
- package/dist/src/routes/organisms/shared.d.ts +28 -0
- package/dist/src/routes/organisms/shared.d.ts.map +1 -1
- package/dist/src/routes/organisms/shared.js +339 -26
- package/dist/src/routes/organisms/shared.js.map +1 -1
- package/dist/src/routes/organisms/workspace-access.d.ts +16 -0
- package/dist/src/routes/organisms/workspace-access.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-access.js +174 -72
- package/dist/src/routes/organisms/workspace-access.js.map +1 -1
- package/dist/src/routes/organisms/workspace-ops.d.ts +6 -0
- package/dist/src/routes/organisms/workspace-ops.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-ops.js +224 -11
- package/dist/src/routes/organisms/workspace-ops.js.map +1 -1
- package/dist/src/routes/organisms/workspace-read.d.ts +4 -0
- package/dist/src/routes/organisms/workspace-read.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-read.js +14 -6
- package/dist/src/routes/organisms/workspace-read.js.map +1 -1
- package/dist/src/routes/organisms.d.ts.map +1 -1
- package/dist/src/routes/organisms.js +2 -0
- package/dist/src/routes/organisms.js.map +1 -1
- package/dist/src/routes/owners.d.ts +2 -0
- package/dist/src/routes/owners.d.ts.map +1 -1
- package/dist/src/routes/owners.js +17 -7
- package/dist/src/routes/owners.js.map +1 -1
- package/dist/src/routes/packages.d.ts.map +1 -1
- package/dist/src/routes/packages.js +10 -0
- package/dist/src/routes/packages.js.map +1 -1
- package/dist/src/routes/portal.d.ts +1 -1
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +3 -7
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/portfolio.d.ts +2 -0
- package/dist/src/routes/portfolio.d.ts.map +1 -1
- package/dist/src/routes/portfolio.js +41 -31
- package/dist/src/routes/portfolio.js.map +1 -1
- package/dist/src/routes/prompts.d.ts.map +1 -1
- package/dist/src/routes/prompts.js +23 -0
- package/dist/src/routes/prompts.js.map +1 -1
- package/dist/src/routes/schedules.d.ts +7 -0
- package/dist/src/routes/schedules.d.ts.map +1 -1
- package/dist/src/routes/schedules.js +102 -39
- package/dist/src/routes/schedules.js.map +1 -1
- package/dist/src/routes/unfurl.d.ts +27 -0
- package/dist/src/routes/unfurl.d.ts.map +1 -0
- package/dist/src/routes/unfurl.js +180 -0
- package/dist/src/routes/unfurl.js.map +1 -0
- package/dist/src/routes/upload.d.ts +6 -0
- package/dist/src/routes/upload.d.ts.map +1 -1
- package/dist/src/routes/upload.js +28 -1
- package/dist/src/routes/upload.js.map +1 -1
- package/dist/src/routes/usage.d.ts +9 -5
- package/dist/src/routes/usage.d.ts.map +1 -1
- package/dist/src/routes/usage.js +26 -5
- package/dist/src/routes/usage.js.map +1 -1
- package/dist/src/routes/wallet.d.ts +3 -0
- package/dist/src/routes/wallet.d.ts.map +1 -1
- package/dist/src/routes/wallet.js +17 -1
- package/dist/src/routes/wallet.js.map +1 -1
- package/dist/src/routes/webmcp.d.ts +3 -0
- package/dist/src/routes/webmcp.d.ts.map +1 -1
- package/dist/src/routes/webmcp.js +55 -0
- package/dist/src/routes/webmcp.js.map +1 -1
- package/dist/src/routes/work.d.ts.map +1 -1
- package/dist/src/routes/work.js +14 -9
- package/dist/src/routes/work.js.map +1 -1
- package/dist/src/routes/workflows.d.ts +4 -0
- package/dist/src/routes/workflows.d.ts.map +1 -1
- package/dist/src/routes/workflows.js +58 -1
- package/dist/src/routes/workflows.js.map +1 -1
- package/dist/src/server-bootstrap/config-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/config-init.js +7 -6
- package/dist/src/server-bootstrap/config-init.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +35 -7
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +4 -0
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/agent-face.d.ts +10 -2
- package/dist/src/services/agent-face.d.ts.map +1 -1
- package/dist/src/services/agent-face.js +10 -4
- package/dist/src/services/agent-face.js.map +1 -1
- package/dist/src/services/app-agent-deploy.d.ts +26 -0
- package/dist/src/services/app-agent-deploy.d.ts.map +1 -0
- package/dist/src/services/app-agent-deploy.js +91 -0
- package/dist/src/services/app-agent-deploy.js.map +1 -0
- package/dist/src/services/app-template-proposals.d.ts +94 -0
- package/dist/src/services/app-template-proposals.d.ts.map +1 -0
- package/dist/src/services/app-template-proposals.js +114 -0
- package/dist/src/services/app-template-proposals.js.map +1 -0
- package/dist/src/services/app-tool-interfaces.d.ts +37 -0
- package/dist/src/services/app-tool-interfaces.d.ts.map +1 -0
- package/dist/src/services/app-tool-interfaces.js +101 -0
- package/dist/src/services/app-tool-interfaces.js.map +1 -0
- package/dist/src/services/appdev-flow-constants.d.ts +33 -0
- package/dist/src/services/appdev-flow-constants.d.ts.map +1 -0
- package/dist/src/services/appdev-flow-constants.js +43 -0
- package/dist/src/services/appdev-flow-constants.js.map +1 -0
- package/dist/src/services/appdev-flow-prompt.d.ts +15 -0
- package/dist/src/services/appdev-flow-prompt.d.ts.map +1 -0
- package/dist/src/services/appdev-flow-prompt.js +40 -0
- package/dist/src/services/appdev-flow-prompt.js.map +1 -0
- package/dist/src/services/appdev-kb.d.ts +71 -0
- package/dist/src/services/appdev-kb.d.ts.map +1 -0
- package/dist/src/services/appdev-kb.js +178 -0
- package/dist/src/services/appdev-kb.js.map +1 -0
- package/dist/src/services/appdev-overview.d.ts +28 -0
- package/dist/src/services/appdev-overview.d.ts.map +1 -0
- package/dist/src/services/appdev-overview.js +189 -0
- package/dist/src/services/appdev-overview.js.map +1 -0
- package/dist/src/services/build-app-prompt.d.ts +17 -0
- package/dist/src/services/build-app-prompt.d.ts.map +1 -1
- package/dist/src/services/build-app-prompt.js +74 -35
- package/dist/src/services/build-app-prompt.js.map +1 -1
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +1 -3
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/consent.d.ts.map +1 -1
- package/dist/src/services/consent.js +8 -3
- package/dist/src/services/consent.js.map +1 -1
- package/dist/src/services/contacts.d.ts +88 -0
- package/dist/src/services/contacts.d.ts.map +1 -0
- package/dist/src/services/contacts.js +163 -0
- package/dist/src/services/contacts.js.map +1 -0
- package/dist/src/services/core-jobs.d.ts +4 -0
- package/dist/src/services/core-jobs.d.ts.map +1 -1
- package/dist/src/services/core-jobs.js +23 -0
- package/dist/src/services/core-jobs.js.map +1 -1
- package/dist/src/services/dangling-refs.d.ts +2 -0
- package/dist/src/services/dangling-refs.d.ts.map +1 -1
- package/dist/src/services/dangling-refs.js +3 -2
- package/dist/src/services/dangling-refs.js.map +1 -1
- package/dist/src/services/db/access-tab-db-service.d.ts +49 -0
- package/dist/src/services/db/access-tab-db-service.d.ts.map +1 -0
- package/dist/src/services/db/access-tab-db-service.js +87 -0
- package/dist/src/services/db/access-tab-db-service.js.map +1 -0
- package/dist/src/services/db/agent-activity-overview-db-service.d.ts +62 -0
- package/dist/src/services/db/agent-activity-overview-db-service.d.ts.map +1 -0
- package/dist/src/services/db/agent-activity-overview-db-service.js +88 -0
- package/dist/src/services/db/agent-activity-overview-db-service.js.map +1 -0
- package/dist/src/services/db/agent-data-access-overview-db-service.d.ts +45 -0
- package/dist/src/services/db/agent-data-access-overview-db-service.d.ts.map +1 -0
- package/dist/src/services/db/agent-data-access-overview-db-service.js +42 -0
- package/dist/src/services/db/agent-data-access-overview-db-service.js.map +1 -0
- package/dist/src/services/db/agent-db-service.d.ts +58 -0
- package/dist/src/services/db/agent-db-service.d.ts.map +1 -0
- package/dist/src/services/db/agent-db-service.js +49 -0
- package/dist/src/services/db/agent-db-service.js.map +1 -0
- package/dist/src/services/db/agent-integration-overview-db-service.d.ts +44 -0
- package/dist/src/services/db/agent-integration-overview-db-service.d.ts.map +1 -0
- package/dist/src/services/db/agent-integration-overview-db-service.js +44 -0
- package/dist/src/services/db/agent-integration-overview-db-service.js.map +1 -0
- package/dist/src/services/db/agent-messages-overview-db-service.d.ts +40 -0
- package/dist/src/services/db/agent-messages-overview-db-service.d.ts.map +1 -0
- package/dist/src/services/db/agent-messages-overview-db-service.js +47 -0
- package/dist/src/services/db/agent-messages-overview-db-service.js.map +1 -0
- package/dist/src/services/db/agent-quality-overview-db-service.d.ts +43 -0
- package/dist/src/services/db/agent-quality-overview-db-service.d.ts.map +1 -0
- package/dist/src/services/db/agent-quality-overview-db-service.js +34 -0
- package/dist/src/services/db/agent-quality-overview-db-service.js.map +1 -0
- package/dist/src/services/db/calibrator-detail-db-service.d.ts +41 -0
- package/dist/src/services/db/calibrator-detail-db-service.d.ts.map +1 -0
- package/dist/src/services/db/calibrator-detail-db-service.js +61 -0
- package/dist/src/services/db/calibrator-detail-db-service.js.map +1 -0
- package/dist/src/services/db/data-wallet-db-service.d.ts +48 -0
- package/dist/src/services/db/data-wallet-db-service.d.ts.map +1 -0
- package/dist/src/services/db/data-wallet-db-service.js +74 -0
- package/dist/src/services/db/data-wallet-db-service.js.map +1 -0
- package/dist/src/services/db/generator-state-db-service.d.ts +48 -0
- package/dist/src/services/db/generator-state-db-service.d.ts.map +1 -0
- package/dist/src/services/db/generator-state-db-service.js +45 -0
- package/dist/src/services/db/generator-state-db-service.js.map +1 -0
- package/dist/src/services/db/home-dashboard-service.d.ts +65 -0
- package/dist/src/services/db/home-dashboard-service.d.ts.map +1 -0
- package/dist/src/services/db/home-dashboard-service.js +57 -0
- package/dist/src/services/db/home-dashboard-service.js.map +1 -0
- package/dist/src/services/db/index.d.ts +48 -0
- package/dist/src/services/db/index.d.ts.map +1 -0
- package/dist/src/services/db/index.js +40 -0
- package/dist/src/services/db/index.js.map +1 -0
- package/dist/src/services/db/knowledge-tab-db-service.d.ts +35 -0
- package/dist/src/services/db/knowledge-tab-db-service.d.ts.map +1 -0
- package/dist/src/services/db/knowledge-tab-db-service.js +37 -0
- package/dist/src/services/db/knowledge-tab-db-service.js.map +1 -0
- package/dist/src/services/db/living-docs-db-service.d.ts +43 -0
- package/dist/src/services/db/living-docs-db-service.d.ts.map +1 -0
- package/dist/src/services/db/living-docs-db-service.js +45 -0
- package/dist/src/services/db/living-docs-db-service.js.map +1 -0
- package/dist/src/services/db/memory-db-service.d.ts +122 -0
- package/dist/src/services/db/memory-db-service.d.ts.map +1 -0
- package/dist/src/services/db/memory-db-service.js +171 -0
- package/dist/src/services/db/memory-db-service.js.map +1 -0
- package/dist/src/services/db/memory-tab-db-service.d.ts +54 -0
- package/dist/src/services/db/memory-tab-db-service.d.ts.map +1 -0
- package/dist/src/services/db/memory-tab-db-service.js +94 -0
- package/dist/src/services/db/memory-tab-db-service.js.map +1 -0
- package/dist/src/services/db/messages-inbox-db-service.d.ts +47 -0
- package/dist/src/services/db/messages-inbox-db-service.d.ts.map +1 -0
- package/dist/src/services/db/messages-inbox-db-service.js +76 -0
- package/dist/src/services/db/messages-inbox-db-service.js.map +1 -0
- package/dist/src/services/db/messaging-db-service.d.ts +40 -0
- package/dist/src/services/db/messaging-db-service.d.ts.map +1 -0
- package/dist/src/services/db/messaging-db-service.js +55 -0
- package/dist/src/services/db/messaging-db-service.js.map +1 -0
- package/dist/src/services/db/notebook-db-service.d.ts +35 -0
- package/dist/src/services/db/notebook-db-service.d.ts.map +1 -0
- package/dist/src/services/db/notebook-db-service.js +44 -0
- package/dist/src/services/db/notebook-db-service.js.map +1 -0
- package/dist/src/services/db/owner-identity.d.ts +36 -0
- package/dist/src/services/db/owner-identity.d.ts.map +1 -0
- package/dist/src/services/db/owner-identity.js +27 -0
- package/dist/src/services/db/owner-identity.js.map +1 -0
- package/dist/src/services/db/packages-tab-db-service.d.ts +42 -0
- package/dist/src/services/db/packages-tab-db-service.d.ts.map +1 -0
- package/dist/src/services/db/packages-tab-db-service.js +33 -0
- package/dist/src/services/db/packages-tab-db-service.js.map +1 -0
- package/dist/src/services/db/security-tab-db-service.d.ts +47 -0
- package/dist/src/services/db/security-tab-db-service.d.ts.map +1 -0
- package/dist/src/services/db/security-tab-db-service.js +61 -0
- package/dist/src/services/db/security-tab-db-service.js.map +1 -0
- package/dist/src/services/db/wallet-tab-db-service.d.ts +47 -0
- package/dist/src/services/db/wallet-tab-db-service.d.ts.map +1 -0
- package/dist/src/services/db/wallet-tab-db-service.js +80 -0
- package/dist/src/services/db/wallet-tab-db-service.js.map +1 -0
- package/dist/src/services/db/work-tab-db-service.d.ts +32 -0
- package/dist/src/services/db/work-tab-db-service.d.ts.map +1 -0
- package/dist/src/services/db/work-tab-db-service.js +49 -0
- package/dist/src/services/db/work-tab-db-service.js.map +1 -0
- package/dist/src/services/directory.d.ts +1 -0
- package/dist/src/services/directory.d.ts.map +1 -1
- package/dist/src/services/directory.js +6 -2
- package/dist/src/services/directory.js.map +1 -1
- package/dist/src/services/discovery/setup.d.ts +3 -0
- package/dist/src/services/discovery/setup.d.ts.map +1 -1
- package/dist/src/services/discovery/setup.js +2 -0
- package/dist/src/services/discovery/setup.js.map +1 -1
- package/dist/src/services/discovery/sources/memory-source.d.ts +2 -0
- package/dist/src/services/discovery/sources/memory-source.d.ts.map +1 -1
- package/dist/src/services/discovery/sources/memory-source.js.map +1 -1
- package/dist/src/services/discovery/sources/templates-source.d.ts +20 -0
- package/dist/src/services/discovery/sources/templates-source.d.ts.map +1 -0
- package/dist/src/services/discovery/sources/templates-source.js +52 -0
- package/dist/src/services/discovery/sources/templates-source.js.map +1 -0
- package/dist/src/services/entitlement-money.d.ts +55 -0
- package/dist/src/services/entitlement-money.d.ts.map +1 -0
- package/dist/src/services/entitlement-money.js +68 -0
- package/dist/src/services/entitlement-money.js.map +1 -0
- package/dist/src/services/exchange-market.d.ts +247 -0
- package/dist/src/services/exchange-market.d.ts.map +1 -0
- package/dist/src/services/exchange-market.js +254 -0
- package/dist/src/services/exchange-market.js.map +1 -0
- package/dist/src/services/exchange-proposals.d.ts +47 -0
- package/dist/src/services/exchange-proposals.d.ts.map +1 -0
- package/dist/src/services/exchange-proposals.js +71 -0
- package/dist/src/services/exchange-proposals.js.map +1 -0
- package/dist/src/services/exchange-work.d.ts +30 -0
- package/dist/src/services/exchange-work.d.ts.map +1 -0
- package/dist/src/services/exchange-work.js +43 -0
- package/dist/src/services/exchange-work.js.map +1 -0
- package/dist/src/services/ext-pay-token.d.ts +29 -0
- package/dist/src/services/ext-pay-token.d.ts.map +1 -0
- package/dist/src/services/ext-pay-token.js +63 -0
- package/dist/src/services/ext-pay-token.js.map +1 -0
- package/dist/src/services/extension-runtime.d.ts.map +1 -1
- package/dist/src/services/extension-runtime.js +9 -2
- package/dist/src/services/extension-runtime.js.map +1 -1
- package/dist/src/services/feedback.d.ts +38 -0
- package/dist/src/services/feedback.d.ts.map +1 -0
- package/dist/src/services/feedback.js +118 -0
- package/dist/src/services/feedback.js.map +1 -0
- package/dist/src/services/generator-autopilot.d.ts.map +1 -1
- package/dist/src/services/generator-autopilot.js +12 -19
- package/dist/src/services/generator-autopilot.js.map +1 -1
- package/dist/src/services/generator-prompt-seeds/blueprint-prompts.d.ts.map +1 -1
- package/dist/src/services/generator-prompt-seeds/blueprint-prompts.js +28 -1
- package/dist/src/services/generator-prompt-seeds/blueprint-prompts.js.map +1 -1
- package/dist/src/services/generator-prompt-seeds/cortex-code.d.ts +5 -0
- package/dist/src/services/generator-prompt-seeds/cortex-code.d.ts.map +1 -1
- package/dist/src/services/generator-prompt-seeds/cortex-code.js +54 -3
- package/dist/src/services/generator-prompt-seeds/cortex-code.js.map +1 -1
- package/dist/src/services/generator-prompt-seeds/extension-prompts.d.ts.map +1 -1
- package/dist/src/services/generator-prompt-seeds/extension-prompts.js +106 -2
- package/dist/src/services/generator-prompt-seeds/extension-prompts.js.map +1 -1
- package/dist/src/services/generator-prompt-seeds/shared-fragments.js +1 -1
- package/dist/src/services/generator-prompts/resolvers-blueprint.d.ts.map +1 -1
- package/dist/src/services/generator-prompts/resolvers-blueprint.js +9 -0
- package/dist/src/services/generator-prompts/resolvers-blueprint.js.map +1 -1
- package/dist/src/services/generator-prompts/resolvers-cortex.d.ts.map +1 -1
- package/dist/src/services/generator-prompts/resolvers-cortex.js +4 -0
- package/dist/src/services/generator-prompts/resolvers-cortex.js.map +1 -1
- package/dist/src/services/generator-prompts/resolvers-fix.d.ts +4 -0
- package/dist/src/services/generator-prompts/resolvers-fix.d.ts.map +1 -1
- package/dist/src/services/generator-prompts/resolvers-fix.js +68 -0
- package/dist/src/services/generator-prompts/resolvers-fix.js.map +1 -1
- package/dist/src/services/generator-prompts/resolvers.d.ts.map +1 -1
- package/dist/src/services/generator-prompts/resolvers.js +5 -1
- package/dist/src/services/generator-prompts/resolvers.js.map +1 -1
- package/dist/src/services/generator-prompts/types.d.ts +9 -0
- package/dist/src/services/generator-prompts/types.d.ts.map +1 -1
- package/dist/src/services/handbooks/agent.d.ts +2 -1
- package/dist/src/services/handbooks/agent.d.ts.map +1 -1
- package/dist/src/services/handbooks/agent.js +8 -0
- package/dist/src/services/handbooks/agent.js.map +1 -1
- package/dist/src/services/handbooks/appdev.d.ts +2 -1
- package/dist/src/services/handbooks/appdev.d.ts.map +1 -1
- package/dist/src/services/handbooks/appdev.js +19 -0
- package/dist/src/services/handbooks/appdev.js.map +1 -1
- package/dist/src/services/invitations.d.ts +76 -1
- package/dist/src/services/invitations.d.ts.map +1 -1
- package/dist/src/services/invitations.js +295 -9
- package/dist/src/services/invitations.js.map +1 -1
- package/dist/src/services/job-seeding.d.ts.map +1 -1
- package/dist/src/services/job-seeding.js +2 -0
- package/dist/src/services/job-seeding.js.map +1 -1
- package/dist/src/services/living-author.js +1 -1
- package/dist/src/services/living-author.js.map +1 -1
- package/dist/src/services/llm-strip.d.ts +13 -0
- package/dist/src/services/llm-strip.d.ts.map +1 -0
- package/dist/src/services/llm-strip.js +60 -0
- package/dist/src/services/llm-strip.js.map +1 -0
- package/dist/src/services/manifest-schema.d.ts.map +1 -1
- package/dist/src/services/manifest-schema.js +1 -0
- package/dist/src/services/manifest-schema.js.map +1 -1
- package/dist/src/services/matching.d.ts +1 -0
- package/dist/src/services/matching.d.ts.map +1 -1
- package/dist/src/services/matching.js +28 -19
- package/dist/src/services/matching.js.map +1 -1
- package/dist/src/services/message-send.d.ts.map +1 -1
- package/dist/src/services/message-send.js +9 -1
- package/dist/src/services/message-send.js.map +1 -1
- package/dist/src/services/metered-entitlements.d.ts +203 -0
- package/dist/src/services/metered-entitlements.d.ts.map +1 -0
- package/dist/src/services/metered-entitlements.js +264 -0
- package/dist/src/services/metered-entitlements.js.map +1 -0
- package/dist/src/services/notebook-classify.js +1 -1
- package/dist/src/services/notebook-classify.js.map +1 -1
- package/dist/src/services/notebook-plan.js +1 -1
- package/dist/src/services/notebook-plan.js.map +1 -1
- package/dist/src/services/notify.d.ts +52 -0
- package/dist/src/services/notify.d.ts.map +1 -1
- package/dist/src/services/notify.js +56 -2
- package/dist/src/services/notify.js.map +1 -1
- package/dist/src/services/owner-memory.d.ts +25 -0
- package/dist/src/services/owner-memory.d.ts.map +1 -1
- package/dist/src/services/owner-memory.js +65 -18
- package/dist/src/services/owner-memory.js.map +1 -1
- package/dist/src/services/owner-provisioning.d.ts +5 -0
- package/dist/src/services/owner-provisioning.d.ts.map +1 -1
- package/dist/src/services/owner-provisioning.js +20 -2
- package/dist/src/services/owner-provisioning.js.map +1 -1
- package/dist/src/services/perf-trace.d.ts +43 -0
- package/dist/src/services/perf-trace.d.ts.map +1 -0
- package/dist/src/services/perf-trace.js +149 -0
- package/dist/src/services/perf-trace.js.map +1 -0
- package/dist/src/services/prompt-defaults.d.ts.map +1 -1
- package/dist/src/services/prompt-defaults.js +0 -5
- package/dist/src/services/prompt-defaults.js.map +1 -1
- package/dist/src/services/push.d.ts +5 -0
- package/dist/src/services/push.d.ts.map +1 -1
- package/dist/src/services/push.js.map +1 -1
- package/dist/src/services/quota.d.ts +3 -1
- package/dist/src/services/quota.d.ts.map +1 -1
- package/dist/src/services/quota.js +6 -9
- package/dist/src/services/quota.js.map +1 -1
- package/dist/src/services/structure-overview.d.ts +3 -0
- package/dist/src/services/structure-overview.d.ts.map +1 -1
- package/dist/src/services/structure-overview.js +3 -1
- package/dist/src/services/structure-overview.js.map +1 -1
- package/dist/src/services/structure-snapshot.d.ts.map +1 -1
- package/dist/src/services/structure-snapshot.js +24 -1
- package/dist/src/services/structure-snapshot.js.map +1 -1
- package/dist/src/services/tracked-classify.js +1 -1
- package/dist/src/services/tracked-classify.js.map +1 -1
- package/dist/src/services/usage-summary.d.ts +3 -0
- package/dist/src/services/usage-summary.d.ts.map +1 -1
- package/dist/src/services/usage-summary.js +31 -29
- package/dist/src/services/usage-summary.js.map +1 -1
- package/dist/src/services/workflow/engine-human.d.ts +33 -0
- package/dist/src/services/workflow/engine-human.d.ts.map +1 -0
- package/dist/src/services/workflow/engine-human.js +44 -0
- package/dist/src/services/workflow/engine-human.js.map +1 -0
- package/dist/src/services/workflow/engine-steps.d.ts +13 -0
- package/dist/src/services/workflow/engine-steps.d.ts.map +1 -1
- package/dist/src/services/workflow/engine-steps.js +33 -2
- package/dist/src/services/workflow/engine-steps.js.map +1 -1
- package/dist/src/services/workflow/engine.d.ts +20 -0
- package/dist/src/services/workflow/engine.d.ts.map +1 -1
- package/dist/src/services/workflow/engine.js +77 -3
- package/dist/src/services/workflow/engine.js.map +1 -1
- package/dist/src/services/workflow/store.d.ts +3 -0
- package/dist/src/services/workflow/store.d.ts.map +1 -1
- package/dist/src/services/workflow/store.js +29 -4
- package/dist/src/services/workflow/store.js.map +1 -1
- package/dist/src/services/workspace-access.d.ts +12 -0
- package/dist/src/services/workspace-access.d.ts.map +1 -1
- package/dist/src/services/workspace-access.js +24 -5
- package/dist/src/services/workspace-access.js.map +1 -1
- package/dist/src/services/workspace-provision.d.ts +51 -0
- package/dist/src/services/workspace-provision.d.ts.map +1 -0
- package/dist/src/services/workspace-provision.js +56 -0
- package/dist/src/services/workspace-provision.js.map +1 -0
- package/dist/src/services/workspace-versions.d.ts +110 -0
- package/dist/src/services/workspace-versions.d.ts.map +1 -0
- package/dist/src/services/workspace-versions.js +0 -0
- package/dist/src/services/workspace-versions.js.map +1 -0
- package/dist/src/storage/adapter/legacy-memory-adapter.d.ts +61 -0
- package/dist/src/storage/adapter/legacy-memory-adapter.d.ts.map +1 -0
- package/dist/src/storage/adapter/legacy-memory-adapter.js +135 -0
- package/dist/src/storage/adapter/legacy-memory-adapter.js.map +1 -0
- package/dist/src/storage/adapter/memory-adapter.d.ts +126 -0
- package/dist/src/storage/adapter/memory-adapter.d.ts.map +1 -0
- package/dist/src/storage/adapter/memory-adapter.js +2 -0
- package/dist/src/storage/adapter/memory-adapter.js.map +1 -0
- package/dist/src/storage/interface.d.ts +3 -1
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +28 -0
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +91 -1
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/apps.d.ts +9 -0
- package/dist/src/storage/providers/mongodb/methods/apps.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/apps.js +38 -0
- package/dist/src/storage/providers/mongodb/methods/apps.js.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/governance.d.ts +5 -0
- package/dist/src/storage/providers/mongodb/methods/governance.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/governance.js +23 -2
- package/dist/src/storage/providers/mongodb/methods/governance.js.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/identity.d.ts +6 -0
- package/dist/src/storage/providers/mongodb/methods/identity.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/identity.js +51 -9
- package/dist/src/storage/providers/mongodb/methods/identity.js.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/owner-memory-scope.d.ts +34 -0
- package/dist/src/storage/providers/mongodb/methods/owner-memory-scope.d.ts.map +1 -0
- package/dist/src/storage/providers/mongodb/methods/owner-memory-scope.js +77 -0
- package/dist/src/storage/providers/mongodb/methods/owner-memory-scope.js.map +1 -0
- package/dist/src/storage/providers/mongodb/methods/owners-memory-bulk.d.ts +30 -0
- package/dist/src/storage/providers/mongodb/methods/owners-memory-bulk.d.ts.map +1 -0
- package/dist/src/storage/providers/mongodb/methods/owners-memory-bulk.js +0 -0
- package/dist/src/storage/providers/mongodb/methods/owners-memory-bulk.js.map +1 -0
- package/dist/src/storage/providers/mongodb/methods/owners.d.ts +8 -4
- package/dist/src/storage/providers/mongodb/methods/owners.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/owners.js +112 -21
- package/dist/src/storage/providers/mongodb/methods/owners.js.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/sessions.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/sessions.js +4 -0
- package/dist/src/storage/providers/mongodb/methods/sessions.js.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/storage-stats.d.ts +21 -0
- package/dist/src/storage/providers/mongodb/methods/storage-stats.d.ts.map +1 -0
- package/dist/src/storage/providers/mongodb/methods/storage-stats.js +58 -0
- package/dist/src/storage/providers/mongodb/methods/storage-stats.js.map +1 -0
- package/dist/src/storage/providers/mongodb/methods/work.d.ts +8 -0
- package/dist/src/storage/providers/mongodb/methods/work.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/methods/work.js +42 -0
- package/dist/src/storage/providers/mongodb/methods/work.js.map +1 -1
- package/dist/src/storage/providers/postgres/index.d.ts +1 -0
- package/dist/src/storage/providers/postgres/index.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres/index.js +1 -0
- package/dist/src/storage/providers/postgres/index.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +1538 -0
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/db-types.js +6 -0
- package/dist/src/storage/providers/postgres-kysely/db-types.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/helpers.d.ts +23 -0
- package/dist/src/storage/providers/postgres-kysely/helpers.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/helpers.js +91 -0
- package/dist/src/storage/providers/postgres-kysely/helpers.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/index.d.ts +38 -0
- package/dist/src/storage/providers/postgres-kysely/index.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/index.js +81 -0
- package/dist/src/storage/providers/postgres-kysely/index.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/actions.d.ts +16 -0
- package/dist/src/storage/providers/postgres-kysely/methods/actions.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/actions.js +103 -0
- package/dist/src/storage/providers/postgres-kysely/methods/actions.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-misc.d.ts +37 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-misc.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-misc.js +306 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-misc.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-msg-dispute-invite.d.ts +55 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-msg-dispute-invite.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-msg-dispute-invite.js +247 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-msg-dispute-invite.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-onboarding.d.ts +11 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-onboarding.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-onboarding.js +81 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-onboarding.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.d.ts +50 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js +238 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.d.ts +10 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js +146 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts +11 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js +51 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-purchases.d.ts +10 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-purchases.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-purchases.js +53 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-purchases.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/apps.d.ts +49 -0
- package/dist/src/storage/providers/postgres-kysely/methods/apps.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/apps.js +369 -0
- package/dist/src/storage/providers/postgres-kysely/methods/apps.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/boards.d.ts +28 -0
- package/dist/src/storage/providers/postgres-kysely/methods/boards.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/boards.js +104 -0
- package/dist/src/storage/providers/postgres-kysely/methods/boards.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/capabilities.d.ts +36 -0
- package/dist/src/storage/providers/postgres-kysely/methods/capabilities.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/capabilities.js +222 -0
- package/dist/src/storage/providers/postgres-kysely/methods/capabilities.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/catalogue.d.ts +19 -0
- package/dist/src/storage/providers/postgres-kysely/methods/catalogue.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/catalogue.js +96 -0
- package/dist/src/storage/providers/postgres-kysely/methods/catalogue.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/consent.d.ts +26 -0
- package/dist/src/storage/providers/postgres-kysely/methods/consent.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/consent.js +119 -0
- package/dist/src/storage/providers/postgres-kysely/methods/consent.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/device-auth.d.ts +13 -0
- package/dist/src/storage/providers/postgres-kysely/methods/device-auth.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/device-auth.js +68 -0
- package/dist/src/storage/providers/postgres-kysely/methods/device-auth.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/direct-message.d.ts +72 -0
- package/dist/src/storage/providers/postgres-kysely/methods/direct-message.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/direct-message.js +352 -0
- package/dist/src/storage/providers/postgres-kysely/methods/direct-message.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/ecosystem.d.ts +22 -0
- package/dist/src/storage/providers/postgres-kysely/methods/ecosystem.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/ecosystem.js +201 -0
- package/dist/src/storage/providers/postgres-kysely/methods/ecosystem.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/federation.d.ts +42 -0
- package/dist/src/storage/providers/postgres-kysely/methods/federation.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/federation.js +295 -0
- package/dist/src/storage/providers/postgres-kysely/methods/federation.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/feedback.d.ts +15 -0
- package/dist/src/storage/providers/postgres-kysely/methods/feedback.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/feedback.js +52 -0
- package/dist/src/storage/providers/postgres-kysely/methods/feedback.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts +20 -0
- package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/files.js +108 -0
- package/dist/src/storage/providers/postgres-kysely/methods/files.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/identity-extras.d.ts +19 -0
- package/dist/src/storage/providers/postgres-kysely/methods/identity-extras.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/identity-extras.js +101 -0
- package/dist/src/storage/providers/postgres-kysely/methods/identity-extras.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/identity.d.ts +35 -0
- package/dist/src/storage/providers/postgres-kysely/methods/identity.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/identity.js +302 -0
- package/dist/src/storage/providers/postgres-kysely/methods/identity.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/knowledge.d.ts +21 -0
- package/dist/src/storage/providers/postgres-kysely/methods/knowledge.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/knowledge.js +65 -0
- package/dist/src/storage/providers/postgres-kysely/methods/knowledge.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/marketplace.d.ts +24 -0
- package/dist/src/storage/providers/postgres-kysely/methods/marketplace.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/marketplace.js +122 -0
- package/dist/src/storage/providers/postgres-kysely/methods/marketplace.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/memory.d.ts +81 -0
- package/dist/src/storage/providers/postgres-kysely/methods/memory.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/memory.js +342 -0
- package/dist/src/storage/providers/postgres-kysely/methods/memory.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/micro-memory.d.ts +15 -0
- package/dist/src/storage/providers/postgres-kysely/methods/micro-memory.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/micro-memory.js +55 -0
- package/dist/src/storage/providers/postgres-kysely/methods/micro-memory.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/moderation.d.ts +38 -0
- package/dist/src/storage/providers/postgres-kysely/methods/moderation.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/moderation.js +176 -0
- package/dist/src/storage/providers/postgres-kysely/methods/moderation.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/node-ext-escrow.d.ts +38 -0
- package/dist/src/storage/providers/postgres-kysely/methods/node-ext-escrow.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/node-ext-escrow.js +243 -0
- package/dist/src/storage/providers/postgres-kysely/methods/node-ext-escrow.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/node-infra.d.ts +30 -0
- package/dist/src/storage/providers/postgres-kysely/methods/node-infra.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/node-infra.js +158 -0
- package/dist/src/storage/providers/postgres-kysely/methods/node-infra.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/notifications.d.ts +19 -0
- package/dist/src/storage/providers/postgres-kysely/methods/notifications.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/notifications.js +106 -0
- package/dist/src/storage/providers/postgres-kysely/methods/notifications.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/oauth.d.ts +20 -0
- package/dist/src/storage/providers/postgres-kysely/methods/oauth.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/oauth.js +94 -0
- package/dist/src/storage/providers/postgres-kysely/methods/oauth.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.d.ts +46 -0
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.js +247 -0
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/otk.d.ts +10 -0
- package/dist/src/storage/providers/postgres-kysely/methods/otk.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/otk.js +60 -0
- package/dist/src/storage/providers/postgres-kysely/methods/otk.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/packages.d.ts +32 -0
- package/dist/src/storage/providers/postgres-kysely/methods/packages.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/packages.js +228 -0
- package/dist/src/storage/providers/postgres-kysely/methods/packages.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/pat.d.ts +10 -0
- package/dist/src/storage/providers/postgres-kysely/methods/pat.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/pat.js +36 -0
- package/dist/src/storage/providers/postgres-kysely/methods/pat.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/schedules.d.ts +32 -0
- package/dist/src/storage/providers/postgres-kysely/methods/schedules.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/schedules.js +131 -0
- package/dist/src/storage/providers/postgres-kysely/methods/schedules.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/schema.d.ts +10 -0
- package/dist/src/storage/providers/postgres-kysely/methods/schema.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/schema.js +88 -0
- package/dist/src/storage/providers/postgres-kysely/methods/schema.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/sessions.d.ts +38 -0
- package/dist/src/storage/providers/postgres-kysely/methods/sessions.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/sessions.js +66 -0
- package/dist/src/storage/providers/postgres-kysely/methods/sessions.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/subdomain-sites.d.ts +10 -0
- package/dist/src/storage/providers/postgres-kysely/methods/subdomain-sites.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/subdomain-sites.js +36 -0
- package/dist/src/storage/providers/postgres-kysely/methods/subdomain-sites.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/system-extras.d.ts +23 -0
- package/dist/src/storage/providers/postgres-kysely/methods/system-extras.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/system-extras.js +109 -0
- package/dist/src/storage/providers/postgres-kysely/methods/system-extras.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/system.d.ts +32 -0
- package/dist/src/storage/providers/postgres-kysely/methods/system.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/system.js +144 -0
- package/dist/src/storage/providers/postgres-kysely/methods/system.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/template-listings.d.ts +34 -0
- package/dist/src/storage/providers/postgres-kysely/methods/template-listings.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/template-listings.js +278 -0
- package/dist/src/storage/providers/postgres-kysely/methods/template-listings.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.d.ts +13 -0
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.js +129 -0
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/work.d.ts +14 -0
- package/dist/src/storage/providers/postgres-kysely/methods/work.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/work.js +80 -0
- package/dist/src/storage/providers/postgres-kysely/methods/work.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/migrate.d.ts +4 -0
- package/dist/src/storage/providers/postgres-kysely/migrate.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/migrate.js +40 -0
- package/dist/src/storage/providers/postgres-kysely/migrate.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0001_base_schema.sql +2406 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0002_memory_fts.sql +20 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0003_id_defaults.sql +15 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0004_otk_initial.sql +4 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0005_storage_stats.sql +9 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0006_membership_invited_workspaces.sql +5 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0007_contacts_origin.sql +5 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0008_feedback.sql +21 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0009_invitation_return_url.sql +7 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0010_agent_model.sql +5 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0011_unique_verified_email.sql +25 -0
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +4 -1
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts +12 -1
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/apps.js +42 -0
- package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/capability-agents.d.ts +12 -1
- package/dist/src/storage/providers/sqlite/methods/capability-agents.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/capability-agents.js +42 -0
- package/dist/src/storage/providers/sqlite/methods/capability-agents.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/community.d.ts +6 -0
- package/dist/src/storage/providers/sqlite/methods/community.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/community.js +29 -3
- package/dist/src/storage/providers/sqlite/methods/community.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/extensions-notify.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/extensions-notify.js +11 -2
- package/dist/src/storage/providers/sqlite/methods/extensions-notify.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/feedback.d.ts +23 -0
- package/dist/src/storage/providers/sqlite/methods/feedback.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/feedback.js +64 -0
- package/dist/src/storage/providers/sqlite/methods/feedback.js.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/governance.d.ts +5 -0
- package/dist/src/storage/providers/sqlite/methods/governance.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/governance.js +43 -9
- package/dist/src/storage/providers/sqlite/methods/governance.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts +9 -0
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.js +52 -0
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/messaging.d.ts +15 -1
- package/dist/src/storage/providers/sqlite/methods/messaging.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/messaging.js +11 -2
- package/dist/src/storage/providers/sqlite/methods/messaging.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/owner-memory-bulk.d.ts +28 -0
- package/dist/src/storage/providers/sqlite/methods/owner-memory-bulk.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/owner-memory-bulk.js +101 -0
- package/dist/src/storage/providers/sqlite/methods/owner-memory-bulk.js.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/owner-memory-scope.d.ts +35 -0
- package/dist/src/storage/providers/sqlite/methods/owner-memory-scope.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/owner-memory-scope.js +118 -0
- package/dist/src/storage/providers/sqlite/methods/owner-memory-scope.js.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/owner.d.ts +6 -0
- package/dist/src/storage/providers/sqlite/methods/owner.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/owner.js +41 -9
- package/dist/src/storage/providers/sqlite/methods/owner.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/work.d.ts +8 -0
- package/dist/src/storage/providers/sqlite/methods/work.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/work.js +31 -0
- package/dist/src/storage/providers/sqlite/methods/work.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/action.d.ts +3 -0
- package/dist/src/storage/providers/sqlite/repos/action.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/action.js +9 -0
- package/dist/src/storage/providers/sqlite/repos/action.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent.js +8 -4
- package/dist/src/storage/providers/sqlite/repos/agent.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/community.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/repos/community.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/community.js +9 -3
- package/dist/src/storage/providers/sqlite/repos/community.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts +13 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.js +70 -5
- package/dist/src/storage/providers/sqlite/repos/direct-message.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts +7 -0
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.js +24 -3
- package/dist/src/storage/providers/sqlite/repos/memory.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/storage-file.d.ts +12 -0
- package/dist/src/storage/providers/sqlite/repos/storage-file.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/storage-file.js +24 -0
- package/dist/src/storage/providers/sqlite/repos/storage-file.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-1.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/schema-tables-1.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-1.js +18 -1
- package/dist/src/storage/providers/sqlite/schema-tables-1.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-2.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/schema-tables-2.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-2.js +4 -1
- package/dist/src/storage/providers/sqlite/schema-tables-2.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-3.js +11 -1
- package/dist/src/storage/providers/sqlite/schema-tables-3.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts +0 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +44 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/action.repository.d.ts +2 -0
- package/dist/src/storage/repositories/action.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/agent.repository.d.ts +3 -0
- package/dist/src/storage/repositories/agent.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/app.repository.d.ts +0 -0
- package/dist/src/storage/repositories/app.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/consent.repository.d.ts +10 -0
- package/dist/src/storage/repositories/consent.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/direct-message.repository.d.ts +36 -11
- package/dist/src/storage/repositories/direct-message.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/direct-message.repository.js +2 -0
- package/dist/src/storage/repositories/direct-message.repository.js.map +1 -1
- package/dist/src/storage/repositories/feedback.repository.d.ts +28 -0
- package/dist/src/storage/repositories/feedback.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/feedback.repository.js +13 -0
- package/dist/src/storage/repositories/feedback.repository.js.map +1 -0
- package/dist/src/storage/repositories/file.repository.d.ts +11 -0
- package/dist/src/storage/repositories/file.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/identity.repository.d.ts +13 -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/invitation.repository.d.ts +3 -0
- package/dist/src/storage/repositories/invitation.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/invitation.repository.js +2 -0
- package/dist/src/storage/repositories/invitation.repository.js.map +1 -1
- package/dist/src/storage/repositories/memory.repository.d.ts +133 -1
- package/dist/src/storage/repositories/memory.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/micro-memory.repository.d.ts +6 -0
- package/dist/src/storage/repositories/micro-memory.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/organism.repository.d.ts +10 -0
- package/dist/src/storage/repositories/organism.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/stats.repository.d.ts +31 -2
- package/dist/src/storage/repositories/stats.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/stats.repository.js +5 -2
- package/dist/src/storage/repositories/stats.repository.js.map +1 -1
- package/dist/src/storage/repositories/work.repository.d.ts +7 -0
- package/dist/src/storage/repositories/work.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories-impl/memory-repository.d.ts +78 -0
- package/dist/src/storage/repositories-impl/memory-repository.d.ts.map +1 -0
- package/dist/src/storage/repositories-impl/memory-repository.js +121 -0
- package/dist/src/storage/repositories-impl/memory-repository.js.map +1 -0
- package/dist/src/storage/schema-lock-cache.d.ts +24 -0
- package/dist/src/storage/schema-lock-cache.d.ts.map +1 -0
- package/dist/src/storage/schema-lock-cache.js +19 -0
- package/dist/src/storage/schema-lock-cache.js.map +1 -0
- package/dist/src/storage/storage-factory.d.ts +6 -3
- package/dist/src/storage/storage-factory.d.ts.map +1 -1
- package/dist/src/storage/storage-factory.js +19 -12
- package/dist/src/storage/storage-factory.js.map +1 -1
- package/dist/src/storage/types/agents-messaging.d.ts +33 -0
- package/dist/src/storage/types/agents-messaging.d.ts.map +1 -1
- package/dist/src/storage/types/agents-messaging.js +3 -0
- package/dist/src/storage/types/agents-messaging.js.map +1 -1
- package/dist/src/storage/types/apps.d.ts +14 -0
- package/dist/src/storage/types/apps.d.ts.map +1 -1
- package/dist/src/storage/types/identity.d.ts +8 -0
- package/dist/src/storage/types/identity.d.ts.map +1 -1
- package/dist/src/storage/types/organisms-federation.d.ts +48 -0
- package/dist/src/storage/types/organisms-federation.d.ts.map +1 -1
- package/dist/src/storage/uow/batch-loader.d.ts +44 -0
- package/dist/src/storage/uow/batch-loader.d.ts.map +1 -0
- package/dist/src/storage/uow/batch-loader.js +101 -0
- package/dist/src/storage/uow/batch-loader.js.map +1 -0
- package/dist/src/storage/uow/identity-map.d.ts +0 -0
- package/dist/src/storage/uow/identity-map.d.ts.map +1 -0
- package/dist/src/storage/uow/identity-map.js +0 -0
- package/dist/src/storage/uow/identity-map.js.map +1 -0
- package/dist/src/storage/uow/unit-of-work.d.ts +42 -0
- package/dist/src/storage/uow/unit-of-work.d.ts.map +1 -0
- package/dist/src/storage/uow/unit-of-work.js +89 -0
- package/dist/src/storage/uow/unit-of-work.js.map +1 -0
- package/dist/src/utils/app-badge.d.ts +7 -22
- package/dist/src/utils/app-badge.d.ts.map +1 -1
- package/dist/src/utils/app-badge.js +59 -22
- package/dist/src/utils/app-badge.js.map +1 -1
- package/dist/src/utils/app-mobile-lint.d.ts +17 -0
- package/dist/src/utils/app-mobile-lint.d.ts.map +1 -0
- package/dist/src/utils/app-mobile-lint.js +40 -0
- package/dist/src/utils/app-mobile-lint.js.map +1 -0
- package/dist/src/utils/app-protect.d.ts +2 -0
- package/dist/src/utils/app-protect.d.ts.map +1 -1
- package/dist/src/utils/app-protect.js +3 -9
- package/dist/src/utils/app-protect.js.map +1 -1
- package/dist/src/utils/env-config/sections-node.js +4 -4
- package/dist/src/utils/env-config/sections-node.js.map +1 -1
- package/dist/src/utils/env-config/sections-platform.d.ts.map +1 -1
- package/dist/src/utils/env-config/sections-platform.js +0 -11
- package/dist/src/utils/env-config/sections-platform.js.map +1 -1
- package/dist/src/utils/env-validator.d.ts.map +1 -1
- package/dist/src/utils/env-validator.js +10 -6
- package/dist/src/utils/env-validator.js.map +1 -1
- package/dist/src/utils/html-inject.d.ts +23 -0
- package/dist/src/utils/html-inject.d.ts.map +1 -0
- package/dist/src/utils/html-inject.js +42 -0
- package/dist/src/utils/html-inject.js.map +1 -0
- package/dist/src/utils/node-descriptor.d.ts.map +1 -1
- package/dist/src/utils/node-descriptor.js +0 -1
- package/dist/src/utils/node-descriptor.js.map +1 -1
- package/dist/static/app-catalog/_template.html +27 -77
- package/dist/static/app-catalog/js/app-agents.js +232 -0
- package/dist/static/app-catalog/js/apps-io.js +51 -165
- package/dist/static/app-catalog/js/cortex.js +114 -0
- package/dist/static/app-catalog/js/cost.js +100 -0
- package/dist/static/app-catalog/js/db.js +23 -93
- package/dist/static/app-catalog/js/detail.js +196 -24
- package/dist/static/app-catalog/js/favorites.js +71 -0
- package/dist/static/app-catalog/js/i18n-data.js +168 -16
- package/dist/static/app-catalog/js/main.js +29 -103
- package/dist/static/app-catalog/js/migrate.js +88 -0
- package/dist/static/app-catalog/js/monetize.js +1 -1
- package/dist/static/app-catalog/js/promote.js +70 -0
- package/dist/static/app-catalog/js/render.js +56 -150
- package/dist/static/app-catalog/js/server-io.js +126 -214
- package/dist/static/app-catalog/js/settings.js +11 -204
- package/dist/static/app-catalog/styles/app-catalog.css +136 -9
- package/dist/static/app-catalog.html +1364 -976
- package/dist/static/sdk-libs/_core/config.js +52 -0
- package/dist/static/sdk-libs/_core/http.js +52 -0
- package/dist/static/sdk-libs/_core/namespace.js +33 -0
- package/dist/static/sdk-libs/_core/sdk-globals.d.ts +50 -0
- package/dist/static/sdk-libs/_core/session.js +66 -0
- package/dist/static/sdk-libs/agentface/index.js +102 -0
- package/dist/static/sdk-libs/agents/index.js +267 -0
- package/dist/static/sdk-libs/ai/index.js +153 -0
- package/dist/static/sdk-libs/audio/core.js +111 -0
- package/dist/static/sdk-libs/audio/index.js +380 -0
- package/dist/static/sdk-libs/audio/instruments.js +369 -0
- package/dist/static/sdk-libs/auth/config.js +46 -0
- package/dist/static/sdk-libs/auth/crypto.js +166 -0
- package/dist/static/sdk-libs/auth/events.js +27 -0
- package/dist/static/sdk-libs/auth/i18n.js +64 -0
- package/dist/static/sdk-libs/auth/index.js +37 -0
- package/dist/static/sdk-libs/auth/modal.js +545 -0
- package/dist/static/sdk-libs/auth/pill.js +167 -0
- package/dist/static/sdk-libs/auth/session.js +792 -0
- package/dist/static/sdk-libs/auth/signup.js +232 -0
- package/dist/static/sdk-libs/auth/theme.js +96 -0
- package/dist/static/sdk-libs/capabilities/index.js +179 -0
- package/dist/static/sdk-libs/commerce/index.js +243 -0
- package/dist/static/sdk-libs/data/index.js +188 -0
- package/dist/static/sdk-libs/dist/aimeat-agentface.js +91 -0
- package/dist/static/sdk-libs/dist/aimeat-agents.js +315 -0
- package/dist/static/sdk-libs/dist/aimeat-ai.js +168 -0
- package/dist/static/sdk-libs/dist/aimeat-audio.js +979 -0
- package/dist/static/sdk-libs/dist/aimeat-auth.js +1831 -0
- package/dist/static/sdk-libs/dist/aimeat-capabilities.js +177 -0
- package/dist/static/sdk-libs/dist/aimeat-commerce.js +265 -0
- package/dist/static/sdk-libs/dist/aimeat-data.js +205 -0
- package/dist/static/sdk-libs/dist/aimeat-editor.js +299 -0
- package/dist/static/sdk-libs/dist/aimeat-header.js +270 -0
- package/dist/static/sdk-libs/dist/aimeat-intake.js +94 -0
- package/dist/static/sdk-libs/dist/aimeat-live.js +265 -0
- package/dist/static/sdk-libs/dist/aimeat-markdown.js +602 -0
- package/dist/static/sdk-libs/dist/aimeat-organism.js +394 -0
- package/dist/static/sdk-libs/dist/aimeat-portfolio-standalone.js +90 -0
- package/dist/static/sdk-libs/dist/aimeat-social.js +157 -0
- package/dist/static/sdk-libs/dist/aimeat-speech.js +300 -0
- package/dist/static/sdk-libs/dist/aimeat-storage.js +210 -0
- package/dist/static/sdk-libs/dist/aimeat-tunnel.js +383 -0
- package/dist/static/sdk-libs/dist/aimeat-wallet.js +118 -0
- package/dist/static/sdk-libs/dist/aimeat-webmcp.js +187 -0
- package/dist/static/sdk-libs/dist/aimeat-work.js +213 -0
- package/dist/static/sdk-libs/dist/aimeat-workflows.js +147 -0
- package/dist/static/sdk-libs/editor/index.js +229 -0
- package/dist/static/sdk-libs/header/index.js +249 -0
- package/dist/static/sdk-libs/intake/index.js +75 -0
- package/dist/static/sdk-libs/live/index.js +156 -0
- package/dist/static/sdk-libs/markdown/index.js +522 -0
- package/dist/static/sdk-libs/organism/index.js +381 -0
- package/dist/static/sdk-libs/portfolio-standalone/index.js +78 -0
- package/dist/static/sdk-libs/social/index.js +140 -0
- package/dist/static/sdk-libs/speech/index.js +321 -0
- package/dist/static/sdk-libs/storage/index.js +189 -0
- package/dist/static/sdk-libs/tunnel/index.js +428 -0
- package/dist/static/sdk-libs/wallet/index.js +115 -0
- package/dist/static/sdk-libs/webmcp/index.js +185 -0
- package/dist/static/sdk-libs/work/index.js +191 -0
- package/dist/static/sdk-libs/workflows/index.js +113 -0
- package/package.json +23 -21
- package/prisma/schema.postgres.prisma +0 -1789
- package/prisma/schema.prisma +0 -1787
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
<!DOCTYPE html>
|
|
3
3
|
<!--
|
|
4
4
|
@file src/static/app-catalog.html
|
|
5
|
-
@description Self-contained "My Apps" launcher SPA (
|
|
6
|
-
publishing, and
|
|
7
|
-
|
|
5
|
+
@description Self-contained "My Apps" launcher SPA (SERVER-ONLY — no browser persistence) for
|
|
6
|
+
creating, publishing, and managing the owner's server apps. Creating an app publishes it to the
|
|
7
|
+
server (unlisted); nothing is stored in the browser. Runs published app HTML only inside a
|
|
8
|
+
sandboxed, opaque-origin iframe — never as a top-level document on the apex origin (H-2).
|
|
8
9
|
@structure Inline <style> theme; markup; large inline <script> exposing window._launcher.
|
|
9
10
|
@usage Served at GET /app-catalog.html (relaxed CSP) from server-bootstrap/static-files.ts.
|
|
10
11
|
@version-history
|
|
@@ -116,6 +117,15 @@
|
|
|
116
117
|
(text-align: justify + text-align-last: center) so a wrapped description reads flush instead
|
|
117
118
|
of showing the ragged "sahalaita" the centered card produced; short single-line sources stay
|
|
118
119
|
centered. Adds overflow-wrap/hyphens so long words no longer spill past the card edge.
|
|
120
|
+
v2.15.0 — 2026-07-16 — Card layout pass: clamp .app-source to 4 lines (long descriptions no
|
|
121
|
+
longer overflow), pin .app-actions to the card bottom + always-visible (buttons stop
|
|
122
|
+
"hyppelehtii"), retire the .st-server badge, add the purple .app-staging-badge pill +
|
|
123
|
+
.act-staging "Open staging" button styling.
|
|
124
|
+
v2.15.1 — 2026-07-18 — Fix the "Bundled agents" modal (Inspect & deploy) rendering inline at the
|
|
125
|
+
bottom of the page instead of as a centered overlay: #agents-overlay was missing from the shared
|
|
126
|
+
overlay-wrapper rule (position:fixed/inset:0/z-index/backdrop) and its [hidden] display:none
|
|
127
|
+
counterpart, so it had no modal styling at all — same class of miss as #lineage/#protection in
|
|
128
|
+
v2.9.1. Added #agents-overlay to both selector lists.
|
|
119
129
|
-->
|
|
120
130
|
<html lang="en">
|
|
121
131
|
<head>
|
|
@@ -532,18 +542,28 @@
|
|
|
532
542
|
text-align-last: center;
|
|
533
543
|
overflow-wrap: break-word;
|
|
534
544
|
hyphens: auto;
|
|
545
|
+
/* Clamp to a few lines so a long description (e.g. TELETYPE) never spills
|
|
546
|
+
past the card or shoves the action row around — every card stays uniform
|
|
547
|
+
and the buttons keep a fixed home at the bottom. */
|
|
548
|
+
display: -webkit-box;
|
|
549
|
+
-webkit-line-clamp: 4;
|
|
550
|
+
line-clamp: 4;
|
|
551
|
+
-webkit-box-orient: vertical;
|
|
552
|
+
overflow: hidden;
|
|
553
|
+
max-width: 100%;
|
|
535
554
|
}
|
|
536
555
|
|
|
556
|
+
/* Actions live at the BOTTOM of every card (margin-top:auto) and are always
|
|
557
|
+
visible — not hover-revealed — so the buttons never jump around or feel
|
|
558
|
+
"hyppelehtii". flex-wrap keeps the released/staging pair tidy on a narrow card. */
|
|
537
559
|
.app-card .app-actions {
|
|
538
560
|
display: flex;
|
|
561
|
+
flex-wrap: wrap;
|
|
562
|
+
justify-content: center;
|
|
539
563
|
gap: 6px;
|
|
540
|
-
margin-top:
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
.app-card:hover .app-actions {
|
|
546
|
-
opacity: 1;
|
|
564
|
+
margin-top: auto;
|
|
565
|
+
padding-top: 8px;
|
|
566
|
+
width: 100%;
|
|
547
567
|
}
|
|
548
568
|
|
|
549
569
|
.app-card .app-actions button {
|
|
@@ -579,6 +599,46 @@
|
|
|
579
599
|
opacity: 1;
|
|
580
600
|
}
|
|
581
601
|
|
|
602
|
+
/* ── Server-backed favourite toggle (⭐ on any app / published card) ─── */
|
|
603
|
+
.fav-toggle {
|
|
604
|
+
position: absolute;
|
|
605
|
+
top: 6px;
|
|
606
|
+
left: 8px;
|
|
607
|
+
background: none;
|
|
608
|
+
border: none;
|
|
609
|
+
cursor: pointer;
|
|
610
|
+
font-size: 1rem;
|
|
611
|
+
line-height: 1;
|
|
612
|
+
padding: 2px;
|
|
613
|
+
opacity: .5;
|
|
614
|
+
transition: opacity var(--transition), transform var(--transition);
|
|
615
|
+
z-index: 2;
|
|
616
|
+
}
|
|
617
|
+
.fav-toggle:hover { opacity: 1; transform: scale(1.15); }
|
|
618
|
+
.fav-toggle.on { opacity: 1; }
|
|
619
|
+
.published-card { position: relative; }
|
|
620
|
+
.published-card .fav-toggle { left: auto; right: 8px; top: 8px; }
|
|
621
|
+
.fav-section-title {
|
|
622
|
+
font-size: 1rem;
|
|
623
|
+
font-weight: 700;
|
|
624
|
+
color: var(--text);
|
|
625
|
+
display: flex;
|
|
626
|
+
align-items: center;
|
|
627
|
+
gap: 8px;
|
|
628
|
+
margin: 0 0 .6rem;
|
|
629
|
+
}
|
|
630
|
+
.fav-section-count { opacity: .6; font-weight: 400; }
|
|
631
|
+
|
|
632
|
+
/* "Promoted" badge in the detail Promote section */
|
|
633
|
+
.dtl-badge-on {
|
|
634
|
+
font-size: .7rem;
|
|
635
|
+
font-weight: 600;
|
|
636
|
+
color: #34d399;
|
|
637
|
+
border: 1px solid #34d399;
|
|
638
|
+
border-radius: 10px;
|
|
639
|
+
padding: 1px 8px;
|
|
640
|
+
}
|
|
641
|
+
|
|
582
642
|
/* ── Card Menu Button ─────────────────────────────── */
|
|
583
643
|
|
|
584
644
|
.card-menu-btn {
|
|
@@ -1501,6 +1561,7 @@
|
|
|
1501
1561
|
#json-import-overlay,
|
|
1502
1562
|
#lineage-overlay,
|
|
1503
1563
|
#confirm-overlay,
|
|
1564
|
+
#agents-overlay,
|
|
1504
1565
|
#protection-overlay {
|
|
1505
1566
|
position: fixed;
|
|
1506
1567
|
inset: 0;
|
|
@@ -1526,6 +1587,7 @@
|
|
|
1526
1587
|
#json-import-overlay[hidden],
|
|
1527
1588
|
#lineage-overlay[hidden],
|
|
1528
1589
|
#confirm-overlay[hidden],
|
|
1590
|
+
#agents-overlay[hidden],
|
|
1529
1591
|
#protection-overlay[hidden] {
|
|
1530
1592
|
display: none;
|
|
1531
1593
|
}
|
|
@@ -2063,22 +2125,82 @@
|
|
|
2063
2125
|
}
|
|
2064
2126
|
.app-status-badge.st-published { color: #0e9f6e; border-color: #0e9f6e55; }
|
|
2065
2127
|
.app-status-badge.st-parked { color: #d97706; border-color: #d9770655; }
|
|
2066
|
-
.app-status-badge.st-server { color: #3b82f6; border-color: #3b82f655; }
|
|
2067
2128
|
.app-card.server-only .app-icon { background: var(--bg-subtle); }
|
|
2068
|
-
|
|
2129
|
+
|
|
2130
|
+
/* Staging pill: an owner-only marker that this app has an UNPUBLISHED draft
|
|
2131
|
+
waiting alongside the live version. Purple so it reads as distinct from the
|
|
2132
|
+
green "Listed" / amber "Unlisted" publication-state badges. Sits just under
|
|
2133
|
+
the status badge (top-left, second row). */
|
|
2134
|
+
.app-staging-badge {
|
|
2135
|
+
position: absolute;
|
|
2136
|
+
top: 30px;
|
|
2137
|
+
left: 8px;
|
|
2138
|
+
z-index: 2;
|
|
2139
|
+
font-size: .58rem;
|
|
2140
|
+
font-weight: 700;
|
|
2141
|
+
letter-spacing: .02em;
|
|
2142
|
+
padding: 2px 7px;
|
|
2143
|
+
border-radius: 999px;
|
|
2144
|
+
background: color-mix(in srgb, #7c3aed 12%, var(--surface));
|
|
2145
|
+
color: #7c3aed;
|
|
2146
|
+
border: 1px solid #7c3aed55;
|
|
2147
|
+
}
|
|
2148
|
+
|
|
2149
|
+
/* The "Open staging" action mirrors the staging pill's accent so the two read
|
|
2150
|
+
as the same concept. */
|
|
2151
|
+
.app-card .app-actions button.act-staging {
|
|
2152
|
+
color: #7c3aed;
|
|
2153
|
+
border-color: #7c3aed55;
|
|
2154
|
+
}
|
|
2155
|
+
.app-card .app-actions button.act-staging:hover {
|
|
2156
|
+
border-color: #7c3aed;
|
|
2157
|
+
background: color-mix(in srgb, #7c3aed 10%, transparent);
|
|
2158
|
+
color: #7c3aed;
|
|
2159
|
+
}
|
|
2160
|
+
|
|
2161
|
+
/* Prompt-builder capability-pack picker (Library Acceleration Program, Phase 4) */
|
|
2162
|
+
.pb-packs { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
|
|
2163
|
+
.pb-pack-item { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--card); font-size: 13px; cursor: pointer; user-select: none; }
|
|
2164
|
+
.pb-pack-item:hover { border-color: var(--accent); }
|
|
2165
|
+
.pb-pack-item input { accent-color: var(--accent); margin: 0; }
|
|
2166
|
+
.pb-pack-item:has(input:checked) { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, var(--card)); }
|
|
2167
|
+
/* AEB reliability-tier badge on each pack (tools/aeb/acceleration-tiers.md). */
|
|
2168
|
+
.pb-pack-tier { font-size: 10px; text-transform: uppercase; letter-spacing: .03em; padding: 1px 5px; border-radius: 999px; background: color-mix(in srgb, var(--text-muted) 15%, transparent); color: var(--text-muted); font-weight: 600; cursor: help; }
|
|
2169
|
+
.pb-pack-tier.pb-tier-frontier { background: color-mix(in srgb, var(--accent) 20%, transparent); color: var(--accent); }
|
|
2170
|
+
|
|
2171
|
+
/* ── Bundled-agents modal (Agent-Bundled Apps) — inspector, hosted instances, deploy form ── */
|
|
2172
|
+
.aga-app-ref { font-size: .78rem; color: var(--text-muted); font-weight: normal; margin-left: 6px; }
|
|
2173
|
+
.aga-body { max-height: 62vh; overflow-y: auto; font-size: .88rem; }
|
|
2174
|
+
.aga-intro { font-size: .82rem; color: var(--text-muted); margin-bottom: 10px; }
|
|
2175
|
+
.aga-def { border: 1px solid var(--border); border-radius: 10px; padding: 12px; margin-bottom: 12px; background: var(--card); }
|
|
2176
|
+
.aga-def h3 { margin: 0 0 8px; font-size: 1rem; }
|
|
2177
|
+
.aga-label { font-weight: 600; font-size: .8rem; margin: 10px 0 4px; color: var(--text-muted); text-transform: uppercase; letter-spacing: .03em; }
|
|
2178
|
+
.aga-goal { color: var(--text-muted); font-size: .82rem; }
|
|
2179
|
+
.aga-crew-row { margin: 4px 0; }
|
|
2180
|
+
.aga-chips { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 3px; }
|
|
2181
|
+
.aga-chip { display: inline-block; padding: 1px 8px; border: 1px solid var(--border); border-radius: 999px; font-size: .72rem; color: var(--text-muted); background: var(--card); }
|
|
2182
|
+
.aga-chip-skill { border-color: var(--accent); color: var(--accent); }
|
|
2183
|
+
.aga-tasks { margin: 4px 0 0 18px; padding: 0; }
|
|
2184
|
+
.aga-tasks li { margin: 3px 0; }
|
|
2185
|
+
.aga-inst { border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; margin: 6px 0; }
|
|
2186
|
+
.aga-inst-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
|
|
2187
|
+
.aga-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--border); flex: none; }
|
|
2188
|
+
.aga-dot-on { background: #22c55e; }
|
|
2189
|
+
.aga-offer { display: flex; justify-content: space-between; gap: 10px; margin-top: 4px; font-size: .84rem; flex-wrap: wrap; }
|
|
2190
|
+
.aga-price { color: var(--accent); font-weight: 600; white-space: nowrap; }
|
|
2191
|
+
.aga-deploy-row { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; margin: 6px 0; }
|
|
2192
|
+
.aga-deploy-row label { display: flex; flex-direction: column; gap: 3px; font-size: .78rem; color: var(--text-muted); }
|
|
2193
|
+
.aga-select { min-width: 160px; padding: 5px 8px; }
|
|
2194
|
+
.aga-deploy-btn { white-space: nowrap; }
|
|
2195
|
+
.aga-btn-sm { padding: 2px 10px; font-size: .75rem; margin-left: auto; }
|
|
2196
|
+
.published-card-badgerow .pcb-agent { cursor: default; }
|
|
2197
|
+
</style>
|
|
2069
2198
|
</head>
|
|
2070
2199
|
<body data-active-view="library">
|
|
2071
2200
|
|
|
2072
2201
|
<header>
|
|
2073
2202
|
<a class="aimeat-cta aimeat-home" id="aimeat-home-link" href="/" data-i18n-title="cta.backHome" title="Back to home"><span class="aimeat-cta-spark">⚡</span><span id="aimeat-home-label">aimeat.io</span></a>
|
|
2074
2203
|
<h1 data-i18n="header.title">My Apps</h1>
|
|
2075
|
-
<div class="mode-toggle-wrap">
|
|
2076
|
-
<span class="mode-caption" data-i18n="mode.caption" data-i18n-title="mode.caption.title" title="These toggle which browser-local apps you see — not server visibility">Local apps</span>
|
|
2077
|
-
<div class="mode-toggle">
|
|
2078
|
-
<button id="mode-global" class="mode-btn active" onclick="window._launcher.switchDbMode('global')" data-i18n="mode.global" data-i18n-title="mode.global.title" title="Shared across all accounts on this browser">🌐 Shared</button>
|
|
2079
|
-
<button id="mode-personal" class="mode-btn" onclick="window._launcher.switchDbMode('personal')" data-i18n="mode.personal" data-i18n-title="mode.personal.title" title="Private to your account">👤 Mine</button>
|
|
2080
|
-
</div>
|
|
2081
|
-
</div>
|
|
2082
2204
|
<input type="text" id="search-input" placeholder="Search apps..." data-i18n-ph="search.ph" autocomplete="off" spellcheck="false"/>
|
|
2083
2205
|
<div class="header-actions">
|
|
2084
2206
|
<span id="headerAuth" class="header-auth-pill"></span>
|
|
@@ -2179,10 +2301,10 @@
|
|
|
2179
2301
|
<p class="view-empty-hint" data-i18n="view.communityHint">Community apps are apps other people on this node have published. When someone publishes one, it shows up here.</p>
|
|
2180
2302
|
</div>
|
|
2181
2303
|
|
|
2182
|
-
<!--
|
|
2183
|
-
<div id="
|
|
2184
|
-
<
|
|
2185
|
-
<div id="
|
|
2304
|
+
<!-- ⭐ Favourites group (Library) — apps the owner favourited, pinned above "Your apps" -->
|
|
2305
|
+
<div id="favorites-section" data-view="library" style="display:none;margin:0 24px 1rem">
|
|
2306
|
+
<h2 class="fav-section-title"><span data-i18n="fav.title">⭐ Favourites</span> <span id="favorites-count" class="fav-section-count"></span></h2>
|
|
2307
|
+
<div id="favorites-grid" class="published-grid"></div>
|
|
2186
2308
|
</div>
|
|
2187
2309
|
|
|
2188
2310
|
<div id="local-apps-block" class="local-apps-block" data-view="library">
|
|
@@ -2203,18 +2325,10 @@
|
|
|
2203
2325
|
<div class="modal" id="add-app-modal">
|
|
2204
2326
|
<h2 id="modal-title" data-i18n="addModal.title">Add App</h2>
|
|
2205
2327
|
|
|
2206
|
-
<!-- Source tabs -->
|
|
2328
|
+
<!-- Source tabs — server-only: paste HTML or upload an HTML/ZIP file; it publishes to your account. -->
|
|
2207
2329
|
<div class="modal-tabs">
|
|
2208
|
-
<button class="modal-tab active" data-tab="
|
|
2330
|
+
<button class="modal-tab active" data-tab="paste" data-i18n="tab.paste">Paste</button>
|
|
2209
2331
|
<button class="modal-tab" data-tab="file" data-i18n="tab.file">File</button>
|
|
2210
|
-
<button class="modal-tab" data-tab="paste" data-i18n="tab.paste">Paste</button>
|
|
2211
|
-
<button class="modal-tab" data-tab="aimeat" data-i18n="tab.aimeat">AIMEAT</button>
|
|
2212
|
-
</div>
|
|
2213
|
-
|
|
2214
|
-
<!-- URL tab content -->
|
|
2215
|
-
<div class="tab-content active" id="tab-url">
|
|
2216
|
-
<label class="modal-label" for="app-url" data-i18n="addModal.url">App URL</label>
|
|
2217
|
-
<input type="url" id="app-url" class="modal-input" placeholder="https://example.com/app.html" autocomplete="off"/>
|
|
2218
2332
|
</div>
|
|
2219
2333
|
|
|
2220
2334
|
<!-- File tab content -->
|
|
@@ -2230,22 +2344,12 @@
|
|
|
2230
2344
|
</div>
|
|
2231
2345
|
</div>
|
|
2232
2346
|
|
|
2233
|
-
<!-- Paste tab content -->
|
|
2234
|
-
<div class="tab-content" id="tab-paste">
|
|
2347
|
+
<!-- Paste tab content (default) -->
|
|
2348
|
+
<div class="tab-content active" id="tab-paste">
|
|
2235
2349
|
<label class="modal-label" for="app-paste-code" data-i18n="addModal.paste">Paste HTML Source Code</label>
|
|
2236
2350
|
<textarea id="app-paste-code" class="modal-input" rows="10" placeholder="Paste your HTML source code here..." data-i18n-ph="addModal.pastePh" style="font-family:'Consolas','Monaco','Courier New',monospace;font-size:.8rem;resize:vertical;min-height:160px;line-height:1.4"></textarea>
|
|
2237
2351
|
</div>
|
|
2238
2352
|
|
|
2239
|
-
<!-- AIMEAT tab content -->
|
|
2240
|
-
<div class="tab-content" id="tab-aimeat">
|
|
2241
|
-
<p style="font-size:.85rem;color:var(--text-muted);margin-bottom:14px;line-height:1.5" data-i18n="addModal.aimeatHelp">
|
|
2242
|
-
Import apps from a connected AIMEAT server. Configure the server URL in Settings first.
|
|
2243
|
-
</p>
|
|
2244
|
-
<button type="button" class="modal-btn primary" onclick="window._launcher.importFromAimeat()" style="width:100%" data-i18n="addModal.fetch">
|
|
2245
|
-
Fetch Available Apps
|
|
2246
|
-
</button>
|
|
2247
|
-
</div>
|
|
2248
|
-
|
|
2249
2353
|
<!-- Common fields -->
|
|
2250
2354
|
<div class="modal-fields">
|
|
2251
2355
|
<div class="modal-row">
|
|
@@ -2380,21 +2484,6 @@
|
|
|
2380
2484
|
</div>
|
|
2381
2485
|
</div>
|
|
2382
2486
|
|
|
2383
|
-
<div class="settings-section">
|
|
2384
|
-
<div class="settings-section-title" data-i18n="settings.backup">Backup & Restore</div>
|
|
2385
|
-
<div class="settings-backup-actions">
|
|
2386
|
-
<button type="button" class="modal-btn secondary" onclick="window._launcher.exportBackup()" data-i18n="settings.exportJson">Export JSON</button>
|
|
2387
|
-
<button type="button" class="modal-btn secondary" onclick="document.getElementById('import-file-input').click()" data-i18n="settings.importJson">Import JSON</button>
|
|
2388
|
-
<button type="button" class="modal-btn secondary" onclick="window._launcher.removeDuplicateApps()" data-i18n="dedup.btn">🧹 Remove duplicate apps</button>
|
|
2389
|
-
<input type="file" id="import-file-input" accept=".json" hidden/>
|
|
2390
|
-
</div>
|
|
2391
|
-
</div>
|
|
2392
|
-
|
|
2393
|
-
<div class="settings-section" style="margin-bottom:0">
|
|
2394
|
-
<div class="settings-section-title" data-i18n="settings.danger">Danger Zone</div>
|
|
2395
|
-
<button type="button" class="modal-btn danger" onclick="window._launcher.clearAllData()" data-i18n="settings.clearAll">Clear All Data</button>
|
|
2396
|
-
</div>
|
|
2397
|
-
|
|
2398
2487
|
<div class="modal-actions" style="margin-top:24px">
|
|
2399
2488
|
<button type="button" class="modal-btn secondary" id="settings-cancel-btn" data-i18n="common.cancel">Cancel</button>
|
|
2400
2489
|
<button type="button" class="modal-btn primary" id="settings-save-btn" data-i18n="common.save">Save</button>
|
|
@@ -2421,18 +2510,6 @@
|
|
|
2421
2510
|
</div>
|
|
2422
2511
|
</div>
|
|
2423
2512
|
|
|
2424
|
-
<!-- AIMEAT Import Dialog (dynamically populated) -->
|
|
2425
|
-
<div id="aimeat-import-overlay" hidden>
|
|
2426
|
-
<div class="modal" id="aimeat-import-modal">
|
|
2427
|
-
<h2 data-i18n="import.title">Import from AIMEAT</h2>
|
|
2428
|
-
<div class="aimeat-app-list" id="aimeat-app-list"></div>
|
|
2429
|
-
<div class="modal-actions">
|
|
2430
|
-
<button type="button" class="modal-btn secondary" onclick="document.getElementById('aimeat-import-overlay').hidden = true" data-i18n="common.cancel">Cancel</button>
|
|
2431
|
-
<button type="button" class="modal-btn primary" onclick="window._launcher.processAimeatImport()" data-i18n="import.selected">Import Selected</button>
|
|
2432
|
-
</div>
|
|
2433
|
-
</div>
|
|
2434
|
-
</div>
|
|
2435
|
-
|
|
2436
2513
|
<!-- Publish Modal -->
|
|
2437
2514
|
<div id="publish-overlay" hidden>
|
|
2438
2515
|
<div class="modal" id="publish-modal">
|
|
@@ -2460,20 +2537,6 @@
|
|
|
2460
2537
|
</div>
|
|
2461
2538
|
</div>
|
|
2462
2539
|
|
|
2463
|
-
<!-- JSON Backup Import Modal (user-selected, duplicate-aware) -->
|
|
2464
|
-
<div id="json-import-overlay" hidden>
|
|
2465
|
-
<div class="modal" id="json-import-modal">
|
|
2466
|
-
<h2 data-i18n="jsonImport.title">📥 Import JSON backup</h2>
|
|
2467
|
-
<div id="json-import-status" style="margin:4px 0;font-size:.85rem;min-height:1.1em"></div>
|
|
2468
|
-
<div id="json-import-body" style="overflow-y:auto;max-height:55vh"></div>
|
|
2469
|
-
<div class="modal-actions">
|
|
2470
|
-
<button type="button" class="modal-btn secondary" onclick="document.getElementById('json-import-overlay').hidden = true" data-i18n="common.cancel">Cancel</button>
|
|
2471
|
-
<button type="button" class="modal-btn primary" id="json-import-btn" onclick="window._launcher.submitJsonImport()" data-i18n="srvImport.import">Import selected</button>
|
|
2472
|
-
</div>
|
|
2473
|
-
</div>
|
|
2474
|
-
</div>
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
2540
|
<!-- Backup Import Modal -->
|
|
2478
2541
|
<div id="backup-overlay" hidden>
|
|
2479
2542
|
<div class="modal" id="backup-modal">
|
|
@@ -2533,6 +2596,18 @@
|
|
|
2533
2596
|
</div>
|
|
2534
2597
|
</div>
|
|
2535
2598
|
|
|
2599
|
+
<!-- Bundled-agents modal (Agent-Bundled Apps): crew-def inspector + hosted instances with
|
|
2600
|
+
public offer prices + "deploy your own" (runner/organism pickers) onto the owner's fleet -->
|
|
2601
|
+
<div id="agents-overlay" hidden>
|
|
2602
|
+
<div class="modal" id="agents-modal">
|
|
2603
|
+
<h2>🤖 <span data-i18n="agents.title">Bundled agents</span> <span id="agents-modal-app" class="aga-app-ref"></span></h2>
|
|
2604
|
+
<div id="agents-modal-body" class="aga-body"></div>
|
|
2605
|
+
<div class="modal-actions">
|
|
2606
|
+
<button type="button" class="modal-btn secondary" onclick="document.getElementById('agents-overlay').hidden = true" data-i18n="common.close">Close</button>
|
|
2607
|
+
</div>
|
|
2608
|
+
</div>
|
|
2609
|
+
</div>
|
|
2610
|
+
|
|
2536
2611
|
<!-- Copy-protection modal: opt-in per-app flags applied to the runnable HTML at serve time -->
|
|
2537
2612
|
<div id="protection-overlay" hidden>
|
|
2538
2613
|
<div class="modal" id="protection-modal">
|
|
@@ -2567,6 +2642,9 @@
|
|
|
2567
2642
|
<textarea class="pb-desc-area" id="pb-description" placeholder="Describe what the app should do..." data-i18n-ph="pb.descPh"></textarea>
|
|
2568
2643
|
<label class="pb-ext-toggle" for="pb-template"><span>✨ <span data-i18n="pb.template">Start from a template (optional)</span></span></label>
|
|
2569
2644
|
<select id="pb-template" class="modal-input pb-template-select"><option value="">(none — build from scratch)</option></select>
|
|
2645
|
+
<div class="pb-ext-toggle"><span>🧰 <span data-i18n="pb.packs">Capability packs (optional)</span></span></div>
|
|
2646
|
+
<p class="pb-step-hint" data-i18n="pb.packsHint">Charts, editable flow diagrams, games, 3D… — self-hosted libraries with AI instructions baked into the prompt. Your idea text pre-selects matching packs.</p>
|
|
2647
|
+
<div class="pb-packs" id="pb-packs"></div>
|
|
2570
2648
|
</div>
|
|
2571
2649
|
|
|
2572
2650
|
<div class="pb-step">
|
|
@@ -2614,14 +2692,14 @@
|
|
|
2614
2692
|
"action.settings": "Settings",
|
|
2615
2693
|
"action.help": "Help",
|
|
2616
2694
|
"help.title": "❓ How this catalog works",
|
|
2617
|
-
"help.modesTitle": "
|
|
2618
|
-
"help.modes":
|
|
2695
|
+
"help.modesTitle": "Creating an app",
|
|
2696
|
+
"help.modes": "Add app lets you paste HTML or upload an HTML/ZIP file (or Generate with AI). It publishes straight to your account as UNLISTED — on the server but not yet public — so you can review it before listing. Nothing is stored only in your browser.",
|
|
2619
2697
|
"help.whereTitle": "Where your apps live",
|
|
2620
|
-
"help.where": "
|
|
2698
|
+
"help.where": "Every app lives on the server under your account — the catalog is server-only, so nothing is kept in this browser. Your apps follow you to any browser or device automatically.",
|
|
2621
2699
|
"help.sectionsTitle": "The two views",
|
|
2622
|
-
"help.sections": "Two tabs. Library = your apps
|
|
2700
|
+
"help.sections": "Two tabs. Library = your apps, each as one card whose badge shows its publication state — Listed (public in the catalogue) or Unlisted (on the server but hidden from the catalogue, still usable by you and anyone with the link). A purple Staging pill marks an app that also has an unpublished draft waiting. Community = apps other people have published.",
|
|
2623
2701
|
"help.backupTitle": '"Backup" means two different things',
|
|
2624
|
-
"help.backup": "The 💾 menu (top bar) exports/imports your SERVER apps + extensions as a .zip
|
|
2702
|
+
"help.backup": "The 💾 menu (top bar) exports/imports your SERVER apps + extensions as a .zip — a full server-side backup you can restore selectively.",
|
|
2625
2703
|
"help.standaloneTitle": "Which node this talks to",
|
|
2626
2704
|
"help.standalone": "This catalog is served by its node and always talks to that node (same-origin) — the Server URL in Settings is fixed to it. To use your own, open /app-catalog.html on your node: localhost, aimeat-desktop, and federated nodes each serve their OWN catalog.",
|
|
2627
2705
|
"action.theme": "Toggle light / dark",
|
|
@@ -2656,8 +2734,11 @@
|
|
|
2656
2734
|
"sec.parkedBlurb": "Only you can see and use these — they stay usable but are hidden from the public catalogue. Press Publish to move one back to Published Apps.",
|
|
2657
2735
|
"sec.recent": "🕒 Recently Opened",
|
|
2658
2736
|
"sec.local": "📚 Your apps",
|
|
2659
|
-
"sec.localNote": "One card per app. The badge shows
|
|
2660
|
-
"sec.localHint": "💡
|
|
2737
|
+
"sec.localNote": "One card per app. The badge shows its publication state — Listed (public in the catalogue) or Unlisted (on the server but hidden from the public catalogue). A purple Staging pill marks an app that also has an unpublished draft.",
|
|
2738
|
+
"sec.localHint": "💡 Add app publishes to your account as unlisted — list it when it's ready to be public.",
|
|
2739
|
+
"fav.title": "⭐ Favourites",
|
|
2740
|
+
"fav.add": "Add to favourites",
|
|
2741
|
+
"fav.remove": "Remove from favourites",
|
|
2661
2742
|
"stats.apps": "apps",
|
|
2662
2743
|
"stats.stored": "stored",
|
|
2663
2744
|
"addModal.title": "Add App",
|
|
@@ -2723,6 +2804,8 @@
|
|
|
2723
2804
|
"publish.accessCodeHint": "4-64 chars. If set, only people with the code can download.",
|
|
2724
2805
|
"publish.submit": "Publish",
|
|
2725
2806
|
"publish.loginRequired": "Sign in to publish to AIMEAT. Anonymous publishing is disabled — use the Sign in button in the top bar.",
|
|
2807
|
+
"publish.savedUnlisted": "Saved — your app is on the server as unlisted. Open it and press List when you want it public.",
|
|
2808
|
+
"migrate.found": "You have {n} app(s) saved only in this browser from the old local catalog. The catalog is now server-only, so they no longer appear here. Download them as a JSON backup now? You can re-publish any you still want.",
|
|
2726
2809
|
"auth.signIn": "❤️ Sign In",
|
|
2727
2810
|
"auth.loggedIn": "logged in",
|
|
2728
2811
|
"auth.logout": "Logout",
|
|
@@ -2738,6 +2821,8 @@
|
|
|
2738
2821
|
"pb.step3": "Add & publish your app",
|
|
2739
2822
|
"pb.step3hint": "Got the code or HTML file from the AI? Paste it (or upload the file) here — it goes live on your node and you get a shareable link.",
|
|
2740
2823
|
"pb.template": "Start from a template (optional)",
|
|
2824
|
+
"pb.packs": "Capability packs (optional)",
|
|
2825
|
+
"pb.packsHint": "Charts, editable flow diagrams, games, 3D… — self-hosted libraries with AI instructions baked into the prompt. Your idea text pre-selects matching packs.",
|
|
2741
2826
|
"pb.noneTemplate": "(none — build from scratch)",
|
|
2742
2827
|
"pb.promptPreview": "Prompt preview",
|
|
2743
2828
|
"pb.addBtn": "➕ Add your app — paste it or upload the file",
|
|
@@ -2752,6 +2837,12 @@
|
|
|
2752
2837
|
"card.view": "Open",
|
|
2753
2838
|
"card.open": "Open",
|
|
2754
2839
|
"card.openHint": "Open this app",
|
|
2840
|
+
"card.openReleased": "Open released",
|
|
2841
|
+
"card.openReleasedHint": "Open the published (live) version",
|
|
2842
|
+
"card.openStaging": "Open staging",
|
|
2843
|
+
"card.openStagingHint": "Open the unpublished staging draft to test it — the live app is untouched",
|
|
2844
|
+
"card.stagingBadge": "Staging",
|
|
2845
|
+
"card.stagingHint": "This app has an unpublished staging draft waiting alongside the live version",
|
|
2755
2846
|
"common.menu": "Menu",
|
|
2756
2847
|
"status.local": "Local",
|
|
2757
2848
|
"status.published": "Listed",
|
|
@@ -2774,6 +2865,37 @@
|
|
|
2774
2865
|
"fork.failed": "Fork failed",
|
|
2775
2866
|
"detail.forkedFrom": "⑂ Forked from",
|
|
2776
2867
|
"card.forksHint": "View the fork lineage (who forked this, and where it came from)",
|
|
2868
|
+
"card.agent": "🤖 Agent",
|
|
2869
|
+
"card.agentHint": "This app ships its own agent - inspect it, use a hosted instance, or deploy your own",
|
|
2870
|
+
"agents.title": "Bundled agents",
|
|
2871
|
+
"agents.manage": "Inspect & deploy",
|
|
2872
|
+
"agents.none": "This app declares no bundled agents.",
|
|
2873
|
+
"agents.declares": "This app ships its own agent as a declarative crew definition. Use an instance someone already hosts (their prices below), or deploy your own copy onto your own fleet.",
|
|
2874
|
+
"agents.crew": "Crew",
|
|
2875
|
+
"agents.tasks": "Tasks",
|
|
2876
|
+
"agents.hostedTitle": "Hosted instances",
|
|
2877
|
+
"agents.hostedNone": "Nobody hosts this agent yet - deploy your own below and be the first.",
|
|
2878
|
+
"agents.hostedError": "Could not load hosted instances.",
|
|
2879
|
+
"agents.loading": "Loading…",
|
|
2880
|
+
"agents.you": "you",
|
|
2881
|
+
"agents.author": "author",
|
|
2882
|
+
"agents.trust": "trust",
|
|
2883
|
+
"agents.noOffers": "No public offers - contact the host to ask.",
|
|
2884
|
+
"agents.askPrice": "ask for price",
|
|
2885
|
+
"agents.instant": "instant",
|
|
2886
|
+
"agents.undeploy": "Undeploy",
|
|
2887
|
+
"agents.deployTitle": "Deploy your own",
|
|
2888
|
+
"agents.deployDesc": "Creates a deploy task on YOUR own runner agent (crew-forge). The fleet reads the crew definition from the app manifest and starts the agent under your account - it never runs on anyone else’s fleet.",
|
|
2889
|
+
"agents.runner": "Runner",
|
|
2890
|
+
"agents.organism": "Organism",
|
|
2891
|
+
"agents.deployBtn": "Deploy to my fleet",
|
|
2892
|
+
"agents.needLogin": "Sign in to deploy this agent onto your own fleet.",
|
|
2893
|
+
"agents.noRunner": "You have no runner agent yet. Connect a crew-forge (crewaimeat) from Profile → Agents first, then deploy.",
|
|
2894
|
+
"agents.noRunnerOption": "no agents - connect one first",
|
|
2895
|
+
"agents.deployFailed": "Deploy failed",
|
|
2896
|
+
"agents.deployStarted": "Deploy task started on your fleet",
|
|
2897
|
+
"agents.deployQueued": "Deploy task queued - start it from your agent’s Tasks",
|
|
2898
|
+
"agents.undeployQueued": "Undeploy task sent to your fleet",
|
|
2777
2899
|
"lineage.title": "Fork lineage",
|
|
2778
2900
|
"lineage.help": "Every app forked from this one (and where this one came from), with each fork's current status. The chain survives a fork being parked or deleted.",
|
|
2779
2901
|
"lineage.loading": "Loading lineage…",
|
|
@@ -2812,6 +2934,24 @@
|
|
|
2812
2934
|
"detail.iconLabel": "Icon (emoji)",
|
|
2813
2935
|
"detail.tagsLabel": "Tags (comma separated)",
|
|
2814
2936
|
"detail.descLabel": "Description",
|
|
2937
|
+
"detail.descEn": "Description (English)",
|
|
2938
|
+
"detail.descFi": "Description (Finnish)",
|
|
2939
|
+
"detail.translateEnFi": "Translate EN → FI",
|
|
2940
|
+
"detail.translateFiEn": "Translate FI → EN",
|
|
2941
|
+
"detail.translating": "Translating…",
|
|
2942
|
+
"detail.trDone": "Translated",
|
|
2943
|
+
"detail.trEmpty": "The AI returned nothing — try again.",
|
|
2944
|
+
"detail.trNeedSource": "Write the source-language description first.",
|
|
2945
|
+
"promote.title": "Promote",
|
|
2946
|
+
"promote.hint": "Showcase this app on your public profile with a short pitch. Fill English and/or Finnish; visitors see the one matching their language.",
|
|
2947
|
+
"promote.en": "Promotion text (English)",
|
|
2948
|
+
"promote.fi": "Promotion text (Finnish)",
|
|
2949
|
+
"promote.save": "Save promotion",
|
|
2950
|
+
"promote.remove": "Stop promoting",
|
|
2951
|
+
"promote.on": "Promoted",
|
|
2952
|
+
"promote.saving": "Saving…",
|
|
2953
|
+
"promote.saved": "Promoted on your profile.",
|
|
2954
|
+
"promote.removed": "No longer promoted.",
|
|
2815
2955
|
"detail.renameHint": "The app link stays the same — only the displayed name and description change.",
|
|
2816
2956
|
"detail.nameRequired": "Name cannot be empty.",
|
|
2817
2957
|
"detail.descRequired": "Description cannot be empty.",
|
|
@@ -2886,6 +3026,20 @@
|
|
|
2886
3026
|
"monetize.saved": "Tool manifest saved.",
|
|
2887
3027
|
"monetize.saveFailed": "Saving the tool manifest failed",
|
|
2888
3028
|
"monetize.needLogin": "Sign in to edit the tool manifest.",
|
|
3029
|
+
"cost.title": "📊 Cost & contracts — what this app sources",
|
|
3030
|
+
"cost.hint": "This app’s EXCHANGE contracts: durable metered entitlements it calls, with live spend against each budget and the platform rake. The per-call price comes from the provider; you set only the budget cap.",
|
|
3031
|
+
"cost.empty": "No EXCHANGE contracts yet — this app sources nothing priced.",
|
|
3032
|
+
"cost.summary": "{n} contract(s) · {spent} morsels spent · {calls} call(s)",
|
|
3033
|
+
"cost.capabilityCol": "Capability",
|
|
3034
|
+
"cost.providerCol": "Provider",
|
|
3035
|
+
"cost.priceCol": "Price / call",
|
|
3036
|
+
"cost.rakeCol": "Rake",
|
|
3037
|
+
"cost.budgetCol": "Budget (spent / cap)",
|
|
3038
|
+
"cost.stateCol": "State",
|
|
3039
|
+
"cost.uncapped": "uncapped",
|
|
3040
|
+
"cost.remaining": "{n} left",
|
|
3041
|
+
"cost.needLogin": "Sign in to view this app’s cost & contracts.",
|
|
3042
|
+
"cost.loadFailed": "Could not load cost & contracts",
|
|
2889
3043
|
"detail.editAccess": "Access code",
|
|
2890
3044
|
"detail.accessCodeHint": "Set or remove an optional code required to open this app.",
|
|
2891
3045
|
"detail.accessCodeLabel": "Access code",
|
|
@@ -2982,7 +3136,7 @@
|
|
|
2982
3136
|
"tag.favorites": "⭐ Favorites",
|
|
2983
3137
|
"empty.noApps": "No apps yet",
|
|
2984
3138
|
"empty.noAppsDesc": "Add your first app using the + button above",
|
|
2985
|
-
"empty.formats": "Supports: HTML files
|
|
3139
|
+
"empty.formats": "Supports: HTML files and ZIP packages",
|
|
2986
3140
|
"empty.noMatch": "No matches",
|
|
2987
3141
|
"empty.noMatchDesc": "No apps match the current filter. Try a different search term or tag."
|
|
2988
3142
|
},
|
|
@@ -3005,14 +3159,14 @@
|
|
|
3005
3159
|
"action.settings": "Asetukset",
|
|
3006
3160
|
"action.help": "Ohje",
|
|
3007
3161
|
"help.title": "❓ Miten tämä katalogi toimii",
|
|
3008
|
-
"help.modesTitle": "
|
|
3009
|
-
"help.modes":
|
|
3162
|
+
"help.modesTitle": "Sovelluksen luominen",
|
|
3163
|
+
"help.modes": "Lisää sovellus antaa liittää HTML:ää tai ladata HTML/ZIP-tiedoston (tai luoda sen tekoälyllä). Se julkaistaan suoraan tilillesi EI LISTALLA — palvelimelle mutta ei vielä julkiseksi — joten voit tarkistaa sen ennen listaamista. Mitään ei tallenneta vain selaimeesi.",
|
|
3010
3164
|
"help.whereTitle": "Missä appisi asuvat",
|
|
3011
|
-
"help.where": "
|
|
3165
|
+
"help.where": "Jokainen sovellus sijaitsee palvelimella tililläsi — katalogi on vain palvelinpohjainen, joten mitään ei säilytetä tässä selaimessa. Sovelluksesi seuraavat sinua mihin tahansa selaimeen tai laitteeseen automaattisesti.",
|
|
3012
3166
|
"help.sectionsTitle": "Kaksi näkymää",
|
|
3013
|
-
"help.sections": "Kaksi välilehteä. Kirjasto = sinun appisi
|
|
3167
|
+
"help.sections": "Kaksi välilehteä. Kirjasto = sinun appisi, jokainen yhtenä korttina jonka merkki kertoo julkaisutilan — Listalla (näkyy julkisessa katalogissa) tai Ei listalla (palvelimella mutta piilossa katalogista, sinä ja kuka tahansa linkillä voitte yhä käyttää). Violetti Staging-merkki kertoo että apilla on myös julkaisematon luonnos odottamassa. Yhteisö = muiden julkaisemat appit.",
|
|
3014
3168
|
"help.backupTitle": '"Varmuuskopio" tarkoittaa kahta eri asiaa',
|
|
3015
|
-
"help.backup": "💾-valikko (yläpalkki) vie/tuo PALVELIN-appisi + laajennukset .zip-tiedostona
|
|
3169
|
+
"help.backup": "💾-valikko (yläpalkki) vie/tuo PALVELIN-appisi + laajennukset .zip-tiedostona — täysi palvelinpuolen varmuuskopio, jonka voit palauttaa valikoiden.",
|
|
3016
3170
|
"help.standaloneTitle": "Mille nodelle tämä puhuu",
|
|
3017
3171
|
"help.standalone": "Tämän katalogin tarjoilee sen node, ja se puhuu aina sille nodelle (same-origin) — Asetusten Palvelin-URL on kiinnitetty siihen. Käyttääksesi omaa: avaa /app-catalog.html omalla nodellasi. localhost, aimeat-desktop ja federoidut nodet tarjoilevat kukin OMAN kataloginsa.",
|
|
3018
3172
|
"action.theme": "Vaihda vaalea / tumma",
|
|
@@ -3047,8 +3201,11 @@
|
|
|
3047
3201
|
"sec.parkedBlurb": "Vain sinä näet ja voit käyttää näitä — ne pysyvät käytettävissä mutta eivät näy julkisessa katalogissa. Paina Julkaise siirtääksesi takaisin julkaistuihin.",
|
|
3048
3202
|
"sec.recent": "🕒 Viimeksi avatut",
|
|
3049
3203
|
"sec.local": "📚 Sinun sovelluksesi",
|
|
3050
|
-
"sec.localNote": "Yksi kortti per sovellus. Merkki kertoo
|
|
3051
|
-
"sec.localHint": "💡
|
|
3204
|
+
"sec.localNote": "Yksi kortti per sovellus. Merkki kertoo julkaisutilan — Listalla (näkyy julkisessa katalogissa) tai Ei listalla (palvelimella mutta piilossa julkisesta katalogista). Violetti Staging-merkki kertoo että apilla on myös julkaisematon luonnos.",
|
|
3205
|
+
"sec.localHint": "💡 Lisää sovellus julkaisee tilillesi ei-listalla — listaa se kun se on valmis julkiseksi.",
|
|
3206
|
+
"fav.title": "⭐ Suosikit",
|
|
3207
|
+
"fav.add": "Lisää suosikkeihin",
|
|
3208
|
+
"fav.remove": "Poista suosikeista",
|
|
3052
3209
|
"stats.apps": "sovellusta",
|
|
3053
3210
|
"stats.stored": "tallennettu",
|
|
3054
3211
|
"addModal.title": "Lisää sovellus",
|
|
@@ -3114,6 +3271,8 @@
|
|
|
3114
3271
|
"publish.accessCodeHint": "4–64 merkkiä. Jos asetettu, vain koodin tietävät voivat ladata.",
|
|
3115
3272
|
"publish.submit": "Julkaise",
|
|
3116
3273
|
"publish.loginRequired": "Kirjaudu sisään julkaistaksesi AIMEATiin. Anonyymi julkaisu on poistettu käytöstä — käytä yläpalkin Kirjaudu-painiketta.",
|
|
3274
|
+
"publish.savedUnlisted": "Tallennettu — sovelluksesi on palvelimella ei-listalla. Avaa se ja paina Listaa kun haluat sen julkiseksi.",
|
|
3275
|
+
"migrate.found": "Sinulla on {n} sovellus(ta) tallennettuna vain tähän selaimeen vanhasta paikallisesta katalogista. Katalogi on nyt vain palvelinpohjainen, joten ne eivät enää näy täällä. Ladataanko ne nyt JSON-varmuuskopiona? Voit julkaista uudelleen ne jotka haluat säilyttää.",
|
|
3117
3276
|
"auth.signIn": "❤️ Kirjaudu",
|
|
3118
3277
|
"auth.loggedIn": "kirjautunut",
|
|
3119
3278
|
"auth.logout": "Kirjaudu ulos",
|
|
@@ -3129,6 +3288,8 @@
|
|
|
3129
3288
|
"pb.step3": "Lisää & julkaise sovelluksesi",
|
|
3130
3289
|
"pb.step3hint": "Saitko koodin tai HTML-tiedoston tekoälyltä? Liitä se (tai lataa tiedosto) tästä — se tulee live-tilaan solmuusi ja saat jaettavan linkin.",
|
|
3131
3290
|
"pb.template": "Aloita mallipohjasta (valinnainen)",
|
|
3291
|
+
"pb.packs": "Kyvykkyyspaketit (valinnainen)",
|
|
3292
|
+
"pb.packsHint": "Kaaviot, muokattavat vuokaaviot, pelit, 3D… — itse isännöidyt kirjastot, joiden AI-ohjeet leivotaan promptiin. Ideatekstisi esivalitsee sopivat paketit.",
|
|
3132
3293
|
"pb.noneTemplate": "(ei mitään — rakenna tyhjästä)",
|
|
3133
3294
|
"pb.promptPreview": "Promptin esikatselu",
|
|
3134
3295
|
"pb.addBtn": "➕ Lisää sovelluksesi — liitä se tai lataa tiedosto",
|
|
@@ -3143,6 +3304,12 @@
|
|
|
3143
3304
|
"card.view": "Avaa",
|
|
3144
3305
|
"card.open": "Avaa",
|
|
3145
3306
|
"card.openHint": "Avaa tämä sovellus",
|
|
3307
|
+
"card.openReleased": "Avaa julkaistu",
|
|
3308
|
+
"card.openReleasedHint": "Avaa julkaistu (live) versio",
|
|
3309
|
+
"card.openStaging": "Avaa staging",
|
|
3310
|
+
"card.openStagingHint": "Avaa julkaisematon staging-luonnos testattavaksi — live-appi pysyy ennallaan",
|
|
3311
|
+
"card.stagingBadge": "Staging",
|
|
3312
|
+
"card.stagingHint": "Tällä sovelluksella on julkaisematon staging-luonnos odottamassa live-version rinnalla",
|
|
3146
3313
|
"common.menu": "Valikko",
|
|
3147
3314
|
"status.local": "Paikallinen",
|
|
3148
3315
|
"status.published": "Listalla",
|
|
@@ -3165,6 +3332,37 @@
|
|
|
3165
3332
|
"fork.failed": "Haaroitus epäonnistui",
|
|
3166
3333
|
"detail.forkedFrom": "⑂ Haaroitettu kohteesta",
|
|
3167
3334
|
"card.forksHint": "Näytä haaroitushistoria (kuka haaroitti ja mistä tämä on peräisin)",
|
|
3335
|
+
"card.agent": "🤖 Agentti",
|
|
3336
|
+
"card.agentHint": "Tämä sovellus tuo mukanaan oman agentin - tutki sitä, käytä valmiiksi ylläpidettyä tai ota käyttöön oma",
|
|
3337
|
+
"agents.title": "Mukana tulevat agentit",
|
|
3338
|
+
"agents.manage": "Tutki ja ota käyttöön",
|
|
3339
|
+
"agents.none": "Tämä sovellus ei määrittele mukana tulevia agentteja.",
|
|
3340
|
+
"agents.declares": "Sovellus tuo mukanaan oman agentin deklaratiivisena crew-määrityksenä. Käytä jonkun jo ylläpitämää instanssia (hinnat alla) tai ota oma kopio käyttöön omaan laivueeseesi.",
|
|
3341
|
+
"agents.crew": "Työryhmä",
|
|
3342
|
+
"agents.tasks": "Tehtävät",
|
|
3343
|
+
"agents.hostedTitle": "Ylläpidetyt instanssit",
|
|
3344
|
+
"agents.hostedNone": "Kukaan ei vielä ylläpidä tätä agenttia - ota omasi käyttöön alta ensimmäisenä.",
|
|
3345
|
+
"agents.hostedError": "Instanssien lataus epäonnistui.",
|
|
3346
|
+
"agents.loading": "Ladataan…",
|
|
3347
|
+
"agents.you": "sinä",
|
|
3348
|
+
"agents.author": "tekijä",
|
|
3349
|
+
"agents.trust": "luottamus",
|
|
3350
|
+
"agents.noOffers": "Ei julkisia tarjoomia - kysy ylläpitäjältä.",
|
|
3351
|
+
"agents.askPrice": "kysy hintaa",
|
|
3352
|
+
"agents.instant": "välitön",
|
|
3353
|
+
"agents.undeploy": "Poista käytöstä",
|
|
3354
|
+
"agents.deployTitle": "Ota oma käyttöön",
|
|
3355
|
+
"agents.deployDesc": "Luo käyttöönottotehtävän OMALLE ajoagentillesi (crew-forge). Laivue lukee crew-määrityksen sovelluksen manifestista ja käynnistää agentin sinun tilisi alle - se ei koskaan aja kenenkään muun laivueessa.",
|
|
3356
|
+
"agents.runner": "Ajoagentti",
|
|
3357
|
+
"agents.organism": "Organismi",
|
|
3358
|
+
"agents.deployBtn": "Ota käyttöön laivueeseeni",
|
|
3359
|
+
"agents.needLogin": "Kirjaudu sisään ottaaksesi agentin käyttöön omaan laivueeseesi.",
|
|
3360
|
+
"agents.noRunner": "Sinulla ei ole vielä ajoagenttia. Yhdistä crew-forge (crewaimeat) ensin: Profiili → Agentit.",
|
|
3361
|
+
"agents.noRunnerOption": "ei agentteja - yhdistä ensin",
|
|
3362
|
+
"agents.deployFailed": "Käyttöönotto epäonnistui",
|
|
3363
|
+
"agents.deployStarted": "Käyttöönottotehtävä käynnistyi laivueessasi",
|
|
3364
|
+
"agents.deployQueued": "Käyttöönottotehtävä jonossa - käynnistä se agentin Tehtävistä",
|
|
3365
|
+
"agents.undeployQueued": "Käytöstäpoistotehtävä lähetetty laivueellesi",
|
|
3168
3366
|
"lineage.title": "Haaroitushistoria",
|
|
3169
3367
|
"lineage.help": "Kaikki tästä haaroitetut sovellukset (ja mistä tämä on peräisin), kunkin haaran nykyinen tila. Ketju säilyy, vaikka haara parkitaan tai poistetaan.",
|
|
3170
3368
|
"lineage.loading": "Ladataan historiaa…",
|
|
@@ -3203,6 +3401,24 @@
|
|
|
3203
3401
|
"detail.iconLabel": "Kuvake (emoji)",
|
|
3204
3402
|
"detail.tagsLabel": "Tunnisteet (pilkulla eroteltuna)",
|
|
3205
3403
|
"detail.descLabel": "Kuvaus",
|
|
3404
|
+
"detail.descEn": "Kuvaus (englanti)",
|
|
3405
|
+
"detail.descFi": "Kuvaus (suomi)",
|
|
3406
|
+
"detail.translateEnFi": "Käännä EN → FI",
|
|
3407
|
+
"detail.translateFiEn": "Käännä FI → EN",
|
|
3408
|
+
"detail.translating": "Käännetään…",
|
|
3409
|
+
"detail.trDone": "Käännetty",
|
|
3410
|
+
"detail.trEmpty": "Tekoäly ei palauttanut mitään — yritä uudelleen.",
|
|
3411
|
+
"detail.trNeedSource": "Kirjoita ensin lähdekielinen kuvaus.",
|
|
3412
|
+
"promote.title": "Nosto",
|
|
3413
|
+
"promote.hint": "Nosta tämä sovellus julkiseen profiiliisi lyhyellä myyntipuheella. Täytä englanti ja/tai suomi; vierailijat näkevät kieltään vastaavan.",
|
|
3414
|
+
"promote.en": "Nostoteksti (englanti)",
|
|
3415
|
+
"promote.fi": "Nostoteksti (suomi)",
|
|
3416
|
+
"promote.save": "Tallenna nosto",
|
|
3417
|
+
"promote.remove": "Lopeta nostaminen",
|
|
3418
|
+
"promote.on": "Nostettu",
|
|
3419
|
+
"promote.saving": "Tallennetaan…",
|
|
3420
|
+
"promote.saved": "Nostettu profiiliisi.",
|
|
3421
|
+
"promote.removed": "Ei enää nostettu.",
|
|
3206
3422
|
"detail.renameHint": "Sovelluksen linkki pysyy samana — vain näytettävä nimi ja kuvaus muuttuvat.",
|
|
3207
3423
|
"detail.nameRequired": "Nimi ei voi olla tyhjä.",
|
|
3208
3424
|
"detail.descRequired": "Kuvaus ei voi olla tyhjä.",
|
|
@@ -3275,6 +3491,20 @@
|
|
|
3275
3491
|
"monetize.saved": "Työkalumanifesti tallennettu.",
|
|
3276
3492
|
"monetize.saveFailed": "Työkalumanifestin tallennus epäonnistui",
|
|
3277
3493
|
"monetize.needLogin": "Kirjaudu sisään muokataksesi työkalumanifestia.",
|
|
3494
|
+
"cost.title": "📊 Kulut & sopimukset — mitä tämä appi hankkii",
|
|
3495
|
+
"cost.hint": "Tämän appin EXCHANGE-sopimukset: pysyvät mitatut käyttöoikeudet joita se kutsuu, live-kulutus kutakin budjettia vasten ja alustan siivu. Kutsukohtainen hinta tulee tarjoajalta; sinä asetat vain budjettikaton.",
|
|
3496
|
+
"cost.empty": "Ei vielä EXCHANGE-sopimuksia — tämä appi ei hanki mitään hinnoiteltua.",
|
|
3497
|
+
"cost.summary": "{n} sopimus(ta) · {spent} morselia käytetty · {calls} kutsu(a)",
|
|
3498
|
+
"cost.capabilityCol": "Kyvykkyys",
|
|
3499
|
+
"cost.providerCol": "Tarjoaja",
|
|
3500
|
+
"cost.priceCol": "Hinta / kutsu",
|
|
3501
|
+
"cost.rakeCol": "Siivu",
|
|
3502
|
+
"cost.budgetCol": "Budjetti (käytetty / katto)",
|
|
3503
|
+
"cost.stateCol": "Tila",
|
|
3504
|
+
"cost.uncapped": "ei kattoa",
|
|
3505
|
+
"cost.remaining": "{n} jäljellä",
|
|
3506
|
+
"cost.needLogin": "Kirjaudu sisään nähdäksesi tämän appin kulut & sopimukset.",
|
|
3507
|
+
"cost.loadFailed": "Kulujen & sopimusten lataus epäonnistui",
|
|
3278
3508
|
"detail.skillDetach": "Irrota",
|
|
3279
3509
|
"detail.skillAttachError": "Taidon liittäminen epäonnistui",
|
|
3280
3510
|
"detail.editAccess": "Pääsykoodi",
|
|
@@ -3373,7 +3603,7 @@
|
|
|
3373
3603
|
"tag.favorites": "⭐ Suosikit",
|
|
3374
3604
|
"empty.noApps": "Ei vielä sovelluksia",
|
|
3375
3605
|
"empty.noAppsDesc": "Lisää ensimmäinen sovellus yllä olevalla +-painikkeella",
|
|
3376
|
-
"empty.formats": "Tukee: HTML-tiedostot
|
|
3606
|
+
"empty.formats": "Tukee: HTML-tiedostot ja ZIP-paketit",
|
|
3377
3607
|
"empty.noMatch": "Ei osumia",
|
|
3378
3608
|
"empty.noMatchDesc": "Mikään sovellus ei vastaa nykyistä suodatinta. Kokeile eri hakusanaa tai tunnistetta."
|
|
3379
3609
|
}
|
|
@@ -3496,128 +3726,25 @@
|
|
|
3496
3726
|
}
|
|
3497
3727
|
|
|
3498
3728
|
// src/static/app-catalog/js/db.js
|
|
3499
|
-
var
|
|
3500
|
-
var DB_VERSION = 2;
|
|
3501
|
-
var STORE_NAME2 = "apps";
|
|
3502
|
-
var dbInstance = null;
|
|
3503
|
-
var currentDbMode = localStorage.getItem("appCatalogMode") || "global";
|
|
3504
|
-
function getDbMode() {
|
|
3505
|
-
return currentDbMode;
|
|
3506
|
-
}
|
|
3507
|
-
function setDbMode(mode) {
|
|
3508
|
-
currentDbMode = mode;
|
|
3509
|
-
try {
|
|
3510
|
-
localStorage.setItem("appCatalogMode", mode);
|
|
3511
|
-
} catch (e) {
|
|
3512
|
-
}
|
|
3513
|
-
}
|
|
3514
|
-
function closeDbInstance() {
|
|
3515
|
-
if (dbInstance) {
|
|
3516
|
-
try {
|
|
3517
|
-
dbInstance.close();
|
|
3518
|
-
} catch (e) {
|
|
3519
|
-
}
|
|
3520
|
-
dbInstance = null;
|
|
3521
|
-
}
|
|
3522
|
-
}
|
|
3523
|
-
function getDbName() {
|
|
3524
|
-
if (currentDbMode === "personal") {
|
|
3525
|
-
var owner = null;
|
|
3526
|
-
try {
|
|
3527
|
-
if (window.AIMEAT && window.AIMEAT.auth && window.AIMEAT.auth.getSession()) {
|
|
3528
|
-
owner = window.AIMEAT.auth.getSession().owner || null;
|
|
3529
|
-
}
|
|
3530
|
-
if (!owner) {
|
|
3531
|
-
var stored = localStorage.getItem("aimeat_session");
|
|
3532
|
-
if (stored) owner = JSON.parse(stored).owner || null;
|
|
3533
|
-
}
|
|
3534
|
-
} catch (e) {
|
|
3535
|
-
}
|
|
3536
|
-
if (owner) return DB_NAME_GLOBAL + "_" + owner;
|
|
3537
|
-
}
|
|
3538
|
-
return DB_NAME_GLOBAL;
|
|
3539
|
-
}
|
|
3540
|
-
function openDB() {
|
|
3541
|
-
var name = getDbName();
|
|
3542
|
-
if (dbInstance && dbInstance.name === name) return Promise.resolve(dbInstance);
|
|
3543
|
-
if (dbInstance) {
|
|
3544
|
-
dbInstance.close();
|
|
3545
|
-
dbInstance = null;
|
|
3546
|
-
}
|
|
3547
|
-
return new Promise(function(resolve, reject) {
|
|
3548
|
-
const request = indexedDB.open(name, DB_VERSION);
|
|
3549
|
-
request.onupgradeneeded = function(event) {
|
|
3550
|
-
const db = event.target.result;
|
|
3551
|
-
var store;
|
|
3552
|
-
if (!db.objectStoreNames.contains(STORE_NAME2)) {
|
|
3553
|
-
store = db.createObjectStore(STORE_NAME2, { keyPath: "id" });
|
|
3554
|
-
store.createIndex("tags", "tags", { multiEntry: true });
|
|
3555
|
-
store.createIndex("source", "source", { unique: false });
|
|
3556
|
-
store.createIndex("favorite", "favorite", { unique: false });
|
|
3557
|
-
store.createIndex("sortOrder", "sortOrder", { unique: false });
|
|
3558
|
-
} else {
|
|
3559
|
-
store = event.target.transaction.objectStore(STORE_NAME2);
|
|
3560
|
-
if (!store.indexNames.contains("sortOrder")) {
|
|
3561
|
-
store.createIndex("sortOrder", "sortOrder", { unique: false });
|
|
3562
|
-
}
|
|
3563
|
-
}
|
|
3564
|
-
};
|
|
3565
|
-
request.onsuccess = function(event) {
|
|
3566
|
-
dbInstance = event.target.result;
|
|
3567
|
-
resolve(dbInstance);
|
|
3568
|
-
};
|
|
3569
|
-
request.onerror = function(event) {
|
|
3570
|
-
reject(event.target.error);
|
|
3571
|
-
};
|
|
3572
|
-
});
|
|
3573
|
-
}
|
|
3729
|
+
var workingSet = [];
|
|
3574
3730
|
function getAllApps() {
|
|
3575
|
-
return
|
|
3576
|
-
return new Promise(function(resolve, reject) {
|
|
3577
|
-
const tx = db.transaction(STORE_NAME2, "readonly");
|
|
3578
|
-
const request = tx.objectStore(STORE_NAME2).getAll();
|
|
3579
|
-
request.onsuccess = function() {
|
|
3580
|
-
resolve(request.result);
|
|
3581
|
-
};
|
|
3582
|
-
request.onerror = function() {
|
|
3583
|
-
reject(request.error);
|
|
3584
|
-
};
|
|
3585
|
-
});
|
|
3586
|
-
});
|
|
3731
|
+
return Promise.resolve(workingSet.slice());
|
|
3587
3732
|
}
|
|
3588
3733
|
function saveApp(app) {
|
|
3589
|
-
|
|
3590
|
-
|
|
3591
|
-
|
|
3592
|
-
tx.objectStore(STORE_NAME2).put(app);
|
|
3593
|
-
tx.oncomplete = function() {
|
|
3594
|
-
resolve();
|
|
3595
|
-
};
|
|
3596
|
-
tx.onerror = function() {
|
|
3597
|
-
reject(tx.error);
|
|
3598
|
-
};
|
|
3599
|
-
tx.onabort = function() {
|
|
3600
|
-
reject(tx.error);
|
|
3601
|
-
};
|
|
3734
|
+
if (app && app.id) {
|
|
3735
|
+
var idx = workingSet.findIndex(function(a) {
|
|
3736
|
+
return a.id === app.id;
|
|
3602
3737
|
});
|
|
3603
|
-
|
|
3738
|
+
if (idx >= 0) workingSet[idx] = app;
|
|
3739
|
+
else workingSet.push(app);
|
|
3740
|
+
}
|
|
3741
|
+
return Promise.resolve();
|
|
3604
3742
|
}
|
|
3605
3743
|
function deleteApp(id) {
|
|
3606
|
-
|
|
3607
|
-
return
|
|
3608
|
-
const tx = db.transaction(STORE_NAME2, "readwrite");
|
|
3609
|
-
tx.objectStore(STORE_NAME2).delete(id);
|
|
3610
|
-
tx.oncomplete = function() {
|
|
3611
|
-
resolve();
|
|
3612
|
-
};
|
|
3613
|
-
tx.onerror = function() {
|
|
3614
|
-
reject(tx.error);
|
|
3615
|
-
};
|
|
3616
|
-
tx.onabort = function() {
|
|
3617
|
-
reject(tx.error);
|
|
3618
|
-
};
|
|
3619
|
-
});
|
|
3744
|
+
workingSet = workingSet.filter(function(a) {
|
|
3745
|
+
return a.id !== id;
|
|
3620
3746
|
});
|
|
3747
|
+
return Promise.resolve();
|
|
3621
3748
|
}
|
|
3622
3749
|
|
|
3623
3750
|
// src/static/app-catalog/js/ui.js
|
|
@@ -4177,6 +4304,7 @@
|
|
|
4177
4304
|
}
|
|
4178
4305
|
desc.placeholder = t("pb.descPh");
|
|
4179
4306
|
loadPbTemplates();
|
|
4307
|
+
loadPbPacks();
|
|
4180
4308
|
loadPbCore();
|
|
4181
4309
|
overlay.style.display = "flex";
|
|
4182
4310
|
desc.focus();
|
|
@@ -4190,9 +4318,9 @@
|
|
|
4190
4318
|
function loadPbCore() {
|
|
4191
4319
|
var config = loadConfig();
|
|
4192
4320
|
if (!config.aimeatUrl) return;
|
|
4193
|
-
var
|
|
4321
|
+
var base3 = config.aimeatUrl.replace(/\/+$/, "");
|
|
4194
4322
|
["new", "improve"].forEach(function(mode) {
|
|
4195
|
-
fetch(
|
|
4323
|
+
fetch(base3 + "/v1/prompts/build-app?mode=" + mode + "&lang=" + encodeURIComponent(getLang())).then(function(r) {
|
|
4196
4324
|
return r.json();
|
|
4197
4325
|
}).then(function(d) {
|
|
4198
4326
|
var body = d && d.data && d.data.body;
|
|
@@ -4209,8 +4337,8 @@
|
|
|
4209
4337
|
if (!sel) return;
|
|
4210
4338
|
var config = loadConfig();
|
|
4211
4339
|
if (!config.aimeatUrl) return;
|
|
4212
|
-
var
|
|
4213
|
-
fetch(
|
|
4340
|
+
var base3 = config.aimeatUrl.replace(/\/+$/, "");
|
|
4341
|
+
fetch(base3 + "/v1/app-templates?lang=" + encodeURIComponent(getLang())).then(function(r) {
|
|
4214
4342
|
return r.json();
|
|
4215
4343
|
}).then(function(d) {
|
|
4216
4344
|
var list = (d.data && d.data.templates || []).filter(function(t2) {
|
|
@@ -4234,7 +4362,7 @@
|
|
|
4234
4362
|
updatePbPreview();
|
|
4235
4363
|
return;
|
|
4236
4364
|
}
|
|
4237
|
-
fetch(
|
|
4365
|
+
fetch(base3 + "/v1/app-templates/" + encodeURIComponent(id)).then(function(r) {
|
|
4238
4366
|
return r.json();
|
|
4239
4367
|
}).then(function(d2) {
|
|
4240
4368
|
window.pbTemplate = d2.data && d2.data.template || null;
|
|
@@ -4246,6 +4374,108 @@
|
|
|
4246
4374
|
}).catch(function() {
|
|
4247
4375
|
});
|
|
4248
4376
|
}
|
|
4377
|
+
var pbPacks = [];
|
|
4378
|
+
var pbPackDocs = {};
|
|
4379
|
+
var pbPackTouched = {};
|
|
4380
|
+
var PB_PACK_CATEGORIES = ["visualization", "diagrams", "canvas", "game", "3d", "realtime"];
|
|
4381
|
+
function pbSelectedPackIds() {
|
|
4382
|
+
return Array.prototype.slice.call(document.querySelectorAll(".pb-pack-cb:checked")).map(function(cb) {
|
|
4383
|
+
return cb.value;
|
|
4384
|
+
});
|
|
4385
|
+
}
|
|
4386
|
+
function loadPbPacks() {
|
|
4387
|
+
var wrap = document.getElementById("pb-packs");
|
|
4388
|
+
if (!wrap) return;
|
|
4389
|
+
var config = loadConfig();
|
|
4390
|
+
if (!config.aimeatUrl) return;
|
|
4391
|
+
var base3 = config.aimeatUrl.replace(/\/+$/, "");
|
|
4392
|
+
fetch(base3 + "/v1/library-packs?lang=" + encodeURIComponent(getLang())).then(function(r) {
|
|
4393
|
+
return r.json();
|
|
4394
|
+
}).then(function(d) {
|
|
4395
|
+
var all = d.data && d.data.packs || [];
|
|
4396
|
+
pbPacks = all.filter(function(p) {
|
|
4397
|
+
if (p.status === "deprecated") return false;
|
|
4398
|
+
if (p.kind === "vendored" || p.kind === "bundle") return PB_PACK_CATEGORIES.indexOf(p.category) !== -1;
|
|
4399
|
+
if (p.kind === "cortex") return PB_PACK_CATEGORIES.indexOf(p.category) !== -1 && p.id !== "aimeat-charts";
|
|
4400
|
+
return false;
|
|
4401
|
+
});
|
|
4402
|
+
wrap.innerHTML = "";
|
|
4403
|
+
pbPacks.forEach(function(p) {
|
|
4404
|
+
var label = document.createElement("label");
|
|
4405
|
+
label.className = "pb-pack-item";
|
|
4406
|
+
label.title = p.description || "";
|
|
4407
|
+
var cb = document.createElement("input");
|
|
4408
|
+
cb.type = "checkbox";
|
|
4409
|
+
cb.className = "pb-pack-cb";
|
|
4410
|
+
cb.value = p.id;
|
|
4411
|
+
cb.onchange = function() {
|
|
4412
|
+
pbPackTouched[p.id] = true;
|
|
4413
|
+
if (cb.checked) loadPbPackDoc(base3, p.id);
|
|
4414
|
+
else updatePbPreview();
|
|
4415
|
+
};
|
|
4416
|
+
var span = document.createElement("span");
|
|
4417
|
+
span.textContent = p.title;
|
|
4418
|
+
label.appendChild(cb);
|
|
4419
|
+
label.appendChild(span);
|
|
4420
|
+
if (p.modelTier) {
|
|
4421
|
+
var badge = document.createElement("span");
|
|
4422
|
+
badge.className = "pb-pack-tier pb-tier-" + p.modelTier;
|
|
4423
|
+
badge.textContent = p.modelTier;
|
|
4424
|
+
var proven = (p.proofs || []).map(function(pr) {
|
|
4425
|
+
return pr.model + "→" + pr.verdict;
|
|
4426
|
+
}).join(", ");
|
|
4427
|
+
badge.title = "AEB reliability tier: " + p.modelTier + (proven ? " · proven on " + proven : " · not yet AEB-run") + (p.apiCaveat ? " · ⚠ " + p.apiCaveat : "");
|
|
4428
|
+
label.appendChild(badge);
|
|
4429
|
+
}
|
|
4430
|
+
wrap.appendChild(label);
|
|
4431
|
+
});
|
|
4432
|
+
var desc = document.getElementById("pb-description");
|
|
4433
|
+
if (desc && !desc._pbPackListener) {
|
|
4434
|
+
desc._pbPackListener = true;
|
|
4435
|
+
desc.addEventListener("input", function() {
|
|
4436
|
+
pbMatchPacksToIdea(base3);
|
|
4437
|
+
});
|
|
4438
|
+
}
|
|
4439
|
+
pbMatchPacksToIdea(base3);
|
|
4440
|
+
}).catch(function() {
|
|
4441
|
+
});
|
|
4442
|
+
}
|
|
4443
|
+
function pbMatchPacksToIdea(base3) {
|
|
4444
|
+
var desc = document.getElementById("pb-description");
|
|
4445
|
+
var text = (desc && desc.value || "").toLowerCase();
|
|
4446
|
+
pbPacks.forEach(function(p) {
|
|
4447
|
+
if (pbPackTouched[p.id]) return;
|
|
4448
|
+
var cb = document.querySelector('.pb-pack-cb[value="' + p.id + '"]');
|
|
4449
|
+
if (!cb) return;
|
|
4450
|
+
var hit = (p.interviewTriggers || []).some(function(t2) {
|
|
4451
|
+
var esc = String(t2).toLowerCase().replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
4452
|
+
return new RegExp("(^|[^a-zà-öø-ÿ])" + esc).test(text);
|
|
4453
|
+
});
|
|
4454
|
+
if (hit && !cb.checked) {
|
|
4455
|
+
cb.checked = true;
|
|
4456
|
+
loadPbPackDoc(base3, p.id);
|
|
4457
|
+
} else if (!hit && cb.checked) {
|
|
4458
|
+
cb.checked = false;
|
|
4459
|
+
updatePbPreview();
|
|
4460
|
+
}
|
|
4461
|
+
});
|
|
4462
|
+
}
|
|
4463
|
+
function loadPbPackDoc(base3, id) {
|
|
4464
|
+
if (pbPackDocs[id]) {
|
|
4465
|
+
updatePbPreview();
|
|
4466
|
+
return;
|
|
4467
|
+
}
|
|
4468
|
+
fetch(base3 + "/v1/library-packs/" + encodeURIComponent(id)).then(function(r) {
|
|
4469
|
+
return r.json();
|
|
4470
|
+
}).then(function(d) {
|
|
4471
|
+
var pack = d.data && d.data.pack;
|
|
4472
|
+
if (pack) {
|
|
4473
|
+
pbPackDocs[id] = pack;
|
|
4474
|
+
updatePbPreview();
|
|
4475
|
+
}
|
|
4476
|
+
}).catch(function() {
|
|
4477
|
+
});
|
|
4478
|
+
}
|
|
4249
4479
|
function buildPromptFromBuilder() {
|
|
4250
4480
|
var config = loadConfig();
|
|
4251
4481
|
var nodeUrl = config.aimeatUrl ? config.aimeatUrl.replace(/\/+$/, "") : "https://your-aimeat-node.example";
|
|
@@ -4270,6 +4500,7 @@
|
|
|
4270
4500
|
prompt2 += "3. How should it look and feel? (e.g. dark neon · cozy · sleek minimal · fun colorful) — it must support BOTH light and dark.\n";
|
|
4271
4501
|
prompt2 += "4. Data: SHARED (a community space others can see and add to) or PRIVATE (only mine)?\n";
|
|
4272
4502
|
prompt2 += "5. Should it use AI features (summaries, suggestions, generation)? If yes I can enable them via aimeat-ai.\n";
|
|
4503
|
+
prompt2 += "6. Does it need any special capabilities? (charts/graphs · editable flow or mindmap diagrams · static text-defined diagrams · a game or heavy 2D animation · generative art / creative canvas · 3D · live multi-user/realtime) — each maps to a capability pack in Step 2; include only what I pick.\n";
|
|
4273
4504
|
prompt2 += "Skip any question I already answered in my idea above. Use my answers to customise everything in Step 2.\n\n";
|
|
4274
4505
|
}
|
|
4275
4506
|
var core = pbCore[isImprove ? "improve" : "new"];
|
|
@@ -4405,6 +4636,19 @@
|
|
|
4405
4636
|
if (window.pbTemplate && window.pbTemplate.content) {
|
|
4406
4637
|
prompt2 += "\n## Starting template (copy from this)\nUse this skeleton as your base — keep its boot, login pill, and self-hosted theme wiring intact; fill the {{...}} slots; build your views inside <main>. Return the COMPLETE single HTML file based on it.\n```html\n" + window.pbTemplate.content + "\n```\n";
|
|
4407
4638
|
}
|
|
4639
|
+
var selectedPacks = pbSelectedPackIds().map(function(id) {
|
|
4640
|
+
return pbPackDocs[id];
|
|
4641
|
+
}).filter(Boolean);
|
|
4642
|
+
if (selectedPacks.length > 0) {
|
|
4643
|
+
prompt2 += "\n## Selected capability packs (self-hosted on my node — use these, never a CDN)\n";
|
|
4644
|
+
selectedPacks.forEach(function(pack) {
|
|
4645
|
+
prompt2 += "\n### Pack: " + pack.id + " — " + (pack.title || "") + "\n";
|
|
4646
|
+
prompt2 += "Include (in order):\n" + (pack.include || []).map(function(l) {
|
|
4647
|
+
return l;
|
|
4648
|
+
}).join("\n") + "\n";
|
|
4649
|
+
if (pack.ai_doc) prompt2 += "Usage:\n" + pack.ai_doc + "\n";
|
|
4650
|
+
});
|
|
4651
|
+
}
|
|
4408
4652
|
return prompt2;
|
|
4409
4653
|
}
|
|
4410
4654
|
function updatePbPreview() {
|
|
@@ -4412,6 +4656,71 @@
|
|
|
4412
4656
|
preview.textContent = buildPromptFromBuilder();
|
|
4413
4657
|
}
|
|
4414
4658
|
|
|
4659
|
+
// src/static/app-catalog/js/promote.js
|
|
4660
|
+
var KEY = "app-catalog.promoted";
|
|
4661
|
+
var promoted = {};
|
|
4662
|
+
function base() {
|
|
4663
|
+
return (loadConfig().aimeatUrl || "").replace(/\/+$/, "");
|
|
4664
|
+
}
|
|
4665
|
+
function getPromotion(ref) {
|
|
4666
|
+
return promoted[ref] || null;
|
|
4667
|
+
}
|
|
4668
|
+
function getPromotedItems() {
|
|
4669
|
+
return Object.keys(promoted).map(function(ref) {
|
|
4670
|
+
return { ref, text: promoted[ref] || {} };
|
|
4671
|
+
});
|
|
4672
|
+
}
|
|
4673
|
+
function loadPromoted() {
|
|
4674
|
+
var token = getCortexOwnerToken();
|
|
4675
|
+
var b = base();
|
|
4676
|
+
if (!token || !b) {
|
|
4677
|
+
promoted = {};
|
|
4678
|
+
return Promise.resolve();
|
|
4679
|
+
}
|
|
4680
|
+
return fetch(b + "/v1/memory/" + encodeURIComponent(KEY), { headers: { "Authorization": "Bearer " + token } }).then(function(r) {
|
|
4681
|
+
return r.ok ? r.json() : null;
|
|
4682
|
+
}).then(function(j) {
|
|
4683
|
+
var items = j && j.data && j.data.value && Array.isArray(j.data.value.items) ? j.data.value.items : [];
|
|
4684
|
+
var map = {};
|
|
4685
|
+
items.forEach(function(it) {
|
|
4686
|
+
if (it && typeof it.ref === "string" && it.text && typeof it.text === "object") map[it.ref] = { en: it.text.en || "", fi: it.text.fi || "" };
|
|
4687
|
+
});
|
|
4688
|
+
promoted = map;
|
|
4689
|
+
}).catch(function() {
|
|
4690
|
+
});
|
|
4691
|
+
}
|
|
4692
|
+
function persist() {
|
|
4693
|
+
var token = getCortexOwnerToken();
|
|
4694
|
+
var b = base();
|
|
4695
|
+
if (!token || !b) return Promise.resolve();
|
|
4696
|
+
var items = getPromotedItems();
|
|
4697
|
+
return fetch(b + "/v1/memory", {
|
|
4698
|
+
method: "POST",
|
|
4699
|
+
headers: { "Content-Type": "application/json", "Authorization": "Bearer " + token },
|
|
4700
|
+
body: JSON.stringify({
|
|
4701
|
+
key: KEY,
|
|
4702
|
+
value: { version: 1, updatedAt: (/* @__PURE__ */ new Date()).toISOString(), items },
|
|
4703
|
+
visibility: "public"
|
|
4704
|
+
})
|
|
4705
|
+
}).catch(function() {
|
|
4706
|
+
});
|
|
4707
|
+
}
|
|
4708
|
+
function setPromotion(ref, text) {
|
|
4709
|
+
var en = text && text.en ? String(text.en).trim() : "";
|
|
4710
|
+
var fi = text && text.fi ? String(text.fi).trim() : "";
|
|
4711
|
+
var now;
|
|
4712
|
+
if (!en && !fi) {
|
|
4713
|
+
delete promoted[ref];
|
|
4714
|
+
now = false;
|
|
4715
|
+
} else {
|
|
4716
|
+
promoted[ref] = { en, fi };
|
|
4717
|
+
now = true;
|
|
4718
|
+
}
|
|
4719
|
+
return persist().then(function() {
|
|
4720
|
+
return now;
|
|
4721
|
+
});
|
|
4722
|
+
}
|
|
4723
|
+
|
|
4415
4724
|
// src/static/app-catalog/js/monetize.js
|
|
4416
4725
|
var NAME_RE = /^[a-z0-9][a-z0-9._-]*$/i;
|
|
4417
4726
|
var MONEY_UNIT = 1e6;
|
|
@@ -4463,7 +4772,7 @@
|
|
|
4463
4772
|
}
|
|
4464
4773
|
function priceLabel(tool) {
|
|
4465
4774
|
var parts = [];
|
|
4466
|
-
if (tool.price && tool.price.morsels > 0) parts.push(tool.price.morsels + "
|
|
4775
|
+
if (tool.price && tool.price.morsels > 0) parts.push(tool.price.morsels + " morsels");
|
|
4467
4776
|
if (tool.priceMoney && tool.priceMoney.amount > 0) {
|
|
4468
4777
|
parts.push(tool.priceMoney.amount / MONEY_UNIT + " " + tool.priceMoney.currency);
|
|
4469
4778
|
}
|
|
@@ -4604,71 +4913,314 @@
|
|
|
4604
4913
|
});
|
|
4605
4914
|
}
|
|
4606
4915
|
|
|
4607
|
-
// src/static/app-catalog/js/
|
|
4608
|
-
var
|
|
4609
|
-
var
|
|
4610
|
-
var
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
var viewPublished;
|
|
4615
|
-
var viewSource;
|
|
4616
|
-
var generateId2;
|
|
4617
|
-
var generateSharePrompt;
|
|
4618
|
-
var openPromptBuilder2;
|
|
4619
|
-
var showPublishModal;
|
|
4620
|
-
var getMainApps;
|
|
4621
|
-
var getServerState;
|
|
4622
|
-
var getServerManifests;
|
|
4623
|
-
var getOwnProtection;
|
|
4624
|
-
var setIframeUrl;
|
|
4625
|
-
var isOperatorSession;
|
|
4626
|
-
function initDetail(deps) {
|
|
4627
|
-
({ refreshAll, loadPublishedApps, renderApps, updateModeToggle, getCortexOwnerToken: getCortexOwnerToken2, launchApp, viewPublished, viewSource, generateId: generateId2, generateSharePrompt, openPromptBuilder: openPromptBuilder2, showPublishModal, getMainApps, getServerState, getServerManifests, getOwnProtection, setIframeUrl, isOperatorSession } = deps);
|
|
4916
|
+
// src/static/app-catalog/js/cost.js
|
|
4917
|
+
var cState = "off";
|
|
4918
|
+
var cData = null;
|
|
4919
|
+
var cAppId = "";
|
|
4920
|
+
function apiBase2() {
|
|
4921
|
+
var cfg = loadConfig();
|
|
4922
|
+
return (cfg.aimeatUrl || "").replace(/\/+$/, "");
|
|
4628
4923
|
}
|
|
4629
|
-
|
|
4630
|
-
|
|
4631
|
-
|
|
4632
|
-
var detailVersionsHtml = null;
|
|
4633
|
-
var detailSkillsHtml = null;
|
|
4634
|
-
var detailEditingAbout = false;
|
|
4635
|
-
var detailEditAboutOnOpen = false;
|
|
4636
|
-
var detailEditingAccessCode = false;
|
|
4637
|
-
var detailSkillPickerOpen = false;
|
|
4638
|
-
var detailMySkills = null;
|
|
4639
|
-
var detailBoundSkills = [];
|
|
4640
|
-
var detailSkillBusy = false;
|
|
4641
|
-
function detailGetApp() {
|
|
4642
|
-
for (var i = 0; i < getMainApps().length; i++) {
|
|
4643
|
-
if (getMainApps()[i].id === detailAppId) return getMainApps()[i];
|
|
4644
|
-
}
|
|
4645
|
-
return null;
|
|
4924
|
+
function rerender2() {
|
|
4925
|
+
var el = document.getElementById("detail-cost");
|
|
4926
|
+
if (el) el.innerHTML = costSectionInner();
|
|
4646
4927
|
}
|
|
4647
|
-
function
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
stored = mm ? decodeURIComponent(mm[1]) : "";
|
|
4928
|
+
function costOnOpen(owner, appId, isOwn) {
|
|
4929
|
+
cData = null;
|
|
4930
|
+
if (!isOwn || !owner || !appId) {
|
|
4931
|
+
cState = "off";
|
|
4932
|
+
cAppId = "";
|
|
4933
|
+
return;
|
|
4654
4934
|
}
|
|
4655
|
-
|
|
4656
|
-
|
|
4935
|
+
cAppId = owner + "/" + appId;
|
|
4936
|
+
cState = "loading";
|
|
4937
|
+
var token = getCortexOwnerToken();
|
|
4938
|
+
if (!token) {
|
|
4939
|
+
cState = "error";
|
|
4940
|
+
cData = { _needLogin: true };
|
|
4941
|
+
return;
|
|
4942
|
+
}
|
|
4943
|
+
fetch(apiBase2() + "/v1/apps/cost?app_id=" + encodeURIComponent(cAppId), {
|
|
4944
|
+
headers: { "Authorization": "Bearer " + token }
|
|
4945
|
+
}).then(function(r) {
|
|
4946
|
+
return r.json();
|
|
4947
|
+
}).then(function(res) {
|
|
4948
|
+
if (!res || !res.ok || !res.data) throw new Error("bad response");
|
|
4949
|
+
cData = res.data;
|
|
4950
|
+
cState = "ready";
|
|
4951
|
+
rerender2();
|
|
4952
|
+
}).catch(function() {
|
|
4953
|
+
cState = "error";
|
|
4954
|
+
cData = null;
|
|
4955
|
+
rerender2();
|
|
4956
|
+
});
|
|
4957
|
+
}
|
|
4958
|
+
function stateBadge(state) {
|
|
4959
|
+
var cls = state === "active" ? "ok" : state === "paused" ? "diff" : "none";
|
|
4960
|
+
return '<span class="dtl-sync ' + cls + '" style="margin:0">' + escapeHtml(state) + "</span>";
|
|
4961
|
+
}
|
|
4962
|
+
function contractRow(c) {
|
|
4963
|
+
var b = c.budget || {};
|
|
4964
|
+
var cap = b.cap_units === null || b.cap_units === void 0 ? t("cost.uncapped") : b.spent_units + " / " + b.cap_units;
|
|
4965
|
+
var remaining = b.remaining_units === null || b.remaining_units === void 0 ? "" : ' <span class="dtl-stat-label">(' + t("cost.remaining").replace("{n}", b.remaining_units) + ")</span>";
|
|
4966
|
+
var providerShort = String(c.provider || "").split("@")[0];
|
|
4967
|
+
return '<div class="dtl-status-row" style="align-items:center;gap:10px;flex-wrap:wrap"><div class="dtl-stat" style="flex:1;min-width:150px"><span class="dtl-stat-val">' + escapeHtml(c.capability || "") + '</span><span class="dtl-stat-label">' + escapeHtml(t("cost.providerCol")) + ": " + escapeHtml(providerShort) + '</span></div><div class="dtl-stat"><span class="dtl-stat-label">' + t("cost.priceCol") + '</span><span class="dtl-stat-val">' + escapeHtml(String(c.price_per_call)) + ' morsels</span></div><div class="dtl-stat"><span class="dtl-stat-label">' + t("cost.rakeCol") + '</span><span class="dtl-stat-val">' + escapeHtml(String(c.rake_per_call)) + " morsels (" + escapeHtml(String(c.rake_percent)) + '%)</span></div><div class="dtl-stat"><span class="dtl-stat-label">' + t("cost.budgetCol") + '</span><span class="dtl-stat-val">' + escapeHtml(cap) + remaining + '</span></div><div class="dtl-stat">' + stateBadge(c.state) + "</div></div>";
|
|
4968
|
+
}
|
|
4969
|
+
function costSectionInner() {
|
|
4970
|
+
if (cState === "off") return "";
|
|
4971
|
+
var html = "<h3>" + t("cost.title") + '</h3><p class="dtl-desc">' + t("cost.hint") + "</p>";
|
|
4972
|
+
if (cState === "loading") {
|
|
4973
|
+
return html + '<span style="color:var(--text-muted);font-size:.85rem">…</span>';
|
|
4974
|
+
}
|
|
4975
|
+
if (cState === "error") {
|
|
4976
|
+
var msg = cData && cData._needLogin ? t("cost.needLogin") : t("cost.loadFailed");
|
|
4977
|
+
return html + '<span class="dtl-sync none">' + escapeHtml(msg) + "</span>";
|
|
4978
|
+
}
|
|
4979
|
+
var contracts = cData && cData.contracts || [];
|
|
4980
|
+
if (!contracts.length) {
|
|
4981
|
+
return html + '<span class="dtl-sync none">' + t("cost.empty") + "</span>";
|
|
4982
|
+
}
|
|
4983
|
+
var m = cData.totals && cData.totals.morsels || { spent_units: 0, calls: 0 };
|
|
4984
|
+
html += '<div class="dtl-sync ok" style="margin:0 0 10px">' + t("cost.summary").replace("{n}", cData.total_contracts).replace("{spent}", m.spent_units).replace("{calls}", m.calls) + "</div>";
|
|
4985
|
+
for (var i = 0; i < contracts.length; i++) html += contractRow(contracts[i]);
|
|
4986
|
+
return html;
|
|
4657
4987
|
}
|
|
4658
|
-
|
|
4659
|
-
|
|
4988
|
+
|
|
4989
|
+
// src/static/app-catalog/js/app-agents.js
|
|
4990
|
+
var getServerManifests;
|
|
4991
|
+
function initAppAgents(deps) {
|
|
4992
|
+
({ getServerManifests } = deps);
|
|
4660
4993
|
}
|
|
4661
|
-
function
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4994
|
+
function aimeatBase() {
|
|
4995
|
+
var config = loadConfig();
|
|
4996
|
+
return config.aimeatUrl ? config.aimeatUrl.replace(/\/+$/, "") : "";
|
|
4997
|
+
}
|
|
4998
|
+
function appManifestAgents(owner, filename) {
|
|
4999
|
+
var m = getServerManifests ? getServerManifests()[(owner || "") + "\n" + (filename || "")] : null;
|
|
5000
|
+
return m && m.cortex && Array.isArray(m.cortex.agents) ? m.cortex.agents : [];
|
|
5001
|
+
}
|
|
5002
|
+
function fmtOfferPrice(o) {
|
|
5003
|
+
var parts = [];
|
|
5004
|
+
if (o.price && typeof o.price.morsels === "number") {
|
|
5005
|
+
parts.push(o.price.morsels + " 🥩" + (o.price.unit ? "/" + escapeHtml(o.price.unit) : ""));
|
|
4666
5006
|
}
|
|
5007
|
+
if (o.price_money && typeof o.price_money.amount === "number") {
|
|
5008
|
+
parts.push((o.price_money.amount / 1e6).toFixed(2) + " " + escapeHtml(o.price_money.currency || "EUR"));
|
|
5009
|
+
}
|
|
5010
|
+
return parts.length ? parts.join(" · ") : t("agents.askPrice");
|
|
4667
5011
|
}
|
|
4668
|
-
function
|
|
4669
|
-
|
|
5012
|
+
function inspectorHtml(def) {
|
|
5013
|
+
var crew = (def.agents || []).map(function(a) {
|
|
5014
|
+
var tools = (a.tools || []).map(function(x) {
|
|
5015
|
+
return '<span class="aga-chip">' + escapeHtml(x) + "</span>";
|
|
5016
|
+
}).join("");
|
|
5017
|
+
var skills = (a.skills || []).map(function(x) {
|
|
5018
|
+
return '<span class="aga-chip aga-chip-skill">' + escapeHtml(x) + "</span>";
|
|
5019
|
+
}).join("");
|
|
5020
|
+
return '<div class="aga-crew-row"><strong>' + escapeHtml(a.role || "") + "</strong>" + (a.goal ? ' — <span class="aga-goal">' + escapeHtml(a.goal) + "</span>" : "") + (tools || skills ? '<div class="aga-chips">' + tools + skills + "</div>" : "") + "</div>";
|
|
5021
|
+
}).join("");
|
|
5022
|
+
var tasks = (def.tasks || []).map(function(tk) {
|
|
5023
|
+
var desc = String(tk.description || "");
|
|
5024
|
+
if (desc.length > 140) desc = desc.slice(0, 140) + "…";
|
|
5025
|
+
return "<li>" + escapeHtml(desc) + (tk.expected_output ? ' <span class="aga-goal">→ ' + escapeHtml(String(tk.expected_output).slice(0, 80)) + "</span>" : "") + "</li>";
|
|
5026
|
+
}).join("");
|
|
5027
|
+
return '<div class="aga-inspector"><div class="aga-label">' + t("agents.crew") + (def.llm_profile ? ' <span class="aga-chip">' + escapeHtml(def.llm_profile) + "</span>" : "") + (def.process ? ' <span class="aga-chip">' + escapeHtml(def.process) + "</span>" : "") + "</div>" + crew + '<div class="aga-label">' + t("agents.tasks") + '</div><ul class="aga-tasks">' + tasks + "</ul></div>";
|
|
4670
5028
|
}
|
|
4671
|
-
function
|
|
5029
|
+
function instanceHtml(inst, appOwner, appFilename, agentName) {
|
|
5030
|
+
var dot = inst.online ? '<span class="aga-dot aga-dot-on"></span>' : '<span class="aga-dot"></span>';
|
|
5031
|
+
var who = escapeHtml(inst.owner) + (inst.is_yours ? ' <span class="aga-chip">' + t("agents.you") + "</span>" : "") + (inst.source === "author" ? ' <span class="aga-chip">' + t("agents.author") + "</span>" : "");
|
|
5032
|
+
var offers = (inst.offers || []).map(function(o) {
|
|
5033
|
+
return '<div class="aga-offer"><span class="aga-offer-title">' + escapeHtml(o.title || o.id) + '</span><span class="aga-price">' + fmtOfferPrice(o) + (o.callable ? " · " + t("agents.instant") : "") + "</span></div>";
|
|
5034
|
+
}).join("");
|
|
5035
|
+
var undeploy = inst.is_yours && inst.source === "deployed" ? `<button class="modal-btn secondary aga-btn-sm" onclick="window._launcher.agentsUndeploy('` + jsArg(appOwner) + "', '" + jsArg(appFilename) + "', '" + jsArg(agentName) + `')">` + t("agents.undeploy") + "</button>" : "";
|
|
5036
|
+
return '<div class="aga-inst"><div class="aga-inst-head">' + dot + "<strong>" + who + '</strong><span class="aga-goal">' + t("agents.trust") + " " + (inst.trust_score != null ? inst.trust_score : "—") + "</span>" + undeploy + "</div>" + (offers || '<div class="aga-goal">' + t("agents.noOffers") + "</div>") + "</div>";
|
|
5037
|
+
}
|
|
5038
|
+
function showAppAgentsModal(owner, filename) {
|
|
5039
|
+
var defs = appManifestAgents(owner, filename);
|
|
5040
|
+
if (!defs.length) {
|
|
5041
|
+
showNotice(t("agents.none"));
|
|
5042
|
+
return;
|
|
5043
|
+
}
|
|
5044
|
+
var base3 = aimeatBase();
|
|
5045
|
+
if (!base3) {
|
|
5046
|
+
showNotice("Set AIMEAT server URL in Settings first");
|
|
5047
|
+
return;
|
|
5048
|
+
}
|
|
5049
|
+
var token = getCortexOwnerToken();
|
|
5050
|
+
document.getElementById("agents-modal-app").textContent = owner + "/" + filename;
|
|
5051
|
+
var body = document.getElementById("agents-modal-body");
|
|
5052
|
+
var html = '<div class="aga-intro">' + t("agents.declares") + "</div>";
|
|
5053
|
+
for (var i = 0; i < defs.length; i++) {
|
|
5054
|
+
var def = defs[i];
|
|
5055
|
+
html += '<div class="aga-def"><h3>🤖 ' + escapeHtml(def.agent_name || "") + "</h3>" + inspectorHtml(def) + '<div class="aga-label">' + t("agents.hostedTitle") + '</div><div id="aga-instances-' + i + '" class="aga-goal">' + t("agents.loading") + '</div><div class="aga-label">' + t("agents.deployTitle") + "</div>" + (token ? '<div class="aga-deploy-row"><label>' + t("agents.runner") + ' <select id="aga-runner-' + i + '" class="modal-input aga-select"><option value="">' + t("agents.loading") + "</option></select></label><label>" + t("agents.organism") + ' <select id="aga-organism-' + i + `" class="modal-input aga-select"><option value="">—</option></select></label><button class="modal-btn aga-deploy-btn" onclick="window._launcher.agentsDeploy('` + jsArg(owner) + "', '" + jsArg(filename) + "', '" + jsArg(def.agent_name) + "', " + i + ')">' + t("agents.deployBtn") + '</button></div><div class="aga-goal">' + t("agents.deployDesc") + "</div>" : '<div class="aga-goal">' + t("agents.needLogin") + "</div>") + "</div>";
|
|
5056
|
+
}
|
|
5057
|
+
body.innerHTML = html;
|
|
5058
|
+
document.getElementById("agents-overlay").hidden = false;
|
|
5059
|
+
defs.forEach(function(def2, i2) {
|
|
5060
|
+
var headers = token ? { "Authorization": "Bearer " + token } : {};
|
|
5061
|
+
fetch(base3 + "/v1/apps/" + encodeURIComponent(owner) + "/" + encodeURIComponent(filename) + "/agents/" + encodeURIComponent(def2.agent_name) + "/instances", { headers }).then(function(r) {
|
|
5062
|
+
return r.json();
|
|
5063
|
+
}).then(function(json) {
|
|
5064
|
+
var el = document.getElementById("aga-instances-" + i2);
|
|
5065
|
+
if (!el) return;
|
|
5066
|
+
var list = json.data && json.data.instances || [];
|
|
5067
|
+
el.className = "";
|
|
5068
|
+
el.innerHTML = list.length ? list.map(function(inst) {
|
|
5069
|
+
return instanceHtml(inst, owner, filename, def2.agent_name);
|
|
5070
|
+
}).join("") : '<div class="aga-goal">' + t("agents.hostedNone") + "</div>";
|
|
5071
|
+
}).catch(function() {
|
|
5072
|
+
var el = document.getElementById("aga-instances-" + i2);
|
|
5073
|
+
if (el) el.textContent = t("agents.hostedError");
|
|
5074
|
+
});
|
|
5075
|
+
});
|
|
5076
|
+
if (token) {
|
|
5077
|
+
fetch(base3 + "/v1/agents", { headers: { "Authorization": "Bearer " + token } }).then(function(r) {
|
|
5078
|
+
return r.json();
|
|
5079
|
+
}).then(function(json) {
|
|
5080
|
+
var agents = json.data && json.data.agents || [];
|
|
5081
|
+
agents.sort(function(a, b) {
|
|
5082
|
+
var rank = function(m) {
|
|
5083
|
+
return m === "task-runner" ? 0 : m === "autonomous" ? 1 : 2;
|
|
5084
|
+
};
|
|
5085
|
+
return rank(a.mode) - rank(b.mode);
|
|
5086
|
+
});
|
|
5087
|
+
var opts = agents.length ? agents.map(function(a) {
|
|
5088
|
+
var label = a.name + (a.mode === "task-runner" ? " · task-runner" : a.mode ? " · " + a.mode : "");
|
|
5089
|
+
var sel = a.name === "crew-forge" ? " selected" : "";
|
|
5090
|
+
return '<option value="' + escapeHtml(a.name) + '"' + sel + ">" + escapeHtml(label) + "</option>";
|
|
5091
|
+
}).join("") : '<option value="">' + t("agents.noRunnerOption") + "</option>";
|
|
5092
|
+
defs.forEach(function(_, i2) {
|
|
5093
|
+
var el = document.getElementById("aga-runner-" + i2);
|
|
5094
|
+
if (el) el.innerHTML = opts;
|
|
5095
|
+
});
|
|
5096
|
+
}).catch(function() {
|
|
5097
|
+
});
|
|
5098
|
+
var me = null;
|
|
5099
|
+
try {
|
|
5100
|
+
me = JSON.parse(localStorage.getItem("aimeat_session")).owner || null;
|
|
5101
|
+
} catch (e) {
|
|
5102
|
+
}
|
|
5103
|
+
if (me) {
|
|
5104
|
+
fetch(base3 + "/v1/organisms?member=" + encodeURIComponent(me), { headers: { "Authorization": "Bearer " + token } }).then(function(r) {
|
|
5105
|
+
return r.json();
|
|
5106
|
+
}).then(function(json) {
|
|
5107
|
+
var orgs = json.data && json.data.organisms || [];
|
|
5108
|
+
var opts = '<option value="">—</option>' + orgs.map(function(o) {
|
|
5109
|
+
return '<option value="' + escapeHtml(o.id) + '">' + escapeHtml(o.name || o.id) + "</option>";
|
|
5110
|
+
}).join("");
|
|
5111
|
+
defs.forEach(function(_, i2) {
|
|
5112
|
+
var el = document.getElementById("aga-organism-" + i2);
|
|
5113
|
+
if (el) el.innerHTML = opts;
|
|
5114
|
+
});
|
|
5115
|
+
}).catch(function() {
|
|
5116
|
+
});
|
|
5117
|
+
}
|
|
5118
|
+
}
|
|
5119
|
+
}
|
|
5120
|
+
function postAction(owner, filename, agentName, action, bodyObj, doneMsgFor) {
|
|
5121
|
+
var token = getCortexOwnerToken();
|
|
5122
|
+
if (!token) {
|
|
5123
|
+
showNotice(t("agents.needLogin"));
|
|
5124
|
+
return;
|
|
5125
|
+
}
|
|
5126
|
+
fetch(aimeatBase() + "/v1/apps/" + encodeURIComponent(owner) + "/" + encodeURIComponent(filename) + "/agents/" + encodeURIComponent(agentName) + "/" + action, {
|
|
5127
|
+
method: "POST",
|
|
5128
|
+
headers: { "Content-Type": "application/json", "Authorization": "Bearer " + token },
|
|
5129
|
+
body: JSON.stringify(bodyObj)
|
|
5130
|
+
}).then(function(r) {
|
|
5131
|
+
return r.json();
|
|
5132
|
+
}).then(function(json) {
|
|
5133
|
+
if (json.ok) {
|
|
5134
|
+
showNotice(doneMsgFor(json.data || {}));
|
|
5135
|
+
} else {
|
|
5136
|
+
var code = json.error && json.error.code;
|
|
5137
|
+
showNotice(code === "RUNNER_NOT_FOUND" ? t("agents.noRunner") : json.error && json.error.message || t("agents.deployFailed"));
|
|
5138
|
+
}
|
|
5139
|
+
}).catch(function(err) {
|
|
5140
|
+
showNotice(t("agents.deployFailed") + ": " + err.message);
|
|
5141
|
+
});
|
|
5142
|
+
}
|
|
5143
|
+
function agentsDeploy(owner, filename, agentName, idx) {
|
|
5144
|
+
var runnerEl = document.getElementById("aga-runner-" + idx);
|
|
5145
|
+
var orgEl = document.getElementById("aga-organism-" + idx);
|
|
5146
|
+
var body = {};
|
|
5147
|
+
if (runnerEl && runnerEl.value) body.runner_agent = runnerEl.value;
|
|
5148
|
+
if (orgEl && orgEl.value) body.organism_id = orgEl.value;
|
|
5149
|
+
postAction(owner, filename, agentName, "deploy", body, function(d) {
|
|
5150
|
+
return d.auto_activated ? t("agents.deployStarted") : t("agents.deployQueued");
|
|
5151
|
+
});
|
|
5152
|
+
}
|
|
5153
|
+
function agentsUndeploy(owner, filename, agentName) {
|
|
5154
|
+
postAction(owner, filename, agentName, "undeploy", {}, function() {
|
|
5155
|
+
return t("agents.undeployQueued");
|
|
5156
|
+
});
|
|
5157
|
+
}
|
|
5158
|
+
|
|
5159
|
+
// src/static/app-catalog/js/detail.js
|
|
5160
|
+
var refreshAll;
|
|
5161
|
+
var loadPublishedApps;
|
|
5162
|
+
var renderApps;
|
|
5163
|
+
var updateModeToggle;
|
|
5164
|
+
var getCortexOwnerToken2;
|
|
5165
|
+
var launchApp;
|
|
5166
|
+
var viewPublished;
|
|
5167
|
+
var viewSource;
|
|
5168
|
+
var generateId2;
|
|
5169
|
+
var generateSharePrompt;
|
|
5170
|
+
var openPromptBuilder2;
|
|
5171
|
+
var showPublishModal;
|
|
5172
|
+
var getMainApps;
|
|
5173
|
+
var getServerState;
|
|
5174
|
+
var getServerManifests2;
|
|
5175
|
+
var getOwnProtection;
|
|
5176
|
+
var setIframeUrl;
|
|
5177
|
+
var isOperatorSession;
|
|
5178
|
+
function initDetail(deps) {
|
|
5179
|
+
({ refreshAll, loadPublishedApps, renderApps, updateModeToggle, getCortexOwnerToken: getCortexOwnerToken2, launchApp, viewPublished, viewSource, generateId: generateId2, generateSharePrompt, openPromptBuilder: openPromptBuilder2, showPublishModal, getMainApps, getServerState, getServerManifests: getServerManifests2, getOwnProtection, setIframeUrl, isOperatorSession } = deps);
|
|
5180
|
+
}
|
|
5181
|
+
var detailAppId = null;
|
|
5182
|
+
var detailDraftBlob = null;
|
|
5183
|
+
var detailAiAvailable = false;
|
|
5184
|
+
var detailVersionsHtml = null;
|
|
5185
|
+
var detailSkillsHtml = null;
|
|
5186
|
+
var detailEditingAbout = false;
|
|
5187
|
+
var detailEditAboutOnOpen = false;
|
|
5188
|
+
var detailEditingAccessCode = false;
|
|
5189
|
+
var detailSkillPickerOpen = false;
|
|
5190
|
+
var detailMySkills = null;
|
|
5191
|
+
var detailBoundSkills = [];
|
|
5192
|
+
var detailSkillBusy = false;
|
|
5193
|
+
function detailGetApp() {
|
|
5194
|
+
for (var i = 0; i < getMainApps().length; i++) {
|
|
5195
|
+
if (getMainApps()[i].id === detailAppId) return getMainApps()[i];
|
|
5196
|
+
}
|
|
5197
|
+
return null;
|
|
5198
|
+
}
|
|
5199
|
+
function detailServerOwner(app) {
|
|
5200
|
+
var sess = currentOwnerName();
|
|
5201
|
+
var stored = app && app.aimeatOwner || "";
|
|
5202
|
+
if (!stored) {
|
|
5203
|
+
var pu = app && (app.publishedUrl || app.viewUrl) || "";
|
|
5204
|
+
var mm = pu.match(/\/v1\/apps\/([^/]+)\//);
|
|
5205
|
+
stored = mm ? decodeURIComponent(mm[1]) : "";
|
|
5206
|
+
}
|
|
5207
|
+
if (sess && (!stored || stored === "anonymous" || stored === sess)) return sess;
|
|
5208
|
+
return stored;
|
|
5209
|
+
}
|
|
5210
|
+
function detailIsOwnPublished(app) {
|
|
5211
|
+
return !!(app && app.published && app.publishedFilename && getServerState()[app.publishedFilename] && currentOwnerName());
|
|
5212
|
+
}
|
|
5213
|
+
function blobToHtml(blob) {
|
|
5214
|
+
try {
|
|
5215
|
+
return decodeURIComponent(escape(atob(blob)));
|
|
5216
|
+
} catch (e) {
|
|
5217
|
+
return "";
|
|
5218
|
+
}
|
|
5219
|
+
}
|
|
5220
|
+
function htmlToBlob(html) {
|
|
5221
|
+
return btoa(unescape(encodeURIComponent(html)));
|
|
5222
|
+
}
|
|
5223
|
+
function serverMgmtInner(app) {
|
|
4672
5224
|
if (!app) return "";
|
|
4673
5225
|
var isUrlApp = app.source === "url" && !app.blob;
|
|
4674
5226
|
var svrState = app.publishedFilename && getServerState()[app.publishedFilename] || null;
|
|
@@ -4701,6 +5253,7 @@
|
|
|
4701
5253
|
var app = detailGetApp();
|
|
4702
5254
|
if (!app) return;
|
|
4703
5255
|
monetizeOnOpen(detailServerOwner(app), app.publishedFilename || "", detailIsOwnPublished(app));
|
|
5256
|
+
costOnOpen(detailServerOwner(app), app.publishedFilename || "", detailIsOwnPublished(app));
|
|
4704
5257
|
document.getElementById("detail-view").hidden = false;
|
|
4705
5258
|
renderDetailView();
|
|
4706
5259
|
detailCheckAiAvailability();
|
|
@@ -4727,14 +5280,14 @@
|
|
|
4727
5280
|
var app = detailGetApp();
|
|
4728
5281
|
if (!app) return;
|
|
4729
5282
|
if (app.published && (app.publishedUrl || app.publishedFilename)) {
|
|
4730
|
-
var
|
|
5283
|
+
var base3 = (loadConfig().aimeatUrl || "").replace(/\/+$/, "");
|
|
4731
5284
|
var url;
|
|
4732
5285
|
if (app.publishedUrl) {
|
|
4733
|
-
url =
|
|
5286
|
+
url = base3 + app.publishedUrl;
|
|
4734
5287
|
} else {
|
|
4735
5288
|
var st = getServerState()[app.publishedFilename] || {};
|
|
4736
5289
|
var owner = st.owner || currentOwnerName() || "";
|
|
4737
|
-
url =
|
|
5290
|
+
url = base3 + "/v1/apps/" + encodeURIComponent(owner) + "/" + encodeURIComponent(app.publishedFilename);
|
|
4738
5291
|
}
|
|
4739
5292
|
viewPublished(url + "?mode=inline", app.name);
|
|
4740
5293
|
} else {
|
|
@@ -4756,11 +5309,6 @@
|
|
|
4756
5309
|
});
|
|
4757
5310
|
}
|
|
4758
5311
|
function onAuthChanged() {
|
|
4759
|
-
if (getDbMode() === "personal" && !currentOwnerName()) {
|
|
4760
|
-
setDbMode("global");
|
|
4761
|
-
}
|
|
4762
|
-
closeDbInstance();
|
|
4763
|
-
updateModeToggle();
|
|
4764
5312
|
try {
|
|
4765
5313
|
refreshAll();
|
|
4766
5314
|
} catch (e) {
|
|
@@ -4833,22 +5381,26 @@
|
|
|
4833
5381
|
syncClass = "ok";
|
|
4834
5382
|
syncText = t("detail.inSync");
|
|
4835
5383
|
}
|
|
4836
|
-
var
|
|
5384
|
+
var aimeatBase2 = config.aimeatUrl ? config.aimeatUrl.replace(/\/+$/, "") : "";
|
|
4837
5385
|
var shotOwner = detailServerOwner(app);
|
|
4838
5386
|
var shotFile = app.publishedFilename || "";
|
|
4839
|
-
var shotUrl = app.published && shotOwner && shotFile &&
|
|
5387
|
+
var shotUrl = app.published && shotOwner && shotFile && aimeatBase2 ? aimeatBase2 + "/v1/apps/" + encodeURIComponent(shotOwner) + "/" + encodeURIComponent(shotFile) + "/screenshot?t=" + Date.now() : "";
|
|
4840
5388
|
var shotImg = shotUrl ? '<img src="' + escapeHtml(shotUrl) + `" alt="App screenshot" loading="lazy" onerror="this.style.display='none'" style="max-width:260px;max-height:160px;border-radius:8px;border:1px solid var(--border-subtle);object-fit:cover;object-position:top center;flex:none" />` : "";
|
|
4841
5389
|
var statusHtml = '<div class="dtl-section"><h3>' + t("detail.status") + '</h3><div style="display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap"><div style="flex:1;min-width:200px"><div class="dtl-status-row"><div class="dtl-stat"><span class="dtl-stat-label">' + t("detail.statusLocal") + '</span><span class="dtl-stat-val">' + (app.blob ? fmtSize(localBytes) : isUrlApp ? "URL" : "—") + '</span></div><div class="dtl-stat"><span class="dtl-stat-label">' + t("detail.statusPublished") + '</span><span class="dtl-stat-val">' + escapeHtml(publishedV) + '</span></div></div><span class="dtl-sync ' + syncClass + '">' + escapeHtml(syncText) + "</span></div>" + shotImg + "</div></div>";
|
|
4842
5390
|
var tags = app.tags && app.tags.length ? app.tags.join(", ") : "—";
|
|
4843
5391
|
var cortex = app.usesCortex && app.usesCortex.length ? app.usesCortex.join(", ") : "—";
|
|
4844
5392
|
var created = app.addedAt ? new Date(app.addedAt).toLocaleString() : "—";
|
|
4845
|
-
var favBtn =
|
|
5393
|
+
var favBtn = "";
|
|
4846
5394
|
var aboutHeader = '<h3 style="display:flex;align-items:center;justify-content:space-between;gap:8px"><span>' + t("detail.about") + '</span><span style="display:flex;align-items:center;gap:8px">' + favBtn + (canEditAbout && !detailEditingAbout ? dtlBtn(t("detail.editDetails"), "window._launcher.detailAboutEdit()") : "") + "</span></h3>";
|
|
5395
|
+
var descs = app.descriptions || {};
|
|
5396
|
+
var descEnVal = descs.en || (app.description || "");
|
|
5397
|
+
var descFiVal = descs.fi || "";
|
|
4847
5398
|
var aboutBody;
|
|
4848
5399
|
if (detailEditingAbout) {
|
|
4849
|
-
aboutBody = '<label class="dtl-stat-label" for="detail-name-input">' + t("detail.nameLabel") + '</label><input id="detail-name-input" class="modal-input" maxlength="120" value="' + escapeHtml(app.name || "") + '" style="margin:4px 0 10px" /><label class="dtl-stat-label" for="detail-desc-
|
|
5400
|
+
aboutBody = '<label class="dtl-stat-label" for="detail-name-input">' + t("detail.nameLabel") + '</label><input id="detail-name-input" class="modal-input" maxlength="120" value="' + escapeHtml(app.name || "") + '" style="margin:4px 0 10px" /><label class="dtl-stat-label" for="detail-desc-en">' + t("detail.descEn") + '</label><textarea id="detail-desc-en" class="modal-input" rows="3" maxlength="2000" style="margin:4px 0 6px;resize:vertical">' + escapeHtml(descEnVal) + '</textarea><label class="dtl-stat-label" for="detail-desc-fi">' + t("detail.descFi") + '</label><textarea id="detail-desc-fi" class="modal-input" rows="3" maxlength="2000" style="margin:4px 0 6px;resize:vertical">' + escapeHtml(descFiVal) + '</textarea><div class="dtl-btn-row" style="margin:0 0 4px">' + dtlBtn("🌐 " + t("detail.translateEnFi"), "window._launcher.detailTranslateDesc('en','fi')", { id: "detail-tr-enfi" }) + dtlBtn("🌐 " + t("detail.translateFiEn"), "window._launcher.detailTranslateDesc('fi','en')", { id: "detail-tr-fien" }) + '</div><div class="dtl-ai-status" id="detail-tr-status" style="margin:0 0 8px"></div><label class="dtl-stat-label" for="detail-icon-input">' + t("detail.iconLabel") + '</label><input id="detail-icon-input" class="modal-input" maxlength="4" value="' + escapeHtml(app.icon || "") + '" style="margin:4px 0 10px;text-align:center;font-size:1.2rem" /><label class="dtl-stat-label" for="detail-tags-input">' + t("detail.tagsLabel") + '</label><input id="detail-tags-input" class="modal-input" value="' + escapeHtml((app.tags || []).join(", ")) + '" placeholder="tools, productivity" style="margin:4px 0 8px" /><div class="dtl-sync none" style="margin:0 0 10px">' + t("detail.renameHint") + '</div><div class="dtl-btn-row">' + dtlBtn(t("detail.saveDetails"), "window._launcher.detailAboutSave()", { variant: "primary" }) + dtlBtn(t("detail.cancelEdit"), "window._launcher.detailAboutCancel()") + "</div>";
|
|
4850
5401
|
} else {
|
|
4851
|
-
|
|
5402
|
+
var shownDesc = app.descriptions && app.descriptions[getLang()] || app.description || "";
|
|
5403
|
+
aboutBody = (shownDesc ? '<p class="dtl-desc">' + escapeHtml(shownDesc) + "</p>" : "") + '<div class="dtl-meta-grid">' + metaItem(t("detail.category"), app.category || "utility") + metaItem(t("detail.tags"), tags) + metaItem(t("detail.sourceLabel"), sourceLabelText(app.source)) + metaItem(t("detail.size"), app.blob ? fmtSize(localBytes) : "—") + metaItem(t("detail.created"), created) + metaItem(t("detail.usesCortex"), cortex) + // Provenance: if this app was forked from another, credit the source app.
|
|
4852
5404
|
(app.forkedFrom && app.forkedFrom.owner && app.forkedFrom.filename ? metaItem(t("detail.forkedFrom"), app.forkedFrom.owner + "/" + app.forkedFrom.filename + (app.forkedFrom.version ? " v" + app.forkedFrom.version : "")) : "") + "</div>";
|
|
4853
5405
|
}
|
|
4854
5406
|
var aboutHtml = '<div class="dtl-section">' + aboutHeader + aboutBody + "</div>";
|
|
@@ -4874,7 +5426,59 @@
|
|
|
4874
5426
|
(ownPub ? '<div id="detail-skill-attach" style="margin-top:8px">' + detailSkillAttachInner() + "</div>" : "") + "</div>";
|
|
4875
5427
|
}
|
|
4876
5428
|
var monetizeHtml = app.published && detailIsOwnPublished(app) ? '<div class="dtl-section" id="detail-monetize">' + monetizeSectionInner() + "</div>" : "";
|
|
4877
|
-
|
|
5429
|
+
var costHtml = app.published && detailIsOwnPublished(app) ? '<div class="dtl-section" id="detail-cost">' + costSectionInner() + "</div>" : "";
|
|
5430
|
+
var promoteHtml = app.published && detailIsOwnPublished(app) ? buildPromoteSection(app) : "";
|
|
5431
|
+
var agentsHtml = "";
|
|
5432
|
+
if (app.published) {
|
|
5433
|
+
var agOwner = detailServerOwner(app);
|
|
5434
|
+
var agFile = app.publishedFilename || "";
|
|
5435
|
+
var agDefs = appManifestAgents(agOwner, agFile);
|
|
5436
|
+
if (agDefs.length) {
|
|
5437
|
+
agentsHtml = '<div class="dtl-section"><h3>🤖 ' + (t("agents.title") || "Bundled agents") + '</h3><div style="font-size:.85rem;color:var(--text-muted);margin-bottom:6px">' + (t("agents.declares") || "") + '</div><div style="margin-bottom:8px">' + agDefs.map(function(d) {
|
|
5438
|
+
return '<span class="aga-chip">' + escapeHtml(d.agent_name || "") + "</span>";
|
|
5439
|
+
}).join(" ") + "</div>" + dtlBtn(
|
|
5440
|
+
"🤖 " + (t("agents.manage") || "Inspect & deploy"),
|
|
5441
|
+
"window._launcher.showAppAgentsModal('" + jsArg(agOwner) + "', '" + jsArg(agFile) + "')"
|
|
5442
|
+
) + "</div>";
|
|
5443
|
+
}
|
|
5444
|
+
}
|
|
5445
|
+
document.getElementById("detail-body").innerHTML = statusHtml + aboutHtml + aiHtml + versionsHtml + skillsHtml + agentsHtml + monetizeHtml + costHtml + promoteHtml + mgmtHtml + actionsHtml;
|
|
5446
|
+
}
|
|
5447
|
+
function promoteRef(app) {
|
|
5448
|
+
return detailServerOwner(app) + "/" + (app.publishedFilename || "");
|
|
5449
|
+
}
|
|
5450
|
+
function buildPromoteSection(app) {
|
|
5451
|
+
var ref = promoteRef(app);
|
|
5452
|
+
var cur = getPromotion(ref) || {};
|
|
5453
|
+
var on = !!(cur.en || cur.fi);
|
|
5454
|
+
return '<div class="dtl-section" id="detail-promote"><h3 style="display:flex;align-items:center;gap:8px">📣 ' + t("promote.title") + (on ? ' <span class="dtl-badge-on">' + t("promote.on") + "</span>" : "") + '</h3><p class="dtl-desc">' + t("promote.hint") + '</p><label class="dtl-stat-label" for="detail-promo-en">' + t("promote.en") + '</label><textarea id="detail-promo-en" class="modal-input" rows="2" maxlength="500" style="margin:4px 0 6px;resize:vertical">' + escapeHtml(cur.en || "") + '</textarea><label class="dtl-stat-label" for="detail-promo-fi">' + t("promote.fi") + '</label><textarea id="detail-promo-fi" class="modal-input" rows="2" maxlength="500" style="margin:4px 0 6px;resize:vertical">' + escapeHtml(cur.fi || "") + '</textarea><div class="dtl-btn-row" style="margin:0 0 4px">' + dtlBtn("🌐 " + t("detail.translateEnFi"), "window._launcher.detailTranslateDesc('en','fi','detail-promo-','detail-promo-tr-status')") + dtlBtn("🌐 " + t("detail.translateFiEn"), "window._launcher.detailTranslateDesc('fi','en','detail-promo-','detail-promo-tr-status')") + '</div><div class="dtl-ai-status" id="detail-promo-tr-status" style="margin:0 0 8px"></div><div class="dtl-btn-row">' + dtlBtn(t("promote.save"), "window._launcher.detailPromoteSave()", { variant: "primary" }) + (on ? dtlBtn(t("promote.remove"), "window._launcher.detailPromoteClear()") : "") + '</div><div class="dtl-ai-status" id="detail-promo-status"></div></div>';
|
|
5455
|
+
}
|
|
5456
|
+
function detailPromoteSave() {
|
|
5457
|
+
var app = detailGetApp();
|
|
5458
|
+
if (!app || !detailIsOwnPublished(app)) return;
|
|
5459
|
+
var en = (document.getElementById("detail-promo-en") || {}).value || "";
|
|
5460
|
+
var fi = (document.getElementById("detail-promo-fi") || {}).value || "";
|
|
5461
|
+
var statusEl = document.getElementById("detail-promo-status");
|
|
5462
|
+
if (statusEl) {
|
|
5463
|
+
statusEl.style.color = "var(--text-muted)";
|
|
5464
|
+
statusEl.textContent = t("promote.saving");
|
|
5465
|
+
}
|
|
5466
|
+
setPromotion(promoteRef(app), { en, fi }).then(function(nowOn) {
|
|
5467
|
+
renderApps();
|
|
5468
|
+
renderDetailView();
|
|
5469
|
+
var s2 = document.getElementById("detail-promo-status");
|
|
5470
|
+
if (s2) {
|
|
5471
|
+
s2.style.color = "#34d399";
|
|
5472
|
+
s2.textContent = nowOn ? "✔ " + t("promote.saved") : "✔ " + t("promote.removed");
|
|
5473
|
+
}
|
|
5474
|
+
});
|
|
5475
|
+
}
|
|
5476
|
+
function detailPromoteClear() {
|
|
5477
|
+
var en = document.getElementById("detail-promo-en");
|
|
5478
|
+
if (en) en.value = "";
|
|
5479
|
+
var fi = document.getElementById("detail-promo-fi");
|
|
5480
|
+
if (fi) fi.value = "";
|
|
5481
|
+
detailPromoteSave();
|
|
4878
5482
|
}
|
|
4879
5483
|
function detailLoadSkills(owner, filename) {
|
|
4880
5484
|
var config = loadConfig();
|
|
@@ -5086,27 +5690,27 @@
|
|
|
5086
5690
|
return h;
|
|
5087
5691
|
}
|
|
5088
5692
|
function skillListMine() {
|
|
5089
|
-
var
|
|
5090
|
-
if (!
|
|
5091
|
-
return fetch(
|
|
5693
|
+
var base3 = skillApiBase();
|
|
5694
|
+
if (!base3) return Promise.reject(new Error("No server configured"));
|
|
5695
|
+
return fetch(base3 + "/v1/skills?scope=user", { headers: skillAuthHeaders(false) }).then(function(r) {
|
|
5092
5696
|
return r.json();
|
|
5093
5697
|
}).then(function(j) {
|
|
5094
5698
|
return j.data && j.data.skills ? j.data.skills : [];
|
|
5095
5699
|
});
|
|
5096
5700
|
}
|
|
5097
5701
|
function skillGetMine(name) {
|
|
5098
|
-
var
|
|
5099
|
-
return fetch(
|
|
5702
|
+
var base3 = skillApiBase();
|
|
5703
|
+
return fetch(base3 + "/v1/skills/" + encodeURIComponent(name) + "?scope=user", { headers: skillAuthHeaders(false) }).then(function(r) {
|
|
5100
5704
|
return r.json();
|
|
5101
5705
|
}).then(function(j) {
|
|
5102
5706
|
return j.data && j.data.skill || null;
|
|
5103
5707
|
});
|
|
5104
5708
|
}
|
|
5105
5709
|
function skillPublish(skillMd, files) {
|
|
5106
|
-
var
|
|
5710
|
+
var base3 = skillApiBase();
|
|
5107
5711
|
var body = { skill_md: skillMd };
|
|
5108
5712
|
if (files && Object.keys(files).length) body.files = files;
|
|
5109
|
-
return fetch(
|
|
5713
|
+
return fetch(base3 + "/v1/skills", { method: "POST", headers: skillAuthHeaders(true), body: JSON.stringify(body) }).then(function(r) {
|
|
5110
5714
|
return r.json().then(function(j) {
|
|
5111
5715
|
if (!j.ok) throw new Error(j.error && (j.error.message || j.error.code) || "HTTP " + r.status);
|
|
5112
5716
|
return j.data && j.data.skill || null;
|
|
@@ -5164,11 +5768,17 @@
|
|
|
5164
5768
|
var app = detailGetApp();
|
|
5165
5769
|
if (!app) return;
|
|
5166
5770
|
var nameEl = document.getElementById("detail-name-input");
|
|
5167
|
-
var
|
|
5771
|
+
var enEl = document.getElementById("detail-desc-en");
|
|
5772
|
+
var fiEl = document.getElementById("detail-desc-fi");
|
|
5168
5773
|
var iconEl = document.getElementById("detail-icon-input");
|
|
5169
5774
|
var tagsEl = document.getElementById("detail-tags-input");
|
|
5170
5775
|
var newName = nameEl ? nameEl.value.trim() : "";
|
|
5171
|
-
var
|
|
5776
|
+
var enDesc = enEl ? enEl.value.trim() : "";
|
|
5777
|
+
var fiDesc = fiEl ? fiEl.value.trim() : "";
|
|
5778
|
+
var newDescriptions = {};
|
|
5779
|
+
if (enDesc) newDescriptions.en = enDesc;
|
|
5780
|
+
if (fiDesc) newDescriptions.fi = fiDesc;
|
|
5781
|
+
var newDesc = enDesc || fiDesc || "";
|
|
5172
5782
|
var newIcon = iconEl ? iconEl.value.trim() : app.icon || "";
|
|
5173
5783
|
var newTags = tagsEl ? tagsEl.value.split(",").map(function(s) {
|
|
5174
5784
|
return s.trim();
|
|
@@ -5180,12 +5790,13 @@
|
|
|
5180
5790
|
}
|
|
5181
5791
|
if (app.published && !newDesc) {
|
|
5182
5792
|
showNotice(t("detail.descRequired") || "Description cannot be empty.");
|
|
5183
|
-
if (
|
|
5793
|
+
if (enEl) enEl.focus();
|
|
5184
5794
|
return;
|
|
5185
5795
|
}
|
|
5186
5796
|
function finishLocal() {
|
|
5187
5797
|
app.name = newName;
|
|
5188
5798
|
app.description = newDesc;
|
|
5799
|
+
app.descriptions = newDescriptions;
|
|
5189
5800
|
app.icon = newIcon;
|
|
5190
5801
|
app.tags = newTags;
|
|
5191
5802
|
saveApp(app).then(function() {
|
|
@@ -5211,7 +5822,7 @@
|
|
|
5211
5822
|
fetch(aimeatUrl + "/v1/apps/" + encodeURIComponent(filename), {
|
|
5212
5823
|
method: "PATCH",
|
|
5213
5824
|
headers: { "Authorization": "Bearer " + token, "Content-Type": "application/json" },
|
|
5214
|
-
body: JSON.stringify({ name: newName, description: newDesc })
|
|
5825
|
+
body: JSON.stringify({ name: newName, description: newDesc, descriptions: newDescriptions })
|
|
5215
5826
|
}).then(function(resp) {
|
|
5216
5827
|
return resp.json().then(function(j) {
|
|
5217
5828
|
return { ok: resp.ok, j };
|
|
@@ -5219,9 +5830,10 @@
|
|
|
5219
5830
|
}).then(function(res) {
|
|
5220
5831
|
if (res.ok && res.j && res.j.ok !== false) {
|
|
5221
5832
|
var key = owner + "\n" + filename;
|
|
5222
|
-
|
|
5223
|
-
|
|
5224
|
-
|
|
5833
|
+
getServerManifests2()[key] = getServerManifests2()[key] || {};
|
|
5834
|
+
getServerManifests2()[key].name = newName;
|
|
5835
|
+
getServerManifests2()[key].description = newDesc;
|
|
5836
|
+
getServerManifests2()[key].descriptions = newDescriptions;
|
|
5225
5837
|
finishLocal();
|
|
5226
5838
|
} else {
|
|
5227
5839
|
showNotice("Failed: " + (res.j && res.j.error && res.j.error.message || "Unknown error"));
|
|
@@ -5230,6 +5842,69 @@
|
|
|
5230
5842
|
showNotice("Error: " + (err.message || err));
|
|
5231
5843
|
});
|
|
5232
5844
|
}
|
|
5845
|
+
function detailTranslateDesc(srcLang, dstLang, prefix, statusId) {
|
|
5846
|
+
prefix = prefix || "detail-desc-";
|
|
5847
|
+
var srcEl = document.getElementById(prefix + srcLang);
|
|
5848
|
+
var dstEl = document.getElementById(prefix + dstLang);
|
|
5849
|
+
var statusEl = document.getElementById(statusId || "detail-tr-status");
|
|
5850
|
+
if (!srcEl || !dstEl) return;
|
|
5851
|
+
var text = (srcEl.value || "").trim();
|
|
5852
|
+
if (!text) {
|
|
5853
|
+
if (statusEl) statusEl.textContent = t("detail.trNeedSource");
|
|
5854
|
+
return;
|
|
5855
|
+
}
|
|
5856
|
+
var token = getCortexOwnerToken2();
|
|
5857
|
+
if (!token) {
|
|
5858
|
+
if (statusEl) statusEl.textContent = t("detail.aiLoginNeeded");
|
|
5859
|
+
return;
|
|
5860
|
+
}
|
|
5861
|
+
var config = loadConfig();
|
|
5862
|
+
var aimeatUrl = (config.aimeatUrl || "").replace(/\/+$/, "");
|
|
5863
|
+
if (!aimeatUrl) {
|
|
5864
|
+
if (statusEl) statusEl.textContent = t("detail.aiUnavailable");
|
|
5865
|
+
return;
|
|
5866
|
+
}
|
|
5867
|
+
var langName = { en: "English", fi: "Finnish" };
|
|
5868
|
+
if (statusEl) {
|
|
5869
|
+
statusEl.style.color = "var(--text-muted)";
|
|
5870
|
+
statusEl.textContent = t("detail.translating");
|
|
5871
|
+
}
|
|
5872
|
+
var systemPrompt = "You are a professional translator for short app-store copy. Translate the text from " + (langName[srcLang] || srcLang) + " to " + (langName[dstLang] || dstLang) + ". Return ONLY the translated text — no quotes, no notes, no explanation. Keep it concise and natural.";
|
|
5873
|
+
fetch(aimeatUrl + "/v1/ai/complete", {
|
|
5874
|
+
method: "POST",
|
|
5875
|
+
headers: { "Content-Type": "application/json", "Authorization": "Bearer " + token },
|
|
5876
|
+
body: JSON.stringify({ prompt: text, systemPrompt, app_id: "app-catalog" })
|
|
5877
|
+
}).then(function(resp) {
|
|
5878
|
+
return resp.json();
|
|
5879
|
+
}).then(function(json) {
|
|
5880
|
+
if (!json || !json.ok) {
|
|
5881
|
+
var msg = json && json.error && json.error.message || "Translation failed";
|
|
5882
|
+
if (statusEl) {
|
|
5883
|
+
statusEl.style.color = "var(--accent)";
|
|
5884
|
+
statusEl.textContent = "✘ " + msg;
|
|
5885
|
+
}
|
|
5886
|
+
return;
|
|
5887
|
+
}
|
|
5888
|
+
var out = (json.data && json.data.content ? json.data.content : "").trim();
|
|
5889
|
+
if (!out) {
|
|
5890
|
+
if (statusEl) {
|
|
5891
|
+
statusEl.style.color = "var(--accent)";
|
|
5892
|
+
statusEl.textContent = "✘ " + t("detail.trEmpty");
|
|
5893
|
+
}
|
|
5894
|
+
return;
|
|
5895
|
+
}
|
|
5896
|
+
dstEl.value = out;
|
|
5897
|
+
if (statusEl) {
|
|
5898
|
+
statusEl.style.color = "#34d399";
|
|
5899
|
+
statusEl.textContent = "✔ " + t("detail.trDone");
|
|
5900
|
+
}
|
|
5901
|
+
}).catch(function(err) {
|
|
5902
|
+
if (statusEl) {
|
|
5903
|
+
statusEl.style.color = "var(--accent)";
|
|
5904
|
+
statusEl.textContent = "✘ " + (err.message || "Translation failed");
|
|
5905
|
+
}
|
|
5906
|
+
});
|
|
5907
|
+
}
|
|
5233
5908
|
function detailSetScreenshot() {
|
|
5234
5909
|
var app = detailGetApp();
|
|
5235
5910
|
if (!app) return;
|
|
@@ -5522,9 +6197,9 @@
|
|
|
5522
6197
|
function draftApi(method, owner, filename, sub, body) {
|
|
5523
6198
|
var cfg = loadConfig();
|
|
5524
6199
|
if (!cfg.aimeatUrl) return Promise.reject(new Error("Set the AIMEAT server URL in Settings first"));
|
|
5525
|
-
var
|
|
6200
|
+
var base3 = cfg.aimeatUrl.replace(/\/+$/, "");
|
|
5526
6201
|
var path = "/v1/apps/" + encodeURIComponent(owner) + "/" + encodeURIComponent(filename) + "/" + sub;
|
|
5527
|
-
return fetch(
|
|
6202
|
+
return fetch(base3 + path, {
|
|
5528
6203
|
method,
|
|
5529
6204
|
headers: { "Authorization": "Bearer " + getCortexOwnerToken2(), "Content-Type": "application/json" },
|
|
5530
6205
|
body: body ? JSON.stringify(body) : void 0
|
|
@@ -5576,6 +6251,21 @@
|
|
|
5576
6251
|
return false;
|
|
5577
6252
|
});
|
|
5578
6253
|
}
|
|
6254
|
+
function openStagingPreview(owner, filename) {
|
|
6255
|
+
if (!getCortexOwnerToken2()) {
|
|
6256
|
+
showNotice(t("detail.draftNeedsSignin"));
|
|
6257
|
+
return;
|
|
6258
|
+
}
|
|
6259
|
+
if (!owner || !filename) {
|
|
6260
|
+
showNotice(t("detail.draftNeedsPublished"));
|
|
6261
|
+
return;
|
|
6262
|
+
}
|
|
6263
|
+
draftApi("POST", owner, filename, "draft/preview-token").then(function(data) {
|
|
6264
|
+
window.open(data.preview_url, "_blank", "noopener");
|
|
6265
|
+
}).catch(function(err) {
|
|
6266
|
+
showNotice(err.message || "Draft preview failed");
|
|
6267
|
+
});
|
|
6268
|
+
}
|
|
5579
6269
|
function publishDraftBytes(app, contentB64, statusEl, onDone) {
|
|
5580
6270
|
var tgt = draftStageTarget(app, statusEl);
|
|
5581
6271
|
if (!tgt) return;
|
|
@@ -5693,12 +6383,13 @@
|
|
|
5693
6383
|
return;
|
|
5694
6384
|
}
|
|
5695
6385
|
var aimeatUrl = config.aimeatUrl.replace(/\/+$/, "");
|
|
5696
|
-
var meta =
|
|
6386
|
+
var meta = getServerManifests2()[owner + "\n" + filename] || {};
|
|
5697
6387
|
fetchAppContentBase64(aimeatUrl, owner, filename).then(function(b64) {
|
|
5698
6388
|
var app = {
|
|
5699
6389
|
id: generateId2(),
|
|
5700
6390
|
name: meta.name || filename.replace(/\.html?$/i, ""),
|
|
5701
6391
|
description: meta.description || "",
|
|
6392
|
+
descriptions: meta.descriptions || null,
|
|
5702
6393
|
category: meta.category || "utility",
|
|
5703
6394
|
tags: meta.tags || [],
|
|
5704
6395
|
usesCortex: meta.usesCortex || [],
|
|
@@ -5924,7 +6615,7 @@
|
|
|
5924
6615
|
var statusEl = document.getElementById("versions-status");
|
|
5925
6616
|
statusEl.textContent = "Restoring version " + version + "…";
|
|
5926
6617
|
statusEl.style.color = "#34d399";
|
|
5927
|
-
var meta =
|
|
6618
|
+
var meta = getServerManifests2()[owner + "\n" + filename] || {};
|
|
5928
6619
|
fetchAppContentBase64(aimeatUrl, owner, filename, version).then(function(b64) {
|
|
5929
6620
|
var body = {
|
|
5930
6621
|
filename,
|
|
@@ -5932,6 +6623,7 @@
|
|
|
5932
6623
|
mime_type: "text/html",
|
|
5933
6624
|
name: meta.name || filename.replace(/\.html?$/i, ""),
|
|
5934
6625
|
description: meta.description || "",
|
|
6626
|
+
descriptions: meta.descriptions || null,
|
|
5935
6627
|
category: meta.category || "utility",
|
|
5936
6628
|
tags: meta.tags || [],
|
|
5937
6629
|
uses_cortex: meta.usesCortex || []
|
|
@@ -5967,8 +6659,8 @@
|
|
|
5967
6659
|
showNotice(t("common.loginRequired") || "You must be logged in to fork an app into your own catalogue. Sign in first.");
|
|
5968
6660
|
return;
|
|
5969
6661
|
}
|
|
5970
|
-
var
|
|
5971
|
-
var suggested =
|
|
6662
|
+
var base3 = (filename || "app").replace(/\.html?$/i, "");
|
|
6663
|
+
var suggested = base3 + "-fork.html";
|
|
5972
6664
|
var newName = prompt(t("fork.prompt") || 'Fork "' + filename + '" into a new app.\n\nNew filename:', suggested);
|
|
5973
6665
|
if (!newName) return;
|
|
5974
6666
|
newName = newName.trim();
|
|
@@ -6017,11 +6709,7 @@
|
|
|
6017
6709
|
}
|
|
6018
6710
|
|
|
6019
6711
|
// src/static/app-catalog/js/settings.js
|
|
6020
|
-
|
|
6021
|
-
var renderApps2;
|
|
6022
|
-
var loadPublishedApps2;
|
|
6023
|
-
function initSettings(deps) {
|
|
6024
|
-
({ generateId: generateId3, renderApps: renderApps2, loadPublishedApps: loadPublishedApps2 } = deps);
|
|
6712
|
+
function initSettings() {
|
|
6025
6713
|
}
|
|
6026
6714
|
function applyTheme(theme) {
|
|
6027
6715
|
if (theme === "dark") {
|
|
@@ -6168,260 +6856,36 @@
|
|
|
6168
6856
|
function closeHelp() {
|
|
6169
6857
|
document.getElementById("help-overlay").hidden = true;
|
|
6170
6858
|
}
|
|
6171
|
-
function exportBackup() {
|
|
6172
|
-
getAllApps().then(function(apps) {
|
|
6173
|
-
var config = loadConfig();
|
|
6174
|
-
var backup = {
|
|
6175
|
-
version: 1,
|
|
6176
|
-
exportedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6177
|
-
config,
|
|
6178
|
-
apps
|
|
6179
|
-
};
|
|
6180
|
-
var json = JSON.stringify(backup, null, 2);
|
|
6181
|
-
var blob = new Blob([json], { type: "application/json" });
|
|
6182
|
-
var url = URL.createObjectURL(blob);
|
|
6183
|
-
var a = document.createElement("a");
|
|
6184
|
-
a.href = url;
|
|
6185
|
-
a.download = "app-catalog-backup-" + (/* @__PURE__ */ new Date()).toISOString().slice(0, 10) + ".json";
|
|
6186
|
-
document.body.appendChild(a);
|
|
6187
|
-
a.click();
|
|
6188
|
-
document.body.removeChild(a);
|
|
6189
|
-
URL.revokeObjectURL(url);
|
|
6190
|
-
});
|
|
6191
|
-
}
|
|
6192
|
-
function localAppKey(a) {
|
|
6193
|
-
if (a.publishedFilename) return "pf:" + a.publishedFilename;
|
|
6194
|
-
return "nm:" + (a.name || "") + "|" + (a.blob ? a.blob.length : a.url || "");
|
|
6195
|
-
}
|
|
6196
|
-
var jsonImportState = null;
|
|
6197
|
-
function handleImportBackup(file) {
|
|
6198
|
-
if (!file) return;
|
|
6199
|
-
var reader = new FileReader();
|
|
6200
|
-
reader.onload = function() {
|
|
6201
|
-
var backup;
|
|
6202
|
-
try {
|
|
6203
|
-
backup = JSON.parse(reader.result);
|
|
6204
|
-
} catch (e) {
|
|
6205
|
-
showNotice("Failed to parse backup file: " + (e.message || e));
|
|
6206
|
-
return;
|
|
6207
|
-
}
|
|
6208
|
-
if (!backup.apps || !Array.isArray(backup.apps)) {
|
|
6209
|
-
showNotice("Invalid backup file: missing apps array");
|
|
6210
|
-
return;
|
|
6211
|
-
}
|
|
6212
|
-
getAllApps().then(function(existing) {
|
|
6213
|
-
var existingKeys = {};
|
|
6214
|
-
existing.forEach(function(a) {
|
|
6215
|
-
existingKeys[localAppKey(a)] = true;
|
|
6216
|
-
});
|
|
6217
|
-
jsonImportState = {
|
|
6218
|
-
backup,
|
|
6219
|
-
rows: backup.apps.map(function(a) {
|
|
6220
|
-
return { app: a, isDup: !!existingKeys[localAppKey(a)] };
|
|
6221
|
-
})
|
|
6222
|
-
};
|
|
6223
|
-
renderJsonImportModal();
|
|
6224
|
-
});
|
|
6225
|
-
};
|
|
6226
|
-
reader.readAsText(file);
|
|
6227
|
-
}
|
|
6228
|
-
function renderJsonImportModal() {
|
|
6229
|
-
var rows = jsonImportState.rows;
|
|
6230
|
-
var body = document.getElementById("json-import-body");
|
|
6231
|
-
var html = '<p style="font-size:.8rem;color:var(--text-muted);margin:4px 0 8px">' + t("jsonImport.desc") + '</p><div class="backup-toolbar-row"><div><button class="backup-link-btn" onclick="window._launcher.jsonImportSelectAll(true)">' + t("backup.selectAll") + '</button> / <button class="backup-link-btn" onclick="window._launcher.jsonImportSelectAll(false)">' + t("backup.selectNone") + '</button></div></div><table class="backup-table"><tbody>';
|
|
6232
|
-
for (var i = 0; i < rows.length; i++) {
|
|
6233
|
-
var a = rows[i].app;
|
|
6234
|
-
html += '<tr><td><input type="checkbox" class="json-import-cb" data-i="' + i + '"' + (rows[i].isDup ? "" : " checked") + "/></td><td>" + escapeHtml(a.name || a.publishedFilename || "Untitled") + (a.publishedFilename ? '<div class="mono-cell">' + escapeHtml(a.publishedFilename) + "</div>" : "") + "</td><td>" + sourceLabel(a.source) + "</td><td>" + (rows[i].isDup ? '<span class="backup-status-badge backup-status-exists">' + t("jsonImport.statusDup") + "</span>" : '<span class="backup-status-badge backup-status-new">' + t("backup.statusNew") + "</span>") + "</td></tr>";
|
|
6235
|
-
}
|
|
6236
|
-
html += "</tbody></table>";
|
|
6237
|
-
if (jsonImportState.backup.config && typeof jsonImportState.backup.config === "object") {
|
|
6238
|
-
html += '<label style="display:flex;align-items:center;gap:8px;margin-top:10px;font-size:.85rem"><input type="checkbox" id="json-import-config"/> ' + t("jsonImport.config") + "</label>";
|
|
6239
|
-
}
|
|
6240
|
-
body.innerHTML = html;
|
|
6241
|
-
document.getElementById("json-import-status").textContent = "";
|
|
6242
|
-
document.getElementById("json-import-btn").style.display = "";
|
|
6243
|
-
document.getElementById("json-import-overlay").hidden = false;
|
|
6244
|
-
}
|
|
6245
|
-
function jsonImportSelectAll(checked) {
|
|
6246
|
-
document.querySelectorAll(".json-import-cb").forEach(function(b) {
|
|
6247
|
-
b.checked = checked;
|
|
6248
|
-
});
|
|
6249
|
-
}
|
|
6250
|
-
function submitJsonImport() {
|
|
6251
|
-
var statusEl = document.getElementById("json-import-status");
|
|
6252
|
-
var selected = [];
|
|
6253
|
-
document.querySelectorAll(".json-import-cb").forEach(function(b) {
|
|
6254
|
-
if (b.checked) selected.push(jsonImportState.rows[parseInt(b.getAttribute("data-i"), 10)].app);
|
|
6255
|
-
});
|
|
6256
|
-
var configCb = document.getElementById("json-import-config");
|
|
6257
|
-
var importConfig = !!(configCb && configCb.checked);
|
|
6258
|
-
if (selected.length === 0 && !importConfig) {
|
|
6259
|
-
statusEl.style.color = "#ef4444";
|
|
6260
|
-
statusEl.textContent = t("backup.nothingSelected");
|
|
6261
|
-
return;
|
|
6262
|
-
}
|
|
6263
|
-
if (importConfig) {
|
|
6264
|
-
var merged = Object.assign({}, loadConfig(), jsonImportState.backup.config);
|
|
6265
|
-
saveConfig(merged);
|
|
6266
|
-
applyTheme(merged.theme);
|
|
6267
|
-
}
|
|
6268
|
-
Promise.all(selected.map(function(a) {
|
|
6269
|
-
var app = Object.assign({}, a);
|
|
6270
|
-
app.id = generateId3();
|
|
6271
|
-
return saveApp(app);
|
|
6272
|
-
})).then(function() {
|
|
6273
|
-
statusEl.style.color = "#34d399";
|
|
6274
|
-
statusEl.textContent = "✔ " + t("jsonImport.done") + ": " + selected.length;
|
|
6275
|
-
document.getElementById("json-import-btn").style.display = "none";
|
|
6276
|
-
renderApps2();
|
|
6277
|
-
loadPublishedApps2();
|
|
6278
|
-
});
|
|
6279
|
-
}
|
|
6280
|
-
function removeDuplicateApps() {
|
|
6281
|
-
getAllApps().then(async function(apps) {
|
|
6282
|
-
var groups = {};
|
|
6283
|
-
apps.forEach(function(a) {
|
|
6284
|
-
var k = localAppKey(a);
|
|
6285
|
-
(groups[k] = groups[k] || []).push(a);
|
|
6286
|
-
});
|
|
6287
|
-
var toDelete = [];
|
|
6288
|
-
Object.keys(groups).forEach(function(k) {
|
|
6289
|
-
var g = groups[k];
|
|
6290
|
-
if (g.length < 2) return;
|
|
6291
|
-
g.sort(function(x, y) {
|
|
6292
|
-
if (!!y.favorite !== !!x.favorite) return (y.favorite ? 1 : 0) - (x.favorite ? 1 : 0);
|
|
6293
|
-
return (x.addedAt || "") < (y.addedAt || "") ? -1 : 1;
|
|
6294
|
-
});
|
|
6295
|
-
toDelete = toDelete.concat(g.slice(1));
|
|
6296
|
-
});
|
|
6297
|
-
if (toDelete.length === 0) {
|
|
6298
|
-
showNotice(t("dedup.none"));
|
|
6299
|
-
return;
|
|
6300
|
-
}
|
|
6301
|
-
if (!await showConfirm(t("dedup.confirm") + " " + toDelete.length)) return;
|
|
6302
|
-
Promise.all(toDelete.map(function(a) {
|
|
6303
|
-
return deleteApp(a.id);
|
|
6304
|
-
})).then(function() {
|
|
6305
|
-
renderApps2();
|
|
6306
|
-
loadPublishedApps2();
|
|
6307
|
-
showNotice(t("dedup.done") + ": " + toDelete.length);
|
|
6308
|
-
});
|
|
6309
|
-
});
|
|
6310
|
-
}
|
|
6311
|
-
async function clearAllData() {
|
|
6312
|
-
if (!await showConfirm(t("confirm.clearAll1"))) return;
|
|
6313
|
-
if (!await showConfirm(t("confirm.clearAll2"))) return;
|
|
6314
|
-
openDB().then(function(db) {
|
|
6315
|
-
return new Promise(function(resolve, reject) {
|
|
6316
|
-
var tx = db.transaction(STORE_NAME, "readwrite");
|
|
6317
|
-
tx.objectStore(STORE_NAME).clear();
|
|
6318
|
-
tx.oncomplete = function() {
|
|
6319
|
-
resolve();
|
|
6320
|
-
};
|
|
6321
|
-
tx.onerror = function() {
|
|
6322
|
-
reject(tx.error);
|
|
6323
|
-
};
|
|
6324
|
-
});
|
|
6325
|
-
}).then(function() {
|
|
6326
|
-
localStorage.removeItem("appLauncherConfig");
|
|
6327
|
-
applyTheme("dark");
|
|
6328
|
-
renderApps2();
|
|
6329
|
-
document.getElementById("settings-overlay").hidden = true;
|
|
6330
|
-
showNotice("All data cleared");
|
|
6331
|
-
});
|
|
6332
|
-
}
|
|
6333
6859
|
|
|
6334
6860
|
// src/static/app-catalog/js/apps-io.js
|
|
6335
|
-
var
|
|
6861
|
+
var generateId3;
|
|
6336
6862
|
var readFileAsText2;
|
|
6337
|
-
var
|
|
6863
|
+
var renderApps2;
|
|
6338
6864
|
var getMainApps2;
|
|
6865
|
+
var showPublishModal2;
|
|
6339
6866
|
function initAppsIo(deps) {
|
|
6340
|
-
({ generateId:
|
|
6867
|
+
({ generateId: generateId3, readFileAsText: readFileAsText2, renderApps: renderApps2, getMainApps: getMainApps2, showPublishModal: showPublishModal2 } = deps);
|
|
6341
6868
|
}
|
|
6342
|
-
|
|
6343
|
-
var
|
|
6344
|
-
var bundledHtml = await bundleZip(files);
|
|
6345
|
-
var encoded = btoa(unescape(encodeURIComponent(bundledHtml)));
|
|
6869
|
+
function createAppFromHtml(name, html, icon, tags, description) {
|
|
6870
|
+
var encoded = btoa(unescape(encodeURIComponent(html)));
|
|
6346
6871
|
var app = {
|
|
6347
|
-
id:
|
|
6872
|
+
id: generateId3(),
|
|
6348
6873
|
name,
|
|
6349
|
-
description: "",
|
|
6350
|
-
source: "
|
|
6874
|
+
description: description || "",
|
|
6875
|
+
source: "create",
|
|
6351
6876
|
url: null,
|
|
6352
6877
|
blob: encoded,
|
|
6353
|
-
tags,
|
|
6354
|
-
openMode,
|
|
6355
|
-
icon: icon || "📦",
|
|
6356
|
-
screenshot: null,
|
|
6357
|
-
favorite: false,
|
|
6358
|
-
addedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6359
|
-
lastOpenedAt: null
|
|
6360
|
-
};
|
|
6361
|
-
await saveApp(app);
|
|
6362
|
-
return app;
|
|
6363
|
-
}
|
|
6364
|
-
function addAppFromUrl(name, url, icon, tags, openMode) {
|
|
6365
|
-
var app = {
|
|
6366
|
-
id: generateId4(),
|
|
6367
|
-
name,
|
|
6368
|
-
description: "",
|
|
6369
|
-
source: "url",
|
|
6370
|
-
url,
|
|
6371
|
-
blob: null,
|
|
6372
|
-
tags,
|
|
6373
|
-
openMode,
|
|
6878
|
+
tags: tags || [],
|
|
6374
6879
|
icon: icon || "📝",
|
|
6375
|
-
|
|
6376
|
-
|
|
6377
|
-
addedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6378
|
-
lastOpenedAt: null
|
|
6379
|
-
};
|
|
6380
|
-
return saveApp(app).then(function() {
|
|
6381
|
-
return app;
|
|
6382
|
-
});
|
|
6383
|
-
}
|
|
6384
|
-
function addAppFromFile(name, file, icon, tags, openMode) {
|
|
6385
|
-
return readFileAsText2(file).then(function(content) {
|
|
6386
|
-
var encoded = btoa(unescape(encodeURIComponent(content)));
|
|
6387
|
-
var app = {
|
|
6388
|
-
id: generateId4(),
|
|
6389
|
-
name,
|
|
6390
|
-
description: "",
|
|
6391
|
-
source: "local",
|
|
6392
|
-
url: null,
|
|
6393
|
-
blob: encoded,
|
|
6394
|
-
tags,
|
|
6395
|
-
openMode,
|
|
6396
|
-
icon: icon || "📝",
|
|
6397
|
-
screenshot: null,
|
|
6398
|
-
favorite: false,
|
|
6399
|
-
addedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6400
|
-
lastOpenedAt: null
|
|
6401
|
-
};
|
|
6402
|
-
return saveApp(app).then(function() {
|
|
6403
|
-
return app;
|
|
6404
|
-
});
|
|
6405
|
-
});
|
|
6406
|
-
}
|
|
6407
|
-
function addAppFromSource(name, sourceCode, icon, tags, openMode) {
|
|
6408
|
-
var encoded = btoa(unescape(encodeURIComponent(sourceCode)));
|
|
6409
|
-
var app = {
|
|
6410
|
-
id: generateId4(),
|
|
6411
|
-
name,
|
|
6412
|
-
description: parseAppMeta(sourceCode).description || "",
|
|
6413
|
-
source: "local",
|
|
6414
|
-
url: null,
|
|
6415
|
-
blob: encoded,
|
|
6416
|
-
tags,
|
|
6417
|
-
openMode,
|
|
6418
|
-
icon: icon || "📝",
|
|
6419
|
-
screenshot: null,
|
|
6420
|
-
favorite: false,
|
|
6421
|
-
addedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6422
|
-
lastOpenedAt: null
|
|
6880
|
+
published: false,
|
|
6881
|
+
addedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
6423
6882
|
};
|
|
6424
6883
|
return saveApp(app).then(function() {
|
|
6884
|
+
try {
|
|
6885
|
+
getMainApps2().push(app);
|
|
6886
|
+
} catch (e) {
|
|
6887
|
+
}
|
|
6888
|
+
if (typeof showPublishModal2 === "function") showPublishModal2(app.id, { unlisted: true });
|
|
6425
6889
|
return app;
|
|
6426
6890
|
});
|
|
6427
6891
|
}
|
|
@@ -6430,7 +6894,7 @@
|
|
|
6430
6894
|
function showModal() {
|
|
6431
6895
|
document.getElementById("modal-overlay").hidden = false;
|
|
6432
6896
|
document.getElementById("modal-title").textContent = t("addModal.title");
|
|
6433
|
-
switchTab("
|
|
6897
|
+
switchTab("paste");
|
|
6434
6898
|
}
|
|
6435
6899
|
function requireSignInThen(next) {
|
|
6436
6900
|
if (getCortexOwnerToken()) {
|
|
@@ -6478,7 +6942,6 @@
|
|
|
6478
6942
|
}
|
|
6479
6943
|
function closeModal() {
|
|
6480
6944
|
document.getElementById("modal-overlay").hidden = true;
|
|
6481
|
-
document.getElementById("app-url").value = "";
|
|
6482
6945
|
document.getElementById("app-name").value = "";
|
|
6483
6946
|
document.getElementById("app-icon").value = "";
|
|
6484
6947
|
document.getElementById("app-tags").value = "";
|
|
@@ -6532,7 +6995,6 @@
|
|
|
6532
6995
|
var name = document.getElementById("app-name").value.trim();
|
|
6533
6996
|
var icon = document.getElementById("app-icon").value.trim();
|
|
6534
6997
|
var tagsRaw = document.getElementById("app-tags").value.trim();
|
|
6535
|
-
var openMode = "tab";
|
|
6536
6998
|
var tags = tagsRaw ? tagsRaw.split(",").map(function(t2) {
|
|
6537
6999
|
return t2.trim();
|
|
6538
7000
|
}).filter(Boolean) : [];
|
|
@@ -6555,218 +7017,133 @@
|
|
|
6555
7017
|
app.name = name;
|
|
6556
7018
|
app.icon = icon || app.icon;
|
|
6557
7019
|
app.tags = tags;
|
|
6558
|
-
app.openMode = openMode;
|
|
6559
7020
|
saveApp(app).then(function() {
|
|
6560
7021
|
closeModal();
|
|
6561
|
-
|
|
7022
|
+
renderApps2();
|
|
6562
7023
|
});
|
|
6563
7024
|
return;
|
|
6564
7025
|
}
|
|
6565
7026
|
var activeTab = document.querySelector(".modal-tab.active");
|
|
6566
|
-
var tabName = activeTab ? activeTab.getAttribute("data-tab") : "
|
|
6567
|
-
if (tabName === "
|
|
6568
|
-
var url = document.getElementById("app-url").value.trim();
|
|
6569
|
-
if (!url) {
|
|
6570
|
-
showNotice("Please enter a URL");
|
|
6571
|
-
return;
|
|
6572
|
-
}
|
|
6573
|
-
if (!name) {
|
|
6574
|
-
try {
|
|
6575
|
-
name = new URL(url).hostname;
|
|
6576
|
-
} catch (e) {
|
|
6577
|
-
name = url;
|
|
6578
|
-
}
|
|
6579
|
-
}
|
|
6580
|
-
addAppFromUrl(name, url, icon, tags, openMode).then(function() {
|
|
6581
|
-
closeModal();
|
|
6582
|
-
renderApps3();
|
|
6583
|
-
});
|
|
6584
|
-
} else if (tabName === "paste") {
|
|
7027
|
+
var tabName = activeTab ? activeTab.getAttribute("data-tab") : "paste";
|
|
7028
|
+
if (tabName === "paste") {
|
|
6585
7029
|
var pastedCode = document.getElementById("app-paste-code").value.trim();
|
|
6586
7030
|
if (!pastedCode) {
|
|
6587
7031
|
showNotice("Please paste your HTML source code");
|
|
6588
7032
|
return;
|
|
6589
7033
|
}
|
|
6590
|
-
|
|
6591
|
-
|
|
6592
|
-
|
|
6593
|
-
|
|
6594
|
-
addAppFromSource(name, pastedCode, icon, tags, openMode).then(function() {
|
|
6595
|
-
closeModal();
|
|
6596
|
-
renderApps3();
|
|
6597
|
-
});
|
|
7034
|
+
var meta = parseAppMeta(pastedCode);
|
|
7035
|
+
if (!name) name = meta.name || "Pasted App";
|
|
7036
|
+
closeModal();
|
|
7037
|
+
createAppFromHtml(name, pastedCode, icon, tags, meta.description);
|
|
6598
7038
|
} else if (tabName === "file") {
|
|
6599
7039
|
if (!selectedFile) {
|
|
6600
7040
|
showNotice("Please select a file");
|
|
6601
7041
|
return;
|
|
6602
7042
|
}
|
|
6603
|
-
|
|
6604
|
-
|
|
6605
|
-
|
|
6606
|
-
|
|
6607
|
-
|
|
6608
|
-
|
|
6609
|
-
|
|
7043
|
+
var file = selectedFile;
|
|
7044
|
+
if (file.name.toLowerCase().endsWith(".zip")) {
|
|
7045
|
+
if (!name) name = file.name.replace(/\.zip$/i, "");
|
|
7046
|
+
file.arrayBuffer().then(function(arrayBuffer) {
|
|
7047
|
+
return extractZip(arrayBuffer);
|
|
7048
|
+
}).then(function(files) {
|
|
7049
|
+
return bundleZip(files);
|
|
7050
|
+
}).then(function(html) {
|
|
6610
7051
|
closeModal();
|
|
6611
|
-
|
|
7052
|
+
return createAppFromHtml(name, html, icon, tags, parseAppMeta(html).description);
|
|
6612
7053
|
}).catch(function(err) {
|
|
6613
7054
|
showNotice("ZIP import failed: " + (err.message || err));
|
|
6614
7055
|
});
|
|
6615
7056
|
} else {
|
|
6616
|
-
if (!name)
|
|
6617
|
-
|
|
6618
|
-
}
|
|
6619
|
-
addAppFromFile(name, selectedFile, icon, tags, openMode).then(function() {
|
|
7057
|
+
if (!name) name = file.name.replace(/\.html?$/i, "");
|
|
7058
|
+
readFileAsText2(file).then(function(html) {
|
|
6620
7059
|
closeModal();
|
|
6621
|
-
|
|
7060
|
+
createAppFromHtml(name, html, icon, tags, parseAppMeta(html).description);
|
|
6622
7061
|
});
|
|
6623
7062
|
}
|
|
6624
7063
|
}
|
|
6625
7064
|
}
|
|
6626
|
-
|
|
6627
|
-
|
|
7065
|
+
|
|
7066
|
+
// src/static/app-catalog/js/favorites.js
|
|
7067
|
+
var KEY2 = "app-catalog.favorites";
|
|
7068
|
+
var favSet = /* @__PURE__ */ new Set();
|
|
7069
|
+
function base2() {
|
|
7070
|
+
return (loadConfig().aimeatUrl || "").replace(/\/+$/, "");
|
|
7071
|
+
}
|
|
7072
|
+
function isFavorite(ref) {
|
|
7073
|
+
return favSet.has(ref);
|
|
7074
|
+
}
|
|
7075
|
+
function loadFavorites() {
|
|
7076
|
+
var token = getCortexOwnerToken();
|
|
7077
|
+
var b = base2();
|
|
7078
|
+
if (!token || !b) {
|
|
7079
|
+
favSet = /* @__PURE__ */ new Set();
|
|
7080
|
+
return Promise.resolve();
|
|
7081
|
+
}
|
|
7082
|
+
return fetch(b + "/v1/memory/" + encodeURIComponent(KEY2), { headers: { "Authorization": "Bearer " + token } }).then(function(r) {
|
|
7083
|
+
return r.ok ? r.json() : null;
|
|
7084
|
+
}).then(function(j) {
|
|
7085
|
+
var refs = j && j.data && j.data.value && Array.isArray(j.data.value.refs) ? j.data.value.refs : [];
|
|
7086
|
+
favSet = new Set(refs.filter(function(x) {
|
|
7087
|
+
return typeof x === "string";
|
|
7088
|
+
}));
|
|
7089
|
+
}).catch(function() {
|
|
7090
|
+
});
|
|
7091
|
+
}
|
|
7092
|
+
function persist2() {
|
|
7093
|
+
var token = getCortexOwnerToken();
|
|
7094
|
+
var b = base2();
|
|
7095
|
+
if (!token || !b) return Promise.resolve();
|
|
7096
|
+
return fetch(b + "/v1/memory", {
|
|
7097
|
+
method: "POST",
|
|
7098
|
+
headers: { "Content-Type": "application/json", "Authorization": "Bearer " + token },
|
|
7099
|
+
body: JSON.stringify({
|
|
7100
|
+
key: KEY2,
|
|
7101
|
+
value: { version: 1, updatedAt: (/* @__PURE__ */ new Date()).toISOString(), refs: Array.from(favSet) },
|
|
7102
|
+
visibility: "private"
|
|
7103
|
+
})
|
|
7104
|
+
}).catch(function() {
|
|
7105
|
+
});
|
|
7106
|
+
}
|
|
7107
|
+
function toggleFavorite(ref) {
|
|
7108
|
+
var now;
|
|
7109
|
+
if (favSet.has(ref)) {
|
|
7110
|
+
favSet.delete(ref);
|
|
7111
|
+
now = false;
|
|
7112
|
+
} else {
|
|
7113
|
+
favSet.add(ref);
|
|
7114
|
+
now = true;
|
|
7115
|
+
}
|
|
7116
|
+
return persist2().then(function() {
|
|
7117
|
+
return now;
|
|
7118
|
+
});
|
|
7119
|
+
}
|
|
7120
|
+
function favStarHtml(ref) {
|
|
7121
|
+
var on = favSet.has(ref);
|
|
7122
|
+
var title = on ? t("fav.remove") || "Remove from favourites" : t("fav.add") || "Add to favourites";
|
|
7123
|
+
return '<button class="fav-toggle' + (on ? " on" : "") + `" onclick="event.stopPropagation(); window._launcher.toggleFavorite('` + String(ref).replace(/'/g, "\\'") + `')" title="` + title + '">' + (on ? "⭐" : "☆") + "</button>";
|
|
6628
7124
|
}
|
|
6629
7125
|
|
|
6630
7126
|
// src/static/app-catalog/js/server-io.js
|
|
6631
7127
|
var getMainApps3;
|
|
6632
7128
|
var getServerState2;
|
|
6633
|
-
var
|
|
7129
|
+
var getServerManifests3;
|
|
6634
7130
|
var setServerManifests;
|
|
6635
7131
|
var getOwnServerApps;
|
|
6636
7132
|
var setOwnServerApps;
|
|
6637
7133
|
var getActiveTag;
|
|
6638
7134
|
var getSearchQuery;
|
|
6639
|
-
var
|
|
6640
|
-
var
|
|
7135
|
+
var generateId4;
|
|
7136
|
+
var renderApps3;
|
|
6641
7137
|
var refreshAll2;
|
|
6642
7138
|
function initServerIo(deps) {
|
|
6643
|
-
({ getMainApps: getMainApps3, getServerState: getServerState2, getServerManifests:
|
|
6644
|
-
}
|
|
6645
|
-
var aimeatAppsCache = [];
|
|
6646
|
-
function formatFileSize(bytes) {
|
|
6647
|
-
if (bytes < 1024) return bytes + " B";
|
|
6648
|
-
if (bytes < 1048576) return (bytes / 1024).toFixed(1) + " KB";
|
|
6649
|
-
return (bytes / 1048576).toFixed(1) + " MB";
|
|
6650
|
-
}
|
|
6651
|
-
function importFromAimeat() {
|
|
6652
|
-
var config = loadConfig();
|
|
6653
|
-
if (!config.aimeatUrl) {
|
|
6654
|
-
showNotice("Set AIMEAT server URL in Settings first");
|
|
6655
|
-
return;
|
|
6656
|
-
}
|
|
6657
|
-
var aimeatUrl = config.aimeatUrl.replace(/\/+$/, "");
|
|
6658
|
-
closeModal();
|
|
6659
|
-
fetch(aimeatUrl + "/v1/apps?include_peers=true").then(function(resp) {
|
|
6660
|
-
if (!resp.ok) throw new Error("Server returned " + resp.status);
|
|
6661
|
-
return resp.json();
|
|
6662
|
-
}).then(function(json) {
|
|
6663
|
-
var apps = json.data && json.data.apps ? json.data.apps : [];
|
|
6664
|
-
var peerApps = json.data && json.data.peer_apps ? json.data.peer_apps : [];
|
|
6665
|
-
for (var p = 0; p < peerApps.length; p++) {
|
|
6666
|
-
peerApps[p]._from_peer = true;
|
|
6667
|
-
}
|
|
6668
|
-
var allFetched = apps.concat(peerApps);
|
|
6669
|
-
if (allFetched.length === 0) {
|
|
6670
|
-
showNotice("No apps found on the AIMEAT server");
|
|
6671
|
-
return;
|
|
6672
|
-
}
|
|
6673
|
-
aimeatAppsCache = allFetched;
|
|
6674
|
-
showAimeatImportDialog(allFetched, aimeatUrl);
|
|
6675
|
-
}).catch(function(err) {
|
|
6676
|
-
var msg = "Failed to fetch apps from AIMEAT server.\n\n" + (err.message || err);
|
|
6677
|
-
if (err.message && err.message.indexOf("Failed to fetch") !== -1) {
|
|
6678
|
-
msg += "\n\nIf the launcher is opened via file://, CORS will block the request. Open it from the AIMEAT server instead.";
|
|
6679
|
-
}
|
|
6680
|
-
showNotice(msg);
|
|
6681
|
-
});
|
|
6682
|
-
}
|
|
6683
|
-
function showAimeatImportDialog(apps, aimeatUrl) {
|
|
6684
|
-
var listEl = document.getElementById("aimeat-app-list");
|
|
6685
|
-
var html = "";
|
|
6686
|
-
for (var i = 0; i < apps.length; i++) {
|
|
6687
|
-
var app = apps[i];
|
|
6688
|
-
var displayName = app.manifest && app.manifest.name ? app.manifest.name : app.filename;
|
|
6689
|
-
var displayAuthor = app.manifest && app.manifest.authorDisplay ? app.manifest.authorDisplay : app.owner || "";
|
|
6690
|
-
var displayDesc = app.manifest && app.manifest.description ? app.manifest.description : "";
|
|
6691
|
-
var displayVer = app.version_number ? "v" + app.version_number : "";
|
|
6692
|
-
var displayCat = app.manifest && app.manifest.category ? app.manifest.category : "";
|
|
6693
|
-
var peerLabel = app._from_peer && app._peer_node ? " · 🌐 " + escapeHtml(app._peer_node) : "";
|
|
6694
|
-
html += '<div class="aimeat-app-item"><input type="checkbox" data-index="' + i + '" checked/><div class="aimeat-app-info"><div class="aimeat-app-name">' + escapeHtml(displayName) + (displayVer ? ' <span style="opacity:.5;font-size:.85em">' + escapeHtml(displayVer) + "</span>" : "") + '</div><div class="aimeat-app-size">' + formatFileSize(app.size) + (displayAuthor ? " · " + escapeHtml(displayAuthor) : "") + (displayCat ? " · " + escapeHtml(displayCat) : "") + peerLabel + "</div>" + (displayDesc ? '<div class="aimeat-app-size" style="opacity:.6">' + escapeHtml(displayDesc.substring(0, 100)) + "</div>" : "") + '</div><select data-index="' + i + '"><option value="link">Link (online only)</option><option value="download">Download (offline)</option></select></div>';
|
|
6695
|
-
}
|
|
6696
|
-
listEl.innerHTML = html;
|
|
6697
|
-
listEl.dataset.aimeatUrl = aimeatUrl;
|
|
6698
|
-
document.getElementById("aimeat-import-overlay").hidden = false;
|
|
6699
|
-
}
|
|
6700
|
-
function processAimeatImport() {
|
|
6701
|
-
var listEl = document.getElementById("aimeat-app-list");
|
|
6702
|
-
var aimeatUrl = listEl.dataset.aimeatUrl;
|
|
6703
|
-
var checkboxes = listEl.querySelectorAll('input[type="checkbox"]');
|
|
6704
|
-
var selects = listEl.querySelectorAll("select");
|
|
6705
|
-
var config = loadConfig();
|
|
6706
|
-
var defaultOpenMode = config.defaultOpenMode || "tab";
|
|
6707
|
-
var toImport = [];
|
|
6708
|
-
for (var i = 0; i < checkboxes.length; i++) {
|
|
6709
|
-
if (checkboxes[i].checked) {
|
|
6710
|
-
var idx = parseInt(checkboxes[i].getAttribute("data-index"), 10);
|
|
6711
|
-
var mode = selects[i].value;
|
|
6712
|
-
toImport.push({ app: aimeatAppsCache[idx], mode });
|
|
6713
|
-
}
|
|
6714
|
-
}
|
|
6715
|
-
if (toImport.length === 0) {
|
|
6716
|
-
showNotice("No apps selected");
|
|
6717
|
-
return;
|
|
6718
|
-
}
|
|
6719
|
-
var promises = [];
|
|
6720
|
-
for (var j = 0; j < toImport.length; j++) {
|
|
6721
|
-
(function(item) {
|
|
6722
|
-
var app = item.app;
|
|
6723
|
-
var name = app.manifest && app.manifest.name ? app.manifest.name : app.filename.replace(/\.html?$/i, "");
|
|
6724
|
-
var importedVersion = app.version_number || 1;
|
|
6725
|
-
var baseUrl = app._from_peer && app._peer_url ? app._peer_url.replace(/\/+$/, "") : aimeatUrl;
|
|
6726
|
-
if (item.mode === "link") {
|
|
6727
|
-
var inlineUrl = baseUrl + app.download_url + "?mode=inline";
|
|
6728
|
-
promises.push(addAppFromUrl(name, inlineUrl, "📦", ["aimeat"], defaultOpenMode));
|
|
6729
|
-
} else {
|
|
6730
|
-
var downloadUrl = baseUrl + app.download_url;
|
|
6731
|
-
promises.push(
|
|
6732
|
-
fetch(downloadUrl).then(function(resp) {
|
|
6733
|
-
if (!resp.ok) throw new Error("Download failed: " + resp.status);
|
|
6734
|
-
return resp.text();
|
|
6735
|
-
}).then(function(content) {
|
|
6736
|
-
var encoded = btoa(unescape(encodeURIComponent(content)));
|
|
6737
|
-
var record = {
|
|
6738
|
-
id: generateId5(),
|
|
6739
|
-
name,
|
|
6740
|
-
description: app.manifest && app.manifest.description ? app.manifest.description : "",
|
|
6741
|
-
source: "aimeat",
|
|
6742
|
-
aimeatOwner: app.owner || null,
|
|
6743
|
-
aimeatFilename: app.filename || null,
|
|
6744
|
-
aimeatVersion: importedVersion,
|
|
6745
|
-
url: null,
|
|
6746
|
-
blob: encoded,
|
|
6747
|
-
tags: ["aimeat"],
|
|
6748
|
-
openMode: defaultOpenMode,
|
|
6749
|
-
icon: "📦",
|
|
6750
|
-
screenshot: null,
|
|
6751
|
-
favorite: false,
|
|
6752
|
-
addedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6753
|
-
lastOpenedAt: null
|
|
6754
|
-
};
|
|
6755
|
-
return saveApp(record);
|
|
6756
|
-
})
|
|
6757
|
-
);
|
|
6758
|
-
}
|
|
6759
|
-
})(toImport[j]);
|
|
6760
|
-
}
|
|
6761
|
-
Promise.all(promises).then(function() {
|
|
6762
|
-
document.getElementById("aimeat-import-overlay").hidden = true;
|
|
6763
|
-
renderApps4();
|
|
6764
|
-
}).catch(function(err) {
|
|
6765
|
-
showNotice("Import error: " + (err.message || err));
|
|
6766
|
-
});
|
|
7139
|
+
({ getMainApps: getMainApps3, getServerState: getServerState2, getServerManifests: getServerManifests3, setServerManifests, getOwnServerApps, setOwnServerApps, getActiveTag, getSearchQuery, generateId: generateId4, renderApps: renderApps3, refreshAll: refreshAll2 } = deps);
|
|
6767
7140
|
}
|
|
7141
|
+
var lastAllServerApps = [];
|
|
7142
|
+
var lastAimeatUrl = "";
|
|
6768
7143
|
var publishAppId = null;
|
|
6769
|
-
|
|
7144
|
+
var publishUnlisted = false;
|
|
7145
|
+
function showPublishModal3(appId, opts) {
|
|
7146
|
+
publishUnlisted = !!(opts && opts.unlisted);
|
|
6770
7147
|
var app = null;
|
|
6771
7148
|
for (var i = 0; i < getMainApps3().length; i++) {
|
|
6772
7149
|
if (getMainApps3()[i].id === appId) {
|
|
@@ -6888,7 +7265,16 @@
|
|
|
6888
7265
|
app.publishedVersionNumber = json.data.version_number || 1;
|
|
6889
7266
|
app.publishedVersionsUrl = json.data.versions_url || null;
|
|
6890
7267
|
saveApp(app).then(function() {
|
|
6891
|
-
|
|
7268
|
+
if (publishUnlisted) {
|
|
7269
|
+
app.parked = true;
|
|
7270
|
+
statusEl.textContent = "✔ " + (t("publish.savedUnlisted") || "Saved (unlisted)");
|
|
7271
|
+
try {
|
|
7272
|
+
toggleParkApp(filename, true);
|
|
7273
|
+
} catch (e) {
|
|
7274
|
+
}
|
|
7275
|
+
}
|
|
7276
|
+
publishUnlisted = false;
|
|
7277
|
+
loadPublishedApps2();
|
|
6892
7278
|
setTimeout(function() {
|
|
6893
7279
|
var ov = document.getElementById("publish-overlay");
|
|
6894
7280
|
if (ov) ov.hidden = true;
|
|
@@ -7042,7 +7428,7 @@
|
|
|
7042
7428
|
statusEl.textContent = "✔ " + t("subModal.assigned") + " — " + sub + "." + apexHostLabel();
|
|
7043
7429
|
return loadSubdomainSites();
|
|
7044
7430
|
}).then(function() {
|
|
7045
|
-
|
|
7431
|
+
loadPublishedApps2();
|
|
7046
7432
|
}).catch(function(err) {
|
|
7047
7433
|
statusEl.style.color = "#ef4444";
|
|
7048
7434
|
statusEl.textContent = err.message || String(err);
|
|
@@ -7060,7 +7446,7 @@
|
|
|
7060
7446
|
subdomainModalState.existingSub = null;
|
|
7061
7447
|
return loadSubdomainSites();
|
|
7062
7448
|
}).then(function() {
|
|
7063
|
-
|
|
7449
|
+
loadPublishedApps2();
|
|
7064
7450
|
}).catch(function(err) {
|
|
7065
7451
|
statusEl.style.color = "#ef4444";
|
|
7066
7452
|
statusEl.textContent = err.message || String(err);
|
|
@@ -7385,7 +7771,7 @@
|
|
|
7385
7771
|
}
|
|
7386
7772
|
return page(0);
|
|
7387
7773
|
}
|
|
7388
|
-
function
|
|
7774
|
+
function loadPublishedApps2() {
|
|
7389
7775
|
var config = loadConfig();
|
|
7390
7776
|
var aimeatUrl = config.aimeatUrl ? config.aimeatUrl.replace(/\/+$/, "") : "";
|
|
7391
7777
|
var communitySection = document.getElementById("community-section");
|
|
@@ -7404,10 +7790,10 @@
|
|
|
7404
7790
|
}
|
|
7405
7791
|
} catch (e) {
|
|
7406
7792
|
}
|
|
7407
|
-
getAllApps().then(function() {
|
|
7793
|
+
Promise.all([getAllApps(), loadFavorites(), loadPromoted()]).then(function() {
|
|
7408
7794
|
if (!aimeatUrl) {
|
|
7409
7795
|
setOwnServerApps([]);
|
|
7410
|
-
|
|
7796
|
+
renderApps3();
|
|
7411
7797
|
if (communitySection) communitySection.style.display = "none";
|
|
7412
7798
|
return;
|
|
7413
7799
|
}
|
|
@@ -7419,7 +7805,7 @@
|
|
|
7419
7805
|
setServerManifests({});
|
|
7420
7806
|
for (var mi = 0; mi < serverApps.length; mi++) {
|
|
7421
7807
|
var msa = serverApps[mi];
|
|
7422
|
-
|
|
7808
|
+
getServerManifests3()[(msa.owner || "") + "\n" + (msa.filename || "")] = msa.manifest || {};
|
|
7423
7809
|
}
|
|
7424
7810
|
var ownApps = currentOwner ? serverApps.filter(function(a) {
|
|
7425
7811
|
return sameOwner(a.owner, currentOwner);
|
|
@@ -7427,15 +7813,18 @@
|
|
|
7427
7813
|
var communityApps = currentOwner ? serverApps.filter(function(a) {
|
|
7428
7814
|
return !sameOwner(a.owner, currentOwner);
|
|
7429
7815
|
}) : serverApps;
|
|
7816
|
+
lastAllServerApps = serverApps;
|
|
7817
|
+
lastAimeatUrl = aimeatUrl;
|
|
7430
7818
|
return loadSubdomainSites().then(function() {
|
|
7431
7819
|
setOwnServerApps(currentOwner ? ownApps : []);
|
|
7432
|
-
|
|
7820
|
+
renderApps3();
|
|
7433
7821
|
renderCommunityApps(communityApps, aimeatUrl, communitySection, communityGrid, communityCountEl, currentOwner);
|
|
7822
|
+
renderFavorites(serverApps, aimeatUrl);
|
|
7434
7823
|
applyServerFilter();
|
|
7435
7824
|
});
|
|
7436
7825
|
}).catch(function() {
|
|
7437
7826
|
setOwnServerApps([]);
|
|
7438
|
-
|
|
7827
|
+
renderApps3();
|
|
7439
7828
|
if (communitySection) communitySection.style.display = "none";
|
|
7440
7829
|
});
|
|
7441
7830
|
});
|
|
@@ -7465,6 +7854,21 @@
|
|
|
7465
7854
|
var sectionEl = document.getElementById("community-section");
|
|
7466
7855
|
if (sectionEl) sectionEl.style.display = filtering && shown === 0 ? "none" : "";
|
|
7467
7856
|
}
|
|
7857
|
+
function publishedCardHtml(sa, aimeatUrl) {
|
|
7858
|
+
var owner = sa.owner || "";
|
|
7859
|
+
var fn = sa.filename || "";
|
|
7860
|
+
var ref = owner + "/" + fn;
|
|
7861
|
+
var m = sa.manifest || {};
|
|
7862
|
+
var name = m.name || fn;
|
|
7863
|
+
var version = sa.version_number ? "v" + sa.version_number : "";
|
|
7864
|
+
var description = m.descriptions && m.descriptions[getLang()] || m.description || "";
|
|
7865
|
+
var date = sa.created_at ? new Date(sa.created_at).toLocaleDateString() : "";
|
|
7866
|
+
var author = m.authorDisplay || owner;
|
|
7867
|
+
var viewUrl = aimeatUrl + "/v1/apps/" + encodeURIComponent(owner) + "/" + encodeURIComponent(fn);
|
|
7868
|
+
var shipsAgent = !!(m.cortex && m.cortex.agents && m.cortex.agents.length);
|
|
7869
|
+
return '<div class="published-card"' + filterAttr(name, m.tags || []) + ">" + favStarHtml(ref) + '<div class="published-card-name">' + escapeHtml(name) + "</div>" + (description ? '<div class="published-card-desc">' + escapeHtml(description) + "</div>" : "") + '<div class="published-card-footer"><div class="published-card-metaline"><span class="pcm-main" style="color:var(--accent)">👤 ' + escapeHtml(author) + "</span>" + (date ? '<span class="pcm-date">' + date + "</span>" : "") + `</div><div class="published-card-actions"><button onclick="window._launcher.viewPublished('` + escapeHtml(viewUrl) + "?mode=inline', '" + jsArg(name) + `')">` + t("card.view") + "</button>" + // Fork is offered on a community app only when its owner marked it forkable.
|
|
7870
|
+
(sa.forkable ? `<button onclick="window._launcher.forkVersion('` + escapeHtml(owner) + "', '" + escapeHtml(fn) + "', " + (sa.version_number || 0) + ')" title="' + escapeHtml(t("card.forkHint")) + '">' + t("card.fork") + "</button>" : "") + (shipsAgent ? `<button onclick="window._launcher.showAppAgentsModal('` + jsArg(owner) + "', '" + jsArg(fn) + `')" title="` + escapeHtml(t("card.agentHint")) + '">' + t("card.agent") + "</button>" : "") + "</div>" + (version || sa.forks && sa.forks > 0 || shipsAgent ? '<div class="published-card-badgerow">' + (shipsAgent ? '<span class="pcb-agent" title="' + escapeHtml(t("card.agentHint")) + '">🤖</span>' : "") + (sa.forks && sa.forks > 0 ? '<span class="pcb-forks" title="' + escapeHtml(t("card.forksHint")) + `" onclick="window._launcher.showLineageModal('` + escapeHtml(owner) + "', '" + escapeHtml(fn) + `')">⑂ ` + sa.forks + "</span>" : "") + (version ? '<span class="pcb-version">' + escapeHtml(version) + "</span>" : "") + "</div>" : "") + "</div></div>";
|
|
7871
|
+
}
|
|
7468
7872
|
function renderCommunityApps(serverApps, aimeatUrl, section, grid, countEl, currentOwner) {
|
|
7469
7873
|
if (!section || !grid || !countEl) return;
|
|
7470
7874
|
if (serverApps.length === 0) {
|
|
@@ -7476,21 +7880,51 @@
|
|
|
7476
7880
|
section.style.display = "";
|
|
7477
7881
|
countEl.textContent = "(" + serverApps.length + ")";
|
|
7478
7882
|
var html = "";
|
|
7479
|
-
for (var i = 0; i < serverApps.length; i++)
|
|
7480
|
-
var sa = serverApps[i];
|
|
7481
|
-
var name = sa.manifest && sa.manifest.name ? sa.manifest.name : sa.filename || "";
|
|
7482
|
-
var version = sa.version_number ? "v" + sa.version_number : "";
|
|
7483
|
-
var description = sa.manifest && sa.manifest.description ? sa.manifest.description : "";
|
|
7484
|
-
var date = sa.created_at ? new Date(sa.created_at).toLocaleDateString() : "";
|
|
7485
|
-
var author = sa.manifest && sa.manifest.authorDisplay ? sa.manifest.authorDisplay : sa.owner || "";
|
|
7486
|
-
var viewUrl = aimeatUrl + "/v1/apps/" + encodeURIComponent(sa.owner || "") + "/" + encodeURIComponent(sa.filename || "");
|
|
7487
|
-
html += '<div class="published-card"' + filterAttr(name, sa.manifest && sa.manifest.tags || []) + '><div class="published-card-name">' + escapeHtml(name) + "</div>" + (description ? '<div class="published-card-desc">' + escapeHtml(description) + "</div>" : "") + '<div class="published-card-footer"><div class="published-card-metaline"><span class="pcm-main" style="color:var(--accent)">👤 ' + escapeHtml(author) + "</span>" + (date ? '<span class="pcm-date">' + date + "</span>" : "") + `</div><div class="published-card-actions"><button onclick="window._launcher.viewPublished('` + escapeHtml(viewUrl) + "?mode=inline', '" + jsArg(name) + `')">` + t("card.view") + "</button>" + // Fork is offered on a community (someone else's) app only when its owner
|
|
7488
|
-
// marked it forkable; otherwise the server would reject the fork (403).
|
|
7489
|
-
(sa.forkable ? `<button onclick="window._launcher.forkVersion('` + escapeHtml(sa.owner || "") + "', '" + escapeHtml(sa.filename || "") + "', " + (sa.version_number || 0) + ')" title="' + escapeHtml(t("card.forkHint")) + '">' + t("card.fork") + "</button>" : "") + "</div>" + (version || sa.forks && sa.forks > 0 ? '<div class="published-card-badgerow">' + (sa.forks && sa.forks > 0 ? '<span class="pcb-forks" title="' + escapeHtml(t("card.forksHint")) + `" onclick="window._launcher.showLineageModal('` + escapeHtml(sa.owner || "") + "', '" + escapeHtml(sa.filename || "") + `')">⑂ ` + sa.forks + "</span>" : "") + (version ? '<span class="pcb-version">' + escapeHtml(version) + "</span>" : "") + "</div>" : "") + "</div></div>";
|
|
7490
|
-
}
|
|
7883
|
+
for (var i = 0; i < serverApps.length; i++) html += publishedCardHtml(serverApps[i], aimeatUrl);
|
|
7491
7884
|
grid.innerHTML = html;
|
|
7492
7885
|
updateCommunityEmpty();
|
|
7493
7886
|
}
|
|
7887
|
+
function renderFavorites(allServerApps, aimeatUrl) {
|
|
7888
|
+
var section = document.getElementById("favorites-section");
|
|
7889
|
+
var grid = document.getElementById("favorites-grid");
|
|
7890
|
+
var countEl = document.getElementById("favorites-count");
|
|
7891
|
+
if (!section || !grid) return;
|
|
7892
|
+
var favs = (allServerApps || []).filter(function(sa) {
|
|
7893
|
+
return isFavorite((sa.owner || "") + "/" + (sa.filename || ""));
|
|
7894
|
+
});
|
|
7895
|
+
if (favs.length === 0) {
|
|
7896
|
+
section.style.display = "none";
|
|
7897
|
+
grid.innerHTML = "";
|
|
7898
|
+
return;
|
|
7899
|
+
}
|
|
7900
|
+
section.style.display = "";
|
|
7901
|
+
if (countEl) countEl.textContent = "(" + favs.length + ")";
|
|
7902
|
+
var html = "";
|
|
7903
|
+
for (var i = 0; i < favs.length; i++) html += publishedCardHtml(favs[i], aimeatUrl);
|
|
7904
|
+
grid.innerHTML = html;
|
|
7905
|
+
}
|
|
7906
|
+
function refreshFavoritesUI() {
|
|
7907
|
+
renderFavorites(lastAllServerApps, lastAimeatUrl);
|
|
7908
|
+
var currentOwner = null;
|
|
7909
|
+
try {
|
|
7910
|
+
var s = window.AIMEAT && window.AIMEAT.auth && window.AIMEAT.auth.getSession();
|
|
7911
|
+
currentOwner = s && s.owner || JSON.parse(localStorage.getItem("aimeat_session") || "{}").owner || null;
|
|
7912
|
+
} catch (e) {
|
|
7913
|
+
}
|
|
7914
|
+
var communityApps = currentOwner ? lastAllServerApps.filter(function(a) {
|
|
7915
|
+
return !sameOwner(a.owner, currentOwner);
|
|
7916
|
+
}) : lastAllServerApps;
|
|
7917
|
+
renderCommunityApps(
|
|
7918
|
+
communityApps,
|
|
7919
|
+
lastAimeatUrl,
|
|
7920
|
+
document.getElementById("community-section"),
|
|
7921
|
+
document.getElementById("community-grid"),
|
|
7922
|
+
document.getElementById("community-count"),
|
|
7923
|
+
currentOwner
|
|
7924
|
+
);
|
|
7925
|
+
applyServerFilter();
|
|
7926
|
+
renderApps3();
|
|
7927
|
+
}
|
|
7494
7928
|
async function unpublishApp(appId) {
|
|
7495
7929
|
if (!await showConfirm(t("confirm.removePublished"))) return;
|
|
7496
7930
|
var app = null;
|
|
@@ -7522,7 +7956,7 @@
|
|
|
7522
7956
|
delete app.publishedVersionNumber;
|
|
7523
7957
|
delete app.publishedVersionsUrl;
|
|
7524
7958
|
saveApp(app).then(function() {
|
|
7525
|
-
|
|
7959
|
+
loadPublishedApps2();
|
|
7526
7960
|
});
|
|
7527
7961
|
} else {
|
|
7528
7962
|
showNotice("Failed to remove: " + (json.error && json.error.message || "Unknown error"));
|
|
@@ -7548,7 +7982,7 @@
|
|
|
7548
7982
|
}).then(function(json) {
|
|
7549
7983
|
if (json.ok) {
|
|
7550
7984
|
if (getServerState2()[filename]) getServerState2()[filename].parked = !!parked;
|
|
7551
|
-
|
|
7985
|
+
loadPublishedApps2();
|
|
7552
7986
|
refreshServerMgmt();
|
|
7553
7987
|
} else {
|
|
7554
7988
|
showNotice("Failed: " + (json.error && json.error.message ? json.error.message : "Unknown error"));
|
|
@@ -7574,7 +8008,7 @@
|
|
|
7574
8008
|
}).then(function(json) {
|
|
7575
8009
|
if (json.ok) {
|
|
7576
8010
|
if (getServerState2()[filename]) getServerState2()[filename].forkable = !!forkable;
|
|
7577
|
-
|
|
8011
|
+
loadPublishedApps2();
|
|
7578
8012
|
refreshServerMgmt();
|
|
7579
8013
|
} else {
|
|
7580
8014
|
showNotice("Failed: " + (json.error && json.error.message ? json.error.message : "Unknown error"));
|
|
@@ -7601,7 +8035,7 @@
|
|
|
7601
8035
|
return resp.json();
|
|
7602
8036
|
}).then(function(json) {
|
|
7603
8037
|
if (json.ok) {
|
|
7604
|
-
|
|
8038
|
+
loadPublishedApps2();
|
|
7605
8039
|
} else {
|
|
7606
8040
|
showNotice("Failed to delete: " + (json.error && json.error.message ? json.error.message : "Unknown error"));
|
|
7607
8041
|
}
|
|
@@ -7660,7 +8094,7 @@
|
|
|
7660
8094
|
}
|
|
7661
8095
|
function filterByTag(tag) {
|
|
7662
8096
|
setActiveTag(tag);
|
|
7663
|
-
|
|
8097
|
+
renderApps4();
|
|
7664
8098
|
applyServerFilter();
|
|
7665
8099
|
}
|
|
7666
8100
|
function launchApp2(id, mode) {
|
|
@@ -7720,7 +8154,6 @@
|
|
|
7720
8154
|
var serverAppManifests = {};
|
|
7721
8155
|
function libStatus(e) {
|
|
7722
8156
|
if (e.parked) return "parked";
|
|
7723
|
-
if (e.serverOnly) return "server";
|
|
7724
8157
|
if (e.published) return "published";
|
|
7725
8158
|
return "local";
|
|
7726
8159
|
}
|
|
@@ -7728,8 +8161,6 @@
|
|
|
7728
8161
|
switch (libStatus(e)) {
|
|
7729
8162
|
case "parked":
|
|
7730
8163
|
return t("status.parked");
|
|
7731
|
-
case "server":
|
|
7732
|
-
return t("status.serverOnly");
|
|
7733
8164
|
case "published":
|
|
7734
8165
|
return t("status.published") + (e.versionNumber ? " v" + e.versionNumber : "");
|
|
7735
8166
|
default:
|
|
@@ -7737,7 +8168,7 @@
|
|
|
7737
8168
|
}
|
|
7738
8169
|
}
|
|
7739
8170
|
function buildLibraryEntries(localApps, serverApps) {
|
|
7740
|
-
var
|
|
8171
|
+
var base3 = (loadConfig().aimeatUrl || "").replace(/\/+$/, "");
|
|
7741
8172
|
var byFilename = {};
|
|
7742
8173
|
var entries = [];
|
|
7743
8174
|
serverStateByFilename = {};
|
|
@@ -7763,10 +8194,11 @@
|
|
|
7763
8194
|
published: !!la.published,
|
|
7764
8195
|
parked: false,
|
|
7765
8196
|
serverOnly: false,
|
|
8197
|
+
hasDraft: false,
|
|
7766
8198
|
filename: la.publishedFilename || null,
|
|
7767
8199
|
owner: null,
|
|
7768
8200
|
versionNumber: la.publishedVersionNumber || null,
|
|
7769
|
-
viewUrl: la.publishedUrl ?
|
|
8201
|
+
viewUrl: la.publishedUrl ? base3 + la.publishedUrl : "",
|
|
7770
8202
|
forkable: false,
|
|
7771
8203
|
forks: 0
|
|
7772
8204
|
};
|
|
@@ -7777,6 +8209,7 @@
|
|
|
7777
8209
|
var sa = serverApps[s];
|
|
7778
8210
|
var fn = sa.filename || "";
|
|
7779
8211
|
var prot = sa.manifest && sa.manifest.protection || {};
|
|
8212
|
+
var shipsAgent = !!(sa.manifest && sa.manifest.cortex && sa.manifest.cortex.agents && sa.manifest.cortex.agents.length);
|
|
7780
8213
|
var m = fn ? byFilename[fn] : null;
|
|
7781
8214
|
if (m) {
|
|
7782
8215
|
m.parked = !!sa.parked;
|
|
@@ -7785,8 +8218,10 @@
|
|
|
7785
8218
|
m.versionNumber = sa.version_number || m.versionNumber;
|
|
7786
8219
|
m.forkable = !!sa.forkable;
|
|
7787
8220
|
m.forks = sa.forks || 0;
|
|
8221
|
+
m.hasDraft = !!sa.has_draft;
|
|
8222
|
+
m.hasAgents = shipsAgent;
|
|
7788
8223
|
m.protection = prot;
|
|
7789
|
-
m.viewUrl =
|
|
8224
|
+
m.viewUrl = base3 + "/v1/apps/" + encodeURIComponent(sa.owner || "") + "/" + encodeURIComponent(fn);
|
|
7790
8225
|
if (!m.description && sa.manifest && sa.manifest.description) m.description = sa.manifest.description;
|
|
7791
8226
|
} else {
|
|
7792
8227
|
var se = {
|
|
@@ -7795,6 +8230,7 @@
|
|
|
7795
8230
|
name: sa.manifest && sa.manifest.name || fn,
|
|
7796
8231
|
icon: "🌐",
|
|
7797
8232
|
description: sa.manifest && sa.manifest.description || "",
|
|
8233
|
+
descriptions: sa.manifest && sa.manifest.descriptions || null,
|
|
7798
8234
|
tags: sa.manifest && sa.manifest.tags || [],
|
|
7799
8235
|
favorite: false,
|
|
7800
8236
|
sortOrder: void 0,
|
|
@@ -7806,13 +8242,15 @@
|
|
|
7806
8242
|
published: !sa.parked,
|
|
7807
8243
|
parked: !!sa.parked,
|
|
7808
8244
|
serverOnly: true,
|
|
8245
|
+
hasDraft: !!sa.has_draft,
|
|
7809
8246
|
filename: fn,
|
|
7810
8247
|
owner: sa.owner || "",
|
|
7811
8248
|
versionNumber: sa.version_number || null,
|
|
7812
|
-
viewUrl:
|
|
8249
|
+
viewUrl: base3 && fn ? base3 + "/v1/apps/" + encodeURIComponent(sa.owner || "") + "/" + encodeURIComponent(fn) : "",
|
|
7813
8250
|
forkable: !!sa.forkable,
|
|
7814
8251
|
forks: sa.forks || 0,
|
|
7815
|
-
protection: prot
|
|
8252
|
+
protection: prot,
|
|
8253
|
+
hasAgents: shipsAgent
|
|
7816
8254
|
};
|
|
7817
8255
|
entries.push(se);
|
|
7818
8256
|
if (fn) byFilename[fn] = se;
|
|
@@ -7834,20 +8272,12 @@
|
|
|
7834
8272
|
}
|
|
7835
8273
|
return entries;
|
|
7836
8274
|
}
|
|
7837
|
-
function
|
|
8275
|
+
function renderApps4() {
|
|
7838
8276
|
getAllApps().then(function(apps) {
|
|
7839
8277
|
setAllApps(apps);
|
|
7840
|
-
var entries = buildLibraryEntries(
|
|
8278
|
+
var entries = buildLibraryEntries([], ownServerApps);
|
|
7841
8279
|
entries.sort(function(a, b) {
|
|
7842
|
-
if (a.
|
|
7843
|
-
if (!a.favorite && b.favorite) return 1;
|
|
7844
|
-
var oA = typeof a.sortOrder === "number" ? a.sortOrder : Infinity;
|
|
7845
|
-
var oB = typeof b.sortOrder === "number" ? b.sortOrder : Infinity;
|
|
7846
|
-
if (oA !== oB) return oA - oB;
|
|
7847
|
-
var dateA = a.lastOpenedAt || a.addedAt || "";
|
|
7848
|
-
var dateB = b.lastOpenedAt || b.addedAt || "";
|
|
7849
|
-
if (dateA > dateB) return -1;
|
|
7850
|
-
if (dateA < dateB) return 1;
|
|
8280
|
+
if (!!a.parked !== !!b.parked) return a.parked ? 1 : -1;
|
|
7851
8281
|
return 0;
|
|
7852
8282
|
});
|
|
7853
8283
|
var filtered = entries;
|
|
@@ -7896,42 +8326,24 @@
|
|
|
7896
8326
|
grid.innerHTML = html;
|
|
7897
8327
|
}
|
|
7898
8328
|
var statsEl = document.getElementById("stats");
|
|
7899
|
-
|
|
7900
|
-
for (var sz = 0; sz < entries.length; sz++) {
|
|
7901
|
-
if (entries[sz].blob) totalSize += entries[sz].blob.length;
|
|
7902
|
-
}
|
|
7903
|
-
var sizeLabel = totalSize < 1024 ? totalSize + " B" : totalSize < 1048576 ? (totalSize / 1024).toFixed(1) + " KB" : (totalSize / 1048576).toFixed(1) + " MB";
|
|
7904
|
-
statsEl.textContent = entries.length + " " + t("stats.apps") + " · " + sizeLabel + " " + t("stats.stored");
|
|
8329
|
+
statsEl.textContent = entries.length + " " + t("stats.apps");
|
|
7905
8330
|
renderTags();
|
|
7906
|
-
renderRecentlyOpened();
|
|
7907
8331
|
});
|
|
7908
8332
|
}
|
|
7909
8333
|
function libraryCardHtml(e, i) {
|
|
7910
8334
|
var idAttr = e.hasLocal ? escapeHtml(e.localId) : "srv:" + escapeHtml(e.filename);
|
|
7911
8335
|
var detailCall = e.filename ? "window._launcher.openPublishedDetail('" + jsArg(e.owner || "") + "', '" + jsArg(e.filename) + "', '" + jsArg(e.hasLocal ? e.localId : "") + "', " + (e.versionNumber || 0) + ")" : "window._launcher.openDetailView('" + jsArg(e.localId) + "')";
|
|
7912
8336
|
var openCall = (e.published || e.parked || e.serverOnly) && e.viewUrl ? "window._launcher.viewPublished('" + jsArg(e.viewUrl) + "?mode=inline', '" + jsArg(e.name) + "')" : e.hasLocal ? "window._launcher.launchApp('" + jsArg(e.localId) + "', '" + jsArg(e.openMode || "tab") + "')" : detailCall;
|
|
8337
|
+
var stagingCall = "window._launcher.openStagingPreview('" + jsArg(e.owner || "") + "', '" + jsArg(e.filename || "") + "')";
|
|
8338
|
+
var openBtns = e.hasDraft && e.viewUrl ? `<button onclick="event.stopPropagation(); window._launcher.viewPublished('` + jsArg(e.viewUrl) + "?mode=inline', '" + jsArg(e.name) + `')" title="` + escapeHtml(t("card.openReleasedHint")) + '">▶ ' + escapeHtml(t("card.openReleased")) + '</button><button class="act-staging" onclick="event.stopPropagation(); ' + stagingCall + '" title="' + escapeHtml(t("card.openStagingHint")) + '">⏫ ' + escapeHtml(t("card.openStaging")) + "</button>" : '<button onclick="event.stopPropagation(); ' + openCall + '" title="' + escapeHtml(t("card.openHint")) + '">▶ ' + escapeHtml(t("card.open")) + "</button>";
|
|
7913
8339
|
var st = libStatus(e);
|
|
7914
8340
|
var dragAttrs = e.hasLocal ? ' draggable="true" ondragstart="window._launcher.onCardDragStart(event)" ondragend="window._launcher.onCardDragEnd(event)" ondragover="window._launcher.onCardDragOver(event)" ondrop="window._launcher.onCardDrop(event)"' : "";
|
|
7915
8341
|
var menuBtn = e.hasLocal ? `<button class="card-menu-btn" onclick="event.stopPropagation(); window._launcher.showContextMenu(event, '` + jsArg(e.localId) + `')" title="` + escapeHtml(t("common.menu")) + '">⋮</button>' : "";
|
|
7916
|
-
return '<div class="app-card' + (e.hasLocal ? "" : " server-only") + '" data-id="' + idAttr + '"' + dragAttrs + filterAttr(e.name, e.tags) + ' onclick="' + detailCall + '"' + (e.hasLocal ? ` oncontextmenu="window._launcher.showContextMenu(event, '` + jsArg(e.localId) + `')"` : "") + ' style="animation-delay:' + i * 0.04 + 's"><span class="app-status-badge st-' + st + '">' + escapeHtml(libStatusLabel(e)) + "</span>" +
|
|
7917
|
-
|
|
7918
|
-
|
|
7919
|
-
|
|
7920
|
-
|
|
7921
|
-
var recent = getMainApps4().filter(function(a) {
|
|
7922
|
-
return a.lastOpenedAt;
|
|
7923
|
-
}).sort(function(a, b) {
|
|
7924
|
-
return (b.lastOpenedAt || "") > (a.lastOpenedAt || "") ? 1 : -1;
|
|
7925
|
-
}).slice(0, 5);
|
|
7926
|
-
if (recent.length === 0) {
|
|
7927
|
-
section.style.display = "none";
|
|
7928
|
-
return;
|
|
7929
|
-
}
|
|
7930
|
-
section.style.display = "block";
|
|
7931
|
-
strip.innerHTML = recent.map(function(app) {
|
|
7932
|
-
var icon = app.icon || "📝";
|
|
7933
|
-
return `<div style="background:var(--surface-glass);border:1px solid var(--border-subtle);border-radius:10px;padding:.6rem .8rem;cursor:pointer;min-width:120px;flex-shrink:0;transition:all .15s" onclick="window._launcher.launchApp('` + escapeHtml(app.id) + "', '" + escapeHtml(app.openMode || "tab") + `')" onmouseover="this.style.borderColor='var(--border-hover)'" onmouseout="this.style.borderColor='var(--border-subtle)'"><div style="font-size:1.3rem;text-align:center">` + escapeHtml(icon) + '</div><div style="font-size:.75rem;font-weight:600;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100px">' + escapeHtml(app.name) + "</div></div>";
|
|
7934
|
-
}).join("");
|
|
8342
|
+
return '<div class="app-card' + (e.hasLocal ? "" : " server-only") + '" data-id="' + idAttr + '"' + dragAttrs + filterAttr(e.name, e.tags) + ' onclick="' + detailCall + '"' + (e.hasLocal ? ` oncontextmenu="window._launcher.showContextMenu(event, '` + jsArg(e.localId) + `')"` : "") + ' style="animation-delay:' + i * 0.04 + 's"><span class="app-status-badge st-' + st + '">' + escapeHtml(libStatusLabel(e)) + "</span>" + (e.hasDraft ? '<span class="app-staging-badge" title="' + escapeHtml(t("card.stagingHint")) + '">' + escapeHtml(t("card.stagingBadge")) + "</span>" : "") + menuBtn + '<div class="app-icon">' + escapeHtml(e.icon || "📝") + '</div><div class="app-name">' + escapeHtml(e.name) + (e.origin === "ai-published" ? ' <span class="ai-origin-badge">AI</span>' : "") + (e.hasAgents ? ' <span class="pcb-agent" title="' + escapeHtml(t("card.agentHint")) + '">🤖</span>' : "") + "</div>" + (function() {
|
|
8343
|
+
var d = e.descriptions && e.descriptions[getLang()] || e.description || "";
|
|
8344
|
+
return d ? '<div class="app-source">' + escapeHtml(d) + "</div>" : '<div class="app-source">' + sourceLabel(e.source) + "</div>";
|
|
8345
|
+
})() + '<div class="app-actions">' + openBtns + '<button onclick="event.stopPropagation(); ' + detailCall + '">' + escapeHtml(t("ctx.details")) + "</button></div>" + // Server-backed favourite toggle (owner/filename); only for server apps with a filename.
|
|
8346
|
+
(e.filename ? favStarHtml((e.owner || e.aimeatOwner || "") + "/" + e.filename) : "") + "</div>";
|
|
7935
8347
|
}
|
|
7936
8348
|
var currentIframeUrl = "";
|
|
7937
8349
|
function closeIframe() {
|
|
@@ -7993,24 +8405,12 @@
|
|
|
7993
8405
|
openDetailView(appId);
|
|
7994
8406
|
break;
|
|
7995
8407
|
case "edit":
|
|
7996
|
-
|
|
7997
|
-
document.getElementById("modal-title").textContent = "Edit App";
|
|
7998
|
-
document.getElementById("app-name").value = app.name || "";
|
|
7999
|
-
document.getElementById("app-icon").value = app.icon || "";
|
|
8000
|
-
document.getElementById("app-tags").value = (app.tags || []).join(", ");
|
|
8001
|
-
if (app.source === "url") {
|
|
8002
|
-
switchTab("url");
|
|
8003
|
-
document.getElementById("app-url").value = app.url || "";
|
|
8004
|
-
} else {
|
|
8005
|
-
switchTab("file");
|
|
8006
|
-
document.getElementById("selected-file-name").textContent = "(existing file)";
|
|
8007
|
-
}
|
|
8008
|
-
document.getElementById("modal-overlay").hidden = false;
|
|
8408
|
+
openDetailView(appId);
|
|
8009
8409
|
break;
|
|
8010
8410
|
case "favorite":
|
|
8011
8411
|
app.favorite = !app.favorite;
|
|
8012
8412
|
saveApp(app).then(function() {
|
|
8013
|
-
|
|
8413
|
+
renderApps4();
|
|
8014
8414
|
});
|
|
8015
8415
|
break;
|
|
8016
8416
|
case "view-source":
|
|
@@ -8021,13 +8421,13 @@
|
|
|
8021
8421
|
return app.name || "this app";
|
|
8022
8422
|
}))) {
|
|
8023
8423
|
deleteApp(appId).then(function() {
|
|
8024
|
-
|
|
8025
|
-
|
|
8424
|
+
renderApps4();
|
|
8425
|
+
loadPublishedApps2();
|
|
8026
8426
|
});
|
|
8027
8427
|
}
|
|
8028
8428
|
break;
|
|
8029
8429
|
case "publish":
|
|
8030
|
-
|
|
8430
|
+
showPublishModal3(appId);
|
|
8031
8431
|
break;
|
|
8032
8432
|
case "improve-ai":
|
|
8033
8433
|
openPromptBuilder(app);
|
|
@@ -8119,58 +8519,107 @@
|
|
|
8119
8519
|
overlay.dataset.appName = "Homepage";
|
|
8120
8520
|
overlay.hidden = false;
|
|
8121
8521
|
}
|
|
8122
|
-
|
|
8123
|
-
|
|
8124
|
-
|
|
8125
|
-
|
|
8126
|
-
|
|
8127
|
-
|
|
8128
|
-
|
|
8129
|
-
|
|
8130
|
-
|
|
8131
|
-
|
|
8132
|
-
|
|
8133
|
-
|
|
8134
|
-
|
|
8135
|
-
|
|
8136
|
-
|
|
8137
|
-
}
|
|
8138
|
-
function
|
|
8139
|
-
|
|
8140
|
-
|
|
8141
|
-
|
|
8142
|
-
|
|
8143
|
-
|
|
8144
|
-
|
|
8145
|
-
|
|
8146
|
-
|
|
8147
|
-
|
|
8148
|
-
|
|
8149
|
-
|
|
8150
|
-
|
|
8151
|
-
|
|
8152
|
-
|
|
8153
|
-
|
|
8154
|
-
|
|
8155
|
-
|
|
8156
|
-
|
|
8522
|
+
|
|
8523
|
+
// src/static/app-catalog/js/migrate.js
|
|
8524
|
+
var DONE_KEY = "appCatalogLocalMigrated";
|
|
8525
|
+
async function legacyDbNames() {
|
|
8526
|
+
var names = ["AppLauncherDB"];
|
|
8527
|
+
try {
|
|
8528
|
+
if (indexedDB.databases) {
|
|
8529
|
+
var list = await indexedDB.databases();
|
|
8530
|
+
list.forEach(function(d) {
|
|
8531
|
+
if (d && d.name && d.name.indexOf("AppLauncherDB") === 0 && names.indexOf(d.name) < 0) names.push(d.name);
|
|
8532
|
+
});
|
|
8533
|
+
}
|
|
8534
|
+
} catch (e) {
|
|
8535
|
+
}
|
|
8536
|
+
return names;
|
|
8537
|
+
}
|
|
8538
|
+
function openExisting(name) {
|
|
8539
|
+
return new Promise(function(resolve) {
|
|
8540
|
+
var req;
|
|
8541
|
+
try {
|
|
8542
|
+
req = indexedDB.open(name);
|
|
8543
|
+
} catch (e) {
|
|
8544
|
+
resolve(null);
|
|
8545
|
+
return;
|
|
8546
|
+
}
|
|
8547
|
+
req.onsuccess = function() {
|
|
8548
|
+
resolve(req.result);
|
|
8549
|
+
};
|
|
8550
|
+
req.onerror = function() {
|
|
8551
|
+
resolve(null);
|
|
8552
|
+
};
|
|
8553
|
+
req.onupgradeneeded = function() {
|
|
8554
|
+
};
|
|
8555
|
+
});
|
|
8556
|
+
}
|
|
8557
|
+
function readApps(db) {
|
|
8558
|
+
return new Promise(function(resolve) {
|
|
8559
|
+
if (!db || !db.objectStoreNames || !db.objectStoreNames.contains("apps")) {
|
|
8560
|
+
resolve([]);
|
|
8561
|
+
return;
|
|
8562
|
+
}
|
|
8563
|
+
try {
|
|
8564
|
+
var tx = db.transaction("apps", "readonly");
|
|
8565
|
+
var r = tx.objectStore("apps").getAll();
|
|
8566
|
+
r.onsuccess = function() {
|
|
8567
|
+
resolve(r.result || []);
|
|
8568
|
+
};
|
|
8569
|
+
r.onerror = function() {
|
|
8570
|
+
resolve([]);
|
|
8571
|
+
};
|
|
8572
|
+
} catch (e) {
|
|
8573
|
+
resolve([]);
|
|
8574
|
+
}
|
|
8575
|
+
});
|
|
8576
|
+
}
|
|
8577
|
+
function downloadJson(apps) {
|
|
8578
|
+
var json = JSON.stringify({ version: 1, exportedAt: (/* @__PURE__ */ new Date()).toISOString(), apps }, null, 2);
|
|
8579
|
+
var blob = new Blob([json], { type: "application/json" });
|
|
8580
|
+
var url = URL.createObjectURL(blob);
|
|
8581
|
+
var a = document.createElement("a");
|
|
8582
|
+
a.href = url;
|
|
8583
|
+
a.download = "app-catalog-local-apps.json";
|
|
8584
|
+
document.body.appendChild(a);
|
|
8585
|
+
a.click();
|
|
8586
|
+
document.body.removeChild(a);
|
|
8587
|
+
URL.revokeObjectURL(url);
|
|
8588
|
+
}
|
|
8589
|
+
async function checkLegacyLocalApps() {
|
|
8590
|
+
try {
|
|
8591
|
+
if (localStorage.getItem(DONE_KEY)) return;
|
|
8592
|
+
} catch (e) {
|
|
8593
|
+
return;
|
|
8157
8594
|
}
|
|
8158
|
-
|
|
8159
|
-
|
|
8160
|
-
|
|
8161
|
-
|
|
8162
|
-
|
|
8163
|
-
|
|
8164
|
-
|
|
8595
|
+
var apps = [];
|
|
8596
|
+
try {
|
|
8597
|
+
var names = await legacyDbNames();
|
|
8598
|
+
for (var i = 0; i < names.length; i++) {
|
|
8599
|
+
var db = await openExisting(names[i]);
|
|
8600
|
+
var found = await readApps(db);
|
|
8601
|
+
if (found && found.length) apps = apps.concat(found);
|
|
8602
|
+
try {
|
|
8603
|
+
if (db) db.close();
|
|
8604
|
+
} catch (e) {
|
|
8605
|
+
}
|
|
8606
|
+
}
|
|
8607
|
+
} catch (e) {
|
|
8165
8608
|
}
|
|
8166
|
-
|
|
8167
|
-
|
|
8168
|
-
|
|
8169
|
-
|
|
8609
|
+
if (!apps.length) {
|
|
8610
|
+
try {
|
|
8611
|
+
localStorage.setItem(DONE_KEY, "1");
|
|
8612
|
+
} catch (e) {
|
|
8613
|
+
}
|
|
8614
|
+
return;
|
|
8615
|
+
}
|
|
8616
|
+
var msg = (t("migrate.found") || "You have {n} local app(s) from the old catalog. Download them as a backup?").replace("{n}", String(apps.length));
|
|
8617
|
+
var wants = await showConfirm(msg);
|
|
8618
|
+
if (wants) downloadJson(apps);
|
|
8619
|
+
try {
|
|
8620
|
+
localStorage.setItem(DONE_KEY, "1");
|
|
8621
|
+
} catch (e) {
|
|
8170
8622
|
}
|
|
8171
|
-
Promise.all(saves).then(function() {
|
|
8172
|
-
renderApps5();
|
|
8173
|
-
});
|
|
8174
8623
|
}
|
|
8175
8624
|
|
|
8176
8625
|
// src/static/app-catalog/js/main.js
|
|
@@ -8184,7 +8633,7 @@
|
|
|
8184
8633
|
}
|
|
8185
8634
|
applyI18n();
|
|
8186
8635
|
try {
|
|
8187
|
-
|
|
8636
|
+
renderApps4();
|
|
8188
8637
|
} catch (e) {
|
|
8189
8638
|
}
|
|
8190
8639
|
try {
|
|
@@ -8192,11 +8641,7 @@
|
|
|
8192
8641
|
} catch (e) {
|
|
8193
8642
|
}
|
|
8194
8643
|
try {
|
|
8195
|
-
|
|
8196
|
-
} catch (e) {
|
|
8197
|
-
}
|
|
8198
|
-
try {
|
|
8199
|
-
renderRecentlyOpened();
|
|
8644
|
+
loadPublishedApps2();
|
|
8200
8645
|
} catch (e) {
|
|
8201
8646
|
}
|
|
8202
8647
|
try {
|
|
@@ -8208,41 +8653,16 @@
|
|
|
8208
8653
|
} catch (e) {
|
|
8209
8654
|
}
|
|
8210
8655
|
}
|
|
8211
|
-
function switchDbMode(mode) {
|
|
8212
|
-
if (mode === getDbMode()) return;
|
|
8213
|
-
if (mode === "personal" && !currentOwnerName()) {
|
|
8214
|
-
updateModeToggle2();
|
|
8215
|
-
requireSignInThen(function() {
|
|
8216
|
-
switchDbMode("personal");
|
|
8217
|
-
});
|
|
8218
|
-
return;
|
|
8219
|
-
}
|
|
8220
|
-
setDbMode(mode);
|
|
8221
|
-
closeDbInstance();
|
|
8222
|
-
updateModeToggle2();
|
|
8223
|
-
refreshAll3();
|
|
8224
|
-
}
|
|
8225
|
-
function updateModeToggle2() {
|
|
8226
|
-
var globalBtn = document.getElementById("mode-global");
|
|
8227
|
-
var personalBtn = document.getElementById("mode-personal");
|
|
8228
|
-
if (!globalBtn || !personalBtn) return;
|
|
8229
|
-
globalBtn.classList.toggle("active", getDbMode() === "global");
|
|
8230
|
-
personalBtn.classList.toggle("active", getDbMode() === "personal");
|
|
8231
|
-
var signedIn = !!currentOwnerName();
|
|
8232
|
-
personalBtn.classList.toggle("mode-btn-locked", !signedIn);
|
|
8233
|
-
personalBtn.title = signedIn ? t("mode.personal.title") : t("mode.personal.needsLogin");
|
|
8234
|
-
}
|
|
8235
8656
|
var allApps = [];
|
|
8236
8657
|
var activeTag = null;
|
|
8237
8658
|
var searchQuery = "";
|
|
8238
8659
|
window._launcher = {
|
|
8239
|
-
openDB,
|
|
8240
8660
|
getAllApps,
|
|
8241
8661
|
saveApp,
|
|
8242
8662
|
deleteApp,
|
|
8243
8663
|
loadConfig,
|
|
8244
8664
|
saveConfig,
|
|
8245
|
-
renderApps:
|
|
8665
|
+
renderApps: renderApps4,
|
|
8246
8666
|
renderTags,
|
|
8247
8667
|
filterByTag,
|
|
8248
8668
|
launchApp: launchApp2,
|
|
@@ -8259,10 +8679,6 @@
|
|
|
8259
8679
|
handleContextAction,
|
|
8260
8680
|
generateId,
|
|
8261
8681
|
readFileAsText,
|
|
8262
|
-
addAppFromUrl,
|
|
8263
|
-
addAppFromFile,
|
|
8264
|
-
addAppFromSource,
|
|
8265
|
-
addAppFromZip,
|
|
8266
8682
|
showModal,
|
|
8267
8683
|
closeModal,
|
|
8268
8684
|
openSettings,
|
|
@@ -8271,18 +8687,22 @@
|
|
|
8271
8687
|
saveSettings,
|
|
8272
8688
|
closeSettings,
|
|
8273
8689
|
applyTheme,
|
|
8274
|
-
exportBackup,
|
|
8275
|
-
clearAllData,
|
|
8276
|
-
importFromAimeat,
|
|
8277
|
-
processAimeatImport,
|
|
8278
8690
|
viewSource: viewSource2,
|
|
8279
8691
|
generateHomepagePrompt,
|
|
8280
|
-
showPublishModal:
|
|
8692
|
+
showPublishModal: showPublishModal3,
|
|
8281
8693
|
submitPublish,
|
|
8282
|
-
loadPublishedApps:
|
|
8694
|
+
loadPublishedApps: loadPublishedApps2,
|
|
8695
|
+
// Toggle a server-backed favourite (ref = "owner/filename"), then re-render the ⭐ group + stars.
|
|
8696
|
+
toggleFavorite: function(ref) {
|
|
8697
|
+
toggleFavorite(ref).then(function() {
|
|
8698
|
+
try {
|
|
8699
|
+
refreshFavoritesUI();
|
|
8700
|
+
} catch (e) {
|
|
8701
|
+
}
|
|
8702
|
+
});
|
|
8703
|
+
},
|
|
8283
8704
|
toggleCommunity,
|
|
8284
8705
|
switchView,
|
|
8285
|
-
switchDbMode,
|
|
8286
8706
|
unpublishApp,
|
|
8287
8707
|
deleteServerApp,
|
|
8288
8708
|
toggleParkApp,
|
|
@@ -8290,6 +8710,9 @@
|
|
|
8290
8710
|
detailAboutEdit,
|
|
8291
8711
|
detailAboutCancel,
|
|
8292
8712
|
detailAboutSave,
|
|
8713
|
+
detailTranslateDesc,
|
|
8714
|
+
detailPromoteSave,
|
|
8715
|
+
detailPromoteClear,
|
|
8293
8716
|
detailToggleFavorite,
|
|
8294
8717
|
detailAccessCodeEdit,
|
|
8295
8718
|
detailAccessCodeCancel,
|
|
@@ -8309,9 +8732,6 @@
|
|
|
8309
8732
|
revokeConsent,
|
|
8310
8733
|
submitSubdomainAssign,
|
|
8311
8734
|
unassignSubdomain,
|
|
8312
|
-
jsonImportSelectAll,
|
|
8313
|
-
submitJsonImport,
|
|
8314
|
-
removeDuplicateApps,
|
|
8315
8735
|
toggleBackupMenu,
|
|
8316
8736
|
toggleCreateMenu,
|
|
8317
8737
|
toggleCortexBar,
|
|
@@ -8322,6 +8742,9 @@
|
|
|
8322
8742
|
submitBackupRestore,
|
|
8323
8743
|
showVersionsModal,
|
|
8324
8744
|
showLineageModal,
|
|
8745
|
+
showAppAgentsModal,
|
|
8746
|
+
agentsDeploy,
|
|
8747
|
+
agentsUndeploy,
|
|
8325
8748
|
showProtectionModal,
|
|
8326
8749
|
saveProtection,
|
|
8327
8750
|
restoreVersion,
|
|
@@ -8335,6 +8758,7 @@
|
|
|
8335
8758
|
detailAiDiscard,
|
|
8336
8759
|
detailTestDraftLive,
|
|
8337
8760
|
detailPublishTestedDraft,
|
|
8761
|
+
openStagingPreview,
|
|
8338
8762
|
detailEditSource,
|
|
8339
8763
|
detailImproveExternal,
|
|
8340
8764
|
detailSharePrompt,
|
|
@@ -8343,7 +8767,6 @@
|
|
|
8343
8767
|
detailSetScreenshot,
|
|
8344
8768
|
detailRefreshScreenshot,
|
|
8345
8769
|
openPublishedDetail,
|
|
8346
|
-
renderRecentlyOpened,
|
|
8347
8770
|
loadCortexExtensions,
|
|
8348
8771
|
showCortexPopup,
|
|
8349
8772
|
cortexCopy,
|
|
@@ -8354,10 +8777,6 @@
|
|
|
8354
8777
|
cortexEditorExport,
|
|
8355
8778
|
openPromptBuilder,
|
|
8356
8779
|
closePbPanel,
|
|
8357
|
-
onCardDragStart,
|
|
8358
|
-
onCardDragEnd,
|
|
8359
|
-
onCardDragOver,
|
|
8360
|
-
onCardDrop,
|
|
8361
8780
|
syncConfigToServer,
|
|
8362
8781
|
loadConfigFromServer,
|
|
8363
8782
|
setLanguage,
|
|
@@ -8368,16 +8787,16 @@
|
|
|
8368
8787
|
window.cortexCopy = cortexCopy;
|
|
8369
8788
|
function refreshAll3() {
|
|
8370
8789
|
allApps = [];
|
|
8371
|
-
|
|
8372
|
-
|
|
8373
|
-
renderRecentlyOpened();
|
|
8790
|
+
renderApps4();
|
|
8791
|
+
loadPublishedApps2();
|
|
8374
8792
|
}
|
|
8375
8793
|
document.addEventListener("DOMContentLoaded", function() {
|
|
8376
8794
|
initDetail({
|
|
8377
8795
|
refreshAll: refreshAll3,
|
|
8378
|
-
loadPublishedApps:
|
|
8379
|
-
renderApps:
|
|
8380
|
-
updateModeToggle:
|
|
8796
|
+
loadPublishedApps: loadPublishedApps2,
|
|
8797
|
+
renderApps: renderApps4,
|
|
8798
|
+
updateModeToggle: function() {
|
|
8799
|
+
},
|
|
8381
8800
|
getCortexOwnerToken,
|
|
8382
8801
|
launchApp: launchApp2,
|
|
8383
8802
|
viewPublished: viewPublished2,
|
|
@@ -8385,7 +8804,7 @@
|
|
|
8385
8804
|
generateId,
|
|
8386
8805
|
generateSharePrompt: generateSharePrompt2,
|
|
8387
8806
|
openPromptBuilder,
|
|
8388
|
-
showPublishModal:
|
|
8807
|
+
showPublishModal: showPublishModal3,
|
|
8389
8808
|
getMainApps: function() {
|
|
8390
8809
|
return allApps;
|
|
8391
8810
|
},
|
|
@@ -8401,10 +8820,13 @@
|
|
|
8401
8820
|
setIframeUrl: setIframeUrl2,
|
|
8402
8821
|
isOperatorSession: isOperatorSession2
|
|
8403
8822
|
});
|
|
8404
|
-
|
|
8405
|
-
|
|
8406
|
-
return allApps;
|
|
8823
|
+
initAppAgents({ getServerManifests: function() {
|
|
8824
|
+
return serverAppManifests;
|
|
8407
8825
|
} });
|
|
8826
|
+
initSettings({ generateId, renderApps: renderApps4, loadPublishedApps: loadPublishedApps2 });
|
|
8827
|
+
initAppsIo({ generateId, readFileAsText, renderApps: renderApps4, getMainApps: function() {
|
|
8828
|
+
return allApps;
|
|
8829
|
+
}, showPublishModal: showPublishModal3 });
|
|
8408
8830
|
initServerIo({
|
|
8409
8831
|
getMainApps: function() {
|
|
8410
8832
|
return allApps;
|
|
@@ -8427,7 +8849,7 @@
|
|
|
8427
8849
|
return searchQuery;
|
|
8428
8850
|
},
|
|
8429
8851
|
generateId,
|
|
8430
|
-
renderApps:
|
|
8852
|
+
renderApps: renderApps4,
|
|
8431
8853
|
refreshAll: refreshAll3
|
|
8432
8854
|
});
|
|
8433
8855
|
initRender({
|
|
@@ -8459,7 +8881,6 @@
|
|
|
8459
8881
|
var _urlLang = _params.get("lang");
|
|
8460
8882
|
setLang(_urlLang === "fi" || _urlLang === "en" ? _urlLang : loadConfig().language === "fi" ? "fi" : "en");
|
|
8461
8883
|
applyI18n();
|
|
8462
|
-
updateModeToggle2();
|
|
8463
8884
|
var _savedView = "library";
|
|
8464
8885
|
try {
|
|
8465
8886
|
_savedView = localStorage.getItem("appCatalogView") || "library";
|
|
@@ -8472,8 +8893,8 @@
|
|
|
8472
8893
|
if (_homeLabel && location.host) _homeLabel.textContent = location.host.replace(/^apps\./, "");
|
|
8473
8894
|
} catch (e) {
|
|
8474
8895
|
}
|
|
8475
|
-
|
|
8476
|
-
|
|
8896
|
+
renderApps4();
|
|
8897
|
+
loadPublishedApps2();
|
|
8477
8898
|
loadCortexExtensions();
|
|
8478
8899
|
loadConfigFromServer();
|
|
8479
8900
|
document.getElementById("confirm-ok-btn").addEventListener("click", function() {
|
|
@@ -8485,6 +8906,10 @@
|
|
|
8485
8906
|
document.getElementById("confirm-overlay").addEventListener("click", function(e) {
|
|
8486
8907
|
if (e.target === this) closeConfirm(false);
|
|
8487
8908
|
});
|
|
8909
|
+
try {
|
|
8910
|
+
checkLegacyLocalApps();
|
|
8911
|
+
} catch (e) {
|
|
8912
|
+
}
|
|
8488
8913
|
if (_params.get("create") === "1") {
|
|
8489
8914
|
try {
|
|
8490
8915
|
openPromptBuilder(null);
|
|
@@ -8493,7 +8918,7 @@
|
|
|
8493
8918
|
}
|
|
8494
8919
|
document.getElementById("search-input").addEventListener("input", function(e) {
|
|
8495
8920
|
searchQuery = e.target.value.trim();
|
|
8496
|
-
|
|
8921
|
+
renderApps4();
|
|
8497
8922
|
applyServerFilter();
|
|
8498
8923
|
});
|
|
8499
8924
|
document.getElementById("add-btn").addEventListener("click", function() {
|
|
@@ -8518,17 +8943,6 @@
|
|
|
8518
8943
|
closeSettings();
|
|
8519
8944
|
}
|
|
8520
8945
|
});
|
|
8521
|
-
document.getElementById("import-file-input").addEventListener("change", function() {
|
|
8522
|
-
if (this.files && this.files.length > 0) {
|
|
8523
|
-
handleImportBackup(this.files[0]);
|
|
8524
|
-
this.value = "";
|
|
8525
|
-
}
|
|
8526
|
-
});
|
|
8527
|
-
document.getElementById("aimeat-import-overlay").addEventListener("click", function(e) {
|
|
8528
|
-
if (e.target === this) {
|
|
8529
|
-
this.hidden = true;
|
|
8530
|
-
}
|
|
8531
|
-
});
|
|
8532
8946
|
document.getElementById("publish-overlay").addEventListener("click", function(e) {
|
|
8533
8947
|
if (e.target === this) {
|
|
8534
8948
|
this.hidden = true;
|
|
@@ -8553,11 +8967,6 @@
|
|
|
8553
8967
|
this.hidden = true;
|
|
8554
8968
|
}
|
|
8555
8969
|
});
|
|
8556
|
-
document.getElementById("json-import-overlay").addEventListener("click", function(e) {
|
|
8557
|
-
if (e.target === this) {
|
|
8558
|
-
this.hidden = true;
|
|
8559
|
-
}
|
|
8560
|
-
});
|
|
8561
8970
|
document.addEventListener("click", function(e) {
|
|
8562
8971
|
var menu = document.getElementById("backup-menu");
|
|
8563
8972
|
if (!menu.hidden && !menu.contains(e.target) && e.target.id !== "backup-btn") {
|
|
@@ -8688,16 +9097,12 @@
|
|
|
8688
9097
|
document.getElementById("source-overlay").hidden = true;
|
|
8689
9098
|
} else if (!document.getElementById("context-menu").hidden) {
|
|
8690
9099
|
hideContextMenu();
|
|
8691
|
-
} else if (!document.getElementById("aimeat-import-overlay").hidden) {
|
|
8692
|
-
document.getElementById("aimeat-import-overlay").hidden = true;
|
|
8693
9100
|
} else if (!document.getElementById("publish-overlay").hidden) {
|
|
8694
9101
|
document.getElementById("publish-overlay").hidden = true;
|
|
8695
9102
|
} else if (!document.getElementById("subdomain-overlay").hidden) {
|
|
8696
9103
|
document.getElementById("subdomain-overlay").hidden = true;
|
|
8697
9104
|
} else if (!document.getElementById("backup-overlay").hidden) {
|
|
8698
9105
|
document.getElementById("backup-overlay").hidden = true;
|
|
8699
|
-
} else if (!document.getElementById("json-import-overlay").hidden) {
|
|
8700
|
-
document.getElementById("json-import-overlay").hidden = true;
|
|
8701
9106
|
} else if (!document.getElementById("settings-overlay").hidden) {
|
|
8702
9107
|
closeSettings();
|
|
8703
9108
|
} else if (!document.getElementById("modal-overlay").hidden) {
|
|
@@ -8717,23 +9122,6 @@
|
|
|
8717
9122
|
document.getElementById("search-input").focus();
|
|
8718
9123
|
}
|
|
8719
9124
|
});
|
|
8720
|
-
document.getElementById("app-grid").addEventListener("touchstart", function(e) {
|
|
8721
|
-
var card = e.target.closest(".app-card");
|
|
8722
|
-
if (!card) return;
|
|
8723
|
-
var appId = card.getAttribute("data-id");
|
|
8724
|
-
card._longPressTimer = setTimeout(function() {
|
|
8725
|
-
e.preventDefault();
|
|
8726
|
-
window._launcher.showContextMenu(e.touches[0], appId);
|
|
8727
|
-
}, 500);
|
|
8728
|
-
}, { passive: false });
|
|
8729
|
-
document.getElementById("app-grid").addEventListener("touchend", function(e) {
|
|
8730
|
-
var card = e.target.closest(".app-card");
|
|
8731
|
-
if (card && card._longPressTimer) clearTimeout(card._longPressTimer);
|
|
8732
|
-
});
|
|
8733
|
-
document.getElementById("app-grid").addEventListener("touchmove", function(e) {
|
|
8734
|
-
var card = e.target.closest(".app-card");
|
|
8735
|
-
if (card && card._longPressTimer) clearTimeout(card._longPressTimer);
|
|
8736
|
-
});
|
|
8737
9125
|
document.getElementById("copy-source-btn").addEventListener("click", function() {
|
|
8738
9126
|
var code = document.getElementById("source-code").value;
|
|
8739
9127
|
var btn = this;
|
|
@@ -8804,7 +9192,7 @@
|
|
|
8804
9192
|
btn.textContent = "Save Changes";
|
|
8805
9193
|
btn.disabled = true;
|
|
8806
9194
|
}, 1500);
|
|
8807
|
-
|
|
9195
|
+
renderApps4();
|
|
8808
9196
|
}).catch(function(err) {
|
|
8809
9197
|
btn.textContent = "Save Changes";
|
|
8810
9198
|
btn.disabled = false;
|