@wowyuarm/dsh-agent-team 0.1.6 → 0.1.8

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 (108) hide show
  1. package/README.md +11 -5
  2. package/README.zh.md +11 -5
  3. package/package.json +44 -42
  4. package/packages/agent-team/README.md +2 -0
  5. package/packages/agent-team/README.zh.md +2 -0
  6. package/packages/agent-team/core-skills/member-skill-manager/SKILL.md +2 -0
  7. package/packages/agent-team/lib/index.js +140 -204
  8. package/packages/agent-team/lib/ledger.js +436 -25
  9. package/packages/agent-team/lib/member-context.js +6 -2
  10. package/packages/agent-team/lib/member-runtime.js +229 -0
  11. package/packages/agent-team/lib/preset-roster.js +1 -0
  12. package/packages/agent-team/lib/progress-nudge.js +320 -0
  13. package/packages/agent-team/lib/spec.js +30 -1
  14. package/packages/agent-team/lib/typert.host.js +250 -70
  15. package/packages/agent-team/lib/typert.remote-client.d.ts +5 -1
  16. package/packages/agent-team/lib/typert.remote-client.d.ts.map +1 -1
  17. package/packages/agent-team/lib/typert.remote-client.js +168 -38
  18. package/packages/agent-team/lib/types/entities.js +1 -0
  19. package/packages/agent-team/lib/types/index.d.ts +28 -44
  20. package/packages/agent-team/lib/types/index.d.ts.map +1 -1
  21. package/packages/agent-team/lib/types/ledger.d.ts +60 -2
  22. package/packages/agent-team/lib/types/ledger.d.ts.map +1 -1
  23. package/packages/agent-team/lib/types/member-context.d.ts.map +1 -1
  24. package/packages/agent-team/lib/types/member-runtime.d.ts +108 -0
  25. package/packages/agent-team/lib/types/member-runtime.d.ts.map +1 -0
  26. package/packages/agent-team/lib/types/operations.js +1 -0
  27. package/packages/agent-team/lib/types/preset-roster.d.ts.map +1 -1
  28. package/packages/agent-team/lib/types/progress-nudge.d.ts +136 -0
  29. package/packages/agent-team/lib/types/progress-nudge.d.ts.map +1 -0
  30. package/packages/agent-team/lib/types/requests-results.js +1 -0
  31. package/packages/agent-team/lib/types/spec.d.ts.map +1 -1
  32. package/packages/agent-team/lib/types/types/entities.d.ts +357 -0
  33. package/packages/agent-team/lib/types/types/entities.d.ts.map +1 -0
  34. package/packages/agent-team/lib/types/types/operations.d.ts +303 -0
  35. package/packages/agent-team/lib/types/types/operations.d.ts.map +1 -0
  36. package/packages/agent-team/lib/types/types/requests-results.d.ts +529 -0
  37. package/packages/agent-team/lib/types/types/requests-results.d.ts.map +1 -0
  38. package/packages/agent-team/lib/types/types.d.ts +10 -1070
  39. package/packages/agent-team/lib/types/types.d.ts.map +1 -1
  40. package/packages/agent-team/preset/team-member/agent.cordis.yml +6 -4
  41. package/packages/client-agent-team/README.md +3 -1
  42. package/packages/client-agent-team/README.zh.md +3 -1
  43. package/packages/client-agent-team/lib/client.js +773 -733
  44. package/packages/client-agent-team/lib/client.js.map +1 -1
  45. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.d.ts +3 -2
  46. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.d.ts.map +1 -1
  47. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.js +30 -7
  48. package/packages/client-agent-team/lib/types/client/TeamChannelPage.d.ts +1 -1
  49. package/packages/client-agent-team/lib/types/client/TeamChannelPage.d.ts.map +1 -1
  50. package/packages/client-agent-team/lib/types/client/TeamChannelPage.js +5 -9
  51. package/packages/client-agent-team/lib/types/client/TeamChannelsPanel.d.ts +2 -1
  52. package/packages/client-agent-team/lib/types/client/TeamChannelsPanel.d.ts.map +1 -1
  53. package/packages/client-agent-team/lib/types/client/TeamChannelsPanel.js +31 -5
  54. package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts +3 -1
  55. package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts.map +1 -1
  56. package/packages/client-agent-team/lib/types/client/TeamComposer.js +39 -28
  57. package/packages/client-agent-team/lib/types/client/TeamConversation.d.ts +1 -1
  58. package/packages/client-agent-team/lib/types/client/TeamConversation.d.ts.map +1 -1
  59. package/packages/client-agent-team/lib/types/client/TeamConversation.js +2 -2
  60. package/packages/client-agent-team/lib/types/client/TeamMemberAvatar.d.ts.map +1 -1
  61. package/packages/client-agent-team/lib/types/client/TeamMemberAvatar.js +3 -2
  62. package/packages/client-agent-team/lib/types/client/TeamMessage.d.ts.map +1 -1
  63. package/packages/client-agent-team/lib/types/client/TeamMessage.js +15 -3
  64. package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts +2 -2
  65. package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts.map +1 -1
  66. package/packages/client-agent-team/lib/types/client/TeamPresenceDot.js +4 -6
  67. package/packages/client-agent-team/lib/types/client/TeamStateDot.d.ts +14 -0
  68. package/packages/client-agent-team/lib/types/client/TeamStateDot.d.ts.map +1 -0
  69. package/packages/client-agent-team/lib/types/client/TeamStateDot.js +15 -0
  70. package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts +2 -1
  71. package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts.map +1 -1
  72. package/packages/client-agent-team/lib/types/client/TeamThreadPage.js +41 -16
  73. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.d.ts +1 -1
  74. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.d.ts.map +1 -1
  75. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.js +2 -2
  76. package/packages/client-agent-team/lib/types/client/TeamWorkspaceRow.d.ts +1 -1
  77. package/packages/client-agent-team/lib/types/client/TeamWorkspaceRow.d.ts.map +1 -1
  78. package/packages/client-agent-team/lib/types/client/index.d.ts +1 -1
  79. package/packages/client-agent-team/lib/types/client/index.d.ts.map +1 -1
  80. package/packages/client-agent-team/lib/types/client/index.js +9 -77
  81. package/packages/client-agent-team/lib/types/client/locales.d.ts +26 -0
  82. package/packages/client-agent-team/lib/types/client/locales.d.ts.map +1 -1
  83. package/packages/client-agent-team/lib/types/client/locales.js +26 -0
  84. package/packages/client-agent-team/lib/types/client/navigation.d.ts +2 -1
  85. package/packages/client-agent-team/lib/types/client/navigation.d.ts.map +1 -1
  86. package/packages/client-agent-team/lib/types/client/sidebar-drag.d.ts +1 -2
  87. package/packages/client-agent-team/lib/types/client/sidebar-drag.d.ts.map +1 -1
  88. package/packages/client-agent-team/lib/types/client/sidebar-order.d.ts +1 -1
  89. package/packages/client-agent-team/lib/types/client/sidebar-order.d.ts.map +1 -1
  90. package/packages/client-agent-team/lib/types/client/sidebar-sections.d.ts +1 -1
  91. package/packages/client-agent-team/lib/types/client/sidebar-sections.d.ts.map +1 -1
  92. package/packages/client-agent-team/lib/types/client/slots.d.ts +5 -1
  93. package/packages/client-agent-team/lib/types/client/slots.d.ts.map +1 -1
  94. package/packages/client-agent-team/lib/types/client/task-refs.d.ts +7 -1
  95. package/packages/client-agent-team/lib/types/client/task-refs.d.ts.map +1 -1
  96. package/packages/client-agent-team/lib/types/client/task-refs.js +25 -3
  97. package/packages/client-agent-team/lib/types/client/team-formatters.d.ts +11 -10
  98. package/packages/client-agent-team/lib/types/client/team-formatters.d.ts.map +1 -1
  99. package/packages/client-agent-team/lib/types/client/team-formatters.js +14 -11
  100. package/packages/client-agent-team/lib/types/client/team-membership.d.ts +1 -1
  101. package/packages/client-agent-team/lib/types/client/team-membership.d.ts.map +1 -1
  102. package/packages/tool-agent-team/lib/index.js +9 -9
  103. package/packages/client-agent-team/lib/types/client/TeamMemberSessionComposer.d.ts +0 -17
  104. package/packages/client-agent-team/lib/types/client/TeamMemberSessionComposer.d.ts.map +0 -1
  105. package/packages/client-agent-team/lib/types/client/TeamMemberSessionComposer.js +0 -135
  106. package/packages/client-agent-team/lib/types/client/member-session-input.d.ts +0 -22
  107. package/packages/client-agent-team/lib/types/client/member-session-input.d.ts.map +0 -1
  108. package/packages/client-agent-team/lib/types/client/member-session-input.js +0 -98
