@wowyuarm/dsh-agent-team 0.1.3 → 0.1.4

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 (61) hide show
  1. package/README.md +7 -1
  2. package/README.zh.md +7 -1
  3. package/package.json +1 -1
  4. package/packages/agent-team/README.md +3 -3
  5. package/packages/agent-team/README.zh.md +3 -3
  6. package/packages/agent-team/lib/index.js +38 -9
  7. package/packages/agent-team/lib/ledger.js +275 -108
  8. package/packages/agent-team/lib/spec.js +27 -11
  9. package/packages/agent-team/lib/typert.host.js +185 -86
  10. package/packages/agent-team/lib/typert.remote-client.d.ts +3 -1
  11. package/packages/agent-team/lib/typert.remote-client.d.ts.map +1 -1
  12. package/packages/agent-team/lib/typert.remote-client.js +139 -59
  13. package/packages/agent-team/lib/types/index.d.ts +12 -7
  14. package/packages/agent-team/lib/types/index.d.ts.map +1 -1
  15. package/packages/agent-team/lib/types/ledger.d.ts +16 -2
  16. package/packages/agent-team/lib/types/ledger.d.ts.map +1 -1
  17. package/packages/agent-team/lib/types/spec.d.ts.map +1 -1
  18. package/packages/agent-team/lib/types/types.d.ts +69 -30
  19. package/packages/agent-team/lib/types/types.d.ts.map +1 -1
  20. package/packages/agent-team/preset/team-member/agent.cordis.yml +1 -1
  21. package/packages/client-agent-team/README.md +2 -1
  22. package/packages/client-agent-team/README.zh.md +2 -1
  23. package/packages/client-agent-team/lib/client.js +625 -319
  24. package/packages/client-agent-team/lib/client.js.map +1 -1
  25. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.js +34 -12
  26. package/packages/client-agent-team/lib/types/client/TeamChannelPage.d.ts.map +1 -1
  27. package/packages/client-agent-team/lib/types/client/TeamChannelPage.js +14 -10
  28. package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts +6 -1
  29. package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts.map +1 -1
  30. package/packages/client-agent-team/lib/types/client/TeamComposer.js +4 -4
  31. package/packages/client-agent-team/lib/types/client/TeamConversation.d.ts +1 -1
  32. package/packages/client-agent-team/lib/types/client/TeamConversation.d.ts.map +1 -1
  33. package/packages/client-agent-team/lib/types/client/TeamConversation.js +3 -3
  34. package/packages/client-agent-team/lib/types/client/TeamMessage.d.ts +4 -1
  35. package/packages/client-agent-team/lib/types/client/TeamMessage.d.ts.map +1 -1
  36. package/packages/client-agent-team/lib/types/client/TeamMessage.js +16 -9
  37. package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts +2 -1
  38. package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts.map +1 -1
  39. package/packages/client-agent-team/lib/types/client/TeamThreadPage.js +71 -16
  40. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.d.ts.map +1 -1
  41. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.js +2 -1
  42. package/packages/client-agent-team/lib/types/client/index.d.ts.map +1 -1
  43. package/packages/client-agent-team/lib/types/client/index.js +1 -0
  44. package/packages/client-agent-team/lib/types/client/locales.d.ts +24 -0
  45. package/packages/client-agent-team/lib/types/client/locales.d.ts.map +1 -1
  46. package/packages/client-agent-team/lib/types/client/locales.js +24 -0
  47. package/packages/client-agent-team/lib/types/client/navigation.d.ts +1 -1
  48. package/packages/client-agent-team/lib/types/client/navigation.d.ts.map +1 -1
  49. package/packages/client-agent-team/lib/types/client/navigation.js +12 -6
  50. package/packages/client-agent-team/lib/types/client/slots.d.ts +2 -1
  51. package/packages/client-agent-team/lib/types/client/slots.d.ts.map +1 -1
  52. package/packages/client-agent-team/lib/types/client/task-refs.d.ts +1 -1
  53. package/packages/client-agent-team/lib/types/client/task-refs.d.ts.map +1 -1
  54. package/packages/client-agent-team/lib/types/client/task-refs.js +1 -1
  55. package/packages/client-agent-team/lib/types/client/team-formatters.d.ts +9 -0
  56. package/packages/client-agent-team/lib/types/client/team-formatters.d.ts.map +1 -1
  57. package/packages/client-agent-team/lib/types/client/team-formatters.js +13 -0
  58. package/packages/tool-agent-team/README.md +7 -7
  59. package/packages/tool-agent-team/README.zh.md +7 -7
  60. package/packages/tool-agent-team/lib/index.js +38 -28
  61. package/packages/tool-agent-team/lib/types/index.d.ts.map +1 -1
@@ -4138,7 +4138,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4138
4138
  const _wowyuarm_dsh_agent_team_agentTeam_changeAttention_parameter_0$schema = object({
4139
4139
  "requestId": intersection(string(), unknown()).readonly(),
4140
4140
  "workspaceId": intersection(string(), unknown()).readonly(),
4141
- "taskRef": intersection(string(), unknown()).readonly(),
4141
+ "threadRef": intersection(string(), unknown()).readonly().optional(),
4142
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4142
4143
  "action": union([literal("follow"), literal("unfollow")]).readonly()
4143
4144
  });
4144
4145
  const _wowyuarm_dsh_agent_team_agentTeam_changeAttention_result$schema = object({
@@ -4163,10 +4164,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4163
4164
  literal("open"),
4164
4165
  literal("accepted")
4165
4166
  ]).readonly()
4166
- }).readonly(),
4167
+ }).readonly().optional(),
4167
4168
  "thread": object({
4168
4169
  "threadRef": intersection(string(), unknown()).readonly(),
4169
- "taskRef": intersection(string(), unknown()).readonly(),
4170
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4170
4171
  "revision": number().readonly()
4171
4172
  }).readonly(),
4172
4173
  "attention": object({
@@ -4217,7 +4218,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4217
4218
  "kind": union([
4218
4219
  literal("accept"),
4219
4220
  literal("close"),
4220
- literal("reopen")
4221
+ literal("reopen"),
4222
+ literal("promote")
4221
4223
  ]).readonly(),
4222
4224
  "releasedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
4223
4225
  "completedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
@@ -4246,7 +4248,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4246
4248
  }).readonly(),
4247
4249
  "thread": object({
4248
4250
  "threadRef": intersection(string(), unknown()).readonly(),
4249
- "taskRef": intersection(string(), unknown()).readonly(),
4251
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4250
4252
  "revision": number().readonly()
4251
4253
  }).readonly(),
4252
4254
  "claims": array(object({
@@ -4265,7 +4267,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4265
4267
  }),
4266
4268
  object({
4267
4269
  "kind": literal("unread_required").readonly(),
4268
- "taskRef": intersection(string(), unknown()).readonly(),
4270
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4269
4271
  "threadRef": intersection(string(), unknown()).readonly(),
4270
4272
  "revision": number().readonly(),
4271
4273
  "unreadCount": number().readonly(),
@@ -4273,7 +4275,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4273
4275
  }),
4274
4276
  object({
4275
4277
  "kind": literal("stale_revision").readonly(),
4276
- "taskRef": intersection(string(), unknown()).readonly(),
4278
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4277
4279
  "threadRef": intersection(string(), unknown()).readonly(),
4278
4280
  "expectedRevision": number().readonly(),
4279
4281
  "revision": number().readonly()
@@ -4331,10 +4333,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4331
4333
  literal("open"),
4332
4334
  literal("accepted")
4333
4335
  ]).readonly()
4334
- }).readonly(),
4336
+ }).readonly().optional(),
4335
4337
  "thread": object({
4336
4338
  "threadRef": intersection(string(), unknown()).readonly(),
4337
- "taskRef": intersection(string(), unknown()).readonly(),
4339
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4338
4340
  "revision": number().readonly()
4339
4341
  }).readonly(),
4340
4342
  "unreadCount": number().readonly(),
@@ -4399,6 +4401,74 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4399
4401
  ]).readonly(),
4400
4402
  "diagnostic": string().readonly().optional()
4401
4403
  }));
4404
+ const _wowyuarm_dsh_agent_team_agentTeam_promoteThread_parameter_0$schema = object({
4405
+ "requestId": intersection(string(), unknown()).readonly(),
4406
+ "workspaceId": intersection(string(), unknown()).readonly(),
4407
+ "threadRef": intersection(string(), unknown()).readonly(),
4408
+ "baseRevision": number().readonly()
4409
+ });
4410
+ const _wowyuarm_dsh_agent_team_agentTeam_promoteThread_result$schema = union([
4411
+ object({
4412
+ "kind": literal("unread_required").readonly(),
4413
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4414
+ "threadRef": intersection(string(), unknown()).readonly(),
4415
+ "revision": number().readonly(),
4416
+ "unreadCount": number().readonly(),
4417
+ "directCount": number().readonly()
4418
+ }),
4419
+ object({
4420
+ "kind": literal("stale_revision").readonly(),
4421
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4422
+ "threadRef": intersection(string(), unknown()).readonly(),
4423
+ "expectedRevision": number().readonly(),
4424
+ "revision": number().readonly()
4425
+ }),
4426
+ object({
4427
+ "kind": literal("committed").readonly(),
4428
+ "receipt": object({
4429
+ "operationId": intersection(string(), unknown()).readonly(),
4430
+ "requestId": intersection(string(), unknown()).readonly(),
4431
+ "sequence": number().readonly()
4432
+ }).readonly(),
4433
+ "activity": object({
4434
+ "kind": union([
4435
+ literal("accept"),
4436
+ literal("close"),
4437
+ literal("reopen"),
4438
+ literal("promote")
4439
+ ]).readonly(),
4440
+ "releasedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
4441
+ "completedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
4442
+ "activityRef": intersection(string(), unknown()).readonly(),
4443
+ "taskRef": intersection(string(), unknown()).readonly(),
4444
+ "threadRef": intersection(string(), unknown()).readonly(),
4445
+ "actor": intersection(string(), unknown()).readonly(),
4446
+ "sequence": number().readonly()
4447
+ }).readonly(),
4448
+ "task": object({
4449
+ "taskRef": intersection(string(), unknown()).readonly(),
4450
+ "channelRef": intersection(string(), unknown()).readonly(),
4451
+ "threadRef": intersection(string(), unknown()).readonly(),
4452
+ "status": union([
4453
+ literal("todo"),
4454
+ literal("in_progress"),
4455
+ literal("in_review"),
4456
+ literal("done"),
4457
+ literal("closed")
4458
+ ]).readonly(),
4459
+ "resolution": union([
4460
+ literal("closed"),
4461
+ literal("open"),
4462
+ literal("accepted")
4463
+ ]).readonly()
4464
+ }).readonly(),
4465
+ "thread": object({
4466
+ "threadRef": intersection(string(), unknown()).readonly(),
4467
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4468
+ "revision": number().readonly()
4469
+ }).readonly()
4470
+ })
4471
+ ]);
4402
4472
  const _wowyuarm_dsh_agent_team_agentTeam_putAttachment_parameter_0$schema = object({
4403
4473
  "requestId": intersection(string(), unknown()).readonly(),
4404
4474
  "workspaceId": intersection(string(), unknown()).readonly(),
@@ -4416,7 +4486,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4416
4486
  const _wowyuarm_dsh_agent_team_agentTeam_readThread_parameter_0$schema = object({
4417
4487
  "requestId": intersection(string(), unknown()).readonly(),
4418
4488
  "workspaceId": intersection(string(), unknown()).readonly(),
4419
- "taskRef": intersection(string(), unknown()).readonly()
4489
+ "threadRef": intersection(string(), unknown()).readonly().optional(),
4490
+ "taskRef": intersection(string(), unknown()).readonly().optional()
4420
4491
  });
4421
4492
  const _wowyuarm_dsh_agent_team_agentTeam_readThread_result$schema = object({
4422
4493
  "receipt": object({
@@ -4440,10 +4511,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4440
4511
  literal("open"),
4441
4512
  literal("accepted")
4442
4513
  ]).readonly()
4443
- }).readonly(),
4514
+ }).readonly().optional(),
4444
4515
  "thread": object({
4445
4516
  "threadRef": intersection(string(), unknown()).readonly(),
4446
- "taskRef": intersection(string(), unknown()).readonly(),
4517
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4447
4518
  "revision": number().readonly()
4448
4519
  }).readonly(),
