@undefineds.co/models 0.2.25 → 0.2.27

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.
Files changed (42) hide show
  1. package/dist/approval.schema.d.ts +4 -0
  2. package/dist/approval.schema.js +6 -1
  3. package/dist/audit.presentation.d.ts +1 -1
  4. package/dist/audit.presentation.js +19 -12
  5. package/dist/audit.schema.d.ts +4 -0
  6. package/dist/audit.schema.js +6 -1
  7. package/dist/bin/udfs.d.ts +2 -0
  8. package/dist/bin/udfs.js +430 -0
  9. package/dist/chat.repository.d.ts +8 -0
  10. package/dist/chat.schema.d.ts +10 -0
  11. package/dist/chat.schema.js +9 -2
  12. package/dist/chat.utils.js +24 -9
  13. package/dist/index.d.ts +9 -3
  14. package/dist/index.js +10 -3
  15. package/dist/issue.repository.d.ts +69 -0
  16. package/dist/issue.repository.js +8 -0
  17. package/dist/issue.schema.d.ts +48 -0
  18. package/dist/issue.schema.js +37 -0
  19. package/dist/message.repository.d.ts +29 -9
  20. package/dist/message.schema.d.ts +29 -6
  21. package/dist/message.schema.js +26 -10
  22. package/dist/namespaces.js +29 -0
  23. package/dist/pod-storage-descriptor.d.ts +189 -0
  24. package/dist/pod-storage-descriptor.js +283 -0
  25. package/dist/repository.d.ts +2 -0
  26. package/dist/repository.js +3 -0
  27. package/dist/resource-id-defaults.d.ts +18 -0
  28. package/dist/resource-id-defaults.js +84 -0
  29. package/dist/run.schema.d.ts +112 -0
  30. package/dist/run.schema.js +89 -0
  31. package/dist/schema.d.ts +176 -8
  32. package/dist/schema.js +11 -0
  33. package/dist/session/session.schema.js +2 -1
  34. package/dist/sidecar/persistence-mapping.d.ts +3 -3
  35. package/dist/sidecar/sidecar-events.d.ts +45 -45
  36. package/dist/sidecar/sidecar-events.js +1 -1
  37. package/dist/task.schema.d.ts +62 -0
  38. package/dist/task.schema.js +49 -0
  39. package/dist/thread.repository.d.ts +15 -3
  40. package/dist/thread.schema.d.ts +14 -2
  41. package/dist/thread.schema.js +13 -5
  42. package/package.json +11 -3