@@ -7,7 +7,7 @@ window.__ModuleLoader__.load({
7
7
  let react = require("react");
8
8
  let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
10
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js
10
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js
11
11
  var _a$1;
12
12
  function $constructor(name, initializer, params) {
13
13
  function init(inst, def) {
@@ -66,7 +66,7 @@ window.__ModuleLoader__.load({
66
66
  return globalConfig;
67
67
  }
68
68
  //#endregion
69
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.js
69
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.js
70
70
  function getEnumValues(entries) {
71
71
  const numericValues = Object.values(entries).filter((v) => typeof v === "number");
72
72
  return Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
@@ -378,7 +378,7 @@ window.__ModuleLoader__.load({
378
378
  return { ...iss };
379
379
  }
380
380
  //#endregion
381
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.js
381
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.js
382
382
  const initializer$1 = (inst, def) => {
383
383
  inst.name = "$ZodError";
384
384
  Object.defineProperty(inst, "_zod", {
@@ -438,7 +438,7 @@ window.__ModuleLoader__.load({
438
438
  return fieldErrors;
439
439
  }
440
440
  //#endregion
441
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.js
441
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.js
442
442
  const _parse = (_Err) => (schema, value, _ctx, _params) => {
443
443
  const ctx = _ctx ? {
444
444
  ..._ctx,
@@ -552,7 +552,7 @@ window.__ModuleLoader__.load({
552
552
  return _safeParseAsync(_Err)(schema, value, _ctx);
553
553
  };
554
554
  //#endregion
555
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.js
555
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.js
556
556
  /**
557
557
  * @deprecated CUID v1 is deprecated by its authors due to information leakage
558
558
  * (timestamps embedded in the id). Use {@link cuid2} instead.
@@ -617,7 +617,7 @@ window.__ModuleLoader__.load({
617
617
  const lowercase = /^[^A-Z]*$/;
618
618
  const uppercase = /^[^a-z]*$/;
619
619
  //#endregion
620
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.js
620
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.js
621
621
  const $ZodCheck = /*@__PURE__*/ $constructor("$ZodCheck", (inst, def) => {
622
622
  var _a;
623
623
  inst._zod ?? (inst._zod = {});
@@ -975,7 +975,7 @@ window.__ModuleLoader__.load({
975
975
  };
976
976
  });
977
977
  //#endregion
978
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.js
978
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.js
979
979
  var Doc = class {
980
980
  constructor(args = []) {
981
981
  this.content = [];
@@ -1006,14 +1006,14 @@ window.__ModuleLoader__.load({
1006
1006
  }
1007
1007
  };
1008
1008
  //#endregion
1009
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.js
1009
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.js
1010
1010
  const version$1 = {
1011
1011
  major: 4,
1012
1012
  minor: 4,
1013
1013
  patch: 3
1014
1014
  };
1015
1015
  //#endregion
1016
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.js
1016
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.js
1017
1017
  const $ZodType = /*@__PURE__*/ $constructor("$ZodType", (inst, def) => {
1018
1018
  var _a;
1019
1019
  inst ?? (inst = {});
@@ -2150,7 +2150,7 @@ window.__ModuleLoader__.load({
2150
2150
  }
2151
2151
  }
2152
2152
  //#endregion
2153
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.js
2153
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.js
2154
2154
  var _a;
2155
2155
  var $ZodRegistry = class {
2156
2156
  constructor() {
@@ -2197,7 +2197,7 @@ window.__ModuleLoader__.load({
2197
2197
  (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());
2198
2198
  const globalRegistry = globalThis.__zod_globalRegistry;
2199
2199
  //#endregion
2200
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.js
2200
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.js
2201
2201
  // @__NO_SIDE_EFFECTS__
2202
2202
  function _string(Class, params) {
2203
2203
  return new Class({
@@ -2709,7 +2709,7 @@ window.__ModuleLoader__.load({
2709
2709
  return ch;
2710
2710
  }
2711
2711
  //#endregion
2712
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.js
2712
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.js
2713
2713
  function initializeContext(params) {
2714
2714
  let target = params?.target ?? "draft-2020-12";
2715
2715
  if (target === "draft-4") target = "draft-04";
@@ -3002,7 +3002,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3002
3002
  return finalize(ctx, schema);
3003
3003
  };
3004
3004
  //#endregion
3005
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.js
3005
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.js
3006
3006
  const formatMap = {
3007
3007
  guid: "uuid",
3008
3008
  url: "uri",
@@ -3234,7 +3234,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3234
3234
  seen.ref = def.innerType;
3235
3235
  };
3236
3236
  //#endregion
3237
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.js
3237
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.js
3238
3238
  const ZodISODateTime = /*@__PURE__*/ $constructor("ZodISODateTime", (inst, def) => {
3239
3239
  $ZodISODateTime.init(inst, def);
3240
3240
  ZodStringFormat.init(inst, def);
@@ -3264,7 +3264,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3264
3264
  return /* @__PURE__ */ _isoDuration(ZodISODuration, params);
3265
3265
  }
3266
3266
  //#endregion
3267
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.js
3267
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.js
3268
3268
  const initializer = (inst, issues) => {
3269
3269
  $ZodError.init(inst, issues);
3270
3270
  inst.name = "ZodError";
@@ -3286,7 +3286,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3286
3286
  };
3287
3287
  const ZodRealError = /*@__PURE__*/ $constructor("ZodError", initializer, { Parent: Error });
3288
3288
  //#endregion
3289
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.js
3289
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.js
3290
3290
  const parse = /* @__PURE__ */ _parse(ZodRealError);
3291
3291
  const parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);
3292
3292
  const safeParse = /* @__PURE__ */ _safeParse(ZodRealError);
@@ -3300,7 +3300,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3300
3300
  const safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
3301
3301
  const safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
3302
3302
  //#endregion
3303
- //#region ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js
3303
+ //#region ../../../dsh-agent-team/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js
3304
3304
  const _installedGroups = /* @__PURE__ */ new WeakMap();
3305
3305
  function _installLazyMethods(inst, group, methods) {
3306
3306
  const proto = Object.getPrototypeOf(inst);
@@ -4125,12 +4125,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4125
4125
  "state": union([
4126
4126
  literal("enabled"),
4127
4127
  literal("suspended"),
4128
- literal("inactive")
4128
+ literal("inactive"),
4129
+ literal("archived")
4129
4130
  ]).readonly()
4130
4131
  }).readonly(),
4131
4132
  "availability": union([
4132
4133
  literal("suspended"),
4133
4134
  literal("inactive"),
4135
+ literal("archived"),
4134
4136
  literal("active"),
4135
4137
  literal("unavailable")
4136
4138
  ]).readonly(),
@@ -4147,6 +4149,91 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4147
4149
  }))]).readonly().optional()
4148
4150
  }).readonly()
4149
4151
  });
4152
+ const _wowyuarm_dsh_agent_team_agentTeam_archiveChannel_parameter_0$schema = object({
4153
+ "requestId": intersection(string(), unknown()).readonly(),
4154
+ "workspaceId": intersection(string(), unknown()).readonly(),
4155
+ "channelRef": intersection(string(), unknown()).readonly()
4156
+ });
4157
+ const _wowyuarm_dsh_agent_team_agentTeam_archiveChannel_result$schema = object({
4158
+ "receipt": object({
4159
+ "operationId": intersection(string(), unknown()).readonly(),
4160
+ "requestId": intersection(string(), unknown()).readonly(),
4161
+ "sequence": number().readonly()
4162
+ }).readonly(),
4163
+ "channel": object({
4164
+ "channelRef": intersection(string(), unknown()).readonly(),
4165
+ "workspaceId": intersection(string(), unknown()).readonly(),
4166
+ "name": string().readonly(),
4167
+ "description": string().readonly(),
4168
+ "createdAtSequence": number().readonly(),
4169
+ "state": union([literal("archived"), literal("active")]).readonly()
4170
+ }).readonly(),
4171
+ "releasedClaims": array(object({
4172
+ "claimRef": intersection(string(), unknown()).readonly(),
4173
+ "taskRef": intersection(string(), unknown()).readonly(),
4174
+ "threadRef": intersection(string(), unknown()).readonly(),
4175
+ "owner": intersection(string(), unknown()).readonly(),
4176
+ "direction": string().readonly(),
4177
+ "normalizedDirection": string().readonly(),
4178
+ "state": union([
4179
+ literal("active"),
4180
+ literal("done"),
4181
+ literal("released")
4182
+ ]).readonly()
4183
+ })).readonly()
4184
+ });
4185
+ const _wowyuarm_dsh_agent_team_agentTeam_archiveMember_parameter_0$schema = object({
4186
+ "requestId": intersection(string(), unknown()).readonly(),
4187
+ "memberId": intersection(string(), unknown()).readonly()
4188
+ });
4189
+ const _wowyuarm_dsh_agent_team_agentTeam_archiveMember_result$schema = object({
4190
+ "receipt": object({
4191
+ "operationId": intersection(string(), unknown()).readonly(),
4192
+ "requestId": intersection(string(), unknown()).readonly(),
4193
+ "sequence": number().readonly()
4194
+ }).readonly(),
4195
+ "member": object({
4196
+ "memberId": intersection(string(), unknown()).readonly(),
4197
+ "sessionId": intersection(string(), unknown()).readonly(),
4198
+ "workspaceId": intersection(string(), unknown()).readonly(),
4199
+ "handle": string().readonly(),
4200
+ "description": string().readonly(),
4201
+ "presetId": string().readonly(),
4202
+ "model": union([_undefined(), object({
4203
+ "provider": string().readonly(),
4204
+ "model": string().readonly(),
4205
+ "reasoningEffort": intersection(string(), unknown()).readonly().optional()
4206
+ })]).readonly().optional(),
4207
+ "capabilities": union([_undefined(), object({
4208
+ "tools": union([_undefined(), object({ "allow": array(string()).readonly().optional() })]).readonly().optional(),
4209
+ "skills": union([_undefined(), object({ "allow": array(string()).readonly().optional() })]).readonly().optional()
4210
+ })]).readonly().optional(),
4211
+ "privateMemoryPath": string().readonly(),
4212
+ "state": union([
4213
+ literal("enabled"),
4214
+ literal("suspended"),
4215
+ literal("inactive"),
4216
+ literal("archived")
4217
+ ]).readonly()
4218
+ }).readonly(),
4219
+ "releasedClaims": array(object({
4220
+ "claimRef": intersection(string(), unknown()).readonly(),
4221
+ "taskRef": intersection(string(), unknown()).readonly(),
4222
+ "threadRef": intersection(string(), unknown()).readonly(),
4223
+ "owner": intersection(string(), unknown()).readonly(),
4224
+ "direction": string().readonly(),
4225
+ "normalizedDirection": string().readonly(),
4226
+ "state": union([
4227
+ literal("active"),
4228
+ literal("done"),
4229
+ literal("released")
4230
+ ]).readonly()
4231
+ })).readonly(),
4232
+ "removedAttention": array(object({
4233
+ "memberId": intersection(string(), unknown()).readonly(),
4234
+ "threadRef": intersection(string(), unknown()).readonly()
4235
+ })).readonly()
4236
+ });
4150
4237
  const _wowyuarm_dsh_agent_team_agentTeam_changeAttention_parameter_0$schema = object({
4151
4238
  "requestId": intersection(string(), unknown()).readonly(),
4152
4239
  "workspaceId": intersection(string(), unknown()).readonly(),
@@ -4165,10 +4252,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4165
4252
  "channelRef": intersection(string(), unknown()).readonly(),
4166
4253
  "threadRef": intersection(string(), unknown()).readonly(),
4167
4254
  "status": union([
4255
+ literal("done"),
4168
4256
  literal("todo"),
4169
4257
  literal("in_progress"),
4170
4258
  literal("in_review"),
4171
- literal("done"),
4172
4259
  literal("closed")
4173
4260
  ]).readonly(),
4174
4261
  "resolution": union([
@@ -4246,10 +4333,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4246
4333
  "channelRef": intersection(string(), unknown()).readonly(),
4247
4334
  "threadRef": intersection(string(), unknown()).readonly(),
4248
4335
  "status": union([
4336
+ literal("done"),
4249
4337
  literal("todo"),
4250
4338
  literal("in_progress"),
4251
4339
  literal("in_review"),
4252
- literal("done"),
4253
4340
  literal("closed")
4254
4341
  ]).readonly(),
4255
4342
  "resolution": union([
@@ -4325,12 +4412,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4325
4412
  "state": union([
4326
4413
  literal("enabled"),
4327
4414
  literal("suspended"),
4328
- literal("inactive")
4415
+ literal("inactive"),
4416
+ literal("archived")
4329
4417
  ]).readonly()
4330
4418
  }).readonly(),
4331
4419
  "availability": union([
4332
4420
  literal("suspended"),
4333
4421
  literal("inactive"),
4422
+ literal("archived"),
4334
4423
  literal("active"),
4335
4424
  literal("unavailable")
4336
4425
  ]).readonly(),
@@ -4365,7 +4454,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4365
4454
  "workspaceId": intersection(string(), unknown()).readonly(),
4366
4455
  "name": string().readonly(),
4367
4456
  "description": string().readonly(),
4368
- "createdAtSequence": number().readonly()
4457
+ "createdAtSequence": number().readonly(),
4458
+ "state": union([literal("archived"), literal("active")]).readonly()
4369
4459
  }).readonly(),
4370
4460
  "memberIds": array(intersection(string(), unknown())).readonly()
4371
4461
  });
@@ -4388,10 +4478,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4388
4478
  "channelRef": intersection(string(), unknown()).readonly(),
4389
4479
  "threadRef": intersection(string(), unknown()).readonly(),
4390
4480
  "status": union([
4481
+ literal("done"),
4391
4482
  literal("todo"),
4392
4483
  literal("in_progress"),
4393
4484
  literal("in_review"),
4394
- literal("done"),
4395
4485
  literal("closed")
4396
4486
  ]).readonly(),
4397
4487
  "resolution": union([
@@ -4454,12 +4544,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4454
4544
  "state": union([
4455
4545
  literal("enabled"),
4456
4546
  literal("suspended"),
4457
- literal("inactive")
4547
+ literal("inactive"),
4548
+ literal("archived")
4458
4549
  ]).readonly()
4459
4550
  }).readonly(),
4460
4551
  "availability": union([
4461
4552
  literal("suspended"),
4462
4553
  literal("inactive"),
4554
+ literal("archived"),
4463
4555
  literal("active"),
4464
4556
  literal("unavailable")
4465
4557
  ]).readonly(),
@@ -4524,10 +4616,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4524
4616
  "channelRef": intersection(string(), unknown()).readonly(),
4525
4617
  "threadRef": intersection(string(), unknown()).readonly(),
4526
4618
  "status": union([
4619
+ literal("done"),
4527
4620
  literal("todo"),
4528
4621
  literal("in_progress"),
4529
4622
  literal("in_review"),
4530
- literal("done"),
4531
4623
  literal("closed")
4532
4624
  ]).readonly(),
4533
4625
  "resolution": union([
@@ -4574,10 +4666,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4574
4666
  "channelRef": intersection(string(), unknown()).readonly(),
4575
4667
  "threadRef": intersection(string(), unknown()).readonly(),
4576
4668
  "status": union([
4669
+ literal("done"),
4577
4670
  literal("todo"),
4578
4671
  literal("in_progress"),
4579
4672
  literal("in_review"),
4580
- literal("done"),
4581
4673
  literal("closed")
4582
4674
  ]).readonly(),
4583
4675
  "resolution": union([
@@ -4731,12 +4823,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4731
4823
  "state": union([
4732
4824
  literal("enabled"),
4733
4825
  literal("suspended"),
4734
- literal("inactive")
4826
+ literal("inactive"),
4827
+ literal("archived")
4735
4828
  ]).readonly()
4736
4829
  }).readonly(),
4737
4830
  "availability": union([
4738
4831
  literal("suspended"),
4739
4832
  literal("inactive"),
4833
+ literal("archived"),
4740
4834
  literal("active"),
4741
4835
  literal("unavailable")
4742
4836
  ]).readonly(),
@@ -4860,10 +4954,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4860
4954
  "channelRef": intersection(string(), unknown()).readonly(),
4861
4955
  "threadRef": intersection(string(), unknown()).readonly(),
4862
4956
  "status": union([
4957
+ literal("done"),
4863
4958
  literal("todo"),
4864
4959
  literal("in_progress"),
4865
4960
  literal("in_review"),
4866
- literal("done"),
4867
4961
  literal("closed")
4868
4962
  ]).readonly(),
4869
4963
  "resolution": union([
@@ -4942,10 +5036,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4942
5036
  "channelRef": intersection(string(), unknown()).readonly(),
4943
5037
  "threadRef": intersection(string(), unknown()).readonly(),
4944
5038
  "status": union([
5039
+ literal("done"),
4945
5040
  literal("todo"),
4946
5041
  literal("in_progress"),
4947
5042
  literal("in_review"),
4948
- literal("done"),
4949
5043
  literal("closed")
4950
5044
  ]).readonly(),
4951
5045
  "resolution": union([
@@ -5005,10 +5099,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5005
5099
  "channelRef": intersection(string(), unknown()).readonly(),
5006
5100
  "threadRef": intersection(string(), unknown()).readonly(),
5007
5101
  "status": union([
5102
+ literal("done"),
5008
5103
  literal("todo"),
5009
5104
  literal("in_progress"),
5010
5105
  literal("in_review"),
5011
- literal("done"),
5012
5106
  literal("closed")
5013
5107
  ]).readonly(),
5014
5108
  "resolution": union([
@@ -5126,13 +5220,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5126
5220
  "taskRef": intersection(string(), unknown()).readonly().optional(),
5127
5221
  "limit": number().readonly().optional()
5128
5222
  });
5129
- const _wowyuarm_dsh_agent_team_agentTeam_threadObservations_result$schema = object({ "items": array(object({
5130
- "sequence": number().readonly(),
5131
- "threadRef": intersection(string(), unknown()).readonly(),
5132
- "taskRef": intersection(string(), unknown()).readonly().optional(),
5133
- "memberId": intersection(string(), unknown()).readonly(),
5134
- "action": union([literal("follow"), literal("unfollow")]).readonly()
5135
- })).readonly() });
5223
+ const _wowyuarm_dsh_agent_team_agentTeam_threadObservations_result$schema = object({
5224
+ "items": array(object({
5225
+ "sequence": number().readonly(),
5226
+ "threadRef": intersection(string(), unknown()).readonly(),
5227
+ "taskRef": intersection(string(), unknown()).readonly().optional(),
5228
+ "memberId": intersection(string(), unknown()).readonly(),
5229
+ "action": union([literal("follow"), literal("unfollow")]).readonly()
5230
+ })).readonly(),
5231
+ "followers": array(intersection(string(), unknown())).readonly()
5232
+ });
5136
5233
  const _wowyuarm_dsh_agent_team_agentTeam_updateChannel_parameter_0$schema = object({
5137
5234
  "requestId": intersection(string(), unknown()).readonly(),
5138
5235
  "workspaceId": intersection(string(), unknown()).readonly(),
@@ -5151,7 +5248,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5151
5248
  "workspaceId": intersection(string(), unknown()).readonly(),
5152
5249
  "name": string().readonly(),
5153
5250
  "description": string().readonly(),
5154
- "createdAtSequence": number().readonly()
5251
+ "createdAtSequence": number().readonly(),
5252
+ "state": union([literal("archived"), literal("active")]).readonly()
5155
5253
  }).readonly()
5156
5254
  });
5157
5255
  const _wowyuarm_dsh_agent_team_agentTeam_updateMember_parameter_0$schema = object({
@@ -5196,12 +5294,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5196
5294
  "state": union([
5197
5295
  literal("enabled"),
5198
5296
  literal("suspended"),
5199
- literal("inactive")
5297
+ literal("inactive"),
5298
+ literal("archived")
5200
5299
  ]).readonly()
5201
5300
  }).readonly(),
5202
5301
  "availability": union([
5203
5302
  literal("suspended"),
5204
5303
  literal("inactive"),
5304
+ literal("archived"),
5205
5305
  literal("active"),
5206
5306
  literal("unavailable")
5207
5307
  ]).readonly(),
@@ -5235,7 +5335,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5235
5335
  "workspaceId": intersection(string(), unknown()).readonly(),
5236
5336
  "name": string().readonly(),
5237
5337
  "description": string().readonly(),
5238
- "createdAtSequence": number().readonly()
5338
+ "createdAtSequence": number().readonly(),
5339
+ "state": union([literal("archived"), literal("active")]).readonly()
5239
5340
  })).readonly(),
5240
5341
  "members": array(object({
5241
5342
  "channelRef": intersection(string(), unknown()).readonly(),
@@ -5246,10 +5347,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5246
5347
  "channelRef": intersection(string(), unknown()).readonly(),
5247
5348
  "threadRef": intersection(string(), unknown()).readonly(),
5248
5349
  "status": union([
5350
+ literal("done"),
5249
5351
  literal("todo"),
5250
5352
  literal("in_progress"),
5251
5353
  literal("in_review"),
5252
- literal("done"),
5253
5354
  literal("closed")
5254
5355
  ]).readonly(),
5255
5356
  "resolution": union([
@@ -5291,10 +5392,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5291
5392
  "channelRef": intersection(string(), unknown()).readonly(),
5292
5393
  "threadRef": intersection(string(), unknown()).readonly(),
5293
5394
  "status": union([
5395
+ literal("done"),
5294
5396
  literal("todo"),
5295
5397
  literal("in_progress"),
5296
5398
  literal("in_review"),
5297
- literal("done"),
5298
5399
  literal("closed")
5299
5400
  ]).readonly(),
5300
5401
  "resolution": union([
@@ -5392,7 +5493,61 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5392
5493
  },
5393
5494
  sourceLocation: {
5394
5495
  "file": "packages/agent-team/src/index.ts",
5395
- "line": 460,
5496
+ "line": 475,
5497
+ "column": 9
5498
+ }
5499
+ },
5500
+ {
5501
+ id: "@wowyuarm/dsh-agent-team#agentTeam/archiveChannel",
5502
+ service: "agentTeam",
5503
+ namespace: "agentTeam",
5504
+ method: "archiveChannel",
5505
+ invocation: { kind: "direct" },
5506
+ parameters: [{
5507
+ name: "request",
5508
+ wire: "request",
5509
+ source: "json",
5510
+ codec: {
5511
+ mode: "strict",
5512
+ typeSymbol: "@wowyuarm/dsh-agent-team/types#AgentTeamArchiveChannelRequest",
5513
+ schema: _wowyuarm_dsh_agent_team_agentTeam_archiveChannel_parameter_0$schema
5514
+ }
5515
+ }],
5516
+ result: {
5517
+ mode: "strict",
5518
+ typeSymbol: "@wowyuarm/dsh-agent-team/types#AgentTeamArchiveChannelResult",
5519
+ schema: _wowyuarm_dsh_agent_team_agentTeam_archiveChannel_result$schema
5520
+ },
5521
+ sourceLocation: {
5522
+ "file": "packages/agent-team/src/index.ts",
5523
+ "line": 465,
5524
+ "column": 9
5525
+ }
5526
+ },
5527
+ {
5528
+ id: "@wowyuarm/dsh-agent-team#agentTeam/archiveMember",
5529
+ service: "agentTeam",
5530
+ namespace: "agentTeam",
5531
+ method: "archiveMember",
5532
+ invocation: { kind: "direct" },
5533
+ parameters: [{
5534
+ name: "request",
5535
+ wire: "request",
5536
+ source: "json",
5537
+ codec: {
5538
+ mode: "strict",
5539
+ typeSymbol: "@wowyuarm/dsh-agent-team/types#AgentTeamArchiveMemberRequest",
5540
+ schema: _wowyuarm_dsh_agent_team_agentTeam_archiveMember_parameter_0$schema
5541
+ }
5542
+ }],
5543
+ result: {
5544
+ mode: "strict",
5545
+ typeSymbol: "@wowyuarm/dsh-agent-team/types#AgentTeamArchiveMemberResult",
5546
+ schema: _wowyuarm_dsh_agent_team_agentTeam_archiveMember_result$schema
5547
+ },
5548
+ sourceLocation: {
5549
+ "file": "packages/agent-team/src/index.ts",
5550
+ "line": 745,
5396
5551
  "column": 9
5397
5552
  }
5398
5553
  },
@@ -5419,7 +5574,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5419
5574
  },
5420
5575
  sourceLocation: {
5421
5576
  "file": "packages/agent-team/src/index.ts",
5422
- "line": 848,
5577
+ "line": 867,
5423
5578
  "column": 9
5424
5579
  }
5425
5580
  },
@@ -5474,7 +5629,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5474
5629
  },
5475
5630
  sourceLocation: {
5476
5631
  "file": "packages/agent-team/src/index.ts",
5477
- "line": 738,
5632
+ "line": 757,
5478
5633
  "column": 9
5479
5634
  }
5480
5635
  },
@@ -5501,7 +5656,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5501
5656
  },
5502
5657
  sourceLocation: {
5503
5658
  "file": "packages/agent-team/src/index.ts",
5504
- "line": 553,
5659
+ "line": 568,
5505
5660
  "column": 9
5506
5661
  }
5507
5662
  },
@@ -5555,7 +5710,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5555
5710
  },
5556
5711
  sourceLocation: {
5557
5712
  "file": "packages/agent-team/src/index.ts",
5558
- "line": 834,
5713
+ "line": 853,
5559
5714
  "column": 9
5560
5715
  }
5561
5716
  },
@@ -5582,7 +5737,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5582
5737
  },
5583
5738
  sourceLocation: {
5584
5739
  "file": "packages/agent-team/src/index.ts",
5585
- "line": 857,
5740
+ "line": 876,
5586
5741
  "column": 3
5587
5742
  }
5588
5743
  },
@@ -5609,7 +5764,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5609
5764
  },
5610
5765
  sourceLocation: {
5611
5766
  "file": "packages/agent-team/src/index.ts",
5612
- "line": 758,
5767
+ "line": 777,
5613
5768
  "column": 9
5614
5769
  }
5615
5770
  },
@@ -5664,7 +5819,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5664
5819
  },
5665
5820
  sourceLocation: {
5666
5821
  "file": "packages/agent-team/src/index.ts",
5667
- "line": 748,
5822
+ "line": 767,
5668
5823
  "column": 9
5669
5824
  }
5670
5825
  },
@@ -5691,7 +5846,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5691
5846
  },
5692
5847
  sourceLocation: {
5693
5848
  "file": "packages/agent-team/src/index.ts",
5694
- "line": 821,
5849
+ "line": 840,
5695
5850
  "column": 9
5696
5851
  }
5697
5852
  },
@@ -5718,7 +5873,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5718
5873
  },
5719
5874
  sourceLocation: {
5720
5875
  "file": "packages/agent-team/src/index.ts",
5721
- "line": 864,
5876
+ "line": 883,
5722
5877
  "column": 9
5723
5878
  }
5724
5879
  },
@@ -5745,7 +5900,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5745
5900
  },
5746
5901
  sourceLocation: {
5747
5902
  "file": "packages/agent-team/src/index.ts",
5748
- "line": 514,
5903
+ "line": 529,
5749
5904
  "column": 9
5750
5905
  }
5751
5906
  },
@@ -5772,7 +5927,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5772
5927
  },
5773
5928
  sourceLocation: {
5774
5929
  "file": "packages/agent-team/src/index.ts",
5775
- "line": 769,
5930
+ "line": 788,
5776
5931
  "column": 9
5777
5932
  }
5778
5933
  },
@@ -5799,7 +5954,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5799
5954
  },
5800
5955
  sourceLocation: {
5801
5956
  "file": "packages/agent-team/src/index.ts",
5802
- "line": 842,
5957
+ "line": 861,
5803
5958
  "column": 9
5804
5959
  }
5805
5960
  },
@@ -5853,7 +6008,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5853
6008
  },
5854
6009
  sourceLocation: {
5855
6010
  "file": "packages/agent-team/src/index.ts",
5856
- "line": 778,
6011
+ "line": 797,
5857
6012
  "column": 9
5858
6013
  }
5859
6014
  },
@@ -5880,7 +6035,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5880
6035
  },
5881
6036
  sourceLocation: {
5882
6037
  "file": "packages/agent-team/src/index.ts",
5883
- "line": 880,
6038
+ "line": 899,
5884
6039
  "column": 3
5885
6040
  }
5886
6041
  },
@@ -5907,7 +6062,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5907
6062
  },
5908
6063
  sourceLocation: {
5909
6064
  "file": "packages/agent-team/src/index.ts",
5910
- "line": 873,
6065
+ "line": 892,
5911
6066
  "column": 3
5912
6067
  }
5913
6068
  },
@@ -5961,7 +6116,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5961
6116
  },
5962
6117
  sourceLocation: {
5963
6118
  "file": "packages/agent-team/src/index.ts",
5964
- "line": 665,
6119
+ "line": 685,
5965
6120
  "column": 9
5966
6121
  }
5967
6122
  },
@@ -5988,7 +6143,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5988
6143
  },
5989
6144
  sourceLocation: {
5990
6145
  "file": "packages/agent-team/src/index.ts",
5991
- "line": 887,
6146
+ "line": 906,
5992
6147
  "column": 3
5993
6148
  }
5994
6149
  }
@@ -6360,22 +6515,22 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6360
6515
  }
6361
6516
  };
6362
6517
  //#endregion
6363
- //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/team.module.css.mjs
6364
- const css$8 = ".YvAbSa_footerStack{flex:none;width:100%;height:42px;margin:8px 0 0;display:flex}.YvAbSa_footerAction,.YvAbSa_settingsAction{box-sizing:border-box;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:8px;width:calc(100% + 4px);height:42px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;line-height:22px;display:flex;overflow:hidden}.YvAbSa_footerAction{margin:0 -2px}.YvAbSa_settingsAction{margin:4px -2px}.YvAbSa_footerAction:hover,.YvAbSa_footerAction:focus-visible,.YvAbSa_settingsAction:hover,.YvAbSa_settingsAction:focus-visible{background:var(--dsw-alias-interactive-bg-hover);outline:none}.YvAbSa_footerAction.YvAbSa_rail,.YvAbSa_settingsAction.YvAbSa_rail{border-radius:50%;justify-content:center;width:36px;height:36px;padding:0}.YvAbSa_footerAction.YvAbSa_rail{margin:0}.YvAbSa_settingsAction.YvAbSa_rail{margin:8px 0 10px}.YvAbSa_railStack{align-items:center;width:36px;height:36px;margin:0}";
6365
- const tagId$8 = "@wowyuarm/dsh-agent-team/team.module.css";
6366
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
6518
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/team.module.css.mjs
6519
+ const css$9 = "._2DPuGW_footerStack{flex:none;width:100%;height:42px;margin:8px 0 0;display:flex}._2DPuGW_footerAction,._2DPuGW_settingsAction{box-sizing:border-box;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:8px;width:calc(100% + 4px);height:42px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;line-height:22px;display:flex;overflow:hidden}._2DPuGW_footerAction{margin:0 -2px}._2DPuGW_settingsAction{margin:4px -2px}._2DPuGW_footerAction:hover,._2DPuGW_footerAction:focus-visible,._2DPuGW_settingsAction:hover,._2DPuGW_settingsAction:focus-visible{background:var(--dsw-alias-interactive-bg-hover);outline:none}._2DPuGW_footerAction._2DPuGW_rail,._2DPuGW_settingsAction._2DPuGW_rail{border-radius:50%;justify-content:center;width:36px;height:36px;padding:0}._2DPuGW_footerAction._2DPuGW_rail{margin:0}._2DPuGW_settingsAction._2DPuGW_rail{margin:8px 0 10px}._2DPuGW_railStack{align-items:center;width:36px;height:36px;margin:0}";
6520
+ const tagId$9 = "@wowyuarm/dsh-agent-team/team.module.css";
6521
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$9) + "]") === null) {
6367
6522
  const tag = document.createElement("style");
6368
6523
  tag.dataset.plugin = "@wowyuarm/dsh-agent-team";
6369
- tag.dataset.pluginCss = tagId$8;
6370
- tag.textContent = css$8;
6524
+ tag.dataset.pluginCss = tagId$9;
6525
+ tag.textContent = css$9;
6371
6526
  document.head.appendChild(tag);
6372
6527
  }