4449
4520
  "claims": array(object({
@@ -4463,7 +4534,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4463
4534
  "messageRef": intersection(string(), unknown()).readonly(),
4464
4535
  "channelRef": intersection(string(), unknown()).readonly(),
4465
4536
  "threadRef": intersection(string(), unknown()).readonly(),
4466
- "taskRef": intersection(string(), unknown()).readonly(),
4537
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4467
4538
  "sender": intersection(string(), unknown()).readonly(),
4468
4539
  "body": string().readonly(),
4469
4540
  "attachments": union([_undefined(), array(object({
@@ -4485,7 +4556,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4485
4556
  "messageRef": intersection(string(), unknown()).readonly(),
4486
4557
  "channelRef": intersection(string(), unknown()).readonly(),
4487
4558
  "threadRef": intersection(string(), unknown()).readonly(),
4488
- "taskRef": intersection(string(), unknown()).readonly(),
4559
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4489
4560
  "sender": intersection(string(), unknown()).readonly(),
4490
4561
  "body": string().readonly(),
4491
4562
  "attachments": union([_undefined(), array(object({
@@ -4507,7 +4578,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4507
4578
  "kind": union([
4508
4579
  literal("accept"),
4509
4580
  literal("close"),
4510
- literal("reopen")
4581
+ literal("reopen"),
4582
+ literal("promote")
4511
4583
  ]).readonly(),
4512
4584
  "releasedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
4513
4585
  "completedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
@@ -4633,7 +4705,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4633
4705
  const _wowyuarm_dsh_agent_team_agentTeam_reply_parameter_0$schema = object({
4634
4706
  "requestId": intersection(string(), unknown()).readonly(),
4635
4707
  "workspaceId": intersection(string(), unknown()).readonly(),
4636
- "taskRef": intersection(string(), unknown()).readonly(),
4708
+ "threadRef": intersection(string(), unknown()).readonly().optional(),
4709
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4637
4710
  "body": string().readonly(),
4638
4711
  "baseRevision": number().readonly(),
4639
4712
  "recipients": array(intersection(string(), unknown())).readonly().optional(),
@@ -4644,7 +4717,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4644
4717
  const _wowyuarm_dsh_agent_team_agentTeam_reply_result$schema = union([
4645
4718
  object({
4646
4719
  "kind": literal("unread_required").readonly(),
4647
- "taskRef": intersection(string(), unknown()).readonly(),
4720
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4648
4721
  "threadRef": intersection(string(), unknown()).readonly(),
4649
4722
  "revision": number().readonly(),
4650
4723
  "unreadCount": number().readonly(),
@@ -4652,7 +4725,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4652
4725
  }),
4653
4726
  object({
4654
4727
  "kind": literal("stale_revision").readonly(),
4655
- "taskRef": intersection(string(), unknown()).readonly(),
4728
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4656
4729
  "threadRef": intersection(string(), unknown()).readonly(),
4657
4730
  "expectedRevision": number().readonly(),
4658
4731
  "revision": number().readonly()
@@ -4687,7 +4760,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4687
4760
  "messageRef": intersection(string(), unknown()).readonly(),
4688
4761
  "channelRef": intersection(string(), unknown()).readonly(),
4689
4762
  "threadRef": intersection(string(), unknown()).readonly(),
4690
- "taskRef": intersection(string(), unknown()).readonly(),
4763
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4691
4764
  "sender": intersection(string(), unknown()).readonly(),
4692
4765
  "body": string().readonly(),
4693
4766
  "attachments": union([_undefined(), array(object({
@@ -4716,10 +4789,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4716
4789
  literal("open"),
4717
4790
  literal("accepted")
4718
4791
  ]).readonly()
4719
- }).readonly(),
4792
+ }).readonly().optional(),
4720
4793
  "thread": object({
4721
4794
  "threadRef": intersection(string(), unknown()).readonly(),
4722
- "taskRef": intersection(string(), unknown()).readonly(),
4795
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4723
4796
  "revision": number().readonly()
4724
4797
  }).readonly(),
4725
4798
  "attention": array(object({
@@ -4754,7 +4827,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4754
4827
  "recipients": array(intersection(string(), unknown())).readonly().optional(),
4755
4828
  "attachments": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
4756
4829
  "attachmentPaths": union([_undefined(), array(string())]).readonly().optional(),
4757
- "confirmationToken": intersection(string(), unknown()).readonly().optional()
4830
+ "confirmationToken": intersection(string(), unknown()).readonly().optional(),
4831
+ "asTask": boolean().readonly().optional()
4758
4832
  });
4759
4833
  const _wowyuarm_dsh_agent_team_agentTeam_sendMessage_result$schema = union([
4760
4834
  object({
@@ -4768,7 +4842,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4768
4842
  "messageRef": intersection(string(), unknown()).readonly(),
4769
4843
  "channelRef": intersection(string(), unknown()).readonly(),
4770
4844
  "threadRef": intersection(string(), unknown()).readonly(),
4771
- "taskRef": intersection(string(), unknown()).readonly(),
4845
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4772
4846
  "sender": intersection(string(), unknown()).readonly(),
4773
4847
  "body": string().readonly(),
4774
4848
  "attachments": union([_undefined(), array(object({
@@ -4797,10 +4871,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4797
4871
  literal("open"),
4798
4872
  literal("accepted")
4799
4873
  ]).readonly()
4800
- }).readonly(),
4874
+ }).readonly().optional(),
4801
4875
  "thread": object({
4802
4876
  "threadRef": intersection(string(), unknown()).readonly(),
4803
- "taskRef": intersection(string(), unknown()).readonly(),
4877
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4804
4878
  "revision": number().readonly()
4805
4879
  }).readonly(),
4806
4880
  "attention": array(object({
@@ -4838,7 +4912,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4838
4912
  ]);
4839
4913
  const _wowyuarm_dsh_agent_team_agentTeam_threadHistory_parameter_0$schema = object({
4840
4914
  "workspaceId": intersection(string(), unknown()).readonly(),
4841
- "taskRef": intersection(string(), unknown()).readonly(),
4915
+ "threadRef": intersection(string(), unknown()).readonly().optional(),
4916
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4842
4917
  "beforeSequence": number().readonly().optional(),
4843
4918
  "limit": number().readonly().optional()
4844
4919
  });
@@ -4859,17 +4934,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4859
4934
  literal("open"),
4860
4935
  literal("accepted")
4861
4936
  ]).readonly()
4862
- }).readonly(),
4937
+ }).readonly().optional(),
4863
4938
  "thread": object({
4864
4939
  "threadRef": intersection(string(), unknown()).readonly(),
4865
- "taskRef": intersection(string(), unknown()).readonly(),
4940
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4866
4941
  "revision": number().readonly()
4867
4942
  }).readonly(),
4868
4943
  "anchor": object({
4869
4944
  "messageRef": intersection(string(), unknown()).readonly(),
4870
4945
  "channelRef": intersection(string(), unknown()).readonly(),
4871
4946
  "threadRef": intersection(string(), unknown()).readonly(),
4872
- "taskRef": intersection(string(), unknown()).readonly(),
4947
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4873
4948
  "sender": intersection(string(), unknown()).readonly(),
4874
4949
  "body": string().readonly(),
4875
4950
  "attachments": union([_undefined(), array(object({
@@ -4903,7 +4978,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4903
4978
  "messageRef": intersection(string(), unknown()).readonly(),
4904
4979
  "channelRef": intersection(string(), unknown()).readonly(),
4905
4980
  "threadRef": intersection(string(), unknown()).readonly(),
4906
- "taskRef": intersection(string(), unknown()).readonly(),
4981
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4907
4982
  "sender": intersection(string(), unknown()).readonly(),
4908
4983
  "body": string().readonly(),
4909
4984
  "attachments": union([_undefined(), array(object({
@@ -4925,7 +5000,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4925
5000
  "kind": union([
4926
5001
  literal("accept"),
4927
5002
  literal("close"),
4928
- literal("reopen")
5003
+ literal("reopen"),
5004
+ literal("promote")
4929
5005
  ]).readonly(),
4930
5006
  "releasedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
4931
5007
  "completedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
@@ -4964,13 +5040,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4964
5040
  });
4965
5041
  const _wowyuarm_dsh_agent_team_agentTeam_threadObservations_parameter_0$schema = object({
4966
5042
  "workspaceId": intersection(string(), unknown()).readonly(),
4967
- "taskRef": intersection(string(), unknown()).readonly(),
5043
+ "threadRef": intersection(string(), unknown()).readonly().optional(),
5044
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4968
5045
  "limit": number().readonly().optional()
4969
5046
  });
4970
5047
  const _wowyuarm_dsh_agent_team_agentTeam_threadObservations_result$schema = object({ "items": array(object({
4971
5048
  "sequence": number().readonly(),
4972
5049
  "threadRef": intersection(string(), unknown()).readonly(),
4973
- "taskRef": intersection(string(), unknown()).readonly(),
5050
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
4974
5051
  "memberId": intersection(string(), unknown()).readonly(),
4975
5052
  "action": union([literal("follow"), literal("unfollow")]).readonly()
4976
5053
  })).readonly() });
@@ -5089,7 +5166,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5089
5166
  })).readonly(),
5090
5167
  "threads": array(object({
5091
5168
  "threadRef": intersection(string(), unknown()).readonly(),
5092
- "taskRef": intersection(string(), unknown()).readonly(),
5169
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
5093
5170
  "revision": number().readonly()
5094
5171
  })).readonly(),
5095
5172
  "taskNumbers": array(object({
@@ -5101,7 +5178,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5101
5178
  "messageRef": intersection(string(), unknown()).readonly(),
5102
5179
  "channelRef": intersection(string(), unknown()).readonly(),
5103
5180
  "threadRef": intersection(string(), unknown()).readonly(),
5104
- "taskRef": intersection(string(), unknown()).readonly(),
5181
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
5105
5182
  "sender": intersection(string(), unknown()).readonly(),
5106
5183
  "body": string().readonly(),
5107
5184
  "attachments": union([_undefined(), array(object({
@@ -5131,13 +5208,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5131
5208
  literal("open"),
5132
5209
  literal("accepted")
5133
5210
  ]).readonly()
5134
- }).readonly(),
5211
+ }).readonly().optional(),
5135
5212
  "thread": object({
5136
5213
  "threadRef": intersection(string(), unknown()).readonly(),
5137
- "taskRef": intersection(string(), unknown()).readonly(),
5214
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
5138
5215
  "revision": number().readonly()
5139
5216
  }).readonly(),
5140
- "taskNumber": number().readonly(),
5217
+ "taskNumber": number().readonly().optional(),
5141
5218
  "messageCount": number().readonly()
5142
5219
  })).readonly(),
5143
5220
  "claims": array(object({
@@ -5158,7 +5235,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5158
5235
  "kind": union([
5159
5236
  literal("accept"),
5160
5237
  literal("close"),
5161
- literal("reopen")
5238
+ literal("reopen"),
5239
+ literal("promote")
5162
5240
  ]).readonly(),
5163
5241
  "releasedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
5164
5242
  "completedClaimRefs": union([_undefined(), array(intersection(string(), unknown()))]).readonly().optional(),
@@ -5220,7 +5298,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5220
5298
  },
5221
5299
  sourceLocation: {
5222
5300
  "file": "packages/agent-team/src/index.ts",
5223
- "line": 378,
5301
+ "line": 380,
5224
5302
  "column": 9
5225
5303
  }
5226
5304
  },
@@ -5247,7 +5325,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5247
5325
  },
5248
5326
  sourceLocation: {
5249
5327
  "file": "packages/agent-team/src/index.ts",
5250
- "line": 641,
5328
+ "line": 664,
5251
5329
  "column": 9
5252
5330
  }
5253
5331
  },
@@ -5275,7 +5353,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5275
5353
  },
5276
5354
  sourceLocation: {
5277
5355
  "file": "packages/agent-team/src/index.ts",
5278
- "line": 315,
5356
+ "line": 317,
5279
5357
  "column": 9
5280
5358
  }
5281
5359
  },
@@ -5302,7 +5380,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5302
5380
  },
5303
5381
  sourceLocation: {
5304
5382
  "file": "packages/agent-team/src/index.ts",
5305
- "line": 541,
5383
+ "line": 554,
5306
5384
  "column": 9
5307
5385
  }
5308
5386
  },
@@ -5329,7 +5407,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5329
5407
  },
5330
5408
  sourceLocation: {
5331
5409
  "file": "packages/agent-team/src/index.ts",
5332
- "line": 356,
5410
+ "line": 358,
5333
5411
  "column": 9
5334
5412
  }
5335
5413
  },
@@ -5356,7 +5434,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5356
5434
  },
5357
5435
  sourceLocation: {
5358
5436
  "file": "packages/agent-team/src/index.ts",
5359
- "line": 627,
5437
+ "line": 650,
5360
5438
  "column": 9
5361
5439
  }
5362
5440
  },
@@ -5383,7 +5461,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5383
5461
  },
5384
5462
  sourceLocation: {
5385
5463
  "file": "packages/agent-team/src/index.ts",
5386
- "line": 650,
5464
+ "line": 673,
5387
5465
  "column": 3
5388
5466
  }
5389
5467
  },
@@ -5410,7 +5488,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5410
5488
  },
5411
5489
  sourceLocation: {
5412
5490
  "file": "packages/agent-team/src/index.ts",
5413
- "line": 551,
5491
+ "line": 574,
5414
5492
  "column": 9
5415
5493
  }
5416
5494
  },
@@ -5438,10 +5516,37 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5438
5516
  },
5439
5517
  sourceLocation: {
5440
5518
  "file": "packages/agent-team/src/index.ts",
5441
- "line": 306,
5519
+ "line": 308,
5442
5520
  "column": 3
5443
5521
  }
5444
5522
  },
5523
+ {
5524
+ id: "@wowyuarm/dsh-agent-team#agentTeam/promoteThread",
5525
+ service: "agentTeam",
5526
+ namespace: "agentTeam",
5527
+ method: "promoteThread",
5528
+ invocation: { kind: "direct" },
5529
+ parameters: [{
5530
+ name: "request",
5531
+ wire: "request",
5532
+ source: "json",
5533
+ codec: {
5534
+ mode: "strict",
5535
+ typeSymbol: "@wowyuarm/dsh-agent-team/types#AgentTeamPromoteThreadRequest",
5536
+ schema: _wowyuarm_dsh_agent_team_agentTeam_promoteThread_parameter_0$schema
5537
+ }
5538
+ }],
5539
+ result: {
5540
+ mode: "strict",
5541
+ typeSymbol: "@wowyuarm/dsh-agent-team/types#AgentTeamPromoteThreadResult",
5542
+ schema: _wowyuarm_dsh_agent_team_agentTeam_promoteThread_result$schema
5543
+ },
5544
+ sourceLocation: {
5545
+ "file": "packages/agent-team/src/index.ts",
5546
+ "line": 564,
5547
+ "column": 9
5548
+ }
5549
+ },
5445
5550
  {
5446
5551
  id: "@wowyuarm/dsh-agent-team#agentTeam/putAttachment",
5447
5552
  service: "agentTeam",
@@ -5465,7 +5570,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5465
5570
  },
5466
5571
  sourceLocation: {
5467
5572
  "file": "packages/agent-team/src/index.ts",
5468
- "line": 614,
5573
+ "line": 637,
5469
5574
  "column": 9
5470
5575
  }
5471
5576
  },
@@ -5492,7 +5597,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5492
5597
  },
5493
5598
  sourceLocation: {
5494
5599
  "file": "packages/agent-team/src/index.ts",
5495
- "line": 657,
5600
+ "line": 680,
5496
5601
  "column": 9
5497
5602
  }
5498
5603
  },
@@ -5519,7 +5624,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5519
5624
  },
5520
5625
  sourceLocation: {
5521
5626
  "file": "packages/agent-team/src/index.ts",
5522
- "line": 429,
5627
+ "line": 433,
5523
5628
  "column": 9
5524
5629
  }
5525
5630
  },
@@ -5546,7 +5651,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5546
5651
  },
5547
5652
  sourceLocation: {
5548
5653
  "file": "packages/agent-team/src/index.ts",
5549
- "line": 562,
5654
+ "line": 585,
5550
5655
  "column": 9
5551
5656
  }
5552
5657
  },
@@ -5573,7 +5678,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5573
5678
  },
5574
5679
  sourceLocation: {
5575
5680
  "file": "packages/agent-team/src/index.ts",
5576
- "line": 635,
5681
+ "line": 658,
5577
5682
  "column": 9
5578
5683
  }
5579
5684
  },
@@ -5600,7 +5705,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5600
5705
  },
5601
5706
  sourceLocation: {
5602
5707
  "file": "packages/agent-team/src/index.ts",
5603
- "line": 293,
5708
+ "line": 295,
5604
5709
  "column": 3
5605
5710
  }
5606
5711
  },
@@ -5627,7 +5732,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5627
5732
  },
5628
5733
  sourceLocation: {
5629
5734
  "file": "packages/agent-team/src/index.ts",
5630
- "line": 571,
5735
+ "line": 594,
5631
5736
  "column": 9
5632
5737
  }
5633
5738
  },
@@ -5654,7 +5759,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5654
5759
  },
5655
5760
  sourceLocation: {
5656
5761
  "file": "packages/agent-team/src/index.ts",
5657
- "line": 673,
5762
+ "line": 696,
5658
5763
  "column": 3
5659
5764
  }
5660
5765
  },
@@ -5681,7 +5786,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5681
5786
  },
5682
5787
  sourceLocation: {
5683
5788
  "file": "packages/agent-team/src/index.ts",
5684
- "line": 666,
5789
+ "line": 689,
5685
5790
  "column": 3
5686
5791
  }
5687
5792
  },
@@ -5708,7 +5813,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5708
5813
  },
5709
5814
  sourceLocation: {
5710
5815
  "file": "packages/agent-team/src/index.ts",
5711
- "line": 368,
5816
+ "line": 370,
5712
5817
  "column": 9
5713
5818
  }
5714
5819
  },
@@ -5735,7 +5840,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5735
5840
  },
5736
5841
  sourceLocation: {
5737
5842
  "file": "packages/agent-team/src/index.ts",
5738
- "line": 511,
5843
+ "line": 524,
5739
5844
  "column": 9
5740
5845
  }
5741
5846
  },
@@ -5762,7 +5867,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5762
5867
  },
5763
5868
  sourceLocation: {
5764
5869
  "file": "packages/agent-team/src/index.ts",
5765
- "line": 680,
5870
+ "line": 703,
5766
5871
  "column": 3
5767
5872
  }
5768
5873
  }
@@ -5775,14 +5880,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5775
5880
  if (typeof localStorage === "undefined") return { mode: "conversation" };
5776
5881
  try {
5777
5882
  const parsed = JSON.parse(localStorage.getItem("dsh.agent-team.navigation") ?? "");
5778
- const hasThread = typeof parsed.taskRef === "string" && typeof parsed.threadRef === "string";
5883
+ const hasThread = typeof parsed.threadRef === "string";
5779
5884
  return {
5780
5885
  mode: parsed.mode === "team" ? "team" : "conversation",
5781
5886
  ...typeof parsed.workspaceId === "string" ? { workspaceId: parsed.workspaceId } : {},
5782
5887
  ...typeof parsed.channelRef === "string" ? { channelRef: parsed.channelRef } : {},
5783
5888
  ...hasThread ? {
5784
- taskRef: parsed.taskRef,
5785
5889
  threadRef: parsed.threadRef,
5890
+ ...typeof parsed.taskRef === "string" ? { taskRef: parsed.taskRef } : {},
5786
5891
  ...typeof parsed.taskNumber === "number" && Number.isInteger(parsed.taskNumber) && parsed.taskNumber > 0 ? { taskNumber: parsed.taskNumber } : {}
5787
5892
  } : {}
5788
5893
  };
@@ -5832,9 +5937,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5832
5937
  this.clearMemberSession();
5833
5938
  this.setChannel(channelRef);
5834
5939
  },
