aimeat 1.33.2 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/locales/en.json +437 -15
- package/dist/locales/fi.json +437 -15
- package/dist/public/cortex-bundled/aimeat-charts.js +3 -3
- package/dist/public/cortex-bundled/aimeat-charts.yaml +3 -3
- package/dist/public/cortex-bundled/aimeat-i18n.js +123 -0
- package/dist/public/cortex-bundled/aimeat-i18n.yaml +64 -0
- package/dist/public/css/views/landing.css +2 -0
- package/dist/public/css/views/secretary.css +464 -2
- package/dist/public/js/i18n.js +9 -0
- package/dist/public/js/services/apps.js +4 -2
- package/dist/public/js/services/memory.js +9 -3
- package/dist/public/js/services/offers.js +1 -1
- package/dist/public/js/services/organisms.js +49 -17
- package/dist/public/js/services/secretary-helpers.js +266 -17
- package/dist/public/js/services/secretary-policy.js +28 -2
- package/dist/public/js/services/secretary-rules.js +70 -0
- package/dist/public/js/theme.js +20 -0
- package/dist/public/lib/VENDORED-STYLING.md +31 -0
- package/dist/public/lib/aimeat-daisyui-bridge.css +48 -0
- package/dist/public/lib/chartjs@4.js +14 -0
- package/dist/public/lib/daisyui@5.css +7 -0
- package/dist/public/lib/tailwindcss@4.js +8 -0
- package/dist/public/llms-template.txt +9 -6
- package/dist/public/showroom.html +104 -0
- package/dist/public/showroom.js +247 -0
- package/dist/public/spa.html +18 -16
- package/dist/public/views/aimeat-os.js +3 -2
- package/dist/public/views/landing.js +50 -6
- package/dist/public/views/profile/agents/agent-card.js +13 -4
- package/dist/public/views/profile/agents/state-detector.js +6 -0
- package/dist/public/views/profile/agents/tab-integration.js +11 -2
- package/dist/public/views/profile/apps-tab.js +46 -0
- package/dist/public/views/profile/extensions-tab.js +4 -0
- package/dist/public/views/profile/inbox-tab.js +1 -1
- package/dist/public/views/profile/landing-page.js +8 -3
- package/dist/public/views/profile/memory-tab.js +37 -6
- package/dist/public/views/profile/organisms/home.js +32 -0
- package/dist/public/views/profile/organisms/workspace-list.js +36 -5
- package/dist/public/views/profile/organisms/workspace.js +29 -4
- package/dist/public/views/profile/organisms-tab.js +61 -8
- package/dist/public/views/secretary/calendar.js +327 -0
- package/dist/public/views/secretary/cards-reach.js +16 -17
- package/dist/public/views/secretary/cards.js +217 -79
- package/dist/public/views/secretary/dashboard.js +617 -0
- package/dist/public/views/secretary/quality.js +156 -0
- package/dist/public/views/secretary/use-autonomy.js +17 -2
- package/dist/public/views/secretary/use-freshness.js +50 -0
- package/dist/public/views/secretary/use-intake.js +23 -4
- package/dist/public/views/secretary/use-layout.js +122 -0
- package/dist/public/views/secretary/use-quick-actions.js +98 -0
- package/dist/public/views/secretary/use-specialists.js +103 -0
- package/dist/public/views/secretary/use-triggers.js +159 -0
- package/dist/public/views/secretary/use-whats-next.js +340 -0
- package/dist/public/views/secretary/workflow-design.js +112 -0
- package/dist/public/views/secretary.js +836 -44
- package/dist/scripts/check-no-max-tokens.d.ts +2 -0
- package/dist/scripts/check-no-max-tokens.d.ts.map +1 -0
- package/dist/scripts/check-no-max-tokens.js +71 -0
- package/dist/scripts/check-no-max-tokens.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 +9 -1
- package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
- package/dist/src/cli/connect/onboarding-prompt.d.ts +3 -0
- package/dist/src/cli/connect/onboarding-prompt.d.ts.map +1 -1
- package/dist/src/cli/connect/onboarding-prompt.js +10 -3
- package/dist/src/cli/connect/onboarding-prompt.js.map +1 -1
- package/dist/src/data/aimeat-iam-package.d.ts +25 -0
- package/dist/src/data/aimeat-iam-package.d.ts.map +1 -0
- package/dist/src/data/aimeat-iam-package.js +312 -0
- package/dist/src/data/aimeat-iam-package.js.map +1 -0
- package/dist/src/data/aimeat-marketplace-package.d.ts +25 -0
- package/dist/src/data/aimeat-marketplace-package.d.ts.map +1 -0
- package/dist/src/data/aimeat-marketplace-package.js +231 -0
- package/dist/src/data/aimeat-marketplace-package.js.map +1 -0
- package/dist/src/data/app-templates.d.ts +48 -0
- package/dist/src/data/app-templates.d.ts.map +1 -0
- package/dist/src/data/app-templates.js +856 -0
- package/dist/src/data/app-templates.js.map +1 -0
- package/dist/src/data/example-packages.d.ts.map +1 -1
- package/dist/src/data/example-packages.js +3 -1
- package/dist/src/data/example-packages.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +689 -7
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/generated/prisma-postgres/edge.js +10 -3
- package/dist/src/generated/prisma-postgres/index-browser.js +7 -0
- package/dist/src/generated/prisma-postgres/index.d.ts +205 -2
- package/dist/src/generated/prisma-postgres/index.js +10 -3
- package/dist/src/generated/prisma-postgres/package.json +1 -1
- package/dist/src/generated/prisma-postgres/schema.prisma +23 -13
- package/dist/src/generated/prisma-postgres/wasm.js +10 -3
- package/dist/src/mcp/agent-onboarding.d.ts +4 -0
- package/dist/src/mcp/agent-onboarding.d.ts.map +1 -1
- package/dist/src/mcp/agent-onboarding.js +28 -2
- package/dist/src/mcp/agent-onboarding.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/catalog/definitions.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions.js +16 -1
- package/dist/src/mcp/catalog/definitions.js.map +1 -1
- package/dist/src/mcp/catalog/surfaces.js +3 -3
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/index.d.ts +3 -0
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +11 -0
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/organisms.d.ts.map +1 -1
- package/dist/src/mcp/organisms.js +48 -8
- 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 +6 -4
- package/dist/src/mcp/workspaces.js.map +1 -1
- package/dist/src/models/agent-onboarding-schemas.d.ts +47 -0
- package/dist/src/models/agent-onboarding-schemas.d.ts.map +1 -1
- package/dist/src/models/agent-onboarding-schemas.js +117 -0
- package/dist/src/models/agent-onboarding-schemas.js.map +1 -1
- package/dist/src/models/offer-schemas.d.ts +8 -8
- package/dist/src/routes/agent-onboarding.d.ts +5 -0
- package/dist/src/routes/agent-onboarding.d.ts.map +1 -1
- package/dist/src/routes/agent-onboarding.js +21 -2
- package/dist/src/routes/agent-onboarding.js.map +1 -1
- package/dist/src/routes/ai.d.ts +8 -4
- package/dist/src/routes/ai.d.ts.map +1 -1
- package/dist/src/routes/ai.js +38 -14
- package/dist/src/routes/ai.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts +2 -0
- package/dist/src/routes/app-grants.d.ts.map +1 -1
- package/dist/src/routes/app-grants.js +7 -1
- package/dist/src/routes/app-grants.js.map +1 -1
- package/dist/src/routes/app-templates.d.ts +16 -0
- package/dist/src/routes/app-templates.d.ts.map +1 -0
- package/dist/src/routes/app-templates.js +40 -0
- package/dist/src/routes/app-templates.js.map +1 -0
- package/dist/src/routes/apps.d.ts.map +1 -1
- package/dist/src/routes/apps.js +55 -5
- package/dist/src/routes/apps.js.map +1 -1
- package/dist/src/routes/auth.d.ts +3 -0
- package/dist/src/routes/auth.d.ts.map +1 -1
- package/dist/src/routes/auth.js +9 -4
- package/dist/src/routes/auth.js.map +1 -1
- package/dist/src/routes/bootstrap.d.ts.map +1 -1
- package/dist/src/routes/bootstrap.js +1 -0
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/generator.d.ts.map +1 -1
- package/dist/src/routes/generator.js +3 -2
- package/dist/src/routes/generator.js.map +1 -1
- package/dist/src/routes/lib-ai.d.ts +0 -1
- package/dist/src/routes/lib-ai.d.ts.map +1 -1
- package/dist/src/routes/lib-ai.js +13 -6
- package/dist/src/routes/lib-ai.js.map +1 -1
- package/dist/src/routes/lib-header.d.ts +2 -0
- package/dist/src/routes/lib-header.d.ts.map +1 -1
- package/dist/src/routes/lib-header.js +7 -16
- package/dist/src/routes/lib-header.js.map +1 -1
- package/dist/src/routes/lib-markdown.d.ts +18 -0
- package/dist/src/routes/lib-markdown.d.ts.map +1 -0
- package/dist/src/routes/lib-markdown.js +236 -0
- package/dist/src/routes/lib-markdown.js.map +1 -0
- package/dist/src/routes/libs.d.ts +22 -0
- package/dist/src/routes/libs.d.ts.map +1 -1
- package/dist/src/routes/libs.js +133 -10
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/memory.d.ts.map +1 -1
- package/dist/src/routes/memory.js +21 -2
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/openrouter.d.ts +4 -0
- package/dist/src/routes/openrouter.d.ts.map +1 -1
- package/dist/src/routes/openrouter.js +17 -0
- package/dist/src/routes/openrouter.js.map +1 -1
- package/dist/src/routes/organisms.d.ts.map +1 -1
- package/dist/src/routes/organisms.js +107 -7
- package/dist/src/routes/organisms.js.map +1 -1
- package/dist/src/routes/portal.d.ts +9 -0
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +1 -1
- 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 +9 -2
- package/dist/src/routes/public-stats.js.map +1 -1
- package/dist/src/routes/secretary.d.ts +34 -0
- package/dist/src/routes/secretary.d.ts.map +1 -0
- package/dist/src/routes/secretary.js +311 -0
- package/dist/src/routes/secretary.js.map +1 -0
- package/dist/src/routes/specialists.d.ts.map +1 -1
- package/dist/src/routes/specialists.js +21 -0
- package/dist/src/routes/specialists.js.map +1 -1
- package/dist/src/routes/subdomains.js +1 -1
- package/dist/src/routes/subdomains.js.map +1 -1
- package/dist/src/routes/workflows.d.ts +9 -3
- package/dist/src/routes/workflows.d.ts.map +1 -1
- package/dist/src/routes/workflows.js +9 -3
- package/dist/src/routes/workflows.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +4 -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 +7 -0
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts +4 -0
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +18 -0
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/services/archive.d.ts +74 -0
- package/dist/src/services/archive.d.ts.map +1 -0
- package/dist/src/services/archive.js +132 -0
- package/dist/src/services/archive.js.map +1 -0
- package/dist/src/services/cortex-seeder.d.ts +4 -1
- package/dist/src/services/cortex-seeder.d.ts.map +1 -1
- package/dist/src/services/cortex-seeder.js +25 -6
- package/dist/src/services/cortex-seeder.js.map +1 -1
- package/dist/src/services/directory.d.ts.map +1 -1
- package/dist/src/services/directory.js +3 -2
- package/dist/src/services/directory.js.map +1 -1
- package/dist/src/services/generator-prompt-seeds.d.ts.map +1 -1
- package/dist/src/services/generator-prompt-seeds.js +5 -4
- package/dist/src/services/generator-prompt-seeds.js.map +1 -1
- package/dist/src/services/message-send.d.ts.map +1 -1
- package/dist/src/services/message-send.js +14 -0
- package/dist/src/services/message-send.js.map +1 -1
- package/dist/src/services/onboarding-guide.d.ts +53 -0
- package/dist/src/services/onboarding-guide.d.ts.map +1 -0
- package/dist/src/services/onboarding-guide.js +81 -0
- package/dist/src/services/onboarding-guide.js.map +1 -0
- package/dist/src/services/organism-search.d.ts +6 -2
- package/dist/src/services/organism-search.d.ts.map +1 -1
- package/dist/src/services/organism-search.js +2 -2
- package/dist/src/services/organism-search.js.map +1 -1
- package/dist/src/services/owner-memory.d.ts +1 -0
- package/dist/src/services/owner-memory.d.ts.map +1 -1
- package/dist/src/services/owner-memory.js.map +1 -1
- package/dist/src/services/owner-session.d.ts +1 -0
- package/dist/src/services/owner-session.d.ts.map +1 -1
- package/dist/src/services/owner-session.js +10 -2
- package/dist/src/services/owner-session.js.map +1 -1
- package/dist/src/services/package-seeder.d.ts +22 -0
- package/dist/src/services/package-seeder.d.ts.map +1 -0
- package/dist/src/services/package-seeder.js +30 -0
- package/dist/src/services/package-seeder.js.map +1 -0
- package/dist/src/services/presence.d.ts +3 -0
- package/dist/src/services/presence.d.ts.map +1 -1
- package/dist/src/services/presence.js +10 -0
- package/dist/src/services/presence.js.map +1 -1
- package/dist/src/services/prompt-defaults.d.ts.map +1 -1
- package/dist/src/services/prompt-defaults.js +8 -3
- package/dist/src/services/prompt-defaults.js.map +1 -1
- package/dist/src/services/scheduler.d.ts +50 -2
- package/dist/src/services/scheduler.d.ts.map +1 -1
- package/dist/src/services/scheduler.js +454 -26
- package/dist/src/services/scheduler.js.map +1 -1
- package/dist/src/services/secretary-authoring.d.ts +71 -0
- package/dist/src/services/secretary-authoring.d.ts.map +1 -0
- package/dist/src/services/secretary-authoring.js +336 -0
- package/dist/src/services/secretary-authoring.js.map +1 -0
- package/dist/src/services/secretary-clarify.d.ts +57 -0
- package/dist/src/services/secretary-clarify.d.ts.map +1 -0
- package/dist/src/services/secretary-clarify.js +104 -0
- package/dist/src/services/secretary-clarify.js.map +1 -0
- package/dist/src/services/secretary-feed.d.ts +11 -0
- package/dist/src/services/secretary-feed.d.ts.map +1 -0
- package/dist/src/services/secretary-feed.js +28 -0
- package/dist/src/services/secretary-feed.js.map +1 -0
- package/dist/src/services/secretary-tick.d.ts +243 -3
- package/dist/src/services/secretary-tick.d.ts.map +1 -1
- package/dist/src/services/secretary-tick.js +273 -3
- package/dist/src/services/secretary-tick.js.map +1 -1
- package/dist/src/services/secretary-workbrief.d.ts +144 -0
- package/dist/src/services/secretary-workbrief.d.ts.map +1 -0
- package/dist/src/services/secretary-workbrief.js +315 -0
- package/dist/src/services/secretary-workbrief.js.map +1 -0
- package/dist/src/services/secretary-worktier.d.ts +118 -0
- package/dist/src/services/secretary-worktier.d.ts.map +1 -0
- package/dist/src/services/secretary-worktier.js +157 -0
- package/dist/src/services/secretary-worktier.js.map +1 -0
- package/dist/src/services/skill-bundle/generator.d.ts +3 -0
- package/dist/src/services/skill-bundle/generator.d.ts.map +1 -1
- package/dist/src/services/skill-bundle/generator.js +19 -0
- package/dist/src/services/skill-bundle/generator.js.map +1 -1
- package/dist/src/services/specialist-runner.d.ts +36 -0
- package/dist/src/services/specialist-runner.d.ts.map +1 -0
- package/dist/src/services/specialist-runner.js +91 -0
- package/dist/src/services/specialist-runner.js.map +1 -0
- package/dist/src/services/specialist.d.ts +9 -0
- package/dist/src/services/specialist.d.ts.map +1 -1
- package/dist/src/services/specialist.js +42 -0
- package/dist/src/services/specialist.js.map +1 -1
- package/dist/src/services/structure-overview.d.ts +13 -0
- package/dist/src/services/structure-overview.d.ts.map +1 -1
- package/dist/src/services/structure-overview.js +34 -11
- package/dist/src/services/structure-overview.js.map +1 -1
- package/dist/src/services/system-agent-responder.d.ts +36 -0
- package/dist/src/services/system-agent-responder.d.ts.map +1 -0
- package/dist/src/services/system-agent-responder.js +107 -0
- package/dist/src/services/system-agent-responder.js.map +1 -0
- package/dist/src/services/system-agent.d.ts +34 -1
- package/dist/src/services/system-agent.d.ts.map +1 -1
- package/dist/src/services/system-agent.js +73 -0
- package/dist/src/services/system-agent.js.map +1 -1
- package/dist/src/storage/interface.d.ts +33 -0
- 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 +37 -0
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +132 -12
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +23 -1
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +60 -8
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts +29 -1
- package/dist/src/storage/providers/sqlite/repos/memory.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/memory.js +109 -10
- package/dist/src/storage/providers/sqlite/repos/memory.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts +3 -0
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +64 -9
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/app.repository.d.ts +15 -0
- package/dist/src/storage/repositories/app.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/memory.repository.d.ts +41 -1
- package/dist/src/storage/repositories/memory.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/organism.repository.d.ts +2 -1
- package/dist/src/storage/repositories/organism.repository.d.ts.map +1 -1
- package/dist/static/app-catalog.html +469 -122
- package/package.json +2 -1
- package/prisma/schema.postgres.prisma +10 -0
- package/prisma/schema.prisma +12 -0
|
@@ -90,6 +90,34 @@ export class PrismaStorage {
|
|
|
90
90
|
}
|
|
91
91
|
this.prisma = new PrismaClient({ datasourceUrl: databaseUrl });
|
|
92
92
|
await this.prisma.$connect();
|
|
93
|
+
await this.backfillArchiveFlag();
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Backfill `archived: false` onto documents written BEFORE the archive feature added the field.
|
|
97
|
+
* In MongoDB such docs simply lack the field, and the default-exclude read filter does NOT match a
|
|
98
|
+
* missing field — so without this, ALL pre-archive content (workspaces, manifests, registries,
|
|
99
|
+
* records) silently vanishes from every default read. SQLite gets this for free via
|
|
100
|
+
* `safeAddColumn(... DEFAULT 0)`; MongoDB needs an explicit one-time, idempotent backfill (only
|
|
101
|
+
* touches docs missing the field; a no-op once every doc has it). Collections are the Prisma model
|
|
102
|
+
* names (no @@map). Best-effort: logged, never fatal.
|
|
103
|
+
*/
|
|
104
|
+
async backfillArchiveFlag() {
|
|
105
|
+
if (!this.prisma)
|
|
106
|
+
return;
|
|
107
|
+
for (const collection of ['Memory', 'Organism']) {
|
|
108
|
+
try {
|
|
109
|
+
const res = await this.prisma.$runCommandRaw({
|
|
110
|
+
update: collection,
|
|
111
|
+
updates: [{ q: { archived: { $exists: false } }, u: { $set: { archived: false } }, multi: true }],
|
|
112
|
+
});
|
|
113
|
+
const n = res?.nModified ?? res?.n ?? 0;
|
|
114
|
+
if (n > 0)
|
|
115
|
+
logger.info(`Archive backfill: set archived=false on ${n} legacy ${collection} document(s)`);
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
logger.warn(`Archive backfill skipped for ${collection}: ${err?.message ?? err}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
93
121
|
}
|
|
94
122
|
/**
|
|
95
123
|
* Run `prisma db push --skip-generate` to create any missing
|
|
@@ -629,7 +657,7 @@ export class PrismaStorage {
|
|
|
629
657
|
}
|
|
630
658
|
async listMemory(ownerGaii, opts) {
|
|
631
659
|
this.ensureReady();
|
|
632
|
-
const where = { ownerGaii };
|
|
660
|
+
const where = { ownerGaii, ...this.archivedWhere(opts?.archived) };
|
|
633
661
|
if (opts?.prefix)
|
|
634
662
|
where.key = { startsWith: opts.prefix };
|
|
635
663
|
if (opts?.visibility)
|
|
@@ -654,7 +682,7 @@ export class PrismaStorage {
|
|
|
654
682
|
this.ensureReady();
|
|
655
683
|
if (ownerGaiis.length === 0)
|
|
656
684
|
return 0;
|
|
657
|
-
const where = { ownerGaii: { in: ownerGaiis } };
|
|
685
|
+
const where = { ownerGaii: { in: ownerGaiis }, ...this.archivedWhere(opts?.archived) };
|
|
658
686
|
if (opts?.prefix)
|
|
659
687
|
where.key = { startsWith: opts.prefix };
|
|
660
688
|
if (opts?.visibility)
|
|
@@ -666,7 +694,7 @@ export class PrismaStorage {
|
|
|
666
694
|
}
|
|
667
695
|
async listAllMemory(opts) {
|
|
668
696
|
this.ensureReady();
|
|
669
|
-
const where = {};
|
|
697
|
+
const where = { ...this.archivedWhere(opts?.archived) };
|
|
670
698
|
if (opts?.ownerPrefix)
|
|
671
699
|
where.ownerGaii = { startsWith: opts.ownerPrefix };
|
|
672
700
|
if (opts?.prefix)
|
|
@@ -717,7 +745,7 @@ export class PrismaStorage {
|
|
|
717
745
|
async searchMemory(ownerGaii, query, opts) {
|
|
718
746
|
this.ensureReady();
|
|
719
747
|
// MongoDB text search — search keys and string values
|
|
720
|
-
const where = { ownerGaii };
|
|
748
|
+
const where = { ownerGaii, ...this.archivedWhere(opts?.archived) };
|
|
721
749
|
if (opts?.visibility)
|
|
722
750
|
where.visibility = opts.visibility;
|
|
723
751
|
if (opts?.prefix)
|
|
@@ -775,7 +803,7 @@ export class PrismaStorage {
|
|
|
775
803
|
const tokens = query.toLowerCase().match(/[\p{L}\p{N}]+/gu);
|
|
776
804
|
if (!tokens || tokens.length === 0)
|
|
777
805
|
return [];
|
|
778
|
-
const where = { OR: tokens.map(tok => ({ searchBlob: { contains: tok, mode: 'insensitive' } })) };
|
|
806
|
+
const where = { OR: tokens.map(tok => ({ searchBlob: { contains: tok, mode: 'insensitive' } })), ...this.archivedWhere(opts?.archived) };
|
|
779
807
|
if (opts?.ownerGaiis?.length)
|
|
780
808
|
where.ownerGaii = { in: opts.ownerGaiis };
|
|
781
809
|
if (opts?.visibility)
|
|
@@ -798,6 +826,54 @@ export class PrismaStorage {
|
|
|
798
826
|
.slice(0, limit)
|
|
799
827
|
.map(({ record, score }) => ({ record, score }));
|
|
800
828
|
}
|
|
829
|
+
async archiveMemoryByKey(keyOrPrefix, opts) {
|
|
830
|
+
this.ensureReady();
|
|
831
|
+
const match = opts.match ?? 'prefix';
|
|
832
|
+
const where = { archived: { not: true } };
|
|
833
|
+
if (match === 'exact')
|
|
834
|
+
where.key = keyOrPrefix;
|
|
835
|
+
else if (match === 'subtree')
|
|
836
|
+
where.OR = [{ key: keyOrPrefix }, { key: { startsWith: keyOrPrefix + '.' } }];
|
|
837
|
+
else
|
|
838
|
+
where.key = { startsWith: keyOrPrefix };
|
|
839
|
+
const res = await this.prisma.memory.updateMany({
|
|
840
|
+
where,
|
|
841
|
+
data: { archived: true, archivedAt: new Date(opts.archivedAt), archivedBy: opts.archivedBy, archivedRoot: opts.archivedRoot },
|
|
842
|
+
});
|
|
843
|
+
return res.count;
|
|
844
|
+
}
|
|
845
|
+
async unarchiveMemoryByRoot(archivedRoot) {
|
|
846
|
+
this.ensureReady();
|
|
847
|
+
const res = await this.prisma.memory.updateMany({
|
|
848
|
+
where: { archived: true, archivedRoot },
|
|
849
|
+
data: { archived: false, archivedAt: null, archivedBy: null, archivedRoot: null },
|
|
850
|
+
});
|
|
851
|
+
return res.count;
|
|
852
|
+
}
|
|
853
|
+
async unarchiveMemoryByKey(keyOrPrefix, opts) {
|
|
854
|
+
this.ensureReady();
|
|
855
|
+
const match = opts?.match ?? 'subtree';
|
|
856
|
+
const where = { archived: true };
|
|
857
|
+
if (match === 'exact')
|
|
858
|
+
where.key = keyOrPrefix;
|
|
859
|
+
else if (match === 'subtree')
|
|
860
|
+
where.OR = [{ key: keyOrPrefix }, { key: { startsWith: keyOrPrefix + '.' } }];
|
|
861
|
+
else
|
|
862
|
+
where.key = { startsWith: keyOrPrefix };
|
|
863
|
+
const res = await this.prisma.memory.updateMany({
|
|
864
|
+
where,
|
|
865
|
+
data: { archived: false, archivedAt: null, archivedBy: null, archivedRoot: null },
|
|
866
|
+
});
|
|
867
|
+
return res.count;
|
|
868
|
+
}
|
|
869
|
+
async countArchivedByKeyPrefix(keyPrefix) {
|
|
870
|
+
this.ensureReady();
|
|
871
|
+
const [active, archived] = await Promise.all([
|
|
872
|
+
this.prisma.memory.count({ where: { key: { startsWith: keyPrefix }, archived: { not: true } } }),
|
|
873
|
+
this.prisma.memory.count({ where: { key: { startsWith: keyPrefix }, archived: true } }),
|
|
874
|
+
]);
|
|
875
|
+
return { active, archived };
|
|
876
|
+
}
|
|
801
877
|
// ── Actions ─────────────────────────────────────────────────
|
|
802
878
|
async createAction(action) {
|
|
803
879
|
this.ensureReady();
|
|
@@ -1608,7 +1684,17 @@ export class PrismaStorage {
|
|
|
1608
1684
|
return { name: row.name, owner: row.owner, gaii: row.gaii, displayName: row.displayName ?? undefined, description: row.description ?? undefined, capabilities: row.capabilities, publicKey: row.publicKey, trustScore: row.trustScore, morselBalance: row.morselBalance, defaultScopes: row.defaultScopes?.length ? row.defaultScopes : undefined, allowedOrigins: row.allowedOrigins?.length ? row.allowedOrigins : undefined, federate: row.federate ?? false, technicalCapabilities: row.technicalCapabilities ?? undefined, domainCapabilities: row.domainCapabilities ?? undefined, languages: row.languages ?? undefined, activityStats: row.activityStats ?? undefined, modulesLoaded: row.modulesLoaded ?? undefined, agentLimitations: row.agentLimitations ?? undefined, webhookUrl: row.webhookUrl ?? undefined, webhookSecret: row.webhookSecret ?? undefined, webhookEnabled: row.webhookEnabled ?? false, webhookLastSuccess: row.webhookLastSuccess ? row.webhookLastSuccess.toISOString() : undefined, webhookLastFailure: row.webhookLastFailure ? row.webhookLastFailure.toISOString() : undefined, webhookFailCount: row.webhookFailCount ?? 0, platform: row.platform ?? undefined, platformVersion: row.platformVersion ?? undefined, platformDetectedBy: row.platformDetectedBy ?? undefined, tags: row.tags?.length ? row.tags : undefined, mode: (row.mode ?? 'interactive'), maxConcurrentTasks: row.maxConcurrentTasks ?? 1, dailySpendLimit: row.dailySpendLimit ?? undefined, scheduleConstraintDefaults: row.scheduleConstraintDefaults ?? undefined, createdAt: row.createdAt.toISOString(), lastSeen: row.lastSeen.toISOString() };
|
|
1609
1685
|
}
|
|
1610
1686
|
toMemoryRecord(row) {
|
|
1611
|
-
return { key: row.key, ownerGaii: row.ownerGaii, value: row.value, visibility: row.visibility, groupId: row.groupId ?? undefined, tags: row.tags, ttlHours: row.ttlHours, version: row.version, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString(), flagCount: row.flagCount ?? undefined, allowedOrigins: row.allowedOrigins?.length ? row.allowedOrigins : undefined, trackable: row.trackable ? true : undefined };
|
|
1687
|
+
return { key: row.key, ownerGaii: row.ownerGaii, value: row.value, visibility: row.visibility, groupId: row.groupId ?? undefined, tags: row.tags, ttlHours: row.ttlHours, version: row.version, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString(), flagCount: row.flagCount ?? undefined, allowedOrigins: row.allowedOrigins?.length ? row.allowedOrigins : undefined, trackable: row.trackable ? true : undefined, archived: row.archived ? true : undefined, archivedAt: row.archivedAt ? row.archivedAt.toISOString() : undefined, archivedBy: row.archivedBy ?? undefined, archivedRoot: row.archivedRoot ?? undefined };
|
|
1688
|
+
}
|
|
1689
|
+
/** Prisma `where` fragment restricting memory rows by archive filter. Default `exclude` uses
|
|
1690
|
+
* `{ not: true }` (NOT `false`) so legacy docs written before the field existed — which have no
|
|
1691
|
+
* `archived` key at all — are still treated as active. Mirrors SQLite's `archived = 0` default. */
|
|
1692
|
+
archivedWhere(archived) {
|
|
1693
|
+
if (archived === 'include')
|
|
1694
|
+
return {};
|
|
1695
|
+
if (archived === 'only')
|
|
1696
|
+
return { archived: true };
|
|
1697
|
+
return { archived: { not: true } };
|
|
1612
1698
|
}
|
|
1613
1699
|
/** Read an optional `_actor` / `_event` annotation off a record value (the structure-timeline
|
|
1614
1700
|
* convention) so archived history rows carry who/why. Best-effort. */
|
|
@@ -2496,7 +2582,7 @@ export class PrismaStorage {
|
|
|
2496
2582
|
// ── Organisms (Phase 2.2) ──
|
|
2497
2583
|
async createOrganism(record) {
|
|
2498
2584
|
this.ensureReady();
|
|
2499
|
-
await this.prisma.organism.create({ data: { id: record.id, name: record.name, description: record.description, type: record.type, location: record.location ?? null, interests: record.interests, creatorGhii: record.creatorGhii, admins: record.admins, members: record.members, agentGaiis: record.agentGaiis, boardId: record.boardId, joinPolicy: record.joinPolicy, maxMembers: record.maxMembers, visibility: record.visibility, moderationConfig: record.moderationConfig, memoryNamespace: record.memoryNamespace, semantic: record.semantic ?? null, createdAt: new Date(record.createdAt) } });
|
|
2585
|
+
await this.prisma.organism.create({ data: { id: record.id, name: record.name, description: record.description, type: record.type, location: record.location ?? null, interests: record.interests, creatorGhii: record.creatorGhii, admins: record.admins, members: record.members, agentGaiis: record.agentGaiis, boardId: record.boardId, joinPolicy: record.joinPolicy, maxMembers: record.maxMembers, visibility: record.visibility, moderationConfig: record.moderationConfig, memoryNamespace: record.memoryNamespace, semantic: record.semantic ?? null, archived: record.archived ?? false, archivedAt: record.archivedAt ? new Date(record.archivedAt) : null, archivedBy: record.archivedBy ?? null, createdAt: new Date(record.createdAt) } });
|
|
2500
2586
|
return record;
|
|
2501
2587
|
}
|
|
2502
2588
|
async getOrganism(id) {
|
|
@@ -2513,6 +2599,12 @@ export class PrismaStorage {
|
|
|
2513
2599
|
where.type = opts.type;
|
|
2514
2600
|
if (opts?.visibility)
|
|
2515
2601
|
where.visibility = opts.visibility;
|
|
2602
|
+
// Archive filter — default include; `{ not: true }` for exclude also matches legacy docs that
|
|
2603
|
+
// predate the field (belt-and-suspenders alongside the startup backfill).
|
|
2604
|
+
if (opts?.archived === 'exclude')
|
|
2605
|
+
where.archived = { not: true };
|
|
2606
|
+
else if (opts?.archived === 'only')
|
|
2607
|
+
where.archived = true;
|
|
2516
2608
|
// city and interest filtering done post-query (JSON field)
|
|
2517
2609
|
const rows = await this.prisma.organism.findMany({ where, orderBy: { createdAt: 'desc' } });
|
|
2518
2610
|
let results = rows.map((r) => this.toOrganismRecord(r));
|
|
@@ -2538,6 +2630,8 @@ export class PrismaStorage {
|
|
|
2538
2630
|
data.semantic = data.semantic;
|
|
2539
2631
|
if (data.createdAt && typeof data.createdAt === 'string')
|
|
2540
2632
|
data.createdAt = new Date(data.createdAt);
|
|
2633
|
+
if (data.archivedAt && typeof data.archivedAt === 'string')
|
|
2634
|
+
data.archivedAt = new Date(data.archivedAt);
|
|
2541
2635
|
const row = await this.prisma.organism.update({ where: { id }, data });
|
|
2542
2636
|
return this.toOrganismRecord(row);
|
|
2543
2637
|
}
|
|
@@ -2583,7 +2677,7 @@ export class PrismaStorage {
|
|
|
2583
2677
|
}
|
|
2584
2678
|
}
|
|
2585
2679
|
toOrganismRecord(row) {
|
|
2586
|
-
return { id: row.id, name: row.name, description: row.description, type: row.type, location: row.location ?? undefined, interests: row.interests, creatorGhii: row.creatorGhii, admins: row.admins, members: row.members, agentGaiis: row.agentGaiis, boardId: row.boardId, joinPolicy: row.joinPolicy, maxMembers: row.maxMembers, visibility: row.visibility, moderationConfig: row.moderationConfig, memoryNamespace: row.memoryNamespace, semantic: row.semantic ?? undefined, createdAt: row.createdAt instanceof Date ? row.createdAt.toISOString() : row.createdAt, updatedAt: row.updatedAt instanceof Date ? row.updatedAt.toISOString() : row.updatedAt };
|
|
2680
|
+
return { id: row.id, name: row.name, description: row.description, type: row.type, location: row.location ?? undefined, interests: row.interests, creatorGhii: row.creatorGhii, admins: row.admins, members: row.members, agentGaiis: row.agentGaiis, boardId: row.boardId, joinPolicy: row.joinPolicy, maxMembers: row.maxMembers, visibility: row.visibility, moderationConfig: row.moderationConfig, memoryNamespace: row.memoryNamespace, semantic: row.semantic ?? undefined, archived: row.archived ? true : undefined, archivedAt: row.archivedAt ? (row.archivedAt instanceof Date ? row.archivedAt.toISOString() : row.archivedAt) : undefined, archivedBy: row.archivedBy ?? undefined, createdAt: row.createdAt instanceof Date ? row.createdAt.toISOString() : row.createdAt, updatedAt: row.updatedAt instanceof Date ? row.updatedAt.toISOString() : row.updatedAt };
|
|
2587
2681
|
}
|
|
2588
2682
|
async createMembership(record) {
|
|
2589
2683
|
this.ensureReady();
|
|
@@ -3944,10 +4038,11 @@ export class PrismaStorage {
|
|
|
3944
4038
|
}
|
|
3945
4039
|
if (opts?.freeOnly)
|
|
3946
4040
|
apps = apps.filter((a) => !a.manifest.priceMorsels);
|
|
3947
|
-
// Parked + operator-hidden apps are hidden from everyone EXCEPT their
|
|
3948
|
-
//
|
|
3949
|
-
//
|
|
3950
|
-
//
|
|
4041
|
+
// Parked + operator-hidden apps are hidden from everyone EXCEPT their owner
|
|
4042
|
+
// (viewerGhii) — decided purely from who is authenticated. The owner sees
|
|
4043
|
+
// their own (operator-hidden ones carry operator_hidden=true so the client
|
|
4044
|
+
// can badge them); everyone else does not. A scoped ownerGaii query already
|
|
4045
|
+
// returns only that owner's apps, so skip the filters there. adminView sees all.
|
|
3951
4046
|
if (!opts?.ownerGaii && !opts?.adminView) {
|
|
3952
4047
|
apps = apps.filter((a) => !a.parked || (opts?.viewerGhii && a.ownerGaii === opts.viewerGhii));
|
|
3953
4048
|
apps = apps.filter((a) => !a.operatorHidden || (opts?.viewerGhii && a.ownerGaii === opts.viewerGhii));
|
|
@@ -3995,6 +4090,31 @@ export class PrismaStorage {
|
|
|
3995
4090
|
});
|
|
3996
4091
|
return result.count > 0;
|
|
3997
4092
|
}
|
|
4093
|
+
async updateAppMeta(ownerGaii, filename, meta) {
|
|
4094
|
+
this.ensureReady();
|
|
4095
|
+
// Rename/re-describe in place on the LATEST version (the one the catalogue
|
|
4096
|
+
// shows). Read the current manifest, merge only the supplied fields, write
|
|
4097
|
+
// it back — the URL (owner/filename) is untouched. Older versions keep the
|
|
4098
|
+
// name they were published under.
|
|
4099
|
+
const rows = await this.prisma.app.findMany({
|
|
4100
|
+
where: { ownerGaii, filename },
|
|
4101
|
+
orderBy: { versionNumber: 'desc' },
|
|
4102
|
+
take: 1,
|
|
4103
|
+
});
|
|
4104
|
+
if (rows.length === 0)
|
|
4105
|
+
return false;
|
|
4106
|
+
const latest = rows[0];
|
|
4107
|
+
const manifest = { ...latest.manifest };
|
|
4108
|
+
if (meta.name !== undefined)
|
|
4109
|
+
manifest.name = meta.name;
|
|
4110
|
+
if (meta.description !== undefined)
|
|
4111
|
+
manifest.description = meta.description;
|
|
4112
|
+
await this.prisma.app.update({
|
|
4113
|
+
where: { ownerGaii_filename_versionNumber: { ownerGaii, filename, versionNumber: latest.versionNumber } },
|
|
4114
|
+
data: { manifest: manifest },
|
|
4115
|
+
});
|
|
4116
|
+
return true;
|
|
4117
|
+
}
|
|
3998
4118
|
async setAppParked(ownerGaii, filename, parked) {
|
|
3999
4119
|
this.ensureReady();
|
|
4000
4120
|
// Park/unpark applies to the whole app — flag every version row.
|