6373
6528
  var team_module_css_default = {
6374
- "footerAction": "YvAbSa_footerAction",
6375
- "footerStack": "YvAbSa_footerStack",
6376
- "rail": "YvAbSa_rail",
6377
- "railStack": "YvAbSa_railStack",
6378
- "settingsAction": "YvAbSa_settingsAction"
6529
+ "footerAction": "_2DPuGW_footerAction",
6530
+ "footerStack": "_2DPuGW_footerStack",
6531
+ "rail": "_2DPuGW_rail",
6532
+ "railStack": "_2DPuGW_railStack",
6533
+ "settingsAction": "_2DPuGW_settingsAction"
6379
6534
  };
6380
6535
  //#endregion
6381
6536
  //#region src/client/TeamFooterAction.tsx
@@ -6410,8 +6565,43 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6410
6565
  }) });
6411
6566
  }
6412
6567
  //#endregion
6413
- //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/presence.module.css.mjs
6414
- const css$7 = ".-\\36 lQ-q_target{flex:0 0 14px;justify-content:center;align-items:center;display:inline-flex}.-\\36 lQ-q_unavailableDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:7px;height:7px;display:inline-block}";
6568
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/state-dot.module.css.mjs
6569
+ const css$8 = "._0Md7GW_quiet{border-radius:50%;flex:none;display:inline-block;position:relative}._0Md7GW_quiet[data-variant=todo]{border:1px solid var(--dsw-alias-label-tertiary)}._0Md7GW_quiet[data-variant=quiet]{color:var(--dsw-alias-label-tertiary)}._0Md7GW_quiet[data-variant=quiet]:before{content:\"\";opacity:.1;background:currentColor;border-radius:50%;position:absolute;inset:0}._0Md7GW_quiet[data-variant=quiet]:after{content:\"\";background:currentColor;border-radius:50%;position:absolute;inset:20%}";
6570
+ const tagId$8 = "@wowyuarm/dsh-agent-team/state-dot.module.css";
6571
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
6572
+ const tag = document.createElement("style");
6573
+ tag.dataset.plugin = "@wowyuarm/dsh-agent-team";
6574
+ tag.dataset.pluginCss = tagId$8;
6575
+ tag.textContent = css$8;
6576
+ document.head.appendChild(tag);
6577
+ }
6578
+ var state_dot_module_css_default = { "quiet": "_0Md7GW_quiet" };
6579
+ //#endregion
6580
+ //#region src/client/TeamStateDot.tsx
6581
+ /**
6582
+ * Render the one shared Team status indicator. Native StateDot states pass
6583
+ * through; the quiet statuses mirror StateDot geometry locally so every
6584
+ * surface renders the same shape — todo a hollow ring (not started), quiet a
6585
+ * solid tertiary dot with the same 10% halo (closed, unavailable).
6586
+ */
6587
+ function TeamStateDot({ state, size = 10 }) {
6588
+ if (state === "todo" || state === "quiet") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6589
+ className: state_dot_module_css_default.quiet,
6590
+ "data-variant": state,
6591
+ style: {
6592
+ width: size,
6593
+ height: size
6594
+ },
6595
+ "aria-hidden": "true"
6596
+ });
6597
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
6598
+ state,
6599
+ size
6600
+ });
6601
+ }
6602
+ //#endregion
6603
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/presence.module.css.mjs
6604
+ const css$7 = "._3bLURW_target{flex:0 0 14px;justify-content:center;align-items:center;display:inline-flex}";
6415
6605
  const tagId$7 = "@wowyuarm/dsh-agent-team/presence.module.css";
6416
6606
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$7) + "]") === null) {
6417
6607
  const tag = document.createElement("style");
@@ -6420,10 +6610,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6420
6610
  tag.textContent = css$7;
6421
6611
  document.head.appendChild(tag);
6422
6612
  }
6423
- var presence_module_css_default = {
6424
- "target": "-6lQ-q_target",
6425
- "unavailableDot": "-6lQ-q_unavailableDot"
6426
- };
6613
+ var presence_module_css_default = { "target": "_3bLURW_target" };
6427
6614
  //#endregion
6428
6615
  //#region src/client/TeamPresenceDot.tsx
6429
6616
  function presenceLabel(status, t) {
@@ -6432,11 +6619,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6432
6619
  }
6433
6620
  /** Shared presence → indicator mapping for dots and avatar badges. */
6434
6621
  function presenceDotState(presence) {
6435
- return presence === "available" ? "done" : presence === "working" ? "ongoing" : presence === "error" ? "error" : "gray";
6622
+ return presence === "available" ? "done" : presence === "working" ? "ongoing" : presence === "error" ? "error" : "quiet";
6436
6623
  }
6437
6624
  function TeamPresenceDot({ status, t }) {
6438
6625
  const label = presenceLabel(status, t);
6439
- const state = presenceDotState(status.presence);
6440
6626
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
6441
6627
  label,
6442
6628
  delayMs: 300,
@@ -6444,16 +6630,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6444
6630
  className: presence_module_css_default.target,
6445
6631
  role: "img",
6446
6632
  "aria-label": label,
6447
- children: state === "gray" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6448
- className: presence_module_css_default.unavailableDot,
6449
- "aria-hidden": "true"
6450
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state })
6633
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamStateDot, { state: presenceDotState(status.presence) })
6451
6634
  })
6452
6635
  });
6453
6636
  }
6454
6637
  //#endregion
6455
- //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/members.module.css.mjs
6456
- const css$6 = ".UkovOW_body{max-height:min(65vh,560px);overflow-y:auto}.UkovOW_content{outline:none;gap:12px;display:grid}.UkovOW_group{gap:3px;display:grid}.UkovOW_group+.UkovOW_group{border-top:1px solid var(--dsw-alias-border-l2);padding-top:10px}.UkovOW_group h3{color:var(--dsw-alias-label-secondary);margin:0 0 3px;font-size:12px;font-weight:600;line-height:18px}.UkovOW_member{border-radius:6px;grid-template-columns:14px minmax(0,1fr);align-items:center;gap:0 8px;min-height:36px;padding:4px 6px;display:grid}.UkovOW_member:hover{background:var(--dsw-alias-interactive-bg-hover)}.UkovOW_copy{min-width:0;display:grid}.UkovOW_copy strong{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;line-height:18px;overflow:hidden}.UkovOW_copy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.UkovOW_state,.UkovOW_error{margin:0;padding:6px 0;font-size:12px;line-height:18px}.UkovOW_state{color:var(--dsw-alias-label-tertiary)}.UkovOW_error{color:var(--dsw-alias-state-error-primary)}@media (width<=600px){.UkovOW_body{max-height:calc(100vh - 160px)}}";
6638
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/members.module.css.mjs
6639
+ const css$6 = "._5nHZqG_body{max-height:min(65vh,560px);overflow-y:auto}._5nHZqG_content{outline:none;gap:12px;display:grid}._5nHZqG_group{gap:3px;display:grid}._5nHZqG_group+._5nHZqG_group{border-top:1px solid var(--dsw-alias-border-l2);padding-top:10px}._5nHZqG_group h3{color:var(--dsw-alias-label-secondary);margin:0 0 3px;font-size:12px;font-weight:600;line-height:18px}._5nHZqG_member{border-radius:6px;grid-template-columns:14px minmax(0,1fr);align-items:center;gap:0 8px;min-height:36px;padding:4px 6px;display:grid}._5nHZqG_member:hover{background:var(--dsw-alias-interactive-bg-hover)}._5nHZqG_copy{min-width:0;display:grid}._5nHZqG_copy strong{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;line-height:18px;overflow:hidden}._5nHZqG_copy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}._5nHZqG_state,._5nHZqG_error{margin:0;padding:6px 0;font-size:12px;line-height:18px}._5nHZqG_state{color:var(--dsw-alias-label-tertiary)}._5nHZqG_error{color:var(--dsw-alias-state-error-primary)}@media (width<=600px){._5nHZqG_body{max-height:calc(100vh - 160px)}}";
6457
6640
  const tagId$6 = "@wowyuarm/dsh-agent-team/members.module.css";
6458
6641
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
6459
6642
  const tag = document.createElement("style");
@@ -6463,13 +6646,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6463
6646
  document.head.appendChild(tag);
6464
6647
  }
6465
6648
  var members_module_css_default = {
6466
- "body": "UkovOW_body",
6467
- "content": "UkovOW_content",
6468
- "copy": "UkovOW_copy",
6469
- "error": "UkovOW_error",
6470
- "group": "UkovOW_group",
6471
- "member": "UkovOW_member",
6472
- "state": "UkovOW_state"
6649
+ "body": "_5nHZqG_body",
6650
+ "content": "_5nHZqG_content",
6651
+ "copy": "_5nHZqG_copy",
6652
+ "error": "_5nHZqG_error",
6653
+ "group": "_5nHZqG_group",
6654
+ "member": "_5nHZqG_member",
6655
+ "state": "_5nHZqG_state"
6473
6656
  };
6474
6657
  //#endregion
6475
6658
  //#region src/client/TeamMembersAction.tsx
@@ -6607,8 +6790,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6607
6790
  /** Fresh idempotency identity for one Client-initiated durable request. */
6608
6791
  const mintRequestId = () => crypto.randomUUID();
6609
6792
  //#endregion
6610
- //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/composer.module.css.mjs
6611
- 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_mentionAllDot{background:var(--dsw-alias-label-primary);border-radius:50%;justify-self:center;width:8px;height:8px}.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}}";
6793
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/composer.module.css.mjs
6794
+ const css$5 = ".wh0I9G_root{padding:0 var(--dsh-composer-side-clearance,16px) 8px;flex-direction:column;align-items:center;display:flex}.wh0I9G_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}.wh0I9G_inputArea{min-height:28px;position:relative}.wh0I9G_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}.wh0I9G_inputArea textarea::placeholder{color:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary))}.wh0I9G_inputArea textarea:disabled{cursor:not-allowed;opacity:.55}.wh0I9G_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}.wh0I9G_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}.wh0I9G_mentionOption:hover,.wh0I9G_mentionOption[aria-selected=true]{background:var(--dsw-alias-interactive-bg-hover)}.wh0I9G_mentionName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.wh0I9G_mentionAllDot{background:var(--dsw-alias-label-primary);border-radius:50%;justify-self:center;width:8px;height:8px}.wh0I9G_mentionDescription{min-width:0;color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-tertiary));text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.wh0I9G_toolbar{justify-content:flex-end;align-items:center;gap:6px;min-height:34px;padding:2px 8px 6px;display:flex}.wh0I9G_asTaskOn[aria-pressed=true],.wh0I9G_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)}.wh0I9G_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}.wh0I9G_attachButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.wh0I9G_attachButton:disabled{cursor:default;opacity:.5}.wh0I9G_attachButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,var(--dsw-specific-selector));outline-offset:1px}.wh0I9G_fileInput{display:none}.wh0I9G_fileChips{flex-wrap:wrap;gap:4px;margin:0;padding:4px 8px 0;list-style:none;display:flex}.wh0I9G_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}.wh0I9G_fileChipSize{color:var(--dsw-alias-label-tertiary);margin-left:6px}.wh0I9G_imageChip{align-items:center;display:flex}.wh0I9G_imageChipPreview{border:1px solid var(--dsw-alias-border-l2);object-fit:cover;border-radius:4px;width:56px;height:40px}.wh0I9G_fileChipName{text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-size:11px;line-height:16px;overflow:hidden}.wh0I9G_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}.wh0I9G_fileChipRemove:hover,.wh0I9G_fileChipRemove:focus-visible{color:var(--dsw-alias-label-primary);outline:none}.wh0I9G_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}.wh0I9G_sendButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover,var(--dsw-alias-button-primary-hover))}.wh0I9G_sendButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.wh0I9G_sendButton:disabled{cursor:not-allowed;opacity:.4}.wh0I9G_confirmation{color:var(--dsw-alias-label-tertiary);align-self:stretch;margin:0;padding:0 16px;font-size:12px;line-height:18px}.wh0I9G_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}.wh0I9G_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){.wh0I9G_mentionOption{grid-template-columns:16px minmax(0,1fr);min-height:36px;padding-block:6px}.wh0I9G_mentionDescription{display:none}}@media (prefers-reduced-motion:reduce){.wh0I9G_sendButton{transition:none}}";
6612
6795
  const tagId$5 = "@wowyuarm/dsh-agent-team/composer.module.css";
6613
6796
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
6614
6797
  const tag = document.createElement("style");
@@ -6618,35 +6801,29 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6618
6801
  document.head.appendChild(tag);
6619
6802
  }
6620
6803
  var composer_module_css_default = {
6621
- "asTaskOn": "x9jGQq_asTaskOn",
6622
- "attachButton": "x9jGQq_attachButton",
6623
- "card": "x9jGQq_card",
6624
- "confirmation": "x9jGQq_confirmation",
6625
- "error": "x9jGQq_error",
6626
- "fileChip": "x9jGQq_fileChip",
6627
- "fileChipName": "x9jGQq_fileChipName",
6628
- "fileChipRemove": "x9jGQq_fileChipRemove",
6629
- "fileChipSize": "x9jGQq_fileChipSize",
6630
- "fileChips": "x9jGQq_fileChips",
6631
- "fileInput": "x9jGQq_fileInput",
6632
- "imageChip": "x9jGQq_imageChip",
6633
- "imageChipPreview": "x9jGQq_imageChipPreview",
6634
- "inputArea": "x9jGQq_inputArea",
6635
- "memberSessionCard": "x9jGQq_memberSessionCard",
6636
- "memberSessionInputArea": "x9jGQq_memberSessionInputArea",
6637
- "memberSessionPrimary": "x9jGQq_memberSessionPrimary",
6638
- "memberSessionRoot": "x9jGQq_memberSessionRoot",
6639
- "memberSessionStatus": "x9jGQq_memberSessionStatus",
6640
- "memberSessionToolbar": "x9jGQq_memberSessionToolbar",
6641
- "mentionAllDot": "x9jGQq_mentionAllDot",
6642
- "mentionDescription": "x9jGQq_mentionDescription",
6643
- "mentionMenu": "x9jGQq_mentionMenu",
6644
- "mentionName": "x9jGQq_mentionName",
6645
- "mentionOption": "x9jGQq_mentionOption",
6646
- "notifyRow": "x9jGQq_notifyRow",
6647
- "root": "x9jGQq_root",
6648
- "sendButton": "x9jGQq_sendButton",
6649
- "toolbar": "x9jGQq_toolbar"
6804
+ "asTaskOn": "wh0I9G_asTaskOn",
6805
+ "attachButton": "wh0I9G_attachButton",
6806
+ "card": "wh0I9G_card",
6807
+ "confirmation": "wh0I9G_confirmation",
6808
+ "error": "wh0I9G_error",
6809
+ "fileChip": "wh0I9G_fileChip",
6810
+ "fileChipName": "wh0I9G_fileChipName",
6811
+ "fileChipRemove": "wh0I9G_fileChipRemove",
6812
+ "fileChipSize": "wh0I9G_fileChipSize",
6813
+ "fileChips": "wh0I9G_fileChips",
6814
+ "fileInput": "wh0I9G_fileInput",
6815
+ "imageChip": "wh0I9G_imageChip",
6816
+ "imageChipPreview": "wh0I9G_imageChipPreview",
6817
+ "inputArea": "wh0I9G_inputArea",
6818
+ "mentionAllDot": "wh0I9G_mentionAllDot",
6819
+ "mentionDescription": "wh0I9G_mentionDescription",
6820
+ "mentionMenu": "wh0I9G_mentionMenu",
6821
+ "mentionName": "wh0I9G_mentionName",
6822
+ "mentionOption": "wh0I9G_mentionOption",
6823
+ "notifyRow": "wh0I9G_notifyRow",
6824
+ "root": "wh0I9G_root",
6825
+ "sendButton": "wh0I9G_sendButton",
6826
+ "toolbar": "wh0I9G_toolbar"
6650
6827
  };
6651
6828
  //#endregion
6652
6829
  //#region src/client/TeamComposer.tsx
@@ -6672,11 +6849,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6672
6849
  }
6673
6850
  function mentionCandidates(members, query) {
6674
6851
  const normalized = query.toLocaleLowerCase();
6675
- return members.filter((status) => status.presence !== "unavailable" && status.member.state !== "inactive" && status.member.handle.toLocaleLowerCase().startsWith(normalized));
6852
+ return members.filter((status) => status.presence !== "unavailable" && status.member.state !== "inactive" && status.member.state !== "archived" && status.member.handle.toLocaleLowerCase().startsWith(normalized));
6853
+ }
6854
+ /** Thread followers rank first: mentioning them delivers directly, while a non-follower enters the two-send invite flow. */
6855
+ function rankMentionCandidates(candidates, followers) {
6856
+ if (followers === void 0 || followers.size === 0) return candidates;
6857
+ return [...candidates].sort((left, right) => Number(followers.has(right.member.memberId)) - Number(followers.has(left.member.memberId)));
6676
6858
  }
6677
6859
  /** Every member a manual handle pick could reach: the @all expansion snapshot. */
6678
6860
  function allMentionMembers(members) {
6679
- return members.filter((status) => status.presence !== "unavailable" && status.member.state !== "inactive");
6861
+ return members.filter((status) => status.presence !== "unavailable" && status.member.state !== "inactive" && status.member.state !== "archived");
6680
6862
  }
6681
6863
  function containsAllMention(draft) {
6682
6864
  return /(?:^|[^\p{L}\p{N}_])@all(?=$|[^\p{L}\p{N}_])/u.test(draft);
@@ -6692,15 +6874,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6692
6874
  }
6693
6875
  return url;
6694
6876
  }
6695
- function TeamComposer({ members, recipients, draft, pending, confirmation, error, onDraftChange, onRecipientsChange, onSubmit, placeholder, pendingFiles, onFilesChange, asTask, onAsTaskChange, t }) {
6877
+ function TeamComposer({ members, followerMemberIds, recipients, draft, pending, confirmation, error, onDraftChange, onRecipientsChange, onSubmit, placeholder, pendingFiles, onFilesChange, asTask, onAsTaskChange, t }) {
6696
6878
  const inputRef = (0, react.useRef)(null);
6697
6879
  const fileInputRef = (0, react.useRef)(null);
6698
6880
  const rootRef = (0, react.useRef)(null);
6699
6881
  const menuRef = (0, react.useRef)(null);
6882
+ const activeOptionRef = (0, react.useRef)(null);
6700
6883
  const composingRef = (0, react.useRef)(false);
6701
6884
  const [mention, setMention] = (0, react.useState)();
6702
6885
  const [highlight, setHighlight] = (0, react.useState)(0);
6703
- const memberCandidates = mention === void 0 ? [] : mentionCandidates(members, mention.query);
6886
+ const memberCandidates = mention === void 0 ? [] : rankMentionCandidates(mentionCandidates(members, mention.query), followerMemberIds);
6704
6887
  const options = mention !== void 0 && "all".startsWith(mention.query.toLocaleLowerCase()) ? [{ kind: "all" }, ...memberCandidates.map((status) => ({
6705
6888
  kind: "member",
6706
6889
  status
@@ -6710,6 +6893,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6710
6893
  }));
6711
6894
  const menuOpen = mention !== void 0 && options.length > 0;
6712
6895
  const activeOption = options[highlight];
6896
+ const activeOptionKey = activeOption === void 0 ? void 0 : activeOption.kind === "all" ? "all" : activeOption.status.member.memberId;
6713
6897
  const allCount = allMentionMembers(members).length;
6714
6898
  const listId = "team-mention-suggestions";
6715
6899
  const menuMaxHeight = (0, _deepseek_ai_dsh_client_ui_primitives.useAnchoredMaxHeight)(menuRef, 320, menuOpen ? draft : null);
@@ -6729,6 +6913,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6729
6913
  }
6730
6914
  setHighlight((current) => Math.min(current, options.length - 1));
6731
6915
  }, [mention, options.length]);