5835
- selectThread: (taskRef, threadRef, channelRef, taskNumber) => {
5940
+ selectThread: (threadRef, channelRef, taskRef, taskNumber) => {
5836
5941
  this.clearMemberSession();
5837
- this.setThread(taskRef, threadRef, channelRef, taskNumber);
5942
+ this.setThread(threadRef, channelRef, taskRef, taskNumber);
5838
5943
  },
5839
5944
  backToWorkspace: () => {
5840
5945
  this.clearMemberSession();
@@ -5905,18 +6010,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5905
6010
  this.snapshot = base;
5906
6011
  this.commit();
5907
6012
  }
5908
- setThread(taskRef, threadRef, channelRef, taskNumber) {
6013
+ setThread(threadRef, channelRef, taskRef, taskNumber) {
5909
6014
  if (this.snapshot.threadRef === threadRef && this.snapshot.taskRef === taskRef && this.snapshot.channelRef === channelRef && this.snapshot.taskNumber === taskNumber) return;
5910
- if (threadRef === void 0 || taskRef === void 0) {
6015
+ if (threadRef === void 0) {
5911
6016
  const { taskRef: _taskRef, threadRef: _threadRef, taskNumber: _taskNumber, ...base } = this.snapshot;
5912
6017
  this.snapshot = base;
5913
6018
  } else {
5914
6019
  const { channelRef: _channelRef, taskRef: _taskRef, threadRef: _threadRef, taskNumber: _taskNumber, ...base } = this.snapshot;
5915
6020
  this.snapshot = {
5916
6021
  ...base,
5917
- taskRef,
5918
6022
  threadRef,
5919
6023
  ...channelRef === void 0 ? {} : { channelRef },
6024
+ ...taskRef === void 0 ? {} : { taskRef },
5920
6025
  ...taskNumber === void 0 ? {} : { taskNumber }
5921
6026
  };
5922
6027
  }
@@ -6382,7 +6487,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6382
6487
  const mintRequestId = () => crypto.randomUUID();
6383
6488
  //#endregion
6384
6489
  //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/composer.module.css.mjs
6385
- const css$5 = ".x9jGQq_root{padding:0 var(--dsh-composer-side-clearance,16px) 8px;flex-direction:column;align-items:center;display:flex}.x9jGQq_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width,780px);border:1px solid var(--dsw-alias-border-l2-darkmode-thin);background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));box-shadow:var(--dsw-shadow-lv2);border-radius:22px;flex-direction:column;gap:6px;padding:10px 0 0;display:flex;position:relative}.x9jGQq_inputArea{min-height:28px;position:relative}.x9jGQq_inputArea textarea{box-sizing:border-box;resize:none;width:100%;min-height:28px;max-height:336px;color:var(--dsw-alias-label-primary,var(--dsw-alias-label-primary));font:inherit;white-space:pre-wrap;overflow-wrap:anywhere;background:0 0;border:0;outline:0;padding:4px 12px 0 16px;font-size:15px;line-height:24px;display:block;overflow-y:auto}.x9jGQq_inputArea textarea::placeholder{color:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary))}.x9jGQq_memberSessionRoot{padding:0 var(--dsh-composer-side-clearance) 8px}.x9jGQq_memberSessionCard{font-family:var(--dsw-font-family);gap:6px;padding-top:10px;font-size:16px;line-height:24px}.x9jGQq_memberSessionInputArea textarea{min-height:28px;color:var(--dsw-alias-label-primary);caret-color:var(--dsw-alias-state-business-primary);font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;padding:4px 12px 0 16px}.x9jGQq_memberSessionStatus{width:100%;max-width:var(--dsh-composer-card-max-width);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-state-error-primary);border-radius:8px;margin:0 0 6px;padding:4px 8px;font-size:12px;line-height:18px}.x9jGQq_memberSessionToolbar{min-width:0;padding:2px 8px 6px}.x9jGQq_memberSessionPrimary{background:var(--dsw-alias-button-info-fill);border-radius:999px;place-items:center;display:grid;transform:translateY(-2px)}.x9jGQq_memberSessionPrimary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.x9jGQq_memberSessionPrimary:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.x9jGQq_memberSessionPrimary:disabled{cursor:default;opacity:.4}.x9jGQq_inputArea textarea:disabled{cursor:not-allowed;opacity:.55}.x9jGQq_mentionMenu{z-index:10;border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-specific-menu);max-height:min(320px,40vh);box-shadow:var(--dsw-shadow-lv3);border-radius:12px;padding:4px;position:absolute;bottom:calc(100% + 12px);left:0;right:0;overflow-y:auto}.x9jGQq_mentionOption{width:100%;min-height:40px;color:var(--dsw-alias-label-primary,var(--dsw-alias-label-primary));cursor:pointer;text-align:left;background:0 0;border:0;border-radius:10px;grid-template-columns:16px minmax(0,auto) minmax(0,1fr);align-items:center;gap:8px;padding:8px 10px;font-size:14px;line-height:22px;display:grid}.x9jGQq_mentionOption:hover,.x9jGQq_mentionOption[aria-selected=true]{background:var(--dsw-alias-interactive-bg-hover)}.x9jGQq_mentionName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.x9jGQq_mentionDescription{min-width:0;color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-tertiary));text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.x9jGQq_toolbar{justify-content:flex-end;align-items:center;gap:6px;min-height:34px;padding:2px 8px 6px;display:flex}.x9jGQq_attachButton{background:var(--dsw-specific-selector);color:var(--dsw-alias-label-primary);cursor:pointer;border:0;border-radius:999px;flex:none;place-items:center;width:28px;height:28px;margin-right:auto;display:grid}.x9jGQq_attachButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.x9jGQq_attachButton:disabled{cursor:default;opacity:.5}.x9jGQq_attachButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,var(--dsw-specific-selector));outline-offset:1px}.x9jGQq_fileInput{display:none}.x9jGQq_fileChips{flex-wrap:wrap;gap:4px;margin:0;padding:4px 8px 0;list-style:none;display:flex}.x9jGQq_fileChip{background:var(--dsw-alias-interactive-bg-hover);border-radius:6px;align-items:center;gap:4px;max-width:100%;padding:2px 4px 2px 8px;display:inline-flex}.x9jGQq_fileChipSize{color:var(--dsw-alias-label-tertiary);margin-left:6px}.x9jGQq_imageChip{align-items:center;display:flex}.x9jGQq_imageChipPreview{border:1px solid var(--dsw-alias-border-l2);object-fit:cover;border-radius:4px;width:56px;height:40px}.x9jGQq_fileChipName{text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-size:11px;line-height:16px;overflow:hidden}.x9jGQq_fileChipRemove{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;justify-content:center;align-items:center;width:16px;height:16px;padding:0;font-size:12px;display:inline-flex}.x9jGQq_fileChipRemove:hover,.x9jGQq_fileChipRemove:focus-visible{color:var(--dsw-alias-label-primary);outline:none}.x9jGQq_sendButton{background:var(--dsw-alias-button-info-fill,var(--dsw-alias-button-primary-fill));color:#fff;cursor:pointer;border:0;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;padding:0;transition:background-color .1s,opacity .1s;display:inline-flex}.x9jGQq_sendButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover,var(--dsw-alias-button-primary-hover))}.x9jGQq_sendButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.x9jGQq_sendButton:disabled{cursor:not-allowed;opacity:.4}.x9jGQq_confirmation{color:var(--dsw-alias-label-tertiary);align-self:stretch;margin:0;padding:0 16px;font-size:12px;line-height:18px}.x9jGQq_notifyRow{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-tertiary));overflow-wrap:anywhere;margin:0;padding:0 16px;font-size:12px;line-height:18px}.x9jGQq_error{color:var(--dsw-alias-state-error-primary);align-self:stretch;margin:0;padding:0 4px 2px;font-size:12px;line-height:18px}@media (width<=600px){.x9jGQq_mentionOption{grid-template-columns:16px minmax(0,1fr);min-height:36px;padding-block:6px}.x9jGQq_mentionDescription{display:none}}@media (prefers-reduced-motion:reduce){.x9jGQq_sendButton{transition:none}}";
6490
+ const css$5 = ".x9jGQq_root{padding:0 var(--dsh-composer-side-clearance,16px) 8px;flex-direction:column;align-items:center;display:flex}.x9jGQq_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width,780px);border:1px solid var(--dsw-alias-border-l2-darkmode-thin);background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));box-shadow:var(--dsw-shadow-lv2);border-radius:22px;flex-direction:column;gap:6px;padding:10px 0 0;display:flex;position:relative}.x9jGQq_inputArea{min-height:28px;position:relative}.x9jGQq_inputArea textarea{box-sizing:border-box;resize:none;width:100%;min-height:28px;max-height:336px;color:var(--dsw-alias-label-primary,var(--dsw-alias-label-primary));font:inherit;white-space:pre-wrap;overflow-wrap:anywhere;background:0 0;border:0;outline:0;padding:4px 12px 0 16px;font-size:15px;line-height:24px;display:block;overflow-y:auto}.x9jGQq_inputArea textarea::placeholder{color:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary))}.x9jGQq_memberSessionRoot{padding:0 var(--dsh-composer-side-clearance) 8px}.x9jGQq_memberSessionCard{font-family:var(--dsw-font-family);gap:6px;padding-top:10px;font-size:16px;line-height:24px}.x9jGQq_memberSessionInputArea textarea{min-height:28px;color:var(--dsw-alias-label-primary);caret-color:var(--dsw-alias-state-business-primary);font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;padding:4px 12px 0 16px}.x9jGQq_memberSessionStatus{width:100%;max-width:var(--dsh-composer-card-max-width);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-state-error-primary);border-radius:8px;margin:0 0 6px;padding:4px 8px;font-size:12px;line-height:18px}.x9jGQq_memberSessionToolbar{min-width:0;padding:2px 8px 6px}.x9jGQq_memberSessionPrimary{background:var(--dsw-alias-button-info-fill);border-radius:999px;place-items:center;display:grid;transform:translateY(-2px)}.x9jGQq_memberSessionPrimary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.x9jGQq_memberSessionPrimary:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.x9jGQq_memberSessionPrimary:disabled{cursor:default;opacity:.4}.x9jGQq_inputArea textarea:disabled{cursor:not-allowed;opacity:.55}.x9jGQq_mentionMenu{z-index:10;border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-specific-menu);max-height:min(320px,40vh);box-shadow:var(--dsw-shadow-lv3);border-radius:12px;padding:4px;position:absolute;bottom:calc(100% + 12px);left:0;right:0;overflow-y:auto}.x9jGQq_mentionOption{width:100%;min-height:40px;color:var(--dsw-alias-label-primary,var(--dsw-alias-label-primary));cursor:pointer;text-align:left;background:0 0;border:0;border-radius:10px;grid-template-columns:16px minmax(0,auto) minmax(0,1fr);align-items:center;gap:8px;padding:8px 10px;font-size:14px;line-height:22px;display:grid}.x9jGQq_mentionOption:hover,.x9jGQq_mentionOption[aria-selected=true]{background:var(--dsw-alias-interactive-bg-hover)}.x9jGQq_mentionName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.x9jGQq_mentionDescription{min-width:0;color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-tertiary));text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.x9jGQq_toolbar{justify-content:flex-end;align-items:center;gap:6px;min-height:34px;padding:2px 8px 6px;display:flex}.x9jGQq_asTaskOn[aria-pressed=true],.x9jGQq_asTaskOn[aria-pressed=true]:hover:not(:disabled){background:var(--dsw-alias-button-primary-fill);border-color:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.x9jGQq_attachButton{background:var(--dsw-specific-selector);color:var(--dsw-alias-label-primary);cursor:pointer;border:0;border-radius:999px;flex:none;place-items:center;width:28px;height:28px;margin-right:auto;display:grid}.x9jGQq_attachButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.x9jGQq_attachButton:disabled{cursor:default;opacity:.5}.x9jGQq_attachButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,var(--dsw-specific-selector));outline-offset:1px}.x9jGQq_fileInput{display:none}.x9jGQq_fileChips{flex-wrap:wrap;gap:4px;margin:0;padding:4px 8px 0;list-style:none;display:flex}.x9jGQq_fileChip{background:var(--dsw-alias-interactive-bg-hover);border-radius:6px;align-items:center;gap:4px;max-width:100%;padding:2px 4px 2px 8px;display:inline-flex}.x9jGQq_fileChipSize{color:var(--dsw-alias-label-tertiary);margin-left:6px}.x9jGQq_imageChip{align-items:center;display:flex}.x9jGQq_imageChipPreview{border:1px solid var(--dsw-alias-border-l2);object-fit:cover;border-radius:4px;width:56px;height:40px}.x9jGQq_fileChipName{text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-size:11px;line-height:16px;overflow:hidden}.x9jGQq_fileChipRemove{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;justify-content:center;align-items:center;width:16px;height:16px;padding:0;font-size:12px;display:inline-flex}.x9jGQq_fileChipRemove:hover,.x9jGQq_fileChipRemove:focus-visible{color:var(--dsw-alias-label-primary);outline:none}.x9jGQq_sendButton{background:var(--dsw-alias-button-info-fill,var(--dsw-alias-button-primary-fill));color:#fff;cursor:pointer;border:0;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;padding:0;transition:background-color .1s,opacity .1s;display:inline-flex}.x9jGQq_sendButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover,var(--dsw-alias-button-primary-hover))}.x9jGQq_sendButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.x9jGQq_sendButton:disabled{cursor:not-allowed;opacity:.4}.x9jGQq_confirmation{color:var(--dsw-alias-label-tertiary);align-self:stretch;margin:0;padding:0 16px;font-size:12px;line-height:18px}.x9jGQq_notifyRow{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-tertiary));overflow-wrap:anywhere;margin:0;padding:0 16px;font-size:12px;line-height:18px}.x9jGQq_error{color:var(--dsw-alias-state-error-primary);align-self:stretch;margin:0;padding:0 4px 2px;font-size:12px;line-height:18px}@media (width<=600px){.x9jGQq_mentionOption{grid-template-columns:16px minmax(0,1fr);min-height:36px;padding-block:6px}.x9jGQq_mentionDescription{display:none}}@media (prefers-reduced-motion:reduce){.x9jGQq_sendButton{transition:none}}";
6386
6491
  const tagId$5 = "@wowyuarm/dsh-agent-team/composer.module.css";
6387
6492
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
6388
6493
  const tag = document.createElement("style");
@@ -6392,6 +6497,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6392
6497
  document.head.appendChild(tag);
6393
6498
  }
6394
6499
  var composer_module_css_default = {
6500
+ "asTaskOn": "x9jGQq_asTaskOn",
6395
6501
  "attachButton": "x9jGQq_attachButton",
6396
6502
  "card": "x9jGQq_card",
6397
6503
  "confirmation": "x9jGQq_confirmation",
@@ -6457,7 +6563,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6457
6563
  }
6458
6564
  return url;
6459
6565
  }
6460
- function TeamComposer({ members, recipients, draft, pending, confirmation, error, onDraftChange, onRecipientsChange, onSubmit, pendingFiles, onFilesChange, t }) {
6566
+ function TeamComposer({ members, recipients, draft, pending, confirmation, error, onDraftChange, onRecipientsChange, onSubmit, placeholder, pendingFiles, onFilesChange, asTask, onAsTaskChange, t }) {
6461
6567
  const inputRef = (0, react.useRef)(null);
6462
6568
  const fileInputRef = (0, react.useRef)(null);
6463
6569
  const rootRef = (0, react.useRef)(null);
@@ -6633,7 +6739,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6633
6739
  "aria-expanded": menuOpen,
6634
6740
  value: draft,
6635
6741
  readOnly: pending,
6636
- placeholder: t("messagePlaceholder"),
6742
+ placeholder: placeholder ?? t("messagePlaceholder"),
6637
6743
  rows: 1,
6638
6744
  onChange,
6639
6745
  onKeyDown,
@@ -6694,39 +6800,53 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6694
6800
  }),
6695
6801
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6696
6802
  className: composer_module_css_default.toolbar,
6697
- children: [onFilesChange !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6698
- ref: fileInputRef,
6699
- type: "file",
6700
- multiple: true,
6701
- className: composer_module_css_default.fileInput,
6702
- "aria-hidden": "true",
6703
- tabIndex: -1,
6704
- onChange: (event) => {
6705
- const chosen = [...event.target.files ?? []];
6706
- if (chosen.length > 0 && pendingFiles !== void 0) onFilesChange([...pendingFiles, ...chosen]);
6707
- event.target.value = "";
6708
- }
6709
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6710
- type: "button",
6711
- className: composer_module_css_default.attachButton,
6712
- "aria-label": t("attachFiles"),
6713
- title: t("attachFiles"),
6714
- disabled: pending,
6715
- onClick: () => {
6716
- fileInputRef.current?.click();
6717
- },
6718
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 14 })
6719
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6720
- type: "submit",
6721
- className: composer_module_css_default.sendButton,
6722
- "aria-label": pending ? t("sendingMessage") : t("sendMessage"),
6723
- disabled: pending || draft.trim() === "",
6724
- onMouseDown: (event) => {
6725
- event.preventDefault();
6726
- inputRef.current?.focus({ preventScroll: true });
6727
- },
6728
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSendOutline16, { size: 16 })
6729
- })]
6803
+ children: [
6804
+ onAsTaskChange !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6805
+ size: "sm",
6806
+ variant: "outline",
6807
+ className: asTask === true ? composer_module_css_default.asTaskOn : void 0,
6808
+ "aria-pressed": asTask === true,
6809
+ disabled: pending,
6810
+ onClick: () => {
6811
+ onAsTaskChange(asTask !== true);
6812
+ },
6813
+ children: t("asTask")
6814
+ }),
6815
+ onFilesChange !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6816
+ ref: fileInputRef,
6817
+ type: "file",
6818
+ multiple: true,
6819
+ className: composer_module_css_default.fileInput,
6820
+ "aria-hidden": "true",
6821
+ tabIndex: -1,
6822
+ onChange: (event) => {
6823
+ const chosen = [...event.target.files ?? []];
6824
+ if (chosen.length > 0 && pendingFiles !== void 0) onFilesChange([...pendingFiles, ...chosen]);
6825
+ event.target.value = "";
6826
+ }
6827
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6828
+ type: "button",
6829
+ className: composer_module_css_default.attachButton,
6830
+ "aria-label": t("attachFiles"),
6831
+ title: t("attachFiles"),
6832
+ disabled: pending,
6833
+ onClick: () => {
6834
+ fileInputRef.current?.click();
6835
+ },
6836
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 14 })
6837
+ })] }),
6838
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6839
+ type: "submit",
6840
+ className: composer_module_css_default.sendButton,
6841
+ "aria-label": pending ? t("sendingMessage") : t("sendMessage"),
6842
+ disabled: pending || draft.trim() === "",
6843
+ onMouseDown: (event) => {
6844
+ event.preventDefault();
6845
+ inputRef.current?.focus({ preventScroll: true });
6846
+ },
6847
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSendOutline16, { size: 16 })
6848
+ })
6849
+ ]
6730
6850
  })
6731
6851
  ]
6732
6852
  }), error !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
@@ -6783,7 +6903,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6783
6903
  }).then((result) => {
6784
6904
  if (!result.ok) return;
6785
6905
  const hit = result.value.resolved[0];
6786
- if (hit !== void 0) selectThread(hit.taskRef, hit.threadRef, hit.channelRef, hit.taskNumber);
6906
+ if (hit !== void 0) selectThread(hit.threadRef, hit.channelRef, hit.taskRef, hit.taskNumber);
6787
6907
  });
6788
6908
  };
