aimeat 1.27.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.env.example +2 -0
- package/dist/locales/en.json +538 -297
- package/dist/locales/fi.json +500 -259
- package/dist/public/components/NotificationBell.js +2 -4
- package/dist/public/css/views/agents-detail.css +11 -0
- package/dist/public/css/views/app-grant.css +35 -3
- package/dist/public/css/views/inbox.css +78 -0
- package/dist/public/css/views/landing.css +8 -0
- package/dist/public/css/views/living.css +187 -0
- package/dist/public/css/views/notebook.css +89 -0
- package/dist/public/css/views/profile.css +78 -85
- package/dist/public/js/app-sandbox.js +18 -59
- package/dist/public/js/presence-store.js +7 -1
- package/dist/public/js/services/agents.js +10 -3
- package/dist/public/js/services/generator-prompts-base.js +40 -3
- package/dist/public/js/services/living.js +506 -0
- package/dist/public/js/services/memory.js +23 -3
- package/dist/public/js/services/nodes.js +1 -1
- package/dist/public/js/services/notebook-plan.js +211 -0
- package/dist/public/js/services/notebook.js +97 -0
- package/dist/public/js/services/organisms.js +41 -2
- package/dist/public/js/services/tracked-responses.js +103 -0
- package/dist/public/js/utils.js +15 -0
- package/dist/public/lib/live-updates.js +231 -94
- package/dist/public/spa.html +8 -1
- package/dist/public/types/aimeat-globals.d.ts +4 -0
- package/dist/public/views/admin/agent-integration-tab.js +2 -5
- package/dist/public/views/admin/agent-tasks-tab.js +2 -5
- package/dist/public/views/admin/cortex-tab.js +2 -5
- package/dist/public/views/admin/federation-tab.js +3 -10
- package/dist/public/views/admin/memory-tab.js +2 -5
- package/dist/public/views/admin/messages-tab.js +2 -5
- package/dist/public/views/admin/packages-tab.js +2 -5
- package/dist/public/views/admin/sharing-groups-tab.js +2 -5
- package/dist/public/views/app-grant.js +126 -23
- package/dist/public/views/landing-node-totals.js +71 -0
- package/dist/public/views/landing.js +6 -4
- package/dist/public/views/profile/agents/agent-card.js +8 -5
- package/dist/public/views/profile/agents/tab-activity.js +2 -3
- package/dist/public/views/profile/agents/tab-agent-config.js +2 -3
- package/dist/public/views/profile/agents/tab-data-access.js +2 -3
- package/dist/public/views/profile/agents/tab-integration.js +2 -3
- package/dist/public/views/profile/agents/tab-messages.js +2 -6
- package/dist/public/views/profile/agents/tab-quality.js +2 -5
- package/dist/public/views/profile/agents/tab-schedules.js +2 -4
- package/dist/public/views/profile/agents-activity-subtab.js +2 -5
- package/dist/public/views/profile/agents-capabilities-subtab.js +2 -2
- package/dist/public/views/profile/agents-messages-subtab.js +2 -5
- package/dist/public/views/profile/agents-services-subtab.js +2 -3
- package/dist/public/views/profile/agents-tab.js +70 -90
- package/dist/public/views/profile/agents-tasks-subtab.js +3 -8
- package/dist/public/views/profile/apps-tab.js +17 -0
- package/dist/public/views/profile/boards-tab.js +2 -5
- package/dist/public/views/profile/chat-sessions-tab.js +2 -5
- package/dist/public/views/profile/ecosystem-tab.js +7 -12
- package/dist/public/views/profile/extensions-tab.js +2 -5
- package/dist/public/views/profile/federation-tab.js +2 -5
- package/dist/public/views/profile/inbox-tab.js +280 -14
- package/dist/public/views/profile/knowledge-tab.js +2 -5
- package/dist/public/views/profile/landing-page.js +260 -184
- package/dist/public/views/profile/living-tab.js +480 -0
- package/dist/public/views/profile/memory-tab.js +2 -5
- package/dist/public/views/profile/notebook-card.js +515 -0
- package/dist/public/views/profile/notebook-helpers.js +48 -0
- package/dist/public/views/profile/notebook-tab.js +40 -260
- package/dist/public/views/profile/organisms/activity-panel.js +3 -2
- package/dist/public/views/profile/organisms/home.js +52 -3
- package/dist/public/views/profile/organisms/members.js +2 -5
- package/dist/public/views/profile/organisms/mindmap.js +194 -0
- package/dist/public/views/profile/organisms/panels.js +3 -10
- package/dist/public/views/profile/organisms/participants-panel.js +3 -2
- package/dist/public/views/profile/organisms/readme-panel.js +97 -0
- package/dist/public/views/profile/organisms/sources-panel.js +2 -5
- package/dist/public/views/profile/organisms/timeline-panel.js +104 -0
- package/dist/public/views/profile/organisms/workspace-comments.js +2 -5
- package/dist/public/views/profile/organisms/workspace-list.js +8 -8
- package/dist/public/views/profile/organisms/workspace.js +41 -6
- package/dist/public/views/profile/organisms-tab.js +3 -6
- package/dist/public/views/profile/packages-tab.js +2 -5
- package/dist/public/views/profile/scheduler-tab.js +2 -4
- package/dist/public/views/profile/track-response-modal.js +211 -0
- package/dist/public/views/profile/workflows-tab.js +4 -13
- package/dist/public/views/profile.js +10 -9
- package/dist/scripts/consent-audit-prune.d.ts +21 -0
- package/dist/scripts/consent-audit-prune.d.ts.map +1 -0
- package/dist/scripts/consent-audit-prune.js +198 -0
- package/dist/scripts/consent-audit-prune.js.map +1 -0
- package/dist/scripts/reassign-apps.d.ts +2 -0
- package/dist/scripts/reassign-apps.d.ts.map +1 -0
- package/dist/scripts/reassign-apps.js +99 -0
- package/dist/scripts/reassign-apps.js.map +1 -0
- package/dist/scripts/telemetry-prune.d.ts +20 -0
- package/dist/scripts/telemetry-prune.d.ts.map +1 -0
- package/dist/scripts/telemetry-prune.js +195 -0
- package/dist/scripts/telemetry-prune.js.map +1 -0
- package/dist/src/auth/jwt.d.ts +1 -0
- package/dist/src/auth/jwt.d.ts.map +1 -1
- package/dist/src/auth/jwt.js +13 -0
- package/dist/src/auth/jwt.js.map +1 -1
- package/dist/src/cli/connect/mcp/local-server.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/local-server.js +109 -0
- package/dist/src/cli/connect/mcp/local-server.js.map +1 -1
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +9 -0
- package/dist/src/cli/connect/tool-call.js.map +1 -1
- package/dist/src/cli/connect/tunnel-client.d.ts +16 -0
- package/dist/src/cli/connect/tunnel-client.d.ts.map +1 -1
- package/dist/src/cli/connect/tunnel-client.js +42 -0
- package/dist/src/cli/connect/tunnel-client.js.map +1 -1
- package/dist/src/config.d.ts +7 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +4 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +1449 -128
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/generated/prisma-postgres/edge.js +17 -3
- package/dist/src/generated/prisma-postgres/index-browser.js +14 -0
- package/dist/src/generated/prisma-postgres/index.d.ts +1580 -161
- package/dist/src/generated/prisma-postgres/index.js +17 -3
- package/dist/src/generated/prisma-postgres/package.json +1 -1
- package/dist/src/generated/prisma-postgres/schema.prisma +18 -0
- package/dist/src/generated/prisma-postgres/wasm.js +17 -3
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/agent-telemetry.d.ts +2 -0
- package/dist/src/mcp/agent-telemetry.d.ts.map +1 -1
- package/dist/src/mcp/agent-telemetry.js +8 -3
- package/dist/src/mcp/agent-telemetry.js.map +1 -1
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +1 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/apps.d.ts.map +1 -1
- package/dist/src/mcp/apps.js +14 -1
- package/dist/src/mcp/apps.js.map +1 -1
- package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions.js +15 -0
- package/dist/src/mcp/catalog/definitions.js.map +1 -1
- package/dist/src/mcp/organisms.d.ts +2 -0
- package/dist/src/mcp/organisms.d.ts.map +1 -1
- package/dist/src/mcp/organisms.js +43 -0
- package/dist/src/mcp/organisms.js.map +1 -1
- package/dist/src/mcp/workspaces.d.ts.map +1 -1
- package/dist/src/mcp/workspaces.js +8 -1
- package/dist/src/mcp/workspaces.js.map +1 -1
- package/dist/src/routes/agent-messages.js +2 -2
- package/dist/src/routes/agent-messages.js.map +1 -1
- package/dist/src/routes/agent-tasks.js +14 -14
- package/dist/src/routes/agent-tasks.js.map +1 -1
- package/dist/src/routes/agent-telemetry.d.ts +3 -0
- package/dist/src/routes/agent-telemetry.d.ts.map +1 -1
- package/dist/src/routes/agent-telemetry.js +11 -6
- package/dist/src/routes/agent-telemetry.js.map +1 -1
- package/dist/src/routes/agents.d.ts.map +1 -1
- package/dist/src/routes/agents.js +41 -3
- package/dist/src/routes/agents.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts +3 -0
- package/dist/src/routes/app-grants.d.ts.map +1 -1
- package/dist/src/routes/app-grants.js +120 -7
- package/dist/src/routes/app-grants.js.map +1 -1
- package/dist/src/routes/apps.d.ts +9 -0
- package/dist/src/routes/apps.d.ts.map +1 -1
- package/dist/src/routes/apps.js +110 -16
- package/dist/src/routes/apps.js.map +1 -1
- package/dist/src/routes/boards.d.ts.map +1 -1
- package/dist/src/routes/boards.js +4 -2
- package/dist/src/routes/boards.js.map +1 -1
- package/dist/src/routes/consent.d.ts.map +1 -1
- package/dist/src/routes/consent.js +14 -1
- package/dist/src/routes/consent.js.map +1 -1
- package/dist/src/routes/ghii.d.ts.map +1 -1
- package/dist/src/routes/ghii.js +20 -10
- package/dist/src/routes/ghii.js.map +1 -1
- package/dist/src/routes/librarian.d.ts.map +1 -1
- package/dist/src/routes/librarian.js +64 -2
- package/dist/src/routes/librarian.js.map +1 -1
- package/dist/src/routes/libs.d.ts +9 -0
- package/dist/src/routes/libs.d.ts.map +1 -1
- package/dist/src/routes/libs.js +261 -2
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/living.d.ts +18 -0
- package/dist/src/routes/living.d.ts.map +1 -0
- package/dist/src/routes/living.js +63 -0
- package/dist/src/routes/living.js.map +1 -0
- package/dist/src/routes/matches.d.ts.map +1 -1
- package/dist/src/routes/matches.js +1 -3
- package/dist/src/routes/matches.js.map +1 -1
- package/dist/src/routes/memory.d.ts.map +1 -1
- package/dist/src/routes/memory.js +40 -1
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/messages.d.ts +2 -0
- package/dist/src/routes/messages.d.ts.map +1 -1
- package/dist/src/routes/messages.js +27 -96
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/organisms.d.ts +8 -0
- package/dist/src/routes/organisms.d.ts.map +1 -1
- package/dist/src/routes/organisms.js +124 -3
- package/dist/src/routes/organisms.js.map +1 -1
- package/dist/src/routes/owners.d.ts.map +1 -1
- package/dist/src/routes/owners.js +2 -0
- package/dist/src/routes/owners.js.map +1 -1
- package/dist/src/routes/personal.d.ts.map +1 -1
- package/dist/src/routes/personal.js +7 -0
- package/dist/src/routes/personal.js.map +1 -1
- package/dist/src/routes/portal.d.ts +3 -0
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +19 -12
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/public-stats.d.ts +3 -0
- package/dist/src/routes/public-stats.d.ts.map +1 -1
- package/dist/src/routes/public-stats.js +48 -0
- package/dist/src/routes/public-stats.js.map +1 -1
- package/dist/src/routes/sse.d.ts +3 -0
- package/dist/src/routes/sse.d.ts.map +1 -1
- package/dist/src/routes/sse.js +27 -15
- package/dist/src/routes/sse.js.map +1 -1
- package/dist/src/routes/storage-files.d.ts +2 -0
- package/dist/src/routes/storage-files.d.ts.map +1 -1
- package/dist/src/routes/storage-files.js +14 -17
- package/dist/src/routes/storage-files.js.map +1 -1
- package/dist/src/routes/subdomains.d.ts +28 -0
- package/dist/src/routes/subdomains.d.ts.map +1 -1
- package/dist/src/routes/subdomains.js +138 -11
- package/dist/src/routes/subdomains.js.map +1 -1
- package/dist/src/routes/tracked-responses.d.ts +27 -0
- package/dist/src/routes/tracked-responses.d.ts.map +1 -0
- package/dist/src/routes/tracked-responses.js +212 -0
- package/dist/src/routes/tracked-responses.js.map +1 -0
- package/dist/src/routes/upload.js +8 -0
- package/dist/src/routes/upload.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +24 -0
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/service-init.js +4 -0
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts +5 -0
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +33 -1
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/services/access-guard.d.ts +4 -4
- package/dist/src/services/access-guard.d.ts.map +1 -1
- package/dist/src/services/access-guard.js +7 -8
- package/dist/src/services/access-guard.js.map +1 -1
- package/dist/src/services/activity-recorder.d.ts +2 -13
- package/dist/src/services/activity-recorder.d.ts.map +1 -1
- package/dist/src/services/activity-recorder.js +0 -42
- package/dist/src/services/activity-recorder.js.map +1 -1
- package/dist/src/services/connect-tunnel.d.ts +56 -3
- package/dist/src/services/connect-tunnel.d.ts.map +1 -1
- package/dist/src/services/connect-tunnel.js +216 -1
- package/dist/src/services/connect-tunnel.js.map +1 -1
- package/dist/src/services/consent-audit-buffer.d.ts +45 -0
- package/dist/src/services/consent-audit-buffer.d.ts.map +1 -0
- package/dist/src/services/consent-audit-buffer.js +85 -0
- package/dist/src/services/consent-audit-buffer.js.map +1 -0
- package/dist/src/services/consent.d.ts +9 -3
- package/dist/src/services/consent.d.ts.map +1 -1
- package/dist/src/services/consent.js +13 -5
- package/dist/src/services/consent.js.map +1 -1
- package/dist/src/services/core-jobs.d.ts.map +1 -1
- package/dist/src/services/core-jobs.js +20 -4
- package/dist/src/services/core-jobs.js.map +1 -1
- package/dist/src/services/event-bus.d.ts +24 -1
- package/dist/src/services/event-bus.d.ts.map +1 -1
- package/dist/src/services/event-bus.js +17 -2
- package/dist/src/services/event-bus.js.map +1 -1
- package/dist/src/services/generator-prompts/resolvers.d.ts +2 -0
- package/dist/src/services/generator-prompts/resolvers.d.ts.map +1 -1
- package/dist/src/services/generator-prompts/resolvers.js +22 -3
- package/dist/src/services/generator-prompts/resolvers.js.map +1 -1
- package/dist/src/services/job-seeding.d.ts.map +1 -1
- package/dist/src/services/job-seeding.js +4 -0
- package/dist/src/services/job-seeding.js.map +1 -1
- package/dist/src/services/living-author-prompt.d.ts +14 -0
- package/dist/src/services/living-author-prompt.d.ts.map +1 -0
- package/dist/src/services/living-author-prompt.js +47 -0
- package/dist/src/services/living-author-prompt.js.map +1 -0
- package/dist/src/services/living-author.d.ts +55 -0
- package/dist/src/services/living-author.d.ts.map +1 -0
- package/dist/src/services/living-author.js +91 -0
- package/dist/src/services/living-author.js.map +1 -0
- package/dist/src/services/living-pulse.d.ts +29 -0
- package/dist/src/services/living-pulse.d.ts.map +1 -0
- package/dist/src/services/living-pulse.js +363 -0
- package/dist/src/services/living-pulse.js.map +1 -0
- package/dist/src/services/message-delivery.d.ts +1 -1
- package/dist/src/services/message-delivery.d.ts.map +1 -1
- package/dist/src/services/message-delivery.js +10 -7
- package/dist/src/services/message-delivery.js.map +1 -1
- package/dist/src/services/message-send.d.ts +24 -0
- package/dist/src/services/message-send.d.ts.map +1 -0
- package/dist/src/services/message-send.js +122 -0
- package/dist/src/services/message-send.js.map +1 -0
- package/dist/src/services/notebook-ai.d.ts +36 -0
- package/dist/src/services/notebook-ai.d.ts.map +1 -0
- package/dist/src/services/notebook-ai.js +51 -0
- package/dist/src/services/notebook-ai.js.map +1 -0
- package/dist/src/services/notebook-classify.d.ts +32 -5
- package/dist/src/services/notebook-classify.d.ts.map +1 -1
- package/dist/src/services/notebook-classify.js +59 -43
- package/dist/src/services/notebook-classify.js.map +1 -1
- package/dist/src/services/notebook-distribute-prompt.d.ts +16 -0
- package/dist/src/services/notebook-distribute-prompt.d.ts.map +1 -0
- package/dist/src/services/notebook-distribute-prompt.js +40 -0
- package/dist/src/services/notebook-distribute-prompt.js.map +1 -0
- package/dist/src/services/notebook-plan-prompt.d.ts +19 -0
- package/dist/src/services/notebook-plan-prompt.d.ts.map +1 -0
- package/dist/src/services/notebook-plan-prompt.js +54 -0
- package/dist/src/services/notebook-plan-prompt.js.map +1 -0
- package/dist/src/services/notebook-plan.d.ts +70 -0
- package/dist/src/services/notebook-plan.d.ts.map +1 -0
- package/dist/src/services/notebook-plan.js +118 -0
- package/dist/src/services/notebook-plan.js.map +1 -0
- package/dist/src/services/onboarding-validator.d.ts.map +1 -1
- package/dist/src/services/onboarding-validator.js +13 -3
- package/dist/src/services/onboarding-validator.js.map +1 -1
- package/dist/src/services/organism-comments.d.ts +5 -1
- package/dist/src/services/organism-comments.d.ts.map +1 -1
- package/dist/src/services/organism-comments.js +7 -22
- package/dist/src/services/organism-comments.js.map +1 -1
- package/dist/src/services/organism-readme.d.ts +24 -0
- package/dist/src/services/organism-readme.d.ts.map +1 -0
- package/dist/src/services/organism-readme.js +37 -0
- package/dist/src/services/organism-readme.js.map +1 -0
- package/dist/src/services/prompt-defaults.d.ts.map +1 -1
- package/dist/src/services/prompt-defaults.js +30 -0
- package/dist/src/services/prompt-defaults.js.map +1 -1
- package/dist/src/services/readiness-scorer.d.ts.map +1 -1
- package/dist/src/services/readiness-scorer.js +11 -6
- package/dist/src/services/readiness-scorer.js.map +1 -1
- package/dist/src/services/scheduler.d.ts +5 -0
- package/dist/src/services/scheduler.d.ts.map +1 -1
- package/dist/src/services/scheduler.js +13 -3
- package/dist/src/services/scheduler.js.map +1 -1
- package/dist/src/services/screenshot-capture.d.ts +28 -0
- package/dist/src/services/screenshot-capture.d.ts.map +1 -0
- package/dist/src/services/screenshot-capture.js +154 -0
- package/dist/src/services/screenshot-capture.js.map +1 -0
- package/dist/src/services/structure-graph.d.ts +65 -0
- package/dist/src/services/structure-graph.d.ts.map +1 -0
- package/dist/src/services/structure-graph.js +53 -0
- package/dist/src/services/structure-graph.js.map +1 -0
- package/dist/src/services/structure-overview.d.ts +6 -0
- package/dist/src/services/structure-overview.d.ts.map +1 -1
- package/dist/src/services/structure-overview.js +1 -1
- package/dist/src/services/structure-overview.js.map +1 -1
- package/dist/src/services/structure-snapshot.d.ts +47 -0
- package/dist/src/services/structure-snapshot.d.ts.map +1 -0
- package/dist/src/services/structure-snapshot.js +101 -0
- package/dist/src/services/structure-snapshot.js.map +1 -0
- package/dist/src/services/telemetry-buffer.d.ts +73 -0
- package/dist/src/services/telemetry-buffer.d.ts.map +1 -0
- package/dist/src/services/telemetry-buffer.js +185 -0
- package/dist/src/services/telemetry-buffer.js.map +1 -0
- package/dist/src/services/track-registry.d.ts +29 -0
- package/dist/src/services/track-registry.d.ts.map +1 -0
- package/dist/src/services/track-registry.js +61 -0
- package/dist/src/services/track-registry.js.map +1 -0
- package/dist/src/services/tracked-classify.d.ts +98 -0
- package/dist/src/services/tracked-classify.d.ts.map +1 -0
- package/dist/src/services/tracked-classify.js +182 -0
- package/dist/src/services/tracked-classify.js.map +1 -0
- package/dist/src/services/tracked-response.d.ts +98 -0
- package/dist/src/services/tracked-response.d.ts.map +1 -0
- package/dist/src/services/tracked-response.js +304 -0
- package/dist/src/services/tracked-response.js.map +1 -0
- package/dist/src/services/workspace-access.d.ts +36 -0
- package/dist/src/services/workspace-access.d.ts.map +1 -0
- package/dist/src/services/workspace-access.js +38 -0
- package/dist/src/services/workspace-access.js.map +1 -0
- package/dist/src/storage/interface.d.ts +6 -1
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/interface.js.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +26 -1
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +144 -1
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +26 -1
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +73 -6
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-message.d.ts +4 -0
- package/dist/src/storage/providers/sqlite/repos/agent-message.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-message.js +14 -0
- package/dist/src/storage/providers/sqlite/repos/agent-message.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts +9 -0
- package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-task.js +25 -0
- package/dist/src/storage/providers/sqlite/repos/agent-task.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts +22 -1
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.js +61 -3
- package/dist/src/storage/providers/sqlite/repos/memory.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts +16 -3
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +33 -6
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/agent-message.repository.d.ts +10 -0
- package/dist/src/storage/repositories/agent-message.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/agent-task.repository.d.ts +15 -0
- package/dist/src/storage/repositories/agent-task.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/app.repository.d.ts +9 -0
- package/dist/src/storage/repositories/app.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/consent.repository.d.ts +2 -0
- package/dist/src/storage/repositories/consent.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/memory.repository.d.ts +31 -0
- package/dist/src/storage/repositories/memory.repository.d.ts.map +1 -1
- package/dist/src/utils/env-config.d.ts.map +1 -1
- package/dist/src/utils/env-config.js +18 -0
- package/dist/src/utils/env-config.js.map +1 -1
- package/dist/src/utils/messaging.d.ts +5 -0
- package/dist/src/utils/messaging.d.ts.map +1 -1
- package/dist/src/utils/messaging.js +0 -0
- package/dist/src/utils/messaging.js.map +1 -1
- package/dist/static/app-catalog.html +452 -34
- package/dist/static/app-login.js +67 -0
- package/dist/static/app-silent.html +14 -0
- package/dist/static/app-silent.js +32 -0
- package/package.json +5 -1
- package/prisma/schema.postgres.prisma +36 -18
- package/prisma/schema.prisma +20 -0
|
@@ -1591,83 +1591,45 @@
|
|
|
1591
1591
|
}
|
|
1592
1592
|
.pf .pf-fed-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--success, #22c55e); }
|
|
1593
1593
|
|
|
1594
|
-
/* ---
|
|
1595
|
-
.pf .pf-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
}
|
|
1599
|
-
.pf .pf-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
.pf .pf-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
.pf .pf-
|
|
1615
|
-
.
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
}
|
|
1630
|
-
.pf .pf-
|
|
1631
|
-
.pf .pf-
|
|
1632
|
-
.pf .pf-
|
|
1633
|
-
.pf .pf-knowledge-callout-title { font-size: .93rem; font-weight: 600; margin-bottom: 4px; }
|
|
1634
|
-
.pf .pf-knowledge-callout-desc { font-size: .81rem; color: var(--text-dim, #6B7280); line-height: 1.55; }
|
|
1635
|
-
.pf .pf-ai-pills { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; }
|
|
1636
|
-
.pf .pf-ai-pill {
|
|
1637
|
-
font-size: .68rem; font-weight: 500; padding: 2px 10px; border-radius: 20px;
|
|
1638
|
-
background: var(--card, #fff); color: var(--text-dim, #6B7280);
|
|
1639
|
-
border: 1px solid var(--border, #e5e5e0);
|
|
1640
|
-
}
|
|
1641
|
-
|
|
1642
|
-
/* --- Knowledge Button (active user) --- */
|
|
1643
|
-
.pf .pf-knowledge-btn {
|
|
1644
|
-
display: flex; align-items: center; gap: 12px;
|
|
1645
|
-
background: var(--pf-callout-gradient);
|
|
1646
|
-
border: 1px solid rgba(99,102,241,.15);
|
|
1647
|
-
border-radius: 12px; padding: 14px 20px;
|
|
1648
|
-
cursor: pointer; transition: all .2s;
|
|
1649
|
-
color: var(--text, #1a1a1a);
|
|
1650
|
-
}
|
|
1651
|
-
.pf .pf-knowledge-btn:hover { border-color: #6366F1; box-shadow: 0 4px 12px rgba(0,0,0,.06); transform: translateY(-1px); }
|
|
1652
|
-
.pf .pf-kb-icon { font-size: 22px; flex-shrink: 0; }
|
|
1653
|
-
.pf .pf-kb-text { flex: 1; min-width: 0; }
|
|
1654
|
-
.pf .pf-kb-title { font-size: .87rem; font-weight: 600; }
|
|
1655
|
-
.pf .pf-kb-desc { font-size: .75rem; color: var(--text-dim, #6B7280); }
|
|
1656
|
-
.pf .pf-kb-arrow { font-size: 1rem; color: #6366F1; }
|
|
1657
|
-
|
|
1658
|
-
/* --- Ghost App Tiles (new user) --- */
|
|
1659
|
-
.pf .pf-ghost-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
|
|
1660
|
-
.pf .pf-ghost-tile {
|
|
1661
|
-
aspect-ratio: 1; border-radius: 12px;
|
|
1662
|
-
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
|
|
1663
|
-
cursor: pointer; transition: all .15s;
|
|
1664
|
-
border: 1.5px dashed var(--border, #e5e5e0); background: var(--card, #FAFAF8);
|
|
1665
|
-
padding: 8px; opacity: .55;
|
|
1666
|
-
}
|
|
1667
|
-
.pf .pf-ghost-tile:hover { opacity: .85; border-color: var(--accent, #E8564A); }
|
|
1668
|
-
.pf .pf-ghost-icon { font-size: 26px; filter: grayscale(50%); }
|
|
1669
|
-
.pf .pf-ghost-name { font-size: .68rem; font-weight: 500; text-align: center; color: var(--text-dim, #9CA3AF); line-height: 1.3; }
|
|
1670
|
-
.pf .pf-ghost-cta { font-size: .56rem; font-weight: 600; color: var(--accent, #E8564A); text-transform: uppercase; letter-spacing: .3px; margin-top: 2px; }
|
|
1594
|
+
/* --- Header actions + presence pill (ProfileCard header) --- */
|
|
1595
|
+
.pf .pf-lp-actions {
|
|
1596
|
+
margin-left: auto; display: flex; align-items: center; gap: 10px;
|
|
1597
|
+
align-self: flex-start; flex-wrap: wrap;
|
|
1598
|
+
}
|
|
1599
|
+
.pf .pf-presence-pill-btn {
|
|
1600
|
+
display: inline-flex; align-items: center; gap: 4px;
|
|
1601
|
+
border: 1px solid var(--border, #e5e5e0); background: var(--bg-dim, #FAFAF8);
|
|
1602
|
+
color: var(--text, #1a1a1a); border-radius: 999px; padding: 4px 10px 4px 8px;
|
|
1603
|
+
cursor: pointer; font: inherit; font-size: .8rem;
|
|
1604
|
+
transition: border-color .15s, background .15s;
|
|
1605
|
+
}
|
|
1606
|
+
.pf .pf-presence-pill-btn:hover { border-color: var(--accent, #E8564A); background: var(--surface, var(--card)); }
|
|
1607
|
+
.pf .pf-presence-pill-caret { font-size: .7rem; color: var(--text-dim, #9CA3AF); margin-left: 2px; }
|
|
1608
|
+
|
|
1609
|
+
/* --- Suggested next steps (home dashboard) --- */
|
|
1610
|
+
.pf .pf-next {
|
|
1611
|
+
background: var(--card, #fff); border-radius: 16px; padding: 18px 20px;
|
|
1612
|
+
box-shadow: 0 1px 3px rgba(0,0,0,.04); border: 1px solid var(--border-soft, #f0f0ec);
|
|
1613
|
+
}
|
|
1614
|
+
.pf .pf-next-title {
|
|
1615
|
+
font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .5px;
|
|
1616
|
+
color: var(--text-dim, #9CA3AF); margin-bottom: 12px;
|
|
1617
|
+
}
|
|
1618
|
+
.pf .pf-next-grid { display: grid; grid-template-columns: 1fr; gap: 10px; }
|
|
1619
|
+
.pf .pf-next-card {
|
|
1620
|
+
display: flex; align-items: center; gap: 14px; width: 100%; text-align: left;
|
|
1621
|
+
padding: 14px 16px; border-radius: 12px; cursor: pointer; font: inherit;
|
|
1622
|
+
border: 1.5px solid var(--border, #e5e5e0); background: var(--card, #fff);
|
|
1623
|
+
color: var(--text, #1a1a1a); transition: all .18s;
|
|
1624
|
+
}
|
|
1625
|
+
.pf .pf-next-card:hover { border-color: var(--accent, #E8564A); box-shadow: 0 4px 12px rgba(0,0,0,.06); transform: translateY(-1px); }
|
|
1626
|
+
.pf .pf-next-card--primary { border-color: var(--accent, #E8564A); background: var(--accent-soft, #FFF0EE); }
|
|
1627
|
+
.pf .pf-next-card--primary:hover { background: var(--accent-subtle); }
|
|
1628
|
+
.pf .pf-next-ico { font-size: 22px; flex-shrink: 0; line-height: 1; }
|
|
1629
|
+
.pf .pf-next-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
1630
|
+
.pf .pf-next-card-title { font-size: .92rem; font-weight: 600; }
|
|
1631
|
+
.pf .pf-next-card-desc { font-size: .8rem; color: var(--text-dim, #6B7280); line-height: 1.45; }
|
|
1632
|
+
.pf .pf-next-arrow { font-size: 1.1rem; color: var(--accent, #E8564A); flex-shrink: 0; opacity: .7; }
|
|
1671
1633
|
|
|
1672
1634
|
/* --- Cortex Extensions (new user) --- */
|
|
1673
1635
|
.pf .pf-cortex-grid { display: grid; grid-template-columns: 1fr; gap: 10px; }
|
|
@@ -2035,11 +1997,7 @@
|
|
|
2035
1997
|
}
|
|
2036
1998
|
|
|
2037
1999
|
/* ─── Responsive: tablet ─── */
|
|
2038
|
-
@media (min-width: 480px) {
|
|
2039
|
-
.pf .pf-ghost-grid { grid-template-columns: repeat(4, 1fr); }
|
|
2040
|
-
}
|
|
2041
2000
|
@media (min-width: 640px) {
|
|
2042
|
-
.pf .pf-onboard-grid { grid-template-columns: 1fr 1fr; }
|
|
2043
2001
|
.pf .pf-cortex-grid { grid-template-columns: 1fr 1fr; }
|
|
2044
2002
|
}
|
|
2045
2003
|
@media (min-width: 900px) {
|
|
@@ -2585,6 +2543,42 @@
|
|
|
2585
2543
|
.pj-struct-body .md-body strong { font-weight: 600; }
|
|
2586
2544
|
.pj-struct-body .md-body em { color: var(--muted); font-style: normal; }
|
|
2587
2545
|
|
|
2546
|
+
/* ── README panel (free-form description, Osa A) ── */
|
|
2547
|
+
.pj-readme { margin: 0.4rem 0 0.9rem; padding: 0.85rem 1rem; background: var(--card); border: 1px solid var(--border); border-radius: 10px; }
|
|
2548
|
+
.pj-readme-empty { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; justify-content: space-between; }
|
|
2549
|
+
.pj-readme-bar { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.5rem; }
|
|
2550
|
+
.pj-readme-actions { display: inline-flex; gap: 0.4rem; flex-wrap: wrap; }
|
|
2551
|
+
.pj-readme-body .md-body { font-size: 0.9rem; color: var(--text); line-height: 1.55; }
|
|
2552
|
+
.pj-readme-body .md-body > :first-child { margin-top: 0; }
|
|
2553
|
+
.pj-readme-textarea { width: 100%; font-family: var(--font-mono, monospace); font-size: 0.82rem; line-height: 1.5; resize: vertical; }
|
|
2554
|
+
|
|
2555
|
+
/* ── Interactive mindmap (Osa C) — reuses .of-mapwrap--clickable cursor/hover from offers.css ── */
|
|
2556
|
+
.pj-mindmap { margin: 0.4rem 0 0.9rem; }
|
|
2557
|
+
.pj-mindmap-body { margin-top: 0.4rem; padding: 0.75rem 0.9rem; background: var(--card); border: 1px solid var(--border); border-radius: 10px; }
|
|
2558
|
+
.pj-mindmap-opts { display: flex; flex-wrap: wrap; align-items: center; gap: 0.9rem; margin-bottom: 0.6rem; }
|
|
2559
|
+
.pj-mm-opt { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.8rem; color: var(--text-dim); }
|
|
2560
|
+
.pj-mm-opt select { width: auto; }
|
|
2561
|
+
.pj-mm-check { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.8rem; color: var(--text-dim); cursor: pointer; }
|
|
2562
|
+
.pj-mindmap-canvas { overflow: auto; max-height: 36rem; }
|
|
2563
|
+
.pj-mindmap-canvas .node { cursor: pointer; }
|
|
2564
|
+
.pj-mindmap-canvas .node:hover { opacity: 0.82; }
|
|
2565
|
+
.pj-mindmap-hint { margin-top: 0.4rem; }
|
|
2566
|
+
|
|
2567
|
+
/* ── Structure timeline / development (Osa D) ── */
|
|
2568
|
+
.pj-timeline { margin: 0.4rem 0 0.9rem; }
|
|
2569
|
+
.pj-timeline-body { margin-top: 0.4rem; padding: 0.75rem 0.9rem; background: var(--card); border: 1px solid var(--border); border-radius: 10px; }
|
|
2570
|
+
.pj-timeline-grid { display: grid; grid-template-columns: minmax(14rem, 22rem) 1fr; gap: 1rem; align-items: start; }
|
|
2571
|
+
.pj-timeline-list { list-style: none; margin: 0; padding: 0; max-height: 30rem; overflow: auto; }
|
|
2572
|
+
.pj-timeline-item { margin: 0; }
|
|
2573
|
+
.pj-timeline-entry { display: flex; flex-direction: column; gap: 0.1rem; width: 100%; text-align: left; background: none; border: none; border-left: 2px solid var(--border); padding: 0.4rem 0.6rem; cursor: pointer; color: var(--text); }
|
|
2574
|
+
.pj-timeline-entry:hover { background: var(--bg-dim); }
|
|
2575
|
+
.pj-timeline-item.is-active .pj-timeline-entry { border-left-color: var(--accent); background: var(--bg-dim); }
|
|
2576
|
+
.pj-timeline-date { font-size: 0.75rem; color: var(--muted); }
|
|
2577
|
+
.pj-timeline-event { font-size: 0.84rem; }
|
|
2578
|
+
.pj-timeline-counts { font-size: 0.72rem; }
|
|
2579
|
+
.pj-timeline-map { overflow: auto; max-height: 30rem; }
|
|
2580
|
+
@media (max-width: 720px) { .pj-timeline-grid { grid-template-columns: 1fr; } }
|
|
2581
|
+
|
|
2588
2582
|
/* ── Workspace renew (phase 2): header actions, review banner, add-space tab ── */
|
|
2589
2583
|
.pj-ws-head-actions { margin-left: auto; display: flex; gap: 0.4rem; align-items: center; }
|
|
2590
2584
|
.pj-ws-banner { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; border: 1px solid var(--border); border-left: 3px solid var(--warn, var(--accent)); border-radius: 10px; background: var(--card); padding: 0.55rem 0.75rem; margin: 0.6rem 0 0.2rem; }
|
|
@@ -2668,7 +2662,6 @@
|
|
|
2668
2662
|
.pf-home-row-meta.pf-ok { color: var(--success-fg, var(--text)); }
|
|
2669
2663
|
.pf-lp-stat-link { background: none; border: none; padding: 0.15rem 0.35rem; border-radius: 8px; cursor: pointer; font: inherit; color: inherit; }
|
|
2670
2664
|
.pf-lp-stat-link:hover { background: var(--bg-surface); }
|
|
2671
|
-
.pf-lp-profile-btn { margin-left: auto; align-self: flex-start; }
|
|
2672
2665
|
.pf-promo-dismiss { float: right; background: none; border: none; cursor: pointer; color: var(--muted); font-size: 0.85rem; padding: 0 0.2rem; }
|
|
2673
2666
|
.pf-promo-dismiss:hover { color: var(--text); }
|
|
2674
2667
|
/* Edit profile / password dialogs */
|
|
@@ -2945,9 +2938,9 @@
|
|
|
2945
2938
|
.pf-eco-tech-principal { display: inline-block; background: var(--card); border: 1px solid var(--border); border-radius: 6px; padding: .3rem .5rem; word-break: break-all; }
|
|
2946
2939
|
.pf-eco-tech-access { margin: -.15rem 0 .4rem; }
|
|
2947
2940
|
|
|
2948
|
-
/* ── Presence
|
|
2949
|
-
|
|
2950
|
-
|
|
2941
|
+
/* ── Presence settings dialog — backed by PresenceDialog in landing-page.js, opened
|
|
2942
|
+
from the <PresencePill> in the ProfileCard header; previews the same <PresenceDot>
|
|
2943
|
+
shown next to people. ── */
|
|
2951
2944
|
.pf-presence-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; }
|
|
2952
2945
|
.pf-presence-head .section-desc { margin-bottom: .75rem; }
|
|
2953
2946
|
.pf-presence-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin: .5rem 0; }
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file public/js/app-sandbox.js
|
|
3
|
-
* @description Open a user-published app
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
3
|
+
* @description Open a user-published app from anywhere in the SPA. Apps always open TOP-LEVEL
|
|
4
|
+
* in a new tab via the apex `?mode=inline` URL — a clean, full-screen page (no overlay/X).
|
|
5
|
+
* The server decides isolation:
|
|
6
|
+
* - app origin OFF → the app is served inline on the apex (same host as the SPA), so the
|
|
7
|
+
* user's session carries into the app (it can refresh + read its own data — "logged in");
|
|
8
|
+
* - app origin ON → the apex 301s to `apps.<domain>`, an isolated origin with no ambient
|
|
9
|
+
* session (apps then use the explicit grant flow).
|
|
10
|
+
* So "logged into aimeat.io ⇒ apps are logged in" is the OFF (default) behaviour; ON is the
|
|
11
|
+
* opt-in hardened mode for multi-user/public nodes.
|
|
12
|
+
* @structure isAppHtmlUrl() route matcher · openAppSandboxed() top-level opener.
|
|
11
13
|
* @usage import { openAppSandboxed, isAppHtmlUrl } from '/js/app-sandbox.js'
|
|
12
14
|
* @version-history
|
|
13
15
|
* v1.0.0 — 2026-06-20 — Initial (H-2 app-origin isolation, Phase 0).
|
|
16
|
+
* v1.1.0 — 2026-06-20 — App origin live → open apps top-level; opaque-sandbox overlay fallback.
|
|
17
|
+
* v2.0.0 — 2026-06-20 — Always open apps TOP-LEVEL (the opaque sandbox gave apps origin `null`,
|
|
18
|
+
* breaking their storage/API and forcing a re-login). Isolation is now the server's job via
|
|
19
|
+
* the app origin; with it off, apps run on the apex and inherit the user's session.
|
|
14
20
|
*/
|
|
15
21
|
|
|
16
22
|
/** Matches the published-app HTML route: /v1/apps/<owner>/<file> (optionally ?mode=inline). */
|
|
@@ -27,57 +33,10 @@ export function isAppHtmlUrl(href) {
|
|
|
27
33
|
return /^\/v1\/apps\/[^/]+\/[^/]+$/.test(path);
|
|
28
34
|
}
|
|
29
35
|
|
|
30
|
-
let escHandler = null;
|
|
31
|
-
|
|
32
|
-
/** Remove the overlay (if present) and detach the Escape handler. */
|
|
33
|
-
function closeOverlay() {
|
|
34
|
-
const existing = document.getElementById('app-sandbox-overlay');
|
|
35
|
-
if (existing) existing.remove();
|
|
36
|
-
if (escHandler) {
|
|
37
|
-
document.removeEventListener('keydown', escHandler);
|
|
38
|
-
escHandler = null;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
36
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
37
|
+
* Open a published app in a new top-level tab. `url` is the apex `?mode=inline` URL; the server
|
|
38
|
+
* either serves it inline (session inherited) or 301s it to the isolated app origin.
|
|
45
39
|
*/
|
|
46
|
-
export function openAppSandboxed(url,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const overlay = document.createElement('div');
|
|
50
|
-
overlay.id = 'app-sandbox-overlay';
|
|
51
|
-
overlay.className = 'app-sandbox-overlay';
|
|
52
|
-
|
|
53
|
-
const toolbar = document.createElement('div');
|
|
54
|
-
toolbar.className = 'app-sandbox-toolbar';
|
|
55
|
-
|
|
56
|
-
const title = document.createElement('span');
|
|
57
|
-
title.className = 'app-sandbox-title';
|
|
58
|
-
title.textContent = name || 'App';
|
|
59
|
-
|
|
60
|
-
const close = document.createElement('button');
|
|
61
|
-
close.type = 'button';
|
|
62
|
-
close.className = 'app-sandbox-close';
|
|
63
|
-
close.setAttribute('aria-label', 'Close');
|
|
64
|
-
close.textContent = '✕';
|
|
65
|
-
close.addEventListener('click', closeOverlay);
|
|
66
|
-
|
|
67
|
-
toolbar.appendChild(title);
|
|
68
|
-
toolbar.appendChild(close);
|
|
69
|
-
|
|
70
|
-
const iframe = document.createElement('iframe');
|
|
71
|
-
iframe.className = 'app-sandbox-frame';
|
|
72
|
-
// No allow-same-origin → opaque origin. This is the entire H-2 protection.
|
|
73
|
-
iframe.setAttribute('sandbox', 'allow-scripts allow-forms allow-popups allow-modals');
|
|
74
|
-
iframe.setAttribute('referrerpolicy', 'no-referrer');
|
|
75
|
-
iframe.src = url;
|
|
76
|
-
|
|
77
|
-
overlay.appendChild(toolbar);
|
|
78
|
-
overlay.appendChild(iframe);
|
|
79
|
-
document.body.appendChild(overlay);
|
|
80
|
-
|
|
81
|
-
escHandler = (e) => { if (e.key === 'Escape') closeOverlay(); };
|
|
82
|
-
document.addEventListener('keydown', escHandler);
|
|
40
|
+
export function openAppSandboxed(url, _name) {
|
|
41
|
+
window.open(url, '_blank', 'noopener');
|
|
83
42
|
}
|
|
@@ -70,7 +70,13 @@ export function refreshAll() {
|
|
|
70
70
|
function bindLive() {
|
|
71
71
|
if (liveBound) return;
|
|
72
72
|
liveBound = true;
|
|
73
|
-
|
|
73
|
+
// Refresh presence only when the 'presence' domain actually changed (or on a legacy
|
|
74
|
+
// "everything changed" payload), not on every unrelated live update.
|
|
75
|
+
window.addEventListener('aimeat-live-update', (e) => {
|
|
76
|
+
const d = /** @type {CustomEvent} */ (e).detail?.domains;
|
|
77
|
+
if (d && !d.has('presence')) return;
|
|
78
|
+
refreshAll();
|
|
79
|
+
});
|
|
74
80
|
}
|
|
75
81
|
|
|
76
82
|
/**
|
|
@@ -4,9 +4,16 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { apiGet, apiPost, apiDelete, api } from '/js/api.js';
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/**
|
|
8
|
+
* List agents owned by the given owner. Returns array.
|
|
9
|
+
* @param {string} [owner] filter to this owner
|
|
10
|
+
* @param {{ include?: string }} [opts] `include:'stats'` attaches a per-agent `stats` projection
|
|
11
|
+
* (task/message counts + latest timestamps + active_tasks + onboarding) in ONE request,
|
|
12
|
+
* replacing the old N+1 per-agent fan-out.
|
|
13
|
+
*/
|
|
14
|
+
export async function listAgents(owner, opts = {}) {
|
|
15
|
+
const qs = opts.include ? `?include=${encodeURIComponent(opts.include)}` : '';
|
|
16
|
+
const data = await apiGet(`/v1/agents${qs}`);
|
|
10
17
|
const list = data?.data?.agents || data?.data || [];
|
|
11
18
|
return owner ? list.filter(a => a.owner === owner) : list;
|
|
12
19
|
}
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* import { AIMEAT_CONTEXT, INSTRUCTION_DISCLAIMER, COMPONENT_TEMPLATES } from '/js/services/generator-prompts-base.js';
|
|
14
14
|
* @version-history
|
|
15
15
|
* v1.0.0 — 2026-03-22 — Extracted from generator-prompts.js
|
|
16
|
+
* v1.1.0 — 2026-06-20 — App-build prompt: teach H-2 app-origin isolation (no ambient session;
|
|
17
|
+
* public data via /v1/..., private data via the app-grant PKCE flow + scoped Bearer token).
|
|
16
18
|
*/
|
|
17
19
|
|
|
18
20
|
export const AIMEAT_CONTEXT = `
|
|
@@ -600,9 +602,44 @@ Create an AIMEAT App (HTML/JS) for: ${label}
|
|
|
600
602
|
|
|
601
603
|
${context}
|
|
602
604
|
|
|
603
|
-
## CRITICAL:
|
|
604
|
-
|
|
605
|
-
|
|
605
|
+
## CRITICAL: App origin isolation & data access (read this first)
|
|
606
|
+
|
|
607
|
+
Your published app runs on an ISOLATED app origin (\`*.apps.<domain>\`, e.g. \`apps.aimeat.io\`) — a DIFFERENT browser origin from the AIMEAT node (\`aimeat.io\`). Consequences you MUST respect:
|
|
608
|
+
- The app has NO access to the user's AIMEAT login session, cookie, or localStorage. There is no ambient/owner session.
|
|
609
|
+
- NEVER call \`/v1/auth/refresh\` and NEVER fetch with \`credentials:'include'\` expecting the user's session — that pattern was removed for security (H-2) and now returns 401/403.
|
|
610
|
+
- Same-origin \`fetch('/v1/...')\` to the app origin still works (CORS \`*\`) for PUBLIC data that needs no auth — public memory (\`getPublic\`), the catalogue, public boards.
|
|
611
|
+
- For the user's OWN/PRIVATE data, you MUST use the explicit, revocable **app-grant** flow (OAuth-style, PKCE) below. The token you obtain is scoped and stored in YOUR OWN origin's localStorage; you call APIs with \`Authorization: Bearer <that token>\` — never the user's session.
|
|
612
|
+
- Apps that use the user's OpenRouter key via cortex (\`AIMEAT.ai.complete()\`) are UNAFFECTED — that path is separate; use it as documented.
|
|
613
|
+
|
|
614
|
+
### App-grant flow for private data (only when you need the user's own data)
|
|
615
|
+
1. Send the user to the trusted apex to approve (PKCE \`code_challenge\` = base64url(SHA-256(verifier)), method S256):
|
|
616
|
+
\\\`\\\`\\\`javascript
|
|
617
|
+
// scope = space-separated agent scopes: memory:read memory:write memory:delete
|
|
618
|
+
// catalogue:read social:read social:write wallet:read knowledge:read
|
|
619
|
+
const verifier = base64url(crypto.getRandomValues(new Uint8Array(32)));
|
|
620
|
+
sessionStorage.setItem('pkce', verifier);
|
|
621
|
+
const challenge = base64url(new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(verifier))));
|
|
622
|
+
const url = 'https://aimeat.io/v1/app-grants/authorize'
|
|
623
|
+
+ '?app=' + encodeURIComponent('<owner>/<file>') // your published app id
|
|
624
|
+
+ '&response_type=code&scope=' + encodeURIComponent('memory:read')
|
|
625
|
+
+ '&redirect_uri=' + encodeURIComponent(location.origin + location.pathname) // your URL on the app origin
|
|
626
|
+
+ '&state=' + state + '&code_challenge=' + challenge + '&code_challenge_method=S256';
|
|
627
|
+
location.href = url;
|
|
628
|
+
\\\`\\\`\\\`
|
|
629
|
+
2. On return, exchange the \`code\` for a scoped token (store it in YOUR localStorage):
|
|
630
|
+
\\\`\\\`\\\`javascript
|
|
631
|
+
const r = await fetch('https://aimeat.io/v1/app-grants/token', {
|
|
632
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
633
|
+
body: JSON.stringify({ grant_type: 'authorization_code', code, code_verifier: verifier, redirect_uri: location.origin + location.pathname })
|
|
634
|
+
}).then(x => x.json());
|
|
635
|
+
localStorage.setItem('aimeat_token', r.data.access_token); // scoped, revocable
|
|
636
|
+
localStorage.setItem('aimeat_refresh', r.data.refresh_token); // re-exchange with grant_type:'refresh_token'
|
|
637
|
+
\\\`\\\`\\\`
|
|
638
|
+
3. Call AIMEAT APIs with that Bearer token (NOT the user's session):
|
|
639
|
+
\\\`\\\`\\\`javascript
|
|
640
|
+
await fetch('https://aimeat.io/v1/memory/my.key', { headers: { Authorization: 'Bearer ' + localStorage.getItem('aimeat_token') } });
|
|
641
|
+
\\\`\\\`\\\`
|
|
642
|
+
The user manages/revokes these tokens in Profile → Access → "Connected Apps". Request the FEWEST scopes you need.
|
|
606
643
|
|
|
607
644
|
### Library setup (copy this exactly — load BOTH libraries):
|
|
608
645
|
\`\`\`javascript
|