6916
+ (0, react.useLayoutEffect)(() => {
6917
+ if (!menuOpen) return;
6918
+ activeOptionRef.current?.scrollIntoView?.({ block: "nearest" });
6919
+ }, [
6920
+ menuOpen,
6921
+ highlight,
6922
+ activeOptionKey
6923
+ ]);
6732
6924
  (0, react.useEffect)(() => {
6733
6925
  const active = document.activeElement;
6734
6926
  if (active !== document.body && active?.closest("[aria-current=\"page\"]") === null) return;
@@ -6766,6 +6958,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6766
6958
  pruneRecipients(nextDraft);
6767
6959
  updateMention(nextDraft, event.target.selectionStart ?? nextDraft.length);
6768
6960
  };
6961
+ const commitMention = (nextDraft, nextCaret, nextRecipients) => {
6962
+ onDraftChange(nextDraft);
6963
+ onRecipientsChange(nextRecipients);
6964
+ setMention(void 0);
6965
+ setHighlight(0);
6966
+ requestAnimationFrame(() => {
6967
+ const input = inputRef.current;
6968
+ if (input === null) return;
6969
+ input.focus({ preventScroll: true });
6970
+ input.setSelectionRange(nextCaret, nextCaret);
6971
+ });
6972
+ };
6769
6973
  const selectOption = (option) => {
6770
6974
  if (mention === void 0) return;
6771
6975
  if (option.kind === "all") {
@@ -6773,33 +6977,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6773
6977
  const nextCaret = mention.start + 5;
6774
6978
  const nextRecipients = new Set(recipients);
6775
6979
  for (const status of allMentionMembers(members)) nextRecipients.add(status.member.memberId);
6776
- onDraftChange(nextDraft);
6777
- onRecipientsChange(nextRecipients);
6778
- setMention(void 0);
6779
- setHighlight(0);
6780
- requestAnimationFrame(() => {
6781
- const input = inputRef.current;
6782
- if (input === null) return;
6783
- input.focus({ preventScroll: true });
6784
- input.setSelectionRange(nextCaret, nextCaret);
6785
- });
6980
+ commitMention(nextDraft, nextCaret, nextRecipients);
6786
6981
  return;
6787
6982
  }
6788
6983
  const member = option.status;
6789
6984
  const inserted = `@${member.member.handle} `;
6790
- const nextDraft = `${draft.slice(0, mention.start)}${inserted}${draft.slice(mention.end)}`;
6791
- const nextCaret = mention.start + inserted.length;
6792
- const nextRecipients = new Set(recipients).add(member.member.memberId);
6793
- onDraftChange(nextDraft);
6794
- onRecipientsChange(nextRecipients);
6795
- setMention(void 0);
6796
- setHighlight(0);
6797
- requestAnimationFrame(() => {
6798
- const input = inputRef.current;
6799
- if (input === null) return;
6800
- input.focus({ preventScroll: true });
6801
- input.setSelectionRange(nextCaret, nextCaret);
6802
- });
6985
+ commitMention(`${draft.slice(0, mention.start)}${inserted}${draft.slice(mention.end)}`, mention.start + inserted.length, new Set(recipients).add(member.member.memberId));
6803
6986
  };
6804
6987
  const onPaste = (event) => {
6805
6988
  if (pending || onFilesChange === void 0 || pendingFiles === void 0) return;
@@ -6873,6 +7056,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6873
7056
  role: "option",
6874
7057
  "aria-selected": selected,
6875
7058
  className: composer_module_css_default.mentionOption,
7059
+ ref: selected ? activeOptionRef : void 0,
6876
7060
  onMouseDown: (event) => {
6877
7061
  event.preventDefault();
6878
7062
  },
@@ -6899,6 +7083,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6899
7083
  role: "option",
6900
7084
  "aria-selected": selected,
6901
7085
  className: composer_module_css_default.mentionOption,
7086
+ ref: selected ? activeOptionRef : void 0,
6902
7087
  onMouseDown: (event) => {
6903
7088
  event.preventDefault();
6904
7089
  },
@@ -7077,15 +7262,36 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7077
7262
  pending.delete(entry.taskRef);
7078
7263
  emit();
7079
7264
  };
7080
- /** Click-path Host lookup: remember every resolved entry and hand them back for immediate navigation. */
7265
+ /** Compare refs by branded prefix plus hyphen-stripped UUID, so abbreviated spellings line up with their full form. */
7266
+ function refKeyOf(ref) {
7267
+ return ref.toLowerCase().replaceAll("-", "");
7268
+ }
7269
+ /**
7270
+ * Click-path Host lookup: remember every resolved entry and hand them back
7271
+ * for immediate navigation. The Host keeps `resolved` in the same order as
7272
+ * the input `taskRefs` (one entry per resolvable input, unknowns omitted);
7273
+ * the pairing walk below relies on that contract, so it must be preserved
7274
+ * together with this implementation.
7275
+ */
7081
7276
  const hostTaskRefLookup = (resolveTaskRefs, workspaceId) => async (taskRefs) => {
7082
7277
  const result = await resolveTaskRefs({
7083
7278
  workspaceId,
7084
7279
  taskRefs
7085
7280
  });
7086
7281
  if (!result.ok) return [];
7087
- for (const entry of result.value.resolved) rememberResolvedTaskRef(entry);
7088
- return result.value.resolved;
7282
+ const entries = result.value.resolved;
7283
+ let entryIndex = 0;
7284
+ for (const requested of taskRefs) {
7285
+ const entry = entries[entryIndex];
7286
+ if (entry === void 0 || !refKeyOf(entry.taskRef).startsWith(refKeyOf(requested))) continue;
7287
+ if (entry.taskRef !== requested) rememberResolvedTaskRef({
7288
+ ...entry,
7289
+ taskRef: requested
7290
+ });
7291
+ rememberResolvedTaskRef(entry);
7292
+ entryIndex += 1;
7293
+ }
7294
+ return entries;
7089
7295
  };
7090
7296
  /** Resolve one Task ref through the Host and jump to its home Channel Thread. */
7091
7297
  const jumpToTaskThread = (resolveTaskRefs, workspaceId, taskRef, selectThread) => {
@@ -7138,10 +7344,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7138
7344
  }[state]);
7139
7345
  }
7140
7346
  /**
7141
- * Status indicator variant for a Task status. Active states map to StateDot
7142
- * variants; every status renders a dot so all Task chips share one shape
7143
- * language — todo is a hollow ring (not started), closed a quiet gray dot
7144
- * (archived).
7347
+ * Status indicator for a Task status, the dot every Task surface renders.
7348
+ * Active states map to StateDot variants; every status renders a dot so they
7349
+ * share one shape language — todo is a hollow ring (not started), closed a
7350
+ * quiet gray dot (archived).
7145
7351
  */
7146
7352
  function taskStatusDot(status) {
7147
7353
  return {
@@ -7149,7 +7355,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7149
7355
  in_progress: "ongoing",
7150
7356
  in_review: "warning",
7151
7357
  done: "done",
7152
- closed: "closed"
7358
+ closed: "quiet"
7153
7359
  }[status];
7154
7360
  }
7155
7361
  /** One-line title snippet derived from the Task's root Message body. */
@@ -7163,7 +7369,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7163
7369
  for (let index = 0; index < memberId.length; index += 1) hash = (hash * 31 + memberId.charCodeAt(index)) % 360;
7164
7370
  return hash;
7165
7371
  }
7166
- const BRANDED_REF_PATTERN = /\b(task|channel|thread):{1,2}[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi;
7372
+ const BRANDED_REF_PATTERN = /\b(task|channel|thread):{1,2}[0-9a-f]{6,}(?:-[0-9a-f]{1,})*\b/gi;
7167
7373
  /**
7168
7374
  * Canonical form of one matched ref: models occasionally double the colon or
7169
7375
  * uppercase the UUID when citing a ref in prose, while Host lookups and
@@ -7174,11 +7380,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7174
7380
  }
7175
7381
  /**
7176
7382
  * Split a literal text run into plain and branded-ref segments. The pattern
7177
- * anchors on the fixed ref prefixes plus the UUID shape, so ordinary prose
7178
- * containing a colon never linkifies; a doubled colon from model output is
7179
- * tolerated. Segment refs are always canonical, so resolution and navigation
7180
- * work regardless of how the ref was spelled; text without any ref comes
7181
- * back as one untouched segment.
7383
+ * anchors on the fixed ref prefixes plus a UUID shape (full or abbreviated),
7384
+ * so ordinary prose containing a colon never linkifies; a doubled colon from
7385
+ * model output is tolerated. Segment refs are always canonical, so resolution
7386
+ * and navigation work regardless of how the ref was spelled; text without any
7387
+ * ref comes back as one untouched segment.
7182
7388
  */
7183
7389
  function splitBrandedRefs(text) {
7184
7390
  const segments = [];
@@ -7346,8 +7552,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7346
7552
  };
7347
7553
  }
7348
7554
  //#endregion
7349
- //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/conversation.module.css.mjs
7350
- 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}";
7555
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/conversation.module.css.mjs
7556
+ const css$4 = ".pVzKIW_surface{grid-template-rows:auto minmax(0,1fr) auto;min-width:0;height:100%;min-height:0;display:grid;overflow:hidden}.pVzKIW_surfaceHeader{border-bottom:1px solid var(--dsw-alias-border-l2);min-width:0;padding:14px clamp(18px,3vw,36px) 12px}.pVzKIW_headerRow{justify-content:space-between;align-items:flex-start;gap:16px;min-width:0;max-width:880px;margin:0 auto;display:flex}.pVzKIW_headerCopy{min-width:0}.pVzKIW_headerCopy h1{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;font-size:20px;font-weight:600;line-height:28px}.pVzKIW_headerCopy p{color:var(--dsw-alias-label-secondary);margin:3px 0 0;font-size:13px;line-height:20px}.pVzKIW_headerActions{flex:none;align-items:center;gap:6px;display:flex}.pVzKIW_backRow{max-width:880px;margin:0 auto 8px}.pVzKIW_timeline{overscroll-behavior:contain;scrollbar-gutter:stable;min-height:0;padding:12px clamp(18px,3vw,36px) 24px;overflow:hidden auto}.pVzKIW_timelineContent{flex-direction:column;min-width:0;max-width:880px;min-height:100%;margin:0 auto;display:flex}.pVzKIW_emptySurface{margin:auto;padding:32px 0}.pVzKIW_emptySurface .pVzKIW_emptyState{text-align:center;justify-items:center}.pVzKIW_timelineAction{justify-content:center;padding:2px 0 8px;display:flex}.pVzKIW_messageRow{gap:10px;padding:10px 0;display:flex}.pVzKIW_messageRow[data-grouped]{padding-top:2px}.pVzKIW_messageRow[data-grouped] .pVzKIW_messageBody>:first-child,.pVzKIW_messageRow[data-grouped] .pVzKIW_messageBody>:first-child>:first-child{margin-top:0}.pVzKIW_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}.pVzKIW_messageRow[data-human] .pVzKIW_messageIdentity{background:var(--dsw-alias-state-business-primary)}.pVzKIW_messageRow[data-grouped] .pVzKIW_messageIdentity{visibility:hidden}.pVzKIW_messageBody{min-width:0}.pVzKIW_nameRow{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.pVzKIW_nameRow strong{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}.pVzKIW_messageTime{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:20px}.pVzKIW_messageText{white-space:pre-wrap;word-break:break-word;margin:6px 0;font-size:14px;line-height:22px}.pVzKIW_messageClamp{max-height:176px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 72%,#0000 100%);mask-image:linear-gradient(#000 72%,#0000 100%)}.pVzKIW_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}.pVzKIW_messageExpand:hover,.pVzKIW_messageExpand:focus-visible{color:var(--dsw-alias-label-primary);text-underline-offset:2px;outline:none;text-decoration:underline}.pVzKIW_messageBody .pVzKIW_messageMarkdown{font-size:14px;line-height:22px}.pVzKIW_messageBody .pVzKIW_messageMarkdown>div:first-child{color:var(--dsw-alias-label-primary);font:inherit}.pVzKIW_messageBody .pVzKIW_messageMarkdown p{margin:6px 0}.pVzKIW_messageBody .pVzKIW_messageMarkdown :where(ul,ol){margin:6px 0;padding-left:22px}.pVzKIW_messageBody .pVzKIW_messageMarkdown li+li{margin-top:2px}.pVzKIW_messageBody .pVzKIW_messageMarkdown strong{font-weight:600}.pVzKIW_messageBody .pVzKIW_messageMarkdown :where(h1,h2,h3,h4,h5,h6){margin:12px 0 4px}.pVzKIW_messageBody .pVzKIW_messageMarkdown :where(h1){font-size:17px;line-height:26px}.pVzKIW_messageBody .pVzKIW_messageMarkdown :where(h2){font-size:16px;line-height:24px}.pVzKIW_messageBody .pVzKIW_messageMarkdown :where(h3,h4,h5,h6){font-size:15px;line-height:22px}.pVzKIW_messageBody .pVzKIW_messageMarkdown pre{margin:8px 0;padding:10px 12px;font-size:13px}.pVzKIW_messageBody .pVzKIW_messageMarkdown blockquote{margin:6px 0}.pVzKIW_messageBody .pVzKIW_messageMarkdown :where(th,td){padding-block:5px}.pVzKIW_emptyState,.pVzKIW_loadingState{color:var(--dsw-alias-label-tertiary);margin:0;padding:14px 0;font-size:13px;line-height:20px}.pVzKIW_emptyState{gap:3px;display:grid}.pVzKIW_emptyState strong{color:var(--dsw-alias-label-secondary);font-weight:500}.pVzKIW_emptyState span{font-size:12px}.pVzKIW_loadingState{align-items:center;gap:8px;display:flex}.pVzKIW_loadingMark{background:var(--dsw-alias-bg-skeleton);border-radius:50%;width:8px;height:8px;animation:1.2s ease-in-out infinite pVzKIW_pulse}.pVzKIW_error,.pVzKIW_errorState{color:var(--dsw-alias-state-error-primary);max-width:880px;margin:0 auto;padding-top:6px;font-size:12px;line-height:18px}.pVzKIW_errorState{justify-content:space-between;align-items:center;gap:8px;display:flex}.pVzKIW_welcomeSurface{justify-content:center;align-items:center;min-width:0;height:100%;padding:32px;display:flex}.pVzKIW_welcome{text-align:center;max-width:420px}.pVzKIW_welcomeEyebrow{color:var(--dsw-alias-label-tertiary);text-transform:uppercase;font-size:12px;line-height:18px}.pVzKIW_welcome h1{color:var(--dsw-alias-label-primary);margin:8px 0;font-size:24px;font-weight:600;line-height:32px}.pVzKIW_welcome p{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px;line-height:20px}@keyframes pVzKIW_pulse{0%,to{opacity:.35}50%{opacity:1}}@media (width<=600px){.pVzKIW_surfaceHeader{padding:12px 12px 10px}.pVzKIW_headerRow{flex-direction:column;align-items:stretch;gap:8px}.pVzKIW_headerActions{flex-wrap:wrap}.pVzKIW_backRow{margin-bottom:6px}.pVzKIW_timeline{scrollbar-gutter:auto;padding:8px 12px 16px}.pVzKIW_messageRow{padding:8px 0}}@media (prefers-reduced-motion:reduce){.pVzKIW_loadingMark{animation:none}}.pVzKIW_messageRun{margin:2px 0;padding:3px 0}.pVzKIW_messageRow[data-grouped]:has(.pVzKIW_messageBody>button:not([data-message-expand])){margin-top:3px;padding-top:7px;position:relative}.pVzKIW_messageRow[data-grouped]:has(.pVzKIW_messageBody>button:not([data-message-expand])):before{background:var(--dsw-alias-border-l2);content:\"\";height:1px;position:absolute;inset:0 0 auto 38px}.pVzKIW_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}.pVzKIW_runDivider+.pVzKIW_messageRow[data-grouped]:has(.pVzKIW_messageBody>button:not([data-message-expand])){margin-top:0}.pVzKIW_runDivider+.pVzKIW_messageRow[data-grouped]:has(.pVzKIW_messageBody>button:not([data-message-expand])):before{content:none}.pVzKIW_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}.pVzKIW_mentionsRow{gap:4px;width:fit-content;margin-top:3px;font-size:.85em;display:flex}.pVzKIW_attachmentStrip{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}.pVzKIW_attachmentThumb{cursor:zoom-in;border:0;border-radius:8px;padding:0}.pVzKIW_attachmentThumb img{object-fit:cover;border-radius:8px;width:128px;height:96px;display:block}.pVzKIW_attachmentThumb:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,currentColor);outline-offset:1px}.pVzKIW_confirmBody{margin:0 0 8px}.pVzKIW_confirmList{gap:6px;margin:0;padding-left:18px;display:grid}.pVzKIW_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}.pVzKIW_refLink:hover{text-decoration-thickness:2px}.pVzKIW_refLink:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.pVzKIW_attachmentModal{width:min(1100px,92vw)}.pVzKIW_attachmentZoom{object-fit:contain;border-radius:12px;max-width:100%;max-height:78vh;margin:0 auto;display:block}.pVzKIW_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}.pVzKIW_attachmentChipName{text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:17px;overflow:hidden}.pVzKIW_attachmentChipSize{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:17px}";
7351
7557
  const tagId$4 = "@wowyuarm/dsh-agent-team/conversation.module.css";
7352
7558
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
7353
7559
  const tag = document.createElement("style");
@@ -7357,48 +7563,48 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7357
7563
  document.head.appendChild(tag);
7358
7564
  }
7359
7565
  var conversation_module_css_default = {
7360
- "attachmentChip": "omcBaG_attachmentChip",
7361
- "attachmentChipName": "omcBaG_attachmentChipName",
7362
- "attachmentChipSize": "omcBaG_attachmentChipSize",
7363
- "attachmentModal": "omcBaG_attachmentModal",
7364
- "attachmentStrip": "omcBaG_attachmentStrip",
7365
- "attachmentThumb": "omcBaG_attachmentThumb",
7366
- "attachmentZoom": "omcBaG_attachmentZoom",
7367
- "backRow": "omcBaG_backRow",
7368
- "confirmBody": "omcBaG_confirmBody",
7369
- "confirmList": "omcBaG_confirmList",
7370
- "emptyState": "omcBaG_emptyState",
7371
- "emptySurface": "omcBaG_emptySurface",
7372
- "error": "omcBaG_error",
7373
- "errorState": "omcBaG_errorState",
7374
- "headerActions": "omcBaG_headerActions",
7375
- "headerCopy": "omcBaG_headerCopy",
7376
- "headerRow": "omcBaG_headerRow",
7377
- "loadingMark": "omcBaG_loadingMark",
7378
- "loadingState": "omcBaG_loadingState",
7379
- "mention": "omcBaG_mention",
7380
- "mentionsRow": "omcBaG_mentionsRow",
7381
- "messageBody": "omcBaG_messageBody",
7382
- "messageClamp": "omcBaG_messageClamp",
7383
- "messageExpand": "omcBaG_messageExpand",
7384
- "messageIdentity": "omcBaG_messageIdentity",
7385
- "messageMarkdown": "omcBaG_messageMarkdown",
7386
- "messageRow": "omcBaG_messageRow",
7387
- "messageRun": "omcBaG_messageRun",
7388
- "messageText": "omcBaG_messageText",
7389
- "messageTime": "omcBaG_messageTime",
7390
- "nameRow": "omcBaG_nameRow",
7391
- "pulse": "omcBaG_pulse",
7392
- "refLink": "omcBaG_refLink",
7393
- "runDivider": "omcBaG_runDivider",
7394
- "surface": "omcBaG_surface",
7395
- "surfaceHeader": "omcBaG_surfaceHeader",
7396
- "timeline": "omcBaG_timeline",
7397
- "timelineAction": "omcBaG_timelineAction",
7398
- "timelineContent": "omcBaG_timelineContent",
7399
- "welcome": "omcBaG_welcome",
7400
- "welcomeEyebrow": "omcBaG_welcomeEyebrow",
7401
- "welcomeSurface": "omcBaG_welcomeSurface"
7566
+ "attachmentChip": "pVzKIW_attachmentChip",
7567
+ "attachmentChipName": "pVzKIW_attachmentChipName",
7568
+ "attachmentChipSize": "pVzKIW_attachmentChipSize",
7569
+ "attachmentModal": "pVzKIW_attachmentModal",
7570
+ "attachmentStrip": "pVzKIW_attachmentStrip",
7571
+ "attachmentThumb": "pVzKIW_attachmentThumb",
7572
+ "attachmentZoom": "pVzKIW_attachmentZoom",
7573
+ "backRow": "pVzKIW_backRow",
7574
+ "confirmBody": "pVzKIW_confirmBody",
7575
+ "confirmList": "pVzKIW_confirmList",
7576
+ "emptyState": "pVzKIW_emptyState",
7577
+ "emptySurface": "pVzKIW_emptySurface",
7578
+ "error": "pVzKIW_error",
7579
+ "errorState": "pVzKIW_errorState",
7580
+ "headerActions": "pVzKIW_headerActions",
7581
+ "headerCopy": "pVzKIW_headerCopy",
7582
+ "headerRow": "pVzKIW_headerRow",
7583
+ "loadingMark": "pVzKIW_loadingMark",
7584
+ "loadingState": "pVzKIW_loadingState",
7585
+ "mention": "pVzKIW_mention",
7586
+ "mentionsRow": "pVzKIW_mentionsRow",
7587
+ "messageBody": "pVzKIW_messageBody",
7588
+ "messageClamp": "pVzKIW_messageClamp",
7589
+ "messageExpand": "pVzKIW_messageExpand",
7590
+ "messageIdentity": "pVzKIW_messageIdentity",
7591
+ "messageMarkdown": "pVzKIW_messageMarkdown",
7592
+ "messageRow": "pVzKIW_messageRow",
7593
+ "messageRun": "pVzKIW_messageRun",
7594
+ "messageText": "pVzKIW_messageText",
7595
+ "messageTime": "pVzKIW_messageTime",
7596
+ "nameRow": "pVzKIW_nameRow",
7597
+ "pulse": "pVzKIW_pulse",
7598
+ "refLink": "pVzKIW_refLink",
7599
+ "runDivider": "pVzKIW_runDivider",
7600
+ "surface": "pVzKIW_surface",
7601
+ "surfaceHeader": "pVzKIW_surfaceHeader",
7602
+ "timeline": "pVzKIW_timeline",
7603
+ "timelineAction": "pVzKIW_timelineAction",
7604
+ "timelineContent": "pVzKIW_timelineContent",
7605
+ "welcome": "pVzKIW_welcome",
7606
+ "welcomeEyebrow": "pVzKIW_welcomeEyebrow",
7607
+ "welcomeSurface": "pVzKIW_welcomeSurface"
7402
7608
  };