6789
6909
  /**
@@ -6978,6 +7098,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6978
7098
  actor,
6979
7099
  count: activity.completedClaimRefs.length
6980
7100
  }) : options.t("activityAccepted", { actor });
7101
+ if (activity.kind === "promote") return options.t("activityPromoted", { actor });
6981
7102
  if (activity.kind === "close") return options.t("activityClosed", { actor });
6982
7103
  if (activity.kind === "reopen") return options.t("activityReopened", { actor });
6983
7104
  const direction = "claimRef" in activity ? options.claims.find((claim) => claim.claimRef === activity.claimRef)?.direction ?? options.t("claims") : options.t("claims");
@@ -7003,6 +7124,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7003
7124
  function stripAttachmentLines(body) {
7004
7125
  return body.replaceAll(/^\[attachment\] .*$(\n)?/gm, "").replace(/\n+$/, "");
7005
7126
  }
7127
+ /** Whether one displayed Message body starts clamped behind the expand control. */
7128
+ function shouldClampMessage(displayBody) {
7129
+ return displayBody.length > 600;
7130
+ }
7006
7131
  /**
7007
7132
  * Decide how one Message body renders. Human input and plain-prose Agent
7008
7133
  * bodies stay literal, with structured mention chips inline where possible;
@@ -7030,7 +7155,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7030
7155
  }
7031
7156
  //#endregion
7032
7157
  //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/conversation.module.css.mjs
7033
- const css$4 = ".omcBaG_surface{grid-template-rows:auto minmax(0,1fr) auto;min-width:0;height:100%;min-height:0;display:grid;overflow:hidden}.omcBaG_surfaceHeader{border-bottom:1px solid var(--dsw-alias-border-l2);min-width:0;padding:14px clamp(18px,3vw,36px) 12px}.omcBaG_headerRow{justify-content:space-between;align-items:flex-start;gap:16px;min-width:0;max-width:880px;margin:0 auto;display:flex}.omcBaG_headerCopy{min-width:0}.omcBaG_headerCopy h1{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;font-size:20px;font-weight:600;line-height:28px}.omcBaG_headerCopy p{color:var(--dsw-alias-label-secondary);margin:3px 0 0;font-size:13px;line-height:20px}.omcBaG_headerActions{flex:none;align-items:center;gap:6px;display:flex}.omcBaG_backRow{max-width:880px;margin:0 auto 8px}.omcBaG_timeline{overscroll-behavior:contain;scrollbar-gutter:stable;min-height:0;padding:12px clamp(18px,3vw,36px) 24px;overflow:hidden auto}.omcBaG_timelineContent{flex-direction:column;min-width:0;max-width:880px;min-height:100%;margin:0 auto;display:flex}.omcBaG_emptySurface{margin:auto;padding:32px 0}.omcBaG_emptySurface .omcBaG_emptyState{text-align:center;justify-items:center}.omcBaG_timelineAction{justify-content:center;padding:2px 0 8px;display:flex}.omcBaG_messageRow{gap:10px;padding:10px 0;display:flex}.omcBaG_messageRow[data-grouped]{padding-top:2px}.omcBaG_messageRow[data-grouped] .omcBaG_messageBody>:first-child{margin-top:0}.omcBaG_messageIdentity{background:hsl(var(--team-avatar-hue,212) 42% 46%);color:#fff;border-radius:50%;flex:0 0 28px;justify-content:center;align-items:center;height:28px;font-size:12px;font-weight:600;display:flex}.omcBaG_messageRow[data-human] .omcBaG_messageIdentity{background:var(--dsw-alias-state-business-primary)}.omcBaG_messageRow[data-grouped] .omcBaG_messageIdentity{visibility:hidden}.omcBaG_messageBody{min-width:0}.omcBaG_nameRow{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.omcBaG_nameRow strong{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}.omcBaG_messageTime{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:20px}.omcBaG_messageText{white-space:pre-wrap;word-break:break-word;margin:6px 0;font-size:14px;line-height:22px}.omcBaG_messageBody .omcBaG_messageMarkdown{font-size:14px;line-height:22px}.omcBaG_messageBody>.omcBaG_messageMarkdown>div:first-child{color:var(--dsw-alias-label-primary);font:inherit}.omcBaG_messageBody .omcBaG_messageMarkdown p{margin:6px 0}.omcBaG_messageBody .omcBaG_messageMarkdown :where(ul,ol){margin:6px 0;padding-left:22px}.omcBaG_messageBody .omcBaG_messageMarkdown li+li{margin-top:2px}.omcBaG_messageBody .omcBaG_messageMarkdown strong{font-weight:600}.omcBaG_messageBody .omcBaG_messageMarkdown :where(h1,h2,h3,h4,h5,h6){margin:12px 0 4px}.omcBaG_messageBody .omcBaG_messageMarkdown :where(h1){font-size:17px;line-height:26px}.omcBaG_messageBody .omcBaG_messageMarkdown :where(h2){font-size:16px;line-height:24px}.omcBaG_messageBody .omcBaG_messageMarkdown :where(h3,h4,h5,h6){font-size:15px;line-height:22px}.omcBaG_messageBody .omcBaG_messageMarkdown pre{margin:8px 0;padding:10px 12px;font-size:13px}.omcBaG_messageBody .omcBaG_messageMarkdown blockquote{margin:6px 0}.omcBaG_messageBody .omcBaG_messageMarkdown :where(th,td){padding-block:5px}.omcBaG_emptyState,.omcBaG_loadingState{color:var(--dsw-alias-label-tertiary);margin:0;padding:14px 0;font-size:13px;line-height:20px}.omcBaG_emptyState{gap:3px;display:grid}.omcBaG_emptyState strong{color:var(--dsw-alias-label-secondary);font-weight:500}.omcBaG_emptyState span{font-size:12px}.omcBaG_loadingState{align-items:center;gap:8px;display:flex}.omcBaG_loadingMark{background:var(--dsw-alias-bg-skeleton);border-radius:50%;width:8px;height:8px;animation:1.2s ease-in-out infinite omcBaG_pulse}.omcBaG_error,.omcBaG_errorState{color:var(--dsw-alias-state-error-primary);max-width:880px;margin:0 auto;padding-top:6px;font-size:12px;line-height:18px}.omcBaG_errorState{justify-content:space-between;align-items:center;gap:8px;display:flex}.omcBaG_welcomeSurface{justify-content:center;align-items:center;min-width:0;height:100%;padding:32px;display:flex}.omcBaG_welcome{text-align:center;max-width:420px}.omcBaG_welcomeEyebrow{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;font-size:12px;line-height:18px}.omcBaG_welcome h1{color:var(--dsw-alias-label-primary);margin:8px 0;font-size:24px;font-weight:600;line-height:32px}.omcBaG_welcome p{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px;line-height:20px}@keyframes omcBaG_pulse{0%,to{opacity:.35}50%{opacity:1}}@media (width<=600px){.omcBaG_surfaceHeader{padding:12px 12px 10px}.omcBaG_headerRow{flex-direction:column;align-items:stretch;gap:8px}.omcBaG_headerActions{flex-wrap:wrap}.omcBaG_backRow{margin-bottom:6px}.omcBaG_timeline{scrollbar-gutter:auto;padding:8px 12px 16px}.omcBaG_messageRow{padding:8px 0}}@media (prefers-reduced-motion:reduce){.omcBaG_loadingMark{animation:none}}.omcBaG_messageRun{margin:2px 0;padding:3px 0}.omcBaG_messageRow[data-grouped]:has(.omcBaG_messageBody>button){border-top:1px solid var(--dsw-alias-border-l2);margin-top:3px;padding-top:7px}.omcBaG_runDivider{border-top:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);margin:2px 0 0;padding:5px 0 0 38px;font-size:11px;line-height:16px}.omcBaG_runDivider+.omcBaG_messageRow[data-grouped]:has(.omcBaG_messageBody>button){border-top:0;margin-top:0}.omcBaG_mention{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 12%, transparent);color:var(--dsw-alias-state-business-primary);border-radius:5px;padding:0 4px;font-weight:500;box-shadow:0 1px 2px #00000014}.omcBaG_mentionsRow{gap:4px;width:fit-content;margin-top:3px;font-size:.85em;display:flex}.omcBaG_attachmentStrip{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}.omcBaG_attachmentThumb{cursor:zoom-in;border:0;border-radius:8px;padding:0}.omcBaG_attachmentThumb img{object-fit:cover;border-radius:8px;width:128px;height:96px;display:block}.omcBaG_attachmentThumb:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,currentColor);outline-offset:1px}.omcBaG_confirmBody{margin:0 0 8px}.omcBaG_confirmList{gap:6px;margin:0;padding-left:18px;display:grid}.omcBaG_refLink{color:var(--dsw-alias-state-business-primary);cursor:pointer;font:inherit;text-align:left;text-underline-offset:3px;background:0 0;border:none;border-radius:4px;padding:0;text-decoration:underline}.omcBaG_refLink:hover{text-decoration-thickness:2px}.omcBaG_refLink:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.omcBaG_attachmentModal{width:min(1100px,92vw)}.omcBaG_attachmentZoom{object-fit:contain;border-radius:12px;max-width:100%;max-height:78vh;margin:0 auto;display:block}.omcBaG_attachmentChip{background:var(--dsw-alias-interactive-bg-hover);border-radius:6px;align-items:baseline;gap:6px;max-width:100%;padding:3px 8px;display:inline-flex}.omcBaG_attachmentChipName{text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:17px;overflow:hidden}.omcBaG_attachmentChipSize{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:17px}";
7158
+ const css$4 = ".omcBaG_surface{grid-template-rows:auto minmax(0,1fr) auto;min-width:0;height:100%;min-height:0;display:grid;overflow:hidden}.omcBaG_surfaceHeader{border-bottom:1px solid var(--dsw-alias-border-l2);min-width:0;padding:14px clamp(18px,3vw,36px) 12px}.omcBaG_headerRow{justify-content:space-between;align-items:flex-start;gap:16px;min-width:0;max-width:880px;margin:0 auto;display:flex}.omcBaG_headerCopy{min-width:0}.omcBaG_headerCopy h1{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;font-size:20px;font-weight:600;line-height:28px}.omcBaG_headerCopy p{color:var(--dsw-alias-label-secondary);margin:3px 0 0;font-size:13px;line-height:20px}.omcBaG_headerActions{flex:none;align-items:center;gap:6px;display:flex}.omcBaG_backRow{max-width:880px;margin:0 auto 8px}.omcBaG_timeline{overscroll-behavior:contain;scrollbar-gutter:stable;min-height:0;padding:12px clamp(18px,3vw,36px) 24px;overflow:hidden auto}.omcBaG_timelineContent{flex-direction:column;min-width:0;max-width:880px;min-height:100%;margin:0 auto;display:flex}.omcBaG_emptySurface{margin:auto;padding:32px 0}.omcBaG_emptySurface .omcBaG_emptyState{text-align:center;justify-items:center}.omcBaG_timelineAction{justify-content:center;padding:2px 0 8px;display:flex}.omcBaG_messageRow{gap:10px;padding:10px 0;display:flex}.omcBaG_messageRow[data-grouped]{padding-top:2px}.omcBaG_messageRow[data-grouped] .omcBaG_messageBody>:first-child,.omcBaG_messageRow[data-grouped] .omcBaG_messageBody>:first-child>:first-child{margin-top:0}.omcBaG_messageIdentity{background:hsl(var(--team-avatar-hue,212) 42% 46%);color:#fff;border-radius:50%;flex:0 0 28px;justify-content:center;align-items:center;height:28px;font-size:12px;font-weight:600;display:flex}.omcBaG_messageRow[data-human] .omcBaG_messageIdentity{background:var(--dsw-alias-state-business-primary)}.omcBaG_messageRow[data-grouped] .omcBaG_messageIdentity{visibility:hidden}.omcBaG_messageBody{min-width:0}.omcBaG_nameRow{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.omcBaG_nameRow strong{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}.omcBaG_messageTime{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:20px}.omcBaG_messageText{white-space:pre-wrap;word-break:break-word;margin:6px 0;font-size:14px;line-height:22px}.omcBaG_messageClamp{max-height:176px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 72%,#0000 100%);mask-image:linear-gradient(#000 72%,#0000 100%)}.omcBaG_messageExpand{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;width:fit-content;margin-top:4px;padding:0;font-size:12px;line-height:20px;display:block}.omcBaG_messageExpand:hover,.omcBaG_messageExpand:focus-visible{color:var(--dsw-alias-label-primary);text-underline-offset:2px;outline:none;text-decoration:underline}.omcBaG_messageBody .omcBaG_messageMarkdown{font-size:14px;line-height:22px}.omcBaG_messageBody .omcBaG_messageMarkdown>div:first-child{color:var(--dsw-alias-label-primary);font:inherit}.omcBaG_messageBody .omcBaG_messageMarkdown p{margin:6px 0}.omcBaG_messageBody .omcBaG_messageMarkdown :where(ul,ol){margin:6px 0;padding-left:22px}.omcBaG_messageBody .omcBaG_messageMarkdown li+li{margin-top:2px}.omcBaG_messageBody .omcBaG_messageMarkdown strong{font-weight:600}.omcBaG_messageBody .omcBaG_messageMarkdown :where(h1,h2,h3,h4,h5,h6){margin:12px 0 4px}.omcBaG_messageBody .omcBaG_messageMarkdown :where(h1){font-size:17px;line-height:26px}.omcBaG_messageBody .omcBaG_messageMarkdown :where(h2){font-size:16px;line-height:24px}.omcBaG_messageBody .omcBaG_messageMarkdown :where(h3,h4,h5,h6){font-size:15px;line-height:22px}.omcBaG_messageBody .omcBaG_messageMarkdown pre{margin:8px 0;padding:10px 12px;font-size:13px}.omcBaG_messageBody .omcBaG_messageMarkdown blockquote{margin:6px 0}.omcBaG_messageBody .omcBaG_messageMarkdown :where(th,td){padding-block:5px}.omcBaG_emptyState,.omcBaG_loadingState{color:var(--dsw-alias-label-tertiary);margin:0;padding:14px 0;font-size:13px;line-height:20px}.omcBaG_emptyState{gap:3px;display:grid}.omcBaG_emptyState strong{color:var(--dsw-alias-label-secondary);font-weight:500}.omcBaG_emptyState span{font-size:12px}.omcBaG_loadingState{align-items:center;gap:8px;display:flex}.omcBaG_loadingMark{background:var(--dsw-alias-bg-skeleton);border-radius:50%;width:8px;height:8px;animation:1.2s ease-in-out infinite omcBaG_pulse}.omcBaG_error,.omcBaG_errorState{color:var(--dsw-alias-state-error-primary);max-width:880px;margin:0 auto;padding-top:6px;font-size:12px;line-height:18px}.omcBaG_errorState{justify-content:space-between;align-items:center;gap:8px;display:flex}.omcBaG_welcomeSurface{justify-content:center;align-items:center;min-width:0;height:100%;padding:32px;display:flex}.omcBaG_welcome{text-align:center;max-width:420px}.omcBaG_welcomeEyebrow{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;font-size:12px;line-height:18px}.omcBaG_welcome h1{color:var(--dsw-alias-label-primary);margin:8px 0;font-size:24px;font-weight:600;line-height:32px}.omcBaG_welcome p{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px;line-height:20px}@keyframes omcBaG_pulse{0%,to{opacity:.35}50%{opacity:1}}@media (width<=600px){.omcBaG_surfaceHeader{padding:12px 12px 10px}.omcBaG_headerRow{flex-direction:column;align-items:stretch;gap:8px}.omcBaG_headerActions{flex-wrap:wrap}.omcBaG_backRow{margin-bottom:6px}.omcBaG_timeline{scrollbar-gutter:auto;padding:8px 12px 16px}.omcBaG_messageRow{padding:8px 0}}@media (prefers-reduced-motion:reduce){.omcBaG_loadingMark{animation:none}}.omcBaG_messageRun{margin:2px 0;padding:3px 0}.omcBaG_messageRow[data-grouped]:has(.omcBaG_messageBody>button:not([data-message-expand])){margin-top:3px;padding-top:7px;position:relative}.omcBaG_messageRow[data-grouped]:has(.omcBaG_messageBody>button:not([data-message-expand])):before{background:var(--dsw-alias-border-l2);content:\"\";height:1px;position:absolute;inset:0 0 auto 38px}.omcBaG_runDivider{border-top:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);margin:2px 0 0 38px;padding:5px 0 0;font-size:11px;line-height:16px}.omcBaG_runDivider+.omcBaG_messageRow[data-grouped]:has(.omcBaG_messageBody>button:not([data-message-expand])){margin-top:0}.omcBaG_runDivider+.omcBaG_messageRow[data-grouped]:has(.omcBaG_messageBody>button:not([data-message-expand])):before{content:none}.omcBaG_mention{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 12%, transparent);color:var(--dsw-alias-state-business-primary);border-radius:5px;padding:0 4px;font-weight:500;box-shadow:0 1px 2px #00000014}.omcBaG_mentionsRow{gap:4px;width:fit-content;margin-top:3px;font-size:.85em;display:flex}.omcBaG_attachmentStrip{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}.omcBaG_attachmentThumb{cursor:zoom-in;border:0;border-radius:8px;padding:0}.omcBaG_attachmentThumb img{object-fit:cover;border-radius:8px;width:128px;height:96px;display:block}.omcBaG_attachmentThumb:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,currentColor);outline-offset:1px}.omcBaG_confirmBody{margin:0 0 8px}.omcBaG_confirmList{gap:6px;margin:0;padding-left:18px;display:grid}.omcBaG_refLink{color:var(--dsw-alias-state-business-primary);cursor:pointer;font:inherit;text-align:left;text-underline-offset:3px;background:0 0;border:none;border-radius:4px;padding:0;text-decoration:underline}.omcBaG_refLink:hover{text-decoration-thickness:2px}.omcBaG_refLink:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.omcBaG_attachmentModal{width:min(1100px,92vw)}.omcBaG_attachmentZoom{object-fit:contain;border-radius:12px;max-width:100%;max-height:78vh;margin:0 auto;display:block}.omcBaG_attachmentChip{background:var(--dsw-alias-interactive-bg-hover);border-radius:6px;align-items:baseline;gap:6px;max-width:100%;padding:3px 8px;display:inline-flex}.omcBaG_attachmentChipName{text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:17px;overflow:hidden}.omcBaG_attachmentChipSize{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:17px}";
7034
7159
  const tagId$4 = "@wowyuarm/dsh-agent-team/conversation.module.css";
7035
7160
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
7036
7161
  const tag = document.createElement("style");
@@ -7062,6 +7187,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7062
7187
  "mention": "omcBaG_mention",
7063
7188
  "mentionsRow": "omcBaG_mentionsRow",
7064
7189
  "messageBody": "omcBaG_messageBody",
7190
+ "messageClamp": "omcBaG_messageClamp",
7191
+ "messageExpand": "omcBaG_messageExpand",
7065
7192
  "messageIdentity": "omcBaG_messageIdentity",
7066
7193
  "messageMarkdown": "omcBaG_messageMarkdown",
7067
7194
  "messageRow": "omcBaG_messageRow",
@@ -7084,7 +7211,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7084
7211
  //#endregion
7085
7212
  //#region src/client/TeamMessage.tsx
7086
7213
  /** One chat message row with identity chrome and sender-appropriate rendering. */
7087
- function TeamMessage({ senderName, memberId, human, body, occurredAt, mentionNames, senderTitle, grouped, attachments, loadAttachment, t, onOpenRef, onResolveTaskRefs, children }) {
7214
+ function TeamMessage({ senderName, memberId, human, body, occurredAt, mentionNames, senderTitle, grouped, showGroupedTime, attachments, loadAttachment, t, onOpenRef, onResolveTaskRefs, children }) {
7088
7215
  const avatarStyle = human ? void 0 : { "--team-avatar-hue": memberHue(memberId) };
7089
7216
  const plan = planMessageBody(body, {
7090
7217
  human,
@@ -7105,6 +7232,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7105
7232
  refVersion
7106
7233
  ]);
7107
7234
  const taskLabel = (0, react.useCallback)((taskNumber) => t?.("taskLabel", { number: taskNumber }) ?? `Task #${taskNumber}`, [t]);
7235
+ const [expanded, setExpanded] = (0, react.useState)(false);
7236
+ const clampable = shouldClampMessage(displayBody);
7237
+ const clamped = clampable && !expanded;
7108
7238
  const markdownRef = (0, react.useRef)(null);
7109
7239
  (0, react.useLayoutEffect)(() => {
7110
7240
  const root = markdownRef.current;
@@ -7144,6 +7274,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7144
7274
  root.removeEventListener("click", openTask);
7145
7275
  };
7146
7276
  }, [richAgentBody, onOpenRef]);
7277
+ const bodyNode = plan.render === "inline" && plan.inline !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7278
+ className: conversation_module_css_default.messageText,
7279
+ children: plan.inline.segments.map((segment, index) => segment.mention ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7280
+ className: conversation_module_css_default.mention,
7281
+ children: segment.text
7282
+ }, index) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Fragment, { children: renderRefs(segment.text, onOpenRef, taskLabel) }, index))
7283
+ }) : plan.render === "literal" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7284
+ className: conversation_module_css_default.messageText,
7285
+ children: onOpenRef === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MessageText, { text: displayBody }) : renderRefs(displayBody, onOpenRef, taskLabel)
7286
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7287
+ ref: markdownRef,
7288
+ className: conversation_module_css_default.messageMarkdown,
7289
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, { text: displayBody }, `${displayBody}:${onOpenRef === void 0 ? "literal" : "refs"}`)
7290
+ });
7147
7291
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
7148
7292
  className: conversation_module_css_default.messageRow,
7149
7293
  "data-human": human || void 0,
@@ -7156,9 +7300,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7156
7300
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7157
7301
  className: conversation_module_css_default.messageBody,
7158
7302
  children: [
7159
- !grouped && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7303
+ (!grouped || showGroupedTime === true) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7160
7304
  className: conversation_module_css_default.nameRow,
7161
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
7305
+ children: [!grouped && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
7162
7306
  ...senderTitle === void 0 ? {} : { title: senderTitle },
7163
7307
  children: senderName
7164
7308
  }), occurredAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -7166,19 +7310,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7166
7310
  children: formatMessageTime(occurredAt)
7167
7311
  })]
7168
7312
  }),
7169
- plan.render === "inline" && plan.inline !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7170
- className: conversation_module_css_default.messageText,
7171
- children: plan.inline.segments.map((segment, index) => segment.mention ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7172
- className: conversation_module_css_default.mention,
7173
- children: segment.text
7174
- }, index) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Fragment, { children: renderRefs(segment.text, onOpenRef, taskLabel) }, index))
7175
- }) : plan.render === "literal" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7176
- className: conversation_module_css_default.messageText,
7177
- children: onOpenRef === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MessageText, { text: displayBody }) : renderRefs(displayBody, onOpenRef, taskLabel)
7178
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7179
- ref: markdownRef,
7180
- className: conversation_module_css_default.messageMarkdown,
7181
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, { text: displayBody }, `${displayBody}:${onOpenRef === void 0 ? "literal" : "refs"}`)
7313
+ clampable ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7314
+ className: clamped ? conversation_module_css_default.messageClamp : void 0,
7315
+ children: bodyNode
7316
+ }) : bodyNode,
7317
+ clampable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
7318
+ type: "button",
7319
+ className: conversation_module_css_default.messageExpand,
7320
+ "data-message-expand": "true",
7321
+ "aria-expanded": expanded,
7322
+ onClick: () => {
7323
+ setExpanded((value) => !value);
7324
+ },
7325
+ children: expanded ? t?.("collapseMessage") ?? "Show less" : t?.("expandMessage") ?? "Show more"
7182
7326
  }),
7183
7327
  (plan.fallbackNames.length > 0 || plan.fallbackRefs.length > 0) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7184
7328
  className: conversation_module_css_default.mentionsRow,
@@ -7563,7 +7707,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7563
7707
  }
7564
7708
  //#endregion
7565
7709
  //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/channel.module.css.mjs
