@wfm-cn/dsh-storage 0.0.0-stage → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +21 -0
  3. package/README.md +137 -2
  4. package/cordis.patch.yml +3 -0
  5. package/lib/backends/database.js +578 -0
  6. package/lib/backfill.js +331 -0
  7. package/lib/client/index.js +79 -0
  8. package/lib/client/panel.js +299 -0
  9. package/lib/client/toast.js +66 -0
  10. package/lib/client.js +1 -0
  11. package/lib/compaction.js +108 -0
  12. package/lib/config.js +171 -0
  13. package/lib/ddl.js +323 -0
  14. package/lib/generated/mysql/browser.js +17 -0
  15. package/lib/generated/mysql/client.js +34 -0
  16. package/lib/generated/mysql/commonInputTypes.js +10 -0
  17. package/lib/generated/mysql/enums.js +10 -0
  18. package/lib/generated/mysql/internal/class.js +49 -0
  19. package/lib/generated/mysql/internal/prismaNamespace.js +146 -0
  20. package/lib/generated/mysql/internal/prismaNamespaceBrowser.js +117 -0
  21. package/lib/generated/mysql/models/AiChatHistory.js +1 -0
  22. package/lib/generated/mysql/models/AiMessage.js +1 -0
  23. package/lib/generated/mysql/models.js +1 -0
  24. package/lib/generated/postgresql/browser.js +17 -0
  25. package/lib/generated/postgresql/client.js +34 -0
  26. package/lib/generated/postgresql/commonInputTypes.js +10 -0
  27. package/lib/generated/postgresql/enums.js +10 -0
  28. package/lib/generated/postgresql/internal/class.js +49 -0
  29. package/lib/generated/postgresql/internal/prismaNamespace.js +131 -0
  30. package/lib/generated/postgresql/internal/prismaNamespaceBrowser.js +102 -0
  31. package/lib/generated/postgresql/models/AiChatHistory.js +1 -0
  32. package/lib/generated/postgresql/models/AiMessage.js +1 -0
  33. package/lib/generated/postgresql/models.js +1 -0
  34. package/lib/generated/sqlite/browser.js +17 -0
  35. package/lib/generated/sqlite/client.js +34 -0
  36. package/lib/generated/sqlite/commonInputTypes.js +10 -0
  37. package/lib/generated/sqlite/enums.js +10 -0
  38. package/lib/generated/sqlite/internal/class.js +49 -0
  39. package/lib/generated/sqlite/internal/prismaNamespace.js +128 -0
  40. package/lib/generated/sqlite/internal/prismaNamespaceBrowser.js +99 -0
  41. package/lib/generated/sqlite/models/AiChatHistory.js +1 -0
  42. package/lib/generated/sqlite/models/AiMessage.js +1 -0
  43. package/lib/generated/sqlite/models.js +1 -0
  44. package/lib/generated/sqlserver/browser.js +17 -0
  45. package/lib/generated/sqlserver/client.js +34 -0
  46. package/lib/generated/sqlserver/commonInputTypes.js +10 -0
  47. package/lib/generated/sqlserver/enums.js +10 -0
  48. package/lib/generated/sqlserver/internal/class.js +49 -0
  49. package/lib/generated/sqlserver/internal/prismaNamespace.js +119 -0
  50. package/lib/generated/sqlserver/internal/prismaNamespaceBrowser.js +90 -0
  51. package/lib/generated/sqlserver/models/AiChatHistory.js +1 -0
  52. package/lib/generated/sqlserver/models/AiMessage.js +1 -0
  53. package/lib/generated/sqlserver/models.js +1 -0
  54. package/lib/health.js +180 -0
  55. package/lib/index.js +681 -0
  56. package/lib/memory-tools.js +365 -0
  57. package/lib/notify.js +56 -0
  58. package/lib/projector.js +191 -0
  59. package/lib/status-route.js +172 -0
  60. package/lib/types/backends/database.d.ts +78 -0
  61. package/lib/types/backfill.d.ts +67 -0
  62. package/lib/types/client/index.d.ts +12 -0
  63. package/lib/types/client/panel.d.ts +79 -0
  64. package/lib/types/client/toast.d.ts +38 -0
  65. package/lib/types/compaction.d.ts +3 -0
  66. package/lib/types/config.d.ts +52 -0
  67. package/lib/types/ddl.d.ts +49 -0
  68. package/lib/types/generated/mysql/browser.d.ts +14 -0
  69. package/lib/types/generated/mysql/client.d.ts +33 -0
  70. package/lib/types/generated/mysql/commonInputTypes.d.ts +396 -0
  71. package/lib/types/generated/mysql/enums.d.ts +1 -0
  72. package/lib/types/generated/mysql/internal/class.d.ts +143 -0
  73. package/lib/types/generated/mysql/internal/prismaNamespace.d.ts +709 -0
  74. package/lib/types/generated/mysql/internal/prismaNamespaceBrowser.d.ts +112 -0
  75. package/lib/types/generated/mysql/models/AiChatHistory.d.ts +1258 -0
  76. package/lib/types/generated/mysql/models/AiMessage.d.ts +1359 -0
  77. package/lib/types/generated/mysql/models.d.ts +3 -0
  78. package/lib/types/generated/postgresql/browser.d.ts +14 -0
  79. package/lib/types/generated/postgresql/client.d.ts +33 -0
  80. package/lib/types/generated/postgresql/commonInputTypes.d.ts +392 -0
  81. package/lib/types/generated/postgresql/enums.d.ts +1 -0
  82. package/lib/types/generated/postgresql/internal/class.d.ts +143 -0
  83. package/lib/types/generated/postgresql/internal/prismaNamespace.d.ts +728 -0
  84. package/lib/types/generated/postgresql/internal/prismaNamespaceBrowser.d.ts +95 -0
  85. package/lib/types/generated/postgresql/models/AiChatHistory.d.ts +1373 -0
  86. package/lib/types/generated/postgresql/models/AiMessage.d.ts +1496 -0
  87. package/lib/types/generated/postgresql/models.d.ts +3 -0
  88. package/lib/types/generated/sqlite/browser.d.ts +14 -0
  89. package/lib/types/generated/sqlite/client.d.ts +33 -0
  90. package/lib/types/generated/sqlite/commonInputTypes.d.ts +373 -0
  91. package/lib/types/generated/sqlite/enums.d.ts +1 -0
  92. package/lib/types/generated/sqlite/internal/class.d.ts +143 -0
  93. package/lib/types/generated/sqlite/internal/prismaNamespace.d.ts +705 -0
  94. package/lib/types/generated/sqlite/internal/prismaNamespaceBrowser.d.ts +92 -0
  95. package/lib/types/generated/sqlite/models/AiChatHistory.d.ts +1371 -0
  96. package/lib/types/generated/sqlite/models/AiMessage.d.ts +1493 -0
  97. package/lib/types/generated/sqlite/models.d.ts +3 -0
  98. package/lib/types/generated/sqlserver/browser.d.ts +14 -0
  99. package/lib/types/generated/sqlserver/client.d.ts +33 -0
  100. package/lib/types/generated/sqlserver/commonInputTypes.d.ts +333 -0
  101. package/lib/types/generated/sqlserver/enums.d.ts +1 -0
  102. package/lib/types/generated/sqlserver/internal/class.d.ts +143 -0
  103. package/lib/types/generated/sqlserver/internal/prismaNamespace.d.ts +669 -0
  104. package/lib/types/generated/sqlserver/internal/prismaNamespaceBrowser.d.ts +80 -0
  105. package/lib/types/generated/sqlserver/models/AiChatHistory.d.ts +1257 -0
  106. package/lib/types/generated/sqlserver/models/AiMessage.d.ts +1375 -0
  107. package/lib/types/generated/sqlserver/models.d.ts +3 -0
  108. package/lib/types/health.d.ts +52 -0
  109. package/lib/types/index.d.ts +91 -0
  110. package/lib/types/memory-tools.d.ts +168 -0
  111. package/lib/types/notify.d.ts +35 -0
  112. package/lib/types/projector.d.ts +51 -0
  113. package/lib/types/status-route.d.ts +48 -0
  114. package/lib/types/types.d.ts +58 -0
  115. package/lib/types.js +8 -0
  116. package/package.json +127 -4
  117. package/preview.png +0 -0
  118. package/prisma/schema.mysql.prisma +78 -0
  119. package/prisma/schema.postgresql.prisma +70 -0
  120. package/prisma/schema.sqlite.prisma +70 -0
  121. package/prisma/schema.sqlserver.prisma +76 -0