7403
7609
  //#endregion
7404
7610
  //#region src/client/TeamMessage.tsx
@@ -7425,6 +7631,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7425
7631
  ]);
7426
7632
  const taskLabel = (0, react.useCallback)((taskNumber) => t?.("taskLabel", { number: taskNumber }) ?? `Task #${taskNumber}`, [t]);
7427
7633
  const refLabel = (0, react.useCallback)((ref) => ref.startsWith("thread:") ? t?.("threadLabel") ?? "Thread" : ref.startsWith("channel:") ? t?.("channels") ?? "Channels" : ref, [t]);
7634
+ const markdownLabels = (0, react.useMemo)(() => ({
7635
+ code: {
7636
+ copyLabel: t?.("copyCode") ?? "Copy",
7637
+ copiedLabel: t?.("copiedCode") ?? "Copied"
7638
+ },
7639
+ footnotes: t?.("markdownFootnotes") ?? "Footnotes"
7640
+ }), [t]);
7428
7641
  const [expanded, setExpanded] = (0, react.useState)(false);
7429
7642
  const clampable = shouldClampMessage(displayBody);
7430
7643
  const clamped = clampable && !expanded;
@@ -7480,7 +7693,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7480
7693
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7481
7694
  ref: markdownRef,
7482
7695
  className: conversation_module_css_default.messageMarkdown,
7483
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, { text: displayBody }, `${displayBody}:${onOpenRef === void 0 ? "literal" : "refs"}`)
7696
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, {
7697
+ text: displayBody,
7698
+ labels: markdownLabels
7699
+ }, `${displayBody}:${onOpenRef === void 0 ? "literal" : "refs"}`)
7484
7700
  });
7485
7701
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
7486
7702
  className: conversation_module_css_default.messageRow,
@@ -7645,6 +7861,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7645
7861
  return splitBrandedRefs(text).map((segment, index) => {
7646
7862
  if (segment.ref === void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Fragment, { children: segment.text }, index);
7647
7863
  const resolved = cachedResolvedTaskRef(segment.ref);
7864
+ if (segment.ref.startsWith("task:") && resolved === void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Fragment, { children: segment.text }, index);
7648
7865
  const label = resolved !== void 0 && segment.ref.startsWith("task:") ? taskLabel(resolved.taskNumber) : refLabel(segment.ref);
7649
7866
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
7650
7867
  type: "button",
@@ -7671,6 +7888,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7671
7888
  open: true,
7672
7889
  ...conversation_module_css_default.attachmentModal === void 0 ? {} : { className: conversation_module_css_default.attachmentModal },
7673
7890
  title: zoomed.name,
7891
+ closeLabel: t?.("close") ?? "Close",
7674
7892
  onClose: () => {
7675
7893
  setZoomed(void 0);
7676
7894
  },
@@ -7905,8 +8123,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7905
8123
  return blocks;
7906
8124
  }
7907
8125
  //#endregion
7908
- //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/channel.module.css.mjs
7909
- 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}}";
8126
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/channel.module.css.mjs
8127
+ const css$3 = ".rVidsG_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}.rVidsG_headerMeta span+span:before{content:\"·\";margin-right:6px}.rVidsG_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}.rVidsG_taskFooter:hover,.rVidsG_taskFooter:focus-visible{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary)}.rVidsG_taskFooter:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.rVidsG_taskNumber{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600;line-height:18px}.rVidsG_taskStatus,.rVidsG_taskCount{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:18px}.rVidsG_taskDot{flex:none;align-items:center;width:8px;display:inline-flex}.rVidsG_taskArrow{color:var(--dsw-alias-label-tertiary);align-items:center;transition:transform .12s;display:inline-flex}.rVidsG_taskFooter:hover .rVidsG_taskArrow,.rVidsG_taskFooter:focus-visible .rVidsG_taskArrow{transform:translate(2px)}.rVidsG_memberList{gap:3px;display:grid}.rVidsG_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}.rVidsG_memberRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.rVidsG_memberCopy{min-width:0;display:grid}.rVidsG_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}.rVidsG_memberCopy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.rVidsG_memberAction{min-width:60px}.rVidsG_memberError{color:var(--dsw-alias-state-error-primary);grid-column:2/-1;margin:2px 0;font-size:11px;line-height:16px}.rVidsG_modalBody{max-height:min(65vh,520px);overflow-y:auto}@media (width<=600px){.rVidsG_memberRow{grid-template-columns:14px minmax(0,1fr)}.rVidsG_memberAction{grid-column:2;justify-self:start;margin-top:3px}}@media (prefers-reduced-motion:reduce){.rVidsG_taskFooter,.rVidsG_taskArrow{transition:none}.rVidsG_taskFooter:hover .rVidsG_taskArrow,.rVidsG_taskFooter:focus-visible .rVidsG_taskArrow{transform:none}}";
7910
8128
  const tagId$3 = "@wowyuarm/dsh-agent-team/channel.module.css";
7911
8129
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
7912
8130
  const tag = document.createElement("style");
@@ -7916,24 +8134,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7916
8134
  document.head.appendChild(tag);
7917
8135
  }
7918
8136
  var channel_module_css_default = {
7919
- "headerMeta": "MYaRJa_headerMeta",
7920
- "memberAction": "MYaRJa_memberAction",
7921
- "memberCopy": "MYaRJa_memberCopy",
7922
- "memberError": "MYaRJa_memberError",
7923
- "memberList": "MYaRJa_memberList",
7924
- "memberRow": "MYaRJa_memberRow",
7925
- "modalBody": "MYaRJa_modalBody",
7926
- "taskArrow": "MYaRJa_taskArrow",
7927
- "taskCount": "MYaRJa_taskCount",
7928
- "taskDot": "MYaRJa_taskDot",
7929
- "taskDotQuiet": "MYaRJa_taskDotQuiet",
7930
- "taskFooter": "MYaRJa_taskFooter",
7931
- "taskNumber": "MYaRJa_taskNumber",
7932
- "taskStatus": "MYaRJa_taskStatus"
8137
+ "headerMeta": "rVidsG_headerMeta",
8138
+ "memberAction": "rVidsG_memberAction",
8139
+ "memberCopy": "rVidsG_memberCopy",
8140
+ "memberError": "rVidsG_memberError",
8141
+ "memberList": "rVidsG_memberList",
8142
+ "memberRow": "rVidsG_memberRow",
8143
+ "modalBody": "rVidsG_modalBody",
8144
+ "taskArrow": "rVidsG_taskArrow",
8145
+ "taskCount": "rVidsG_taskCount",
8146
+ "taskDot": "rVidsG_taskDot",
8147
+ "taskFooter": "rVidsG_taskFooter",
8148
+ "taskNumber": "rVidsG_taskNumber",
8149
+ "taskStatus": "rVidsG_taskStatus"
7933
8150
  };
7934
8151
  //#endregion
7935
- //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/thread.module.css.mjs
7936
- 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);z-index:2;border-radius:999px;justify-content:center;align-items:center;width:fit-content;margin:8px auto;padding:4px 12px;font-size:12px;line-height:18px;display:flex;position:sticky;bottom:8px}.-Qiwua_newUpdatesJump{color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;line-height:inherit;background:0 0;border:0;padding:0}.-Qiwua_newUpdatesJump:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px;border-radius:6px}.-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)}}";
8152
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/thread.module.css.mjs
8153
+ const css$2 = ".QyE3bW_titleLine{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.QyE3bW_titleLine h1{margin:0}.QyE3bW_workSection{border-top:1px solid var(--dsw-alias-border-l2);max-width:880px;margin:12px auto 0;padding-top:8px}.QyE3bW_riskSection{border-top:1px solid var(--dsw-alias-border-l2);max-width:880px;margin:12px auto 0;padding-top:10px}.QyE3bW_riskSection h2{color:var(--dsw-alias-state-error-primary);margin:0 0 5px;font-size:12px;font-weight:600;line-height:18px}.QyE3bW_riskRow{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin:3px 0;font-size:12px;line-height:18px;display:flex}.QyE3bW_claimList{gap:4px;padding:4px 0 2px 22px;display:grid}.QyE3bW_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}.QyE3bW_claimRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.QyE3bW_claimOwner{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:18px;overflow:hidden}.QyE3bW_claimDirection{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;min-width:0;font-size:12px;line-height:18px}.QyE3bW_claimState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px;line-height:18px}.QyE3bW_emptyClaims{color:var(--dsw-alias-label-tertiary);margin:0;padding:5px 6px;font-size:11px;line-height:18px}.QyE3bW_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}.QyE3bW_activityText{overflow-wrap:anywhere;min-width:0}.QyE3bW_activityMark{background:var(--dsw-alias-border-l3);border-radius:50%;flex:0 0 5px;width:5px;height:5px}.QyE3bW_activityRow:has(+.QyE3bW_activityRow),.QyE3bW_activityRow+.QyE3bW_activityRow{text-align:left;justify-content:flex-start;padding-left:38px}.QyE3bW_historySection{border-bottom:1px solid var(--dsw-alias-border-l2);max-width:100%;margin:0 auto 12px;padding-bottom:10px}.QyE3bW_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}.QyE3bW_publicSection{min-width:0}.QyE3bW_unreadBoundary{color:var(--dsw-alias-label-tertiary);align-items:center;gap:10px;margin:10px 0 6px;font-size:11px;line-height:16px;display:flex}.QyE3bW_unreadBoundary:before,.QyE3bW_unreadBoundary:after{background:var(--dsw-alias-border-l3);content:\"\";flex:1;height:1px}.QyE3bW_unreadBoundary span{flex:none}.QyE3bW_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}.QyE3bW_daySeparator:before,.QyE3bW_daySeparator:after{background:var(--dsw-alias-border-l2);content:\"\";flex:1;height:1px}.QyE3bW_daySeparator span{flex:none}.QyE3bW_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);z-index:2;border-radius:999px;justify-content:center;align-items:center;width:fit-content;margin:8px auto;padding:4px 12px;font-size:12px;line-height:18px;display:flex;position:sticky;bottom:8px}.QyE3bW_newUpdatesJump{color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;line-height:inherit;background:0 0;border:0;padding:0}.QyE3bW_newUpdatesJump:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px;border-radius:6px}.QyE3bW_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}.QyE3bW_closedBar{flex-direction:column;align-items:center;display:flex}.QyE3bW_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){.QyE3bW_claimRow{grid-template-columns:14px minmax(0,1fr) auto;align-items:start}.QyE3bW_claimState{grid-area:1/3;justify-self:end}.QyE3bW_claimDirection{grid-column:2/-1}.QyE3bW_activityRow{padding-inline:0}.QyE3bW_newUpdates{max-width:calc(100% - 16px)}}";
7937
8154
  const tagId$2 = "@wowyuarm/dsh-agent-team/thread.module.css";
7938
8155
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
7939
8156
  const tag = document.createElement("style");
@@ -7943,28 +8160,28 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7943
8160
  document.head.appendChild(tag);
7944
8161
  }
7945
8162
  var thread_module_css_default = {
7946
- "activityMark": "-Qiwua_activityMark",
7947
- "activityRow": "-Qiwua_activityRow",
7948
- "activityText": "-Qiwua_activityText",
7949
- "claimDirection": "-Qiwua_claimDirection",
7950
- "claimList": "-Qiwua_claimList",
7951
- "claimOwner": "-Qiwua_claimOwner",
7952
- "claimRow": "-Qiwua_claimRow",
7953
- "claimState": "-Qiwua_claimState",
7954
- "closedBar": "-Qiwua_closedBar",
7955
- "closedNotice": "-Qiwua_closedNotice",
7956
- "daySeparator": "-Qiwua_daySeparator",
7957
- "emptyClaims": "-Qiwua_emptyClaims",
7958
- "historySection": "-Qiwua_historySection",
7959
- "newUpdates": "-Qiwua_newUpdates",
7960
- "newUpdatesJump": "-Qiwua_newUpdatesJump",
7961
- "publicSection": "-Qiwua_publicSection",
7962
- "riskRow": "-Qiwua_riskRow",
7963
- "riskSection": "-Qiwua_riskSection",
7964
- "taskTitle": "-Qiwua_taskTitle",
7965
- "titleLine": "-Qiwua_titleLine",
7966
- "unreadBoundary": "-Qiwua_unreadBoundary",
7967
- "workSection": "-Qiwua_workSection"
8163
+ "activityMark": "QyE3bW_activityMark",
8164
+ "activityRow": "QyE3bW_activityRow",
8165
+ "activityText": "QyE3bW_activityText",
8166
+ "claimDirection": "QyE3bW_claimDirection",
8167
+ "claimList": "QyE3bW_claimList",
8168
+ "claimOwner": "QyE3bW_claimOwner",
8169
+ "claimRow": "QyE3bW_claimRow",
8170
+ "claimState": "QyE3bW_claimState",
8171
+ "closedBar": "QyE3bW_closedBar",
8172
+ "closedNotice": "QyE3bW_closedNotice",
8173
+ "daySeparator": "QyE3bW_daySeparator",
8174
+ "emptyClaims": "QyE3bW_emptyClaims",
8175
+ "historySection": "QyE3bW_historySection",
8176
+ "newUpdates": "QyE3bW_newUpdates",
8177
+ "newUpdatesJump": "QyE3bW_newUpdatesJump",
8178
+ "publicSection": "QyE3bW_publicSection",
8179
+ "riskRow": "QyE3bW_riskRow",
8180
+ "riskSection": "QyE3bW_riskSection",
8181
+ "taskTitle": "QyE3bW_taskTitle",
8182
+ "titleLine": "QyE3bW_titleLine",
8183
+ "unreadBoundary": "QyE3bW_unreadBoundary",
8184
+ "workSection": "QyE3bW_workSection"
7968
8185
  };
7969
8186
  //#endregion
7970
8187
  //#region src/client/TeamChannelPage.tsx
@@ -8039,7 +8256,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8039
8256
  const timeline = useTimelineScroll(`${view?.items.length ?? 0}:${channelLastItem?.message.messageRef ?? ""}`);
8040
8257
  const channel = view?.channels.find((item) => item.channelRef === channelRef);
8041
8258
  const channelMemberIds = new Set(view?.members.filter((item) => item.channelRef === channelRef).map((item) => item.memberId) ?? []);
8042
- const channelMembers = members.filter((status) => channelMemberIds.has(status.member.memberId) && status.member.state !== "inactive");
8259
+ const channelMembers = members.filter((status) => channelMemberIds.has(status.member.memberId) && status.member.state !== "inactive" && status.member.state !== "archived");
8043
8260
  const onlineCount = channelMembers.filter((status) => status.presence === "available" || status.presence === "working").length;
8044
8261
  const messageSender = (item) => item.message.sender;
8045
8262
  const mentionHandlesMap = new Map(members.map((status) => [status.member.memberId, status.member.handle.replace(/^@/, "")]));
@@ -8268,7 +8485,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8268
8485
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8269
8486
  ref: memberListRef,
8270
8487
  className: channel_module_css_default.memberList,
8271
- children: members.filter((status) => status.member.state !== "inactive").map((status) => {
8488
+ children: members.filter((status) => status.member.state !== "inactive" && status.member.state !== "archived").map((status) => {
8272
8489
  const joined = channelMemberIds.has(status.member.memberId);
8273
8490
  const rowPending = membership.pending.has(status.member.memberId);
8274
8491
  const disabled = rowPending || !joined && status.presence === "unavailable";
@@ -8398,16 +8615,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8398
8615
  children: [
8399
8616
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
8400
8617
  className: channel_module_css_default.taskDot,
8401
- children: (() => {
8402
- const dot = taskStatusDot(item.task.status);
8403
- return dot === "ongoing" || dot === "warning" || dot === "done" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
8404
- size: 8,
8405
- state: dot
8406
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
8407
- className: channel_module_css_default.taskDotQuiet,
8408
- "data-variant": dot
8409
- });
8410
- })()
8618
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamStateDot, {
8619
+ size: 8,
8620
+ state: taskStatusDot(item.task.status)
8621
+ })
8411
8622
  }),
8412
8623
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
8413
8624
  className: channel_module_css_default.taskNumber,
@@ -8508,7 +8719,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8508
8719
  return new Map(facts.map((fact) => [factKey(fact.fact), fact]));
8509
8720
  }
8510
8721
  function TeamThreadPage(props) {
8511
- const { workspaceId, channelRef, taskRef, threadRef, taskNumber, backToWorkspace, selectChannel, selectThread, resolveTaskRefs, putAttachment, loadChannels, readThread, loadThreadHistory, subscribeChanges, loadMembers, drafts, getAttachment, reply, changeTask, promoteThread, t } = props;
8722
+ const { workspaceId, channelRef, taskRef, threadRef, taskNumber, backToWorkspace, selectChannel, selectThread, resolveTaskRefs, putAttachment, loadChannels, readThread, loadThreadHistory, threadObservations, subscribeChanges, loadMembers, drafts, getAttachment, reply, changeTask, promoteThread, t } = props;
8512
8723
  const threadRequest = {
8513
8724
  threadRef,
8514
8725
  ...taskRef === void 0 ? {} : { taskRef }
@@ -8516,6 +8727,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8516
8727
  const [projection, setProjection] = (0, react.useState)();
8517
8728
  const [channelView, setChannelView] = (0, react.useState)();
8518
8729
  const [members, setMembers] = (0, react.useState)([]);
8730
+ const [followerIds, setFollowerIds] = (0, react.useState)(() => /* @__PURE__ */ new Set());
8519
8731
  const [currentFacts, setCurrentFacts] = (0, react.useState)([]);
8520
8732
  const [olderFacts, setOlderFacts] = (0, react.useState)([]);
8521
8733
  const [readFacts, setReadFacts] = (0, react.useState)([]);
@@ -8644,10 +8856,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8644
8856
  });
8645
8857
  if (additions.length === 0) return;
8646
8858
  if (!timeline.isPinned()) setNewFactsCount((current) => current + additions.length);
8647
- const priorSequence = sequenceRef.current;
8648
- if (await readCurrent(true)) return;
8649
- if (!mountedRef.current || sequenceRef.current !== priorSequence + 1) return;
8650
- setNewFactsCount((current) => current + additions.length);
8859
+ await readCurrent(true);
8860
+ } catch {}
8861
+ };
8862
+ const refreshFollowers = async () => {
8863
+ try {
8864
+ const result = await threadObservations({
8865
+ workspaceId,
8866
+ ...threadRequest
8867
+ });
8868
+ if (!mountedRef.current || !result.ok) return;
8869
+ setFollowerIds(new Set(result.value.followers));
8651
8870
  } catch {}
8652
8871
  };