7566
- const css$3 = ".MYaRJa_headerMeta{color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;gap:6px;margin-top:7px;font-size:12px;line-height:18px;display:flex}.MYaRJa_headerMeta span+span:before{content:\"·\";margin-right:6px}.MYaRJa_taskFooter{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);cursor:pointer;text-align:left;background:0 0;border-radius:999px;align-items:center;gap:6px;max-width:100%;margin:6px 0 0;padding:2px 10px;transition:background-color .12s,border-color .12s,color .12s;display:inline-flex}.MYaRJa_taskFooter:hover,.MYaRJa_taskFooter:focus-visible{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary)}.MYaRJa_taskFooter:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.MYaRJa_taskNumber{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600;line-height:18px}.MYaRJa_taskStatus,.MYaRJa_taskCount{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:18px}.MYaRJa_taskDot{flex:none;align-items:center;width:8px;display:inline-flex}.MYaRJa_taskDotQuiet{border-radius:50%;flex:none;width:8px;height:8px;position:relative}.MYaRJa_taskDotQuiet[data-variant=todo]{border:1px solid var(--dsw-alias-label-tertiary)}.MYaRJa_taskDotQuiet[data-variant=closed]{color:var(--dsw-alias-label-tertiary)}.MYaRJa_taskDotQuiet[data-variant=closed]:before{content:\"\";opacity:.1;background:currentColor;border-radius:50%;position:absolute;inset:0}.MYaRJa_taskDotQuiet[data-variant=closed]:after{content:\"\";background:currentColor;border-radius:50%;position:absolute;inset:20%}.MYaRJa_taskArrow{color:var(--dsw-alias-label-tertiary);align-items:center;transition:transform .12s;display:inline-flex}.MYaRJa_taskFooter:hover .MYaRJa_taskArrow,.MYaRJa_taskFooter:focus-visible .MYaRJa_taskArrow{transform:translate(2px)}.MYaRJa_memberList{gap:3px;display:grid}.MYaRJa_memberRow{border-radius:6px;grid-template-columns:14px minmax(0,1fr) auto;align-items:center;gap:0 8px;min-height:40px;padding:4px 6px;display:grid}.MYaRJa_memberRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.MYaRJa_memberCopy{min-width:0;display:grid}.MYaRJa_memberCopy strong{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;line-height:18px;overflow:hidden}.MYaRJa_memberCopy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.MYaRJa_memberAction{min-width:60px}.MYaRJa_memberError{color:var(--dsw-alias-state-error-primary);grid-column:2/-1;margin:2px 0;font-size:11px;line-height:16px}.MYaRJa_modalBody{max-height:min(65vh,520px);overflow-y:auto}@media (width<=600px){.MYaRJa_headerMeta span+span:before{display:none}.MYaRJa_memberRow{grid-template-columns:14px minmax(0,1fr)}.MYaRJa_memberAction{grid-column:2;justify-self:start;margin-top:3px}}@media (prefers-reduced-motion:reduce){.MYaRJa_taskFooter,.MYaRJa_taskArrow{transition:none}.MYaRJa_taskFooter:hover .MYaRJa_taskArrow,.MYaRJa_taskFooter:focus-visible .MYaRJa_taskArrow{transform:none}}";
7710
+ const css$3 = ".MYaRJa_headerMeta{color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;gap:6px;margin-top:7px;font-size:12px;line-height:18px;display:flex}.MYaRJa_headerMeta span+span:before{content:\"·\";margin-right:6px}.MYaRJa_taskFooter{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);cursor:pointer;text-align:left;background:0 0;border-radius:999px;align-items:center;gap:6px;max-width:100%;margin:6px 0 0;padding:2px 10px;transition:background-color .12s,border-color .12s,color .12s;display:inline-flex}.MYaRJa_taskFooter:hover,.MYaRJa_taskFooter:focus-visible{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary)}.MYaRJa_taskFooter:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.MYaRJa_taskNumber{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600;line-height:18px}.MYaRJa_taskStatus,.MYaRJa_taskCount{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:18px}.MYaRJa_taskDot{flex:none;align-items:center;width:8px;display:inline-flex}.MYaRJa_taskDotQuiet{border-radius:50%;flex:none;width:8px;height:8px;position:relative}.MYaRJa_taskDotQuiet[data-variant=todo]{border:1px solid var(--dsw-alias-label-tertiary)}.MYaRJa_taskDotQuiet[data-variant=closed]{color:var(--dsw-alias-label-tertiary)}.MYaRJa_taskDotQuiet[data-variant=closed]:before{content:\"\";opacity:.1;background:currentColor;border-radius:50%;position:absolute;inset:0}.MYaRJa_taskDotQuiet[data-variant=closed]:after{content:\"\";background:currentColor;border-radius:50%;position:absolute;inset:20%}.MYaRJa_taskArrow{color:var(--dsw-alias-label-tertiary);align-items:center;transition:transform .12s;display:inline-flex}.MYaRJa_taskFooter:hover .MYaRJa_taskArrow,.MYaRJa_taskFooter:focus-visible .MYaRJa_taskArrow{transform:translate(2px)}.MYaRJa_memberList{gap:3px;display:grid}.MYaRJa_memberRow{border-radius:6px;grid-template-columns:14px minmax(0,1fr) auto;align-items:center;gap:0 8px;min-height:40px;padding:4px 6px;display:grid}.MYaRJa_memberRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.MYaRJa_memberCopy{min-width:0;display:grid}.MYaRJa_memberCopy strong{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;line-height:18px;overflow:hidden}.MYaRJa_memberCopy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.MYaRJa_memberAction{min-width:60px}.MYaRJa_memberError{color:var(--dsw-alias-state-error-primary);grid-column:2/-1;margin:2px 0;font-size:11px;line-height:16px}.MYaRJa_modalBody{max-height:min(65vh,520px);overflow-y:auto}@media (width<=600px){.MYaRJa_memberRow{grid-template-columns:14px minmax(0,1fr)}.MYaRJa_memberAction{grid-column:2;justify-self:start;margin-top:3px}}@media (prefers-reduced-motion:reduce){.MYaRJa_taskFooter,.MYaRJa_taskArrow{transition:none}.MYaRJa_taskFooter:hover .MYaRJa_taskArrow,.MYaRJa_taskFooter:focus-visible .MYaRJa_taskArrow{transform:none}}";
7567
7711
  const tagId$3 = "@wowyuarm/dsh-agent-team/channel.module.css";
7568
7712
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
7569
7713
  const tag = document.createElement("style");
@@ -7590,7 +7734,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7590
7734
  };
7591
7735
  //#endregion
7592
7736
  //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/thread.module.css.mjs
7593
- const css$2 = ".-Qiwua_titleLine{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.-Qiwua_titleLine h1{margin:0}.-Qiwua_workSection{border-top:1px solid var(--dsw-alias-border-l2);max-width:880px;margin:12px auto 0;padding-top:8px}.-Qiwua_riskSection{border-top:1px solid var(--dsw-alias-border-l2);max-width:880px;margin:12px auto 0;padding-top:10px}.-Qiwua_riskSection h2{color:var(--dsw-alias-state-error-primary);margin:0 0 5px;font-size:12px;font-weight:600;line-height:18px}.-Qiwua_riskRow{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin:3px 0;font-size:12px;line-height:18px;display:flex}.-Qiwua_claimList{gap:4px;padding:4px 0 2px 22px;display:grid}.-Qiwua_claimRow{border-radius:6px;grid-template-columns:14px minmax(96px,auto) minmax(0,1fr) auto auto;align-items:center;gap:4px 8px;min-height:36px;padding:4px 6px;display:grid}.-Qiwua_claimRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.-Qiwua_claimOwner{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:18px;overflow:hidden}.-Qiwua_claimDirection{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;min-width:0;font-size:12px;line-height:18px}.-Qiwua_claimState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:18px}.-Qiwua_emptyClaims{color:var(--dsw-alias-label-tertiary);margin:0;padding:5px 6px;font-size:11px;line-height:18px}.-Qiwua_activityRow{color:var(--dsw-alias-label-tertiary);text-align:center;justify-content:center;align-items:center;gap:8px;max-width:100%;margin:4px auto;padding:5px 12px;font-size:11px;line-height:18px;display:flex}.-Qiwua_activityText{overflow-wrap:anywhere;min-width:0}.-Qiwua_activityMark{background:var(--dsw-alias-border-l3);border-radius:50%;flex:0 0 5px;width:5px;height:5px}.-Qiwua_historySection{border-bottom:1px solid var(--dsw-alias-border-l2);max-width:100%;margin:0 auto 12px;padding-bottom:10px}.-Qiwua_historySection h2{color:var(--dsw-alias-label-tertiary);letter-spacing:.02em;text-transform:uppercase;margin:0 0 4px;font-size:11px;font-weight:600;line-height:16px}.-Qiwua_publicSection{min-width:0}.-Qiwua_unreadBoundary{color:var(--dsw-alias-label-tertiary);align-items:center;gap:10px;margin:10px 0 6px;font-size:11px;line-height:16px;display:flex}.-Qiwua_unreadBoundary:before,.-Qiwua_unreadBoundary:after{background:var(--dsw-alias-border-l3);content:\"\";flex:1;height:1px}.-Qiwua_unreadBoundary span{flex:none}.-Qiwua_daySeparator{color:var(--dsw-alias-label-tertiary);letter-spacing:.02em;align-items:center;gap:10px;margin:12px 0 4px;font-size:11px;line-height:16px;display:flex}.-Qiwua_daySeparator:before,.-Qiwua_daySeparator:after{background:var(--dsw-alias-border-l2);content:\"\";flex:1;height:1px}.-Qiwua_daySeparator span{flex:none}.-Qiwua_newUpdates{background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));border:1px solid var(--dsw-alias-border-l2-darkmode-thin);box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-secondary);z-index:2;border-radius:999px;justify-content:center;align-items:center;gap:8px;width:fit-content;margin:8px auto;padding:4px 6px 4px 12px;font-size:12px;line-height:18px;display:flex;position:sticky;bottom:8px}.-Qiwua_taskTitle{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;margin:2px 0 0;font-size:13px;line-height:20px;overflow:hidden}.-Qiwua_closedBar{flex-direction:column;align-items:center;display:flex}.-Qiwua_closedNotice{color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;padding:10px 16px 14px;font-size:13px;line-height:20px;display:flex}@media (width<=600px){.-Qiwua_claimRow{grid-template-columns:14px minmax(0,1fr) auto;align-items:start}.-Qiwua_claimDirection{grid-column:2/-1}.-Qiwua_activityRow{padding-inline:0}.-Qiwua_newUpdates{max-width:calc(100% - 16px)}}";
7737
+ const css$2 = ".-Qiwua_titleLine{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.-Qiwua_titleLine h1{margin:0}.-Qiwua_workSection{border-top:1px solid var(--dsw-alias-border-l2);max-width:880px;margin:12px auto 0;padding-top:8px}.-Qiwua_riskSection{border-top:1px solid var(--dsw-alias-border-l2);max-width:880px;margin:12px auto 0;padding-top:10px}.-Qiwua_riskSection h2{color:var(--dsw-alias-state-error-primary);margin:0 0 5px;font-size:12px;font-weight:600;line-height:18px}.-Qiwua_riskRow{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin:3px 0;font-size:12px;line-height:18px;display:flex}.-Qiwua_claimList{gap:4px;padding:4px 0 2px 22px;display:grid}.-Qiwua_claimRow{border-radius:6px;grid-template-columns:14px minmax(96px,auto) minmax(0,1fr) auto auto;align-items:center;gap:4px 8px;min-height:36px;padding:4px 6px;display:grid}.-Qiwua_claimRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.-Qiwua_claimOwner{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:18px;overflow:hidden}.-Qiwua_claimDirection{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;min-width:0;font-size:12px;line-height:18px}.-Qiwua_claimState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:18px}.-Qiwua_emptyClaims{color:var(--dsw-alias-label-tertiary);margin:0;padding:5px 6px;font-size:11px;line-height:18px}.-Qiwua_activityRow{color:var(--dsw-alias-label-tertiary);text-align:center;justify-content:center;align-items:center;gap:8px;max-width:100%;margin:4px auto;padding:5px 12px;font-size:11px;line-height:18px;display:flex}.-Qiwua_activityText{overflow-wrap:anywhere;min-width:0}.-Qiwua_activityMark{background:var(--dsw-alias-border-l3);border-radius:50%;flex:0 0 5px;width:5px;height:5px}.-Qiwua_activityRow:has(+.-Qiwua_activityRow),.-Qiwua_activityRow+.-Qiwua_activityRow{text-align:left;justify-content:flex-start;padding-left:38px}.-Qiwua_historySection{border-bottom:1px solid var(--dsw-alias-border-l2);max-width:100%;margin:0 auto 12px;padding-bottom:10px}.-Qiwua_historySection h2{color:var(--dsw-alias-label-tertiary);letter-spacing:.02em;text-transform:uppercase;margin:0 0 4px;font-size:11px;font-weight:600;line-height:16px}.-Qiwua_publicSection{min-width:0}.-Qiwua_unreadBoundary{color:var(--dsw-alias-label-tertiary);align-items:center;gap:10px;margin:10px 0 6px;font-size:11px;line-height:16px;display:flex}.-Qiwua_unreadBoundary:before,.-Qiwua_unreadBoundary:after{background:var(--dsw-alias-border-l3);content:\"\";flex:1;height:1px}.-Qiwua_unreadBoundary span{flex:none}.-Qiwua_daySeparator{color:var(--dsw-alias-label-tertiary);letter-spacing:.02em;align-items:center;gap:10px;margin:12px 0 4px;font-size:11px;line-height:16px;display:flex}.-Qiwua_daySeparator:before,.-Qiwua_daySeparator:after{background:var(--dsw-alias-border-l2);content:\"\";flex:1;height:1px}.-Qiwua_daySeparator span{flex:none}.-Qiwua_newUpdates{background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));border:1px solid var(--dsw-alias-border-l2-darkmode-thin);box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-secondary);z-index:2;border-radius:999px;justify-content:center;align-items:center;gap:8px;width:fit-content;margin:8px auto;padding:4px 6px 4px 12px;font-size:12px;line-height:18px;display:flex;position:sticky;bottom:8px}.-Qiwua_taskTitle{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;overflow-wrap:anywhere;-webkit-box-orient:vertical;margin:2px 0 0;font-size:13px;line-height:20px;display:-webkit-box;overflow:hidden}.-Qiwua_closedBar{flex-direction:column;align-items:center;display:flex}.-Qiwua_closedNotice{color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;padding:10px 16px 14px;font-size:13px;line-height:20px;display:flex}@media (width<=600px){.-Qiwua_claimRow{grid-template-columns:14px minmax(0,1fr) auto;align-items:start}.-Qiwua_claimState{grid-area:1/3;justify-self:end}.-Qiwua_claimDirection{grid-column:2/-1}.-Qiwua_activityRow{padding-inline:0}.-Qiwua_newUpdates{max-width:calc(100% - 16px)}}";
7594
7738
  const tagId$2 = "@wowyuarm/dsh-agent-team/thread.module.css";
7595
7739
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
7596
7740
  const tag = document.createElement("style");
@@ -7646,6 +7790,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7646
7790
  const [statusMessage, setStatusMessage] = (0, react.useState)();
7647
7791
  const [loading, setLoading] = (0, react.useState)(true);
7648
7792
  const [pending, setPending] = (0, react.useState)(false);
7793
+ const [asTask, setAsTask] = (0, react.useState)(false);
7649
7794
  const [loadingOlder, setLoadingOlder] = (0, react.useState)(false);
7650
7795
  const [managingMembers, setManagingMembers] = (0, react.useState)(false);
7651
7796
  const draftKey = `channel:${channelRef}`;
@@ -7661,9 +7806,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7661
7806
  return;
7662
7807
  }
7663
7808
  if (ref.startsWith("task:")) {
7664
- const match = view?.items.find((item) => item.task.taskRef === ref);
7809
+ const match = view?.items.find((item) => item.task?.taskRef === ref);
7665
7810
  if (match !== void 0) {
7666
- selectThread(match.task.taskRef, match.thread.threadRef, channelRef, match.taskNumber);
7811
+ selectThread(match.thread.threadRef, channelRef, match.task?.taskRef, match.taskNumber);
7667
7812
  return;
7668
7813
  }
7669
7814
  jumpToTaskThread(resolveTaskRefs, workspaceId, ref, selectThread);
@@ -7828,6 +7973,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7828
7973
  channelRef,
7829
7974
  body: draft.trim(),
7830
7975
  recipients: recipientIds,
7976
+ asTask,
7831
7977
  ...attachmentIds.length === 0 ? {} : { attachments: attachmentIds }
7832
7978
  });
7833
7979
  if (!result.ok) {
@@ -7835,6 +7981,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7835
7981
  setError(result.error.message);
7836
7982
  } else if (result.value.kind === "committed") {
7837
7983
  pendingSendId.current = void 0;
7984
+ setAsTask(false);
7838
7985
  await refresh();
7839
7986
  drafts.clear(draftKey);
7840
7987
  setPendingFiles([]);
@@ -8004,7 +8151,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8004
8151
  const senderStatus = members.find((member) => member.member.memberId === item.message.sender);
8005
8152
  const human = item.message.sender === view.humanMemberId;
8006
8153
  const sender = human ? t("human") : senderStatus?.member.handle ?? item.message.sender;
8007
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [isRunGap(index > 0 ? block.items[index - 1].message.occurredAt : void 0, item.message.occurredAt) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamRunDivider, { occurredAt: item.message.occurredAt }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamMessage, {
8154
+ const turnGap = isRunGap(index > 0 ? block.items[index - 1].message.occurredAt : void 0, item.message.occurredAt);
8155
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [turnGap && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamRunDivider, { occurredAt: item.message.occurredAt }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(TeamMessage, {
8008
8156
  senderName: sender,
8009
8157
  memberId: item.message.sender,
8010
8158
  human,
@@ -8017,13 +8165,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8017
8165
  onOpenRef: openRef,
8018
8166
  onResolveTaskRefs: lookupTaskRefs,
8019
8167
  grouped: index > 0,
8168
+ showGroupedTime: item.message.topLevel === true && !turnGap,
8020
8169
  ...senderStatus === void 0 ? {} : { senderTitle: senderStatus.member.description },
8021
- children: item.message.topLevel && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
8170
+ children: [item.message.topLevel && item.task !== void 0 && item.taskNumber !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
8022
8171
  type: "button",
8023
8172
  className: channel_module_css_default.taskFooter,
8024
8173
  "aria-label": t("openTask", { number: item.taskNumber }),
8025
8174
  onClick: () => {
8026
- selectThread(item.task.taskRef, item.thread.threadRef, channelRef, item.taskNumber);
8175
+ selectThread(item.thread.threadRef, channelRef, item.task?.taskRef, item.taskNumber);
8027
8176
  },
8028
8177
  children: [
8029
8178
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -8057,7 +8206,29 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8057
8206
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutline14, { size: 12 })
8058
8207
  })
8059
8208
  ]
8060
- })
8209
+ }), item.message.topLevel && item.task === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
8210
+ type: "button",
8211
+ className: channel_module_css_default.taskFooter,
8212
+ "aria-label": t("openThread"),
8213
+ onClick: () => {
8214
+ selectThread(item.thread.threadRef, channelRef);
8215
+ },
8216
+ children: [
8217
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
8218
+ className: channel_module_css_default.taskNumber,
8219
+ children: t("threadLabel")
8220
+ }),
8221
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
8222
+ className: channel_module_css_default.taskCount,
8223
+ children: t("taskMessageCount", { count: item.messageCount })
8224
+ }),
8225
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
8226
+ className: channel_module_css_default.taskArrow,
8227
+ "aria-hidden": "true",
8228
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutline14, { size: 12 })
8229
+ })
8230
+ ]
8231
+ })]
8061
8232
  })] }, item.message.messageRef);
