@happyvertical/smrt-chat 0.55.11 → 0.55.12
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/chunks/{chat-stream-n-7AqsgF.js → chat-stream-CE-vuz1u.js} +2 -2
- package/dist/chunks/{chat-stream-n-7AqsgF.js.map → chat-stream-CE-vuz1u.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/smrt-knowledge.json +3 -3
- package/dist/sveltekit.js +1 -1
- package/package.json +17 -17
|
@@ -7,7 +7,7 @@ import { RUNTIME_REPORT_BUCKETS, RUNTIME_REPORT_CHART_TYPES, RUNTIME_REPORT_FILT
|
|
|
7
7
|
import { getCurrentTenant, isSuperAdminBypass, isSystemContext, isTenancyEnabled, withTenant } from "@happyvertical/smrt-tenancy";
|
|
8
8
|
import { personaLearningMemory, resolvePersonaInstructions } from "@happyvertical/smrt-personas";
|
|
9
9
|
//#region src/__smrt-register__.ts
|
|
10
|
-
ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-chat","packageVersion":"0.55.11","objects":{"@happyvertical/smrt-chat:AgentSessionCollection":{"name":"agentsessioncollection","className":"AgentSessionCollection","qualifiedName":"@happyvertical/smrt-chat:AgentSessionCollection","collection":"agentsessions","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/AgentSessionCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"findActiveByParticipant":{"name":"findActiveByParticipant","async":true,"parameters":[{"name":"participantProfileId","type":"string","optional":false}],"returnType":"Promise<AgentSession[]>","isStatic":false,"isPublic":true},"findActiveSession":{"name":"findActiveSession","async":true,"parameters":[{"name":"agentId","type":"string","optional":false},{"name":"participantProfileId","type":"string","optional":false},{"name":"tenantId","type":"string | null","optional":false,"unionBranches":[{"type":"string"},{"type":"null"}]},{"name":"sessionKey","type":"string | null","optional":true,"unionBranches":[{"type":"string"},{"type":"null"}]}],"returnType":"Promise<AgentSession | null>","isStatic":false,"isPublic":true},"findOrCreate":{"name":"findOrCreate","async":true,"parameters":[{"name":"params","type":"object","optional":false,"memberTypes":["string","string | null","string[]"]}],"returnType":"Promise<AgentSession>","isStatic":false,"isPublic":true},"findByAgent":{"name":"findByAgent","async":true,"parameters":[{"name":"agentId","type":"string","optional":false}],"returnType":"Promise<AgentSession[]>","isStatic":false,"isPublic":true},"expireStale":{"name":"expireStale","async":true,"parameters":[{"name":"olderThan","type":"Date","optional":false},{"name":"scope","type":"object","optional":true,"memberTypes":["string | null","string"]}],"returnType":"Promise<number>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"agent_sessions"},"extends":"SmrtCollection","extendsTypeArg":"AgentSession","exportName":"AgentSessionCollection","collectionExportName":"AgentSessionCollectionCollection","schema":{"tableName":"agent_sessions","ddl":"CREATE TABLE IF NOT EXISTS \\"agent_sessions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_id\\" TEXT NOT NULL DEFAULT '',\\n \\"agent_profile_id\\" UUID,\\n \\"participant_profile_id\\" UUID NOT NULL,\\n \\"chat_room_id\\" UUID,\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"allowed_tools\\" TEXT DEFAULT '[]',\\n \\"session_context\\" TEXT DEFAULT '{}',\\n \\"system_prompt\\" TEXT DEFAULT '',\\n \\"message_count\\" INTEGER DEFAULT 0,\\n \\"total_tokens_used\\" INTEGER DEFAULT 0,\\n \\"max_tokens\\" INTEGER DEFAULT 0,\\n \\"max_messages\\" INTEGER DEFAULT 0,\\n \\"last_message_at\\" TIMESTAMP,\\n \\"expires_at\\" TIMESTAMP,\\n \\"closed_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"agent_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"participant_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"chat_room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"allowed_tools":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"session_context":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"system_prompt":{"type":"TEXT","notNull":false,"unique":false,"default":""},"message_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"total_tokens_used":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"max_tokens":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"max_messages":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"expires_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"closed_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"agent_sessions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"agent_sessions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"agent_sessions_agent_profile_id_idx","columns":["agent_profile_id"]},{"name":"agent_sessions_participant_profile_id_idx","columns":["participant_profile_id"]},{"name":"agent_sessions_chat_room_id_idx","columns":["chat_room_id"]}],"version":"56b10067"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatMessageCollection":{"name":"chatmessagecollection","className":"ChatMessageCollection","qualifiedName":"@happyvertical/smrt-chat:ChatMessageCollection","collection":"chatmessages","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatMessageCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getByRoom":{"name":"getByRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false},{"name":"options","type":"object","optional":true,"memberTypes":["number","string"]}],"returnType":"Promise<ChatMessage[]>","isStatic":false,"isPublic":true},"getByThread":{"name":"getByThread","async":true,"parameters":[{"name":"threadId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<ChatMessage[]>","isStatic":false,"isPublic":true},"getByAgentSession":{"name":"getByAgentSession","async":true,"parameters":[{"name":"agentSessionId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<ChatMessage[]>","isStatic":false,"isPublic":true},"search":{"name":"search","async":true,"parameters":[{"name":"filters","type":"any","optional":false,"typeUnresolved":true}],"returnType":"Promise<ChatMessage[]>","isStatic":false,"isPublic":true},"getUnreadCount":{"name":"getUnreadCount","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false},{"name":"lastReadMessageId","type":"string | null","optional":false,"unionBranches":[{"type":"string"},{"type":"null"}]}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"getLatestPerRoom":{"name":"getLatestPerRoom","async":true,"parameters":[{"name":"roomIds","type":"string[]","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<Map<string, ChatMessage>>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_messages"},"extends":"SmrtCollection","extendsTypeArg":"ChatMessage","exportName":"ChatMessageCollection","collectionExportName":"ChatMessageCollectionCollection","schema":{"tableName":"chat_messages","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_messages\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"thread_id\\" UUID,\\n \\"sender_profile_id\\" UUID NOT NULL,\\n \\"agent_session_id\\" UUID,\\n \\"content\\" TEXT DEFAULT '',\\n \\"message_type\\" TEXT NOT NULL DEFAULT 'text',\\n \\"role\\" TEXT NOT NULL DEFAULT 'user',\\n \\"is_edited\\" BOOLEAN DEFAULT FALSE,\\n \\"edited_at\\" TIMESTAMP,\\n \\"is_deleted\\" BOOLEAN DEFAULT FALSE,\\n \\"reply_to_message_id\\" UUID,\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"tool_call_data\\" TEXT,\\n \\"attachments\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"thread_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_threads","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"sender_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"agent_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"agent_sessions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"content":{"type":"TEXT","notNull":false,"unique":false,"default":""},"message_type":{"type":"TEXT","notNull":true,"unique":false,"default":"text"},"role":{"type":"TEXT","notNull":true,"unique":false,"default":"user"},"is_edited":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"edited_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"is_deleted":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"reply_to_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"tool_call_data":{"type":"TEXT","notNull":false,"unique":false},"attachments":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"chat_messages_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_messages_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_messages_room_id_idx","columns":["room_id"]},{"name":"chat_messages_thread_id_idx","columns":["thread_id"]},{"name":"chat_messages_sender_profile_id_idx","columns":["sender_profile_id"]},{"name":"chat_messages_agent_session_id_idx","columns":["agent_session_id"]},{"name":"chat_messages_reply_to_message_id_idx","columns":["reply_to_message_id"]}],"version":"cca14e75"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatParticipantCollection":{"name":"chatparticipantcollection","className":"ChatParticipantCollection","qualifiedName":"@happyvertical/smrt-chat:ChatParticipantCollection","collection":"chatparticipants","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatParticipantCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getByRoom":{"name":"getByRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant[]>","isStatic":false,"isPublic":true},"getByProfile":{"name":"getByProfile","async":true,"parameters":[{"name":"profileId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant[]>","isStatic":false,"isPublic":true},"findMembership":{"name":"findMembership","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"profileId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":true}],"returnType":"Promise<ChatParticipant | null>","isStatic":false,"isPublic":true},"findActiveMembership":{"name":"findActiveMembership","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"profileId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant | null>","isStatic":false,"isPublic":true},"isActiveMember":{"name":"isActiveMember","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"profileId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<boolean>","isStatic":false,"isPublic":true},"getOnlineInRoom":{"name":"getOnlineInRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant[]>","isStatic":false,"isPublic":true},"getAdminsInRoom":{"name":"getAdminsInRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant[]>","isStatic":false,"isPublic":true},"countInRoom":{"name":"countInRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_participants"},"extends":"SmrtCollection","extendsTypeArg":"ChatParticipant","exportName":"ChatParticipantCollection","collectionExportName":"ChatParticipantCollectionCollection","schema":{"tableName":"chat_participants","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_participants\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"profile_id\\" UUID NOT NULL,\\n \\"role\\" TEXT NOT NULL DEFAULT 'member',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"online_status\\" TEXT NOT NULL DEFAULT 'offline',\\n \\"last_read_message_id\\" UUID,\\n \\"last_seen_at\\" TIMESTAMP,\\n \\"joined_at\\" TIMESTAMP,\\n \\"nickname\\" TEXT DEFAULT '',\\n \\"is_muted\\" BOOLEAN DEFAULT FALSE,\\n \\"is_pinned\\" BOOLEAN DEFAULT FALSE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false,"default":"member"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"online_status":{"type":"TEXT","notNull":true,"unique":false,"default":"offline"},"last_read_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"last_seen_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"joined_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"nickname":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_muted":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"is_pinned":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false}},"indexes":[{"name":"chat_participants_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_participants_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_participants_room_id_idx","columns":["room_id"]},{"name":"chat_participants_profile_id_idx","columns":["profile_id"]},{"name":"chat_participants_last_read_message_id_idx","columns":["last_read_message_id"]}],"version":"07714046"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatReactionCollection":{"name":"chatreactioncollection","className":"ChatReactionCollection","qualifiedName":"@happyvertical/smrt-chat:ChatReactionCollection","collection":"chatreactions","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatReactionCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getByMessage":{"name":"getByMessage","async":true,"parameters":[{"name":"messageId","type":"string","optional":false}],"returnType":"Promise<ChatReaction[]>","isStatic":false,"isPublic":true},"getReactionCounts":{"name":"getReactionCounts","async":true,"parameters":[{"name":"messageId","type":"string","optional":false}],"returnType":"Promise<Map<string, object>>","isStatic":false,"isPublic":true},"toggle":{"name":"toggle","async":true,"parameters":[{"name":"messageId","type":"string","optional":false},{"name":"profileId","type":"string","optional":false},{"name":"emoji","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<object>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_reactions","cli":false},"extends":"SmrtCollection","extendsTypeArg":"ChatReaction","exportName":"ChatReactionCollection","collectionExportName":"ChatReactionCollectionCollection","schema":{"tableName":"chat_reactions","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_reactions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"message_id\\" UUID NOT NULL,\\n \\"profile_id\\" UUID NOT NULL,\\n \\"emoji\\" TEXT NOT NULL DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"emoji":{"type":"TEXT","notNull":true,"unique":false,"default":""}},"indexes":[{"name":"chat_reactions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_reactions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_reactions_message_id_idx","columns":["message_id"]},{"name":"chat_reactions_profile_id_idx","columns":["profile_id"]}],"version":"5b1969a6"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatRoomCollection":{"name":"chatroomcollection","className":"ChatRoomCollection","qualifiedName":"@happyvertical/smrt-chat:ChatRoomCollection","collection":"chatrooms","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatRoomCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"findByType":{"name":"findByType","async":true,"parameters":[{"name":"roomType","type":"ChatRoomType","optional":false}],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"findPublic":{"name":"findPublic","async":true,"parameters":[],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"findDMs":{"name":"findDMs","async":true,"parameters":[],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"findAgentRooms":{"name":"findAgentRooms","async":true,"parameters":[],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"search":{"name":"search","async":true,"parameters":[{"name":"query","type":"string","optional":false},{"name":"options","type":"object","optional":true,"memberTypes":["number"]}],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"findOrCreateDM":{"name":"findOrCreateDM","async":true,"parameters":[{"name":"profileId1","type":"string","optional":false},{"name":"profileId2","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false},{"name":"participants","type":"ChatParticipantCollection","optional":false}],"returnType":"Promise<ChatRoom>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_rooms"},"extends":"SmrtCollection","extendsTypeArg":"ChatRoom","exportName":"ChatRoomCollection","collectionExportName":"ChatRoomCollectionCollection","schema":{"tableName":"chat_rooms","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_rooms\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT DEFAULT '',\\n \\"room_type\\" TEXT NOT NULL DEFAULT 'public',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"topic\\" TEXT DEFAULT '',\\n \\"avatar_url\\" TEXT DEFAULT '',\\n \\"is_archived\\" BOOLEAN DEFAULT FALSE,\\n \\"max_participants\\" INTEGER DEFAULT 0,\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"created_by_profile_id\\" UUID,\\n \\"last_message_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""},"room_type":{"type":"TEXT","notNull":true,"unique":false,"default":"public"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"topic":{"type":"TEXT","notNull":false,"unique":false,"default":""},"avatar_url":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_archived":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"max_participants":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"created_by_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"chat_rooms_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_rooms_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_rooms_created_by_profile_id_idx","columns":["created_by_profile_id"]}],"version":"3665d881"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatThreadCollection":{"name":"chatthreadcollection","className":"ChatThreadCollection","qualifiedName":"@happyvertical/smrt-chat:ChatThreadCollection","collection":"chatthreads","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatThreadCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getByRoom":{"name":"getByRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatThread[]>","isStatic":false,"isPublic":true},"getActive":{"name":"getActive","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatThread[]>","isStatic":false,"isPublic":true},"getUnresolved":{"name":"getUnresolved","async":true,"parameters":[],"returnType":"Promise<ChatThread[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_threads"},"extends":"SmrtCollection","extendsTypeArg":"ChatThread","exportName":"ChatThreadCollection","collectionExportName":"ChatThreadCollectionCollection","schema":{"tableName":"chat_threads","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_threads\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"root_message_id\\" UUID,\\n \\"title\\" TEXT DEFAULT '',\\n \\"is_resolved\\" BOOLEAN DEFAULT FALSE,\\n \\"message_count\\" INTEGER DEFAULT 0,\\n \\"last_message_at\\" TIMESTAMP,\\n \\"participant_count\\" INTEGER DEFAULT 0\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"root_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"title":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_resolved":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"message_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"participant_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0}},"indexes":[{"name":"chat_threads_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_threads_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_threads_room_id_idx","columns":["room_id"]},{"name":"chat_threads_root_message_id_idx","columns":["root_message_id"]}],"version":"e1ae958b"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:VoiceGatewayTurnCollection":{"name":"voicegatewayturncollection","className":"VoiceGatewayTurnCollection","qualifiedName":"@happyvertical/smrt-chat:VoiceGatewayTurnCollection","collection":"voicegatewayturns","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/VoiceGatewayTurnCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"reserveTurn":{"name":"reserveTurn","async":true,"parameters":[{"name":"input","type":"object","optional":false,"memberTypes":["string"]}],"returnType":"Promise<VoiceGatewayTurn>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"voice_gateway_turns","cli":false},"extends":"SmrtCollection","extendsTypeArg":"VoiceGatewayTurn","exportName":"VoiceGatewayTurnCollection","collectionExportName":"VoiceGatewayTurnCollectionCollection","schema":{"tableName":"voice_gateway_turns","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_gateway_turns\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"voice_session_id\\" UUID NOT NULL,\\n \\"gateway_session_id\\" TEXT NOT NULL DEFAULT '',\\n \\"gateway_turn_id\\" TEXT NOT NULL DEFAULT '',\\n \\"target\\" TEXT NOT NULL DEFAULT 'smrt:chat',\\n \\"status\\" TEXT NOT NULL DEFAULT 'processing',\\n \\"completed_at\\" TIMESTAMP,\\n \\"failed_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"voice_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"voice_sessions","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"gateway_session_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"gateway_turn_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"target":{"type":"TEXT","notNull":true,"unique":false,"default":"smrt:chat"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"processing"},"completed_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"failed_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"voice_gateway_turns_voice_session_id_gateway_turn_id_idx","columns":["voice_session_id","gateway_turn_id"],"unique":true},{"name":"voice_gateway_turns_slug_context_idx","columns":["slug","context"]},{"name":"voice_gateway_turns_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c4d871b8"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:VoiceSessionCollection":{"name":"voicesessioncollection","className":"VoiceSessionCollection","qualifiedName":"@happyvertical/smrt-chat:VoiceSessionCollection","collection":"voicesessions","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/VoiceSessionCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getActiveById":{"name":"getActiveById","async":true,"parameters":[{"name":"id","type":"string","optional":false},{"name":"target","type":"any","optional":true,"default":"smrt:chat"}],"returnType":"Promise<VoiceSession | null>","isStatic":false,"isPublic":true},"expireStale":{"name":"expireStale","async":true,"parameters":[{"name":"olderThan","type":"Date","optional":true},{"name":"scope","type":"object","optional":true,"memberTypes":["string"]}],"returnType":"Promise<number>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"voice_sessions"},"extends":"SmrtCollection","extendsTypeArg":"VoiceSession","exportName":"VoiceSessionCollection","collectionExportName":"VoiceSessionCollectionCollection","schema":{"tableName":"voice_sessions","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_sessions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"gateway_session_id\\" TEXT NOT NULL DEFAULT '',\\n \\"actor_profile_id\\" UUID NOT NULL,\\n \\"actor_user_id\\" UUID,\\n \\"persona_id\\" UUID NOT NULL,\\n \\"agent_session_id\\" UUID NOT NULL,\\n \\"chat_room_id\\" UUID NOT NULL,\\n \\"thread_id\\" UUID,\\n \\"target\\" TEXT NOT NULL DEFAULT 'smrt:chat',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"expires_at\\" TIMESTAMP NOT NULL,\\n \\"last_turn_at\\" TIMESTAMP,\\n \\"last_gateway_turn_id\\" TEXT,\\n \\"persona_snapshot\\" TEXT DEFAULT '{}',\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"processed_turn_ids\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"gateway_session_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"actor_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"actor_user_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"persona_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"agent_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"agent_sessions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"chat_room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"thread_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_threads","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"target":{"type":"TEXT","notNull":true,"unique":false,"default":"smrt:chat"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"expires_at":{"type":"TIMESTAMP","notNull":true,"unique":false},"last_turn_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"last_gateway_turn_id":{"type":"TEXT","notNull":false,"unique":false},"persona_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"processed_turn_ids":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"voice_sessions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"voice_sessions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"voice_sessions_actor_profile_id_idx","columns":["actor_profile_id"]},{"name":"voice_sessions_actor_user_id_idx","columns":["actor_user_id"]},{"name":"voice_sessions_persona_id_idx","columns":["persona_id"]},{"name":"voice_sessions_agent_session_id_idx","columns":["agent_session_id"]},{"name":"voice_sessions_chat_room_id_idx","columns":["chat_room_id"]},{"name":"voice_sessions_thread_id_idx","columns":["thread_id"]}],"version":"d5cfb90c"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:AgentSession":{"name":"agentsession","className":"AgentSession","qualifiedName":"@happyvertical/smrt-chat:AgentSession","collection":"agentsessions","description":"Agent conversation session.","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/AgentSession.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"agentId":{"type":"text","required":true,"default":"","_meta":{"required":true}},"agentProfileId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-profiles:Profile"},"participantProfileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"chatRoomId":{"type":"foreignKey","required":false,"related":"ChatRoom"},"status":{"type":"text","required":true,"default":"active","_meta":{"required":true},"enum":["active","closed","expired"]},"allowedTools":{"type":"text","required":false,"default":"[]"},"sessionContext":{"type":"text","required":false,"default":"{}","_meta":{"sensitive":true},"sensitive":true},"systemPrompt":{"type":"text","required":false,"default":""},"messageCount":{"type":"integer","required":false,"default":0},"totalTokensUsed":{"type":"integer","required":false,"default":0},"maxTokens":{"type":"integer","required":false,"default":0},"maxMessages":{"type":"integer","required":false,"default":0},"lastMessageAt":{"type":"datetime","required":false},"expiresAt":{"type":"datetime","required":false},"closedAt":{"type":"datetime","required":false}},"methods":{"getAllowedTools":{"name":"getAllowedTools","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"setAllowedTools":{"name":"setAllowedTools","async":false,"parameters":[{"name":"tools","type":"string[]","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"isToolAllowed":{"name":"isToolAllowed","async":false,"parameters":[{"name":"toolName","type":"string","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true},"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isExpired":{"name":"isExpired","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"close":{"name":"close","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"expire":{"name":"expire","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getSessionContext":{"name":"getSessionContext","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setSessionContext":{"name":"setSessionContext","async":false,"parameters":[{"name":"ctx","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getSessionKey":{"name":"getSessionKey","async":false,"parameters":[],"returnType":"string | null","isStatic":false,"isPublic":true},"updateSessionContext":{"name":"updateSessionContext","async":true,"parameters":[{"name":"updates","type":"Record<string, unknown>","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"recordMessage":{"name":"recordMessage","async":true,"parameters":[{"name":"tokensUsed","type":"number","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"agent_sessions","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AgentSession","collectionExportName":"AgentSessionCollection","validationRules":[{"field":"agentId","rule":"required","fieldType":"text"},{"field":"participantProfileId","rule":"required","fieldType":"crossPackageRef"},{"field":"status","rule":"required","fieldType":"text"}],"schema":{"tableName":"agent_sessions","ddl":"CREATE TABLE IF NOT EXISTS \\"agent_sessions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_id\\" TEXT NOT NULL DEFAULT '',\\n \\"agent_profile_id\\" UUID,\\n \\"participant_profile_id\\" UUID NOT NULL,\\n \\"chat_room_id\\" UUID,\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"allowed_tools\\" TEXT DEFAULT '[]',\\n \\"session_context\\" TEXT DEFAULT '{}',\\n \\"system_prompt\\" TEXT DEFAULT '',\\n \\"message_count\\" INTEGER DEFAULT 0,\\n \\"total_tokens_used\\" INTEGER DEFAULT 0,\\n \\"max_tokens\\" INTEGER DEFAULT 0,\\n \\"max_messages\\" INTEGER DEFAULT 0,\\n \\"last_message_at\\" TIMESTAMP,\\n \\"expires_at\\" TIMESTAMP,\\n \\"closed_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"agent_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"participant_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"chat_room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"allowed_tools":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"session_context":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"system_prompt":{"type":"TEXT","notNull":false,"unique":false,"default":""},"message_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"total_tokens_used":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"max_tokens":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"max_messages":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"expires_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"closed_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"agent_sessions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"agent_sessions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"agent_sessions_agent_profile_id_idx","columns":["agent_profile_id"]},{"name":"agent_sessions_participant_profile_id_idx","columns":["participant_profile_id"]},{"name":"agent_sessions_chat_room_id_idx","columns":["chat_room_id"]}],"version":"56b10067"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatMessage":{"name":"chatmessage","className":"ChatMessage","qualifiedName":"@happyvertical/smrt-chat:ChatMessage","collection":"chatmessages","description":"Chat message. Internal model \u2014 all mutations must go through the membership-checked ChatService (S5 #1392).","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatMessage.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"roomId":{"type":"foreignKey","required":true,"related":"ChatRoom","_meta":{"required":true}},"threadId":{"type":"foreignKey","required":false,"related":"ChatThread"},"senderProfileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"agentSessionId":{"type":"foreignKey","required":false,"related":"AgentSession"},"content":{"type":"text","required":false,"default":""},"messageType":{"type":"text","required":true,"default":"text","_meta":{"required":true},"enum":["text","system","action","file","tool_call","tool_result"]},"role":{"type":"text","required":true,"default":"user","_meta":{"required":true},"enum":["user","assistant","system","tool"]},"isEdited":{"type":"boolean","required":false,"default":false},"editedAt":{"type":"datetime","required":false},"isDeleted":{"type":"boolean","required":false,"default":false},"replyToMessageId":{"type":"foreignKey","required":false,"related":"ChatMessage"},"metadata":{"type":"text","required":false,"default":"{}"},"toolCallData":{"type":"text","required":false},"attachments":{"type":"text","required":false,"default":"[]"}},"methods":{"getAttachments":{"name":"getAttachments","async":false,"parameters":[],"returnType":"Array<object>","isStatic":false,"isPublic":true},"setAttachments":{"name":"setAttachments","async":false,"parameters":[{"name":"items","type":"Array<object>","optional":false,"memberTypes":["string","number"]}],"returnType":"void","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"data","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getToolCallData":{"name":"getToolCallData","async":false,"parameters":[],"returnType":"Record<string, unknown> | null","isStatic":false,"isPublic":true},"setToolCallData":{"name":"setToolCallData","async":false,"parameters":[{"name":"data","type":"Record<string, unknown> | null","optional":false,"unionBranches":[{"type":"Record<string, unknown>"},{"type":"null"}]}],"returnType":"void","isStatic":false,"isPublic":true},"hasAttachments":{"name":"hasAttachments","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isToolCall":{"name":"isToolCall","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isToolResult":{"name":"isToolResult","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isFromAgent":{"name":"isFromAgent","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isSystemMessage":{"name":"isSystemMessage","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"edit":{"name":"edit","async":true,"parameters":[{"name":"newContent","type":"string","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"softDelete":{"name":"softDelete","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getPreview":{"name":"getPreview","async":false,"parameters":[{"name":"maxLength","type":"any","optional":true}],"returnType":"string","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_messages","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatMessage","collectionExportName":"ChatMessageCollection","validationRules":[{"field":"roomId","rule":"required","fieldType":"foreignKey"},{"field":"senderProfileId","rule":"required","fieldType":"crossPackageRef"},{"field":"messageType","rule":"required","fieldType":"text"},{"field":"role","rule":"required","fieldType":"text"}],"schema":{"tableName":"chat_messages","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_messages\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"thread_id\\" UUID,\\n \\"sender_profile_id\\" UUID NOT NULL,\\n \\"agent_session_id\\" UUID,\\n \\"content\\" TEXT DEFAULT '',\\n \\"message_type\\" TEXT NOT NULL DEFAULT 'text',\\n \\"role\\" TEXT NOT NULL DEFAULT 'user',\\n \\"is_edited\\" BOOLEAN DEFAULT FALSE,\\n \\"edited_at\\" TIMESTAMP,\\n \\"is_deleted\\" BOOLEAN DEFAULT FALSE,\\n \\"reply_to_message_id\\" UUID,\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"tool_call_data\\" TEXT,\\n \\"attachments\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"thread_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_threads","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"sender_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"agent_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"agent_sessions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"content":{"type":"TEXT","notNull":false,"unique":false,"default":""},"message_type":{"type":"TEXT","notNull":true,"unique":false,"default":"text"},"role":{"type":"TEXT","notNull":true,"unique":false,"default":"user"},"is_edited":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"edited_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"is_deleted":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"reply_to_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"tool_call_data":{"type":"TEXT","notNull":false,"unique":false},"attachments":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"chat_messages_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_messages_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_messages_room_id_idx","columns":["room_id"]},{"name":"chat_messages_thread_id_idx","columns":["thread_id"]},{"name":"chat_messages_sender_profile_id_idx","columns":["sender_profile_id"]},{"name":"chat_messages_agent_session_id_idx","columns":["agent_session_id"]},{"name":"chat_messages_reply_to_message_id_idx","columns":["reply_to_message_id"]}],"version":"cca14e75"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatParticipant":{"name":"chatparticipant","className":"ChatParticipant","qualifiedName":"@happyvertical/smrt-chat:ChatParticipant","collection":"chatparticipants","description":"Room membership row. Internal model \u2014 membership must be established and mutated only through the membership/owner-checked ChatService (S5 #1392).","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatParticipant.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"roomId":{"type":"foreignKey","required":true,"related":"ChatRoom","_meta":{"required":true}},"profileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"role":{"type":"text","required":true,"default":"member","_meta":{"required":true},"enum":["owner","admin","member","viewer"]},"status":{"type":"text","required":true,"default":"active","_meta":{"required":true},"enum":["active","left","kicked","banned"]},"onlineStatus":{"type":"text","required":true,"default":"offline","_meta":{"required":true},"enum":["online","away","dnd","offline"]},"lastReadMessageId":{"type":"foreignKey","required":false,"related":"ChatMessage"},"lastSeenAt":{"type":"datetime","required":false},"joinedAt":{"type":"datetime","required":false},"nickname":{"type":"text","required":false,"default":""},"isMuted":{"type":"boolean","required":false,"default":false},"isPinned":{"type":"boolean","required":false,"default":false}},"methods":{"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isOwner":{"name":"isOwner","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isAdmin":{"name":"isAdmin","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"markRead":{"name":"markRead","async":true,"parameters":[{"name":"messageId","type":"string","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"leave":{"name":"leave","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"setOnline":{"name":"setOnline","async":true,"parameters":[{"name":"status","type":"OnlineStatus","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_participants","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatParticipant","collectionExportName":"ChatParticipantCollection","validationRules":[{"field":"roomId","rule":"required","fieldType":"foreignKey"},{"field":"profileId","rule":"required","fieldType":"crossPackageRef"},{"field":"role","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"},{"field":"onlineStatus","rule":"required","fieldType":"text"}],"schema":{"tableName":"chat_participants","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_participants\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"profile_id\\" UUID NOT NULL,\\n \\"role\\" TEXT NOT NULL DEFAULT 'member',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"online_status\\" TEXT NOT NULL DEFAULT 'offline',\\n \\"last_read_message_id\\" UUID,\\n \\"last_seen_at\\" TIMESTAMP,\\n \\"joined_at\\" TIMESTAMP,\\n \\"nickname\\" TEXT DEFAULT '',\\n \\"is_muted\\" BOOLEAN DEFAULT FALSE,\\n \\"is_pinned\\" BOOLEAN DEFAULT FALSE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false,"default":"member"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"online_status":{"type":"TEXT","notNull":true,"unique":false,"default":"offline"},"last_read_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"last_seen_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"joined_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"nickname":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_muted":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"is_pinned":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false}},"indexes":[{"name":"chat_participants_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_participants_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_participants_room_id_idx","columns":["room_id"]},{"name":"chat_participants_profile_id_idx","columns":["profile_id"]},{"name":"chat_participants_last_read_message_id_idx","columns":["last_read_message_id"]}],"version":"07714046"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatReaction":{"name":"chatreaction","className":"ChatReaction","qualifiedName":"@happyvertical/smrt-chat:ChatReaction","collection":"chatreactions","description":"Message reaction. Internal model \u2014 reactions must be added/removed only through the membership-checked ChatService (S5 #1392).","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatReaction.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"messageId":{"type":"foreignKey","required":true,"related":"ChatMessage","_meta":{"required":true}},"profileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"emoji":{"type":"text","required":true,"default":"","_meta":{"required":true}}},"methods":{},"decoratorConfig":{"tableName":"chat_reactions","api":{"include":["list"]},"mcp":{"include":["list"]},"cli":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatReaction","collectionExportName":"ChatReactionCollection","validationRules":[{"field":"messageId","rule":"required","fieldType":"foreignKey"},{"field":"profileId","rule":"required","fieldType":"crossPackageRef"},{"field":"emoji","rule":"required","fieldType":"text"}],"schema":{"tableName":"chat_reactions","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_reactions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"message_id\\" UUID NOT NULL,\\n \\"profile_id\\" UUID NOT NULL,\\n \\"emoji\\" TEXT NOT NULL DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"emoji":{"type":"TEXT","notNull":true,"unique":false,"default":""}},"indexes":[{"name":"chat_reactions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_reactions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_reactions_message_id_idx","columns":["message_id"]},{"name":"chat_reactions_profile_id_idx","columns":["profile_id"]}],"version":"5b1969a6"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatRoom":{"name":"chatroom","className":"ChatRoom","qualifiedName":"@happyvertical/smrt-chat:ChatRoom","collection":"chatrooms","description":"Chat room supporting public channels, private groups, DMs, and agent conversations.","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatRoom.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"name":{"type":"text","required":false,"default":""},"description":{"type":"text","required":false,"default":""},"roomType":{"type":"text","required":true,"default":"public","_meta":{"required":true},"enum":["public","private","dm","agent"]},"status":{"type":"text","required":true,"default":"active","_meta":{"required":true},"enum":["active","archived","deleted"]},"topic":{"type":"text","required":false,"default":""},"avatarUrl":{"type":"text","required":false,"default":""},"isArchived":{"type":"boolean","required":false,"default":false},"maxParticipants":{"type":"integer","required":false,"default":0},"metadata":{"type":"text","required":false,"default":"{}"},"createdByProfileId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-profiles:Profile"},"lastMessageAt":{"type":"datetime","required":false}},"methods":{"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"ChatRoomMetadata","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"data","type":"ChatRoomMetadata","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"updateMetadata":{"name":"updateMetadata","async":false,"parameters":[{"name":"updates","type":"ChatRoomMetadata","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"isDM":{"name":"isDM","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isAgentRoom":{"name":"isAgentRoom","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isPublic":{"name":"isPublic","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"archive":{"name":"archive","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"unarchive":{"name":"unarchive","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_rooms","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatRoom","collectionExportName":"ChatRoomCollection","displayLabelField":"name","validationRules":[{"field":"roomType","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"}],"schema":{"tableName":"chat_rooms","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_rooms\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT DEFAULT '',\\n \\"room_type\\" TEXT NOT NULL DEFAULT 'public',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"topic\\" TEXT DEFAULT '',\\n \\"avatar_url\\" TEXT DEFAULT '',\\n \\"is_archived\\" BOOLEAN DEFAULT FALSE,\\n \\"max_participants\\" INTEGER DEFAULT 0,\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"created_by_profile_id\\" UUID,\\n \\"last_message_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""},"room_type":{"type":"TEXT","notNull":true,"unique":false,"default":"public"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"topic":{"type":"TEXT","notNull":false,"unique":false,"default":""},"avatar_url":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_archived":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"max_participants":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"created_by_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"chat_rooms_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_rooms_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_rooms_created_by_profile_id_idx","columns":["created_by_profile_id"]}],"version":"3665d881"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatThread":{"name":"chatthread","className":"ChatThread","qualifiedName":"@happyvertical/smrt-chat:ChatThread","collection":"chatthreads","description":"Conversation thread. Internal model \u2014 threads must be created/mutated only through the membership-checked ChatService (S5 #1392).","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatThread.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"roomId":{"type":"foreignKey","required":true,"related":"ChatRoom","_meta":{"required":true}},"rootMessageId":{"type":"foreignKey","required":false,"related":"ChatMessage","_meta":{"nullable":true}},"title":{"type":"text","required":false,"default":""},"isResolved":{"type":"boolean","required":false,"default":false},"messageCount":{"type":"integer","required":false,"default":0},"lastMessageAt":{"type":"datetime","required":false},"participantCount":{"type":"integer","required":false,"default":0}},"methods":{"resolve":{"name":"resolve","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"reopen":{"name":"reopen","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_threads","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatThread","collectionExportName":"ChatThreadCollection","displayLabelField":"title","validationRules":[{"field":"roomId","rule":"required","fieldType":"foreignKey"}],"schema":{"tableName":"chat_threads","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_threads\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"root_message_id\\" UUID,\\n \\"title\\" TEXT DEFAULT '',\\n \\"is_resolved\\" BOOLEAN DEFAULT FALSE,\\n \\"message_count\\" INTEGER DEFAULT 0,\\n \\"last_message_at\\" TIMESTAMP,\\n \\"participant_count\\" INTEGER DEFAULT 0\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"root_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"title":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_resolved":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"message_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"participant_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0}},"indexes":[{"name":"chat_threads_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_threads_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_threads_room_id_idx","columns":["room_id"]},{"name":"chat_threads_root_message_id_idx","columns":["root_message_id"]}],"version":"e1ae958b"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:VoiceGatewayTurn":{"name":"voicegatewayturn","className":"VoiceGatewayTurn","qualifiedName":"@happyvertical/smrt-chat:VoiceGatewayTurn","collection":"voicegatewayturns","description":"Durable reservation for a gateway turn. The natural key makes turn_id replay checks concurrency-safe before transcript messages are written.","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/VoiceGatewayTurn.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"voiceSessionId":{"type":"foreignKey","required":true,"related":"VoiceSession","_meta":{"required":true}},"gatewaySessionId":{"type":"text","required":true,"default":"","_meta":{"required":true}},"gatewayTurnId":{"type":"text","required":true,"default":"","_meta":{"required":true}},"target":{"type":"text","required":true,"default":"smrt:chat","_meta":{"required":true}},"status":{"type":"text","required":true,"default":"processing","_meta":{"required":true},"enum":["processing","completed","failed"]},"completedAt":{"type":"datetime","required":false},"failedAt":{"type":"datetime","required":false}},"methods":{"complete":{"name":"complete","async":true,"parameters":[{"name":"now","type":"Date","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"fail":{"name":"fail","async":true,"parameters":[{"name":"now","type":"Date","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"voice_gateway_turns","conflictColumns":["voice_session_id","gateway_turn_id"],"api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"VoiceGatewayTurn","collectionExportName":"VoiceGatewayTurnCollection","validationRules":[{"field":"voiceSessionId","rule":"required","fieldType":"foreignKey"},{"field":"gatewaySessionId","rule":"required","fieldType":"text"},{"field":"gatewayTurnId","rule":"required","fieldType":"text"},{"field":"target","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"}],"schema":{"tableName":"voice_gateway_turns","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_gateway_turns\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"voice_session_id\\" UUID NOT NULL,\\n \\"gateway_session_id\\" TEXT NOT NULL DEFAULT '',\\n \\"gateway_turn_id\\" TEXT NOT NULL DEFAULT '',\\n \\"target\\" TEXT NOT NULL DEFAULT 'smrt:chat',\\n \\"status\\" TEXT NOT NULL DEFAULT 'processing',\\n \\"completed_at\\" TIMESTAMP,\\n \\"failed_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"voice_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"voice_sessions","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"gateway_session_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"gateway_turn_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"target":{"type":"TEXT","notNull":true,"unique":false,"default":"smrt:chat"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"processing"},"completed_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"failed_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"voice_gateway_turns_voice_session_id_gateway_turn_id_idx","columns":["voice_session_id","gateway_turn_id"],"unique":true},{"name":"voice_gateway_turns_slug_context_idx","columns":["slug","context"]},{"name":"voice_gateway_turns_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c4d871b8"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:VoiceSession":{"name":"voicesession","className":"VoiceSession","qualifiedName":"@happyvertical/smrt-chat:VoiceSession","collection":"voicesessions","description":"Short-lived binding proving a voice gateway turn belongs to an authenticated SMRT actor, persona, and chat session.","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/VoiceSession.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"gatewaySessionId":{"type":"text","required":true,"default":"","_meta":{"required":true}},"actorProfileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"actorUserId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:User","_meta":{"nullable":true}},"personaId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-personas:AgentPersona"},"agentSessionId":{"type":"foreignKey","required":true,"related":"AgentSession","_meta":{"required":true}},"chatRoomId":{"type":"foreignKey","required":true,"related":"ChatRoom","_meta":{"required":true}},"threadId":{"type":"foreignKey","required":false,"related":"ChatThread"},"target":{"type":"text","required":true,"default":"smrt:chat","_meta":{"required":true}},"status":{"type":"text","required":true,"default":"active","_meta":{"required":true},"enum":["active","expired","revoked"]},"expiresAt":{"type":"datetime","required":true,"_meta":{"required":true}},"lastTurnAt":{"type":"datetime","required":false},"lastGatewayTurnId":{"type":"text","required":false},"personaSnapshot":{"type":"text","required":false,"default":"{}"},"metadata":{"type":"text","required":false,"default":"{}"},"processedTurnIds":{"type":"text","required":false,"default":"[]"}},"methods":{"isActive":{"name":"isActive","async":false,"parameters":[{"name":"now","type":"Date","optional":true}],"returnType":"boolean","isStatic":false,"isPublic":true},"isExpired":{"name":"isExpired","async":false,"parameters":[{"name":"now","type":"Date","optional":true}],"returnType":"boolean","isStatic":false,"isPublic":true},"expire":{"name":"expire","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"revoke":{"name":"revoke","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getPersonaSnapshot":{"name":"getPersonaSnapshot","async":false,"parameters":[],"returnType":"ConversationPersona","isStatic":false,"isPublic":true},"setPersonaSnapshot":{"name":"setPersonaSnapshot","async":false,"parameters":[{"name":"persona","type":"ConversationPersona","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"metadata","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getProcessedTurnIds":{"name":"getProcessedTurnIds","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"hasProcessedTurn":{"name":"hasProcessedTurn","async":false,"parameters":[{"name":"turnId","type":"string","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true},"recordGatewayTurn":{"name":"recordGatewayTurn","async":false,"parameters":[{"name":"turnId","type":"string","optional":false},{"name":"maxRememberedTurns","type":"any","optional":true}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"voice_sessions","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"VoiceSession","collectionExportName":"VoiceSessionCollection","validationRules":[{"field":"gatewaySessionId","rule":"required","fieldType":"text"},{"field":"actorProfileId","rule":"required","fieldType":"crossPackageRef"},{"field":"personaId","rule":"required","fieldType":"crossPackageRef"},{"field":"agentSessionId","rule":"required","fieldType":"foreignKey"},{"field":"chatRoomId","rule":"required","fieldType":"foreignKey"},{"field":"target","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"},{"field":"expiresAt","rule":"required","fieldType":"datetime"}],"schema":{"tableName":"voice_sessions","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_sessions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"gateway_session_id\\" TEXT NOT NULL DEFAULT '',\\n \\"actor_profile_id\\" UUID NOT NULL,\\n \\"actor_user_id\\" UUID,\\n \\"persona_id\\" UUID NOT NULL,\\n \\"agent_session_id\\" UUID NOT NULL,\\n \\"chat_room_id\\" UUID NOT NULL,\\n \\"thread_id\\" UUID,\\n \\"target\\" TEXT NOT NULL DEFAULT 'smrt:chat',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"expires_at\\" TIMESTAMP NOT NULL,\\n \\"last_turn_at\\" TIMESTAMP,\\n \\"last_gateway_turn_id\\" TEXT,\\n \\"persona_snapshot\\" TEXT DEFAULT '{}',\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"processed_turn_ids\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"gateway_session_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"actor_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"actor_user_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"persona_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"agent_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"agent_sessions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"chat_room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"thread_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_threads","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"target":{"type":"TEXT","notNull":true,"unique":false,"default":"smrt:chat"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"expires_at":{"type":"TIMESTAMP","notNull":true,"unique":false},"last_turn_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"last_gateway_turn_id":{"type":"TEXT","notNull":false,"unique":false},"persona_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"processed_turn_ids":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"voice_sessions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"voice_sessions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"voice_sessions_actor_profile_id_idx","columns":["actor_profile_id"]},{"name":"voice_sessions_actor_user_id_idx","columns":["actor_user_id"]},{"name":"voice_sessions_persona_id_idx","columns":["persona_id"]},{"name":"voice_sessions_agent_session_id_idx","columns":["agent_session_id"]},{"name":"voice_sessions_chat_room_id_idx","columns":["chat_room_id"]},{"name":"voice_sessions_thread_id_idx","columns":["thread_id"]}],"version":"d5cfb90c"},"importPath":"@happyvertical/smrt-chat"}},"moduleType":"smrt","recipes":[{"id":"chat.assistant","className":"AssistantRecipe","label":"Assistant","summary":"Ask an AI assistant about the page you are on, from a dock in the app shell.","synonyms":["ai assistant","ai chat","copilot","chatbot","ask ai","helper"],"models":["@happyvertical/smrt-chat:AgentSession","@happyvertical/smrt-chat:ChatRoom","@happyvertical/smrt-chat:ChatParticipant","@happyvertical/smrt-chat:ChatThread","@happyvertical/smrt-chat:ChatMessage"],"nav":[],"requires":[],"help":{"markdown":"## Overview\\n\\nThe assistant is a chat panel that opens from a button in the app's top bar. It\\nsees the page you are on, so you can ask about what is in front of you and get\\nan answer without leaving it.\\n\\nYou can keep several conversations and come back to them later. The assistant\\nonly reaches the data and actions the app owner allows, and it works with your\\nown permissions: it cannot show you anything you could not open yourself.\\n\\n## Tasks\\n\\n### Ask a question\\n\\n1. Choose the assistant button in the top bar to open the panel.\\n2. Type your question and send it.\\n3. Read the reply as it arrives. Open the panel again from any page to carry on.\\n\\n### Start a new conversation\\n\\n1. Open the panel and choose the conversation list.\\n2. Start a new conversation, or pick an earlier one to carry on.\\n\\n### Approve a change\\n\\nWhen the assistant proposes a change, it shows what will happen and waits.\\n\\n1. Read the proposed change.\\n2. Confirm it to go ahead, or reject it. Nothing changes until you confirm.\\n\\n### Choose a model\\n\\nIf the app offers more than one model, pick one from the list in the panel\\nbefore you send a message.\\n\\n## What the app owner sets up\\n\\n- A model. Hosted models need the service key their provider issues, stored as\\n a secret in the app (\`OPENAI_API_KEY\`, \`ANTHROPIC_API_KEY\` or\\n \`GEMINI_API_KEY\`); only the key for the model the app uses is needed. Models\\n that run in the browser need no key.\\n- The tools the assistant may use. It is offered nothing unless the app lists\\n it, so an empty list means conversation only.\\n- Optionally, report tools. An app can let the assistant draft a report from a\\n request, preview it, and save it only after a person approves that exact\\n report.\\n","fieldRefs":[]},"surfaces":[{"kind":"shell-widget","slot":"header.end","export":"@happyvertical/smrt-chat/svelte#AssistantDock","label":"Assistant","icon":"bot"}],"providers":[{"id":"llm","kind":"llm","options":["openai","anthropic","gemini","webllm","bitgpu"],"required":true,"secrets":["OPENAI_API_KEY","ANTHROPIC_API_KEY","GEMINI_API_KEY"],"browserOptions":["webllm","bitgpu"]}],"runtime":"both","demo":{"mode":"server","reasons":["Needs a server because its package does not build for a browser: node:crypto + node:async_hooks; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-images, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627, #3628).","Provider llm has an in-browser option (webllm, bitgpu)."]}},{"id":"chat.rooms","className":"ChatRoomsRecipe","label":"Team Chat","summary":"Organize team conversations in rooms with threads and reactions.","synonyms":["team chat","channels","group chat","conversations"],"models":["@happyvertical/smrt-chat:ChatRoom","@happyvertical/smrt-chat:ChatMessage","@happyvertical/smrt-chat:ChatParticipant","@happyvertical/smrt-chat:ChatThread","@happyvertical/smrt-chat:ChatReaction"],"nav":[{"label":"Chat Rooms","model":"@happyvertical/smrt-chat:ChatRoom","icon":"users","description":"Team conversations organized by topic or audience.","noun":"chat room"}],"requires":[],"group":{"id":"team-collaboration","label":"Team collaboration","summary":"Keep conversations and shared work in one place."},"section":{"id":"team","label":"Team","icon":"users","description":"People and the conversations that keep them aligned."},"options":{"@happyvertical/smrt-chat:ChatRoom":{"fields":{"metadata":{"visibility":"hidden"},"createdByProfileId":{"visibility":"hidden"},"lastMessageAt":{"label":"Last message","order":1}}},"@happyvertical/smrt-chat:ChatMessage":{"fields":{"metadata":{"visibility":"hidden"},"toolCallData":{"visibility":"hidden"},"attachments":{"visibility":"advanced"}}},"@happyvertical/smrt-chat:ChatParticipant":{"fields":{"lastReadMessageId":{"visibility":"hidden"},"lastSeenAt":{"visibility":"advanced"}}}},"help":{"markdown":"## Overview\\n\\nTeam Chat keeps conversations in rooms so people can find the right discussion,\\nfollow threads, and see reactions without mixing unrelated work together. The\\nroom and message lists are read-only generated views. Create rooms, manage\\nmembers, and send messages through the app's authorized chat workflow.\\n\\n## Tasks\\n\\n### Find the right room\\n\\n1. Open **Chat Rooms** from the navigation.\\n2. Search for a room by its **{field:ChatRoom.name}**, or use its\\n **{field:ChatRoom.topic}** to tell similar rooms apart.\\n3. Open the room and check **{field:ChatRoom.lastMessageAt}** to see where the\\n most recent discussion happened.\\n\\n### Follow a conversation\\n\\n1. Read the room messages and open a thread when you need the discussion in\\n one place.\\n2. Use the thread **{field:ChatThread.title}** to describe the subject when\\n your app supplies one.\\n3. Add a reaction by choosing the **{field:ChatReaction.emoji}** that best\\n communicates your response.\\n\\n### Keep a room useful\\n\\n1. Give the room a clear **{field:ChatRoom.name}** and a short\\n **{field:ChatRoom.description}**.\\n2. Set **{field:ChatRoom.roomType}** deliberately: public for broad team\\n discussion, private for restricted groups, and direct messages for one-to-one\\n conversations.\\n3. Use a focused **{field:ChatMessage.content}** so teammates can scan the\\n conversation and reply in context.\\n","fieldRefs":["ChatMessage.content","ChatReaction.emoji","ChatRoom.description","ChatRoom.lastMessageAt","ChatRoom.name","ChatRoom.roomType","ChatRoom.topic","ChatThread.title"]},"surfaces":[{"kind":"route","path":"/chat/rooms","export":"@happyvertical/smrt-chat/svelte#ChatLayout","label":"Team chat"},{"kind":"playground","export":"@happyvertical/smrt-chat/playground#default","label":"Static chat fixtures"}],"runtime":"both","demoSeed":{"export":"@happyvertical/smrt-chat/playground#chatRoomsFixture"},"demo":{"mode":"server","reasons":["Needs a server because its package does not build for a browser: node:crypto + node:async_hooks; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-images, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627, #3628)."]}}],"smrtDependencies":["@happyvertical/smrt-agents","@happyvertical/smrt-assets","@happyvertical/smrt-core","@happyvertical/smrt-images","@happyvertical/smrt-personas","@happyvertical/smrt-profiles","@happyvertical/smrt-reports","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"],"browser":{"status":"server-only","issues":["#3615","#3617","#3624","#3625","#3626","#3627","#3628"],"reason":"node:crypto + node:async_hooks","via":["@happyvertical/smrt-agents","@happyvertical/smrt-images","@happyvertical/smrt-jobs","@happyvertical/smrt-profiles","@happyvertical/smrt-reports","@happyvertical/smrt-secrets","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"]},"stampsConstructors":true}`));
|
|
10
|
+
ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-chat","packageVersion":"0.55.12","objects":{"@happyvertical/smrt-chat:AgentSessionCollection":{"name":"agentsessioncollection","className":"AgentSessionCollection","qualifiedName":"@happyvertical/smrt-chat:AgentSessionCollection","collection":"agentsessions","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/AgentSessionCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"findActiveByParticipant":{"name":"findActiveByParticipant","async":true,"parameters":[{"name":"participantProfileId","type":"string","optional":false}],"returnType":"Promise<AgentSession[]>","isStatic":false,"isPublic":true},"findActiveSession":{"name":"findActiveSession","async":true,"parameters":[{"name":"agentId","type":"string","optional":false},{"name":"participantProfileId","type":"string","optional":false},{"name":"tenantId","type":"string | null","optional":false,"unionBranches":[{"type":"string"},{"type":"null"}]},{"name":"sessionKey","type":"string | null","optional":true,"unionBranches":[{"type":"string"},{"type":"null"}]}],"returnType":"Promise<AgentSession | null>","isStatic":false,"isPublic":true},"findOrCreate":{"name":"findOrCreate","async":true,"parameters":[{"name":"params","type":"object","optional":false,"memberTypes":["string","string | null","string[]"]}],"returnType":"Promise<AgentSession>","isStatic":false,"isPublic":true},"findByAgent":{"name":"findByAgent","async":true,"parameters":[{"name":"agentId","type":"string","optional":false}],"returnType":"Promise<AgentSession[]>","isStatic":false,"isPublic":true},"expireStale":{"name":"expireStale","async":true,"parameters":[{"name":"olderThan","type":"Date","optional":false},{"name":"scope","type":"object","optional":true,"memberTypes":["string | null","string"]}],"returnType":"Promise<number>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"agent_sessions"},"extends":"SmrtCollection","extendsTypeArg":"AgentSession","exportName":"AgentSessionCollection","collectionExportName":"AgentSessionCollectionCollection","schema":{"tableName":"agent_sessions","ddl":"CREATE TABLE IF NOT EXISTS \\"agent_sessions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_id\\" TEXT NOT NULL DEFAULT '',\\n \\"agent_profile_id\\" UUID,\\n \\"participant_profile_id\\" UUID NOT NULL,\\n \\"chat_room_id\\" UUID,\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"allowed_tools\\" TEXT DEFAULT '[]',\\n \\"session_context\\" TEXT DEFAULT '{}',\\n \\"system_prompt\\" TEXT DEFAULT '',\\n \\"message_count\\" INTEGER DEFAULT 0,\\n \\"total_tokens_used\\" INTEGER DEFAULT 0,\\n \\"max_tokens\\" INTEGER DEFAULT 0,\\n \\"max_messages\\" INTEGER DEFAULT 0,\\n \\"last_message_at\\" TIMESTAMP,\\n \\"expires_at\\" TIMESTAMP,\\n \\"closed_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"agent_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"participant_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"chat_room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"allowed_tools":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"session_context":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"system_prompt":{"type":"TEXT","notNull":false,"unique":false,"default":""},"message_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"total_tokens_used":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"max_tokens":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"max_messages":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"expires_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"closed_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"agent_sessions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"agent_sessions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"agent_sessions_agent_profile_id_idx","columns":["agent_profile_id"]},{"name":"agent_sessions_participant_profile_id_idx","columns":["participant_profile_id"]},{"name":"agent_sessions_chat_room_id_idx","columns":["chat_room_id"]}],"version":"56b10067"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatMessageCollection":{"name":"chatmessagecollection","className":"ChatMessageCollection","qualifiedName":"@happyvertical/smrt-chat:ChatMessageCollection","collection":"chatmessages","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatMessageCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getByRoom":{"name":"getByRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false},{"name":"options","type":"object","optional":true,"memberTypes":["number","string"]}],"returnType":"Promise<ChatMessage[]>","isStatic":false,"isPublic":true},"getByThread":{"name":"getByThread","async":true,"parameters":[{"name":"threadId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<ChatMessage[]>","isStatic":false,"isPublic":true},"getByAgentSession":{"name":"getByAgentSession","async":true,"parameters":[{"name":"agentSessionId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<ChatMessage[]>","isStatic":false,"isPublic":true},"search":{"name":"search","async":true,"parameters":[{"name":"filters","type":"any","optional":false,"typeUnresolved":true}],"returnType":"Promise<ChatMessage[]>","isStatic":false,"isPublic":true},"getUnreadCount":{"name":"getUnreadCount","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false},{"name":"lastReadMessageId","type":"string | null","optional":false,"unionBranches":[{"type":"string"},{"type":"null"}]}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"getLatestPerRoom":{"name":"getLatestPerRoom","async":true,"parameters":[{"name":"roomIds","type":"string[]","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<Map<string, ChatMessage>>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_messages"},"extends":"SmrtCollection","extendsTypeArg":"ChatMessage","exportName":"ChatMessageCollection","collectionExportName":"ChatMessageCollectionCollection","schema":{"tableName":"chat_messages","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_messages\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"thread_id\\" UUID,\\n \\"sender_profile_id\\" UUID NOT NULL,\\n \\"agent_session_id\\" UUID,\\n \\"content\\" TEXT DEFAULT '',\\n \\"message_type\\" TEXT NOT NULL DEFAULT 'text',\\n \\"role\\" TEXT NOT NULL DEFAULT 'user',\\n \\"is_edited\\" BOOLEAN DEFAULT FALSE,\\n \\"edited_at\\" TIMESTAMP,\\n \\"is_deleted\\" BOOLEAN DEFAULT FALSE,\\n \\"reply_to_message_id\\" UUID,\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"tool_call_data\\" TEXT,\\n \\"attachments\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"thread_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_threads","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"sender_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"agent_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"agent_sessions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"content":{"type":"TEXT","notNull":false,"unique":false,"default":""},"message_type":{"type":"TEXT","notNull":true,"unique":false,"default":"text"},"role":{"type":"TEXT","notNull":true,"unique":false,"default":"user"},"is_edited":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"edited_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"is_deleted":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"reply_to_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"tool_call_data":{"type":"TEXT","notNull":false,"unique":false},"attachments":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"chat_messages_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_messages_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_messages_room_id_idx","columns":["room_id"]},{"name":"chat_messages_thread_id_idx","columns":["thread_id"]},{"name":"chat_messages_sender_profile_id_idx","columns":["sender_profile_id"]},{"name":"chat_messages_agent_session_id_idx","columns":["agent_session_id"]},{"name":"chat_messages_reply_to_message_id_idx","columns":["reply_to_message_id"]}],"version":"cca14e75"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatParticipantCollection":{"name":"chatparticipantcollection","className":"ChatParticipantCollection","qualifiedName":"@happyvertical/smrt-chat:ChatParticipantCollection","collection":"chatparticipants","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatParticipantCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getByRoom":{"name":"getByRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant[]>","isStatic":false,"isPublic":true},"getByProfile":{"name":"getByProfile","async":true,"parameters":[{"name":"profileId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant[]>","isStatic":false,"isPublic":true},"findMembership":{"name":"findMembership","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"profileId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":true}],"returnType":"Promise<ChatParticipant | null>","isStatic":false,"isPublic":true},"findActiveMembership":{"name":"findActiveMembership","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"profileId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant | null>","isStatic":false,"isPublic":true},"isActiveMember":{"name":"isActiveMember","async":true,"parameters":[{"name":"roomId","type":"string","optional":false},{"name":"profileId","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<boolean>","isStatic":false,"isPublic":true},"getOnlineInRoom":{"name":"getOnlineInRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant[]>","isStatic":false,"isPublic":true},"getAdminsInRoom":{"name":"getAdminsInRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatParticipant[]>","isStatic":false,"isPublic":true},"countInRoom":{"name":"countInRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_participants"},"extends":"SmrtCollection","extendsTypeArg":"ChatParticipant","exportName":"ChatParticipantCollection","collectionExportName":"ChatParticipantCollectionCollection","schema":{"tableName":"chat_participants","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_participants\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"profile_id\\" UUID NOT NULL,\\n \\"role\\" TEXT NOT NULL DEFAULT 'member',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"online_status\\" TEXT NOT NULL DEFAULT 'offline',\\n \\"last_read_message_id\\" UUID,\\n \\"last_seen_at\\" TIMESTAMP,\\n \\"joined_at\\" TIMESTAMP,\\n \\"nickname\\" TEXT DEFAULT '',\\n \\"is_muted\\" BOOLEAN DEFAULT FALSE,\\n \\"is_pinned\\" BOOLEAN DEFAULT FALSE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false,"default":"member"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"online_status":{"type":"TEXT","notNull":true,"unique":false,"default":"offline"},"last_read_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"last_seen_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"joined_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"nickname":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_muted":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"is_pinned":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false}},"indexes":[{"name":"chat_participants_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_participants_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_participants_room_id_idx","columns":["room_id"]},{"name":"chat_participants_profile_id_idx","columns":["profile_id"]},{"name":"chat_participants_last_read_message_id_idx","columns":["last_read_message_id"]}],"version":"07714046"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatReactionCollection":{"name":"chatreactioncollection","className":"ChatReactionCollection","qualifiedName":"@happyvertical/smrt-chat:ChatReactionCollection","collection":"chatreactions","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatReactionCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getByMessage":{"name":"getByMessage","async":true,"parameters":[{"name":"messageId","type":"string","optional":false}],"returnType":"Promise<ChatReaction[]>","isStatic":false,"isPublic":true},"getReactionCounts":{"name":"getReactionCounts","async":true,"parameters":[{"name":"messageId","type":"string","optional":false}],"returnType":"Promise<Map<string, object>>","isStatic":false,"isPublic":true},"toggle":{"name":"toggle","async":true,"parameters":[{"name":"messageId","type":"string","optional":false},{"name":"profileId","type":"string","optional":false},{"name":"emoji","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<object>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_reactions","cli":false},"extends":"SmrtCollection","extendsTypeArg":"ChatReaction","exportName":"ChatReactionCollection","collectionExportName":"ChatReactionCollectionCollection","schema":{"tableName":"chat_reactions","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_reactions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"message_id\\" UUID NOT NULL,\\n \\"profile_id\\" UUID NOT NULL,\\n \\"emoji\\" TEXT NOT NULL DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"emoji":{"type":"TEXT","notNull":true,"unique":false,"default":""}},"indexes":[{"name":"chat_reactions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_reactions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_reactions_message_id_idx","columns":["message_id"]},{"name":"chat_reactions_profile_id_idx","columns":["profile_id"]}],"version":"5b1969a6"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatRoomCollection":{"name":"chatroomcollection","className":"ChatRoomCollection","qualifiedName":"@happyvertical/smrt-chat:ChatRoomCollection","collection":"chatrooms","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatRoomCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"findByType":{"name":"findByType","async":true,"parameters":[{"name":"roomType","type":"ChatRoomType","optional":false}],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"findPublic":{"name":"findPublic","async":true,"parameters":[],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"findDMs":{"name":"findDMs","async":true,"parameters":[],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"findAgentRooms":{"name":"findAgentRooms","async":true,"parameters":[],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"search":{"name":"search","async":true,"parameters":[{"name":"query","type":"string","optional":false},{"name":"options","type":"object","optional":true,"memberTypes":["number"]}],"returnType":"Promise<ChatRoom[]>","isStatic":false,"isPublic":true},"findOrCreateDM":{"name":"findOrCreateDM","async":true,"parameters":[{"name":"profileId1","type":"string","optional":false},{"name":"profileId2","type":"string","optional":false},{"name":"tenantId","type":"string","optional":false},{"name":"participants","type":"ChatParticipantCollection","optional":false}],"returnType":"Promise<ChatRoom>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_rooms"},"extends":"SmrtCollection","extendsTypeArg":"ChatRoom","exportName":"ChatRoomCollection","collectionExportName":"ChatRoomCollectionCollection","schema":{"tableName":"chat_rooms","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_rooms\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT DEFAULT '',\\n \\"room_type\\" TEXT NOT NULL DEFAULT 'public',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"topic\\" TEXT DEFAULT '',\\n \\"avatar_url\\" TEXT DEFAULT '',\\n \\"is_archived\\" BOOLEAN DEFAULT FALSE,\\n \\"max_participants\\" INTEGER DEFAULT 0,\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"created_by_profile_id\\" UUID,\\n \\"last_message_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""},"room_type":{"type":"TEXT","notNull":true,"unique":false,"default":"public"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"topic":{"type":"TEXT","notNull":false,"unique":false,"default":""},"avatar_url":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_archived":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"max_participants":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"created_by_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"chat_rooms_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_rooms_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_rooms_created_by_profile_id_idx","columns":["created_by_profile_id"]}],"version":"3665d881"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatThreadCollection":{"name":"chatthreadcollection","className":"ChatThreadCollection","qualifiedName":"@happyvertical/smrt-chat:ChatThreadCollection","collection":"chatthreads","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/ChatThreadCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getByRoom":{"name":"getByRoom","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatThread[]>","isStatic":false,"isPublic":true},"getActive":{"name":"getActive","async":true,"parameters":[{"name":"roomId","type":"string","optional":false}],"returnType":"Promise<ChatThread[]>","isStatic":false,"isPublic":true},"getUnresolved":{"name":"getUnresolved","async":true,"parameters":[],"returnType":"Promise<ChatThread[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_threads"},"extends":"SmrtCollection","extendsTypeArg":"ChatThread","exportName":"ChatThreadCollection","collectionExportName":"ChatThreadCollectionCollection","schema":{"tableName":"chat_threads","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_threads\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"root_message_id\\" UUID,\\n \\"title\\" TEXT DEFAULT '',\\n \\"is_resolved\\" BOOLEAN DEFAULT FALSE,\\n \\"message_count\\" INTEGER DEFAULT 0,\\n \\"last_message_at\\" TIMESTAMP,\\n \\"participant_count\\" INTEGER DEFAULT 0\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"root_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"title":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_resolved":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"message_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"participant_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0}},"indexes":[{"name":"chat_threads_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_threads_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_threads_room_id_idx","columns":["room_id"]},{"name":"chat_threads_root_message_id_idx","columns":["root_message_id"]}],"version":"e1ae958b"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:VoiceGatewayTurnCollection":{"name":"voicegatewayturncollection","className":"VoiceGatewayTurnCollection","qualifiedName":"@happyvertical/smrt-chat:VoiceGatewayTurnCollection","collection":"voicegatewayturns","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/VoiceGatewayTurnCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"reserveTurn":{"name":"reserveTurn","async":true,"parameters":[{"name":"input","type":"object","optional":false,"memberTypes":["string"]}],"returnType":"Promise<VoiceGatewayTurn>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"voice_gateway_turns","cli":false},"extends":"SmrtCollection","extendsTypeArg":"VoiceGatewayTurn","exportName":"VoiceGatewayTurnCollection","collectionExportName":"VoiceGatewayTurnCollectionCollection","schema":{"tableName":"voice_gateway_turns","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_gateway_turns\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"voice_session_id\\" UUID NOT NULL,\\n \\"gateway_session_id\\" TEXT NOT NULL DEFAULT '',\\n \\"gateway_turn_id\\" TEXT NOT NULL DEFAULT '',\\n \\"target\\" TEXT NOT NULL DEFAULT 'smrt:chat',\\n \\"status\\" TEXT NOT NULL DEFAULT 'processing',\\n \\"completed_at\\" TIMESTAMP,\\n \\"failed_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"voice_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"voice_sessions","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"gateway_session_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"gateway_turn_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"target":{"type":"TEXT","notNull":true,"unique":false,"default":"smrt:chat"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"processing"},"completed_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"failed_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"voice_gateway_turns_voice_session_id_gateway_turn_id_idx","columns":["voice_session_id","gateway_turn_id"],"unique":true},{"name":"voice_gateway_turns_slug_context_idx","columns":["slug","context"]},{"name":"voice_gateway_turns_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c4d871b8"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:VoiceSessionCollection":{"name":"voicesessioncollection","className":"VoiceSessionCollection","qualifiedName":"@happyvertical/smrt-chat:VoiceSessionCollection","collection":"voicesessions","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/collections/VoiceSessionCollection.ts","packageName":"@happyvertical/smrt-chat","fields":{},"methods":{"getActiveById":{"name":"getActiveById","async":true,"parameters":[{"name":"id","type":"string","optional":false},{"name":"target","type":"any","optional":true,"default":"smrt:chat"}],"returnType":"Promise<VoiceSession | null>","isStatic":false,"isPublic":true},"expireStale":{"name":"expireStale","async":true,"parameters":[{"name":"olderThan","type":"Date","optional":true},{"name":"scope","type":"object","optional":true,"memberTypes":["string"]}],"returnType":"Promise<number>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"voice_sessions"},"extends":"SmrtCollection","extendsTypeArg":"VoiceSession","exportName":"VoiceSessionCollection","collectionExportName":"VoiceSessionCollectionCollection","schema":{"tableName":"voice_sessions","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_sessions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"gateway_session_id\\" TEXT NOT NULL DEFAULT '',\\n \\"actor_profile_id\\" UUID NOT NULL,\\n \\"actor_user_id\\" UUID,\\n \\"persona_id\\" UUID NOT NULL,\\n \\"agent_session_id\\" UUID NOT NULL,\\n \\"chat_room_id\\" UUID NOT NULL,\\n \\"thread_id\\" UUID,\\n \\"target\\" TEXT NOT NULL DEFAULT 'smrt:chat',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"expires_at\\" TIMESTAMP NOT NULL,\\n \\"last_turn_at\\" TIMESTAMP,\\n \\"last_gateway_turn_id\\" TEXT,\\n \\"persona_snapshot\\" TEXT DEFAULT '{}',\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"processed_turn_ids\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"gateway_session_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"actor_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"actor_user_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"persona_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"agent_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"agent_sessions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"chat_room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"thread_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_threads","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"target":{"type":"TEXT","notNull":true,"unique":false,"default":"smrt:chat"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"expires_at":{"type":"TIMESTAMP","notNull":true,"unique":false},"last_turn_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"last_gateway_turn_id":{"type":"TEXT","notNull":false,"unique":false},"persona_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"processed_turn_ids":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"voice_sessions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"voice_sessions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"voice_sessions_actor_profile_id_idx","columns":["actor_profile_id"]},{"name":"voice_sessions_actor_user_id_idx","columns":["actor_user_id"]},{"name":"voice_sessions_persona_id_idx","columns":["persona_id"]},{"name":"voice_sessions_agent_session_id_idx","columns":["agent_session_id"]},{"name":"voice_sessions_chat_room_id_idx","columns":["chat_room_id"]},{"name":"voice_sessions_thread_id_idx","columns":["thread_id"]}],"version":"d5cfb90c"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:AgentSession":{"name":"agentsession","className":"AgentSession","qualifiedName":"@happyvertical/smrt-chat:AgentSession","collection":"agentsessions","description":"Agent conversation session.","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/AgentSession.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"agentId":{"type":"text","required":true,"default":"","_meta":{"required":true}},"agentProfileId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-profiles:Profile"},"participantProfileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"chatRoomId":{"type":"foreignKey","required":false,"related":"ChatRoom"},"status":{"type":"text","required":true,"default":"active","_meta":{"required":true},"enum":["active","closed","expired"]},"allowedTools":{"type":"text","required":false,"default":"[]"},"sessionContext":{"type":"text","required":false,"default":"{}","_meta":{"sensitive":true},"sensitive":true},"systemPrompt":{"type":"text","required":false,"default":""},"messageCount":{"type":"integer","required":false,"default":0},"totalTokensUsed":{"type":"integer","required":false,"default":0},"maxTokens":{"type":"integer","required":false,"default":0},"maxMessages":{"type":"integer","required":false,"default":0},"lastMessageAt":{"type":"datetime","required":false},"expiresAt":{"type":"datetime","required":false},"closedAt":{"type":"datetime","required":false}},"methods":{"getAllowedTools":{"name":"getAllowedTools","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"setAllowedTools":{"name":"setAllowedTools","async":false,"parameters":[{"name":"tools","type":"string[]","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"isToolAllowed":{"name":"isToolAllowed","async":false,"parameters":[{"name":"toolName","type":"string","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true},"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isExpired":{"name":"isExpired","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"close":{"name":"close","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"expire":{"name":"expire","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getSessionContext":{"name":"getSessionContext","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setSessionContext":{"name":"setSessionContext","async":false,"parameters":[{"name":"ctx","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getSessionKey":{"name":"getSessionKey","async":false,"parameters":[],"returnType":"string | null","isStatic":false,"isPublic":true},"updateSessionContext":{"name":"updateSessionContext","async":true,"parameters":[{"name":"updates","type":"Record<string, unknown>","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"recordMessage":{"name":"recordMessage","async":true,"parameters":[{"name":"tokensUsed","type":"number","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"agent_sessions","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"AgentSession","collectionExportName":"AgentSessionCollection","validationRules":[{"field":"agentId","rule":"required","fieldType":"text"},{"field":"participantProfileId","rule":"required","fieldType":"crossPackageRef"},{"field":"status","rule":"required","fieldType":"text"}],"schema":{"tableName":"agent_sessions","ddl":"CREATE TABLE IF NOT EXISTS \\"agent_sessions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"agent_id\\" TEXT NOT NULL DEFAULT '',\\n \\"agent_profile_id\\" UUID,\\n \\"participant_profile_id\\" UUID NOT NULL,\\n \\"chat_room_id\\" UUID,\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"allowed_tools\\" TEXT DEFAULT '[]',\\n \\"session_context\\" TEXT DEFAULT '{}',\\n \\"system_prompt\\" TEXT DEFAULT '',\\n \\"message_count\\" INTEGER DEFAULT 0,\\n \\"total_tokens_used\\" INTEGER DEFAULT 0,\\n \\"max_tokens\\" INTEGER DEFAULT 0,\\n \\"max_messages\\" INTEGER DEFAULT 0,\\n \\"last_message_at\\" TIMESTAMP,\\n \\"expires_at\\" TIMESTAMP,\\n \\"closed_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"agent_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"agent_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"participant_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"chat_room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"allowed_tools":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"},"session_context":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"system_prompt":{"type":"TEXT","notNull":false,"unique":false,"default":""},"message_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"total_tokens_used":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"max_tokens":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"max_messages":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"expires_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"closed_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"agent_sessions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true,"nullsNotDistinct":true},{"name":"agent_sessions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"agent_sessions_agent_profile_id_idx","columns":["agent_profile_id"]},{"name":"agent_sessions_participant_profile_id_idx","columns":["participant_profile_id"]},{"name":"agent_sessions_chat_room_id_idx","columns":["chat_room_id"]}],"version":"56b10067"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatMessage":{"name":"chatmessage","className":"ChatMessage","qualifiedName":"@happyvertical/smrt-chat:ChatMessage","collection":"chatmessages","description":"Chat message. Internal model \u2014 all mutations must go through the membership-checked ChatService (S5 #1392).","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatMessage.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"roomId":{"type":"foreignKey","required":true,"related":"ChatRoom","_meta":{"required":true}},"threadId":{"type":"foreignKey","required":false,"related":"ChatThread"},"senderProfileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"agentSessionId":{"type":"foreignKey","required":false,"related":"AgentSession"},"content":{"type":"text","required":false,"default":""},"messageType":{"type":"text","required":true,"default":"text","_meta":{"required":true},"enum":["text","system","action","file","tool_call","tool_result"]},"role":{"type":"text","required":true,"default":"user","_meta":{"required":true},"enum":["user","assistant","system","tool"]},"isEdited":{"type":"boolean","required":false,"default":false},"editedAt":{"type":"datetime","required":false},"isDeleted":{"type":"boolean","required":false,"default":false},"replyToMessageId":{"type":"foreignKey","required":false,"related":"ChatMessage"},"metadata":{"type":"text","required":false,"default":"{}"},"toolCallData":{"type":"text","required":false},"attachments":{"type":"text","required":false,"default":"[]"}},"methods":{"getAttachments":{"name":"getAttachments","async":false,"parameters":[],"returnType":"Array<object>","isStatic":false,"isPublic":true},"setAttachments":{"name":"setAttachments","async":false,"parameters":[{"name":"items","type":"Array<object>","optional":false,"memberTypes":["string","number"]}],"returnType":"void","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"data","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getToolCallData":{"name":"getToolCallData","async":false,"parameters":[],"returnType":"Record<string, unknown> | null","isStatic":false,"isPublic":true},"setToolCallData":{"name":"setToolCallData","async":false,"parameters":[{"name":"data","type":"Record<string, unknown> | null","optional":false,"unionBranches":[{"type":"Record<string, unknown>"},{"type":"null"}]}],"returnType":"void","isStatic":false,"isPublic":true},"hasAttachments":{"name":"hasAttachments","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isToolCall":{"name":"isToolCall","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isToolResult":{"name":"isToolResult","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isFromAgent":{"name":"isFromAgent","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isSystemMessage":{"name":"isSystemMessage","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"edit":{"name":"edit","async":true,"parameters":[{"name":"newContent","type":"string","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"softDelete":{"name":"softDelete","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getPreview":{"name":"getPreview","async":false,"parameters":[{"name":"maxLength","type":"any","optional":true}],"returnType":"string","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_messages","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatMessage","collectionExportName":"ChatMessageCollection","validationRules":[{"field":"roomId","rule":"required","fieldType":"foreignKey"},{"field":"senderProfileId","rule":"required","fieldType":"crossPackageRef"},{"field":"messageType","rule":"required","fieldType":"text"},{"field":"role","rule":"required","fieldType":"text"}],"schema":{"tableName":"chat_messages","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_messages\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"thread_id\\" UUID,\\n \\"sender_profile_id\\" UUID NOT NULL,\\n \\"agent_session_id\\" UUID,\\n \\"content\\" TEXT DEFAULT '',\\n \\"message_type\\" TEXT NOT NULL DEFAULT 'text',\\n \\"role\\" TEXT NOT NULL DEFAULT 'user',\\n \\"is_edited\\" BOOLEAN DEFAULT FALSE,\\n \\"edited_at\\" TIMESTAMP,\\n \\"is_deleted\\" BOOLEAN DEFAULT FALSE,\\n \\"reply_to_message_id\\" UUID,\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"tool_call_data\\" TEXT,\\n \\"attachments\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"thread_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_threads","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"sender_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"agent_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"agent_sessions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"content":{"type":"TEXT","notNull":false,"unique":false,"default":""},"message_type":{"type":"TEXT","notNull":true,"unique":false,"default":"text"},"role":{"type":"TEXT","notNull":true,"unique":false,"default":"user"},"is_edited":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"edited_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"is_deleted":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"reply_to_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"tool_call_data":{"type":"TEXT","notNull":false,"unique":false},"attachments":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"chat_messages_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_messages_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_messages_room_id_idx","columns":["room_id"]},{"name":"chat_messages_thread_id_idx","columns":["thread_id"]},{"name":"chat_messages_sender_profile_id_idx","columns":["sender_profile_id"]},{"name":"chat_messages_agent_session_id_idx","columns":["agent_session_id"]},{"name":"chat_messages_reply_to_message_id_idx","columns":["reply_to_message_id"]}],"version":"cca14e75"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatParticipant":{"name":"chatparticipant","className":"ChatParticipant","qualifiedName":"@happyvertical/smrt-chat:ChatParticipant","collection":"chatparticipants","description":"Room membership row. Internal model \u2014 membership must be established and mutated only through the membership/owner-checked ChatService (S5 #1392).","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatParticipant.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"roomId":{"type":"foreignKey","required":true,"related":"ChatRoom","_meta":{"required":true}},"profileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"role":{"type":"text","required":true,"default":"member","_meta":{"required":true},"enum":["owner","admin","member","viewer"]},"status":{"type":"text","required":true,"default":"active","_meta":{"required":true},"enum":["active","left","kicked","banned"]},"onlineStatus":{"type":"text","required":true,"default":"offline","_meta":{"required":true},"enum":["online","away","dnd","offline"]},"lastReadMessageId":{"type":"foreignKey","required":false,"related":"ChatMessage"},"lastSeenAt":{"type":"datetime","required":false},"joinedAt":{"type":"datetime","required":false},"nickname":{"type":"text","required":false,"default":""},"isMuted":{"type":"boolean","required":false,"default":false},"isPinned":{"type":"boolean","required":false,"default":false}},"methods":{"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isOwner":{"name":"isOwner","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isAdmin":{"name":"isAdmin","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"markRead":{"name":"markRead","async":true,"parameters":[{"name":"messageId","type":"string","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"leave":{"name":"leave","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"setOnline":{"name":"setOnline","async":true,"parameters":[{"name":"status","type":"OnlineStatus","optional":false}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_participants","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatParticipant","collectionExportName":"ChatParticipantCollection","validationRules":[{"field":"roomId","rule":"required","fieldType":"foreignKey"},{"field":"profileId","rule":"required","fieldType":"crossPackageRef"},{"field":"role","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"},{"field":"onlineStatus","rule":"required","fieldType":"text"}],"schema":{"tableName":"chat_participants","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_participants\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"profile_id\\" UUID NOT NULL,\\n \\"role\\" TEXT NOT NULL DEFAULT 'member',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"online_status\\" TEXT NOT NULL DEFAULT 'offline',\\n \\"last_read_message_id\\" UUID,\\n \\"last_seen_at\\" TIMESTAMP,\\n \\"joined_at\\" TIMESTAMP,\\n \\"nickname\\" TEXT DEFAULT '',\\n \\"is_muted\\" BOOLEAN DEFAULT FALSE,\\n \\"is_pinned\\" BOOLEAN DEFAULT FALSE\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"role":{"type":"TEXT","notNull":true,"unique":false,"default":"member"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"online_status":{"type":"TEXT","notNull":true,"unique":false,"default":"offline"},"last_read_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"last_seen_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"joined_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"nickname":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_muted":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"is_pinned":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false}},"indexes":[{"name":"chat_participants_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_participants_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_participants_room_id_idx","columns":["room_id"]},{"name":"chat_participants_profile_id_idx","columns":["profile_id"]},{"name":"chat_participants_last_read_message_id_idx","columns":["last_read_message_id"]}],"version":"07714046"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatReaction":{"name":"chatreaction","className":"ChatReaction","qualifiedName":"@happyvertical/smrt-chat:ChatReaction","collection":"chatreactions","description":"Message reaction. Internal model \u2014 reactions must be added/removed only through the membership-checked ChatService (S5 #1392).","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatReaction.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"messageId":{"type":"foreignKey","required":true,"related":"ChatMessage","_meta":{"required":true}},"profileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"emoji":{"type":"text","required":true,"default":"","_meta":{"required":true}}},"methods":{},"decoratorConfig":{"tableName":"chat_reactions","api":{"include":["list"]},"mcp":{"include":["list"]},"cli":false,"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatReaction","collectionExportName":"ChatReactionCollection","validationRules":[{"field":"messageId","rule":"required","fieldType":"foreignKey"},{"field":"profileId","rule":"required","fieldType":"crossPackageRef"},{"field":"emoji","rule":"required","fieldType":"text"}],"schema":{"tableName":"chat_reactions","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_reactions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"message_id\\" UUID NOT NULL,\\n \\"profile_id\\" UUID NOT NULL,\\n \\"emoji\\" TEXT NOT NULL DEFAULT ''\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"emoji":{"type":"TEXT","notNull":true,"unique":false,"default":""}},"indexes":[{"name":"chat_reactions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_reactions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_reactions_message_id_idx","columns":["message_id"]},{"name":"chat_reactions_profile_id_idx","columns":["profile_id"]}],"version":"5b1969a6"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatRoom":{"name":"chatroom","className":"ChatRoom","qualifiedName":"@happyvertical/smrt-chat:ChatRoom","collection":"chatrooms","description":"Chat room supporting public channels, private groups, DMs, and agent conversations.","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatRoom.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"name":{"type":"text","required":false,"default":""},"description":{"type":"text","required":false,"default":""},"roomType":{"type":"text","required":true,"default":"public","_meta":{"required":true},"enum":["public","private","dm","agent"]},"status":{"type":"text","required":true,"default":"active","_meta":{"required":true},"enum":["active","archived","deleted"]},"topic":{"type":"text","required":false,"default":""},"avatarUrl":{"type":"text","required":false,"default":""},"isArchived":{"type":"boolean","required":false,"default":false},"maxParticipants":{"type":"integer","required":false,"default":0},"metadata":{"type":"text","required":false,"default":"{}"},"createdByProfileId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-profiles:Profile"},"lastMessageAt":{"type":"datetime","required":false}},"methods":{"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"ChatRoomMetadata","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"data","type":"ChatRoomMetadata","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"updateMetadata":{"name":"updateMetadata","async":false,"parameters":[{"name":"updates","type":"ChatRoomMetadata","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"isDM":{"name":"isDM","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isAgentRoom":{"name":"isAgentRoom","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isPublic":{"name":"isPublic","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"archive":{"name":"archive","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"unarchive":{"name":"unarchive","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_rooms","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatRoom","collectionExportName":"ChatRoomCollection","displayLabelField":"name","validationRules":[{"field":"roomType","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"}],"schema":{"tableName":"chat_rooms","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_rooms\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT DEFAULT '',\\n \\"room_type\\" TEXT NOT NULL DEFAULT 'public',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"topic\\" TEXT DEFAULT '',\\n \\"avatar_url\\" TEXT DEFAULT '',\\n \\"is_archived\\" BOOLEAN DEFAULT FALSE,\\n \\"max_participants\\" INTEGER DEFAULT 0,\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"created_by_profile_id\\" UUID,\\n \\"last_message_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""},"room_type":{"type":"TEXT","notNull":true,"unique":false,"default":"public"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"topic":{"type":"TEXT","notNull":false,"unique":false,"default":""},"avatar_url":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_archived":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"max_participants":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"created_by_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"chat_rooms_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_rooms_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_rooms_created_by_profile_id_idx","columns":["created_by_profile_id"]}],"version":"3665d881"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:ChatThread":{"name":"chatthread","className":"ChatThread","qualifiedName":"@happyvertical/smrt-chat:ChatThread","collection":"chatthreads","description":"Conversation thread. Internal model \u2014 threads must be created/mutated only through the membership-checked ChatService (S5 #1392).","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/ChatThread.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"roomId":{"type":"foreignKey","required":true,"related":"ChatRoom","_meta":{"required":true}},"rootMessageId":{"type":"foreignKey","required":false,"related":"ChatMessage","_meta":{"nullable":true}},"title":{"type":"text","required":false,"default":""},"isResolved":{"type":"boolean","required":false,"default":false},"messageCount":{"type":"integer","required":false,"default":0},"lastMessageAt":{"type":"datetime","required":false},"participantCount":{"type":"integer","required":false,"default":0}},"methods":{"resolve":{"name":"resolve","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"reopen":{"name":"reopen","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"chat_threads","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"ChatThread","collectionExportName":"ChatThreadCollection","displayLabelField":"title","validationRules":[{"field":"roomId","rule":"required","fieldType":"foreignKey"}],"schema":{"tableName":"chat_threads","ddl":"CREATE TABLE IF NOT EXISTS \\"chat_threads\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"room_id\\" UUID NOT NULL,\\n \\"root_message_id\\" UUID,\\n \\"title\\" TEXT DEFAULT '',\\n \\"is_resolved\\" BOOLEAN DEFAULT FALSE,\\n \\"message_count\\" INTEGER DEFAULT 0,\\n \\"last_message_at\\" TIMESTAMP,\\n \\"participant_count\\" INTEGER DEFAULT 0\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"root_message_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_messages","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"title":{"type":"TEXT","notNull":false,"unique":false,"default":""},"is_resolved":{"type":"BOOLEAN","notNull":false,"unique":false,"default":false},"message_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"last_message_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"participant_count":{"type":"INTEGER","notNull":false,"unique":false,"default":0}},"indexes":[{"name":"chat_threads_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"chat_threads_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"chat_threads_room_id_idx","columns":["room_id"]},{"name":"chat_threads_root_message_id_idx","columns":["root_message_id"]}],"version":"e1ae958b"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:VoiceGatewayTurn":{"name":"voicegatewayturn","className":"VoiceGatewayTurn","qualifiedName":"@happyvertical/smrt-chat:VoiceGatewayTurn","collection":"voicegatewayturns","description":"Durable reservation for a gateway turn. The natural key makes turn_id replay checks concurrency-safe before transcript messages are written.","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/VoiceGatewayTurn.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"voiceSessionId":{"type":"foreignKey","required":true,"related":"VoiceSession","_meta":{"required":true}},"gatewaySessionId":{"type":"text","required":true,"default":"","_meta":{"required":true}},"gatewayTurnId":{"type":"text","required":true,"default":"","_meta":{"required":true}},"target":{"type":"text","required":true,"default":"smrt:chat","_meta":{"required":true}},"status":{"type":"text","required":true,"default":"processing","_meta":{"required":true},"enum":["processing","completed","failed"]},"completedAt":{"type":"datetime","required":false},"failedAt":{"type":"datetime","required":false}},"methods":{"complete":{"name":"complete","async":true,"parameters":[{"name":"now","type":"Date","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"fail":{"name":"fail","async":true,"parameters":[{"name":"now","type":"Date","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"voice_gateway_turns","conflictColumns":["voice_session_id","gateway_turn_id"],"api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":false,"tenantScoped":{"mode":"required"}},"extends":"SmrtObject","exportName":"VoiceGatewayTurn","collectionExportName":"VoiceGatewayTurnCollection","validationRules":[{"field":"voiceSessionId","rule":"required","fieldType":"foreignKey"},{"field":"gatewaySessionId","rule":"required","fieldType":"text"},{"field":"gatewayTurnId","rule":"required","fieldType":"text"},{"field":"target","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"}],"schema":{"tableName":"voice_gateway_turns","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_gateway_turns\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"voice_session_id\\" UUID NOT NULL,\\n \\"gateway_session_id\\" TEXT NOT NULL DEFAULT '',\\n \\"gateway_turn_id\\" TEXT NOT NULL DEFAULT '',\\n \\"target\\" TEXT NOT NULL DEFAULT 'smrt:chat',\\n \\"status\\" TEXT NOT NULL DEFAULT 'processing',\\n \\"completed_at\\" TIMESTAMP,\\n \\"failed_at\\" TIMESTAMP\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"voice_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"voice_sessions","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"gateway_session_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"gateway_turn_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"target":{"type":"TEXT","notNull":true,"unique":false,"default":"smrt:chat"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"processing"},"completed_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"failed_at":{"type":"TIMESTAMP","notNull":false,"unique":false}},"indexes":[{"name":"voice_gateway_turns_voice_session_id_gateway_turn_id_idx","columns":["voice_session_id","gateway_turn_id"],"unique":true},{"name":"voice_gateway_turns_slug_context_idx","columns":["slug","context"]},{"name":"voice_gateway_turns_tenant_id_created_at_idx","columns":["tenant_id","created_at"]}],"version":"c4d871b8"},"importPath":"@happyvertical/smrt-chat"},"@happyvertical/smrt-chat:VoiceSession":{"name":"voicesession","className":"VoiceSession","qualifiedName":"@happyvertical/smrt-chat:VoiceSession","collection":"voicesessions","description":"Short-lived binding proving a voice gateway turn belongs to an authenticated SMRT actor, persona, and chat session.","filePath":"/home/runner/work/smrt/smrt/packages/chat/src/models/VoiceSession.ts","packageName":"@happyvertical/smrt-chat","fields":{"tenantId":{"type":"text","required":true,"_meta":{"sqlType":"UUID","__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":true,"autoPopulate":true,"nullable":false,"mode":"required","field":"tenantId","allowSuperAdminBypass":false}}},"gatewaySessionId":{"type":"text","required":true,"default":"","_meta":{"required":true}},"actorProfileId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-profiles:Profile"},"actorUserId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-users:User","_meta":{"nullable":true}},"personaId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-personas:AgentPersona"},"agentSessionId":{"type":"foreignKey","required":true,"related":"AgentSession","_meta":{"required":true}},"chatRoomId":{"type":"foreignKey","required":true,"related":"ChatRoom","_meta":{"required":true}},"threadId":{"type":"foreignKey","required":false,"related":"ChatThread"},"target":{"type":"text","required":true,"default":"smrt:chat","_meta":{"required":true}},"status":{"type":"text","required":true,"default":"active","_meta":{"required":true},"enum":["active","expired","revoked"]},"expiresAt":{"type":"datetime","required":true,"_meta":{"required":true}},"lastTurnAt":{"type":"datetime","required":false},"lastGatewayTurnId":{"type":"text","required":false},"personaSnapshot":{"type":"text","required":false,"default":"{}"},"metadata":{"type":"text","required":false,"default":"{}"},"processedTurnIds":{"type":"text","required":false,"default":"[]"}},"methods":{"isActive":{"name":"isActive","async":false,"parameters":[{"name":"now","type":"Date","optional":true}],"returnType":"boolean","isStatic":false,"isPublic":true},"isExpired":{"name":"isExpired","async":false,"parameters":[{"name":"now","type":"Date","optional":true}],"returnType":"boolean","isStatic":false,"isPublic":true},"expire":{"name":"expire","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"revoke":{"name":"revoke","async":true,"parameters":[],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getPersonaSnapshot":{"name":"getPersonaSnapshot","async":false,"parameters":[],"returnType":"ConversationPersona","isStatic":false,"isPublic":true},"setPersonaSnapshot":{"name":"setPersonaSnapshot","async":false,"parameters":[{"name":"persona","type":"ConversationPersona","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"metadata","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getProcessedTurnIds":{"name":"getProcessedTurnIds","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"hasProcessedTurn":{"name":"hasProcessedTurn","async":false,"parameters":[{"name":"turnId","type":"string","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true},"recordGatewayTurn":{"name":"recordGatewayTurn","async":false,"parameters":[{"name":"turnId","type":"string","optional":false},{"name":"maxRememberedTurns","type":"any","optional":true}],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableName":"voice_sessions","api":{"include":["list","get"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"required"},"conflictColumns":["tenant_id","slug","context"]},"extends":"SmrtObject","exportName":"VoiceSession","collectionExportName":"VoiceSessionCollection","validationRules":[{"field":"gatewaySessionId","rule":"required","fieldType":"text"},{"field":"actorProfileId","rule":"required","fieldType":"crossPackageRef"},{"field":"personaId","rule":"required","fieldType":"crossPackageRef"},{"field":"agentSessionId","rule":"required","fieldType":"foreignKey"},{"field":"chatRoomId","rule":"required","fieldType":"foreignKey"},{"field":"target","rule":"required","fieldType":"text"},{"field":"status","rule":"required","fieldType":"text"},{"field":"expiresAt","rule":"required","fieldType":"datetime"}],"schema":{"tableName":"voice_sessions","ddl":"CREATE TABLE IF NOT EXISTS \\"voice_sessions\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID NOT NULL,\\n \\"gateway_session_id\\" TEXT NOT NULL DEFAULT '',\\n \\"actor_profile_id\\" UUID NOT NULL,\\n \\"actor_user_id\\" UUID,\\n \\"persona_id\\" UUID NOT NULL,\\n \\"agent_session_id\\" UUID NOT NULL,\\n \\"chat_room_id\\" UUID NOT NULL,\\n \\"thread_id\\" UUID,\\n \\"target\\" TEXT NOT NULL DEFAULT 'smrt:chat',\\n \\"status\\" TEXT NOT NULL DEFAULT 'active',\\n \\"expires_at\\" TIMESTAMP NOT NULL,\\n \\"last_turn_at\\" TIMESTAMP,\\n \\"last_gateway_turn_id\\" TEXT,\\n \\"persona_snapshot\\" TEXT DEFAULT '{}',\\n \\"metadata\\" TEXT DEFAULT '{}',\\n \\"processed_turn_ids\\" TEXT DEFAULT '[]'\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":true,"unique":false},"gateway_session_id":{"type":"TEXT","notNull":true,"unique":false,"default":""},"actor_profile_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"actor_user_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false,"unique":false},"persona_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"agent_session_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"agent_sessions","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"chat_room_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"chat_rooms","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"thread_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"unique":false,"foreignKey":{"table":"chat_threads","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"target":{"type":"TEXT","notNull":true,"unique":false,"default":"smrt:chat"},"status":{"type":"TEXT","notNull":true,"unique":false,"default":"active"},"expires_at":{"type":"TIMESTAMP","notNull":true,"unique":false},"last_turn_at":{"type":"TIMESTAMP","notNull":false,"unique":false},"last_gateway_turn_id":{"type":"TEXT","notNull":false,"unique":false},"persona_snapshot":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"metadata":{"type":"TEXT","notNull":false,"unique":false,"default":"{}"},"processed_turn_ids":{"type":"TEXT","notNull":false,"unique":false,"default":"[]"}},"indexes":[{"name":"voice_sessions_slug_context_idx","columns":["tenant_id","slug","context"],"unique":true},{"name":"voice_sessions_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"voice_sessions_actor_profile_id_idx","columns":["actor_profile_id"]},{"name":"voice_sessions_actor_user_id_idx","columns":["actor_user_id"]},{"name":"voice_sessions_persona_id_idx","columns":["persona_id"]},{"name":"voice_sessions_agent_session_id_idx","columns":["agent_session_id"]},{"name":"voice_sessions_chat_room_id_idx","columns":["chat_room_id"]},{"name":"voice_sessions_thread_id_idx","columns":["thread_id"]}],"version":"d5cfb90c"},"importPath":"@happyvertical/smrt-chat"}},"moduleType":"smrt","recipes":[{"id":"chat.assistant","className":"AssistantRecipe","label":"Assistant","summary":"Ask an AI assistant about the page you are on, from a dock in the app shell.","synonyms":["ai assistant","ai chat","copilot","chatbot","ask ai","helper"],"models":["@happyvertical/smrt-chat:AgentSession","@happyvertical/smrt-chat:ChatRoom","@happyvertical/smrt-chat:ChatParticipant","@happyvertical/smrt-chat:ChatThread","@happyvertical/smrt-chat:ChatMessage"],"nav":[],"requires":[],"help":{"markdown":"## Overview\\n\\nThe assistant is a chat panel that opens from a button in the app's top bar. It\\nsees the page you are on, so you can ask about what is in front of you and get\\nan answer without leaving it.\\n\\nYou can keep several conversations and come back to them later. The assistant\\nonly reaches the data and actions the app owner allows, and it works with your\\nown permissions: it cannot show you anything you could not open yourself.\\n\\n## Tasks\\n\\n### Ask a question\\n\\n1. Choose the assistant button in the top bar to open the panel.\\n2. Type your question and send it.\\n3. Read the reply as it arrives. Open the panel again from any page to carry on.\\n\\n### Start a new conversation\\n\\n1. Open the panel and choose the conversation list.\\n2. Start a new conversation, or pick an earlier one to carry on.\\n\\n### Approve a change\\n\\nWhen the assistant proposes a change, it shows what will happen and waits.\\n\\n1. Read the proposed change.\\n2. Confirm it to go ahead, or reject it. Nothing changes until you confirm.\\n\\n### Choose a model\\n\\nIf the app offers more than one model, pick one from the list in the panel\\nbefore you send a message.\\n\\n## What the app owner sets up\\n\\n- A model. Hosted models need the service key their provider issues, stored as\\n a secret in the app (\`OPENAI_API_KEY\`, \`ANTHROPIC_API_KEY\` or\\n \`GEMINI_API_KEY\`); only the key for the model the app uses is needed. Models\\n that run in the browser need no key.\\n- The tools the assistant may use. It is offered nothing unless the app lists\\n it, so an empty list means conversation only.\\n- Optionally, report tools. An app can let the assistant draft a report from a\\n request, preview it, and save it only after a person approves that exact\\n report.\\n","fieldRefs":[]},"surfaces":[{"kind":"shell-widget","slot":"header.end","export":"@happyvertical/smrt-chat/svelte#AssistantDock","label":"Assistant","icon":"bot"}],"providers":[{"id":"llm","kind":"llm","options":["openai","anthropic","gemini","webllm","bitgpu"],"required":true,"secrets":["OPENAI_API_KEY","ANTHROPIC_API_KEY","GEMINI_API_KEY"],"browserOptions":["webllm","bitgpu"]}],"runtime":"both","demo":{"mode":"server","reasons":["Needs a server because its package does not build for a browser: node:crypto + node:async_hooks; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-images, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627, #3628).","Provider llm has an in-browser option (webllm, bitgpu)."]}},{"id":"chat.rooms","className":"ChatRoomsRecipe","label":"Team Chat","summary":"Organize team conversations in rooms with threads and reactions.","synonyms":["team chat","channels","group chat","conversations"],"models":["@happyvertical/smrt-chat:ChatRoom","@happyvertical/smrt-chat:ChatMessage","@happyvertical/smrt-chat:ChatParticipant","@happyvertical/smrt-chat:ChatThread","@happyvertical/smrt-chat:ChatReaction"],"nav":[{"label":"Chat Rooms","model":"@happyvertical/smrt-chat:ChatRoom","icon":"users","description":"Team conversations organized by topic or audience.","noun":"chat room"}],"requires":[],"group":{"id":"team-collaboration","label":"Team collaboration","summary":"Keep conversations and shared work in one place."},"section":{"id":"team","label":"Team","icon":"users","description":"People and the conversations that keep them aligned."},"options":{"@happyvertical/smrt-chat:ChatRoom":{"fields":{"metadata":{"visibility":"hidden"},"createdByProfileId":{"visibility":"hidden"},"lastMessageAt":{"label":"Last message","order":1}}},"@happyvertical/smrt-chat:ChatMessage":{"fields":{"metadata":{"visibility":"hidden"},"toolCallData":{"visibility":"hidden"},"attachments":{"visibility":"advanced"}}},"@happyvertical/smrt-chat:ChatParticipant":{"fields":{"lastReadMessageId":{"visibility":"hidden"},"lastSeenAt":{"visibility":"advanced"}}}},"help":{"markdown":"## Overview\\n\\nTeam Chat keeps conversations in rooms so people can find the right discussion,\\nfollow threads, and see reactions without mixing unrelated work together. The\\nroom and message lists are read-only generated views. Create rooms, manage\\nmembers, and send messages through the app's authorized chat workflow.\\n\\n## Tasks\\n\\n### Find the right room\\n\\n1. Open **Chat Rooms** from the navigation.\\n2. Search for a room by its **{field:ChatRoom.name}**, or use its\\n **{field:ChatRoom.topic}** to tell similar rooms apart.\\n3. Open the room and check **{field:ChatRoom.lastMessageAt}** to see where the\\n most recent discussion happened.\\n\\n### Follow a conversation\\n\\n1. Read the room messages and open a thread when you need the discussion in\\n one place.\\n2. Use the thread **{field:ChatThread.title}** to describe the subject when\\n your app supplies one.\\n3. Add a reaction by choosing the **{field:ChatReaction.emoji}** that best\\n communicates your response.\\n\\n### Keep a room useful\\n\\n1. Give the room a clear **{field:ChatRoom.name}** and a short\\n **{field:ChatRoom.description}**.\\n2. Set **{field:ChatRoom.roomType}** deliberately: public for broad team\\n discussion, private for restricted groups, and direct messages for one-to-one\\n conversations.\\n3. Use a focused **{field:ChatMessage.content}** so teammates can scan the\\n conversation and reply in context.\\n","fieldRefs":["ChatMessage.content","ChatReaction.emoji","ChatRoom.description","ChatRoom.lastMessageAt","ChatRoom.name","ChatRoom.roomType","ChatRoom.topic","ChatThread.title"]},"surfaces":[{"kind":"route","path":"/chat/rooms","export":"@happyvertical/smrt-chat/svelte#ChatLayout","label":"Team chat"},{"kind":"playground","export":"@happyvertical/smrt-chat/playground#default","label":"Static chat fixtures"}],"runtime":"both","demoSeed":{"export":"@happyvertical/smrt-chat/playground#chatRoomsFixture"},"demo":{"mode":"server","reasons":["Needs a server because its package does not build for a browser: node:crypto + node:async_hooks; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-images, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627, #3628)."]}}],"smrtDependencies":["@happyvertical/smrt-agents","@happyvertical/smrt-assets","@happyvertical/smrt-core","@happyvertical/smrt-images","@happyvertical/smrt-personas","@happyvertical/smrt-profiles","@happyvertical/smrt-reports","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"],"browser":{"status":"server-only","issues":["#3615","#3617","#3624","#3625","#3626","#3627","#3628"],"reason":"node:crypto + node:async_hooks","via":["@happyvertical/smrt-agents","@happyvertical/smrt-images","@happyvertical/smrt-jobs","@happyvertical/smrt-profiles","@happyvertical/smrt-reports","@happyvertical/smrt-secrets","@happyvertical/smrt-tenancy","@happyvertical/smrt-users"]},"stampsConstructors":true}`));
|
|
11
11
|
//#endregion
|
|
12
12
|
//#region src/runtime-report-tools.ts
|
|
13
13
|
var RUNTIME_REPORT_SOURCES_TOOL_SLUG = "reports.runtime.sources";
|
|
@@ -2024,4 +2024,4 @@ function corsHeaders(request, allowedOrigins, allowCredentials) {
|
|
|
2024
2024
|
//#endregion
|
|
2025
2025
|
export { MAX_CLIENT_TOOLS as A, RUNTIME_REPORT_DEFINE_FUNCTION_NAME as B, SESSION_CONTINUATIONS_FIELD as C, runAssistantTurn as D, createSessionContinuationStore as E, classifyToolError as F, RUNTIME_REPORT_RUN_TOOL_SLUG as G, RUNTIME_REPORT_LIST_FUNCTION_NAME as H, invokeManifestTool as I, createRuntimeReportTools as J, RUNTIME_REPORT_SOURCES_FUNCTION_NAME as K, manifestToolToAITool as L, MAX_CLIENT_TOOL_SCHEMA_BYTES as M, appendClientToolResults as N, CLIENT_TOOL_RESULT_GUIDANCE as O, buildManifestToolCatalog as P, runToolLoop as R, DEFAULT_CONTINUATION_TTL_MS as S, createMemoryContinuationStore as T, RUNTIME_REPORT_LIST_TOOL_SLUG as U, RUNTIME_REPORT_DEFINE_TOOL_SLUG as V, RUNTIME_REPORT_RUN_FUNCTION_NAME as W, runPersonaConversationTurn as _, MAX_CHAT_STREAM_CONTENT_LENGTH as a, CONTINUATION_CLAIM_TTL_MS as b, encodeChatStreamEvent as c, conversationPersonaFromAgentPersona as d, conversationPersonaFromResolved as f, resolveConversationInstructions as g, recallPersonaMemory as h, DEFAULT_CHAT_STREAM_HEARTBEAT_MS as i, MAX_CLIENT_TOOL_RESULT_CHARS as j, DEFAULT_MAX_STEPS as k, runChatConversationStream as l, principalBindingFor as m, ChatStreamError as n, MAX_CHAT_STREAM_MESSAGES as o, formatRecalledMemory as p, RUNTIME_REPORT_SOURCES_TOOL_SLUG as q, ChatStreamUnauthorizedError as r, createChatStreamHandler as s, ChatStreamBadRequestError as t, bindPersonaToSession as u, ASSISTANT_TURN_GENERIC_ERROR as v, createAssistantTurnResponse as w, DEFAULT_ASSISTANT_TURN_HEARTBEAT_MS as x, AssistantTurnUserError as y, sanitizeClientToolDeclarations as z };
|
|
2026
2026
|
|
|
2027
|
-
//# sourceMappingURL=chat-stream-
|
|
2027
|
+
//# sourceMappingURL=chat-stream-CE-vuz1u.js.map
|