8653
8872
  (0, react.useEffect)(() => {
@@ -8656,6 +8875,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8656
8875
  setProjection(void 0);
8657
8876
  setChannelView(void 0);
8658
8877
  setMembers([]);
8878
+ setFollowerIds(/* @__PURE__ */ new Set());
8659
8879
  setCurrentFacts([]);
8660
8880
  currentFactsRef.current = [];
8661
8881
  setOlderFacts([]);
@@ -8670,15 +8890,22 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8670
8890
  sequenceRef.current = sequence;
8671
8891
  setLoading(true);
8672
8892
  (async () => {
8673
- const [read, history] = await Promise.all([readThread({
8674
- requestId: readRequestIdRef.current,
8675
- workspaceId,
8676
- ...threadRequest
8677
- }), loadThreadHistory({
8678
- workspaceId,
8679
- ...threadRequest,
8680
- limit: 20
8681
- }).catch(() => void 0)]);
8893
+ const [read, history, observations] = await Promise.all([
8894
+ readThread({
8895
+ requestId: readRequestIdRef.current,
8896
+ workspaceId,
8897
+ ...threadRequest
8898
+ }),
8899
+ loadThreadHistory({
8900
+ workspaceId,
8901
+ ...threadRequest,
8902
+ limit: 20
8903
+ }).catch(() => void 0),
8904
+ threadObservations({
8905
+ workspaceId,
8906
+ ...threadRequest
8907
+ }).catch(() => void 0)
8908
+ ]);
8682
8909
  if (!mountedRef.current || sequence !== sequenceRef.current) return;
8683
8910
  if (!read.ok) {
8684
8911
  setError(read.error.message);
@@ -8696,6 +8923,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8696
8923
  setHistoryCursor(history.value.cursor);
8697
8924
  setHistoryHasMore(history.value.hasMore);
8698
8925
  }
8926
+ if (observations !== void 0 && observations.ok) setFollowerIds(new Set(observations.value.followers));
8699
8927
  setError(void 0);
8700
8928
  setLoading(false);
8701
8929
  await drainUnread();
@@ -8711,6 +8939,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8711
8939
  return;
8712
8940
  }
8713
8941
  refreshPassiveFacts();
8942
+ refreshFollowers();
8714
8943
  }), subscribeChanges({
8715
8944
  kind: "workspace",
8716
8945
  workspaceId
@@ -8740,6 +8969,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8740
8969
  olderFacts,
8741
8970
  timeline
8742
8971
  ]);
8972
+ const handleTimelineScroll = () => {
8973
+ timeline.onScroll();
8974
+ if (timeline.isPinned()) setNewFactsCount(0);
8975
+ };
8743
8976
  const loadOlder = async () => {
8744
8977
  if (historyHasMore === false && historyCursor === void 0) return;
8745
8978
  const beforeSequence = historyCursor ?? minSequence(currentFactsRef.current);
@@ -9132,7 +9365,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9132
9365
  className: conversation_module_css_default.headerCopy,
9133
9366
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9134
9367
  className: thread_module_css_default.titleLine,
9135
- 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) })]
9368
+ 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.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Pill, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamStateDot, {
9369
+ size: 8,
9370
+ state: taskStatusDot(task.status)
9371
+ }), formatTaskStatus(task.status, t)] })]
9136
9372
  }), taskTitle !== void 0 && taskTitle !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
9137
9373
  className: thread_module_css_default.taskTitle,
9138
9374
  title: taskTitle,
@@ -9290,7 +9526,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9290
9526
  }),
9291
9527
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
9292
9528
  ref: timeline.ref,
9293
- onScroll: timeline.onScroll,
9529
+ onScroll: handleTimelineScroll,
9294
9530
  className: conversation_module_css_default.timeline,
9295
9531
  "aria-label": t("timelineLabel"),
9296
9532
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -9356,7 +9592,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9356
9592
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
9357
9593
  type: "button",
9358
9594
  className: thread_module_css_default.newUpdatesJump,
9359
- onClick: timeline.scrollToBottom,
9595
+ onClick: () => {
9596
+ setNewFactsCount(0);
9597
+ timeline.scrollToBottom();
9598
+ },
9360
9599
  children: t("newUpdatesJump", { count: newFactsCount })
9361
9600
  })
9362
9601
  })
@@ -9384,6 +9623,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9384
9623
  })]
9385
9624
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamComposer, {
9386
9625
  members: channelMembers,
9626
+ followerMemberIds: followerIds,
9387
9627
  recipients,
9388
9628
  draft,
9389
9629
  pending,
@@ -9414,7 +9654,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9414
9654
  }
9415
9655
  //#endregion
9416
9656
  //#region src/client/TeamConversation.tsx
9417
- function TeamConversation({ t, useWorkspaces, navigation, drafts, putAttachment, getAttachment, loadChannels, readThread, loadThreadHistory, subscribeChanges, loadMembers, sendMessage, joinChannel, removeChannelMember, reply, changeTask, promoteThread, selectThread, selectChannel, backToWorkspace, backToChannels, resolveTaskRefs }) {
9657
+ function TeamConversation({ t, useWorkspaces, navigation, drafts, putAttachment, getAttachment, loadChannels, readThread, loadThreadHistory, threadObservations, subscribeChanges, loadMembers, sendMessage, joinChannel, removeChannelMember, reply, changeTask, promoteThread, selectThread, selectChannel, backToWorkspace, backToChannels, resolveTaskRefs }) {
9418
9658
  const navigationState = (0, react.useSyncExternalStore)(navigation.subscribe, navigation.getSnapshot, navigation.getSnapshot);
9419
9659
  const current = useWorkspaces((state) => state.items).find((workspace) => workspace.workspaceId === navigationState.workspaceId);
9420
9660
  if (current !== void 0 && navigationState.threadRef !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamThreadPage, {
@@ -9433,6 +9673,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9433
9673
  readThread,
9434
9674
  loadChannels,
9435
9675
  loadThreadHistory,
9676
+ threadObservations,
9436
9677
  subscribeChanges,
9437
9678
  loadMembers,
9438
9679
  reply,
@@ -9484,8 +9725,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9484
9725
  });
9485
9726
  }
9486
9727
  //#endregion
9487
- //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/sidebar.module.css.mjs
9488
- 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}";
9728
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/sidebar.module.css.mjs
9729
+ const css$1 = "html[data-agent-team-mode=team] button[class*=newSession]{display:none}.Xvc-qG_workspaceBrowser{flex-direction:column;height:100%;min-height:0;padding:0 8px 8px;display:flex}.Xvc-qG_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}.Xvc-qG_railButton:hover,.Xvc-qG_railButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);outline:none}.Xvc-qG_workspaceList{flex-direction:column;gap:2px;padding-bottom:2px;display:flex}.Xvc-qG_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}.Xvc-qG_workspaceRow:hover,.Xvc-qG_workspaceRow:focus-visible,.Xvc-qG_workspaceRow[aria-current=page]{background:var(--dsw-alias-interactive-bg-hover);outline:none}.Xvc-qG_workspaceRow:focus-visible{box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l3)}.Xvc-qG_workspaceIcon{color:var(--dsw-alias-label-tertiary);flex:0 0 16px;justify-content:center;align-items:center;height:20px;display:inline-flex}.Xvc-qG_workspaceRow[data-selected] .Xvc-qG_workspaceIcon{color:var(--dsw-alias-state-business-primary)}.Xvc-qG_workspaceCopy{min-width:0;display:flex}.Xvc-qG_workspaceCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:400;line-height:20px;overflow:hidden}.Xvc-qG_emptyState{color:var(--dsw-alias-label-tertiary);margin:8px;font-size:12px;line-height:18px}.Xvc-qG_railWorkspace{flex-direction:column;align-items:center;gap:8px;padding-top:8px;display:flex}.Xvc-qG_railButton{border-radius:50%;width:36px;height:36px}.Xvc-qG_railButton[data-active]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.Xvc-qG_workspaceSection{flex-direction:column;flex:1;gap:4px;min-height:0;margin-top:2px;display:flex;overflow-y:auto}.Xvc-qG_section{flex-direction:column;display:flex}.Xvc-qG_sectionHeader{align-items:center;min-height:26px;padding-right:2px;display:flex}.Xvc-qG_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}.Xvc-qG_sectionToggle:focus-visible{outline:none}.Xvc-qG_sectionToggle:hover .Xvc-qG_sectionChevron,.Xvc-qG_sectionToggle:focus-visible .Xvc-qG_sectionChevron{color:var(--dsw-alias-label-primary)}.Xvc-qG_sectionChevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .12s,color .12s}.Xvc-qG_sectionToggle[aria-expanded=false] .Xvc-qG_sectionChevron{transform:rotate(-90deg)}.Xvc-qG_sectionTitle{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Xvc-qG_sectionActions{align-items:center;margin-left:auto;display:inline-flex}.Xvc-qG_panel{flex-direction:column;display:flex}.Xvc-qG_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}.Xvc-qG_iconButton:hover,.Xvc-qG_iconButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);outline:none}.Xvc-qG_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}.Xvc-qG_textButton:hover,.Xvc-qG_textButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);outline:none}.Xvc-qG_textButton:disabled{cursor:not-allowed;opacity:.4}.Xvc-qG_channelList,.Xvc-qG_agentList{flex-direction:column;gap:1px;padding:0 4px 4px;display:flex}.Xvc-qG_sidebarRowDragging{opacity:.5}.Xvc-qG_sidebarRowDropBefore,.Xvc-qG_sidebarRowDropAfter{position:relative}.Xvc-qG_sidebarRowDropBefore:before,.Xvc-qG_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}.Xvc-qG_sidebarRowDropBefore:before{top:-7px}.Xvc-qG_sidebarRowDropAfter:after{bottom:-7px}.Xvc-qG_channelRow{color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;min-height:30px;display:flex;position:relative}.Xvc-qG_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}.Xvc-qG_channelSelect:focus-visible{outline:none}.Xvc-qG_channelName{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:400;line-height:18px;overflow:hidden}.Xvc-qG_agentRow{color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;min-height:38px;display:flex;position:relative}.Xvc-qG_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}.Xvc-qG_agentSelect:focus-visible{outline:none}.Xvc-qG_agentSelect[aria-current=page]{background:var(--dsw-alias-interactive-bg-hover);border-radius:8px}.Xvc-qG_agentRow:hover .Xvc-qG_agentSelect[aria-current=page],.Xvc-qG_agentRow:focus-within .Xvc-qG_agentSelect[aria-current=page],.Xvc-qG_agentRow[data-menu-open] .Xvc-qG_agentSelect[aria-current=page]{background:0 0}.Xvc-qG_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}.Xvc-qG_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}.Xvc-qG_agentCopy{flex-direction:column;min-width:0;display:flex}.Xvc-qG_agentCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:400;line-height:17px;overflow:hidden}.Xvc-qG_agentCopy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:13px;overflow:hidden}.Xvc-qG_unavailableDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:7px;height:7px;display:inline-block}.Xvc-qG_rowMenu{flex:none;align-items:center;padding-right:4px;display:none}.Xvc-qG_channelRow:hover .Xvc-qG_rowMenu,.Xvc-qG_channelRow:focus-within .Xvc-qG_rowMenu,.Xvc-qG_channelRow[data-menu-open] .Xvc-qG_rowMenu,.Xvc-qG_agentRow:hover .Xvc-qG_rowMenu,.Xvc-qG_agentRow:focus-within .Xvc-qG_rowMenu,.Xvc-qG_agentRow[data-menu-open] .Xvc-qG_rowMenu{display:inline-flex}.Xvc-qG_channelRow[data-menu-open],.Xvc-qG_agentRow[data-menu-open],.Xvc-qG_channelRow:hover,.Xvc-qG_agentRow:hover,.Xvc-qG_channelRow:focus-within,.Xvc-qG_agentRow:focus-within,.Xvc-qG_channelRow[aria-current=page]{background:var(--dsw-alias-interactive-bg-hover)}.Xvc-qG_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}.Xvc-qG_rowMenuButton:hover,.Xvc-qG_rowMenuButton:focus-visible{color:var(--dsw-alias-label-primary);outline:none}.Xvc-qG_retryError{color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:center;gap:8px;padding:8px;font-size:11px;display:flex}.Xvc-qG_rowAlert{color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;padding:2px 8px 6px;font-size:11px}.Xvc-qG_editDescription{color:var(--dsw-alias-label-secondary);margin:0 0 10px;font-size:12px;line-height:18px}.Xvc-qG_editMemberList{gap:3px;display:grid}.Xvc-qG_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}.Xvc-qG_editMemberRowChannels{grid-template-columns:minmax(0,1fr) auto}.Xvc-qG_editMemberRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.Xvc-qG_editMemberCopy{min-width:0;display:grid}.Xvc-qG_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}.Xvc-qG_editMemberCopy small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.Xvc-qG_editChannelName{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:400;line-height:18px;overflow:hidden}.Xvc-qG_editMemberRow button{min-width:60px}.Xvc-qG_editHint{color:var(--dsw-alias-label-tertiary);margin:0;font-size:11px;line-height:16px}.Xvc-qG_menuHint{color:var(--dsw-alias-label-tertiary);margin-left:4px;font-size:10px;line-height:14px}.Xvc-qG_rowError{color:var(--dsw-alias-state-error-primary);grid-column:1/-1;margin:2px 0;font-size:11px;line-height:16px}";
9489
9730
  const tagId$1 = "@wowyuarm/dsh-agent-team/sidebar.module.css";
9490
9731
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
9491
9732
  const tag = document.createElement("style");
@@ -9495,51 +9736,51 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9495
9736
  document.head.appendChild(tag);
9496
9737
  }
9497
9738
  var sidebar_module_css_default = {
9498
- "agentAvatar": "d0xfxa_agentAvatar",
9499
- "agentAvatarBadge": "d0xfxa_agentAvatarBadge",
9500
- "agentCopy": "d0xfxa_agentCopy",
9501
- "agentList": "d0xfxa_agentList",
9502
- "agentRow": "d0xfxa_agentRow",
9503
- "agentSelect": "d0xfxa_agentSelect",
9504
- "channelList": "d0xfxa_channelList",
9505
- "channelName": "d0xfxa_channelName",
9506
- "channelRow": "d0xfxa_channelRow",
9507
- "channelSelect": "d0xfxa_channelSelect",
9508
- "editChannelName": "d0xfxa_editChannelName",
9509
- "editDescription": "d0xfxa_editDescription",
9510
- "editHint": "d0xfxa_editHint",
9511
- "editMemberCopy": "d0xfxa_editMemberCopy",
9512
- "editMemberList": "d0xfxa_editMemberList",
9513
- "editMemberRow": "d0xfxa_editMemberRow",
9514
- "editMemberRowChannels": "d0xfxa_editMemberRowChannels",
9515
- "emptyState": "d0xfxa_emptyState",
9516
- "iconButton": "d0xfxa_iconButton",
9517
- "menuHint": "d0xfxa_menuHint",
9518
- "panel": "d0xfxa_panel",
9519
- "railButton": "d0xfxa_railButton",
9520
- "railWorkspace": "d0xfxa_railWorkspace",
9521
- "retryError": "d0xfxa_retryError",
9522
- "rowAlert": "d0xfxa_rowAlert",
9523
- "rowError": "d0xfxa_rowError",
9524
- "rowMenu": "d0xfxa_rowMenu",
9525
- "rowMenuButton": "d0xfxa_rowMenuButton",
9526
- "section": "d0xfxa_section",
9527
- "sectionActions": "d0xfxa_sectionActions",
9528
- "sectionChevron": "d0xfxa_sectionChevron",
9529
- "sectionHeader": "d0xfxa_sectionHeader",
9530
- "sectionTitle": "d0xfxa_sectionTitle",
9531
- "sectionToggle": "d0xfxa_sectionToggle",
9532
- "sidebarRowDragging": "d0xfxa_sidebarRowDragging",
9533
- "sidebarRowDropAfter": "d0xfxa_sidebarRowDropAfter",
9534
- "sidebarRowDropBefore": "d0xfxa_sidebarRowDropBefore",
9535
- "textButton": "d0xfxa_textButton",
9536
- "unavailableDot": "d0xfxa_unavailableDot",
9537
- "workspaceBrowser": "d0xfxa_workspaceBrowser",
9538
- "workspaceCopy": "d0xfxa_workspaceCopy",
9539
- "workspaceIcon": "d0xfxa_workspaceIcon",
9540
- "workspaceList": "d0xfxa_workspaceList",
9541
- "workspaceRow": "d0xfxa_workspaceRow",
9542
- "workspaceSection": "d0xfxa_workspaceSection"
9739
+ "agentAvatar": "Xvc-qG_agentAvatar",
9740
+ "agentAvatarBadge": "Xvc-qG_agentAvatarBadge",
9741
+ "agentCopy": "Xvc-qG_agentCopy",
9742
+ "agentList": "Xvc-qG_agentList",
9743
+ "agentRow": "Xvc-qG_agentRow",
9744
+ "agentSelect": "Xvc-qG_agentSelect",
9745
+ "channelList": "Xvc-qG_channelList",
9746
+ "channelName": "Xvc-qG_channelName",
9747
+ "channelRow": "Xvc-qG_channelRow",
9748
+ "channelSelect": "Xvc-qG_channelSelect",
9749
+ "editChannelName": "Xvc-qG_editChannelName",
9750
+ "editDescription": "Xvc-qG_editDescription",
9751
+ "editHint": "Xvc-qG_editHint",
9752
+ "editMemberCopy": "Xvc-qG_editMemberCopy",
9753
+ "editMemberList": "Xvc-qG_editMemberList",
9754
+ "editMemberRow": "Xvc-qG_editMemberRow",
9755
+ "editMemberRowChannels": "Xvc-qG_editMemberRowChannels",
9756
+ "emptyState": "Xvc-qG_emptyState",
9757
+ "iconButton": "Xvc-qG_iconButton",
9758
+ "menuHint": "Xvc-qG_menuHint",
9759
+ "panel": "Xvc-qG_panel",
9760
+ "railButton": "Xvc-qG_railButton",
9761
+ "railWorkspace": "Xvc-qG_railWorkspace",
9762
+ "retryError": "Xvc-qG_retryError",
9763
+ "rowAlert": "Xvc-qG_rowAlert",
9764
+ "rowError": "Xvc-qG_rowError",
9765
+ "rowMenu": "Xvc-qG_rowMenu",
9766
+ "rowMenuButton": "Xvc-qG_rowMenuButton",
9767
+ "section": "Xvc-qG_section",
9768
+ "sectionActions": "Xvc-qG_sectionActions",
9769
+ "sectionChevron": "Xvc-qG_sectionChevron",
9770
+ "sectionHeader": "Xvc-qG_sectionHeader",
9771
+ "sectionTitle": "Xvc-qG_sectionTitle",
9772
+ "sectionToggle": "Xvc-qG_sectionToggle",
9773
+ "sidebarRowDragging": "Xvc-qG_sidebarRowDragging",
9774
+ "sidebarRowDropAfter": "Xvc-qG_sidebarRowDropAfter",
9775
+ "sidebarRowDropBefore": "Xvc-qG_sidebarRowDropBefore",
9776
+ "textButton": "Xvc-qG_textButton",
9777
+ "unavailableDot": "Xvc-qG_unavailableDot",
9778
+ "workspaceBrowser": "Xvc-qG_workspaceBrowser",
9779
+ "workspaceCopy": "Xvc-qG_workspaceCopy",
9780
+ "workspaceIcon": "Xvc-qG_workspaceIcon",
9781
+ "workspaceList": "Xvc-qG_workspaceList",
9782
+ "workspaceRow": "Xvc-qG_workspaceRow",
9783
+ "workspaceSection": "Xvc-qG_workspaceSection"
9543
9784
  };
9544
9785
  //#endregion
9545
9786
  //#region src/client/TeamWorkspaceRow.tsx
@@ -9696,10 +9937,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9696
9937
  children: [status.member.handle.replace("@", "").slice(0, 1).toUpperCase(), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
9697
9938
  className: sidebar_module_css_default.agentAvatarBadge,
9698
9939
  "aria-hidden": "true",
9699
- children: state === "gray" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: sidebar_module_css_default.unavailableDot }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
9700
- state,
9701
- size: 8
9702
- })
9940
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamStateDot, { state })
9703
9941
  })]
9704
9942
  })
9705
9943
  });
@@ -9979,8 +10217,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9979
10217
  });
9980
10218
  }