8062
8233
  })
8063
8234
  }, `run-${block.items[0].message.messageRef}`))
@@ -8084,6 +8255,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8084
8255
  },
8085
8256
  pendingFiles,
8086
8257
  onFilesChange: setPendingFiles,
8258
+ asTask,
8259
+ onAsTaskChange: setAsTask,
8087
8260
  t
8088
8261
  }, draftKey) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {})
8089
8262
  ]
@@ -8114,7 +8287,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8114
8287
  return new Map(facts.map((fact) => [factKey(fact.fact), fact]));
8115
8288
  }
8116
8289
  function TeamThreadPage(props) {
8117
- const { workspaceId, channelRef, taskRef, threadRef, taskNumber, backToWorkspace, selectChannel, selectThread, resolveTaskRefs, putAttachment, loadChannels, readThread, loadThreadHistory, subscribeChanges, loadMembers, drafts, getAttachment, reply, changeTask, t } = props;
8290
+ const { workspaceId, channelRef, taskRef, threadRef, taskNumber, backToWorkspace, selectChannel, selectThread, resolveTaskRefs, putAttachment, loadChannels, readThread, loadThreadHistory, subscribeChanges, loadMembers, drafts, getAttachment, reply, changeTask, promoteThread, t } = props;
8291
+ const threadRequest = {
8292
+ threadRef,
8293
+ ...taskRef === void 0 ? {} : { taskRef }
8294
+ };
8118
8295
  const [projection, setProjection] = (0, react.useState)();
8119
8296
  const [channelView, setChannelView] = (0, react.useState)();
8120
8297
  const [members, setMembers] = (0, react.useState)([]);
@@ -8130,12 +8307,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8130
8307
  const [claimsOpen, setClaimsOpen] = (0, react.useState)(false);
8131
8308
  const [confirmingAccept, setConfirmingAccept] = (0, react.useState)(false);
8132
8309
  (0, react.useEffect)(() => {
8133
- if (confirmingAccept && projection?.task.resolution === "accepted") setConfirmingAccept(false);
8134
- }, [confirmingAccept, projection?.task.resolution]);
8310
+ if (confirmingAccept && projection?.task?.resolution === "accepted") setConfirmingAccept(false);
8311
+ }, [confirmingAccept, projection?.task?.resolution]);
8135
8312
  const [replyRequestId, setReplyRequestId] = (0, react.useState)();
8136
8313
  const [confirmation, setConfirmation] = (0, react.useState)();
8137
8314
  const [statusMessage, setStatusMessage] = (0, react.useState)();
8138
8315
  const [pending, setPending] = (0, react.useState)(false);
8316
+ const [mutating, setMutating] = (0, react.useState)();
8139
8317
  const [loading, setLoading] = (0, react.useState)(true);
8140
8318
  const [error, setError] = (0, react.useState)();
8141
8319
  const mountedRef = (0, react.useRef)(false);
@@ -8167,7 +8345,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8167
8345
  const result = await readThread({
8168
8346
  requestId: readRequestIdRef.current,
8169
8347
  workspaceId,
8170
- taskRef
8348
+ ...threadRequest
8171
8349
  });
8172
8350
  if (!mountedRef.current || sequence !== sequenceRef.current) return false;
8173
8351
  if (!result.ok) {
@@ -8206,7 +8384,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8206
8384
  try {
8207
8385
  const result = await loadThreadHistory({
8208
8386
  workspaceId,
8209
- taskRef,
8387
+ ...threadRequest,
8210
8388
  limit: 100
8211
8389
  });
8212
8390
  if (!mountedRef.current || !result.ok) return;
@@ -8223,7 +8401,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8223
8401
  });
8224
8402
  setProjection((current) => current === void 0 ? current : {
8225
8403
  ...current,
8226
- task: result.value.task,
8404
+ ...result.value.task === void 0 ? {} : { task: result.value.task },
8227
8405
  thread: result.value.thread,
8228
8406
  claims: result.value.claims
8229
8407
  });
@@ -8260,10 +8438,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8260
8438
  const [read, history] = await Promise.all([readThread({
8261
8439
  requestId: readRequestIdRef.current,
8262
8440
  workspaceId,
8263
- taskRef
8441
+ ...threadRequest
8264
8442
  }), loadThreadHistory({
8265
8443
  workspaceId,
8266
- taskRef,
8444
+ ...threadRequest,
8267
8445
  limit: 20
8268
8446
  }).catch(() => void 0)]);
8269
8447
  if (!mountedRef.current || sequence !== sequenceRef.current) return;
@@ -8326,7 +8504,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8326
8504
  try {
8327
8505
  const result = await loadThreadHistory({
8328
8506
  workspaceId,
8329
- taskRef,
8507
+ ...threadRequest,
8330
8508
  beforeSequence,
8331
8509
  limit: 20
8332
8510
  });
@@ -8348,6 +8526,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8348
8526
  const activeProjection = projection;
8349
8527
  const task = activeProjection?.task;
8350
8528
  const thread = activeProjection?.thread;
8529
+ const resolvedTaskNumber = taskNumber ?? channelView?.taskNumbers.find((entry) => entry.taskRef === task?.taskRef)?.taskNumber;
8351
8530
  const taskTitle = activeProjection === void 0 ? void 0 : formatTaskTitle(activeProjection.anchor.body);
8352
8531
  const taskClaims = activeProjection?.claims ?? [];
8353
8532
  const effectiveChannelRef = task?.channelRef ?? channelRef;
@@ -8461,9 +8640,64 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8461
8640
  await readCurrent(true);
8462
8641
  await refreshSupplemental();
8463
8642
  };
8643
+ const convertToTask = async () => {
8644
+ if (pending || thread === void 0 || task !== void 0) return;
8645
+ setPending(true);
8646
+ setMutating("promote");
8647
+ setError(void 0);
8648
+ const key = "promote";
8649
+ const requestId = mutationRequests.current.get(key) ?? mintRequestId();
8650
+ mutationRequests.current.set(key, requestId);
8651
+ try {
8652
+ const result = await promoteThread({
8653
+ requestId,
8654
+ workspaceId,
8655
+ threadRef,
8656
+ baseRevision: thread.revision
8657
+ });
8658
+ if (!result.ok) {
8659
+ setError(result.error.message);
8660
+ return;
8661
+ }
8662
+ if (result.value.kind === "committed") {
8663
+ mutationRequests.current.delete(key);
8664
+ const committed = result.value;
8665
+ setProjection((current) => current === void 0 ? current : {
8666
+ ...current,
8667
+ task: committed.task,
8668
+ thread: committed.thread
8669
+ });
8670
+ setCurrentFacts((current) => {
8671
+ const merged = mergeFacts(current, [{
8672
+ kind: "activity",
8673
+ sequence: committed.activity.sequence,
8674
+ activity: committed.activity
8675
+ }]);
8676
+ currentFactsRef.current = merged;
8677
+ return merged;
8678
+ });
8679
+ await readCurrent(true);
8680
+ await refreshSupplemental();
8681
+ } else if (result.value.kind === "unread_required") {
8682
+ setError(t("unreadRequired", { count: result.value.unreadCount }));
8683
+ mutationRequests.current.delete(key);
8684
+ await refreshAfterFence();
8685
+ } else {
8686
+ setError(t("staleRevision"));
8687
+ mutationRequests.current.delete(key);
8688
+ await refreshPassiveFacts();
8689
+ }
8690
+ } catch (cause) {
8691
+ setError(cause instanceof Error ? cause.message : String(cause));
8692
+ } finally {
8693
+ setPending(false);
8694
+ setMutating(void 0);
8695
+ }
8696
+ };
8464
8697
  const mutateTask = async (action) => {
8465
8698
  if (pending || task === void 0 || thread === void 0) return;
8466
8699
  setPending(true);
8700
+ if (action === "accept") setMutating("accept");
8467
8701
  setError(void 0);
8468
8702
  const key = `task:${action}`;
8469
8703
  const requestId = mutationRequests.current.get(key) ?? mintRequestId();
@@ -8513,10 +8747,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8513
8747
  setError(cause instanceof Error ? cause.message : String(cause));
8514
8748
  } finally {
8515
8749
  setPending(false);
8750
+ setMutating(void 0);
8516
8751
  }
8517
8752
  };
8518
8753
  const sendReply = async () => {
8519
- if (pending || task === void 0 || thread === void 0 || draft.trim() === "") return;
8754
+ if (pending || thread === void 0 || draft.trim() === "") return;
8520
8755
  const id = replyRequestId ?? mintRequestId();
8521
8756
  setReplyRequestId(id);
8522
8757
  setPending(true);
@@ -8540,7 +8775,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8540
8775
  const result = await reply({
8541
8776
  requestId: id,
8542
8777
  workspaceId,
8543
- taskRef: task.taskRef,
8778
+ threadRef,
8779
+ ...task === void 0 ? {} : { taskRef: task.taskRef },
8544
8780
  body: draft.trim(),
8545
8781
  baseRevision: thread.revision,
8546
8782
  recipients: [...recipients].sort(),
@@ -8565,7 +8801,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8565
8801
  });
8566
8802
  setProjection((current) => current === void 0 ? current : {
8567
8803
  ...current,
8568
- task: committed.task,
8804
+ ...committed.task === void 0 ? {} : { task: committed.task },
8569
8805
  thread: committed.thread
8570
8806
  });
8571
8807
  drafts.clear(draftKey);
@@ -8629,49 +8865,65 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8629
8865
  }),
8630
8866
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
8631
8867
  className: conversation_module_css_default.headerRow,
8632
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8633
- className: conversation_module_css_default.headerCopy,
8634
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8635
- className: thread_module_css_default.titleLine,
8636
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", { children: task === void 0 ? t("taskPending") : t("taskLabel", { number: taskNumber ?? "…" }) }), task !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, { children: formatTaskStatus(task.status, t) })]
8637
- }), taskTitle !== void 0 && taskTitle !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8638
- className: thread_module_css_default.taskTitle,
8639
- children: taskTitle
8640
- })]
8641
- }), task !== void 0 && thread !== void 0 && task.resolution !== "closed" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8642
- className: conversation_module_css_default.headerActions,
8643
- children: [(() => {
8644
- const activeClaims = projection?.claims.filter((claim) => claim.taskRef === task.taskRef && claim.state === "active") ?? [];
8645
- const earlyAccept = task.resolution === "open" && task.status === "in_progress" && activeClaims.length > 0;
8646
- if (!(task.status === "in_review" || earlyAccept) || task.resolution !== "open") return null;
8647
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8868
+ children: [
8869
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8870
+ className: conversation_module_css_default.headerCopy,
8871
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8872
+ className: thread_module_css_default.titleLine,
8873
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", { children: task === void 0 ? t("threadLabel") : t("taskLabel", { number: resolvedTaskNumber ?? "…" }) }), task !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, { children: formatTaskStatus(task.status, t) })]
8874
+ }), taskTitle !== void 0 && taskTitle !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8875
+ className: thread_module_css_default.taskTitle,
8876
+ title: taskTitle,
8877
+ children: taskTitle
8878
+ })]
8879
+ }),
8880
+ task === void 0 && thread !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8881
+ className: conversation_module_css_default.headerActions,
8882
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8648
8883
  size: "sm",
8649
8884
  variant: "primary",
8650
8885
  disabled: pending,
8651
8886
  onClick: () => {
8652
- if (earlyAccept) setConfirmingAccept(true);
8653
- else mutateTask("accept");
8887
+ convertToTask();
8654
8888
  },
8655
- children: t("acceptTask")
8656
- });
8657
- })(), task.resolution === "open" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8658
- size: "sm",
8659
- variant: "outline",
8660
- disabled: pending,
8661
- onClick: () => {
8662
- mutateTask("close");
8663
- },
8664
- children: t("closeTask")
8665
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8666
- size: "sm",
8667
- variant: "primary",
8668
- disabled: pending,
8669
- onClick: () => {
8670
- mutateTask("reopen");
8671
- },
8672
- children: t("reopenTask")
8673
- })]
8674
- })]
8889
+ children: mutating === "promote" ? t("promotingTask") : t("promoteToTask")
8890
+ })
8891
+ }),
8892
+ task !== void 0 && thread !== void 0 && task.resolution !== "closed" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8893
+ className: conversation_module_css_default.headerActions,
8894
+ children: [(() => {
8895
+ const activeClaims = projection?.claims.filter((claim) => claim.taskRef === task.taskRef && claim.state === "active") ?? [];
8896
+ const earlyAccept = task.resolution === "open" && task.status === "in_progress" && activeClaims.length > 0;
8897
+ if (!(task.status === "in_review" || earlyAccept) || task.resolution !== "open") return null;
8898
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8899
+ size: "sm",
8900
+ variant: "primary",
8901
+ disabled: pending,
8902
+ onClick: () => {
8903
+ if (earlyAccept) setConfirmingAccept(true);
8904
+ else mutateTask("accept");
8905
+ },
8906
+ children: t("acceptTask")
8907
+ });
8908
+ })(), task.resolution === "open" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8909
+ size: "sm",
8910
+ variant: "outline",
8911
+ disabled: pending,
8912
+ onClick: () => {
8913
+ mutateTask("close");
8914
+ },
8915
+ children: t("closeTask")
8916
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8917
+ size: "sm",
8918
+ variant: "primary",
8919
+ disabled: pending,
8920
+ onClick: () => {
8921
+ mutateTask("reopen");
8922
+ },
8923
+ children: t("reopenTask")
8924
+ })]
8925
+ })
8926
+ ]
8675
8927
  }),
8676
8928
  risks.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
8677
8929
  className: thread_module_css_default.riskSection,
@@ -8713,7 +8965,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8713
8965
  onClick: () => {
8714
8966
  mutateTask("accept");
8715
8967
  },
8716
- children: pending ? t("acceptingTask") : t("acceptTask")
8968
+ children: mutating === "accept" ? t("acceptingTask") : t("acceptTask")
8717
8969
  })] }),
8718
8970
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8719
8971
  className: conversation_module_css_default.confirmBody,
@@ -8853,7 +9105,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8853
9105
  ]
8854
9106
  })
8855
9107
  }),
8856
- projection !== void 0 && task !== void 0 && thread !== void 0 ? task.resolution === "closed" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9108
+ projection !== void 0 && thread !== void 0 ? task?.resolution === "closed" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8857
9109
  className: thread_module_css_default.closedBar,
8858
9110
  "data-team-closed": true,
8859
9111
  children: [error !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
@@ -8894,6 +9146,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8894
9146
  onSubmit: () => {
8895
9147
  sendReply();
8896
9148
  },
9149
+ placeholder: t("replyPlaceholder"),
8897
9150
  pendingFiles,
8898
9151
  onFilesChange: setPendingFiles,
8899
9152
  t
@@ -8903,19 +9156,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8903
9156
  }
8904
9157
  //#endregion
8905
9158
  //#region src/client/TeamConversation.tsx
