@minimalcorp/tsunagi 0.1.33 → 0.1.34
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/.next/standalone/apps/web/.next/BUILD_ID +1 -1
- package/.next/standalone/apps/web/.next/build-manifest.json +3 -3
- package/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
- package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/index.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0r5k1o3._.js → [root-of-the-server]__0mct.7z._.js} +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_02dcd~k._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0dar4c0._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0g.cd6a._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0sxye4q._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_tasks_[id]_page_tsx_0jshsm2._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_03dusl-._.js → node_modules_07-e6tb._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_09g056t._.js → node_modules_0b6fjwn._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0ec.p48._.js → node_modules_0bix9lu._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0az0yoa._.js → node_modules_0fpqbi2._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0_wjeog._.js → node_modules_0k8xmjr._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_09o-nzb._.js → node_modules_0r9vehj._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_00bsm~0._.js → node_modules_0w48uk8._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_131360a._.js → node_modules_0yoat72._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
- package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/00e8eue.21.8h.css +4 -0
- package/.next/standalone/apps/web/.next/static/chunks/0j3485~p9pn9n.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/{0szj.38-.-4p4.js → 0kmlu-0djf-rx.js} +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/{0z8cfvtbwii50.js → 0vlse5ga2r0n7.js} +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/{0dqv~laaou7x3.js → 0x3kp2s554oy5.js} +6 -6
- package/.next/standalone/apps/web/.next/static/chunks/{076mcjezjnahd.js → 13f6kj~4r5x0p.js} +1 -1
- package/dist/server/generated/prisma/internal/class.js +4 -4
- package/dist/server/generated/prisma/internal/prismaNamespace.d.ts +1 -0
- package/dist/server/generated/prisma/internal/prismaNamespace.js +1 -0
- package/dist/server/generated/prisma/internal/prismaNamespaceBrowser.d.ts +1 -0
- package/dist/server/generated/prisma/internal/prismaNamespaceBrowser.js +1 -0
- package/dist/server/generated/prisma/models/EnvironmentVariable.d.ts +0 -3
- package/dist/server/generated/prisma/models/Tab.d.ts +39 -1
- package/dist/server/lib/repositories/task.d.ts +5 -0
- package/dist/server/lib/repositories/task.js +13 -0
- package/dist/server/routes/hooks.js +21 -1
- package/dist/server/routes/tasks.js +20 -0
- package/npm-shrinkwrap.json +33 -29
- package/package.json +1 -1
- package/prisma/migrations/20260918000000_add_tab_unread/migration.sql +4 -0
- package/prisma/schema.prisma +2 -0
- package/.next/standalone/apps/web/.next/static/chunks/02k8hsfyr1oif.css +0 -4
- package/.next/standalone/apps/web/.next/static/chunks/0zdnw6m70_-dp.js +0 -1
- /package/.next/standalone/apps/web/.next/static/{fUycQdovbCSAwFW2xvyuD → mWBhkmlLJfxVxMeoAXXc3}/_buildManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{fUycQdovbCSAwFW2xvyuD → mWBhkmlLJfxVxMeoAXXc3}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{fUycQdovbCSAwFW2xvyuD → mWBhkmlLJfxVxMeoAXXc3}/_ssgManifest.js +0 -0
|
@@ -28,6 +28,7 @@ export type TabMinAggregateOutputType = {
|
|
|
28
28
|
startedAt: Date | null;
|
|
29
29
|
completedAt: Date | null;
|
|
30
30
|
todos: string | null;
|
|
31
|
+
unread: boolean | null;
|
|
31
32
|
updatedAt: Date | null;
|
|
32
33
|
};
|
|
33
34
|
export type TabMaxAggregateOutputType = {
|
|
@@ -40,6 +41,7 @@ export type TabMaxAggregateOutputType = {
|
|
|
40
41
|
startedAt: Date | null;
|
|
41
42
|
completedAt: Date | null;
|
|
42
43
|
todos: string | null;
|
|
44
|
+
unread: boolean | null;
|
|
43
45
|
updatedAt: Date | null;
|
|
44
46
|
};
|
|
45
47
|
export type TabCountAggregateOutputType = {
|
|
@@ -52,6 +54,7 @@ export type TabCountAggregateOutputType = {
|
|
|
52
54
|
startedAt: number;
|
|
53
55
|
completedAt: number;
|
|
54
56
|
todos: number;
|
|
57
|
+
unread: number;
|
|
55
58
|
updatedAt: number;
|
|
56
59
|
_all: number;
|
|
57
60
|
};
|
|
@@ -71,6 +74,7 @@ export type TabMinAggregateInputType = {
|
|
|
71
74
|
startedAt?: true;
|
|
72
75
|
completedAt?: true;
|
|
73
76
|
todos?: true;
|
|
77
|
+
unread?: true;
|
|
74
78
|
updatedAt?: true;
|
|
75
79
|
};
|
|
76
80
|
export type TabMaxAggregateInputType = {
|
|
@@ -83,6 +87,7 @@ export type TabMaxAggregateInputType = {
|
|
|
83
87
|
startedAt?: true;
|
|
84
88
|
completedAt?: true;
|
|
85
89
|
todos?: true;
|
|
90
|
+
unread?: true;
|
|
86
91
|
updatedAt?: true;
|
|
87
92
|
};
|
|
88
93
|
export type TabCountAggregateInputType = {
|
|
@@ -95,6 +100,7 @@ export type TabCountAggregateInputType = {
|
|
|
95
100
|
startedAt?: true;
|
|
96
101
|
completedAt?: true;
|
|
97
102
|
todos?: true;
|
|
103
|
+
unread?: true;
|
|
98
104
|
updatedAt?: true;
|
|
99
105
|
_all?: true;
|
|
100
106
|
};
|
|
@@ -184,6 +190,7 @@ export type TabGroupByOutputType = {
|
|
|
184
190
|
startedAt: Date;
|
|
185
191
|
completedAt: Date | null;
|
|
186
192
|
todos: string | null;
|
|
193
|
+
unread: boolean;
|
|
187
194
|
updatedAt: Date;
|
|
188
195
|
_count: TabCountAggregateOutputType | null;
|
|
189
196
|
_avg: TabAvgAggregateOutputType | null;
|
|
@@ -207,6 +214,7 @@ export type TabWhereInput = {
|
|
|
207
214
|
startedAt?: Prisma.DateTimeFilter<"Tab"> | Date | string;
|
|
208
215
|
completedAt?: Prisma.DateTimeNullableFilter<"Tab"> | Date | string | null;
|
|
209
216
|
todos?: Prisma.StringNullableFilter<"Tab"> | string | null;
|
|
217
|
+
unread?: Prisma.BoolFilter<"Tab"> | boolean;
|
|
210
218
|
updatedAt?: Prisma.DateTimeFilter<"Tab"> | Date | string;
|
|
211
219
|
task?: Prisma.XOR<Prisma.TaskScalarRelationFilter, Prisma.TaskWhereInput>;
|
|
212
220
|
};
|
|
@@ -220,6 +228,7 @@ export type TabOrderByWithRelationInput = {
|
|
|
220
228
|
startedAt?: Prisma.SortOrder;
|
|
221
229
|
completedAt?: Prisma.SortOrderInput | Prisma.SortOrder;
|
|
222
230
|
todos?: Prisma.SortOrderInput | Prisma.SortOrder;
|
|
231
|
+
unread?: Prisma.SortOrder;
|
|
223
232
|
updatedAt?: Prisma.SortOrder;
|
|
224
233
|
task?: Prisma.TaskOrderByWithRelationInput;
|
|
225
234
|
};
|
|
@@ -236,6 +245,7 @@ export type TabWhereUniqueInput = Prisma.AtLeast<{
|
|
|
236
245
|
startedAt?: Prisma.DateTimeFilter<"Tab"> | Date | string;
|
|
237
246
|
completedAt?: Prisma.DateTimeNullableFilter<"Tab"> | Date | string | null;
|
|
238
247
|
todos?: Prisma.StringNullableFilter<"Tab"> | string | null;
|
|
248
|
+
unread?: Prisma.BoolFilter<"Tab"> | boolean;
|
|
239
249
|
updatedAt?: Prisma.DateTimeFilter<"Tab"> | Date | string;
|
|
240
250
|
task?: Prisma.XOR<Prisma.TaskScalarRelationFilter, Prisma.TaskWhereInput>;
|
|
241
251
|
}, "tabId">;
|
|
@@ -249,6 +259,7 @@ export type TabOrderByWithAggregationInput = {
|
|
|
249
259
|
startedAt?: Prisma.SortOrder;
|
|
250
260
|
completedAt?: Prisma.SortOrderInput | Prisma.SortOrder;
|
|
251
261
|
todos?: Prisma.SortOrderInput | Prisma.SortOrder;
|
|
262
|
+
unread?: Prisma.SortOrder;
|
|
252
263
|
updatedAt?: Prisma.SortOrder;
|
|
253
264
|
_count?: Prisma.TabCountOrderByAggregateInput;
|
|
254
265
|
_avg?: Prisma.TabAvgOrderByAggregateInput;
|
|
@@ -269,6 +280,7 @@ export type TabScalarWhereWithAggregatesInput = {
|
|
|
269
280
|
startedAt?: Prisma.DateTimeWithAggregatesFilter<"Tab"> | Date | string;
|
|
270
281
|
completedAt?: Prisma.DateTimeNullableWithAggregatesFilter<"Tab"> | Date | string | null;
|
|
271
282
|
todos?: Prisma.StringNullableWithAggregatesFilter<"Tab"> | string | null;
|
|
283
|
+
unread?: Prisma.BoolWithAggregatesFilter<"Tab"> | boolean;
|
|
272
284
|
updatedAt?: Prisma.DateTimeWithAggregatesFilter<"Tab"> | Date | string;
|
|
273
285
|
};
|
|
274
286
|
export type TabCreateInput = {
|
|
@@ -280,6 +292,7 @@ export type TabCreateInput = {
|
|
|
280
292
|
startedAt: Date | string;
|
|
281
293
|
completedAt?: Date | string | null;
|
|
282
294
|
todos?: string | null;
|
|
295
|
+
unread?: boolean;
|
|
283
296
|
updatedAt?: Date | string;
|
|
284
297
|
task: Prisma.TaskCreateNestedOneWithoutTabsInput;
|
|
285
298
|
};
|
|
@@ -293,6 +306,7 @@ export type TabUncheckedCreateInput = {
|
|
|
293
306
|
startedAt: Date | string;
|
|
294
307
|
completedAt?: Date | string | null;
|
|
295
308
|
todos?: string | null;
|
|
309
|
+
unread?: boolean;
|
|
296
310
|
updatedAt?: Date | string;
|
|
297
311
|
};
|
|
298
312
|
export type TabUpdateInput = {
|
|
@@ -304,6 +318,7 @@ export type TabUpdateInput = {
|
|
|
304
318
|
startedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
305
319
|
completedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null;
|
|
306
320
|
todos?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
321
|
+
unread?: Prisma.BoolFieldUpdateOperationsInput | boolean;
|
|
307
322
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
308
323
|
task?: Prisma.TaskUpdateOneRequiredWithoutTabsNestedInput;
|
|
309
324
|
};
|
|
@@ -317,6 +332,7 @@ export type TabUncheckedUpdateInput = {
|
|
|
317
332
|
startedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
318
333
|
completedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null;
|
|
319
334
|
todos?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
335
|
+
unread?: Prisma.BoolFieldUpdateOperationsInput | boolean;
|
|
320
336
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
321
337
|
};
|
|
322
338
|
export type TabCreateManyInput = {
|
|
@@ -329,6 +345,7 @@ export type TabCreateManyInput = {
|
|
|
329
345
|
startedAt: Date | string;
|
|
330
346
|
completedAt?: Date | string | null;
|
|
331
347
|
todos?: string | null;
|
|
348
|
+
unread?: boolean;
|
|
332
349
|
updatedAt?: Date | string;
|
|
333
350
|
};
|
|
334
351
|
export type TabUpdateManyMutationInput = {
|
|
@@ -340,6 +357,7 @@ export type TabUpdateManyMutationInput = {
|
|
|
340
357
|
startedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
341
358
|
completedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null;
|
|
342
359
|
todos?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
360
|
+
unread?: Prisma.BoolFieldUpdateOperationsInput | boolean;
|
|
343
361
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
344
362
|
};
|
|
345
363
|
export type TabUncheckedUpdateManyInput = {
|
|
@@ -352,6 +370,7 @@ export type TabUncheckedUpdateManyInput = {
|
|
|
352
370
|
startedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
353
371
|
completedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null;
|
|
354
372
|
todos?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
373
|
+
unread?: Prisma.BoolFieldUpdateOperationsInput | boolean;
|
|
355
374
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
356
375
|
};
|
|
357
376
|
export type TabListRelationFilter = {
|
|
@@ -372,6 +391,7 @@ export type TabCountOrderByAggregateInput = {
|
|
|
372
391
|
startedAt?: Prisma.SortOrder;
|
|
373
392
|
completedAt?: Prisma.SortOrder;
|
|
374
393
|
todos?: Prisma.SortOrder;
|
|
394
|
+
unread?: Prisma.SortOrder;
|
|
375
395
|
updatedAt?: Prisma.SortOrder;
|
|
376
396
|
};
|
|
377
397
|
export type TabAvgOrderByAggregateInput = {
|
|
@@ -387,6 +407,7 @@ export type TabMaxOrderByAggregateInput = {
|
|
|
387
407
|
startedAt?: Prisma.SortOrder;
|
|
388
408
|
completedAt?: Prisma.SortOrder;
|
|
389
409
|
todos?: Prisma.SortOrder;
|
|
410
|
+
unread?: Prisma.SortOrder;
|
|
390
411
|
updatedAt?: Prisma.SortOrder;
|
|
391
412
|
};
|
|
392
413
|
export type TabMinOrderByAggregateInput = {
|
|
@@ -399,6 +420,7 @@ export type TabMinOrderByAggregateInput = {
|
|
|
399
420
|
startedAt?: Prisma.SortOrder;
|
|
400
421
|
completedAt?: Prisma.SortOrder;
|
|
401
422
|
todos?: Prisma.SortOrder;
|
|
423
|
+
unread?: Prisma.SortOrder;
|
|
402
424
|
updatedAt?: Prisma.SortOrder;
|
|
403
425
|
};
|
|
404
426
|
export type TabSumOrderByAggregateInput = {
|
|
@@ -442,6 +464,9 @@ export type TabUncheckedUpdateManyWithoutTaskNestedInput = {
|
|
|
442
464
|
updateMany?: Prisma.TabUpdateManyWithWhereWithoutTaskInput | Prisma.TabUpdateManyWithWhereWithoutTaskInput[];
|
|
443
465
|
deleteMany?: Prisma.TabScalarWhereInput | Prisma.TabScalarWhereInput[];
|
|
444
466
|
};
|
|
467
|
+
export type BoolFieldUpdateOperationsInput = {
|
|
468
|
+
set?: boolean;
|
|
469
|
+
};
|
|
445
470
|
export type TabCreateWithoutTaskInput = {
|
|
446
471
|
tabId: string;
|
|
447
472
|
order: number;
|
|
@@ -451,6 +476,7 @@ export type TabCreateWithoutTaskInput = {
|
|
|
451
476
|
startedAt: Date | string;
|
|
452
477
|
completedAt?: Date | string | null;
|
|
453
478
|
todos?: string | null;
|
|
479
|
+
unread?: boolean;
|
|
454
480
|
updatedAt?: Date | string;
|
|
455
481
|
};
|
|
456
482
|
export type TabUncheckedCreateWithoutTaskInput = {
|
|
@@ -462,6 +488,7 @@ export type TabUncheckedCreateWithoutTaskInput = {
|
|
|
462
488
|
startedAt: Date | string;
|
|
463
489
|
completedAt?: Date | string | null;
|
|
464
490
|
todos?: string | null;
|
|
491
|
+
unread?: boolean;
|
|
465
492
|
updatedAt?: Date | string;
|
|
466
493
|
};
|
|
467
494
|
export type TabCreateOrConnectWithoutTaskInput = {
|
|
@@ -497,6 +524,7 @@ export type TabScalarWhereInput = {
|
|
|
497
524
|
startedAt?: Prisma.DateTimeFilter<"Tab"> | Date | string;
|
|
498
525
|
completedAt?: Prisma.DateTimeNullableFilter<"Tab"> | Date | string | null;
|
|
499
526
|
todos?: Prisma.StringNullableFilter<"Tab"> | string | null;
|
|
527
|
+
unread?: Prisma.BoolFilter<"Tab"> | boolean;
|
|
500
528
|
updatedAt?: Prisma.DateTimeFilter<"Tab"> | Date | string;
|
|
501
529
|
};
|
|
502
530
|
export type TabCreateManyTaskInput = {
|
|
@@ -508,6 +536,7 @@ export type TabCreateManyTaskInput = {
|
|
|
508
536
|
startedAt: Date | string;
|
|
509
537
|
completedAt?: Date | string | null;
|
|
510
538
|
todos?: string | null;
|
|
539
|
+
unread?: boolean;
|
|
511
540
|
updatedAt?: Date | string;
|
|
512
541
|
};
|
|
513
542
|
export type TabUpdateWithoutTaskInput = {
|
|
@@ -519,6 +548,7 @@ export type TabUpdateWithoutTaskInput = {
|
|
|
519
548
|
startedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
520
549
|
completedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null;
|
|
521
550
|
todos?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
551
|
+
unread?: Prisma.BoolFieldUpdateOperationsInput | boolean;
|
|
522
552
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
523
553
|
};
|
|
524
554
|
export type TabUncheckedUpdateWithoutTaskInput = {
|
|
@@ -530,6 +560,7 @@ export type TabUncheckedUpdateWithoutTaskInput = {
|
|
|
530
560
|
startedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
531
561
|
completedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null;
|
|
532
562
|
todos?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
563
|
+
unread?: Prisma.BoolFieldUpdateOperationsInput | boolean;
|
|
533
564
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
534
565
|
};
|
|
535
566
|
export type TabUncheckedUpdateManyWithoutTaskInput = {
|
|
@@ -541,6 +572,7 @@ export type TabUncheckedUpdateManyWithoutTaskInput = {
|
|
|
541
572
|
startedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
542
573
|
completedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null;
|
|
543
574
|
todos?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
|
|
575
|
+
unread?: Prisma.BoolFieldUpdateOperationsInput | boolean;
|
|
544
576
|
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
|
|
545
577
|
};
|
|
546
578
|
export type TabSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
|
|
@@ -553,6 +585,7 @@ export type TabSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = ru
|
|
|
553
585
|
startedAt?: boolean;
|
|
554
586
|
completedAt?: boolean;
|
|
555
587
|
todos?: boolean;
|
|
588
|
+
unread?: boolean;
|
|
556
589
|
updatedAt?: boolean;
|
|
557
590
|
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>;
|
|
558
591
|
}, ExtArgs["result"]["tab"]>;
|
|
@@ -566,6 +599,7 @@ export type TabSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extension
|
|
|
566
599
|
startedAt?: boolean;
|
|
567
600
|
completedAt?: boolean;
|
|
568
601
|
todos?: boolean;
|
|
602
|
+
unread?: boolean;
|
|
569
603
|
updatedAt?: boolean;
|
|
570
604
|
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>;
|
|
571
605
|
}, ExtArgs["result"]["tab"]>;
|
|
@@ -579,6 +613,7 @@ export type TabSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extension
|
|
|
579
613
|
startedAt?: boolean;
|
|
580
614
|
completedAt?: boolean;
|
|
581
615
|
todos?: boolean;
|
|
616
|
+
unread?: boolean;
|
|
582
617
|
updatedAt?: boolean;
|
|
583
618
|
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>;
|
|
584
619
|
}, ExtArgs["result"]["tab"]>;
|
|
@@ -592,9 +627,10 @@ export type TabSelectScalar = {
|
|
|
592
627
|
startedAt?: boolean;
|
|
593
628
|
completedAt?: boolean;
|
|
594
629
|
todos?: boolean;
|
|
630
|
+
unread?: boolean;
|
|
595
631
|
updatedAt?: boolean;
|
|
596
632
|
};
|
|
597
|
-
export type TabOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"tabId" | "taskId" | "order" | "status" | "mode" | "createdAt" | "startedAt" | "completedAt" | "todos" | "updatedAt", ExtArgs["result"]["tab"]>;
|
|
633
|
+
export type TabOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"tabId" | "taskId" | "order" | "status" | "mode" | "createdAt" | "startedAt" | "completedAt" | "todos" | "unread" | "updatedAt", ExtArgs["result"]["tab"]>;
|
|
598
634
|
export type TabInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
|
|
599
635
|
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>;
|
|
600
636
|
};
|
|
@@ -619,6 +655,7 @@ export type $TabPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs =
|
|
|
619
655
|
startedAt: Date;
|
|
620
656
|
completedAt: Date | null;
|
|
621
657
|
todos: string | null;
|
|
658
|
+
unread: boolean;
|
|
622
659
|
updatedAt: Date;
|
|
623
660
|
}, ExtArgs["result"]["tab"]>;
|
|
624
661
|
composites: {};
|
|
@@ -984,6 +1021,7 @@ export interface TabFieldRefs {
|
|
|
984
1021
|
readonly startedAt: Prisma.FieldRef<"Tab", 'DateTime'>;
|
|
985
1022
|
readonly completedAt: Prisma.FieldRef<"Tab", 'DateTime'>;
|
|
986
1023
|
readonly todos: Prisma.FieldRef<"Tab", 'String'>;
|
|
1024
|
+
readonly unread: Prisma.FieldRef<"Tab", 'Boolean'>;
|
|
987
1025
|
readonly updatedAt: Prisma.FieldRef<"Tab", 'DateTime'>;
|
|
988
1026
|
}
|
|
989
1027
|
/**
|
|
@@ -17,6 +17,11 @@ export declare function createTab(taskId: string, mode?: Tab['mode']): Promise<T
|
|
|
17
17
|
export declare function getTab(taskId: string, tab_id: string): Promise<Tab | null>;
|
|
18
18
|
export declare function updateTab(taskId: string, tab_id: string, updates: Partial<Omit<Tab, 'tab_id' | 'order' | 'startedAt'>>): Promise<Tab | null>;
|
|
19
19
|
export declare function deleteTab(taskId: string, tab_id: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* タスク配下の全タブを既読にする。
|
|
22
|
+
* 「タスク詳細を開く = 確認した」とみなすため、タブ単位ではなくタスク単位で落とす。
|
|
23
|
+
*/
|
|
24
|
+
export declare function markTaskTabsRead(taskId: string): Promise<number>;
|
|
20
25
|
/**
|
|
21
26
|
* タスクステータスを遷移させる
|
|
22
27
|
*/
|
|
@@ -156,6 +156,7 @@ export async function updateTab(taskId, tab_id, updates) {
|
|
|
156
156
|
where: { tabId: tab_id },
|
|
157
157
|
data: {
|
|
158
158
|
...(updates.status && { status: updates.status }),
|
|
159
|
+
...(updates.unread !== undefined && { unread: updates.unread }),
|
|
159
160
|
...(updates.completedAt !== undefined && {
|
|
160
161
|
completedAt: updates.completedAt ? new Date(updates.completedAt) : null,
|
|
161
162
|
}),
|
|
@@ -178,6 +179,17 @@ export async function deleteTab(taskId, tab_id) {
|
|
|
178
179
|
return false;
|
|
179
180
|
}
|
|
180
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* タスク配下の全タブを既読にする。
|
|
184
|
+
* 「タスク詳細を開く = 確認した」とみなすため、タブ単位ではなくタスク単位で落とす。
|
|
185
|
+
*/
|
|
186
|
+
export async function markTaskTabsRead(taskId) {
|
|
187
|
+
const result = await prisma.tab.updateMany({
|
|
188
|
+
where: { taskId, unread: true },
|
|
189
|
+
data: { unread: false },
|
|
190
|
+
});
|
|
191
|
+
return result.count;
|
|
192
|
+
}
|
|
181
193
|
// ============================================
|
|
182
194
|
// Claude Tool関数(タスクワークフロー用)
|
|
183
195
|
// ============================================
|
|
@@ -229,6 +241,7 @@ function mapTab(tab) {
|
|
|
229
241
|
order: tab.order,
|
|
230
242
|
status: tab.status,
|
|
231
243
|
mode: tab.mode,
|
|
244
|
+
unread: tab.unread,
|
|
232
245
|
todos: tab.todos ? JSON.parse(tab.todos) : [],
|
|
233
246
|
startedAt: tab.startedAt.toISOString(),
|
|
234
247
|
completedAt: tab.completedAt?.toISOString(),
|
|
@@ -11,14 +11,34 @@ function tasksToTodos(tasks) {
|
|
|
11
11
|
status: t.status,
|
|
12
12
|
}));
|
|
13
13
|
}
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* status から未読フラグを導出する。
|
|
16
|
+
* 完了(success/error)で未読を立て、再実行・セッション終了で落とす。
|
|
17
|
+
* web 側 (apps/web/src/lib/claude-status.ts の unreadForStatus) と同じルール。
|
|
18
|
+
*/
|
|
19
|
+
function unreadForStatus(status) {
|
|
20
|
+
switch (status) {
|
|
21
|
+
case 'success':
|
|
22
|
+
case 'error':
|
|
23
|
+
return true;
|
|
24
|
+
case 'running':
|
|
25
|
+
case 'idle':
|
|
26
|
+
return false;
|
|
27
|
+
default:
|
|
28
|
+
// waiting 等は未読状態を変えない
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** DBでタブのステータス(+ todos / 未読フラグ)を直接更新する */
|
|
15
33
|
async function updateTabStatus(sessionId, status, todos) {
|
|
16
34
|
try {
|
|
35
|
+
const unread = unreadForStatus(status);
|
|
17
36
|
const result = await prisma.tab.updateMany({
|
|
18
37
|
where: { tabId: sessionId },
|
|
19
38
|
data: {
|
|
20
39
|
status,
|
|
21
40
|
...(todos !== undefined && { todos: JSON.stringify(todos) }),
|
|
41
|
+
...(unread !== undefined && { unread }),
|
|
22
42
|
},
|
|
23
43
|
});
|
|
24
44
|
return { count: result.count };
|
|
@@ -288,6 +288,26 @@ export async function tasksRoutes(fastify) {
|
|
|
288
288
|
return reply.status(500).send({ error: errorMessage });
|
|
289
289
|
}
|
|
290
290
|
});
|
|
291
|
+
// POST /tasks/:id/read - タスク配下の全タブを既読にする(詳細画面を開いた = 確認した)
|
|
292
|
+
fastify.post('/tasks/:id/read', async (request, reply) => {
|
|
293
|
+
try {
|
|
294
|
+
const { id: taskId } = request.params;
|
|
295
|
+
const markedCount = await taskRepo.markTaskTabsRead(taskId);
|
|
296
|
+
const task = await taskRepo.getTask(taskId);
|
|
297
|
+
if (!task) {
|
|
298
|
+
return reply.status(404).send({ error: 'Task not found' });
|
|
299
|
+
}
|
|
300
|
+
// 既読化を他の画面(ボード等)にも反映する。変化が無いときは通知不要
|
|
301
|
+
if (markedCount > 0) {
|
|
302
|
+
io.emit('task:updated', { task });
|
|
303
|
+
}
|
|
304
|
+
return reply.status(200).send({ data: { task } });
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
fastify.log.error(error, 'POST /tasks/:id/read error');
|
|
308
|
+
return reply.status(500).send({ error: 'Failed to mark task as read' });
|
|
309
|
+
}
|
|
310
|
+
});
|
|
291
311
|
// GET /tasks/:id/tabs
|
|
292
312
|
fastify.get('/tasks/:id/tabs', async (request, reply) => {
|
|
293
313
|
try {
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minimalcorp/tsunagi",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.34",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@minimalcorp/tsunagi",
|
|
9
|
-
"version": "0.1.
|
|
9
|
+
"version": "0.1.34",
|
|
10
10
|
"license": "SEE LICENSE IN LICENSE",
|
|
11
11
|
"os": [
|
|
12
12
|
"darwin",
|
|
@@ -84,9 +84,9 @@
|
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
86
|
"node_modules/@fastify/ajv-compiler/node_modules/fast-uri": {
|
|
87
|
-
"version": "4.1.
|
|
88
|
-
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.1.
|
|
89
|
-
"integrity": "sha512-
|
|
87
|
+
"version": "4.1.5",
|
|
88
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.1.5.tgz",
|
|
89
|
+
"integrity": "sha512-vZeoMRB4epNr7QfdHxel7te/RcX16CxyXI07JCCTFWZA2s4v1azGNESRj+2EoaHSaWFL/Z3GmKT2jF6A202jLg==",
|
|
90
90
|
"funding": [
|
|
91
91
|
{
|
|
92
92
|
"type": "github",
|
|
@@ -257,9 +257,9 @@
|
|
|
257
257
|
}
|
|
258
258
|
},
|
|
259
259
|
"node_modules/@fastify/proxy-addr": {
|
|
260
|
-
"version": "5.1.
|
|
261
|
-
"resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.1.
|
|
262
|
-
"integrity": "sha512-
|
|
260
|
+
"version": "5.1.1",
|
|
261
|
+
"resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.1.1.tgz",
|
|
262
|
+
"integrity": "sha512-zv07Y9GEuDsJPegZoDFd4SDWaZOW8N2pa0GSrYmKpId/tjt1Hgo3BjZBVjdVpfVrHaA+Qv5jawtS2O50J5xM9g==",
|
|
263
263
|
"funding": [
|
|
264
264
|
{
|
|
265
265
|
"type": "github",
|
|
@@ -1189,9 +1189,9 @@
|
|
|
1189
1189
|
"license": "MIT"
|
|
1190
1190
|
},
|
|
1191
1191
|
"node_modules/@types/node": {
|
|
1192
|
-
"version": "26.
|
|
1193
|
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.
|
|
1194
|
-
"integrity": "sha512-
|
|
1192
|
+
"version": "26.6.1",
|
|
1193
|
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.1.tgz",
|
|
1194
|
+
"integrity": "sha512-VqGJBMCtdhqkBUCcBLvywI0NJ+KLuVzgNnlBUNFOQjqVxzo2lxLUNg1DSey8+u2u6ktswSAxg+s68QLzWHNOuA==",
|
|
1195
1195
|
"license": "MIT",
|
|
1196
1196
|
"dependencies": {
|
|
1197
1197
|
"undici-types": "~8.9.0"
|
|
@@ -2264,9 +2264,9 @@
|
|
|
2264
2264
|
}
|
|
2265
2265
|
},
|
|
2266
2266
|
"node_modules/fast-json-stringify/node_modules/fast-uri": {
|
|
2267
|
-
"version": "4.1.
|
|
2268
|
-
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.1.
|
|
2269
|
-
"integrity": "sha512-
|
|
2267
|
+
"version": "4.1.5",
|
|
2268
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.1.5.tgz",
|
|
2269
|
+
"integrity": "sha512-vZeoMRB4epNr7QfdHxel7te/RcX16CxyXI07JCCTFWZA2s4v1azGNESRj+2EoaHSaWFL/Z3GmKT2jF6A202jLg==",
|
|
2270
2270
|
"funding": [
|
|
2271
2271
|
{
|
|
2272
2272
|
"type": "github",
|
|
@@ -2289,9 +2289,9 @@
|
|
|
2289
2289
|
}
|
|
2290
2290
|
},
|
|
2291
2291
|
"node_modules/fast-uri": {
|
|
2292
|
-
"version": "3.1.
|
|
2293
|
-
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.
|
|
2294
|
-
"integrity": "sha512-
|
|
2292
|
+
"version": "3.1.8",
|
|
2293
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz",
|
|
2294
|
+
"integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==",
|
|
2295
2295
|
"funding": [
|
|
2296
2296
|
{
|
|
2297
2297
|
"type": "github",
|
|
@@ -2591,9 +2591,9 @@
|
|
|
2591
2591
|
}
|
|
2592
2592
|
},
|
|
2593
2593
|
"node_modules/hono": {
|
|
2594
|
-
"version": "4.13.
|
|
2595
|
-
"resolved": "https://registry.npmjs.org/hono/-/hono-4.13.
|
|
2596
|
-
"integrity": "sha512
|
|
2594
|
+
"version": "4.13.8",
|
|
2595
|
+
"resolved": "https://registry.npmjs.org/hono/-/hono-4.13.8.tgz",
|
|
2596
|
+
"integrity": "sha512-/Gng7NfoykZl2pjukW5Z6+8Yxm3BPRf86GTbQnt0SbySkvax4fyL4H3HhY1cCpBGmiW9XDRFzRV+CXK2W8QudQ==",
|
|
2597
2597
|
"license": "MIT",
|
|
2598
2598
|
"engines": {
|
|
2599
2599
|
"node": ">=16.9.0"
|
|
@@ -2651,9 +2651,9 @@
|
|
|
2651
2651
|
}
|
|
2652
2652
|
},
|
|
2653
2653
|
"node_modules/ip-address": {
|
|
2654
|
-
"version": "10.7.
|
|
2655
|
-
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.
|
|
2656
|
-
"integrity": "sha512-
|
|
2654
|
+
"version": "10.7.2",
|
|
2655
|
+
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz",
|
|
2656
|
+
"integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==",
|
|
2657
2657
|
"license": "MIT",
|
|
2658
2658
|
"engines": {
|
|
2659
2659
|
"node": ">= 12"
|
|
@@ -3274,9 +3274,9 @@
|
|
|
3274
3274
|
"license": "ISC"
|
|
3275
3275
|
},
|
|
3276
3276
|
"node_modules/proxy-addr": {
|
|
3277
|
-
"version": "2.0.
|
|
3278
|
-
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
|
|
3279
|
-
"integrity": "sha512-
|
|
3277
|
+
"version": "2.0.8",
|
|
3278
|
+
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",
|
|
3279
|
+
"integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",
|
|
3280
3280
|
"license": "MIT",
|
|
3281
3281
|
"dependencies": {
|
|
3282
3282
|
"forwarded": "0.2.0",
|
|
@@ -3284,6 +3284,10 @@
|
|
|
3284
3284
|
},
|
|
3285
3285
|
"engines": {
|
|
3286
3286
|
"node": ">= 0.10"
|
|
3287
|
+
},
|
|
3288
|
+
"funding": {
|
|
3289
|
+
"type": "opencollective",
|
|
3290
|
+
"url": "https://opencollective.com/express"
|
|
3287
3291
|
}
|
|
3288
3292
|
},
|
|
3289
3293
|
"node_modules/proxy-addr/node_modules/ipaddr.js": {
|
|
@@ -4037,9 +4041,9 @@
|
|
|
4037
4041
|
}
|
|
4038
4042
|
},
|
|
4039
4043
|
"node_modules/zod": {
|
|
4040
|
-
"version": "4.6.
|
|
4041
|
-
"resolved": "https://registry.npmjs.org/zod/-/zod-4.6.
|
|
4042
|
-
"integrity": "sha512-
|
|
4044
|
+
"version": "4.6.5",
|
|
4045
|
+
"resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz",
|
|
4046
|
+
"integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==",
|
|
4043
4047
|
"license": "MIT",
|
|
4044
4048
|
"funding": {
|
|
4045
4049
|
"url": "https://github.com/sponsors/colinhacks"
|
package/package.json
CHANGED
package/prisma/schema.prisma
CHANGED
|
@@ -65,6 +65,8 @@ model Tab {
|
|
|
65
65
|
startedAt DateTime @map("started_at")
|
|
66
66
|
completedAt DateTime? @map("completed_at")
|
|
67
67
|
todos String? @default("[]") // JSON: Todo[]
|
|
68
|
+
// 完了(success/error)したがタスク詳細で未確認であることを示す。詳細を開くとfalseになる
|
|
69
|
+
unread Boolean @default(false)
|
|
68
70
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
69
71
|
|
|
70
72
|
task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
|