9981
10219
  //#endregion
9982
- //#region \0dsh-css:/home/yu/projects/dsh-agent-team/packages/client-agent-team/src/client/create.module.css.mjs
9983
- 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}}";
10220
+ //#region \0dsh-css:/home/yu/projects/release-018/packages/client-agent-team/src/client/create.module.css.mjs
10221
+ const css = ".vkPzUW_form{gap:16px;display:grid}.vkPzUW_field{color:var(--dsw-alias-label-secondary);gap:6px;font-size:12px;line-height:18px;display:grid}.vkPzUW_input{box-sizing:border-box;width:100%}.vkPzUW_menuCap{max-height:min(320px,56vh)}.vkPzUW_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}.vkPzUW_selectTrigger:disabled{cursor:default;opacity:.6}.vkPzUW_selectTrigger:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.vkPzUW_selectValue{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vkPzUW_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .12s;display:inline-flex}.vkPzUW_chevronOpen{transform:rotate(180deg)}.vkPzUW_memberPicker{border:0;gap:4px;max-height:220px;margin:0;padding:0;display:grid;overflow-y:auto}.vkPzUW_memberPicker legend{color:var(--dsw-alias-label-secondary);padding:0 0 6px;font-size:12px;line-height:18px}.vkPzUW_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}.vkPzUW_memberOption:hover{background:var(--dsw-alias-interactive-bg-hover)}.vkPzUW_memberOption input{margin:0}.vkPzUW_memberOption small{color:var(--dsw-alias-label-tertiary);grid-column:3;font-size:10px;line-height:14px}.vkPzUW_unavailableDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;justify-self:center;width:7px;height:7px;display:inline-block}.vkPzUW_error{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px;line-height:18px}.vkPzUW_dialogContent{max-height:min(70vh,560px);overflow-y:auto}@media (width<=600px){.vkPzUW_dialogContent{max-height:calc(100vh - 180px)}.vkPzUW_memberPicker{max-height:180px}}";
9984
10222
  const tagId = "@wowyuarm/dsh-agent-team/create.module.css";
9985
10223
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
9986
10224
  const tag = document.createElement("style");
@@ -9990,19 +10228,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9990
10228
  document.head.appendChild(tag);
9991
10229
  }
9992
10230
  var create_module_css_default = {
9993
- "chevron": "_1henIG_chevron",
9994
- "chevronOpen": "_1henIG_chevronOpen",
9995
- "dialogContent": "_1henIG_dialogContent",
9996
- "error": "_1henIG_error",
9997
- "field": "_1henIG_field",
9998
- "form": "_1henIG_form",
9999
- "input": "_1henIG_input",
10000
- "memberOption": "_1henIG_memberOption",
10001
- "memberPicker": "_1henIG_memberPicker",
10002
- "menuCap": "_1henIG_menuCap",
10003
- "selectTrigger": "_1henIG_selectTrigger",
10004
- "selectValue": "_1henIG_selectValue",
10005
- "unavailableDot": "_1henIG_unavailableDot"
10231
+ "chevron": "vkPzUW_chevron",
10232
+ "chevronOpen": "vkPzUW_chevronOpen",
10233
+ "dialogContent": "vkPzUW_dialogContent",
10234
+ "error": "vkPzUW_error",
10235
+ "field": "vkPzUW_field",
10236
+ "form": "vkPzUW_form",
10237
+ "input": "vkPzUW_input",
10238
+ "memberOption": "vkPzUW_memberOption",
10239
+ "memberPicker": "vkPzUW_memberPicker",
10240
+ "menuCap": "vkPzUW_menuCap",
10241
+ "selectTrigger": "vkPzUW_selectTrigger",
10242
+ "selectValue": "vkPzUW_selectValue",
10243
+ "unavailableDot": "vkPzUW_unavailableDot"
10006
10244
  };
10007
10245
  //#endregion
10008
10246
  //#region src/client/TeamMemberEditor.tsx
@@ -10287,7 +10525,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10287
10525
  }
10288
10526
  //#endregion
10289
10527
  //#region src/client/TeamAgentsPanel.tsx
10290
- function TeamAgentsPanel({ workspaceId, loadMembers, subscribeChanges, addMember, updateMember, recoverMember, clearMemberContext, loadModels, memberSessionId, openMemberSession, onCreatingChange, t }) {
10528
+ function TeamAgentsPanel({ workspaceId, loadMembers, subscribeChanges, addMember, updateMember, recoverMember, clearMemberContext, archiveMember, loadModels, memberSessionId, openMemberSession, onCreatingChange, t }) {
10291
10529
  const [members, setMembers] = (0, react.useState)([]);
10292
10530
  const [loading, setLoading] = (0, react.useState)(true);
10293
10531
  const [error, setError] = (0, react.useState)();
@@ -10315,7 +10553,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10315
10553
  setLoading(true);
10316
10554
  const result = await loadMembers({ workspaceId });
10317
10555
  if (result.ok) {
10318
- setMembers(result.value);
10556
+ setMembers(result.value.filter((status) => status.member.state !== "inactive" && status.member.state !== "archived"));
10319
10557
  setError(void 0);
10320
10558
  } else setError(result.error.message);
10321
10559
  setLoading(false);
@@ -10353,7 +10591,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10353
10591
  const result = await addMember(request);
10354
10592
  if (result.ok) {
10355
10593
  setMembers((current) => {
10356
- return [...current.filter((status) => status.member.memberId !== result.value.status.member.memberId), result.value.status];
10594
+ const retained = current.filter((status) => status.member.memberId !== result.value.status.member.memberId);
10595
+ return result.value.status.member.state === "inactive" || result.value.status.member.state === "archived" ? retained : [...retained, result.value.status];
10357
10596
  });
10358
10597
  setHandle("");
10359
10598
  setDescription("");
@@ -10501,6 +10740,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10501
10740
  updateMember,
10502
10741
  recoverMember,
10503
10742
  clearMemberContext,
10743
+ archiveMember,
10504
10744
  loadModels,
10505
10745
  openMemberSession,
10506
10746
  onUpdated: () => {
@@ -10533,10 +10773,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10533
10773
  * conversation page, the avatar carries identity plus the presence badge, and
10534
10774
  * the row menu opens the editor.
10535
10775
  */
10536
- function AgentRow({ status, current, updateMember, recoverMember, clearMemberContext, loadModels, openMemberSession, onUpdated, t }) {
10776
+ function AgentRow({ status, current, updateMember, recoverMember, clearMemberContext, archiveMember, loadModels, openMemberSession, onUpdated, t }) {
10537
10777
  const [menuOpen, setMenuOpen] = (0, react.useState)(false);
10538
10778
  const [editing, setEditing] = (0, react.useState)(false);
10539
10779
  const [clearing, setClearing] = (0, react.useState)(false);
10780
+ const [archiving, setArchiving] = (0, react.useState)(false);
10540
10781
  const [rowAlert, setRowAlert] = (0, react.useState)();
10541
10782
  const recover = async () => {
10542
10783
  try {
@@ -10579,6 +10820,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10579
10820
  }
10580
10821
  };
10581
10822
  const contextClearable = status.presence === "available" || status.presence === "error";
10823
+ const archive = async () => {
10824
+ try {
10825
+ const result = await archiveMember({
10826
+ requestId: mintRequestId(),
10827
+ memberId: status.member.memberId
10828
+ });
10829
+ await onUpdated();
10830
+ if (!result.ok) setRowAlert(t("archiveAgentFailed", { message: result.error.message }));
10831
+ } catch (cause) {
10832
+ setRowAlert(t("archiveAgentFailed", { message: cause instanceof Error ? cause.message : String(cause) }));
10833
+ }
10834
+ };
10582
10835
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
10583
10836
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
10584
10837
  className: sidebar_module_css_default.agentRow,
@@ -10630,11 +10883,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10630
10883
  type: "label",
10631
10884
  id: "clear-context-reason",
10632
10885
  text: status.presence === "working" ? t("clearContextWorkingReason") : t("clearContextUnavailableReason")
10633
- }] : []
10886
+ }] : [],
10887
+ {
10888
+ id: "archive",
10889
+ label: t("archiveAgent"),
10890
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconArchiveOutline20, { size: 16 }),
10891
+ danger: true
10892
+ }
10634
10893
  ],
10635
10894
  onSelect: (id) => {
10636
10895
  if (id === "edit") setEditing(true);
10637
10896
  else if (id === "clear-context") setClearing(true);
10897
+ else if (id === "archive") setArchiving(true);
10638
10898
  else recover();
10639
10899
  },
10640
10900
  onOpenChange: setMenuOpen
@@ -10673,6 +10933,33 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10673
10933
  children: t("clearContextNotice", { name: status.member.handle })
10674
10934
  })
10675
10935
  }),
10936
+ archiving && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
10937
+ open: true,
10938
+ onClose: () => {
10939
+ setArchiving(false);
10940
+ },
10941
+ title: t("archiveAgentTitle", { name: status.member.handle }),
10942
+ closeLabel: t("close"),
10943
+ contentClassName: create_module_css_default.dialogContent,
10944
+ footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
10945
+ variant: "outline",
10946
+ onClick: () => {
10947
+ setArchiving(false);
10948
+ },
10949
+ children: t("cancel")
10950
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
10951
+ variant: "primary",
10952
+ onClick: () => {
10953
+ setArchiving(false);
10954
+ archive();
10955
+ },
10956
+ children: t("archiveAgentConfirm")
10957
+ })] }),
10958
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
10959
+ className: create_module_css_default.error,
10960
+ children: t("archiveAgentNotice", { name: status.member.handle })
10961
+ })
10962
+ }),
10676
10963
  editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AgentEditorDialog, {
10677
10964
  status,
10678
10965
  updateMember,
@@ -10785,7 +11072,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10785
11072
  }), loadMembers({ workspaceId })]);
10786
11073
  if (channelResult.ok && memberResult.ok) {
10787
11074
  setView(channelResult.value);
10788
- const visibleMembers = memberResult.value.filter((status) => status.member.state !== "inactive");
11075
+ const visibleMembers = memberResult.value.filter((status) => status.member.state !== "inactive" && status.member.state !== "archived");
10789
11076
  setMembers(visibleMembers);
10790
11077
  const selectable = new Set(visibleMembers.filter((status) => status.presence !== "unavailable").map((status) => status.member.memberId));
10791
11078
  setSelected((current) => new Set([...current].filter((memberId) => selectable.has(memberId))));
@@ -11010,6 +11297,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11010
11297
  joinedIds: joined,
11011
11298
  selected: selectedChannelRef === channel.channelRef,
11012
11299
  updateChannel,
11300
+ archiveChannel: props.archiveChannel,
11013
11301
  joinChannel: props.joinChannel,
11014
11302
  removeChannelMember: props.removeChannelMember,
11015
11303
  onCommitted: () => {
@@ -11035,52 +11323,108 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11035
11323
  * One sidebar Channel row: the select button keeps the `#` identity while the
11036
11324
  * row menu carries the entry point; editing covers display facts and membership.
11037
11325
  */
11038
- function ChannelRow({ channel, members, joinedIds, selected, updateChannel, joinChannel, removeChannelMember, onCommitted, selectChannel, t }) {
11326
+ function ChannelRow({ channel, members, joinedIds, selected, updateChannel, archiveChannel, joinChannel, removeChannelMember, onCommitted, selectChannel, t }) {
11039
11327
  const [menuOpen, setMenuOpen] = (0, react.useState)(false);
11040
11328
  const [editing, setEditing] = (0, react.useState)(false);
11041
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
11042
- className: sidebar_module_css_default.channelRow,
11043
- "data-menu-open": menuOpen || void 0,
11044
- "aria-current": selected ? "page" : void 0,
11045
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
11046
- type: "button",
11047
- className: sidebar_module_css_default.channelSelect,
11048
- "aria-label": `# ${channel.name}`,
11049
- onClick: () => {
11050
- selectChannel(channel.channelRef);
11329
+ const [archiving, setArchiving] = (0, react.useState)(false);
11330
+ const [rowAlert, setRowAlert] = (0, react.useState)();
11331
+ const archive = async () => {
11332
+ try {
11333
+ const result = await archiveChannel({
11334
+ requestId: mintRequestId(),
11335
+ workspaceId: channel.workspaceId,
11336
+ channelRef: channel.channelRef
11337
+ });
11338
+ await onCommitted();
11339
+ if (!result.ok) setRowAlert(t("archiveChannelFailed", { message: result.error.message }));
11340
+ } catch (cause) {
11341
+ setRowAlert(t("archiveChannelFailed", { message: cause instanceof Error ? cause.message : String(cause) }));
11342
+ }
11343
+ };
11344
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
11345
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
11346
+ className: sidebar_module_css_default.channelRow,
11347
+ "data-menu-open": menuOpen || void 0,
11348
+ "aria-current": selected ? "page" : void 0,
11349
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
11350
+ type: "button",
11351
+ className: sidebar_module_css_default.channelSelect,
11352
+ "aria-label": `# ${channel.name}`,
11353
+ onClick: () => {
11354
+ selectChannel(channel.channelRef);
11355
+ },
11356
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("strong", {
11357
+ className: sidebar_module_css_default.channelName,
11358
+ children: ["# ", channel.name]
11359
+ })
11360
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
11361
+ className: sidebar_module_css_default.rowMenu,
11362
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamRowMenu, {
11363
+ label: t("actionsChannel", { name: channel.name }),
11364
+ items: [{
11365
+ id: "edit",
11366
+ label: t("editChannel"),
11367
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, {})
11368
+ }, {
11369
+ id: "archive",
11370
+ label: t("archiveChannel"),
11371
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconArchiveOutline20, { size: 16 }),
11372
+ danger: true
11373
+ }],
11374
+ onSelect: (id) => {
11375
+ if (id === "edit") setEditing(true);
11376
+ else setArchiving(true);
11377
+ },
11378
+ onOpenChange: setMenuOpen
11379
+ })
11380
+ })]
11381
+ }),
11382
+ rowAlert !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11383
+ className: sidebar_module_css_default.rowAlert,
11384
+ role: "alert",
11385
+ children: rowAlert
11386
+ }),
11387
+ archiving && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
11388
+ open: true,
11389
+ onClose: () => {
11390
+ setArchiving(false);
11051
11391
  },
11052
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("strong", {
11053
- className: sidebar_module_css_default.channelName,
11054
- children: ["# ", channel.name]
11055
- })
11056
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
11057
- className: sidebar_module_css_default.rowMenu,
11058
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamRowMenu, {
11059
- label: t("actionsChannel", { name: channel.name }),
11060
- items: [{
11061
- id: "edit",
11062
- label: t("editChannel"),
11063
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, {})
11064
- }],
11065
- onSelect: () => {
11066
- setEditing(true);
11392
+ title: t("archiveChannelTitle", { name: channel.name }),
11393
+ closeLabel: t("close"),
11394
+ contentClassName: create_module_css_default.dialogContent,
11395
+ footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
11396
+ variant: "outline",
11397
+ onClick: () => {
11398
+ setArchiving(false);
11399
+ },
11400
+ children: t("cancel")
11401
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
11402
+ variant: "primary",
11403
+ onClick: () => {
11404
+ setArchiving(false);
11405
+ archive();
11067
11406
  },
11068
- onOpenChange: setMenuOpen
11407
+ children: t("archiveChannelConfirm")
11408
+ })] }),
11409
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11410
+ className: create_module_css_default.error,
11411
+ children: t("archiveChannelNotice", { name: channel.name })
11069
11412
  })
11070
- })]
11071
- }), editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChannelEditorDialog, {
11072
- channel,
11073
- members,
11074
- joinedIds,
11075
- updateChannel,
11076
- joinChannel,
11077
- removeChannelMember,
11078
- onCommitted,
11079
- onClose: () => {
11080
- setEditing(false);
11081
- },
11082
- t
11083
- })] });
11413
+ }),
11414
+ editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChannelEditorDialog, {
11415
+ channel,
11416
+ members,
11417
+ joinedIds,
11418
+ updateChannel,
11419
+ joinChannel,
11420
+ removeChannelMember,
11421
+ onCommitted,
11422
+ onClose: () => {
11423
+ setEditing(false);
11424
+ },
11425
+ t
11426
+ })
11427
+ ] });
11084
11428
  }
