dsh-team-rooms 1.0.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 (46) hide show
  1. package/ARCHITECTURE.md +127 -0
  2. package/LICENSE +201 -0
  3. package/README-es.md +248 -0
  4. package/README-hi.md +248 -0
  5. package/README-pt.md +248 -0
  6. package/README-zh.md +248 -0
  7. package/README.md +248 -0
  8. package/THIRD_PARTY_NOTICES.md +41 -0
  9. package/cordis.patch.yml +34 -0
  10. package/lib/client.js +4713 -0
  11. package/lib/index.js +6580 -0
  12. package/lib/types/audit.d.ts +80 -0
  13. package/lib/types/client/TeamRoomsSection.d.ts +33 -0
  14. package/lib/types/client/index.d.ts +41 -0
  15. package/lib/types/client/room-locales.d.ts +61 -0
  16. package/lib/types/client/room-presenter.d.ts +67 -0
  17. package/lib/types/facts.d.ts +66 -0
  18. package/lib/types/inbound.d.ts +282 -0
  19. package/lib/types/index.d.ts +125 -0
  20. package/lib/types/room/commands.d.ts +23 -0
  21. package/lib/types/room/domain.d.ts +72 -0
  22. package/lib/types/room/events.d.ts +105 -0
  23. package/lib/types/room/hub.d.ts +243 -0
  24. package/lib/types/room/projection.d.ts +388 -0
  25. package/lib/types/room/schema.d.ts +550 -0
  26. package/lib/types/room/tools.d.ts +34 -0
  27. package/lib/types/vocabulary.d.ts +20 -0
  28. package/package.json +170 -0
  29. package/src/audit.ts +113 -0
  30. package/src/client/TeamRoomsSection.module.css +272 -0
  31. package/src/client/TeamRoomsSection.tsx +369 -0
  32. package/src/client/css-modules.d.ts +5 -0
  33. package/src/client/index.ts +215 -0
  34. package/src/client/room-locales.ts +115 -0
  35. package/src/client/room-presenter.ts +126 -0
  36. package/src/facts.ts +127 -0
  37. package/src/inbound.ts +440 -0
  38. package/src/index.ts +309 -0
  39. package/src/room/commands.ts +278 -0
  40. package/src/room/domain.ts +38 -0
  41. package/src/room/events.ts +116 -0
  42. package/src/room/hub.ts +1022 -0
  43. package/src/room/projection.ts +267 -0
  44. package/src/room/schema.ts +153 -0
  45. package/src/room/tools.ts +603 -0
  46. package/src/vocabulary.ts +20 -0
