UNPKG

lorehub

Version:

Capture and surface the collective wisdom of your codebase

128 lines 5.11 kB
import { sqliteTable, text, integer, real, primaryKey, index, uniqueIndex, } from 'drizzle-orm/sqlite-core'; import { sql } from 'drizzle-orm'; // Realms table (formerly realms) export const realms = sqliteTable('realms', { id: text('id').primaryKey(), name: text('name').notNull(), path: text('path').notNull().unique(), gitRemote: text('git_remote'), isMonorepo: integer('is_monorepo', { mode: 'boolean' }) .notNull() .default(false), provinces: text('provinces').notNull().default('[]'), // JSON array lastSeen: text('last_seen') .notNull() .default(sql `CURRENT_TIMESTAMP`), createdAt: text('created_at') .notNull() .default(sql `CURRENT_TIMESTAMP`), }, (table) => ({ pathIdx: uniqueIndex('realms_path_unique').on(table.path), })); export const lores = sqliteTable('lores', { id: text('id').primaryKey(), realmId: text('realm_id') .notNull() .references(() => realms.id, { onDelete: 'cascade' }), content: text('content').notNull(), why: text('why'), type: text('type').notNull(), provinces: text('provinces').notNull().default('[]'), // JSON array sigils: text('sigils').notNull().default('[]'), // JSON array confidence: integer('confidence').notNull().default(80), origin: text('origin').notNull(), // JSON object status: text('status').notNull().default('living'), createdAt: text('created_at') .notNull() .default(sql `CURRENT_TIMESTAMP`), updatedAt: text('updated_at') .notNull() .default(sql `CURRENT_TIMESTAMP`), }, (table) => [ index('idx_lores_realm_id').on(table.realmId), index('idx_lores_type').on(table.type), index('idx_lores_status').on(table.status), index('idx_lores_content').on(table.content), ]); // Lore relations table (formerly relations) export const loreRelations = sqliteTable('lore_relations', { fromLoreId: text('from_lore_id') .notNull() .references(() => lores.id, { onDelete: 'cascade' }), toLoreId: text('to_lore_id') .notNull() .references(() => lores.id, { onDelete: 'cascade' }), type: text('type').notNull(), strength: real('strength').notNull().default(1.0), metadata: text('metadata'), // JSON object createdAt: text('created_at') .notNull() .default(sql `CURRENT_TIMESTAMP`), }, (table) => [ primaryKey({ columns: [table.fromLoreId, table.toLoreId, table.type] }), index('idx_lore_relations_from').on(table.fromLoreId), index('idx_lore_relations_to').on(table.toLoreId), ]); // Workspaces table export const workspaces = sqliteTable('workspaces', { id: text('id').primaryKey(), name: text('name').notNull().unique(), syncEnabled: integer('sync_enabled', { mode: 'boolean' }) .notNull() .default(false), syncRepo: text('sync_repo'), // Git remote URL syncBranch: text('sync_branch').default('main'), autoSync: integer('auto_sync', { mode: 'boolean' }) .notNull() .default(true), syncInterval: integer('sync_interval').default(300), // seconds filters: text('filters'), // JSON object with sync filters isDefault: integer('is_default', { mode: 'boolean' }) .notNull() .default(false), createdAt: text('created_at') .notNull() .default(sql `CURRENT_TIMESTAMP`), updatedAt: text('updated_at') .notNull() .default(sql `CURRENT_TIMESTAMP`), }, (table) => ({ nameIdx: uniqueIndex('workspaces_name_unique').on(table.name), })); // Update realms table to add workspace association export const realmWorkspaces = sqliteTable('realm_workspaces', { realmId: text('realm_id') .notNull() .references(() => realms.id, { onDelete: 'cascade' }), workspaceId: text('workspace_id') .notNull() .references(() => workspaces.id, { onDelete: 'cascade' }), createdAt: text('created_at') .notNull() .default(sql `CURRENT_TIMESTAMP`), }, (table) => ({ pk: primaryKey({ columns: [table.realmId, table.workspaceId] }), realmIdx: index('idx_realm_workspaces_realm').on(table.realmId), workspaceIdx: index('idx_realm_workspaces_workspace').on(table.workspaceId), })); // Sync state tracking export const syncState = sqliteTable('sync_state', { workspaceId: text('workspace_id') .notNull() .references(() => workspaces.id, { onDelete: 'cascade' }), deviceId: text('device_id').notNull(), lastSyncAt: text('last_sync_at'), lastSyncCommit: text('last_sync_commit'), vectorClock: text('vector_clock'), // JSON object pendingChanges: integer('pending_changes').notNull().default(0), createdAt: text('created_at') .notNull() .default(sql `CURRENT_TIMESTAMP`), updatedAt: text('updated_at') .notNull() .default(sql `CURRENT_TIMESTAMP`), }, (table) => ({ pk: primaryKey({ columns: [table.workspaceId, table.deviceId] }), workspaceIdx: index('idx_sync_state_workspace').on(table.workspaceId), })); //# sourceMappingURL=schema.js.map