@@ -3,6 +3,8 @@ export declare const chatRepository: import("@undefineds.co/drizzle-solid/dist/c
3
3
  title: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
4
4
  description: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
5
5
  avatarUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
6
+ author: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
7
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
6
8
  starred: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"boolean", null, false, true>;
7
9
  muted: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"boolean", null, false, true>;
8
10
  unreadCount: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, true>;
@@ -19,6 +21,8 @@ export declare const chatRepository: import("@undefineds.co/drizzle-solid/dist/c
19
21
  title: string;
20
22
  description: string;
21
23
  avatarUrl: string;
24
+ author: string;
25
+ status: string;
22
26
  starred: boolean;
23
27
  muted: boolean;
24
28
  unreadCount: number;
@@ -35,6 +39,8 @@ export declare const chatRepository: import("@undefineds.co/drizzle-solid/dist/c
35
39
  id?: string | undefined;
36
40
  description?: string | undefined;
37
41
  avatarUrl?: string | undefined;
42
+ author?: string | undefined;
43
+ status?: string | undefined;
38
44
  starred?: boolean | undefined;
39
45
  muted?: boolean | undefined;
40
46
  unreadCount?: number | undefined;
@@ -51,6 +57,8 @@ export declare const chatRepository: import("@undefineds.co/drizzle-solid/dist/c
51
57
  title?: string | undefined;
52
58
  description?: string | null | undefined;
53
59
  avatarUrl?: string | null | undefined;
60
+ author?: string | null | undefined;
61
+ status?: string | undefined;
54
62
  starred?: boolean | null | undefined;
55
63
  muted?: boolean | null | undefined;
56
64
  unreadCount?: number | null | undefined;
@@ -1,4 +1,10 @@
1
1
  export type ChatMemberRole = 'owner' | 'admin' | 'member';
2
+ export type ChatStatusType = 'active' | 'archived' | 'deleted';
3
+ export declare const ChatStatus: {
4
+ readonly ACTIVE: "active";
5
+ readonly ARCHIVED: "archived";
6
+ readonly DELETED: "deleted";
7
+ };
2
8
  export interface ChatMetadata {
3
9
  memberRoles?: Record<string, ChatMemberRole>;
4
10
  }
@@ -24,6 +30,8 @@ export declare const chatResource: import("@undefineds.co/drizzle-solid/dist/cor
24
30
  title: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
25
31
  description: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
26
32
  avatarUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
33
+ author: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
34
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
27
35
  starred: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"boolean", null, false, true>;
28
36
  muted: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"boolean", null, false, true>;
29
37
  unreadCount: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, true>;
@@ -41,6 +49,8 @@ export declare const chatTable: import("@undefineds.co/drizzle-solid/dist/core/s
41
49
  title: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
42
50
  description: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
43
51
  avatarUrl: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
52
+ author: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
53
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
44
54
  starred: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"boolean", null, false, true>;
45
55
  muted: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"boolean", null, false, true>;
46
56
  unreadCount: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"integer", null, false, true>;
@@ -1,5 +1,11 @@
1
1
  import { boolean, object, podTable, string, text, timestamp, uri, id, integer } from '@undefineds.co/drizzle-solid';
2
2
  import { UDFS, DCTerms, SCHEMA, MEETING, WF } from './namespaces.js';
3
+ import { chatResourceId } from './resource-id-defaults.js';
4
+ export const ChatStatus = {
5
+ ACTIVE: 'active',
6
+ ARCHIVED: 'archived',
7
+ DELETED: 'deleted',
8
+ };
3
9
  /**
4
10
  * Chat resource.
5
11
  *
@@ -18,12 +24,14 @@ import { UDFS, DCTerms, SCHEMA, MEETING, WF } from './namespaces.js';
18
24
  * - Threads stored as fragments in same file: /.data/chat/{id}/index.ttl#{threadId}
19
25
  */
20
26
  export const chatResource = podTable('chats', {
21
- id: id('id'),
27
+ id: id('id').default(chatResourceId),
22
28
  // Display
23
29
  title: string('title').predicate(DCTerms.title).notNull(),
24
30
  description: string('description').predicate(DCTerms.description),
25
31
  avatarUrl: uri('avatarUrl').predicate(SCHEMA.image),
26
32
  // Chat state
33
+ author: uri('author').predicate(DCTerms.creator),
34
+ status: string('status').predicate(UDFS.status).notNull().default(ChatStatus.ACTIVE),
27
35
  starred: boolean('starred').predicate(UDFS.favorite).default(false),
28
36
  muted: boolean('muted').predicate(UDFS.muted).default(false),
29
37
  unreadCount: integer('unreadCount').predicate(UDFS.unreadCount).default(0),
@@ -49,7 +57,6 @@ export const chatResource = podTable('chats', {
49
57
  sparqlEndpoint: '/.data/chat/-/sparql',
50
58
  type: MEETING.LongChat,
51
59
  namespace: UDFS,
52
- subjectTemplate: '{id}/index.ttl#this',
53
60
  });
54
61
  // Compatibility alias. New model code should prefer `chatResource`.
55
62
  export const chatTable = chatResource;
@@ -1,6 +1,5 @@
1
- import { extractPodResourceTemplateValue, parsePodResourceRef } from '@undefineds.co/drizzle-solid';
2
- import { chatResource } from './chat.schema.js';
3
- import { threadResource } from './thread.schema.js';
1
+ import { parsePodResourceRef } from '@undefineds.co/drizzle-solid';
2
+ import { commandKindFromResourceId, surfaceIdFromCommandResourceId, } from './resource-id-defaults.js';
4
3
  export const toTimestamp = (value, fallback = 0) => {
5
4
  if (value instanceof Date)
6
5
  return value.getTime();
@@ -13,19 +12,35 @@ export const toTimestamp = (value, fallback = 0) => {
13
12
  return fallback;
14
13
  };
15
14
  export function extractChatIdFromChatRef(chatRef) {
16
- return extractPodResourceTemplateValue(threadResource, chatRef, 'chat')
17
- ?? extractPodResourceTemplateValue(chatResource, chatRef);
15
+ if (!chatRef)
16
+ return null;
17
+ const parsed = parsePodResourceRef({ config: { base: '/.data/chat/' } }, chatRef);
18
+ const resourceId = parsed?.resourceId ?? chatRef;
19
+ const direct = resourceId.match(/^([^/]+)\/index\.ttl#this$/);
20
+ if (direct)
21
+ return decodeURIComponent(direct[1]);
22
+ return surfaceIdFromCommandResourceId(resourceId);
18
23
  }
19
24
  export function extractThreadIdFromThreadRef(threadRef) {
20
- return extractPodResourceTemplateValue(threadResource, threadRef);
25
+ if (!threadRef)
26
+ return null;
27
+ const parsed = parsePodResourceRef({ config: { base: '/.data/' } }, threadRef);
28
+ const resourceId = parsed?.resourceId ?? threadRef;
29
+ const hashIndex = resourceId.lastIndexOf('#');
30
+ return hashIndex >= 0 && hashIndex < resourceId.length - 1
31
+ ? resourceId.slice(hashIndex + 1)
32
+ : resourceId;
21
33
  }
22
34
  export function extractChatThreadRef(uri) {
23
35
  if (!uri)
24
36
  return { chatId: null, threadId: null };
25
- const parsed = parsePodResourceRef(threadResource, uri);
37
+ const parsed = parsePodResourceRef({ config: { base: '/.data/' } }, uri);
38
+ const resourceId = parsed?.resourceId ?? uri;
26
39
  return {
27
- chatId: parsed?.templateValues.chat ?? null,
28
- threadId: parsed?.templateValues.id ?? null,
40
+ chatId: commandKindFromResourceId(resourceId) === 'chat'
41
+ ? surfaceIdFromCommandResourceId(resourceId)
42
+ : null,
43
+ threadId: extractThreadIdFromThreadRef(resourceId),
29
44
  };
30
45
  }
31
46
  export function resolveThreadChatId(thread) {
package/dist/index.d.ts CHANGED
@@ -5,13 +5,18 @@ export * from './profile.repository';
5
5
  export * from './profile.schema';
6
6
  export { ContactGender, contactResource, contactTable, ContactClass, ContactType, isAgentContact, isGroupContact, normalizeContactGender, type ContactRow, type ContactInsert, type ContactUpdate, type ContactClassValue, type ContactGenderValue, type ContactTypeValue, } from './contact.schema';
7
7
  export { contactRepository } from './contact.repository';
8
- export { chatResource, chatTable, type ChatMetadata, type ChatMemberRole, type ChatRow, type ChatInsert, type ChatUpdate, } from './chat.schema';
8
+ export { ChatStatus, chatResource, chatTable, type ChatMetadata, type ChatMemberRole, type ChatStatusType, type ChatRow, type ChatInsert, type ChatUpdate, } from './chat.schema';
9
9
  export { chatRepository } from './chat.repository';
10
10
  export { extractChatIdFromChatRef, extractChatThreadRef, extractThreadIdFromThreadRef, resolveThreadChatId, toTimestamp, type ChatThreadRef, } from './chat.utils';
11
- export { threadResource, threadTable, type ThreadRow, type ThreadInsert, type ThreadUpdate, } from './thread.schema';
11
+ export { ThreadStatus, threadResource, threadTable, type ThreadStatusType, type ThreadRow, type ThreadInsert, type ThreadUpdate, } from './thread.schema';
12
12
  export { threadRepository } from './thread.repository';
13
- export { messageResource, messageTable, type MessageRow, type MessageInsert, type MessageUpdate, } from './message.schema';
13
+ export { MessageRole, MessageStatus, messageResource, messageTable, type MessageRoleType, type MessageStatusType, type MessageRow, type MessageInsert, type MessageUpdate, } from './message.schema';
14
14
  export { messageRepository } from './message.repository';
15
+ export { TaskStatus, TaskTriggerKind, taskResource, taskTable, type TaskStatusType, type TaskTriggerKindType, type TaskRow, type TaskInsert, type TaskUpdate, } from './task.schema';
16
+ export { RunStatus, RunStepType, runResource, runStepResource, runTable, runStepTable, type RunStatusType, type RunStepTypeValue, type RunRow, type RunInsert, type RunUpdate, type RunStepRow, type RunStepInsert, type RunStepUpdate, } from './run.schema';
17
+ export { chatResourceId, commandKindFromResourceId, dateParts, messageResourceId, parentDir, resourceKey, runResourceId, runStepResourceId, surfaceIdFromCommandResourceId, taskResourceId, threadResourceId, type CommandKind, type DateInput, type DateParts, } from './resource-id-defaults';
18
+ export { issueResource, issueTable, type IssueStatus, type IssuePriority, type IssueRow, type IssueInsert, type IssueUpdate, } from './issue.schema';
19
+ export { issueRepository } from './issue.repository';
15
20
  export { MessageBlockType, MessageBlockStatus, type BaseMessageBlock, type PlaceholderMessageBlock, type MainTextMessageBlock, type ThinkingMessageBlock, type ImageMessageBlock, type CodeMessageBlock, type ToolMessageBlock, type FileMessageBlock, type ErrorMessageBlock, type CitationMessageBlock, type MessageBlock, type MessageRichContent, createMessageBlock, isBlockType, parseMessageBlocks, serializeMessageBlocks, } from './types/message-block';
16
21
  export { type ToolApprovalBlock, type ToolCallBlock, type TaskProgressBlock, type CollaborationRichBlock, type ToolRisk, type ToolApprovalStatus, type ToolCallStatus, type TaskProgressStepStatus, } from "./types/collaboration-blocks";
17
22
  export * from "./fixtures/contracts-chat-contact";
@@ -39,6 +44,7 @@ export { aiModelResource, aiModelTable, type AIModelRow, type AIModelInsert, typ
39
44
  export { agentStatusResource, agentStatusTable, aiConfigResource, aiConfigTable, indexedFileResource, indexedFileTable, vectorStoreResource, vectorStoreTable, type AgentStatusRow, type AgentStatusInsert, type AgentStatusUpdate, type AIConfigRow, type AIConfigInsert, type AIConfigUpdate as AIConfigResourceUpdate, type IndexedFileRow, type IndexedFileInsert, type IndexedFileUpdate, type VectorStoreRow, type VectorStoreInsert, type VectorStoreUpdate, } from './ai-runtime.schema';
40
45
  export { aiConfigModelRef, aiConfigModelUri, aiConfigProviderRef, aiConfigProviderUri, buildAIConfigDisconnectPlan, buildAIConfigMutationPlan, buildAIConfigProviderStateMap, getAIConfigDefaultBaseUrl, getAIConfigProviderCatalog, getAIConfigProviderFamilyIds, getAIConfigProviderMetadata, getDefaultAIConfigCredentialId, normalizeAIConfigProviderId, normalizeAIConfigModelId, normalizeAIConfigResourceId, sameAIConfigProviderFamily, selectAIConfigCredential, type AIConfigModel, type AIConfigCredentialSelection, type AIConfigDisconnectPlan, type AIConfigMutationPlan, type AIConfigProviderCatalogEntry, type AIConfigProviderState, type AIConfigUpdate, type BuildAIConfigProviderStateMapOptions, } from './ai-config';
41
46
  export { applySolidComunicaPatches, } from './comunica-patches';
47
+ export { credentialDescriptor, createPodModelDescriptorRegistry, createPodSchema, createPodStorage, officialPodModelDescriptors, podSchema, type PodModelDescriptor, type PodModelDescriptorSource, type PodModelDescriptorTrustLevel, type PodModelFieldDescriptor, type PodModelFieldType, type PodModelMergePolicy, type PodSchemaClassEntry, type PodSchemaPredicateEntry, type PodSchemaSearchEntry, type PodStorageCommitResult, type PodStorageMutationPlan, type PodStorageValidationResult, } from './pod-storage-descriptor';
42
48
  export { createRepositoryDescriptor, definePodRepository, initSolidResources, initSolidTables, type AnyPodResource, type AnyPodTable, type PodRepositoryDescriptor, type RepositoryCacheOptions, type RepositoryInvalidations, type RepositoryScope, type SolidDatabase, } from './repository';
43
49
  export { importJobSchema } from './import';
44
50
  export { eq, ne, and, or, drizzle } from '@undefineds.co/drizzle-solid';
package/dist/index.js CHANGED
@@ -19,13 +19,19 @@ export * from './profile.schema.js';
19
19
  export { ContactGender, contactResource, contactTable, ContactClass, ContactType, isAgentContact, isGroupContact, normalizeContactGender, } from './contact.schema.js';
20
20
  export { contactRepository } from './contact.repository.js';
21
21
  // Chat & Message - 聊天和消息
22
- export { chatResource, chatTable, } from './chat.schema.js';
22
+ export { ChatStatus, chatResource, chatTable, } from './chat.schema.js';
23
23
  export { chatRepository } from './chat.repository.js';
24
24
  export { extractChatIdFromChatRef, extractChatThreadRef, extractThreadIdFromThreadRef, resolveThreadChatId, toTimestamp, } from './chat.utils.js';
25
- export { threadResource, threadTable, } from './thread.schema.js';
25
+ export { ThreadStatus, threadResource, threadTable, } from './thread.schema.js';
26
26
  export { threadRepository } from './thread.repository.js';
27
- export { messageResource, messageTable, } from './message.schema.js';
27
+ export { MessageRole, MessageStatus, messageResource, messageTable, } from './message.schema.js';
28
28
  export { messageRepository } from './message.repository.js';
29
+ export { TaskStatus, TaskTriggerKind, taskResource, taskTable, } from './task.schema.js';
30
+ export { RunStatus, RunStepType, runResource, runStepResource, runTable, runStepTable, } from './run.schema.js';
31
+ export { chatResourceId, commandKindFromResourceId, dateParts, messageResourceId, parentDir, resourceKey, runResourceId, runStepResourceId, surfaceIdFromCommandResourceId, taskResourceId, threadResourceId, } from './resource-id-defaults.js';
32
+ // Issue - user-facing work item that can be inspected through chat/thread
33
+ export { issueResource, issueTable, } from './issue.schema.js';
34
+ export { issueRepository } from './issue.repository.js';
29
35
  // Message Block - 消息块类型系统 (Block-based Message System)
30
36
  export { MessageBlockType, MessageBlockStatus, createMessageBlock, isBlockType, parseMessageBlocks, serializeMessageBlocks, } from './types/message-block.js';
31
37
  // Wave A CP0: fixtures for downstream parallel development
@@ -69,6 +75,7 @@ export { aiModelResource, aiModelTable, } from "./ai-model.schema.js";
69
75
  export { agentStatusResource, agentStatusTable, aiConfigResource, aiConfigTable, indexedFileResource, indexedFileTable, vectorStoreResource, vectorStoreTable, } from './ai-runtime.schema.js';
70
76
  export { aiConfigModelRef, aiConfigModelUri, aiConfigProviderRef, aiConfigProviderUri, buildAIConfigDisconnectPlan, buildAIConfigMutationPlan, buildAIConfigProviderStateMap, getAIConfigDefaultBaseUrl, getAIConfigProviderCatalog, getAIConfigProviderFamilyIds, getAIConfigProviderMetadata, getDefaultAIConfigCredentialId, normalizeAIConfigProviderId, normalizeAIConfigModelId, normalizeAIConfigResourceId, sameAIConfigProviderFamily, selectAIConfigCredential, } from './ai-config/index.js';
71
77
  export { applySolidComunicaPatches, } from './comunica-patches.js';
78
+ export { credentialDescriptor, createPodModelDescriptorRegistry, createPodSchema, createPodStorage, officialPodModelDescriptors, podSchema, } from './pod-storage-descriptor.js';
72
79
  export { createRepositoryDescriptor, definePodRepository, initSolidResources, initSolidTables, } from './repository.js';
73
80
  // Import Job - 导入任务
74
81
  export { importJobSchema } from './import/index.js';
@@ -0,0 +1,69 @@
1
+ export declare const issueRepository: import("@undefineds.co/drizzle-solid/dist/core/repository").PodRepositoryDescriptor<import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
+ title: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
4
+ description: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
5
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
6
+ priority: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
7
+ labels: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "string", false, false>;
8
+ chat: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
9
+ thread: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
10
+ parentIssue: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
11
+ tasks: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "uri", false, false>;
12
+ createdBy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
13
+ assignedTo: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
14
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
15
+ updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
16
+ closedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
17
+ deletedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
18
+ }>>, {
19
+ id: string;
20
+ title: string;
21
+ description: string;
22
+ status: string;
23
+ priority: string;
24
+ labels: string[];
25
+ chat: string;
26
+ thread: string;
27
+ parentIssue: string;
28
+ tasks: string[];
29
+ createdBy: string;
30
+ assignedTo: string;
31
+ createdAt: Date;
32
+ updatedAt: Date;
33
+ closedAt: Date;
34
+ deletedAt: Date;
35
+ }, {
36
+ title: string;
37
+ id?: string | undefined;
38
+ description?: string | undefined;
39
+ status?: string | undefined;
40
+ priority?: string | undefined;
41
+ labels?: string[] | undefined;
42
+ chat?: string | undefined;
43
+ thread?: string | undefined;
44
+ parentIssue?: string | undefined;
45
+ tasks?: string[] | undefined;
46
+ createdBy?: string | undefined;
47
+ assignedTo?: string | undefined;
48
+ createdAt?: Date | undefined;
49
+ updatedAt?: Date | undefined;
50
+ closedAt?: Date | undefined;
51
+ deletedAt?: Date | undefined;
52
+ }, {
53
+ id?: string | null | undefined;
54
+ title?: string | undefined;
55
+ description?: string | null | undefined;
56
+ status?: string | undefined;
57
+ priority?: string | null | undefined;
58
+ labels?: string[] | null | undefined;
59
+ chat?: string | null | undefined;
60
+ thread?: string | null | undefined;
61
+ parentIssue?: string | null | undefined;
62
+ tasks?: string[] | null | undefined;
63
+ createdBy?: string | null | undefined;
64
+ assignedTo?: string | null | undefined;
65
+ createdAt?: Date | undefined;
66
+ updatedAt?: Date | undefined;
67
+ closedAt?: Date | null | undefined;
68
+ deletedAt?: Date | null | undefined;
69
+ }, Record<string, unknown>>;
@@ -0,0 +1,8 @@
1
+ import { definePodRepository } from './repository.js';
2
+ import { issueResource } from './issue.schema.js';
3
+ export const issueRepository = definePodRepository({
4
+ namespace: 'issue',
5
+ table: issueResource,
6
+ searchableFields: ['title', 'description'],
7
+ defaultSort: { field: 'updatedAt', direction: 'desc' },
8
+ });
@@ -0,0 +1,48 @@
1
+ export type IssueStatus = 'open' | 'triaging' | 'in_progress' | 'blocked' | 'resolved' | 'closed';
2
+ export type IssuePriority = 'low' | 'medium' | 'high' | 'urgent';
3
+ /**
4
+ * User-facing work item.
5
+ *
6
+ * Issue is the product entry for a requirement, bug, support item,
7
+ * investigation, or feature request. Executable slices live in Task.
8
+ * The visible process remains Chat/Thread/Message through chat/thread links.
9
+ */
10
+ export declare const issueResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
11
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
12
+ title: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
13
+ description: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
14
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
15
+ priority: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
16
+ labels: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "string", false, false>;
17
+ chat: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
18
+ thread: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
19
+ parentIssue: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
20
+ tasks: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "uri", false, false>;
21
+ createdBy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
22
+ assignedTo: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
23
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
24
+ updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
25
+ closedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
26
+ deletedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
27
+ }>>;
28
+ export declare const issueTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
29
+ id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
30
+ title: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
31
+ description: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
32
+ status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
33
+ priority: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
34
+ labels: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "string", false, false>;
35
+ chat: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
36
+ thread: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
37
+ parentIssue: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
38
+ tasks: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"array", "uri", false, false>;
39
+ createdBy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
40
+ assignedTo: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
41
+ createdAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
42
+ updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, true, true>;
43
+ closedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
44
+ deletedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
45
+ }>>;
46
+ export type IssueRow = typeof issueResource.$inferSelect;
47
+ export type IssueInsert = typeof issueResource.$inferInsert;
48
+ export type IssueUpdate = typeof issueResource.$inferUpdate;
@@ -0,0 +1,37 @@
1
+ import { id, podTable, string, text, timestamp, uri } from '@undefineds.co/drizzle-solid';
2
+ import { DCTerms, UDFS } from './namespaces.js';
3
+ import { chatResource } from './chat.schema.js';
4
+ import { threadResource } from './thread.schema.js';
5
+ /**
6
+ * User-facing work item.
7
+ *
8
+ * Issue is the product entry for a requirement, bug, support item,
9
+ * investigation, or feature request. Executable slices live in Task.
10
+ * The visible process remains Chat/Thread/Message through chat/thread links.
11
+ */
12
+ export const issueResource = podTable('issue', {
13
+ id: id('id'),
14
+ title: string('title').predicate(DCTerms.title).notNull(),
15
+ description: text('description').predicate(DCTerms.description),
16
+ status: string('status').predicate(UDFS.status).notNull().default('open'),
17
+ priority: string('priority').predicate(UDFS.priority).default('medium'),
18
+ labels: text('labels').array().predicate(UDFS.tags),
19
+ chat: uri('chat').predicate(UDFS.conversation).link(chatResource),
20
+ thread: uri('thread').predicate(UDFS.inThread).link(threadResource),
21
+ parentIssue: uri('parentIssue').predicate(UDFS.parentIssue).link('issue'),
22
+ tasks: uri('tasks').predicate(UDFS.task).array(),
23
+ createdBy: uri('createdBy').predicate(DCTerms.creator),
24
+ assignedTo: uri('assignedTo').predicate(UDFS.assignedTo),
25
+ createdAt: timestamp('createdAt').predicate(DCTerms.created).notNull().defaultNow(),
26
+ updatedAt: timestamp('updatedAt').predicate(DCTerms.modified).notNull().defaultNow(),
27
+ closedAt: timestamp('closedAt').predicate(UDFS.closedAt),
28
+ deletedAt: timestamp('deletedAt').predicate(UDFS.deletedAt),
29
+ }, {
30
+ base: '/.data/issues/',
31
+ sparqlEndpoint: '/.data/issues/-/sparql',
32
+ type: UDFS.Issue,
33
+ namespace: UDFS,
34
+ subjectTemplate: '{id}.ttl',
35
+ });
36
+ // Compatibility alias. New model code should prefer `issueResource`.
37
+ export const issueTable = issueResource;
@@ -1,12 +1,17 @@
1
1
  export declare const messageRepository: import("@undefineds.co/drizzle-solid/dist/core/repository").PodRepositoryDescriptor<import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
2
2
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
3
- chat: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
4
- thread: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
5
- maker: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
3
+ commandKind: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
4
+ surfaceId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
5
+ chat: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
6
+ thread: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
7
+ maker: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
6
8
  role: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
7
9
  content: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
8
10
  richContent: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
9
11
  status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
12
+ toolName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
13
+ toolCallId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
14
+ metadata: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"object", null, false, false>;
10
15
  replacedBy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
11
16
  deletedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
12
17
  senderName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -20,6 +25,8 @@ export declare const messageRepository: import("@undefineds.co/drizzle-solid/dis
20
25
  updatedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
21
26
  }>>, {
22
27
  id: string;
28
+ commandKind: string;
29
+ surfaceId: string;
23
30
  chat: string;
24
31
  thread: string;
25
32
  maker: string;
@@ -27,6 +34,9 @@ export declare const messageRepository: import("@undefineds.co/drizzle-solid/dis
27
34
  content: string;
28
35
  richContent: string;
29
36
  status: string;
37
+ toolName: string;
38
+ toolCallId: string;
39
+ metadata: Record<string, unknown>;
30
40
  replacedBy: string;
31
41
  deletedAt: Date;
32
42
  senderName: string;
@@ -39,14 +49,19 @@ export declare const messageRepository: import("@undefineds.co/drizzle-solid/dis
39
49
  createdAt: Date;
40
50
  updatedAt: Date;
41
51
  }, {
42
- chat: string;
43
- thread: string;
44
- maker: string;
45
52
  content: string;
46
53
  id?: string | undefined;
54
+ commandKind?: string | undefined;
55
+ surfaceId?: string | undefined;
56
+ chat?: string | undefined;
57
+ thread?: string | undefined;
58
+ maker?: string | undefined;
47
59
  role?: string | undefined;
48
60
  richContent?: string | undefined;
49
61
  status?: string | undefined;
62
+ toolName?: string | undefined;
63
+ toolCallId?: string | undefined;
64
+ metadata?: Record<string, unknown> | undefined;
50
65
  replacedBy?: string | undefined;
51
66
  deletedAt?: Date | undefined;
52
67
  senderName?: string | undefined;
@@ -60,13 +75,18 @@ export declare const messageRepository: import("@undefineds.co/drizzle-solid/dis
60
75
  updatedAt?: Date | undefined;
61
76
  }, {
62
77
  id?: string | null | undefined;
63
- chat?: string | undefined;
64
- thread?: string | undefined;
65
- maker?: string | undefined;
78
+ commandKind?: string | undefined;
79
+ surfaceId?: string | undefined;
80
+ chat?: string | null | undefined;
81
+ thread?: string | null | undefined;
82
+ maker?: string | null | undefined;
66
83
  role?: string | undefined;
67
84
  content?: string | undefined;
68
85
  richContent?: string | null | undefined;
69
86
  status?: string | undefined;
87
+ toolName?: string | null | undefined;
88
+ toolCallId?: string | null | undefined;
89
+ metadata?: Record<string, unknown> | null | undefined;
70
90
  replacedBy?: string | null | undefined;
71
91
  deletedAt?: Date | null | undefined;
72
92
  senderName?: string | null | undefined;
@@ -1,3 +1,16 @@
1
+ export type MessageRoleType = 'user' | 'assistant' | 'system';
2
+ export type MessageStatusType = 'in_progress' | 'completed' | 'incomplete' | 'sent';
3
+ export declare const MessageRole: {
4
+ readonly USER: "user";
5
+ readonly ASSISTANT: "assistant";
6
+ readonly SYSTEM: "system";
7
+ };
8
+ export declare const MessageStatus: {
9
+ readonly IN_PROGRESS: "in_progress";
10
+ readonly COMPLETED: "completed";
11
+ readonly INCOMPLETE: "incomplete";
12
+ readonly SENT: "sent";
13
+ };
1
14
  /**
2
15
  * Message resource (aligned with xpod).
3
16
  *
@@ -13,13 +26,18 @@
13
26
  */
14
27
  export declare const messageResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
15
28
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
16
- chat: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
17
- thread: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
18
- maker: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
29
+ commandKind: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
30
+ surfaceId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
31
+ chat: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
32
+ thread: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
33
+ maker: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
19
34
  role: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
20
35
  content: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
21
36
  richContent: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
22
37
  status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
38
+ toolName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
39
+ toolCallId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
40
+ metadata: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"object", null, false, false>;
23
41
  replacedBy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
24
42
  deletedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
25
43
  senderName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -34,13 +52,18 @@ export declare const messageResource: import("@undefineds.co/drizzle-solid/dist/
34
52
  }>>;
35
53
  export declare const messageTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
36
54
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
37
- chat: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
38
- thread: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
39
- maker: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, true, false>;
55
+ commandKind: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
56
+ surfaceId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
57
+ chat: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
58
+ thread: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
59
+ maker: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
40
60
  role: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
41
61
  content: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, false>;
42
62
  richContent: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
43
63
  status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
64
+ toolName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
65
+ toolCallId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
66
+ metadata: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"object", null, false, false>;
44
67
  replacedBy: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
45
68
  deletedAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
46
69
  senderName: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -1,7 +1,19 @@
1
- import { podTable, uri, string, text, timestamp, id } from '@undefineds.co/drizzle-solid';
1
+ import { object, podTable, uri, string, text, timestamp, id } from '@undefineds.co/drizzle-solid';
2
2
  import { UDFS, DCTerms, FOAF, MEETING, SCHEMA, SIOC, WF } from './namespaces.js';
3
3
  import { chatResource } from './chat.schema.js';
4
4
  import { threadResource } from './thread.schema.js';
5
+ import { messageResourceId } from './resource-id-defaults.js';
6
+ export const MessageRole = {
7
+ USER: 'user',
8
+ ASSISTANT: 'assistant',
9
+ SYSTEM: 'system',
10
+ };
11
+ export const MessageStatus = {
12
+ IN_PROGRESS: 'in_progress',
13
+ COMPLETED: 'completed',
14
+ INCOMPLETE: 'incomplete',
15
+ SENT: 'sent',
16
+ };
5
17
  /**
6
18
  * Message resource (aligned with xpod).
7
19
  *
@@ -16,21 +28,26 @@ import { threadResource } from './thread.schema.js';
16
28
  * - chat/thread are RDF URI relations. Short ids remain accepted at API/query call sites via ORM URI template resolution.
17
29
  */
18
30
  export const messageResource = podTable('chat_message', {
19
- id: id('id'),
31
+ id: id('id').default(messageResourceId),
32
+ commandKind: string('commandKind').predicate(UDFS.commandKind).notNull().default('chat'),
33
+ surfaceId: string('surfaceId').predicate(UDFS.surfaceId).notNull().default('default'),
20
34
  // Chat relation. In RDF this is an inverse Solid Chat link: <chat> wf:message <message>.
21
- chat: uri('chat').predicate(WF.message).inverse().notNull().link(chatResource),
35
+ chat: uri('chat').predicate(WF.message).inverse().link(chatResource),
22
36
  // Thread relation. In RDF this is an inverse Solid Chat/SIOC link: <thread> sioc:has_member <message>.
23
- thread: uri('thread').predicate(SIOC.has_member).inverse().notNull().link(threadResource),
37
+ thread: uri('thread').predicate(SIOC.hasContainer).link(threadResource),
24
38
  // maker is the entity URI of the message author:
25
39
  // - User: their WebID (https://user.pod/profile/card#me)
26
40
  // - AI: Agent URI (/.data/agents/{id}.ttl#this)
27
41
  // - External: Contact URI (/.data/contacts/{id}.ttl#this)
28
42
  // No reference() constraint - accepts any valid URI.
29
- maker: uri('maker').predicate(FOAF.maker).notNull(),
30
- role: string('role').predicate(UDFS.messageType).notNull().default('user'),
43
+ maker: uri('maker').predicate(FOAF.maker),
44
+ role: string('role').predicate(UDFS.messageType).notNull().default(MessageRole.USER),
31
45
  content: text('content').predicate(SIOC.content).notNull(),
32
46
  richContent: text('richContent').predicate(SIOC.richContent),
33
- status: string('status').predicate(UDFS.messageStatus).notNull().default('sent'),
47
+ status: string('status').predicate(UDFS.messageStatus).notNull().default(MessageStatus.COMPLETED),
48
+ toolName: string('toolName').predicate(UDFS.toolName),
49
+ toolCallId: string('toolCallId').predicate(UDFS.toolCallId),
50
+ metadata: object('metadata').predicate(UDFS.metadata),
34
51
  replacedBy: string('replacedBy').predicate(DCTerms.isReplacedBy),
35
52
  deletedAt: timestamp('deletedAt').predicate(SCHEMA.dateDeleted),
36
53
  // Group message extensions
@@ -45,11 +62,10 @@ export const messageResource = podTable('chat_message', {
45
62
  createdAt: timestamp('createdAt').predicate(DCTerms.created).notNull().defaultNow(),
46
63
  updatedAt: timestamp('updatedAt').predicate(DCTerms.modified),
47
64
  }, {
48
- base: '/.data/chat/',
49
- sparqlEndpoint: '/.data/chat/-/sparql',
65
+ base: '/.data/',
66
+ sparqlEndpoint: '/.data/-/sparql',
50
67
  type: MEETING.Message,
51
68
  namespace: UDFS,
52
- subjectTemplate: '{chat|id}/{yyyy}/{MM}/{dd}/messages.ttl#{id}',
53
69
  });
54
70
  // Compatibility alias. New model code should prefer `messageResource`.
55
71
  export const messageTable = messageResource;