@relaycast/engine 1.1.7
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/adapters/node/database.d.ts +25 -0
- package/dist/adapters/node/database.d.ts.map +1 -0
- package/dist/adapters/node/database.js +71 -0
- package/dist/adapters/node/database.js.map +1 -0
- package/dist/adapters/node/event-queue.d.ts +15 -0
- package/dist/adapters/node/event-queue.d.ts.map +1 -0
- package/dist/adapters/node/event-queue.js +27 -0
- package/dist/adapters/node/event-queue.js.map +1 -0
- package/dist/adapters/node/files.d.ts +47 -0
- package/dist/adapters/node/files.d.ts.map +1 -0
- package/dist/adapters/node/files.js +128 -0
- package/dist/adapters/node/files.js.map +1 -0
- package/dist/adapters/node/index.d.ts +60 -0
- package/dist/adapters/node/index.d.ts.map +1 -0
- package/dist/adapters/node/index.js +79 -0
- package/dist/adapters/node/index.js.map +1 -0
- package/dist/adapters/node/kv.d.ts +27 -0
- package/dist/adapters/node/kv.d.ts.map +1 -0
- package/dist/adapters/node/kv.js +67 -0
- package/dist/adapters/node/kv.js.map +1 -0
- package/dist/adapters/node/mcp.d.ts +18 -0
- package/dist/adapters/node/mcp.d.ts.map +1 -0
- package/dist/adapters/node/mcp.js +53 -0
- package/dist/adapters/node/mcp.js.map +1 -0
- package/dist/adapters/node/presence.d.ts +33 -0
- package/dist/adapters/node/presence.d.ts.map +1 -0
- package/dist/adapters/node/presence.js +113 -0
- package/dist/adapters/node/presence.js.map +1 -0
- package/dist/adapters/node/rate-limit.d.ts +17 -0
- package/dist/adapters/node/rate-limit.d.ts.map +1 -0
- package/dist/adapters/node/rate-limit.js +36 -0
- package/dist/adapters/node/rate-limit.js.map +1 -0
- package/dist/adapters/node/realtime.d.ts +72 -0
- package/dist/adapters/node/realtime.d.ts.map +1 -0
- package/dist/adapters/node/realtime.js +274 -0
- package/dist/adapters/node/realtime.js.map +1 -0
- package/dist/auth/index.d.ts +21 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +50 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/bin/serve.d.ts +3 -0
- package/dist/bin/serve.d.ts.map +1 -0
- package/dist/bin/serve.js +74 -0
- package/dist/bin/serve.js.map +1 -0
- package/dist/db/index.d.ts +16 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +24 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +14 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +16 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/migrations/0000_broad_dagger.sql +227 -0
- package/dist/db/migrations/0001_fts5_search.sql +23 -0
- package/dist/db/migrations/0002_add_metadata_columns.sql +16 -0
- package/dist/db/migrations/0003_add_channel_mute.sql +5 -0
- package/dist/db/migrations/0004_a2a_agents.sql +21 -0
- package/dist/db/migrations/0005_certifications.sql +24 -0
- package/dist/db/migrations/0006_message_logs.sql +30 -0
- package/dist/db/migrations/0007_directory.sql +125 -0
- package/dist/db/migrations/0008_smart_routing.sql +30 -0
- package/dist/db/migrations/0009_drop_workspace_name_unique.sql +4 -0
- package/dist/db/migrations/0010_actions_and_harness.sql +108 -0
- package/dist/db/migrations/0011_stable_handle.sql +5 -0
- package/dist/db/migrations/0012_delivery_and_sequence_constraints.sql +26 -0
- package/dist/db/migrations/0013_status_active.sql +9 -0
- package/dist/db/migrations/meta/0000_snapshot.json +1694 -0
- package/dist/db/migrations/meta/_journal.json +13 -0
- package/dist/db/schema.d.ts +4742 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +572 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/engine/a2a-health.d.ts +11 -0
- package/dist/engine/a2a-health.d.ts.map +1 -0
- package/dist/engine/a2a-health.js +65 -0
- package/dist/engine/a2a-health.js.map +1 -0
- package/dist/engine/a2a.d.ts +73 -0
- package/dist/engine/a2a.d.ts.map +1 -0
- package/dist/engine/a2a.js +549 -0
- package/dist/engine/a2a.js.map +1 -0
- package/dist/engine/action.d.ts +85 -0
- package/dist/engine/action.d.ts.map +1 -0
- package/dist/engine/action.js +220 -0
- package/dist/engine/action.js.map +1 -0
- package/dist/engine/activity.d.ts +21 -0
- package/dist/engine/activity.d.ts.map +1 -0
- package/dist/engine/activity.js +46 -0
- package/dist/engine/activity.js.map +1 -0
- package/dist/engine/agent.d.ts +155 -0
- package/dist/engine/agent.d.ts.map +1 -0
- package/dist/engine/agent.js +408 -0
- package/dist/engine/agent.js.map +1 -0
- package/dist/engine/cache.d.ts +19 -0
- package/dist/engine/cache.d.ts.map +1 -0
- package/dist/engine/cache.js +40 -0
- package/dist/engine/cache.js.map +1 -0
- package/dist/engine/certify.d.ts +84 -0
- package/dist/engine/certify.d.ts.map +1 -0
- package/dist/engine/certify.js +452 -0
- package/dist/engine/certify.js.map +1 -0
- package/dist/engine/channel.d.ts +67 -0
- package/dist/engine/channel.d.ts.map +1 -0
- package/dist/engine/channel.js +375 -0
- package/dist/engine/channel.js.map +1 -0
- package/dist/engine/console.d.ts +83 -0
- package/dist/engine/console.d.ts.map +1 -0
- package/dist/engine/console.js +189 -0
- package/dist/engine/console.js.map +1 -0
- package/dist/engine/directory.d.ts +241 -0
- package/dist/engine/directory.d.ts.map +1 -0
- package/dist/engine/directory.js +528 -0
- package/dist/engine/directory.js.map +1 -0
- package/dist/engine/dm.d.ts +63 -0
- package/dist/engine/dm.d.ts.map +1 -0
- package/dist/engine/dm.js +397 -0
- package/dist/engine/dm.js.map +1 -0
- package/dist/engine/dmAll.d.ts +11 -0
- package/dist/engine/dmAll.d.ts.map +1 -0
- package/dist/engine/dmAll.js +117 -0
- package/dist/engine/dmAll.js.map +1 -0
- package/dist/engine/event-id.d.ts +2 -0
- package/dist/engine/event-id.d.ts.map +1 -0
- package/dist/engine/event-id.js +0 -0
- package/dist/engine/event-id.js.map +1 -0
- package/dist/engine/eventDelivery.d.ts +12 -0
- package/dist/engine/eventDelivery.d.ts.map +1 -0
- package/dist/engine/eventDelivery.js +103 -0
- package/dist/engine/eventDelivery.js.map +1 -0
- package/dist/engine/eventQueue.d.ts +6 -0
- package/dist/engine/eventQueue.d.ts.map +1 -0
- package/dist/engine/eventQueue.js +23 -0
- package/dist/engine/eventQueue.js.map +1 -0
- package/dist/engine/eventSubscription.d.ts +59 -0
- package/dist/engine/eventSubscription.d.ts.map +1 -0
- package/dist/engine/eventSubscription.js +74 -0
- package/dist/engine/eventSubscription.js.map +1 -0
- package/dist/engine/file.d.ts +43 -0
- package/dist/engine/file.d.ts.map +1 -0
- package/dist/engine/file.js +115 -0
- package/dist/engine/file.js.map +1 -0
- package/dist/engine/groupDm.d.ts +54 -0
- package/dist/engine/groupDm.d.ts.map +1 -0
- package/dist/engine/groupDm.js +262 -0
- package/dist/engine/groupDm.js.map +1 -0
- package/dist/engine/inboundWebhook.d.ts +45 -0
- package/dist/engine/inboundWebhook.d.ts.map +1 -0
- package/dist/engine/inboundWebhook.js +170 -0
- package/dist/engine/inboundWebhook.js.map +1 -0
- package/dist/engine/inbox.d.ts +34 -0
- package/dist/engine/inbox.d.ts.map +1 -0
- package/dist/engine/inbox.js +141 -0
- package/dist/engine/inbox.js.map +1 -0
- package/dist/engine/index.d.ts +10 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +10 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/message.d.ts +81 -0
- package/dist/engine/message.d.ts.map +1 -0
- package/dist/engine/message.js +293 -0
- package/dist/engine/message.js.map +1 -0
- package/dist/engine/presence.d.ts +12 -0
- package/dist/engine/presence.d.ts.map +1 -0
- package/dist/engine/presence.js +24 -0
- package/dist/engine/presence.js.map +1 -0
- package/dist/engine/reaction.d.ts +19 -0
- package/dist/engine/reaction.d.ts.map +1 -0
- package/dist/engine/reaction.js +97 -0
- package/dist/engine/reaction.js.map +1 -0
- package/dist/engine/receipt.d.ts +19 -0
- package/dist/engine/receipt.d.ts.map +1 -0
- package/dist/engine/receipt.js +96 -0
- package/dist/engine/receipt.js.map +1 -0
- package/dist/engine/resyncQuery.d.ts +15 -0
- package/dist/engine/resyncQuery.d.ts.map +1 -0
- package/dist/engine/resyncQuery.js +124 -0
- package/dist/engine/resyncQuery.js.map +1 -0
- package/dist/engine/routing.d.ts +45 -0
- package/dist/engine/routing.d.ts.map +1 -0
- package/dist/engine/routing.js +390 -0
- package/dist/engine/routing.js.map +1 -0
- package/dist/engine/search.d.ts +19 -0
- package/dist/engine/search.d.ts.map +1 -0
- package/dist/engine/search.js +60 -0
- package/dist/engine/search.js.map +1 -0
- package/dist/engine/searchQuery.d.ts +8 -0
- package/dist/engine/searchQuery.d.ts.map +1 -0
- package/dist/engine/searchQuery.js +19 -0
- package/dist/engine/searchQuery.js.map +1 -0
- package/dist/engine/sessionEvent.d.ts +29 -0
- package/dist/engine/sessionEvent.d.ts.map +1 -0
- package/dist/engine/sessionEvent.js +76 -0
- package/dist/engine/sessionEvent.js.map +1 -0
- package/dist/engine/snowflake.d.ts +14 -0
- package/dist/engine/snowflake.d.ts.map +1 -0
- package/dist/engine/snowflake.js +88 -0
- package/dist/engine/snowflake.js.map +1 -0
- package/dist/engine/systemPrompt.d.ts +13 -0
- package/dist/engine/systemPrompt.d.ts.map +1 -0
- package/dist/engine/systemPrompt.js +31 -0
- package/dist/engine/systemPrompt.js.map +1 -0
- package/dist/engine/thread.d.ts +56 -0
- package/dist/engine/thread.d.ts.map +1 -0
- package/dist/engine/thread.js +158 -0
- package/dist/engine/thread.js.map +1 -0
- package/dist/engine/tokenRotate.d.ts +8 -0
- package/dist/engine/tokenRotate.d.ts.map +1 -0
- package/dist/engine/tokenRotate.js +25 -0
- package/dist/engine/tokenRotate.js.map +1 -0
- package/dist/engine/usage.d.ts +16 -0
- package/dist/engine/usage.d.ts.map +1 -0
- package/dist/engine/usage.js +24 -0
- package/dist/engine/usage.js.map +1 -0
- package/dist/engine/workspace.d.ts +44 -0
- package/dist/engine/workspace.d.ts.map +1 -0
- package/dist/engine/workspace.js +127 -0
- package/dist/engine/workspace.js.map +1 -0
- package/dist/engine/wsTransform.d.ts +14 -0
- package/dist/engine/wsTransform.d.ts.map +1 -0
- package/dist/engine/wsTransform.js +196 -0
- package/dist/engine/wsTransform.js.map +1 -0
- package/dist/engine.d.ts +18 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +275 -0
- package/dist/engine.js.map +1 -0
- package/dist/entrypoints/node.d.ts +35 -0
- package/dist/entrypoints/node.d.ts.map +1 -0
- package/dist/entrypoints/node.js +114 -0
- package/dist/entrypoints/node.js.map +1 -0
- package/dist/env.d.ts +38 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +2 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/logger.d.ts +47 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +214 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/origin.d.ts +25 -0
- package/dist/lib/origin.d.ts.map +1 -0
- package/dist/lib/origin.js +80 -0
- package/dist/lib/origin.js.map +1 -0
- package/dist/lib/serverTelemetry.d.ts +12 -0
- package/dist/lib/serverTelemetry.d.ts.map +1 -0
- package/dist/lib/serverTelemetry.js +46 -0
- package/dist/lib/serverTelemetry.js.map +1 -0
- package/dist/lib/ssrf.d.ts +23 -0
- package/dist/lib/ssrf.d.ts.map +1 -0
- package/dist/lib/ssrf.js +57 -0
- package/dist/lib/ssrf.js.map +1 -0
- package/dist/lib/workspaceStream.d.ts +9 -0
- package/dist/lib/workspaceStream.d.ts.map +1 -0
- package/dist/lib/workspaceStream.js +53 -0
- package/dist/lib/workspaceStream.js.map +1 -0
- package/dist/middleware/auth.d.ts +9 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +40 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/engine-context.d.ts +9 -0
- package/dist/middleware/engine-context.d.ts.map +1 -0
- package/dist/middleware/engine-context.js +15 -0
- package/dist/middleware/engine-context.js.map +1 -0
- package/dist/middleware/idempotency.d.ts +24 -0
- package/dist/middleware/idempotency.d.ts.map +1 -0
- package/dist/middleware/idempotency.js +148 -0
- package/dist/middleware/idempotency.js.map +1 -0
- package/dist/middleware/logger.d.ts +4 -0
- package/dist/middleware/logger.d.ts.map +1 -0
- package/dist/middleware/logger.js +163 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/planLimits.d.ts +5 -0
- package/dist/middleware/planLimits.d.ts.map +1 -0
- package/dist/middleware/planLimits.js +35 -0
- package/dist/middleware/planLimits.js.map +1 -0
- package/dist/middleware/presenceRefresh.d.ts +3 -0
- package/dist/middleware/presenceRefresh.d.ts.map +1 -0
- package/dist/middleware/presenceRefresh.js +18 -0
- package/dist/middleware/presenceRefresh.js.map +1 -0
- package/dist/middleware/rateLimit.d.ts +3 -0
- package/dist/middleware/rateLimit.d.ts.map +1 -0
- package/dist/middleware/rateLimit.js +69 -0
- package/dist/middleware/rateLimit.js.map +1 -0
- package/dist/middleware/usageTracker.d.ts +3 -0
- package/dist/middleware/usageTracker.d.ts.map +1 -0
- package/dist/middleware/usageTracker.js +10 -0
- package/dist/middleware/usageTracker.js.map +1 -0
- package/dist/ports/auth.d.ts +45 -0
- package/dist/ports/auth.d.ts.map +1 -0
- package/dist/ports/auth.js +2 -0
- package/dist/ports/auth.js.map +1 -0
- package/dist/ports/database.d.ts +20 -0
- package/dist/ports/database.d.ts.map +1 -0
- package/dist/ports/database.js +2 -0
- package/dist/ports/database.js.map +1 -0
- package/dist/ports/entitlements.d.ts +25 -0
- package/dist/ports/entitlements.d.ts.map +1 -0
- package/dist/ports/entitlements.js +2 -0
- package/dist/ports/entitlements.js.map +1 -0
- package/dist/ports/event-queue.d.ts +19 -0
- package/dist/ports/event-queue.d.ts.map +1 -0
- package/dist/ports/event-queue.js +2 -0
- package/dist/ports/event-queue.js.map +1 -0
- package/dist/ports/files.d.ts +28 -0
- package/dist/ports/files.d.ts.map +1 -0
- package/dist/ports/files.js +2 -0
- package/dist/ports/files.js.map +1 -0
- package/dist/ports/index.d.ts +84 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +2 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/kv.d.ts +25 -0
- package/dist/ports/kv.d.ts.map +1 -0
- package/dist/ports/kv.js +2 -0
- package/dist/ports/kv.js.map +1 -0
- package/dist/ports/mcp.d.ts +18 -0
- package/dist/ports/mcp.d.ts.map +1 -0
- package/dist/ports/mcp.js +2 -0
- package/dist/ports/mcp.js.map +1 -0
- package/dist/ports/presence.d.ts +18 -0
- package/dist/ports/presence.d.ts.map +1 -0
- package/dist/ports/presence.js +2 -0
- package/dist/ports/presence.js.map +1 -0
- package/dist/ports/rate-limit.d.ts +20 -0
- package/dist/ports/rate-limit.d.ts.map +1 -0
- package/dist/ports/rate-limit.js +2 -0
- package/dist/ports/rate-limit.js.map +1 -0
- package/dist/ports/realtime.d.ts +104 -0
- package/dist/ports/realtime.d.ts.map +1 -0
- package/dist/ports/realtime.js +19 -0
- package/dist/ports/realtime.js.map +1 -0
- package/dist/ports/telemetry.d.ts +20 -0
- package/dist/ports/telemetry.d.ts.map +1 -0
- package/dist/ports/telemetry.js +2 -0
- package/dist/ports/telemetry.js.map +1 -0
- package/dist/providers/noop-telemetry.d.ts +13 -0
- package/dist/providers/noop-telemetry.d.ts.map +1 -0
- package/dist/providers/noop-telemetry.js +16 -0
- package/dist/providers/noop-telemetry.js.map +1 -0
- package/dist/providers/static-entitlements.d.ts +23 -0
- package/dist/providers/static-entitlements.d.ts.map +1 -0
- package/dist/providers/static-entitlements.js +42 -0
- package/dist/providers/static-entitlements.js.map +1 -0
- package/dist/routes/a2a.d.ts +4 -0
- package/dist/routes/a2a.d.ts.map +1 -0
- package/dist/routes/a2a.js +375 -0
- package/dist/routes/a2a.js.map +1 -0
- package/dist/routes/action.d.ts +4 -0
- package/dist/routes/action.d.ts.map +1 -0
- package/dist/routes/action.js +213 -0
- package/dist/routes/action.js.map +1 -0
- package/dist/routes/agent.d.ts +4 -0
- package/dist/routes/agent.d.ts.map +1 -0
- package/dist/routes/agent.js +431 -0
- package/dist/routes/agent.js.map +1 -0
- package/dist/routes/background.d.ts +13 -0
- package/dist/routes/background.d.ts.map +1 -0
- package/dist/routes/background.js +33 -0
- package/dist/routes/background.js.map +1 -0
- package/dist/routes/certify.d.ts +4 -0
- package/dist/routes/certify.d.ts.map +1 -0
- package/dist/routes/certify.js +119 -0
- package/dist/routes/certify.js.map +1 -0
- package/dist/routes/channel.d.ts +4 -0
- package/dist/routes/channel.d.ts.map +1 -0
- package/dist/routes/channel.js +492 -0
- package/dist/routes/channel.js.map +1 -0
- package/dist/routes/console.d.ts +4 -0
- package/dist/routes/console.d.ts.map +1 -0
- package/dist/routes/console.js +117 -0
- package/dist/routes/console.js.map +1 -0
- package/dist/routes/directory.d.ts +4 -0
- package/dist/routes/directory.d.ts.map +1 -0
- package/dist/routes/directory.js +236 -0
- package/dist/routes/directory.js.map +1 -0
- package/dist/routes/dm.d.ts +4 -0
- package/dist/routes/dm.d.ts.map +1 -0
- package/dist/routes/dm.js +157 -0
- package/dist/routes/dm.js.map +1 -0
- package/dist/routes/eventSubscription.d.ts +4 -0
- package/dist/routes/eventSubscription.d.ts.map +1 -0
- package/dist/routes/eventSubscription.js +115 -0
- package/dist/routes/eventSubscription.js.map +1 -0
- package/dist/routes/fanout.d.ts +17 -0
- package/dist/routes/fanout.d.ts.map +1 -0
- package/dist/routes/fanout.js +150 -0
- package/dist/routes/fanout.js.map +1 -0
- package/dist/routes/file.d.ts +4 -0
- package/dist/routes/file.d.ts.map +1 -0
- package/dist/routes/file.js +166 -0
- package/dist/routes/file.js.map +1 -0
- package/dist/routes/groupDm.d.ts +4 -0
- package/dist/routes/groupDm.d.ts.map +1 -0
- package/dist/routes/groupDm.js +204 -0
- package/dist/routes/groupDm.js.map +1 -0
- package/dist/routes/health.d.ts +4 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +10 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/inboundWebhook.d.ts +4 -0
- package/dist/routes/inboundWebhook.d.ts.map +1 -0
- package/dist/routes/inboundWebhook.js +149 -0
- package/dist/routes/inboundWebhook.js.map +1 -0
- package/dist/routes/inbox.d.ts +4 -0
- package/dist/routes/inbox.d.ts.map +1 -0
- package/dist/routes/inbox.js +23 -0
- package/dist/routes/inbox.js.map +1 -0
- package/dist/routes/message.d.ts +4 -0
- package/dist/routes/message.d.ts.map +1 -0
- package/dist/routes/message.js +164 -0
- package/dist/routes/message.js.map +1 -0
- package/dist/routes/presence.d.ts +4 -0
- package/dist/routes/presence.d.ts.map +1 -0
- package/dist/routes/presence.js +70 -0
- package/dist/routes/presence.js.map +1 -0
- package/dist/routes/reaction.d.ts +4 -0
- package/dist/routes/reaction.d.ts.map +1 -0
- package/dist/routes/reaction.js +152 -0
- package/dist/routes/reaction.js.map +1 -0
- package/dist/routes/receipt.d.ts +4 -0
- package/dist/routes/receipt.d.ts.map +1 -0
- package/dist/routes/receipt.js +100 -0
- package/dist/routes/receipt.js.map +1 -0
- package/dist/routes/routing.d.ts +4 -0
- package/dist/routes/routing.d.ts.map +1 -0
- package/dist/routes/routing.js +186 -0
- package/dist/routes/routing.js.map +1 -0
- package/dist/routes/search.d.ts +4 -0
- package/dist/routes/search.d.ts.map +1 -0
- package/dist/routes/search.js +48 -0
- package/dist/routes/search.js.map +1 -0
- package/dist/routes/systemPrompt.d.ts +4 -0
- package/dist/routes/systemPrompt.d.ts.map +1 -0
- package/dist/routes/systemPrompt.js +66 -0
- package/dist/routes/systemPrompt.js.map +1 -0
- package/dist/routes/thread.d.ts +4 -0
- package/dist/routes/thread.d.ts.map +1 -0
- package/dist/routes/thread.js +126 -0
- package/dist/routes/thread.js.map +1 -0
- package/dist/routes/workspace.d.ts +4 -0
- package/dist/routes/workspace.d.ts.map +1 -0
- package/dist/routes/workspace.js +355 -0
- package/dist/routes/workspace.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AuthProvider, AuthResult, AuthRequire } from '../ports/auth.js';
|
|
2
|
+
import type { EngineDb } from '../ports/database.js';
|
|
3
|
+
/** SHA-256 hash of a raw token to its stored form. */
|
|
4
|
+
export declare function hashToken(token: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* The built-in, self-host authentication provider.
|
|
7
|
+
*
|
|
8
|
+
* Reproduces the original `middleware/auth.ts` behavior: bearer tokens prefixed
|
|
9
|
+
* `rk_live_` (workspace) or `at_live_` (agent) are SHA-256 hashed and looked up
|
|
10
|
+
* in the `workspaces` / `agents` tables. The cloud product replaces this with a
|
|
11
|
+
* provider backed by its own accounts/billing system.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SqliteApiKeyAuthProvider implements AuthProvider {
|
|
14
|
+
hashToken(token: string): string;
|
|
15
|
+
authenticate(args: {
|
|
16
|
+
token: string;
|
|
17
|
+
require: AuthRequire;
|
|
18
|
+
db: EngineDb;
|
|
19
|
+
}): Promise<AuthResult>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,sDAAsD;AACtD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAMD;;;;;;;GAOG;AACH,qBAAa,wBAAyB,YAAW,YAAY;IAC3D,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI1B,YAAY,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC;QAAC,EAAE,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;CA0BrG"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { eq } from 'drizzle-orm';
|
|
3
|
+
import { workspaces, agents } from '../db/schema.js';
|
|
4
|
+
/** SHA-256 hash of a raw token to its stored form. */
|
|
5
|
+
export function hashToken(token) {
|
|
6
|
+
return crypto.createHash('sha256').update(token).digest('hex');
|
|
7
|
+
}
|
|
8
|
+
function unauthorized(message, code = 'unauthorized') {
|
|
9
|
+
return { ok: false, status: 401, code, message };
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The built-in, self-host authentication provider.
|
|
13
|
+
*
|
|
14
|
+
* Reproduces the original `middleware/auth.ts` behavior: bearer tokens prefixed
|
|
15
|
+
* `rk_live_` (workspace) or `at_live_` (agent) are SHA-256 hashed and looked up
|
|
16
|
+
* in the `workspaces` / `agents` tables. The cloud product replaces this with a
|
|
17
|
+
* provider backed by its own accounts/billing system.
|
|
18
|
+
*/
|
|
19
|
+
export class SqliteApiKeyAuthProvider {
|
|
20
|
+
hashToken(token) {
|
|
21
|
+
return hashToken(token);
|
|
22
|
+
}
|
|
23
|
+
async authenticate(args) {
|
|
24
|
+
const { token, require, db } = args;
|
|
25
|
+
const hash = hashToken(token);
|
|
26
|
+
if (token.startsWith('rk_live_')) {
|
|
27
|
+
if (require === 'agent') {
|
|
28
|
+
return unauthorized('Agent token required (at_live_...)');
|
|
29
|
+
}
|
|
30
|
+
const [workspace] = await db.select().from(workspaces).where(eq(workspaces.apiKeyHash, hash));
|
|
31
|
+
if (!workspace)
|
|
32
|
+
return unauthorized('Invalid API key');
|
|
33
|
+
return { ok: true, workspace };
|
|
34
|
+
}
|
|
35
|
+
if (token.startsWith('at_live_')) {
|
|
36
|
+
if (require === 'workspace') {
|
|
37
|
+
return unauthorized('Workspace key required (rk_live_...)');
|
|
38
|
+
}
|
|
39
|
+
const [agent] = await db.select().from(agents).where(eq(agents.tokenHash, hash));
|
|
40
|
+
if (!agent)
|
|
41
|
+
return unauthorized('Invalid agent token', 'agent_token_invalid');
|
|
42
|
+
const [workspace] = await db.select().from(workspaces).where(eq(workspaces.id, agent.workspaceId));
|
|
43
|
+
if (!workspace)
|
|
44
|
+
return unauthorized('Workspace not found');
|
|
45
|
+
return { ok: true, workspace, agent };
|
|
46
|
+
}
|
|
47
|
+
return unauthorized('Invalid token format');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIrD,sDAAsD;AACtD,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,IAAI,GAAG,cAAc;IAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,wBAAwB;IACnC,SAAS,CAAC,KAAa;QACrB,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAA2D;QAC5E,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;QACpC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAE9B,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;gBACxB,OAAO,YAAY,CAAC,oCAAoC,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9F,IAAI,CAAC,SAAS;gBAAE,OAAO,YAAY,CAAC,iBAAiB,CAAC,CAAC;YACvD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACjC,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,OAAO,YAAY,CAAC,sCAAsC,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACjF,IAAI,CAAC,KAAK;gBAAE,OAAO,YAAY,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;YAC9E,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YACnG,IAAI,CAAC,SAAS;gBAAE,OAAO,YAAY,CAAC,qBAAqB,CAAC,CAAC;YAC3D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACxC,CAAC;QAED,OAAO,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/bin/serve.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { startServer } from '../entrypoints/node.js';
|
|
3
|
+
const HELP = `relaycast-engine — run a self-hosted Relaycast server (Node + SQLite)
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
relaycast-engine [--db <path>] [--port <n>] [--base-url <url>] [--env <name>]
|
|
7
|
+
|
|
8
|
+
Options:
|
|
9
|
+
--db <path> SQLite database file (default: $RELAYCAST_DB_PATH or ./relaycast.db)
|
|
10
|
+
--port <n> HTTP port (default: $PORT or 8787)
|
|
11
|
+
--base-url <url> Public origin for signed file URLs (default: http://localhost:<port>)
|
|
12
|
+
--env <name> Environment label (default: production)
|
|
13
|
+
-h, --help Show this help
|
|
14
|
+
|
|
15
|
+
After start, create a workspace:
|
|
16
|
+
curl -XPOST http://localhost:<port>/v1/workspaces -H 'content-type: application/json' -d '{"name":"my-team"}'
|
|
17
|
+
`;
|
|
18
|
+
function parseArgs(argv, env) {
|
|
19
|
+
const out = {
|
|
20
|
+
db: env.RELAYCAST_DB_PATH ?? './relaycast.db',
|
|
21
|
+
port: env.PORT ? Number(env.PORT) : 8787,
|
|
22
|
+
baseUrl: undefined,
|
|
23
|
+
environment: env.RELAYCAST_ENV ?? 'production',
|
|
24
|
+
help: false,
|
|
25
|
+
};
|
|
26
|
+
for (let i = 0; i < argv.length; i++) {
|
|
27
|
+
const arg = argv[i];
|
|
28
|
+
if (arg === '--help' || arg === '-h')
|
|
29
|
+
out.help = true;
|
|
30
|
+
else if (arg === '--db')
|
|
31
|
+
out.db = argv[++i] ?? out.db;
|
|
32
|
+
else if (arg === '--port')
|
|
33
|
+
out.port = Number(argv[++i] ?? out.port);
|
|
34
|
+
else if (arg === '--base-url')
|
|
35
|
+
out.baseUrl = argv[++i];
|
|
36
|
+
else if (arg === '--env')
|
|
37
|
+
out.environment = argv[++i] ?? out.environment;
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
async function main() {
|
|
42
|
+
const opts = parseArgs(process.argv.slice(2), process.env);
|
|
43
|
+
if (opts.help) {
|
|
44
|
+
process.stdout.write(HELP);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (!Number.isFinite(opts.port) || opts.port <= 0) {
|
|
48
|
+
process.stderr.write('Invalid --port\n');
|
|
49
|
+
process.exitCode = 1;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const baseUrl = opts.baseUrl ?? `http://localhost:${opts.port}`;
|
|
53
|
+
const running = startServer({
|
|
54
|
+
dbPath: opts.db,
|
|
55
|
+
port: opts.port,
|
|
56
|
+
baseUrl,
|
|
57
|
+
config: { environment: opts.environment },
|
|
58
|
+
});
|
|
59
|
+
process.stdout.write(`Relaycast self-host listening on ${baseUrl} (db: ${opts.db})\n`);
|
|
60
|
+
process.stdout.write(`Create a workspace:\n curl -XPOST ${baseUrl}/v1/workspaces -H 'content-type: application/json' -d '{"name":"my-team"}'\n`);
|
|
61
|
+
await new Promise((resolve) => {
|
|
62
|
+
const shutdown = () => {
|
|
63
|
+
process.stdout.write('\nShutting down…\n');
|
|
64
|
+
void running.stop().then(resolve);
|
|
65
|
+
};
|
|
66
|
+
process.once('SIGINT', shutdown);
|
|
67
|
+
process.once('SIGTERM', shutdown);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
main().catch((err) => {
|
|
71
|
+
process.stderr.write(`relaycast-engine failed to start: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/bin/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { EngineDb } from '../ports/database.js';
|
|
2
|
+
/**
|
|
3
|
+
* The engine never constructs a database driver itself — an adapter does, and
|
|
4
|
+
* injects the handle as the `db` port. This identity helper exists only so the
|
|
5
|
+
* many engine modules that write `type Db = ReturnType<typeof getDb>` keep a
|
|
6
|
+
* single canonical alias for {@link EngineDb} without importing a concrete
|
|
7
|
+
* driver (which would pull `better-sqlite3` / `drizzle-orm/d1` into every
|
|
8
|
+
* bundle). Construct real handles with `getSqliteDb` (Node adapter) or the
|
|
9
|
+
* Cloudflare D1 driver (cloud adapter).
|
|
10
|
+
*/
|
|
11
|
+
export declare function getDb(db: EngineDb): EngineDb;
|
|
12
|
+
/** Canonical database type used across the engine. */
|
|
13
|
+
export type Db = EngineDb;
|
|
14
|
+
/** Health check — run a trivial query to verify connectivity. */
|
|
15
|
+
export declare function healthCheck(db: EngineDb): Promise<boolean>;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,QAAQ,CAE5C;AAED,sDAAsD;AACtD,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC;AAE1B,iEAAiE;AACjE,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhE"}
|
package/dist/db/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { sql } from 'drizzle-orm';
|
|
2
|
+
/**
|
|
3
|
+
* The engine never constructs a database driver itself — an adapter does, and
|
|
4
|
+
* injects the handle as the `db` port. This identity helper exists only so the
|
|
5
|
+
* many engine modules that write `type Db = ReturnType<typeof getDb>` keep a
|
|
6
|
+
* single canonical alias for {@link EngineDb} without importing a concrete
|
|
7
|
+
* driver (which would pull `better-sqlite3` / `drizzle-orm/d1` into every
|
|
8
|
+
* bundle). Construct real handles with `getSqliteDb` (Node adapter) or the
|
|
9
|
+
* Cloudflare D1 driver (cloud adapter).
|
|
10
|
+
*/
|
|
11
|
+
export function getDb(db) {
|
|
12
|
+
return db;
|
|
13
|
+
}
|
|
14
|
+
/** Health check — run a trivial query to verify connectivity. */
|
|
15
|
+
export async function healthCheck(db) {
|
|
16
|
+
try {
|
|
17
|
+
await db.run(sql `SELECT 1`);
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGlC;;;;;;;;GAQG;AACH,MAAM,UAAU,KAAK,CAAC,EAAY;IAChC,OAAO,EAAE,CAAC;AACZ,CAAC;AAKD,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAY;IAC5C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,UAAU,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D1 migrations are applied via `wrangler d1 migrations apply`.
|
|
3
|
+
*
|
|
4
|
+
* For local development:
|
|
5
|
+
* npx wrangler d1 migrations apply relaycast --local
|
|
6
|
+
*
|
|
7
|
+
* For production/staging:
|
|
8
|
+
* npx wrangler d1 migrations apply relaycast --remote
|
|
9
|
+
*
|
|
10
|
+
* Generate new migrations after schema changes:
|
|
11
|
+
* npx drizzle-kit generate
|
|
12
|
+
*/
|
|
13
|
+
export declare function runMigrations(): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D1 migrations are applied via `wrangler d1 migrations apply`.
|
|
3
|
+
*
|
|
4
|
+
* For local development:
|
|
5
|
+
* npx wrangler d1 migrations apply relaycast --local
|
|
6
|
+
*
|
|
7
|
+
* For production/staging:
|
|
8
|
+
* npx wrangler d1 migrations apply relaycast --remote
|
|
9
|
+
*
|
|
10
|
+
* Generate new migrations after schema changes:
|
|
11
|
+
* npx drizzle-kit generate
|
|
12
|
+
*/
|
|
13
|
+
export async function runMigrations() {
|
|
14
|
+
console.log('D1 migrations are applied via `wrangler d1 migrations apply`');
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
CREATE TABLE `agents` (
|
|
2
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`workspace_id` text NOT NULL,
|
|
4
|
+
`name` text NOT NULL,
|
|
5
|
+
`type` text DEFAULT 'agent' NOT NULL,
|
|
6
|
+
`token_hash` text NOT NULL,
|
|
7
|
+
`status` text DEFAULT 'online' NOT NULL,
|
|
8
|
+
`persona` text,
|
|
9
|
+
`metadata` text DEFAULT '{}',
|
|
10
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
11
|
+
`last_seen` integer DEFAULT (unixepoch()) NOT NULL,
|
|
12
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade
|
|
13
|
+
);
|
|
14
|
+
--> statement-breakpoint
|
|
15
|
+
CREATE UNIQUE INDEX `agents_token_hash_unique` ON `agents` (`token_hash`);--> statement-breakpoint
|
|
16
|
+
CREATE UNIQUE INDEX `agents_workspace_name_unique` ON `agents` (`workspace_id`,`name`);--> statement-breakpoint
|
|
17
|
+
CREATE INDEX `idx_agents_workspace` ON `agents` (`workspace_id`);--> statement-breakpoint
|
|
18
|
+
CREATE INDEX `idx_agents_token` ON `agents` (`token_hash`);--> statement-breakpoint
|
|
19
|
+
CREATE TABLE `channel_members` (
|
|
20
|
+
`channel_id` text NOT NULL,
|
|
21
|
+
`agent_id` text NOT NULL,
|
|
22
|
+
`role` text DEFAULT 'member' NOT NULL,
|
|
23
|
+
`joined_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
24
|
+
`last_read_id` text,
|
|
25
|
+
PRIMARY KEY(`channel_id`, `agent_id`),
|
|
26
|
+
FOREIGN KEY (`channel_id`) REFERENCES `channels`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
27
|
+
FOREIGN KEY (`agent_id`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE cascade
|
|
28
|
+
);
|
|
29
|
+
--> statement-breakpoint
|
|
30
|
+
CREATE INDEX `idx_channel_members_agent` ON `channel_members` (`agent_id`);--> statement-breakpoint
|
|
31
|
+
CREATE TABLE `channels` (
|
|
32
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
33
|
+
`workspace_id` text NOT NULL,
|
|
34
|
+
`name` text NOT NULL,
|
|
35
|
+
`channel_type` integer DEFAULT 0 NOT NULL,
|
|
36
|
+
`topic` text,
|
|
37
|
+
`created_by` text,
|
|
38
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
39
|
+
`is_archived` integer DEFAULT false NOT NULL,
|
|
40
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
41
|
+
FOREIGN KEY (`created_by`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE no action
|
|
42
|
+
);
|
|
43
|
+
--> statement-breakpoint
|
|
44
|
+
CREATE UNIQUE INDEX `channels_workspace_name_unique` ON `channels` (`workspace_id`,`name`);--> statement-breakpoint
|
|
45
|
+
CREATE INDEX `idx_channels_workspace` ON `channels` (`workspace_id`);--> statement-breakpoint
|
|
46
|
+
CREATE TABLE `commands` (
|
|
47
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
48
|
+
`workspace_id` text NOT NULL,
|
|
49
|
+
`command` text NOT NULL,
|
|
50
|
+
`description` text NOT NULL,
|
|
51
|
+
`handler_agent_id` text NOT NULL,
|
|
52
|
+
`parameters` text DEFAULT '[]',
|
|
53
|
+
`is_active` integer DEFAULT true NOT NULL,
|
|
54
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
55
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
56
|
+
FOREIGN KEY (`handler_agent_id`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE cascade
|
|
57
|
+
);
|
|
58
|
+
--> statement-breakpoint
|
|
59
|
+
CREATE UNIQUE INDEX `commands_workspace_command_unique` ON `commands` (`workspace_id`,`command`);--> statement-breakpoint
|
|
60
|
+
CREATE INDEX `idx_commands_workspace` ON `commands` (`workspace_id`);--> statement-breakpoint
|
|
61
|
+
CREATE INDEX `idx_commands_handler` ON `commands` (`handler_agent_id`);--> statement-breakpoint
|
|
62
|
+
CREATE TABLE `dm_conversations` (
|
|
63
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
64
|
+
`workspace_id` text NOT NULL,
|
|
65
|
+
`channel_id` text NOT NULL,
|
|
66
|
+
`dm_type` text DEFAULT '1:1' NOT NULL,
|
|
67
|
+
`name` text,
|
|
68
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
69
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
70
|
+
FOREIGN KEY (`channel_id`) REFERENCES `channels`(`id`) ON UPDATE no action ON DELETE cascade
|
|
71
|
+
);
|
|
72
|
+
--> statement-breakpoint
|
|
73
|
+
CREATE INDEX `idx_dm_conversations_workspace` ON `dm_conversations` (`workspace_id`);--> statement-breakpoint
|
|
74
|
+
CREATE TABLE `dm_participants` (
|
|
75
|
+
`conversation_id` text NOT NULL,
|
|
76
|
+
`agent_id` text NOT NULL,
|
|
77
|
+
`joined_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
78
|
+
`left_at` integer,
|
|
79
|
+
PRIMARY KEY(`conversation_id`, `agent_id`),
|
|
80
|
+
FOREIGN KEY (`conversation_id`) REFERENCES `dm_conversations`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
81
|
+
FOREIGN KEY (`agent_id`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE cascade
|
|
82
|
+
);
|
|
83
|
+
--> statement-breakpoint
|
|
84
|
+
CREATE INDEX `idx_dm_participants_agent` ON `dm_participants` (`agent_id`);--> statement-breakpoint
|
|
85
|
+
CREATE TABLE `event_subscriptions` (
|
|
86
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
87
|
+
`workspace_id` text NOT NULL,
|
|
88
|
+
`events` text NOT NULL,
|
|
89
|
+
`filter` text,
|
|
90
|
+
`url` text NOT NULL,
|
|
91
|
+
`secret` text,
|
|
92
|
+
`is_active` integer DEFAULT true NOT NULL,
|
|
93
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
94
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade
|
|
95
|
+
);
|
|
96
|
+
--> statement-breakpoint
|
|
97
|
+
CREATE INDEX `idx_event_subscriptions_workspace` ON `event_subscriptions` (`workspace_id`);--> statement-breakpoint
|
|
98
|
+
CREATE TABLE `files` (
|
|
99
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
100
|
+
`workspace_id` text NOT NULL,
|
|
101
|
+
`uploaded_by` text NOT NULL,
|
|
102
|
+
`filename` text NOT NULL,
|
|
103
|
+
`content_type` text NOT NULL,
|
|
104
|
+
`size_bytes` integer NOT NULL,
|
|
105
|
+
`storage_key` text NOT NULL,
|
|
106
|
+
`status` text DEFAULT 'pending' NOT NULL,
|
|
107
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
108
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
109
|
+
FOREIGN KEY (`uploaded_by`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE no action
|
|
110
|
+
);
|
|
111
|
+
--> statement-breakpoint
|
|
112
|
+
CREATE INDEX `idx_files_workspace` ON `files` (`workspace_id`,`created_at`);--> statement-breakpoint
|
|
113
|
+
CREATE INDEX `idx_files_uploader` ON `files` (`uploaded_by`);--> statement-breakpoint
|
|
114
|
+
CREATE TABLE `message_attachments` (
|
|
115
|
+
`message_id` text NOT NULL,
|
|
116
|
+
`file_id` text NOT NULL,
|
|
117
|
+
`position` integer DEFAULT 0 NOT NULL,
|
|
118
|
+
PRIMARY KEY(`message_id`, `file_id`),
|
|
119
|
+
FOREIGN KEY (`message_id`) REFERENCES `messages`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
120
|
+
FOREIGN KEY (`file_id`) REFERENCES `files`(`id`) ON UPDATE no action ON DELETE cascade
|
|
121
|
+
);
|
|
122
|
+
--> statement-breakpoint
|
|
123
|
+
CREATE INDEX `idx_message_attachments_file` ON `message_attachments` (`file_id`);--> statement-breakpoint
|
|
124
|
+
CREATE TABLE `messages` (
|
|
125
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
126
|
+
`workspace_id` text NOT NULL,
|
|
127
|
+
`channel_id` text NOT NULL,
|
|
128
|
+
`agent_id` text NOT NULL,
|
|
129
|
+
`thread_id` text,
|
|
130
|
+
`body` text NOT NULL,
|
|
131
|
+
`blocks` text,
|
|
132
|
+
`has_attachments` integer DEFAULT false NOT NULL,
|
|
133
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
134
|
+
`updated_at` integer,
|
|
135
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
136
|
+
FOREIGN KEY (`channel_id`) REFERENCES `channels`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
137
|
+
FOREIGN KEY (`agent_id`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE no action,
|
|
138
|
+
FOREIGN KEY (`thread_id`) REFERENCES `messages`(`id`) ON UPDATE no action ON DELETE no action
|
|
139
|
+
);
|
|
140
|
+
--> statement-breakpoint
|
|
141
|
+
CREATE INDEX `idx_messages_channel_time` ON `messages` (`channel_id`,`id`);--> statement-breakpoint
|
|
142
|
+
CREATE INDEX `idx_messages_thread` ON `messages` (`thread_id`,`id`);--> statement-breakpoint
|
|
143
|
+
CREATE INDEX `idx_messages_workspace` ON `messages` (`workspace_id`,`id`);--> statement-breakpoint
|
|
144
|
+
CREATE TABLE `pending_events` (
|
|
145
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
146
|
+
`workspace_id` text NOT NULL,
|
|
147
|
+
`event_type` text NOT NULL,
|
|
148
|
+
`payload` text NOT NULL,
|
|
149
|
+
`status` text DEFAULT 'pending' NOT NULL,
|
|
150
|
+
`attempts` integer DEFAULT 0 NOT NULL,
|
|
151
|
+
`max_attempts` integer DEFAULT 5 NOT NULL,
|
|
152
|
+
`last_error` text,
|
|
153
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
154
|
+
`process_after` integer DEFAULT (unixepoch()) NOT NULL,
|
|
155
|
+
`completed_at` integer,
|
|
156
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade
|
|
157
|
+
);
|
|
158
|
+
--> statement-breakpoint
|
|
159
|
+
CREATE INDEX `idx_pending_events_status` ON `pending_events` (`status`,`process_after`);--> statement-breakpoint
|
|
160
|
+
CREATE INDEX `idx_pending_events_workspace` ON `pending_events` (`workspace_id`);--> statement-breakpoint
|
|
161
|
+
CREATE TABLE `reactions` (
|
|
162
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
163
|
+
`message_id` text NOT NULL,
|
|
164
|
+
`agent_id` text NOT NULL,
|
|
165
|
+
`emoji` text NOT NULL,
|
|
166
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
167
|
+
FOREIGN KEY (`message_id`) REFERENCES `messages`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
168
|
+
FOREIGN KEY (`agent_id`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE cascade
|
|
169
|
+
);
|
|
170
|
+
--> statement-breakpoint
|
|
171
|
+
CREATE UNIQUE INDEX `reactions_message_agent_emoji_unique` ON `reactions` (`message_id`,`agent_id`,`emoji`);--> statement-breakpoint
|
|
172
|
+
CREATE INDEX `idx_reactions_message` ON `reactions` (`message_id`);--> statement-breakpoint
|
|
173
|
+
CREATE TABLE `read_receipts` (
|
|
174
|
+
`message_id` text NOT NULL,
|
|
175
|
+
`agent_id` text NOT NULL,
|
|
176
|
+
`read_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
177
|
+
PRIMARY KEY(`message_id`, `agent_id`),
|
|
178
|
+
FOREIGN KEY (`message_id`) REFERENCES `messages`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
179
|
+
FOREIGN KEY (`agent_id`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE cascade
|
|
180
|
+
);
|
|
181
|
+
--> statement-breakpoint
|
|
182
|
+
CREATE INDEX `idx_read_receipts_message` ON `read_receipts` (`message_id`);--> statement-breakpoint
|
|
183
|
+
CREATE INDEX `idx_read_receipts_agent` ON `read_receipts` (`agent_id`,`read_at`);--> statement-breakpoint
|
|
184
|
+
CREATE TABLE `usage_records` (
|
|
185
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
186
|
+
`workspace_id` text NOT NULL,
|
|
187
|
+
`period_start` integer NOT NULL,
|
|
188
|
+
`period_end` integer NOT NULL,
|
|
189
|
+
`messages_sent` integer DEFAULT 0 NOT NULL,
|
|
190
|
+
`api_calls` integer DEFAULT 0 NOT NULL,
|
|
191
|
+
`files_uploaded` integer DEFAULT 0 NOT NULL,
|
|
192
|
+
`file_bytes` integer DEFAULT 0 NOT NULL,
|
|
193
|
+
`ws_minutes` integer DEFAULT 0 NOT NULL,
|
|
194
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
195
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade
|
|
196
|
+
);
|
|
197
|
+
--> statement-breakpoint
|
|
198
|
+
CREATE INDEX `idx_usage_workspace_period` ON `usage_records` (`workspace_id`,`period_start`);--> statement-breakpoint
|
|
199
|
+
CREATE TABLE `webhooks` (
|
|
200
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
201
|
+
`workspace_id` text NOT NULL,
|
|
202
|
+
`name` text NOT NULL,
|
|
203
|
+
`channel_id` text NOT NULL,
|
|
204
|
+
`created_by` text,
|
|
205
|
+
`is_active` integer DEFAULT true NOT NULL,
|
|
206
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
207
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
208
|
+
FOREIGN KEY (`channel_id`) REFERENCES `channels`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
209
|
+
FOREIGN KEY (`created_by`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE no action
|
|
210
|
+
);
|
|
211
|
+
--> statement-breakpoint
|
|
212
|
+
CREATE UNIQUE INDEX `webhooks_workspace_name_unique` ON `webhooks` (`workspace_id`,`name`);--> statement-breakpoint
|
|
213
|
+
CREATE INDEX `idx_webhooks_workspace` ON `webhooks` (`workspace_id`);--> statement-breakpoint
|
|
214
|
+
CREATE TABLE `workspaces` (
|
|
215
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
216
|
+
`name` text NOT NULL,
|
|
217
|
+
`api_key_hash` text NOT NULL,
|
|
218
|
+
`system_prompt` text,
|
|
219
|
+
`plan` text DEFAULT 'free' NOT NULL,
|
|
220
|
+
`stripe_customer_id` text,
|
|
221
|
+
`stripe_subscription_id` text,
|
|
222
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
223
|
+
`metadata` text DEFAULT '{}'
|
|
224
|
+
);
|
|
225
|
+
--> statement-breakpoint
|
|
226
|
+
CREATE UNIQUE INDEX `workspaces_name_unique` ON `workspaces` (`name`);--> statement-breakpoint
|
|
227
|
+
CREATE UNIQUE INDEX `workspaces_api_key_hash_unique` ON `workspaces` (`api_key_hash`);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
-- FTS5 virtual table for message full-text search.
|
|
2
|
+
-- Uses external content mode so the FTS index mirrors the messages table.
|
|
3
|
+
|
|
4
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
|
|
5
|
+
id UNINDEXED,
|
|
6
|
+
body,
|
|
7
|
+
content=messages,
|
|
8
|
+
content_rowid=rowid
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
-- Keep FTS index in sync via triggers.
|
|
12
|
+
CREATE TRIGGER IF NOT EXISTS messages_fts_insert AFTER INSERT ON messages BEGIN
|
|
13
|
+
INSERT INTO messages_fts(rowid, id, body) VALUES (NEW.rowid, NEW.id, NEW.body);
|
|
14
|
+
END;
|
|
15
|
+
|
|
16
|
+
CREATE TRIGGER IF NOT EXISTS messages_fts_update AFTER UPDATE OF body ON messages BEGIN
|
|
17
|
+
INSERT INTO messages_fts(messages_fts, rowid, id, body) VALUES('delete', OLD.rowid, OLD.id, OLD.body);
|
|
18
|
+
INSERT INTO messages_fts(rowid, id, body) VALUES (NEW.rowid, NEW.id, NEW.body);
|
|
19
|
+
END;
|
|
20
|
+
|
|
21
|
+
CREATE TRIGGER IF NOT EXISTS messages_fts_delete AFTER DELETE ON messages BEGIN
|
|
22
|
+
INSERT INTO messages_fts(messages_fts, rowid, id, body) VALUES('delete', OLD.rowid, OLD.id, OLD.body);
|
|
23
|
+
END;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- Migration: 0002_add_metadata_columns
|
|
2
|
+
-- Purpose: Add metadata JSON columns to channels and messages tables
|
|
3
|
+
-- for storing integration-specific data (e.g., Slack channel IDs, message timestamps)
|
|
4
|
+
--
|
|
5
|
+
-- SQLite ALTER TABLE ADD COLUMN constraints:
|
|
6
|
+
-- - Cannot add NOT NULL column without DEFAULT to table with existing rows
|
|
7
|
+
-- - DEFAULT must be a constant expression
|
|
8
|
+
-- - Column will have DEFAULT value for new rows; existing rows get the default retroactively
|
|
9
|
+
|
|
10
|
+
-- Add metadata column to channels table
|
|
11
|
+
-- Stores JSON object for integration-specific data (e.g., slack_channel_id)
|
|
12
|
+
ALTER TABLE channels ADD COLUMN metadata TEXT DEFAULT '{}';
|
|
13
|
+
|
|
14
|
+
-- Add metadata column to messages table
|
|
15
|
+
-- Stores JSON object for integration-specific data (e.g., slack_ts, slack_thread_ts)
|
|
16
|
+
ALTER TABLE messages ADD COLUMN metadata TEXT DEFAULT '{}';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
CREATE TABLE `a2a_agents` (
|
|
2
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`workspace_id` text NOT NULL,
|
|
4
|
+
`relay_agent_id` text NOT NULL,
|
|
5
|
+
`agent_card` text DEFAULT '{}' NOT NULL,
|
|
6
|
+
`external_url` text NOT NULL,
|
|
7
|
+
`auth_scheme` text,
|
|
8
|
+
`auth_credential` text,
|
|
9
|
+
`status` text DEFAULT 'active' NOT NULL,
|
|
10
|
+
`messages_sent` integer DEFAULT 0 NOT NULL,
|
|
11
|
+
`messages_recv` integer DEFAULT 0 NOT NULL,
|
|
12
|
+
`last_health` integer,
|
|
13
|
+
`health_failures` integer DEFAULT 0 NOT NULL,
|
|
14
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
15
|
+
`updated_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
16
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
17
|
+
FOREIGN KEY (`relay_agent_id`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE cascade
|
|
18
|
+
);
|
|
19
|
+
--> statement-breakpoint
|
|
20
|
+
CREATE INDEX `idx_a2a_agents_workspace` ON `a2a_agents` (`workspace_id`);--> statement-breakpoint
|
|
21
|
+
CREATE UNIQUE INDEX `idx_a2a_agents_relay_agent` ON `a2a_agents` (`relay_agent_id`);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
CREATE TABLE `certifications` (
|
|
2
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`workspace_id` text NOT NULL,
|
|
4
|
+
`agent_url` text NOT NULL,
|
|
5
|
+
`level` integer NOT NULL,
|
|
6
|
+
`source` text NOT NULL DEFAULT 'manual',
|
|
7
|
+
`status` text NOT NULL DEFAULT 'pending',
|
|
8
|
+
`passed` integer NOT NULL DEFAULT false,
|
|
9
|
+
`passed_tests` integer NOT NULL DEFAULT 0,
|
|
10
|
+
`total_tests` integer NOT NULL DEFAULT 0,
|
|
11
|
+
`monitor_enabled` integer NOT NULL DEFAULT false,
|
|
12
|
+
`monitor_interval_minutes` integer NOT NULL DEFAULT 60,
|
|
13
|
+
`last_run_at` integer,
|
|
14
|
+
`results` text DEFAULT '[]',
|
|
15
|
+
`created_at` integer NOT NULL DEFAULT (unixepoch()),
|
|
16
|
+
`updated_at` integer NOT NULL DEFAULT (unixepoch()),
|
|
17
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade
|
|
18
|
+
);
|
|
19
|
+
--> statement-breakpoint
|
|
20
|
+
CREATE INDEX `idx_certifications_workspace` ON `certifications` (`workspace_id`,`created_at`);
|
|
21
|
+
--> statement-breakpoint
|
|
22
|
+
CREATE INDEX `idx_certifications_agent_url` ON `certifications` (`agent_url`);
|
|
23
|
+
--> statement-breakpoint
|
|
24
|
+
CREATE INDEX `idx_certifications_monitor_enabled` ON `certifications` (`monitor_enabled`,`updated_at`);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
CREATE TABLE `message_logs` (
|
|
2
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`workspace_id` text NOT NULL,
|
|
4
|
+
`message_id` text NOT NULL,
|
|
5
|
+
`channel_id` text NOT NULL,
|
|
6
|
+
`agent_id` text NOT NULL,
|
|
7
|
+
`conversation_id` text,
|
|
8
|
+
`delivery_kind` text NOT NULL,
|
|
9
|
+
`body` text NOT NULL,
|
|
10
|
+
`content_type` text,
|
|
11
|
+
`metadata` text DEFAULT '{}',
|
|
12
|
+
`attachment_count` integer DEFAULT 0 NOT NULL,
|
|
13
|
+
`mention_count` integer DEFAULT 0 NOT NULL,
|
|
14
|
+
`latency_ms` integer DEFAULT 0 NOT NULL,
|
|
15
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
16
|
+
FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
17
|
+
FOREIGN KEY (`message_id`) REFERENCES `messages`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
18
|
+
FOREIGN KEY (`channel_id`) REFERENCES `channels`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
19
|
+
FOREIGN KEY (`agent_id`) REFERENCES `agents`(`id`) ON UPDATE no action ON DELETE cascade
|
|
20
|
+
);
|
|
21
|
+
--> statement-breakpoint
|
|
22
|
+
CREATE UNIQUE INDEX `message_logs_message_unique` ON `message_logs` (`message_id`);
|
|
23
|
+
--> statement-breakpoint
|
|
24
|
+
CREATE INDEX `idx_message_logs_workspace_time` ON `message_logs` (`workspace_id`, `id`);
|
|
25
|
+
--> statement-breakpoint
|
|
26
|
+
CREATE INDEX `idx_message_logs_agent_time` ON `message_logs` (`agent_id`, `id`);
|
|
27
|
+
--> statement-breakpoint
|
|
28
|
+
CREATE INDEX `idx_message_logs_channel_time` ON `message_logs` (`channel_id`, `id`);
|
|
29
|
+
--> statement-breakpoint
|
|
30
|
+
CREATE INDEX `idx_message_logs_conversation_time` ON `message_logs` (`conversation_id`, `id`);
|