8906
- function TeamConversation({ t, useWorkspaces, navigation, drafts, putAttachment, getAttachment, loadChannels, readThread, loadThreadHistory, subscribeChanges, loadMembers, sendMessage, joinChannel, removeChannelMember, reply, changeTask, selectThread, selectChannel, backToWorkspace, backToChannels, resolveTaskRefs }) {
9159
+ function TeamConversation({ t, useWorkspaces, navigation, drafts, putAttachment, getAttachment, loadChannels, readThread, loadThreadHistory, subscribeChanges, loadMembers, sendMessage, joinChannel, removeChannelMember, reply, changeTask, promoteThread, selectThread, selectChannel, backToWorkspace, backToChannels, resolveTaskRefs }) {
8907
9160
  const navigationState = (0, react.useSyncExternalStore)(navigation.subscribe, navigation.getSnapshot, navigation.getSnapshot);
8908
9161
  const current = useWorkspaces((state) => state.items).find((workspace) => workspace.workspaceId === navigationState.workspaceId);
8909
- if (current !== void 0 && navigationState.taskRef !== void 0 && navigationState.threadRef !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamThreadPage, {
9162
+ if (current !== void 0 && navigationState.threadRef !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamThreadPage, {
8910
9163
  workspaceId: current.workspaceId,
8911
9164
  putAttachment,
8912
- taskRef: navigationState.taskRef,
8913
9165
  threadRef: navigationState.threadRef,
8914
9166
  backToWorkspace,
8915
9167
  selectChannel,
8916
9168
  selectThread,
8917
9169
  resolveTaskRefs,
8918
9170
  ...navigationState.channelRef === void 0 ? {} : { channelRef: navigationState.channelRef },
9171
+ ...navigationState.taskRef === void 0 ? {} : { taskRef: navigationState.taskRef },
8919
9172
  ...navigationState.taskNumber === void 0 ? {} : { taskNumber: navigationState.taskNumber },
8920
9173
  drafts,
8921
9174
  getAttachment,
@@ -8926,6 +9179,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8926
9179
  loadMembers,
8927
9180
  reply,
8928
9181
  changeTask,
9182
+ promoteThread,
8929
9183
  t
8930
9184
  }, navigationState.threadRef);
8931
9185
  if (current !== void 0 && navigationState.channelRef !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamChannelPage, {
@@ -8973,7 +9227,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8973
9227
  }
8974
9228
  //#endregion
8975
9229
  //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/sidebar.module.css.mjs
8976
- const css$1 = "html[data-agent-team-mode=team] button[class*=newSession]{display:none}.d0xfxa_workspaceBrowser{flex-direction:column;height:100%;min-height:0;padding:0 8px 8px;display:flex}.d0xfxa_workspaceHeader{color:var(--dsw-alias-label-tertiary);justify-content:space-between;align-items:center;min-height:28px;padding:0 4px 0 8px;font-size:13px;font-weight:600;line-height:20px;display:flex}.d0xfxa_railButton{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.d0xfxa_railButton:hover,.d0xfxa_railButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);outline:none}.d0xfxa_workspaceList{flex-direction:column;gap:2px;padding-bottom:2px;display:flex}.d0xfxa_workspaceRow{color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;gap:6px;width:100%;height:34px;padding:0 8px;display:flex}.d0xfxa_workspaceRow:hover,.d0xfxa_workspaceRow:focus-visible,.d0xfxa_workspaceRow[aria-current=page]{background:var(--dsw-alias-interactive-bg-hover);outline:none}.d0xfxa_workspaceRow:focus-visible{box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l3)}.d0xfxa_workspaceIcon{color:var(--dsw-alias-label-tertiary);flex:0 0 16px;justify-content:center;align-items:center;height:20px;display:inline-flex}.d0xfxa_workspaceRow[data-selected] .d0xfxa_workspaceIcon{color:var(--dsw-alias-state-business-primary)}.d0xfxa_workspaceCopy{min-width:0;display:flex}.d0xfxa_workspaceCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:400;line-height:20px;overflow:hidden}.d0xfxa_emptyState{color:var(--dsw-alias-label-tertiary);margin:8px;font-size:12px;line-height:18px}.d0xfxa_railWorkspace{flex-direction:column;align-items:center;gap:8px;padding-top:8px;display:flex}.d0xfxa_railButton{border-radius:50%;width:36px;height:36px}.d0xfxa_railButton[data-active]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.d0xfxa_workspaceSection{flex-direction:column;flex:1;gap:4px;min-height:0;margin-top:2px;display:flex;overflow-y:auto}.d0xfxa_section{flex-direction:column;display:flex}.d0xfxa_sectionHeader{align-items:center;min-height:26px;padding-right:2px;display:flex}.d0xfxa_sectionToggle{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;align-items:center;gap:4px;min-width:0;min-height:24px;padding:0 6px;font-size:12px;line-height:18px;display:inline-flex}.d0xfxa_sectionToggle:focus-visible{outline:none}.d0xfxa_sectionToggle:hover .d0xfxa_sectionChevron,.d0xfxa_sectionToggle:focus-visible .d0xfxa_sectionChevron{color:var(--dsw-alias-label-primary)}.d0xfxa_sectionChevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .12s,color .12s}.d0xfxa_sectionToggle[aria-expanded=false] .d0xfxa_sectionChevron{transform:rotate(-90deg)}.d0xfxa_sectionTitle{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.d0xfxa_sectionActions{align-items:center;margin-left:auto;display:inline-flex}.d0xfxa_panel{flex-direction:column;display:flex}.d0xfxa_iconButton{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;padding:0;display:inline-flex}.d0xfxa_iconButton:hover,.d0xfxa_iconButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);outline:none}.d0xfxa_textButton{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:2px 5px;font-size:11px;line-height:18px}.d0xfxa_textButton:hover,.d0xfxa_textButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);outline:none}.d0xfxa_textButton:disabled{cursor:not-allowed;opacity:.4}.d0xfxa_channelList,.d0xfxa_agentList{flex-direction:column;gap:1px;padding:0 4px 4px;display:flex}.d0xfxa_sidebarRowDragging{opacity:.5}.d0xfxa_sidebarRowDropBefore,.d0xfxa_sidebarRowDropAfter{position:relative}.d0xfxa_sidebarRowDropBefore:before,.d0xfxa_sidebarRowDropAfter:after{content:\"\";z-index:1;background:linear-gradient(55deg, transparent calc(50% - 1px), var(--dsw-alias-state-business-primary) calc(50% - 1px) calc(50% + 1px), transparent calc(50% + 1px)) 0 0 / 5px 7px no-repeat, linear-gradient(125deg, transparent calc(50% - 1px), var(--dsw-alias-state-business-primary) calc(50% - 1px) calc(50% + 1px), transparent calc(50% + 1px)) 0 5px / 5px 7px no-repeat, linear-gradient(var(--dsw-alias-state-business-primary) 0 0) 4px 5px / calc(100% - 4px) 2px no-repeat;pointer-events:none;height:12px;position:absolute;left:0;right:4px}.d0xfxa_sidebarRowDropBefore:before{top:-7px}.d0xfxa_sidebarRowDropAfter:after{bottom:-7px}.d0xfxa_channelRow{color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;min-height:30px;display:flex;position:relative}.d0xfxa_channelSelect{box-sizing:border-box;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;flex:1;align-items:center;min-width:0;min-height:30px;padding:3px 4px 3px 8px;display:flex}.d0xfxa_channelSelect:focus-visible{outline:none}.d0xfxa_channelName{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:400;line-height:18px;overflow:hidden}.d0xfxa_agentRow{color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;min-height:38px;display:flex;position:relative}.d0xfxa_agentSelect{box-sizing:border-box;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;flex:1;grid-template-columns:24px minmax(0,1fr);align-items:center;gap:0 8px;min-width:0;min-height:38px;padding:3px 4px 3px 8px;display:grid}.d0xfxa_agentSelect:focus-visible{outline:none}.d0xfxa_agentSelect[aria-current=page]{background:var(--dsw-alias-interactive-bg-hover);border-radius:8px}.d0xfxa_agentRow:hover .d0xfxa_agentSelect[aria-current=page],.d0xfxa_agentRow:focus-within .d0xfxa_agentSelect[aria-current=page],.d0xfxa_agentRow[data-menu-open] .d0xfxa_agentSelect[aria-current=page]{background:0 0}.d0xfxa_agentAvatar{background:hsl(var(--team-avatar-hue,212) 42% 46%);color:#fff;cursor:default;border-radius:50%;flex:0 0 24px;justify-content:center;align-items:center;width:24px;height:24px;font-size:11px;font-weight:600;display:inline-flex;position:relative}.d0xfxa_agentAvatarBadge{background:var(--dsw-specific-sidebar-fill);box-shadow:0 0 0 1px var(--dsw-specific-sidebar-fill);border-radius:50%;justify-content:center;align-items:center;width:12px;height:12px;padding:1px;line-height:0;display:inline-flex;position:absolute;bottom:-3px;right:-3px}.d0xfxa_agentCopy{flex-direction:column;min-width:0;display:flex}.d0xfxa_agentCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:400;line-height:17px;overflow:hidden}.d0xfxa_agentCopy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:13px;overflow:hidden}.d0xfxa_unavailableDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:7px;height:7px;display:inline-block}.d0xfxa_rowMenu{flex:none;align-items:center;padding-right:4px;display:none}.d0xfxa_channelRow:hover .d0xfxa_rowMenu,.d0xfxa_channelRow:focus-within .d0xfxa_rowMenu,.d0xfxa_channelRow[data-menu-open] .d0xfxa_rowMenu,.d0xfxa_agentRow:hover .d0xfxa_rowMenu,.d0xfxa_agentRow:focus-within .d0xfxa_rowMenu,.d0xfxa_agentRow[data-menu-open] .d0xfxa_rowMenu{display:inline-flex}.d0xfxa_channelRow[data-menu-open],.d0xfxa_agentRow[data-menu-open],.d0xfxa_channelRow:hover,.d0xfxa_agentRow:hover,.d0xfxa_channelRow:focus-within,.d0xfxa_agentRow:focus-within,.d0xfxa_channelRow[aria-current=page]{background:var(--dsw-alias-interactive-bg-hover)}.d0xfxa_rowMenuButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;justify-content:center;align-items:center;width:20px;height:20px;padding:0;display:inline-flex}.d0xfxa_rowMenuButton:hover,.d0xfxa_rowMenuButton:focus-visible{color:var(--dsw-alias-label-primary);outline:none}.d0xfxa_retryError{color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:center;gap:8px;padding:8px;font-size:11px;display:flex}.d0xfxa_editDescription{color:var(--dsw-alias-label-secondary);margin:0 0 10px;font-size:12px;line-height:18px}.d0xfxa_editMemberList{gap:3px;display:grid}.d0xfxa_editMemberRow{border-radius:6px;grid-template-columns:14px minmax(0,1fr) auto;align-items:center;gap:0 8px;min-height:40px;padding:3px 6px;display:grid}.d0xfxa_editMemberRowChannels{grid-template-columns:minmax(0,1fr) auto}.d0xfxa_editMemberRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.d0xfxa_editMemberCopy{min-width:0;display:grid}.d0xfxa_editMemberCopy strong{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;line-height:18px;overflow:hidden}.d0xfxa_editMemberCopy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.d0xfxa_editChannelName{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:400;line-height:18px;overflow:hidden}.d0xfxa_editMemberRow button{min-width:60px}.d0xfxa_editHint{color:var(--dsw-alias-label-tertiary);margin:0;font-size:11px;line-height:16px}.d0xfxa_menuHint{color:var(--dsw-alias-label-tertiary);margin-left:4px;font-size:10px;line-height:14px}.d0xfxa_rowError{color:var(--dsw-alias-state-error-primary);grid-column:1/-1;margin:2px 0;font-size:11px;line-height:16px}";
9230
+ const css$1 = "html[data-agent-team-mode=team] button[class*=newSession]{display:none}.d0xfxa_workspaceBrowser{flex-direction:column;height:100%;min-height:0;padding:0 8px 8px;display:flex}.d0xfxa_railButton{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.d0xfxa_railButton:hover,.d0xfxa_railButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);outline:none}.d0xfxa_workspaceList{flex-direction:column;gap:2px;padding-bottom:2px;display:flex}.d0xfxa_workspaceRow{color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;gap:6px;width:100%;height:34px;padding:0 8px;display:flex}.d0xfxa_workspaceRow:hover,.d0xfxa_workspaceRow:focus-visible,.d0xfxa_workspaceRow[aria-current=page]{background:var(--dsw-alias-interactive-bg-hover);outline:none}.d0xfxa_workspaceRow:focus-visible{box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l3)}.d0xfxa_workspaceIcon{color:var(--dsw-alias-label-tertiary);flex:0 0 16px;justify-content:center;align-items:center;height:20px;display:inline-flex}.d0xfxa_workspaceRow[data-selected] .d0xfxa_workspaceIcon{color:var(--dsw-alias-state-business-primary)}.d0xfxa_workspaceCopy{min-width:0;display:flex}.d0xfxa_workspaceCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:400;line-height:20px;overflow:hidden}.d0xfxa_emptyState{color:var(--dsw-alias-label-tertiary);margin:8px;font-size:12px;line-height:18px}.d0xfxa_railWorkspace{flex-direction:column;align-items:center;gap:8px;padding-top:8px;display:flex}.d0xfxa_railButton{border-radius:50%;width:36px;height:36px}.d0xfxa_railButton[data-active]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.d0xfxa_workspaceSection{flex-direction:column;flex:1;gap:4px;min-height:0;margin-top:2px;display:flex;overflow-y:auto}.d0xfxa_section{flex-direction:column;display:flex}.d0xfxa_sectionHeader{align-items:center;min-height:26px;padding-right:2px;display:flex}.d0xfxa_sectionToggle{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;align-items:center;gap:4px;min-width:0;min-height:24px;padding:0 6px;font-size:12px;line-height:18px;display:inline-flex}.d0xfxa_sectionToggle:focus-visible{outline:none}.d0xfxa_sectionToggle:hover .d0xfxa_sectionChevron,.d0xfxa_sectionToggle:focus-visible .d0xfxa_sectionChevron{color:var(--dsw-alias-label-primary)}.d0xfxa_sectionChevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .12s,color .12s}.d0xfxa_sectionToggle[aria-expanded=false] .d0xfxa_sectionChevron{transform:rotate(-90deg)}.d0xfxa_sectionTitle{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.d0xfxa_sectionActions{align-items:center;margin-left:auto;display:inline-flex}.d0xfxa_panel{flex-direction:column;display:flex}.d0xfxa_iconButton{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;padding:0;display:inline-flex}.d0xfxa_iconButton:hover,.d0xfxa_iconButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);outline:none}.d0xfxa_textButton{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:2px 5px;font-size:11px;line-height:18px}.d0xfxa_textButton:hover,.d0xfxa_textButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);outline:none}.d0xfxa_textButton:disabled{cursor:not-allowed;opacity:.4}.d0xfxa_channelList,.d0xfxa_agentList{flex-direction:column;gap:1px;padding:0 4px 4px;display:flex}.d0xfxa_sidebarRowDragging{opacity:.5}.d0xfxa_sidebarRowDropBefore,.d0xfxa_sidebarRowDropAfter{position:relative}.d0xfxa_sidebarRowDropBefore:before,.d0xfxa_sidebarRowDropAfter:after{content:\"\";z-index:1;background:linear-gradient(55deg, transparent calc(50% - 1px), var(--dsw-alias-state-business-primary) calc(50% - 1px) calc(50% + 1px), transparent calc(50% + 1px)) 0 0 / 5px 7px no-repeat, linear-gradient(125deg, transparent calc(50% - 1px), var(--dsw-alias-state-business-primary) calc(50% - 1px) calc(50% + 1px), transparent calc(50% + 1px)) 0 5px / 5px 7px no-repeat, linear-gradient(var(--dsw-alias-state-business-primary) 0 0) 4px 5px / calc(100% - 4px) 2px no-repeat;pointer-events:none;height:12px;position:absolute;left:0;right:4px}.d0xfxa_sidebarRowDropBefore:before{top:-7px}.d0xfxa_sidebarRowDropAfter:after{bottom:-7px}.d0xfxa_channelRow{color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;min-height:30px;display:flex;position:relative}.d0xfxa_channelSelect{box-sizing:border-box;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;flex:1;align-items:center;min-width:0;min-height:30px;padding:3px 4px 3px 8px;display:flex}.d0xfxa_channelSelect:focus-visible{outline:none}.d0xfxa_channelName{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:400;line-height:18px;overflow:hidden}.d0xfxa_agentRow{color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;min-height:38px;display:flex;position:relative}.d0xfxa_agentSelect{box-sizing:border-box;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;flex:1;grid-template-columns:24px minmax(0,1fr);align-items:center;gap:0 8px;min-width:0;min-height:38px;padding:3px 4px 3px 8px;display:grid}.d0xfxa_agentSelect:focus-visible{outline:none}.d0xfxa_agentSelect[aria-current=page]{background:var(--dsw-alias-interactive-bg-hover);border-radius:8px}.d0xfxa_agentRow:hover .d0xfxa_agentSelect[aria-current=page],.d0xfxa_agentRow:focus-within .d0xfxa_agentSelect[aria-current=page],.d0xfxa_agentRow[data-menu-open] .d0xfxa_agentSelect[aria-current=page]{background:0 0}.d0xfxa_agentAvatar{background:hsl(var(--team-avatar-hue,212) 42% 46%);color:#fff;cursor:default;border-radius:50%;flex:0 0 24px;justify-content:center;align-items:center;width:24px;height:24px;font-size:11px;font-weight:600;display:inline-flex;position:relative}.d0xfxa_agentAvatarBadge{background:var(--dsw-specific-sidebar-fill);box-shadow:0 0 0 1px var(--dsw-specific-sidebar-fill);border-radius:50%;justify-content:center;align-items:center;width:12px;height:12px;padding:1px;line-height:0;display:inline-flex;position:absolute;bottom:-3px;right:-3px}.d0xfxa_agentCopy{flex-direction:column;min-width:0;display:flex}.d0xfxa_agentCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:400;line-height:17px;overflow:hidden}.d0xfxa_agentCopy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:13px;overflow:hidden}.d0xfxa_unavailableDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:7px;height:7px;display:inline-block}.d0xfxa_rowMenu{flex:none;align-items:center;padding-right:4px;display:none}.d0xfxa_channelRow:hover .d0xfxa_rowMenu,.d0xfxa_channelRow:focus-within .d0xfxa_rowMenu,.d0xfxa_channelRow[data-menu-open] .d0xfxa_rowMenu,.d0xfxa_agentRow:hover .d0xfxa_rowMenu,.d0xfxa_agentRow:focus-within .d0xfxa_rowMenu,.d0xfxa_agentRow[data-menu-open] .d0xfxa_rowMenu{display:inline-flex}.d0xfxa_channelRow[data-menu-open],.d0xfxa_agentRow[data-menu-open],.d0xfxa_channelRow:hover,.d0xfxa_agentRow:hover,.d0xfxa_channelRow:focus-within,.d0xfxa_agentRow:focus-within,.d0xfxa_channelRow[aria-current=page]{background:var(--dsw-alias-interactive-bg-hover)}.d0xfxa_rowMenuButton{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:4px;justify-content:center;align-items:center;width:20px;height:20px;padding:0;display:inline-flex}.d0xfxa_rowMenuButton:hover,.d0xfxa_rowMenuButton:focus-visible{color:var(--dsw-alias-label-primary);outline:none}.d0xfxa_retryError{color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:center;gap:8px;padding:8px;font-size:11px;display:flex}.d0xfxa_rowAlert{color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;padding:2px 8px 6px;font-size:11px}.d0xfxa_editDescription{color:var(--dsw-alias-label-secondary);margin:0 0 10px;font-size:12px;line-height:18px}.d0xfxa_editMemberList{gap:3px;display:grid}.d0xfxa_editMemberRow{border-radius:6px;grid-template-columns:14px minmax(0,1fr) auto;align-items:center;gap:0 8px;min-height:40px;padding:3px 6px;display:grid}.d0xfxa_editMemberRowChannels{grid-template-columns:minmax(0,1fr) auto}.d0xfxa_editMemberRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.d0xfxa_editMemberCopy{min-width:0;display:grid}.d0xfxa_editMemberCopy strong{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;line-height:18px;overflow:hidden}.d0xfxa_editMemberCopy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.d0xfxa_editChannelName{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:400;line-height:18px;overflow:hidden}.d0xfxa_editMemberRow button{min-width:60px}.d0xfxa_editHint{color:var(--dsw-alias-label-tertiary);margin:0;font-size:11px;line-height:16px}.d0xfxa_menuHint{color:var(--dsw-alias-label-tertiary);margin-left:4px;font-size:10px;line-height:14px}.d0xfxa_rowError{color:var(--dsw-alias-state-error-primary);grid-column:1/-1;margin:2px 0;font-size:11px;line-height:16px}";
8977
9231
  const tagId$1 = "@wowyuarm/dsh-agent-team/sidebar.module.css";
8978
9232
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
8979
9233
  const tag = document.createElement("style");
@@ -9007,6 +9261,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9007
9261
  "railButton": "d0xfxa_railButton",
9008
9262
  "railWorkspace": "d0xfxa_railWorkspace",
9009
9263
  "retryError": "d0xfxa_retryError",
9264
+ "rowAlert": "d0xfxa_rowAlert",
9010
9265
  "rowError": "d0xfxa_rowError",
9011
9266
  "rowMenu": "d0xfxa_rowMenu",
9012
9267
  "rowMenuButton": "d0xfxa_rowMenuButton",
@@ -9023,7 +9278,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9023
9278
  "unavailableDot": "d0xfxa_unavailableDot",
9024
9279
  "workspaceBrowser": "d0xfxa_workspaceBrowser",
9025
9280
  "workspaceCopy": "d0xfxa_workspaceCopy",
9026
- "workspaceHeader": "d0xfxa_workspaceHeader",
9027
9281
  "workspaceIcon": "d0xfxa_workspaceIcon",
9028
9282
  "workspaceList": "d0xfxa_workspaceList",
9029
9283
  "workspaceRow": "d0xfxa_workspaceRow",
@@ -9052,6 +9306,33 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9052
9306
  });
9053
9307
  }
9054
9308
  //#endregion
9309
+ //#region src/client/TeamSidebarSection.tsx
9310
+ /** Collapsible sidebar section header: disclosure toggle plus trailing actions. */
9311
+ function TeamSidebarSection({ title, actions, children }) {
9312
+ const [open, setOpen] = (0, react.useState)(true);
9313
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
9314
+ className: sidebar_module_css_default.section,
9315
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9316
+ className: sidebar_module_css_default.sectionHeader,
9317
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
9318
+ type: "button",
9319
+ className: sidebar_module_css_default.sectionToggle,
9320
+ "aria-expanded": open,
9321
+ onClick: () => {
9322
+ setOpen((value) => !value);
9323
+ },
9324
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { className: sidebar_module_css_default.sectionChevron }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
9325
+ className: sidebar_module_css_default.sectionTitle,
9326
+ children: title
9327
+ })]
9328
+ }), actions !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
9329
+ className: sidebar_module_css_default.sectionActions,
9330
+ children: actions
9331
+ })]
9332
+ }), open && children]
9333
+ });
9334
+ }
9335
+ //#endregion
9055
9336
  //#region src/client/TeamMemberAvatar.tsx