11085
11429
  /**
11086
11430
  * Channel editor: name and description commit through one durable update;
@@ -11232,7 +11576,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11232
11576
  }
11233
11577
  //#endregion
11234
11578
  //#region src/client/TeamWorkspaceBrowser.tsx
11235
- function TeamWorkspaceBrowser({ wide, expandSidebar, navigation, selectWorkspace, selectChannel, t, useWorkspaces, loadMembers, subscribeChanges, addMember, loadChannels, createChannel, updateChannel, updateMember, recoverMember, clearMemberContext, joinChannel, removeChannelMember, loadModels, openMemberSession }) {
11579
+ function TeamWorkspaceBrowser({ wide, expandSidebar, navigation, selectWorkspace, selectChannel, t, useWorkspaces, loadMembers, subscribeChanges, addMember, loadChannels, createChannel, updateChannel, archiveChannel, updateMember, recoverMember, clearMemberContext, archiveMember, joinChannel, removeChannelMember, loadModels, openMemberSession }) {
11236
11580
  const navigationState = (0, react.useSyncExternalStore)(navigation.subscribe, navigation.getSnapshot, navigation.getSnapshot);
11237
11581
  const workspaces = useWorkspaces((state) => state.items);
11238
11582
  const selected = navigationState.workspaceId;
@@ -11324,6 +11668,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11324
11668
  subscribeChanges,
11325
11669
  createChannel,
11326
11670
  updateChannel,
11671
+ archiveChannel,
11327
11672
  joinChannel,
11328
11673
  removeChannelMember,
11329
11674
  creatingAgents: creatingAgents.filter((request) => request.workspaceId === selectedId),
@@ -11341,6 +11686,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11341
11686
  updateMember,
11342
11687
  recoverMember,
11343
11688
  clearMemberContext,
11689
+ archiveMember,
11344
11690
  loadModels,
11345
11691
  ...navigationState.memberSessionId === void 0 ? {} : { memberSessionId: navigationState.memberSessionId },
11346
11692
  openMemberSession,
@@ -11354,271 +11700,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11354
11700
  });
11355
11701
  }
11356
11702
  //#endregion
11357
- //#region src/client/member-session-input.ts
11358
- const TEAM_COMMAND_SOURCE = "agent-team-command";
11359
- const TEAM_MEMBER_SOURCE = "agent-team-member";
11360
- /** Preserve the public Session command admission contract, not handler outcome. */
11361
- async function admitTeamCompact(session) {
11362
- const result = await session.command("/compact");
11363
- if (!result.ok) throw new Error(`session.command failed: ${result.error.message}`);
11364
- return result.value.matched ? { kind: "success" } : {
11365
- kind: "error",
11366
- text: "unknown command: /compact"
11367
- };
11368
- }
11369
- /**
11370
- * The two Team-only sources live in the shared public registry, but their
11371
- * candidate plane is inert for every ordinary Session. The member source owns
11372
- * its stable ref→label cache so serialization never falls back to guessing a
11373
- * handle from plain text.
11374
- */
11375
- function createTeamMemberSessionSources(options) {
11376
- const labels = /* @__PURE__ */ new Map();
11377
- return [{
11378
- trigger: "/",
11379
- name: TEAM_COMMAND_SOURCE,
11380
- showGroupTitle: false,
11381
- async candidates(session, { query }) {
11382
- if (!options.isEmbeddedMemberSession(session.sessionId) || !"compact".startsWith(query.toLocaleLowerCase())) return [];
11383
- return [{
11384
- name: "/compact",
11385
- description: "压缩当前 Session 上下文",
11386
- value: "compact"
11387
- }];
11388
- },
11389
- onPick({ candidate, session }) {
11390
- if (candidate.value !== "compact" || !options.isEmbeddedMemberSession(session.sessionId)) return void 0;
11391
- return { claim: {
11392
- token: "/compact",
11393
- submit: async () => options.executeCompact(session.sessionId)
11394
- } };
11395
- }
11396
- }, {
11397
- trigger: "@",
11398
- name: TEAM_MEMBER_SOURCE,
11399
- showGroupTitle: false,
11400
- async candidates(session, { query, signal }) {
11401
- if (!options.isEmbeddedMemberSession(session.sessionId)) return [];
11402
- const normalized = query.toLocaleLowerCase();
11403
- const members = await options.members();
11404
- if (signal.aborted) return [];
11405
- return members.filter((status) => status.member.sessionId !== session.sessionId && status.member.state !== "inactive").filter((status) => status.member.handle.toLocaleLowerCase().startsWith(normalized)).map((status) => {
11406
- labels.set(status.member.memberId, `@${status.member.handle}`);
11407
- return {
11408
- name: `@${status.member.handle}`,
11409
- description: "引用成员 · 不会通知",
11410
- value: String(status.member.memberId)
11411
- };
11412
- });
11413
- },
11414
- onPick({ candidate, session }) {
11415
- if (!options.isEmbeddedMemberSession(session.sessionId) || candidate.value === void 0) return void 0;
11416
- const ref = candidate.value;
11417
- const label = labels.get(ref);
11418
- if (label === void 0) return void 0;
11419
- return { insert: {
11420
- source: TEAM_MEMBER_SOURCE,
11421
- label: label.slice(1),
11422
- ref,
11423
- clipboardText: label
11424
- } };
11425
- },
11426
- codec: {
11427
- clipboardText: (ref) => labels.get(ref) ?? `@${String(ref)}`,
11428
- serialize: async (ref) => {
11429
- const stable = String(ref);
11430
- const label = labels.get(ref) ?? "";
11431
- return `<team-member ref="${escapeAttribute(stable)}">${escapeText(label)}</team-member>`;
11432
- }
11433
- }
11434
- }];
11435
- }
11436
- /** Unknown leading slash must never fall into the shipped global palette. */
11437
- function allowsMemberSessionSubmit(draft, claimToken) {
11438
- return !draft.trimStart().startsWith("/") || claimToken === "/compact";
11439
- }
11440
- function escapeText(value) {
11441
- return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
11442
- }
11443
- function escapeAttribute(value) {
11444
- return escapeText(value).replaceAll("\"", "&quot;").replaceAll("'", "&#39;");
11445
- }
11446
- //#endregion
11447
- //#region src/client/TeamMemberSessionComposer.tsx
11448
- /**
11449
- * Narrow, Team-owned member-session composer. It deliberately uses the public
11450
- * input state/actions and trigger controller rather than the shipped InputBar;
11451
- * owner-provided overlay remains inside the card so the shared menu renders.
11452
- */
11453
- function TeamMemberSessionComposer({ controller, inputActions, overlay, placeholder, disabled, blocked, stop, submitInput, useInput, useSession }) {
11454
- const input = useInput((state) => state);
11455
- const session = useSession((state) => state);
11456
- const textarea = (0, react.useRef)(null);
11457
- const editedByHuman = (0, react.useRef)(void 0);
11458
- const compactWasSubmitting = (0, react.useRef)(false);
11459
- const composing = (0, react.useRef)(false);
11460
- const [submissionNotice, setSubmissionNotice] = (0, react.useState)();
11461
- const draft = input?.draft ?? "";
11462
- const isLocked = disabled === true || blocked !== void 0 || inputActions === void 0 || input === void 0;
11463
- (0, react.useEffect)(() => {
11464
- if (isLocked) return;
11465
- const active = document.activeElement;
11466
- if (active !== document.body && active?.closest("[aria-current=\"page\"]") === null) return;
11467
- textarea.current?.focus({ preventScroll: true });
11468
- }, [isLocked]);
11469
- (0, react.useLayoutEffect)(() => {
11470
- const element = textarea.current;
11471
- if (element === null) return;
11472
- element.style.height = "auto";
11473
- element.style.height = `${Math.min(element.scrollHeight, 336)}px`;
11474
- }, [draft]);
11475
- (0, react.useEffect)(() => {
11476
- if (input === void 0) return;
11477
- if (input.phase === "submitting" && input.claim?.token === "/compact") {
11478
- compactWasSubmitting.current = true;
11479
- return;
11480
- }
11481
- if (input.phase === "claimed" && input.claim?.token === "/compact" && compactWasSubmitting.current) {
11482
- compactWasSubmitting.current = false;
11483
- setSubmissionNotice("Compact 未执行,请重试。");
11484
- return;
11485
- }
11486
- if (input.phase === "plain") {
11487
- if (compactWasSubmitting.current) setSubmissionNotice(void 0);
11488
- compactWasSubmitting.current = false;
11489
- }
11490
- }, [input?.claim?.token, input?.phase]);
11491
- (0, react.useEffect)(() => {
11492
- if (input === void 0) return;
11493
- const edit = editedByHuman.current;
11494
- if (edit === void 0 || edit.draft !== input.draft) return;
11495
- editedByHuman.current = void 0;
11496
- const hit = triggerHit(input.draft, edit.caret, input.draftRev);
11497
- controller.dismiss();
11498
- if (hit !== void 0) controller.toggleSource(hit.trigger === "/" ? TEAM_COMMAND_SOURCE : TEAM_MEMBER_SOURCE, hit);
11499
- }, [
11500
- controller,
11501
- input?.draft,
11502
- input?.draftRev
11503
- ]);
11504
- const onChange = (event) => {
11505
- const caret = event.currentTarget.selectionStart;
11506
- editedByHuman.current = {
11507
- draft: event.currentTarget.value,
11508
- caret
11509
- };
11510
- setSubmissionNotice(void 0);
11511
- inputActions?.setDraft(event.currentTarget.value);
11512
- };
11513
- const submit = () => {
11514
- if (input === void 0 || inputActions === void 0) return;
11515
- if (!allowsMemberSessionSubmit(input.draft, input.claim?.token)) {
11516
- setSubmissionNotice("此 Member Session 仅支持 /compact 命令。");
11517
- return;
11518
- }
11519
- setSubmissionNotice(void 0);
11520
- submitInput(running ? "steer" : "queue");
11521
- };
11522
- const onKeyDown = (event) => {
11523
- if (event.key === "Enter" && event.shiftKey) return;
11524
- if (event.repeat || composing.current || event.nativeEvent.isComposing || event.nativeEvent.keyCode === 229) return;
11525
- if (event.key === "Tab" && !event.shiftKey) {
11526
- const highlight = controller.menu.getSnapshot().highlight;
11527
- if (highlight !== null) {
11528
- event.preventDefault();
11529
- controller.pick(highlight.source, highlight.index);
11530
- }
11531
- return;
11532
- }
11533
- const key = event.key === "ArrowUp" ? "up" : event.key === "ArrowDown" ? "down" : event.key === "Escape" ? "escape" : event.key === "Enter" ? "enter" : void 0;
11534
- if (key !== void 0) {
11535
- if (controller.arbitrate(key, false) !== "pass") {
11536
- event.preventDefault();
11537
- return;
11538
- }
11539
- }
11540
- if (event.key === "Enter") {
11541
- event.preventDefault();
11542
- submit();
11543
- }
11544
- };
11545
- const running = session?.running ?? false;
11546
- const promptError = session?.promptError;
11547
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11548
- className: `${composer_module_css_default.root} ${composer_module_css_default.memberSessionRoot}`,
11549
- "data-team-member-composer": "true",
11550
- children: [(submissionNotice !== void 0 || promptError !== null && promptError !== void 0) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11551
- className: composer_module_css_default.memberSessionStatus,
11552
- role: "alert",
11553
- children: submissionNotice ?? promptError?.error.message
11554
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11555
- className: `${composer_module_css_default.card} ${composer_module_css_default.memberSessionCard}`,
11556
- "data-composer-card": "true",
11557
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11558
- className: `${composer_module_css_default.inputArea} ${composer_module_css_default.memberSessionInputArea}`,
11559
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
11560
- ref: textarea,
11561
- value: draft,
11562
- disabled: isLocked,
11563
- placeholder: blocked?.reason ?? placeholder ?? "给成员发送直接消息",
11564
- onChange,
11565
- onKeyDown,
11566
- onCompositionStart: () => {
11567
- composing.current = true;
11568
- },
11569
- onCompositionEnd: () => {
11570
- composing.current = false;
11571
- }
11572
- }), overlay]
11573
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11574
- className: `${composer_module_css_default.toolbar} ${composer_module_css_default.memberSessionToolbar}`,
11575
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
11576
- className: `${composer_module_css_default.sendButton} ${composer_module_css_default.memberSessionPrimary}`,
11577
- type: "button",
11578
- "aria-label": running ? "停止生成" : "发送消息",
11579
- disabled: isLocked || !running && draft.trim() === "",
11580
- onClick: () => {
11581
- if (running) stop?.();
11582
- else submit();
11583
- },
11584
- children: running ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconStopFill16, { size: 16 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSendOutline16, { size: 16 })
11585
- })
11586
- })]
11587
- })]
11588
- });
11589
- }
11590
- function triggerHit(draft, caret, draftRev) {
11591
- const before = draft.slice(0, caret);
11592
- const leading = before.match(/^\s*\/([^\s]*)$/u);
11593
- if (leading !== null) {
11594
- const start = before.indexOf("/");
11595
- return {
11596
- trigger: "/",
11597
- query: leading[1],
11598
- quoted: false,
11599
- position: "leading",
11600
- span: {
11601
- start,
11602
- end: caret,
11603
- draftRev
11604
- }
11605
- };
11606
- }
11607
- const at = before.lastIndexOf("@");
11608
- if (at < 0 || /[\p{L}\p{N}_]/u.test(before[at - 1] ?? "") || /\s/u.test(before.slice(at + 1))) return void 0;
11609
- return {
11610
- trigger: "@",
11611
- query: before.slice(at + 1),
11612
- quoted: false,
11613
- position: "inline",
11614
- span: {
11615
- start: at,
11616
- end: caret,
11617
- draftRev
11618
- }
11619
- };
11620
- }
11621
- //#endregion
11622
11703
  //#region src/client/locales.ts
11623
11704
  const zh = {
11624
11705
  team: "团队",
@@ -11634,6 +11715,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11634
11715
  addAgent: "添加 Agent",
11635
11716
  cancel: "取消",
11636
11717
  close: "关闭",
11718
+ copyCode: "复制",
11719
+ copiedCode: "已复制",
11720
+ markdownFootnotes: "脚注",
11637
11721
  retry: "重试",
11638
11722
  agentName: "名称",
11639
11723
  agentDescription: "说明",
@@ -11667,6 +11751,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11667
11751
  clearContextNotice: "将结束 {name} 当前的会话上下文并从空白开始:旧对话会归档保留在会话记录中。{name} 的身份、私有记忆与 notes、频道和会话绑定都保持不变,后续协作从新上下文继续累积。",
11668
11752
  clearContextConfirm: "开始全新上下文",
11669
11753
  clearContextFailed: "清空上下文失败:{message}",
11754
+ archiveAgent: "归档",
11755
+ archiveAgentTitle: "归档 Agent:{name}",
11756
+ archiveAgentNotice: "将把 {name} 从所有列表收起:会话与私有记忆保留在磁盘上、活跃 Claim 会释放,但暂无恢复入口。",
11757
+ archiveAgentConfirm: "归档",
11758
+ archiveAgentFailed: "归档失败:{message}",
11759
+ archiveChannel: "归档频道",
11760
+ archiveChannelTitle: "归档频道:{name}",
11761
+ archiveChannelNotice: "将把 {name} 及其全部讨论从所有列表收起:数据保留、所有成员在此频道的活跃 Claim 会释放,但暂无恢复入口。",
11762
+ archiveChannelConfirm: "归档频道",
11763
+ archiveChannelFailed: "归档频道失败:{message}",
11670
11764
  optionalSuffix: "(可选)",
11671
11765
  agentDescriptionPlaceholder: "留空则暂无描述",
11672
11766
  membersPickerEmpty: "选择初始成员",
@@ -11776,6 +11870,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11776
11870
  addAgent: "Add Agent",
11777
11871
  cancel: "Cancel",
11778
11872
  close: "Close",
11873
+ copyCode: "Copy",
11874
+ copiedCode: "Copied",
11875
+ markdownFootnotes: "Footnotes",
11779
11876
  retry: "Retry",
11780
11877
  agentName: "Name",
11781
11878
  agentDescription: "Description",
@@ -11809,6 +11906,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11809
11906
  clearContextNotice: "This ends {name}'s current session context and starts blank: the previous conversation is archived and stays in the session history. {name}'s identity, private memory and notes, channel and session bindings are untouched, and future collaboration accumulates from the new context.",
11810
11907
  clearContextConfirm: "Start from new context",
11811
11908
  clearContextFailed: "Failed to clear context: {message}",
11909
+ archiveAgent: "Archive",
11910
+ archiveAgentTitle: "Archive Agent: {name}",
11911
+ archiveAgentNotice: "This hides {name} from every list: the session log and private memory stay on disk and active Claims release, but there is no restore entry point yet.",
11912
+ archiveAgentConfirm: "Archive",
11913
+ archiveAgentFailed: "Failed to archive: {message}",
11914
+ archiveChannel: "Archive Channel",
11915
+ archiveChannelTitle: "Archive Channel: {name}",
11916
+ archiveChannelNotice: "This hides {name} and all of its discussions from every list: the data stays, every Member's active Claims in this Channel release, but there is no restore entry point yet.",
11917
+ archiveChannelConfirm: "Archive Channel",
11918
+ archiveChannelFailed: "Failed to archive Channel: {message}",
11812
11919
  optionalSuffix: " (optional)",
11813
11920
  agentDescriptionPlaceholder: "Leave empty if not needed",
11814
11921
  membersPickerEmpty: "Choose initial members",
@@ -11912,10 +12019,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11912
12019
  "workspaces",
11913
12020
  "locale",
11914
12021
  "remote",
12022
+ "remote.session",
11915
12023
  "sessions",
11916
12024
  "connection",
11917
- "conversation",
11918
- "inputTriggers"
12025
+ "conversation"
11919
12026
  ];
11920
12027
  function registerModeShadow(ctx, navigation, changes, drafts, name, component, extraInject) {
11921
12028
  const openMemberSessionImpl = (sessionId) => {
@@ -11934,12 +12041,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11934
12041
  joinChannel: (request) => ctx.remote.agentTeam.joinChannel(request),
11935
12042
  removeChannelMember: (request) => ctx.remote.agentTeam.removeChannelMember(request),
11936
12043
  updateChannel: (request) => ctx.remote.agentTeam.updateChannel(request),
12044
+ archiveChannel: (request) => ctx.remote.agentTeam.archiveChannel(request),
11937
12045
  updateMember: (request) => ctx.remote.agentTeam.updateMember(request),
11938
12046
  recoverMember: (request) => ctx.remote.agentTeam.recoverMember(request),
11939
12047
  clearMemberContext: (request) => ctx.remote.agentTeam.clearMemberContext(request),
11940
- loadModels: async () => {
11941
- return (await ctx.get("connection").api.llm.models({})).result;
11942
- },
12048
+ archiveMember: (request) => ctx.remote.agentTeam.archiveMember(request),
12049
+ loadModels: () => ctx.remote.session.modelCatalog(),
11943
12050
  openMemberSession: openMemberSessionImpl
11944
12051
  };
11945
12052
  ctx.slots.inject(name, () => {
@@ -11959,6 +12066,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11959
12066
  ...name === "conversation" ? {
11960
12067
  readThread: (request) => ctx.remote.agentTeam.readThread(request),
11961
12068
  loadThreadHistory: (request) => ctx.remote.agentTeam.threadHistory(request),
12069
+ threadObservations: (request) => ctx.remote.agentTeam.threadObservations(request),
11962
12070
  sendMessage: (request) => ctx.remote.agentTeam.sendMessage(request),
11963
12071
  putAttachment: (request) => ctx.remote.agentTeam.putAttachment(request),
11964
12072
  getAttachment: (request) => ctx.remote.agentTeam.getAttachment(request),
@@ -11987,47 +12095,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11987
12095
  };
11988
12096
  });
11989
12097
  }
11990
- function registerMemberSessionComposer(ctx, navigation) {
11991
- ctx.slots.inject("conversation.composer.bar", () => {
11992
- let dispose;
11993
- let registeredSessionId;
11994
- const reconcile = () => {
11995
- const memberSessionId = navigation.getSnapshot().memberSessionId;
11996
- const active = navigation.getSnapshot().mode === "team" && memberSessionId !== void 0;
11997
- if (dispose !== void 0 && (!active || registeredSessionId !== memberSessionId)) {
11998
- dispose();
11999
- dispose = void 0;
12000
- registeredSessionId = void 0;
12001
- }
12002
- if (active && dispose === void 0) {
12003
- registeredSessionId = memberSessionId;
12004
- dispose = ctx.slots.register({
12005
- name: "conversation.composer.bar",
12006
- priority: -100,
12007
- select: () => ctx.sessions.list.getSnapshot().current === memberSessionId ? {} : null,
12008
- inject: (sessionId) => {
12009
- const actx = ctx.sessions.scope(sessionId);
12010
- if (actx === void 0) throw new Error(`agent-team: Member session ${String(sessionId)} has no client scope`);
12011
- const sessions = ctx.sessions;
12012
- return {
12013
- controller: ctx.get("inputTriggers").sessionOf(actx),
12014
- stop: () => {
12015
- sessions.sessionOf(actx)?.cancel();
12016
- },
12017
- submitInput: (mode) => ctx.conversation.input.for(actx).submit(mode)
12018
- };
12019
- }
12020
- }, TeamMemberSessionComposer);
12021
- }
12022
- };
12023
- const offNavigation = navigation.subscribe(reconcile);
12024
- reconcile();
12025
- return () => {
12026
- offNavigation();
12027
- dispose?.();
12028
- };
12029
- });
12030
- }
12031
12098
  function applyUi(ctx) {
12032
12099
  ctx.effect(() => ctx.locale.register(NS, {
12033
12100
  zh,
@@ -12044,42 +12111,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12044
12111
  disposeDrafts();
12045
12112
  }, "agent-team: navigation service");
12046
12113
  const changes = new TeamChangeStream((request, signal) => ctx.remote.agentTeam.changes(request, signal));
12047
- const triggerSources = createTeamMemberSessionSources({
12048
- isEmbeddedMemberSession: (sessionId) => {
12049
- const snapshot = navigation.getSnapshot();
12050
- return snapshot.mode === "team" && snapshot.memberSessionId === sessionId && snapshot.workspaceId !== void 0;
12051
- },
12052
- members: async () => {
12053
- const workspaceId = navigation.getSnapshot().workspaceId;
12054
- if (workspaceId === void 0) return [];
12055
- const result = await ctx.remote.agentTeam.members({ workspaceId });
12056
- return result.ok ? result.value : [];
12057
- },
12058
- executeCompact: async (sessionId) => {
12059
- const actx = ctx.sessions.scope(sessionId);
12060
- const session = actx === void 0 ? void 0 : ctx.sessions.sessionOf(actx);
12061
- return session === void 0 ? {
12062
- kind: "error",
12063
- text: "current Member Session is unavailable"
12064
- } : admitTeamCompact(session);
12065
- }
12066
- });
12067
- const inputTriggers = ctx.get("inputTriggers");
12068
- ctx.effect(() => {
12069
- const disposers = triggerSources.map((source) => inputTriggers.registerSource(source));
12070
- return () => {
12071
- for (const dispose of disposers) dispose();
12072
- };
12073
- }, "agent-team: Member session trigger sources");
12074
12114
  const loadMemberGroups = async () => {
12075
12115
  const workspaces = ctx.workspaces.list.getSnapshot().items;
12076
12116
  return (await Promise.all(workspaces.map(async (workspace) => {
12077
12117
  const result = await ctx.remote.agentTeam.members({ workspaceId: workspace.workspaceId });
12078
12118
  if (!result.ok) throw new Error(result.error.message);
12119
+ const members = result.value.filter((status) => status.member.state !== "inactive" && status.member.state !== "archived");
12079
12120
  return {
12080
12121
  workspaceId: workspace.workspaceId,
12081
12122
  workspaceTitle: workspace.title,
12082
- members: result.value
12123
+ members
12083
12124
  };
12084
12125
  }))).filter((group) => group.members.length > 0);
12085
12126
  };
@@ -12107,7 +12148,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12107
12148
  }, TeamFooterAction));
12108
12149
  registerModeShadow(ctx, navigation, changes, drafts, "sidebar.workspaces", TeamWorkspaceBrowser);
12109
12150
  registerModeShadow(ctx, navigation, changes, drafts, "conversation", TeamConversation);
12110
- registerMemberSessionComposer(ctx, navigation);
12111
12151
  registerModeShadow(ctx, navigation, changes, drafts, "sidebar.settings", TeamSettings, () => ({ loadMemberGroups }));
12112
12152
  }
12113
12153
  async function apply(ctx) {