@@ -0,0 +1,78 @@
1
+ // Prisma schema for the dsh-storage database backend — MySQL variant (Prisma 7).
2
+ //
3
+ // Table layout matches the source project's ai_messages / ai_chat_histories
4
+ // (packages/core/prisma/schema.prisma) so existing data stays compatible:
5
+ // - `type` values come from the dsh session event map
6
+ // ('user' | 'model' | 'tool' | ...) instead of gemini-cli message roles.
7
+ // - `agent_id` distinguishes the main agent from subagent writers.
8
+ // - no user_id: tenancy is carried by session_id, not a column.
9
+ //
10
+ // The client is pre-generated at package build time (`pnpm generate`, output
11
+ // src/generated/mysql, compiled into lib/generated) — consumers do NOT run
12
+ // `prisma generate`. To create/upgrade tables, run `prisma db push` /
13
+ // migrations against this file; the connection URL lives in prisma.config.ts
14
+ // (Prisma 7 dropped datasource.url from the schema).
15
+
16
+ generator client {
17
+ provider = "prisma-client"
18
+ output = "../src/generated/mysql"
19
+ importFileExtension = "js"
20
+ }
21
+
22
+ datasource db {
23
+ provider = "mysql"
24
+ }
25
+
26
+ /// User and assistant messages; tool results update the assistant row's tool_calls.
27
+ model AiMessage {
28
+ id String @id @default(cuid()) @db.Char(36)
29
+ sessionId String @map("session_id") @db.VarChar(100)
30
+ historyId String? @map("history_id") @db.Char(36)
31
+ type String @db.VarChar(50)
32
+ content String @db.LongText
33
+ thoughts Json?
34
+ model String? @db.VarChar(100)
35
+ tokens Json?
36
+ toolCalls Json? @map("tool_calls")
37
+ agentId String? @map("agent_id") @db.VarChar(100)
38
+ metadata Json?
39
+ device String? @map("device") @db.VarChar(100)
40
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamp(0)
41
+ updatedAt DateTime @default(now()) @updatedAt @map("updated_at") @db.Timestamp(0)
42
+ deletedAt DateTime? @map("deleted_at") @db.Timestamp(0)
43
+
44
+ // Relations
45
+ history AiChatHistory? @relation(fields: [historyId], references: [id], onDelete: NoAction)
46
+
47
+ @@index([sessionId], map: "idx_session")
48
+ @@index([historyId], map: "idx_history")
49
+ @@index([createdAt], map: "idx_created")
50
+ @@index([deletedAt], map: "idx_deleted")
51
+ @@index([agentId], map: "idx_agent")
52
+ @@index([sessionId, agentId, type, createdAt], map: "idx_session_agent_type_created")
53
+ @@index([sessionId, historyId, deletedAt, type, createdAt, id], map: "idx_tool_call_lookup")
54
+ @@index([sessionId, deletedAt, updatedAt, id], map: "idx_archive_recovery")
55
+ @@map("ai_messages")
56
+ }
57
+
58
+ /// Per-session rollup, maintained incrementally by the projector.
59
+ model AiChatHistory {
60
+ id String @id @default(cuid()) @db.Char(36)
61
+ sessionId String @map("session_id") @db.VarChar(100)
62
+ title String? @db.VarChar(255)
63
+ summary String? @db.Text
64
+ messageCount Int @default(0) @map("message_count")
65
+ totalTokens BigInt @default(0) @map("total_tokens")
66
+ firstMessageAt DateTime? @map("first_message_at") @db.DateTime(6)
67
+ lastMessageAt DateTime? @map("last_message_at") @db.DateTime(6)
68
+ metadata Json?
69
+ device String? @map("device") @db.VarChar(100)
70
+ deletedAt DateTime? @map("deleted_at") @db.DateTime(6)
71
+
72
+ // Relations
73
+ messages AiMessage[]
74
+
75
+ @@index([sessionId], map: "idx_chat_history_session")
76
+ @@index([deletedAt], map: "idx_chat_history_deleted")
77
+ @@map("ai_chat_histories")
78
+ }
@@ -0,0 +1,70 @@
1
+ // Prisma schema for the dsh-storage database backend — PostgreSQL variant (Prisma 7).
2
+ //
3
+ // Same models as schema.mysql.prisma, with PostgreSQL native types
4
+ // (`@db.Text` instead of `@db.LongText`, `@db.Timestamp` instead of
5
+ // `@db.DateTime`). Client pre-generation and table creation work as described
6
+ // in schema.mysql.prisma's header.
7
+
8
+ generator client {
9
+ provider = "prisma-client"
10
+ output = "../src/generated/postgresql"
11
+ importFileExtension = "js"
12
+ }
13
+
14
+ datasource db {
15
+ provider = "postgresql"
16
+ }
17
+
18
+ /// User and assistant messages; tool results update the assistant row's tool_calls.
19
+ model AiMessage {
20
+ id String @id @default(cuid()) @db.Char(36)
21
+ sessionId String @map("session_id") @db.VarChar(100)
22
+ historyId String? @map("history_id") @db.Char(36)
23
+ type String @db.VarChar(50)
24
+ content String @db.Text
25
+ thoughts Json?
26
+ model String? @db.VarChar(100)
27
+ tokens Json?
28
+ toolCalls Json? @map("tool_calls")
29
+ agentId String? @map("agent_id") @db.VarChar(100)
30
+ metadata Json?
31
+ device String? @map("device") @db.VarChar(100)
32
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamp(0)
33
+ updatedAt DateTime @default(now()) @updatedAt @map("updated_at") @db.Timestamp(0)
34
+ deletedAt DateTime? @map("deleted_at") @db.Timestamp(0)
35
+
36
+ // Relations
37
+ history AiChatHistory? @relation(fields: [historyId], references: [id], onDelete: NoAction)
38
+
39
+ @@index([sessionId], map: "idx_session")
40
+ @@index([historyId], map: "idx_history")
41
+ @@index([createdAt], map: "idx_created")
42
+ @@index([deletedAt], map: "idx_deleted")
43
+ @@index([agentId], map: "idx_agent")
44
+ @@index([sessionId, agentId, type, createdAt], map: "idx_session_agent_type_created")
45
+ @@index([sessionId, historyId, deletedAt, type, createdAt, id], map: "idx_tool_call_lookup")
46
+ @@index([sessionId, deletedAt, updatedAt, id], map: "idx_archive_recovery")
47
+ @@map("ai_messages")
48
+ }
49
+
50
+ /// Per-session rollup, maintained incrementally by the projector.
51
+ model AiChatHistory {
52
+ id String @id @default(cuid()) @db.Char(36)
53
+ sessionId String @map("session_id") @db.VarChar(100)
54
+ title String? @db.VarChar(255)
55
+ summary String? @db.Text
56
+ messageCount Int @default(0) @map("message_count")
57
+ totalTokens BigInt @default(0) @map("total_tokens")
58
+ firstMessageAt DateTime? @map("first_message_at") @db.Timestamp(6)
59
+ lastMessageAt DateTime? @map("last_message_at") @db.Timestamp(6)
60
+ metadata Json?
61
+ device String? @map("device") @db.VarChar(100)
62
+ deletedAt DateTime? @map("deleted_at") @db.Timestamp(6)
63
+
64
+ // Relations
65
+ messages AiMessage[]
66
+
67
+ @@index([sessionId], map: "idx_chat_history_session")
68
+ @@index([deletedAt], map: "idx_chat_history_deleted")
69
+ @@map("ai_chat_histories")
70
+ }
@@ -0,0 +1,70 @@
1
+ // Prisma schema for the dsh-storage database backend — SQLite variant (Prisma 7).
2
+ //
3
+ // Same models as schema.mysql.prisma, without native type attributes
4
+ // (SQLite has no `@db.*` vocabulary here). Client pre-generation and table
5
+ // creation work as described in schema.mysql.prisma's header. Connection URL
6
+ // shape: file:/absolute/path/to/db.sqlite.
7
+
8
+ generator client {
9
+ provider = "prisma-client"
10
+ output = "../src/generated/sqlite"
11
+ importFileExtension = "js"
12
+ }
13
+
14
+ datasource db {
15
+ provider = "sqlite"
16
+ }
17
+
18
+ /// User and assistant messages; tool results update the assistant row's tool_calls.
19
+ model AiMessage {
20
+ id String @id @default(cuid())
21
+ sessionId String @map("session_id")
22
+ historyId String? @map("history_id")
23
+ type String
24
+ content String
25
+ thoughts Json?
26
+ model String?
27
+ tokens Json?
28
+ toolCalls Json? @map("tool_calls")
29
+ agentId String? @map("agent_id")
30
+ metadata Json?
31
+ device String?
32
+ createdAt DateTime @default(now()) @map("created_at")
33
+ updatedAt DateTime @default(now()) @updatedAt @map("updated_at")
34
+ deletedAt DateTime? @map("deleted_at")
35
+
36
+ // Relations
37
+ history AiChatHistory? @relation(fields: [historyId], references: [id], onDelete: NoAction)
38
+
39
+ @@index([sessionId], map: "idx_session")
40
+ @@index([historyId], map: "idx_history")
41
+ @@index([createdAt], map: "idx_created")
42
+ @@index([deletedAt], map: "idx_deleted")
43
+ @@index([agentId], map: "idx_agent")
44
+ @@index([sessionId, agentId, type, createdAt], map: "idx_session_agent_type_created")
45
+ @@index([sessionId, historyId, deletedAt, type, createdAt, id], map: "idx_tool_call_lookup")
46
+ @@index([sessionId, deletedAt, updatedAt, id], map: "idx_archive_recovery")
47
+ @@map("ai_messages")
48
+ }
49
+
50
+ /// Per-session rollup, maintained incrementally by the projector.
51
+ model AiChatHistory {
52
+ id String @id @default(cuid())
53
+ sessionId String @map("session_id")
54
+ title String?
55
+ summary String?
56
+ messageCount Int @default(0) @map("message_count")
57
+ totalTokens BigInt @default(0) @map("total_tokens")
58
+ firstMessageAt DateTime? @map("first_message_at")
59
+ lastMessageAt DateTime? @map("last_message_at")
60
+ metadata Json?
61
+ device String?
62
+ deletedAt DateTime? @map("deleted_at")
63
+
64
+ // Relations
65
+ messages AiMessage[]
66
+
67
+ @@index([sessionId], map: "idx_chat_history_session")
68
+ @@index([deletedAt], map: "idx_chat_history_deleted")
69
+ @@map("ai_chat_histories")
70
+ }
@@ -0,0 +1,76 @@
1
+ // Prisma schema for the dsh-storage database backend — SQL Server variant (Prisma 7).
2
+ //
3
+ // Same models as schema.mysql.prisma, with SQL Server native types. Prisma's
4
+ // sqlserver connector has NO Json type, so every JSON column is a plain text
5
+ // column here — the backend serializes them on write automatically (derived
6
+ // from `provider: sqlserver`; SQL Server's own ISJSON/JSON_VALUE still query
7
+ // the text as JSON).
8
+ //
9
+ // Connection URL shape (parsed by the backend into a node-mssql config):
10
+ // sqlserver://host:1433;database=dbname;user=sa;password=p;encrypt=true;trustServerCertificate=true
11
+ // Client pre-generation and table creation work as described in
12
+ // schema.mysql.prisma's header.
13
+
14
+ generator client {
15
+ provider = "prisma-client"
16
+ output = "../src/generated/sqlserver"
17
+ importFileExtension = "js"
18
+ }
19
+
20
+ datasource db {
21
+ provider = "sqlserver"
22
+ }
23
+
24
+ /// User and assistant messages; tool results update the assistant row's tool_calls.
25
+ model AiMessage {
26
+ id String @id @default(cuid()) @db.Char(36)
27
+ sessionId String @map("session_id") @db.VarChar(100)
28
+ historyId String? @map("history_id") @db.Char(36)
29
+ type String @db.VarChar(50)
30
+ content String @db.NVarChar(Max)
31
+ thoughts String? @db.NVarChar(Max)
32
+ model String? @db.VarChar(100)
33
+ tokens String? @db.NVarChar(Max)
34
+ toolCalls String? @map("tool_calls") @db.NVarChar(Max)
35
+ agentId String? @map("agent_id") @db.VarChar(100)
36
+ metadata String? @db.NVarChar(Max)
37
+ device String? @map("device") @db.VarChar(100)
38
+ createdAt DateTime @default(now()) @map("created_at") @db.DateTime2
39
+ updatedAt DateTime @default(now()) @updatedAt @map("updated_at") @db.DateTime2
40
+ deletedAt DateTime? @map("deleted_at") @db.DateTime2
41
+
42
+ // Relations
43
+ history AiChatHistory? @relation(fields: [historyId], references: [id], onDelete: NoAction)
44
+
45
+ @@index([sessionId], map: "idx_session")
46
+ @@index([historyId], map: "idx_history")
47
+ @@index([createdAt], map: "idx_created")
48
+ @@index([deletedAt], map: "idx_deleted")
49
+ @@index([agentId], map: "idx_agent")
50
+ @@index([sessionId, agentId, type, createdAt], map: "idx_session_agent_type_created")
51
+ @@index([sessionId, historyId, deletedAt, type, createdAt, id], map: "idx_tool_call_lookup")
52
+ @@index([sessionId, deletedAt, updatedAt, id], map: "idx_archive_recovery")
53
+ @@map("ai_messages")
54
+ }
55
+
56
+ /// Per-session rollup, maintained incrementally by the projector.
57
+ model AiChatHistory {
58
+ id String @id @default(cuid()) @db.Char(36)
59
+ sessionId String @map("session_id") @db.VarChar(100)
60
+ title String? @db.VarChar(255)
61
+ summary String? @db.NVarChar(Max)
62
+ messageCount Int @default(0) @map("message_count")
63
+ totalTokens BigInt @default(0) @map("total_tokens")
64
+ firstMessageAt DateTime? @map("first_message_at") @db.DateTime2
65
+ lastMessageAt DateTime? @map("last_message_at") @db.DateTime2
66
+ metadata String? @db.NVarChar(Max)
67
+ device String? @map("device") @db.VarChar(100)
68
+ deletedAt DateTime? @map("deleted_at") @db.DateTime2
69
+
70
+ // Relations
71
+ messages AiMessage[]
72
+
73
+ @@index([sessionId], map: "idx_chat_history_session")
74
+ @@index([deletedAt], map: "idx_chat_history_deleted")
75
+ @@map("ai_chat_histories")
76
+ }