@@ -0,0 +1,388 @@
1
+ /**
2
+ * The `teamRoom` session-projection unit: folds one MEMBER session's log of
3
+ * `team-room/fact` records into the room view the settings panel renders —
4
+ * rooms, members, the task board, and the shared timeline. The fold is pure
5
+ * over the member's own durable log (the room store stays the cross-session
6
+ * authority; this value is the per-session reconstructed copy), so it replays
7
+ * identically after every reopen and on every restart.
8
+ *
9
+ * @module dsh-team-rooms/room/projection
10
+ */
11
+ import type { SessionEvent } from '@deepseek-ai/dsh-session';
12
+ import { type RoomView, type TeamRoomView } from './schema.js';
13
+ /** Mutable fold state; plain JSON so the persisted projection cache can store it. */
14
+ interface State {
15
+ rooms: RoomView[];
16
+ }
17
+ /** The registered projection unit. */
18
+ export declare const teamRoomProjectionDefinition: {
19
+ key: "teamRoom";
20
+ stateSchema: import("zod").ZodObject<{
21
+ rooms: import("zod").ZodArray<import("zod").ZodObject<{
22
+ roomId: import("zod").ZodString;
23
+ name: import("zod").ZodString;
24
+ createdAt: import("zod").ZodNumber;
25
+ members: import("zod").ZodArray<import("zod").ZodObject<{
26
+ sessionId: import("zod").ZodString;
27
+ role: import("zod").ZodEnum<["owner", "member"]>;
28
+ joinedAt: import("zod").ZodNumber;
29
+ }, "strict", import("zod").ZodTypeAny, {
30
+ sessionId: string;
31
+ role: "owner" | "member";
32
+ joinedAt: number;
33
+ }, {
34
+ sessionId: string;
35
+ role: "owner" | "member";
36
+ joinedAt: number;
37
+ }>, "many">;
38
+ tasks: import("zod").ZodArray<import("zod").ZodObject<{
39
+ taskId: import("zod").ZodString;
40
+ title: import("zod").ZodString;
41
+ description: import("zod").ZodString;
42
+ status: import("zod").ZodEnum<["todo", "in-progress", "done"]>;
43
+ assigneeSessionId: import("zod").ZodNullable<import("zod").ZodString>;
44
+ createdBy: import("zod").ZodString;
45
+ createdAt: import("zod").ZodNumber;
46
+ updatedAt: import("zod").ZodNumber;
47
+ }, "strict", import("zod").ZodTypeAny, {
48
+ status: "todo" | "in-progress" | "done";
49
+ title: string;
50
+ createdAt: number;
51
+ taskId: string;
52
+ description: string;
53
+ assigneeSessionId: string | null;
54
+ createdBy: string;
55
+ updatedAt: number;
56
+ }, {
57
+ status: "todo" | "in-progress" | "done";
58
+ title: string;
59
+ createdAt: number;
60
+ taskId: string;
61
+ description: string;
62
+ assigneeSessionId: string | null;
63
+ createdBy: string;
64
+ updatedAt: number;
65
+ }>, "many">;
66
+ timeline: import("zod").ZodArray<import("zod").ZodObject<{
67
+ roomId: import("zod").ZodString;
68
+ seq: import("zod").ZodNumber;
69
+ kind: import("zod").ZodEnum<["room-created", "member-joined", "member-left", "message-posted", "message-directed", "task-created", "task-claimed", "task-assigned", "task-completed"]>;
70
+ at: import("zod").ZodNumber;
71
+ data: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
72
+ }, "strict", import("zod").ZodTypeAny, {
73
+ at: number;
74
+ data: Record<string, unknown>;
75
+ roomId: string;
76
+ seq: number;
77
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
78
+ }, {
79
+ at: number;
80
+ data: Record<string, unknown>;
81
+ roomId: string;
82
+ seq: number;
83
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
84
+ }>, "many">;
85
+ }, "strict", import("zod").ZodTypeAny, {
86
+ name: string;
87
+ roomId: string;
88
+ createdAt: number;
89
+ members: {
90
+ sessionId: string;
91
+ role: "owner" | "member";
92
+ joinedAt: number;
93
+ }[];
94
+ tasks: {
95
+ status: "todo" | "in-progress" | "done";
96
+ title: string;
97
+ createdAt: number;
98
+ taskId: string;
99
+ description: string;
100
+ assigneeSessionId: string | null;
101
+ createdBy: string;
102
+ updatedAt: number;
103
+ }[];
104
+ timeline: {
105
+ at: number;
106
+ data: Record<string, unknown>;
107
+ roomId: string;
108
+ seq: number;
109
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
110
+ }[];
111
+ }, {
112
+ name: string;
113
+ roomId: string;
114
+ createdAt: number;
115
+ members: {
116
+ sessionId: string;
117
+ role: "owner" | "member";
118
+ joinedAt: number;
119
+ }[];
120
+ tasks: {
121
+ status: "todo" | "in-progress" | "done";
122
+ title: string;
123
+ createdAt: number;
124
+ taskId: string;
125
+ description: string;
126
+ assigneeSessionId: string | null;
127
+ createdBy: string;
128
+ updatedAt: number;
129
+ }[];
130
+ timeline: {
131
+ at: number;
132
+ data: Record<string, unknown>;
133
+ roomId: string;
134
+ seq: number;
135
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
136
+ }[];
137
+ }>, "many">;
138
+ }, "strict", import("zod").ZodTypeAny, {
139
+ rooms: {
140
+ name: string;
141
+ roomId: string;
142
+ createdAt: number;
143
+ members: {
144
+ sessionId: string;
145
+ role: "owner" | "member";
146
+ joinedAt: number;
147
+ }[];
148
+ tasks: {
149
+ status: "todo" | "in-progress" | "done";
150
+ title: string;
151
+ createdAt: number;
152
+ taskId: string;
153
+ description: string;
154
+ assigneeSessionId: string | null;
155
+ createdBy: string;
156
+ updatedAt: number;
157
+ }[];
158
+ timeline: {
159
+ at: number;
160
+ data: Record<string, unknown>;
161
+ roomId: string;
162
+ seq: number;
163
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
164
+ }[];
165
+ }[];
166
+ }, {
167
+ rooms: {
168
+ name: string;
169
+ roomId: string;
170
+ createdAt: number;
171
+ members: {
172
+ sessionId: string;
173
+ role: "owner" | "member";
174
+ joinedAt: number;
175
+ }[];
176
+ tasks: {
177
+ status: "todo" | "in-progress" | "done";
178
+ title: string;
179
+ createdAt: number;
180
+ taskId: string;
181
+ description: string;
182
+ assigneeSessionId: string | null;
183
+ createdBy: string;
184
+ updatedAt: number;
185
+ }[];
186
+ timeline: {
187
+ at: number;
188
+ data: Record<string, unknown>;
189
+ roomId: string;
190
+ seq: number;
191
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
192
+ }[];
193
+ }[];
194
+ }>;
195
+ init: () => State;
196
+ apply(state: State, event: SessionEvent): State;
197
+ wire: {
198
+ viewSchema: import("zod").ZodObject<{
199
+ rooms: import("zod").ZodArray<import("zod").ZodObject<{
200
+ roomId: import("zod").ZodString;
201
+ name: import("zod").ZodString;
202
+ createdAt: import("zod").ZodNumber;
203
+ members: import("zod").ZodArray<import("zod").ZodObject<{
204
+ sessionId: import("zod").ZodString;
205
+ role: import("zod").ZodEnum<["owner", "member"]>;
206
+ joinedAt: import("zod").ZodNumber;
207
+ }, "strict", import("zod").ZodTypeAny, {
208
+ sessionId: string;
209
+ role: "owner" | "member";
210
+ joinedAt: number;
211
+ }, {
212
+ sessionId: string;
213
+ role: "owner" | "member";
214
+ joinedAt: number;
215
+ }>, "many">;
216
+ tasks: import("zod").ZodArray<import("zod").ZodObject<{
217
+ taskId: import("zod").ZodString;
218
+ title: import("zod").ZodString;
219
+ description: import("zod").ZodString;
220
+ status: import("zod").ZodEnum<["todo", "in-progress", "done"]>;
221
+ assigneeSessionId: import("zod").ZodNullable<import("zod").ZodString>;
222
+ createdBy: import("zod").ZodString;
223
+ createdAt: import("zod").ZodNumber;
224
+ updatedAt: import("zod").ZodNumber;
225
+ }, "strict", import("zod").ZodTypeAny, {
226
+ status: "todo" | "in-progress" | "done";
227
+ title: string;
228
+ createdAt: number;
229
+ taskId: string;
230
+ description: string;
231
+ assigneeSessionId: string | null;
232
+ createdBy: string;
233
+ updatedAt: number;
234
+ }, {
235
+ status: "todo" | "in-progress" | "done";
236
+ title: string;
237
+ createdAt: number;
238
+ taskId: string;
239
+ description: string;
240
+ assigneeSessionId: string | null;
241
+ createdBy: string;
242
+ updatedAt: number;
243
+ }>, "many">;
244
+ timeline: import("zod").ZodArray<import("zod").ZodObject<{
245
+ roomId: import("zod").ZodString;
246
+ seq: import("zod").ZodNumber;
247
+ kind: import("zod").ZodEnum<["room-created", "member-joined", "member-left", "message-posted", "message-directed", "task-created", "task-claimed", "task-assigned", "task-completed"]>;
248
+ at: import("zod").ZodNumber;
249
+ data: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
250
+ }, "strict", import("zod").ZodTypeAny, {
251
+ at: number;
252
+ data: Record<string, unknown>;
253
+ roomId: string;
254
+ seq: number;
255
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
256
+ }, {
257
+ at: number;
258
+ data: Record<string, unknown>;
259
+ roomId: string;
260
+ seq: number;
261
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
262
+ }>, "many">;
263
+ }, "strict", import("zod").ZodTypeAny, {
264
+ name: string;
265
+ roomId: string;
266
+ createdAt: number;
267
+ members: {
268
+ sessionId: string;
269
+ role: "owner" | "member";
270
+ joinedAt: number;
271
+ }[];
272
+ tasks: {
273
+ status: "todo" | "in-progress" | "done";
274
+ title: string;
275
+ createdAt: number;
276
+ taskId: string;
277
+ description: string;
278
+ assigneeSessionId: string | null;
279
+ createdBy: string;
280
+ updatedAt: number;
281
+ }[];
282
+ timeline: {
283
+ at: number;
284
+ data: Record<string, unknown>;
285
+ roomId: string;
286
+ seq: number;
287
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
288
+ }[];
289
+ }, {
290
+ name: string;
291
+ roomId: string;
292
+ createdAt: number;
293
+ members: {
294
+ sessionId: string;
295
+ role: "owner" | "member";
296
+ joinedAt: number;
297
+ }[];
298
+ tasks: {
299
+ status: "todo" | "in-progress" | "done";
300
+ title: string;
301
+ createdAt: number;
302
+ taskId: string;
303
+ description: string;
304
+ assigneeSessionId: string | null;
305
+ createdBy: string;
306
+ updatedAt: number;
307
+ }[];
308
+ timeline: {
309
+ at: number;
310
+ data: Record<string, unknown>;
311
+ roomId: string;
312
+ seq: number;
313
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
314
+ }[];
315
+ }>, "many">;
316
+ }, "strict", import("zod").ZodTypeAny, {
317
+ rooms: {
318
+ name: string;
319
+ roomId: string;
320
+ createdAt: number;
321
+ members: {
322
+ sessionId: string;
323
+ role: "owner" | "member";
324
+ joinedAt: number;
325
+ }[];
326
+ tasks: {
327
+ status: "todo" | "in-progress" | "done";
328
+ title: string;
329
+ createdAt: number;
330
+ taskId: string;
331
+ description: string;
332
+ assigneeSessionId: string | null;
333
+ createdBy: string;
334
+ updatedAt: number;
335
+ }[];
336
+ timeline: {
337
+ at: number;
338
+ data: Record<string, unknown>;
339
+ roomId: string;
340
+ seq: number;
341
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
342
+ }[];
343
+ }[];
344
+ }, {
345
+ rooms: {
346
+ name: string;
347
+ roomId: string;
348
+ createdAt: number;
349
+ members: {
350
+ sessionId: string;
351
+ role: "owner" | "member";
352
+ joinedAt: number;
353
+ }[];
354
+ tasks: {
355
+ status: "todo" | "in-progress" | "done";
356
+ title: string;
357
+ createdAt: number;
358
+ taskId: string;
359
+ description: string;
360
+ assigneeSessionId: string | null;
361
+ createdBy: string;
362
+ updatedAt: number;
363
+ }[];
364
+ timeline: {
365
+ at: number;
366
+ data: Record<string, unknown>;
367
+ roomId: string;
368
+ seq: number;
369
+ kind: "room-created" | "member-joined" | "member-left" | "message-posted" | "message-directed" | "task-created" | "task-claimed" | "task-assigned" | "task-completed";
370
+ }[];
371
+ }[];
372
+ }>;
373
+ view: (state: NoInfer<State>) => TeamRoomView;
374
+ };
375
+ stateVersion: number;
376
+ };
377
+ declare module '@deepseek-ai/dsh-session-projection/types' {
378
+ interface SessionProjectionStateMap {
379
+ /** Host fold state for the team-room views. */
380
+ teamRoom: State;
381
+ }
382
+ interface SessionProjectionMap {
383
+ /** Team-room views folded from one member session's room facts. */
384
+ teamRoom: TeamRoomView;
385
+ }
386
+ }
387
+ export {};
388
+ //# sourceMappingURL=projection.d.ts.map