9056
9337
  /**
9057
9338
  * Sidebar Member avatar reusing the conversation identity language: the
@@ -9355,33 +9636,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9355
9636
  });
9356
9637
  }
9357
9638
  //#endregion
9358
- //#region src/client/TeamSidebarSection.tsx
9359
- /** Collapsible sidebar section header: disclosure toggle plus trailing actions. */
9360
- function TeamSidebarSection({ title, actions, children }) {
9361
- const [open, setOpen] = (0, react.useState)(true);
9362
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
9363
- className: sidebar_module_css_default.section,
9364
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9365
- className: sidebar_module_css_default.sectionHeader,
9366
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
9367
- type: "button",
9368
- className: sidebar_module_css_default.sectionToggle,
9369
- "aria-expanded": open,
9370
- onClick: () => {
9371
- setOpen((value) => !value);
9372
- },
9373
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { className: sidebar_module_css_default.sectionChevron }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
9374
- className: sidebar_module_css_default.sectionTitle,
9375
- children: title
9376
- })]
9377
- }), actions !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
9378
- className: sidebar_module_css_default.sectionActions,
9379
- children: actions
9380
- })]
9381
- }), open && children]
9382
- });
9383
- }
9384
- //#endregion
9385
9639
  //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/create.module.css.mjs
9386
9640
  const css = "._1henIG_form{gap:16px;display:grid}._1henIG_field{color:var(--dsw-alias-label-secondary);gap:6px;font-size:12px;line-height:18px;display:grid}._1henIG_input{box-sizing:border-box;width:100%}._1henIG_menuCap{max-height:min(320px,56vh)}._1henIG_selectTrigger{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-sizing:border-box;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;min-height:32px;padding:4px 10px;font-size:14px;line-height:22px;display:flex}._1henIG_selectTrigger:disabled{cursor:default;opacity:.6}._1henIG_selectTrigger:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}._1henIG_selectValue{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._1henIG_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .12s;display:inline-flex}._1henIG_chevronOpen{transform:rotate(180deg)}._1henIG_memberPicker{border:0;gap:4px;max-height:220px;margin:0;padding:0;display:grid;overflow-y:auto}._1henIG_memberPicker legend{color:var(--dsw-alias-label-secondary);padding:0 0 6px;font-size:12px;line-height:18px}._1henIG_memberOption{color:var(--dsw-alias-label-primary);border-radius:6px;grid-template-columns:auto 14px minmax(0,1fr);align-items:center;gap:0 7px;min-height:32px;padding:3px 6px;display:grid}._1henIG_memberOption:hover{background:var(--dsw-alias-interactive-bg-hover)}._1henIG_memberOption input{margin:0}._1henIG_memberOption small{color:var(--dsw-alias-label-tertiary);grid-column:3;font-size:10px;line-height:14px}._1henIG_unavailableDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;justify-self:center;width:7px;height:7px;display:inline-block}._1henIG_error{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px;line-height:18px}._1henIG_dialogContent{max-height:min(70vh,560px);overflow-y:auto}@media (width<=600px){._1henIG_dialogContent{max-height:calc(100vh - 180px)}._1henIG_memberPicker{max-height:180px}}";
9387
9641
  const tagId = "@wowyuarm/dsh-agent-team/create.module.css";
@@ -10112,67 +10366,98 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10112
10366
  function AgentRow({ status, current, channels, loadChannels, updateMember, recoverMember, joinChannel, removeChannelMember, loadModels, openMemberSession, onUpdated, t }) {
10113
10367
  const [menuOpen, setMenuOpen] = (0, react.useState)(false);
10114
10368
  const [editing, setEditing] = (0, react.useState)(false);
10115
- const resume = async () => {
10116
- await recoverMember({
10117
- requestId: mintRequestId(),
10118
- workspaceId: status.member.workspaceId,
10119
- memberId: status.member.memberId
10120
- });
10121
- await onUpdated();
10369
+ const [rowAlert, setRowAlert] = (0, react.useState)();
10370
+ const recover = async () => {
10371
+ try {
10372
+ const result = await recoverMember({
10373
+ requestId: mintRequestId(),
10374
+ workspaceId: status.member.workspaceId,
10375
+ memberId: status.member.memberId
10376
+ });
10377
+ await onUpdated();
10378
+ if (!result.ok) {
10379
+ setRowAlert(t("restartFailed", { message: result.error.message }));
10380
+ return;
10381
+ }
10382
+ if (result.value.status.availability === "unavailable") {
10383
+ setRowAlert(t("restartStillUnavailable", { diagnostic: result.value.status.diagnostic ?? t("statusUnavailable") }));
10384
+ return;
10385
+ }
10386
+ setRowAlert(void 0);
10387
+ if (current === true) openMemberSession(status.member.sessionId);
10388
+ } catch (cause) {
10389
+ setRowAlert(t("restartFailed", { message: cause instanceof Error ? cause.message : String(cause) }));
10390
+ }
10122
10391
  };
10123
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
10124
- className: sidebar_module_css_default.agentRow,
10125
- "data-menu-open": menuOpen || void 0,
10126
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
10127
- type: "button",
10128
- className: sidebar_module_css_default.agentSelect,
10129
- "aria-label": t("openAgentSession", { name: status.member.handle }),
10130
- "aria-current": current ? "page" : void 0,
10131
- disabled: status.availability !== "active",
10132
- onClick: () => {
10133
- openMemberSession(status.member.sessionId);
10134
- },
10135
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamMemberAvatar, {
10136
- status,
10137
- t
10138
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
10139
- className: sidebar_module_css_default.agentCopy,
10140
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: status.member.handle }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: status.member.description })]
10141
- })]
10142
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
10143
- className: sidebar_module_css_default.rowMenu,
10144
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamRowMenu, {
10145
- label: t("actionsAgent", { name: status.member.handle }),
10146
- items: [{
10147
- id: "edit",
10148
- label: t("editAgent"),
10149
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, {})
10150
- }, ...status.presence === "error" ? [{
10151
- id: "resume",
10152
- label: t("resumeAgent"),
10153
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlayOutline16, {})
10154
- }] : []],
10155
- onSelect: (id) => {
10156
- if (id === "resume") resume();
10157
- else setEditing(true);
10392
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
10393
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
10394
+ className: sidebar_module_css_default.agentRow,
10395
+ "data-menu-open": menuOpen || void 0,
10396
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
10397
+ type: "button",
10398
+ className: sidebar_module_css_default.agentSelect,
10399
+ "aria-label": t("openAgentSession", { name: status.member.handle }),
10400
+ "aria-current": current ? "page" : void 0,
10401
+ disabled: status.availability !== "active",
10402
+ onClick: () => {
10403
+ openMemberSession(status.member.sessionId);
10158
10404
  },
10159
- onOpenChange: setMenuOpen
10160
- })
10161
- })]
10162
- }), editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AgentEditorDialog, {
10163
- status,
10164
- channels,
10165
- loadChannels,
10166
- updateMember,
10167
- joinChannel,
10168
- removeChannelMember,
10169
- loadModels,
10170
- onCommitted: onUpdated,
10171
- onClose: () => {
10172
- setEditing(false);
10173
- },
10174
- t
10175
- })] });
10405
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamMemberAvatar, {
10406
+ status,
10407
+ t
10408
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
10409
+ className: sidebar_module_css_default.agentCopy,
10410
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: status.member.handle }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: status.member.description })]
10411
+ })]
10412
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
10413
+ className: sidebar_module_css_default.rowMenu,
10414
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamRowMenu, {
10415
+ label: t("actionsAgent", { name: status.member.handle }),
10416
+ items: [
10417
+ {
10418
+ id: "edit",
10419
+ label: t("editAgent"),
10420
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, {})
10421
+ },
10422
+ ...status.presence === "error" ? [{
10423
+ id: "resume",
10424
+ label: t("resumeAgent"),
10425
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlayOutline16, {})
10426
+ }] : [],
10427
+ ...status.availability === "unavailable" ? [{
10428
+ id: "restart",
10429
+ label: t("restartAgent"),
10430
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutline16, {})
10431
+ }] : []
10432
+ ],
10433
+ onSelect: (id) => {
10434
+ if (id === "edit") setEditing(true);
10435
+ else recover();
10436
+ },
10437
+ onOpenChange: setMenuOpen
10438
+ })
10439
+ })]
10440
+ }),
10441
+ rowAlert !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
10442
+ className: sidebar_module_css_default.rowAlert,
10443
+ role: "alert",
10444
+ children: rowAlert
10445
+ }),
10446
+ editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AgentEditorDialog, {
10447
+ status,
10448
+ channels,
10449
+ loadChannels,
10450
+ updateMember,
10451
+ joinChannel,
10452
+ removeChannelMember,
10453
+ loadModels,
10454
+ onCommitted: onUpdated,
10455
+ onClose: () => {
10456
+ setEditing(false);
10457
+ },
10458
+ t
10459
+ })
10460
+ ] });
10176
10461
  }
10177
10462
  //#endregion
10178
10463
  //#region src/client/TeamChannelsPanel.tsx
@@ -10713,12 +10998,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10713
10998
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
10714
10999
  className: sidebar_module_css_default.workspaceBrowser,
10715
11000
  "aria-label": t("workspaces"),
10716
- children: [
10717
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
10718
- className: sidebar_module_css_default.workspaceHeader,
10719
- children: t("workspaces")
10720
- }),
10721
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11001
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamSidebarSection, {
11002
+ title: t("workspaces"),
11003
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
10722
11004
  className: sidebar_module_css_default.workspaceList,
10723
11005
  children: [workspaces.map((workspace) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamWorkspaceRow, {
10724
11006
  workspaceId: workspace.workspaceId,
@@ -10731,48 +11013,47 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10731
11013
  className: sidebar_module_css_default.emptyState,
10732
11014
  children: t("empty")
10733
11015
  })]
10734
- }),
10735
- selectedId !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
10736
- className: sidebar_module_css_default.workspaceSection,
10737
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
10738
- ref: channelsRef,
10739
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamChannelsPanel, {
10740
- workspaceId: selectedId,
10741
- loadMembers,
10742
- loadChannels,
10743
- subscribeChanges,
10744
- createChannel,
10745
- updateChannel,
10746
- joinChannel,
10747
- removeChannelMember,
10748
- creatingAgents: creatingAgents.filter((request) => request.workspaceId === selectedId),
10749
- ...navigationState.memberSessionId !== void 0 || navigationState.channelRef === void 0 ? {} : { selectedChannelRef: navigationState.channelRef },
10750
- selectChannel,
10751
- t
10752
- }, selectedId)
10753
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
10754
- ref: agentsRef,
10755
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamAgentsPanel, {
10756
- workspaceId: selectedId,
10757
- loadMembers,
10758
- subscribeChanges,
10759
- loadChannels,
10760
- addMember,
10761
- updateMember,
10762
- recoverMember,
10763
- joinChannel,
10764
- removeChannelMember,
10765
- loadModels,
10766
- ...navigationState.memberSessionId === void 0 ? {} : { memberSessionId: navigationState.memberSessionId },
10767
- openMemberSession,
10768
- onCreatingChange: (request, creating) => {
10769
- setCreatingAgents((current) => creating ? [...current.filter((item) => item.requestId !== request.requestId), request] : current.filter((item) => item.requestId !== request.requestId));
10770
- },
10771
- t
10772
- }, selectedId)
10773
- })]
10774
11016
  })
10775
- ]
11017
+ }), selectedId !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11018
+ className: sidebar_module_css_default.workspaceSection,
11019
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11020
+ ref: channelsRef,
11021
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamChannelsPanel, {
11022
+ workspaceId: selectedId,
11023
+ loadMembers,
11024
+ loadChannels,
11025
+ subscribeChanges,
11026
+ createChannel,
11027
+ updateChannel,
11028
+ joinChannel,
11029
+ removeChannelMember,
11030
+ creatingAgents: creatingAgents.filter((request) => request.workspaceId === selectedId),
11031
+ ...navigationState.memberSessionId !== void 0 || navigationState.channelRef === void 0 ? {} : { selectedChannelRef: navigationState.channelRef },
11032
+ selectChannel,
11033
+ t
11034
+ }, selectedId)
11035
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11036
+ ref: agentsRef,
11037
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamAgentsPanel, {
11038
+ workspaceId: selectedId,
11039
+ loadMembers,
11040
+ subscribeChanges,
11041
+ loadChannels,
11042
+ addMember,
11043
+ updateMember,
11044
+ recoverMember,
11045
+ joinChannel,
11046
+ removeChannelMember,
11047
+ loadModels,
11048
+ ...navigationState.memberSessionId === void 0 ? {} : { memberSessionId: navigationState.memberSessionId },
11049
+ openMemberSession,
11050
+ onCreatingChange: (request, creating) => {
11051
+ setCreatingAgents((current) => creating ? [...current.filter((item) => item.requestId !== request.requestId), request] : current.filter((item) => item.requestId !== request.requestId));
11052
+ },
11053
+ t
11054
+ }, selectedId)
11055
+ })]
11056
+ })]
10776
11057
  });
10777
11058
  }
10778
11059
  //#endregion
@@ -11070,6 +11351,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11070
11351
  editChannel: "编辑频道",
11071
11352
  editAgent: "编辑 Agent",
11072
11353
  resumeAgent: "恢复",
11354
+ restartAgent: "重启",
11355
+ restartStillUnavailable: "重启已执行,成员仍不可用:{diagnostic}",
11356
+ restartFailed: "重启执行失败:{message}",
11073
11357
  optionalSuffix: "(可选)",
11074
11358
  agentDescriptionPlaceholder: "留空则暂无描述",
11075
11359
  channelsPickerEmpty: "选择初始频道",
@@ -11082,6 +11366,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11082
11366
  removeFile: "移除 {name}",
11083
11367
  attachmentExpired: "文件已过期清理",
11084
11368
  viewImage: "查看大图 {name}",
11369
+ expandMessage: "展开全文",
11370
+ collapseMessage: "收起",
11085
11371
  actionsChannel: "{name} 的操作",
11086
11372
  actionsAgent: "{name} 的操作",
11087
11373
  editSave: "保存",
@@ -11114,10 +11400,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11114
11400
  taskLabel: "Task #{number}",
11115
11401
  taskPending: "Task …",
11116
11402
  openTask: "打开 Task #{number}",
11403
+ openThread: "打开讨论",
11404
+ threadLabel: "讨论",
11405
+ asTask: "作为任务",
11406
+ promoteToTask: "转为 Task",
11407
+ promotingTask: "正在转为 Task…",
11117
11408
  mentionSuggestions: "提及成员建议",
11118
11409
  messageDraft: "消息内容",
11119
11410
  composerNotify: "将通知:{ids}",
11120
11411
  messagePlaceholder: "写一条消息…",
11412
+ replyPlaceholder: "回复此 Thread…",
11121
11413
  sendMessage: "发送",
11122
11414
  sendingMessage: "发送中…",
11123
11415
  loadOlder: "加载更早消息",
@@ -11148,6 +11440,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11148
11440
  activityClaimsReleased: "{actor} 因成员权限变化释放了 {count} 个 Claim",
11149
11441
  activityAccepted: "{actor} 验收了此 Task",
11150
11442
  activityAcceptedWithClaims: "{actor} 验收了此 Task,并一并完成了 {count} 个未完成 Claim",
11443
+ activityPromoted: "{actor} 为此讨论创建了 Task",
11151
11444
  acceptEarlyTitle: "提前验收任务",
11152
11445
  acceptEarlyBody: "将验收本 Task,并把以下 {count} 个未完成的 Claim 一并标记为完成:",
11153
11446
  acceptingTask: "验收中…",
@@ -11198,6 +11491,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11198
11491
  editChannel: "Edit Channel",
11199
11492
  editAgent: "Edit Agent",
11200
11493
  resumeAgent: "Resume",
11494
+ restartAgent: "Restart",
11495
+ restartStillUnavailable: "Restart ran, but the Member is still unavailable: {diagnostic}",
11496
+ restartFailed: "Restart failed: {message}",
11201
11497
  optionalSuffix: " (optional)",
11202
11498
  agentDescriptionPlaceholder: "Leave empty if not needed",
11203
11499
  channelsPickerEmpty: "Choose initial channels",
@@ -11210,6 +11506,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11210
11506
  removeFile: "Remove {name}",
11211
11507
  attachmentExpired: "File expired and cleaned up",
11212
11508
  viewImage: "View image {name}",
11509
+ expandMessage: "Show more",
11510
+ collapseMessage: "Show less",
11213
11511
  actionsChannel: "{name} actions",
11214
11512
  actionsAgent: "{name} actions",
11215
11513
  editSave: "Save",
@@ -11242,10 +11540,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11242
11540
  taskLabel: "Task #{number}",
11243
11541
  taskPending: "Task …",
11244
11542
  openTask: "Open Task #{number}",
11543
+ openThread: "Open thread",
11544
+ threadLabel: "Thread",
11545
+ asTask: "As task",
11546
+ promoteToTask: "Convert to Task",
11547
+ promotingTask: "Converting to Task…",
11245
11548
  mentionSuggestions: "Mention suggestions",
11246
11549
  messageDraft: "Message",
11247
11550
  composerNotify: "Will notify: {ids}",
11248
11551
  messagePlaceholder: "Write a message…",
11552
+ replyPlaceholder: "Reply on this Thread…",
11249
11553
  sendMessage: "Send",
11250
11554
  sendingMessage: "Sending…",
11251
11555
  loadOlder: "Load older messages",
@@ -11276,6 +11580,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11276
11580
  activityClaimsReleased: "{actor} released {count} Claim(s) after a membership change",
11277
11581
  activityAccepted: "{actor} accepted this Task",
11278
11582
  activityAcceptedWithClaims: "{actor} accepted this Task and completed {count} unfinished Claims with it",
11583
+ activityPromoted: "{actor} created a Task for this Thread",
11279
11584
  acceptEarlyTitle: "Accept Task early",
11280
11585
  acceptEarlyBody: "This accepts the Task and marks the following {count} unfinished Claims as done:",
11281
11586
  acceptingTask: "Accepting…",
@@ -11345,6 +11650,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11345
11650
  getAttachment: (request) => ctx.remote.agentTeam.getAttachment(request),
11346
11651
  reply: (request) => ctx.remote.agentTeam.reply(request),
11347
11652
  changeTask: (request) => ctx.remote.agentTeam.changeTask(request),
11653
+ promoteThread: (request) => ctx.remote.agentTeam.promoteThread(request),
11348
11654
  resolveTaskRefs: (request) => ctx.remote.agentTeam.resolveTaskRefs(request)
11349
11655
  } : {},
11350
11656
  ...name === "sidebar.workspaces" ? {