@wowyuarm/dsh-agent-team 0.1.11 → 0.1.13

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 (114) hide show
  1. package/README.md +6 -4
  2. package/README.zh.md +6 -4
  3. package/cordis.patch.yml +7 -3
  4. package/package.json +16 -3
  5. package/packages/agent-team/README.md +4 -4
  6. package/packages/agent-team/README.zh.md +4 -4
  7. package/packages/agent-team/lib/context-projection.js +5 -1
  8. package/packages/agent-team/lib/index.js +162 -113
  9. package/packages/agent-team/lib/ledger.js +496 -169
  10. package/packages/agent-team/lib/member-context.js +18 -1
  11. package/packages/agent-team/lib/member-runtime.js +48 -9
  12. package/packages/agent-team/lib/mentions.js +80 -0
  13. package/packages/agent-team/lib/spec.js +20 -0
  14. package/packages/agent-team/lib/typert.host.js +241 -46
  15. package/packages/agent-team/lib/typert.remote-client.d.ts +7 -3
  16. package/packages/agent-team/lib/typert.remote-client.d.ts.map +1 -1
  17. package/packages/agent-team/lib/typert.remote-client.js +178 -28
  18. package/packages/agent-team/lib/types/context-projection.d.ts.map +1 -1
  19. package/packages/agent-team/lib/types/index.d.ts +33 -14
  20. package/packages/agent-team/lib/types/index.d.ts.map +1 -1
  21. package/packages/agent-team/lib/types/ledger.d.ts +120 -18
  22. package/packages/agent-team/lib/types/ledger.d.ts.map +1 -1
  23. package/packages/agent-team/lib/types/member-context.d.ts +6 -0
  24. package/packages/agent-team/lib/types/member-context.d.ts.map +1 -1
  25. package/packages/agent-team/lib/types/member-runtime.d.ts +2 -1
  26. package/packages/agent-team/lib/types/member-runtime.d.ts.map +1 -1
  27. package/packages/agent-team/lib/types/mentions.d.ts +47 -0
  28. package/packages/agent-team/lib/types/mentions.d.ts.map +1 -0
  29. package/packages/agent-team/lib/types/spec.d.ts.map +1 -1
  30. package/packages/agent-team/lib/types/types/entities.d.ts +3 -20
  31. package/packages/agent-team/lib/types/types/entities.d.ts.map +1 -1
  32. package/packages/agent-team/lib/types/types/operations.d.ts +37 -1
  33. package/packages/agent-team/lib/types/types/operations.d.ts.map +1 -1
  34. package/packages/agent-team/lib/types/types/requests-results.d.ts +107 -25
  35. package/packages/agent-team/lib/types/types/requests-results.d.ts.map +1 -1
  36. package/packages/agent-team/lib/types/vendor/storage-sqlite/index.d.ts +87 -0
  37. package/packages/agent-team/lib/types/vendor/storage-sqlite/index.d.ts.map +1 -0
  38. package/packages/agent-team/lib/types/vendor/storage-sqlite/schema.d.ts +59 -0
  39. package/packages/agent-team/lib/types/vendor/storage-sqlite/schema.d.ts.map +1 -0
  40. package/packages/agent-team/lib/types/vendor/storage-sqlite/unit.d.ts +57 -0
  41. package/packages/agent-team/lib/types/vendor/storage-sqlite/unit.d.ts.map +1 -0
  42. package/packages/agent-team/lib/vendor/storage-sqlite/index.js +139 -0
  43. package/packages/agent-team/lib/vendor/storage-sqlite/schema.js +120 -0
  44. package/packages/agent-team/lib/vendor/storage-sqlite/unit.js +132 -0
  45. package/packages/agent-team/preset/team-member/agent.cordis.yml +48 -8
  46. package/packages/client-agent-team/README.md +1 -1
  47. package/packages/client-agent-team/README.zh.md +1 -1
  48. package/packages/client-agent-team/lib/client.js +2123 -1406
  49. package/packages/client-agent-team/lib/client.js.map +1 -1
  50. package/packages/client-agent-team/lib/types/client/TeamAgentImport.d.ts +12 -0
  51. package/packages/client-agent-team/lib/types/client/TeamAgentImport.d.ts.map +1 -0
  52. package/packages/client-agent-team/lib/types/client/TeamAgentImport.js +69 -0
  53. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.d.ts +3 -1
  54. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.d.ts.map +1 -1
  55. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.js +31 -19
  56. package/packages/client-agent-team/lib/types/client/TeamAvatarStack.d.ts +18 -0
  57. package/packages/client-agent-team/lib/types/client/TeamAvatarStack.d.ts.map +1 -0
  58. package/packages/client-agent-team/lib/types/client/TeamAvatarStack.js +22 -0
  59. package/packages/client-agent-team/lib/types/client/TeamChannelPage.d.ts +3 -1
  60. package/packages/client-agent-team/lib/types/client/TeamChannelPage.d.ts.map +1 -1
  61. package/packages/client-agent-team/lib/types/client/TeamChannelPage.js +111 -24
  62. package/packages/client-agent-team/lib/types/client/TeamChannelsPanel.d.ts.map +1 -1
  63. package/packages/client-agent-team/lib/types/client/TeamChannelsPanel.js +10 -3
  64. package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts.map +1 -1
  65. package/packages/client-agent-team/lib/types/client/TeamComposer.js +11 -17
  66. package/packages/client-agent-team/lib/types/client/TeamConversation.js +1 -1
  67. package/packages/client-agent-team/lib/types/client/TeamCountBadge.d.ts +20 -0
  68. package/packages/client-agent-team/lib/types/client/TeamCountBadge.d.ts.map +1 -0
  69. package/packages/client-agent-team/lib/types/client/TeamCountBadge.js +25 -0
  70. package/packages/client-agent-team/lib/types/client/TeamInboxPage.d.ts +9 -5
  71. package/packages/client-agent-team/lib/types/client/TeamInboxPage.d.ts.map +1 -1
  72. package/packages/client-agent-team/lib/types/client/TeamInboxPage.js +92 -23
  73. package/packages/client-agent-team/lib/types/client/TeamMemberRow.d.ts +43 -0
  74. package/packages/client-agent-team/lib/types/client/TeamMemberRow.d.ts.map +1 -0
  75. package/packages/client-agent-team/lib/types/client/TeamMemberRow.js +27 -0
  76. package/packages/client-agent-team/lib/types/client/TeamMembersAction.d.ts +2 -2
  77. package/packages/client-agent-team/lib/types/client/TeamMembersAction.d.ts.map +1 -1
  78. package/packages/client-agent-team/lib/types/client/TeamMembersAction.js +2 -2
  79. package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts +1 -1
  80. package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts.map +1 -1
  81. package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts.map +1 -1
  82. package/packages/client-agent-team/lib/types/client/TeamThreadPage.js +21 -31
  83. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.d.ts +1 -1
  84. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.d.ts.map +1 -1
  85. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.js +29 -11
  86. package/packages/client-agent-team/lib/types/client/index.d.ts.map +1 -1
  87. package/packages/client-agent-team/lib/types/client/index.js +11 -5
  88. package/packages/client-agent-team/lib/types/client/locales.d.ts +54 -16
  89. package/packages/client-agent-team/lib/types/client/locales.d.ts.map +1 -1
  90. package/packages/client-agent-team/lib/types/client/locales.js +54 -16
  91. package/packages/client-agent-team/lib/types/client/slots.d.ts +3 -2
  92. package/packages/client-agent-team/lib/types/client/slots.d.ts.map +1 -1
  93. package/packages/client-agent-team/lib/types/client/team-changes.d.ts +15 -25
  94. package/packages/client-agent-team/lib/types/client/team-changes.d.ts.map +1 -1
  95. package/packages/client-agent-team/lib/types/client/team-changes.js +82 -80
  96. package/packages/client-agent-team/lib/types/client/team-formatters.d.ts +45 -10
  97. package/packages/client-agent-team/lib/types/client/team-formatters.d.ts.map +1 -1
  98. package/packages/client-agent-team/lib/types/client/team-formatters.js +71 -30
  99. package/packages/tool-agent-team/README.md +3 -3
  100. package/packages/tool-agent-team/README.zh.md +3 -3
  101. package/packages/tool-agent-team/lib/host-access.js +19 -0
  102. package/packages/tool-agent-team/lib/index.js +71 -49
  103. package/packages/tool-agent-team/lib/types/host-access.d.ts +10 -0
  104. package/packages/tool-agent-team/lib/types/host-access.d.ts.map +1 -1
  105. package/packages/tool-agent-team/lib/types/index.d.ts.map +1 -1
  106. package/packages/agent-team/lib/progress-nudge.js +0 -328
  107. package/packages/agent-team/lib/types/progress-nudge.d.ts +0 -136
  108. package/packages/agent-team/lib/types/progress-nudge.d.ts.map +0 -1
  109. package/packages/client-agent-team/lib/types/client/TeamSettings.d.ts +0 -3
  110. package/packages/client-agent-team/lib/types/client/TeamSettings.d.ts.map +0 -1
  111. package/packages/client-agent-team/lib/types/client/TeamSettings.js +0 -5
  112. package/packages/client-agent-team/lib/types/client/scope-coverage.d.ts +0 -41
  113. package/packages/client-agent-team/lib/types/client/scope-coverage.d.ts.map +0 -1
  114. package/packages/client-agent-team/lib/types/client/scope-coverage.js +0 -64
@@ -5,10 +5,9 @@ import { TeamComposer } from "./TeamComposer.js";
5
5
  import { diagnosticText, TeamPresenceDot } from "./TeamPresenceDot.js";
6
6
  import { TeamMessage } from "./TeamMessage.js";
7
7
  import { TeamRunDivider } from "./TeamRunDivider.js";
8
- import { formatActivity, formatClaimState, formatTaskStatus, formatTaskTitle, mentionNamesOf, taskStatusDot } from "./team-formatters.js";
8
+ import { formatActivity, formatClaimState, formatTaskStatus, formatTaskTitle, mentionNamesOf, mentionedMemberIds, taskStatusDot } from "./team-formatters.js";
9
9
  import { TeamStateDot } from "./TeamStateDot.js";
10
10
  import { mintRequestId, uploadComposerFiles } from "./requests.js";
11
- import { ScopeCoverage } from "./scope-coverage.js";
12
11
  import { daySeparatorLabel, isRunGap, timelineDayKey } from "./team-separators.js";
13
12
  import { useTimelineScroll } from "./timeline-scroll.js";
14
13
  import { hostTaskRefLookup, jumpToTaskThread } from "./task-refs.js";
@@ -189,35 +188,21 @@ export function TeamThreadPage(props) {
189
188
  return mountedRef.current;
190
189
  }
191
190
  };
192
- // One Host change event wakes every scope it matches: here a workspace commit
193
- // and a presence transition, whose separate polls both deliver that event's
194
- // version. Both asks are the same roster and view read, so each round answers
195
- // one version per scope, and a newer version arriving mid-round runs one
196
- // trailing round instead of being dropped. The two scopes count different
197
- // domains, so coverage and pending versions are tracked per scope.
198
191
  const supplementalRef = useRef();
199
- const supplementalCoverageRef = useRef(new ScopeCoverage());
200
- const refreshSupplemental = (wake) => {
201
- const inFlight = supplementalRef.current;
202
- if (wake === undefined) {
203
- if (inFlight !== undefined)
204
- return inFlight;
205
- }
206
- else if (!supplementalCoverageRef.current.wake(wake.scope, wake.version)) {
207
- return inFlight ?? Promise.resolve();
208
- }
209
- const coverage = supplementalCoverageRef.current;
192
+ const supplementalPendingRef = useRef(false);
193
+ const refreshSupplemental = () => {
194
+ supplementalPendingRef.current = true;
195
+ if (supplementalRef.current !== undefined)
196
+ return supplementalRef.current;
210
197
  const round = (async () => {
211
- for (;;) {
212
- coverage.beginRound();
213
- const applied = await applySupplemental();
214
- // A newer change landed while this round fetched: cover it too, and
215
- // keep going only while the page is still the one asking.
216
- if (!applied || !coverage.finishRound())
198
+ // Collect synchronous scope notifications before issuing the shared read.
199
+ await Promise.resolve();
200
+ while (mountedRef.current && supplementalPendingRef.current) {
201
+ supplementalPendingRef.current = false;
202
+ if (!await applySupplemental())
217
203
  return;
218
204
  }
219
205
  })().finally(() => {
220
- // A remount may already own a newer round; only this one clears itself.
221
206
  if (supplementalRef.current === round)
222
207
  supplementalRef.current = undefined;
223
208
  });
@@ -283,7 +268,7 @@ export function TeamThreadPage(props) {
283
268
  mountedRef.current = true;
284
269
  // The previous mount's supplemental round must not answer for this one.
285
270
  supplementalRef.current = undefined;
286
- supplementalCoverageRef.current.reset();
271
+ supplementalPendingRef.current = false;
287
272
  projectionRef.current = undefined;
288
273
  setProjection(undefined);
289
274
  setChannelView(undefined);
@@ -304,7 +289,8 @@ export function TeamThreadPage(props) {
304
289
  setLoading(true);
305
290
  void (async () => {
306
291
  // One parallel round covers the whole first paint. The durable read no
307
- // longer wakes any change scope, so no second wave follows it.
292
+ // longer wakes any change scope; only the subscription baseline can
293
+ // request a catch-up while this first paint is loading.
308
294
  const [read, history, observations] = await Promise.all([
309
295
  readThread({ requestId: readRequestIdRef.current, workspaceId, ...threadRequest }),
310
296
  loadThreadHistory({ workspaceId, ...threadRequest, limit: 20 }).catch(() => undefined),
@@ -356,7 +342,7 @@ export function TeamThreadPage(props) {
356
342
  setError(update.message);
357
343
  return;
358
344
  }
359
- void refreshSupplemental({ scope: 'workspace', version: update.version });
345
+ void refreshSupplemental();
360
346
  }),
361
347
  // Presence transitions commit nothing: only the member rows move, so
362
348
  // the roster refresh rides the same supplemental fetch as workspace
@@ -368,7 +354,7 @@ export function TeamThreadPage(props) {
368
354
  setError(update.message);
369
355
  return;
370
356
  }
371
- void refreshSupplemental({ scope: 'presence', version: update.version });
357
+ void refreshSupplemental();
372
358
  }),
373
359
  ];
374
360
  return () => {
@@ -659,8 +645,12 @@ export function TeamThreadPage(props) {
659
645
  }
660
646
  if (result.value.kind === 'committed') {
661
647
  const committed = result.value;
648
+ // The optimistic row chips what the Host is about to report: a
649
+ // hand-typed `@Handle` delivers exactly like a picked recipient, and the
650
+ // committed facts replace this row as soon as they arrive.
651
+ const optimisticMentions = [...new Set([...recipients, ...mentionedMemberIds(draft, channelMembers)])].sort();
662
652
  setCurrentFacts(current => {
663
- const merged = mergeFacts(current, [{ kind: 'message', sequence: committed.message.sequence, message: committed.message, mentions: [...recipients].sort(), occurredAt: committed.receipt.occurredAt }]);
653
+ const merged = mergeFacts(current, [{ kind: 'message', sequence: committed.message.sequence, message: committed.message, mentions: optimisticMentions, occurredAt: committed.receipt.occurredAt }]);
664
654
  currentFactsRef.current = merged;
665
655
  return merged;
666
656
  });
@@ -1,3 +1,3 @@
1
1
  import type { TeamSidebarProps } from './slots.ts';
2
- export declare function TeamWorkspaceBrowser({ wide, expandSidebar, navigation, selectWorkspace, selectChannel, selectInbox, t, useWorkspaces, loadMembers, loadInbox, subscribeChanges, subscribeReads, addMember, loadChannels, createChannel, updateChannel, archiveChannel, updateMember, recoverMember, archiveMember, joinChannel, removeChannelMember, loadModels, openMemberSession }: TeamSidebarProps): import("react").JSX.Element;
2
+ export declare function TeamWorkspaceBrowser({ wide, expandSidebar, navigation, selectWorkspace, selectChannel, selectInbox, t, useWorkspaces, loadMembers, loadInbox, subscribeChanges, subscribeReads, addMember, loadChannels, createChannel, updateChannel, archiveChannel, updateMember, recoverMember, archiveMember, joinWorkspace, leaveWorkspace, joinChannel, removeChannelMember, loadModels, openMemberSession }: TeamSidebarProps): import("react").JSX.Element;
3
3
  //# sourceMappingURL=TeamWorkspaceBrowser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TeamWorkspaceBrowser.d.ts","sourceRoot":"","sources":["../../../src/client/TeamWorkspaceBrowser.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAUlD,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,+BA+GtY"}
1
+ {"version":3,"file":"TeamWorkspaceBrowser.d.ts","sourceRoot":"","sources":["../../../src/client/TeamWorkspaceBrowser.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAyBlD,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,+BAoHra"}
@@ -7,7 +7,18 @@ import { useSidebarSectionOpen, setSidebarSectionOpen } from "./sidebar-sections
7
7
  import { TeamAgentsPanel } from "./TeamAgentsPanel.js";
8
8
  import { TeamChannelsPanel } from "./TeamChannelsPanel.js";
9
9
  import css from './sidebar.module.css';
10
- export function TeamWorkspaceBrowser({ wide, expandSidebar, navigation, selectWorkspace, selectChannel, selectInbox, t, useWorkspaces, loadMembers, loadInbox, subscribeChanges, subscribeReads, addMember, loadChannels, createChannel, updateChannel, archiveChannel, updateMember, recoverMember, archiveMember, joinChannel, removeChannelMember, loadModels, openMemberSession }) {
10
+ /**
11
+ * The Inbox entry's icon with its unread mark. The quantity left this surface
12
+ * and lives in the control's accessible name: the sidebar answers whether
13
+ * anything is waiting at a glance, and the number — which moves on every fact —
14
+ * is what a reader asks for on purpose. The mark hangs off the icon rather than
15
+ * off the control, so the wide card and the 36px rail button put the same dot
16
+ * on the same corner of the same glyph.
17
+ */
18
+ function InboxMark({ unread }) {
19
+ return _jsxs("span", { className: css.inboxMark, children: [_jsx(IconQueueOutline14, { size: 16 }), unread > 0 && _jsx("span", { className: css.inboxDot, "data-team-inbox-dot": true, "aria-hidden": "true" })] });
20
+ }
21
+ export function TeamWorkspaceBrowser({ wide, expandSidebar, navigation, selectWorkspace, selectChannel, selectInbox, t, useWorkspaces, loadMembers, loadInbox, subscribeChanges, subscribeReads, addMember, loadChannels, createChannel, updateChannel, archiveChannel, updateMember, recoverMember, archiveMember, joinWorkspace, leaveWorkspace, joinChannel, removeChannelMember, loadModels, openMemberSession }) {
11
22
  const navigationState = useSyncExternalStore(navigation.subscribe, navigation.getSnapshot, navigation.getSnapshot);
12
23
  const workspaces = useWorkspaces(state => state.items);
13
24
  const selected = navigationState.workspaceId;
@@ -17,26 +28,33 @@ export function TeamWorkspaceBrowser({ wide, expandSidebar, navigation, selectWo
17
28
  // one is set, the selected Agent card while a Member Session view is open,
18
29
  // otherwise the browsed Workspace's overview. The selected row keeps its
19
30
  // quiet folder tint (data-selected) in every case. The mention-Inbox card
20
- // takes the marker while the Inbox page stands.
31
+ // takes the marker while the Inbox page stands, and stands down while the
32
+ // embedded Member Session covers that page: the Inbox stays the remembered
33
+ // face underneath — closing the overlay returns to it, marker included —
34
+ // but the card is not a second current page while an Agent holds the seat.
21
35
  const overviewIsCurrent = navigationState.channelRef === undefined && navigationState.memberSessionId === undefined && navigationState.inbox !== true;
22
- const inboxIsCurrent = navigationState.inbox === true;
36
+ const inboxIsCurrent = navigationState.inbox === true && navigationState.memberSessionId === undefined;
23
37
  const [creatingAgents, setCreatingAgents] = useState([]);
24
38
  // Rail icons request expansion and name the section to reveal once wide.
25
39
  const [pendingSection, setPendingSection] = useState();
26
40
  const channelsRef = useRef(null);
27
41
  const agentsRef = useRef(null);
28
42
  const workspacesOpen = useSidebarSectionOpen(undefined, 'workspaces');
29
- // The cross-Workspace mention badge: one scope-less subscription while the
30
- // Team sidebar stands; every wake re-pulls each Workspace's direct-only
31
- // total (limit 1 — totals cover every row, never the list). Same-burst
32
- // wakes coalesce behind a short debounce; the total is still whatever the
33
- // Host's direct-only projection returns.
43
+ // The cross-Workspace Inbox badge: one scope-less subscription while the
44
+ // Team sidebar stands; every wake re-pulls each Workspace's unread total
45
+ // (limit 1 — totals cover every row, never the list). Same-burst wakes
46
+ // coalesce behind a short debounce; the number is whatever the Host's whole
47
+ // unread slice returns, mentions included rather than alone.
34
48
  const [inboxTotal, setInboxTotal] = useState(0);
49
+ // One name for both entries: what the control is, and how much waits behind
50
+ // it. The rail repeats it as its hover hint, which is the only place a reader
51
+ // still meets the quantity without opening the page.
52
+ const inboxLabel = inboxTotal > 0 ? t('inboxTitleWithCount', { count: inboxTotal }) : t('inboxTitle');
35
53
  useEffect(() => {
36
54
  let disposed = false;
37
55
  let scheduled;
38
56
  const refresh = async () => {
39
- const results = await Promise.all(workspaces.map(workspace => loadInbox({ workspaceId: workspace.workspaceId, directOnly: true, limit: 1 })));
57
+ const results = await Promise.all(workspaces.map(workspace => loadInbox({ workspaceId: workspace.workspaceId, limit: 1 })));
40
58
  if (disposed)
41
59
  return;
42
60
  setInboxTotal(results.reduce((sum, result) => result.ok ? sum + result.value.totalUnreadCount : sum, 0));
@@ -80,7 +98,7 @@ export function TeamWorkspaceBrowser({ wide, expandSidebar, navigation, selectWo
80
98
  queueMicrotask(() => { node?.querySelector('button')?.focus(); });
81
99
  }, [wide, pendingSection]);
82
100
  if (!wide) {
83
- return _jsxs("nav", { className: css.railWorkspace, "aria-label": t('workspaceSections'), children: [_jsx(Tooltip, { label: t('mentionsOfMe'), side: "right", children: _jsxs("button", { type: "button", className: css.railButton, "aria-label": inboxTotal > 0 ? t('mentionsOfMeWithCount', { count: inboxTotal }) : t('mentionsOfMe'), "aria-current": inboxIsCurrent ? 'page' : undefined, onClick: () => { selectInbox(); expandSidebar(); }, children: [_jsx(IconQueueOutline14, { size: 16 }), inboxTotal > 0 && _jsx("span", { className: css.inboxBadge, "aria-hidden": "true", children: inboxTotal > 99 ? '99+' : inboxTotal })] }) }), _jsx(Tooltip, { label: t('channels'), side: "right", children: _jsx("button", { type: "button", className: css.railButton, "aria-label": t('channels'), onClick: () => { setPendingSection('channels'); expandSidebar(); }, children: _jsx(IconListPenOutline16, { size: 16 }) }) }), _jsx(Tooltip, { label: t('agents'), side: "right", children: _jsx("button", { type: "button", className: css.railButton, "aria-label": t('agents'), onClick: () => { setPendingSection('agents'); expandSidebar(); }, children: _jsx(IconAgentPresetOutline16, { size: 16 }) }) })] });
101
+ return _jsxs("nav", { className: css.railWorkspace, "aria-label": t('workspaceSections'), children: [_jsx(Tooltip, { label: inboxLabel, side: "right", children: _jsx("button", { type: "button", className: css.railButton, "aria-label": inboxLabel, "aria-current": inboxIsCurrent ? 'page' : undefined, onClick: () => { selectInbox(); expandSidebar(); }, children: _jsx(InboxMark, { unread: inboxTotal }) }) }), _jsx(Tooltip, { label: t('channels'), side: "right", children: _jsx("button", { type: "button", className: css.railButton, "aria-label": t('channels'), onClick: () => { setPendingSection('channels'); expandSidebar(); }, children: _jsx(IconListPenOutline16, { size: 16 }) }) }), _jsx(Tooltip, { label: t('agents'), side: "right", children: _jsx("button", { type: "button", className: css.railButton, "aria-label": t('agents'), onClick: () => { setPendingSection('agents'); expandSidebar(); }, children: _jsx(IconAgentPresetOutline16, { size: 16 }) }) })] });
84
102
  }
85
- return _jsxs("section", { className: css.workspaceBrowser, "aria-label": t('workspaces'), children: [_jsxs("button", { type: "button", className: css.inboxCard, "aria-label": inboxTotal > 0 ? t('mentionsOfMeWithCount', { count: inboxTotal }) : t('mentionsOfMe'), "aria-current": inboxIsCurrent ? 'page' : undefined, onClick: selectInbox, children: [_jsx(IconQueueOutline14, { size: 16 }), _jsx("span", { className: css.inboxCardLabel, children: t('mentionsOfMe') }), inboxTotal > 0 && _jsx("span", { className: css.inboxBadge, "aria-hidden": "true", children: inboxTotal > 99 ? '99+' : inboxTotal })] }), _jsx(TeamSidebarSection, { title: t('workspaces'), open: workspacesOpen, onToggle: open => { setSidebarSectionOpen(undefined, 'workspaces', open); }, children: _jsxs("div", { className: css.workspaceList, children: [workspaces.map(workspace => _jsx(TeamWorkspaceRow, { workspaceId: workspace.workspaceId, title: workspace.title, path: workspace.path, selected: workspace.workspaceId === selectedId, current: workspace.workspaceId === selectedId && overviewIsCurrent, onSelect: selectWorkspace }, workspace.workspaceId)), workspaces.length === 0 && _jsx("p", { className: css.emptyState, children: t('empty') })] }) }), selectedId !== undefined && _jsxs("div", { className: css.workspaceSection, children: [_jsx("div", { ref: channelsRef, children: _jsx(TeamChannelsPanel, { workspaceId: selectedId, loadMembers: loadMembers, loadChannels: loadChannels, subscribeChanges: subscribeChanges, createChannel: createChannel, updateChannel: updateChannel, archiveChannel: archiveChannel, joinChannel: joinChannel, removeChannelMember: removeChannelMember, creatingAgents: creatingAgents.filter(request => request.workspaceId === selectedId), ...(navigationState.memberSessionId !== undefined || navigationState.channelRef === undefined ? {} : { selectedChannelRef: navigationState.channelRef }), selectChannel: selectChannel, t: t }, selectedId) }), _jsx("div", { ref: agentsRef, children: _jsx(TeamAgentsPanel, { workspaceId: selectedId, loadMembers: loadMembers, subscribeChanges: subscribeChanges, addMember: addMember, updateMember: updateMember, recoverMember: recoverMember, archiveMember: archiveMember, loadModels: loadModels, ...(navigationState.memberSessionId === undefined ? {} : { memberSessionId: navigationState.memberSessionId }), openMemberSession: openMemberSession, onCreatingChange: (request, creating) => { setCreatingAgents(current => creating ? [...current.filter(item => item.requestId !== request.requestId), request] : current.filter(item => item.requestId !== request.requestId)); }, t: t }, selectedId) })] })] });
103
+ return _jsxs("section", { className: css.workspaceBrowser, "aria-label": t('workspaces'), children: [_jsxs("button", { type: "button", className: css.inboxCard, "aria-label": inboxLabel, "aria-current": inboxIsCurrent ? 'page' : undefined, onClick: selectInbox, children: [_jsx(InboxMark, { unread: inboxTotal }), _jsx("span", { className: css.inboxCardLabel, children: t('inboxTitle') })] }), _jsx(TeamSidebarSection, { title: t('workspaces'), open: workspacesOpen, onToggle: open => { setSidebarSectionOpen(undefined, 'workspaces', open); }, children: _jsxs("div", { className: css.workspaceList, children: [workspaces.map(workspace => _jsx(TeamWorkspaceRow, { workspaceId: workspace.workspaceId, title: workspace.title, path: workspace.path, selected: workspace.workspaceId === selectedId, current: workspace.workspaceId === selectedId && overviewIsCurrent, onSelect: selectWorkspace }, workspace.workspaceId)), workspaces.length === 0 && _jsx("p", { className: css.emptyState, children: t('empty') })] }) }), selectedId !== undefined && _jsxs("div", { className: css.workspaceSection, children: [_jsx("div", { ref: channelsRef, children: _jsx(TeamChannelsPanel, { workspaceId: selectedId, loadMembers: loadMembers, loadChannels: loadChannels, subscribeChanges: subscribeChanges, createChannel: createChannel, updateChannel: updateChannel, archiveChannel: archiveChannel, joinChannel: joinChannel, removeChannelMember: removeChannelMember, creatingAgents: creatingAgents.filter(request => request.workspaceId === selectedId), ...(navigationState.memberSessionId !== undefined || navigationState.channelRef === undefined ? {} : { selectedChannelRef: navigationState.channelRef }), selectChannel: selectChannel, t: t }, selectedId) }), _jsx("div", { ref: agentsRef, children: _jsx(TeamAgentsPanel, { workspaceId: selectedId, loadMembers: loadMembers, subscribeChanges: subscribeChanges, addMember: addMember, updateMember: updateMember, recoverMember: recoverMember, archiveMember: archiveMember, joinWorkspace: joinWorkspace, leaveWorkspace: leaveWorkspace, loadModels: loadModels, ...(navigationState.memberSessionId === undefined ? {} : { memberSessionId: navigationState.memberSessionId }), openMemberSession: openMemberSession, onCreatingChange: (request, creating) => { setCreatingAgents(current => creating ? [...current.filter(item => item.requestId !== request.requestId), request] : current.filter(item => item.requestId !== request.requestId)); }, t: t }, selectedId) })] })] });
86
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAqCnE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAK5C,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,cAAc,CAAA;AAEnD,YAAY,EAAE,QAAQ,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC9F,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIhD,eAAO,MAAM,MAAM,UAElB,CAAA;AAED,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,IAAI,EAAE,OAAO,CAAA;KACd;CACF;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,cAAc,EAAE,cAAc,CAAA;QAC9B,UAAU,EAAE,cAAc,CAAA;KAC3B;CACF;AA8LD,wBAAsB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAuCnE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAK5C,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,cAAc,CAAA;AAEnD,YAAY,EAAE,QAAQ,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC9F,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIhD,eAAO,MAAM,MAAM,UAElB,CAAA;AAED,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,IAAI,EAAE,OAAO,CAAA;KACd;CACF;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,cAAc,EAAE,cAAc,CAAA;QAC9B,UAAU,EAAE,cAAc,CAAA;KAC3B;CACF;AAoMD,wBAAsB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7D"}
@@ -1,9 +1,9 @@
1
- import agentTeamRemote from '../../../agent-team/lib/typert.remote-client.js';
1
+ import agentTeamRemote from '@wowyuarm/dsh-agent-team/remote';
2
2
  import { TeamNavigation } from "./navigation.js";
3
3
  import { TeamChangeStream, TeamReadStream } from "./team-changes.js";
4
4
  import { TeamDraftStore } from "./drafts.js";
5
5
  import { TeamFooterAction } from "./TeamFooterAction.js";
6
- import { TeamSettings } from "./TeamSettings.js";
6
+ import { TeamMembersAction } from "./TeamMembersAction.js";
7
7
  import { TeamConversation } from "./TeamConversation.js";
8
8
  import { TeamWorkspaceBrowser } from "./TeamWorkspaceBrowser.js";
9
9
  import { en, zh } from "./locales.js";
@@ -46,6 +46,8 @@ entryKey) {
46
46
  recoverMember: (request) => ctx.remote.agentTeam.recoverMember(request),
47
47
  clearMemberContext: (request) => ctx.remote.agentTeam.clearMemberContext(request),
48
48
  archiveMember: (request) => ctx.remote.agentTeam.archiveMember(request),
49
+ joinWorkspace: (request) => ctx.remote.agentTeam.joinWorkspace(request),
50
+ leaveWorkspace: (request) => ctx.remote.agentTeam.leaveWorkspace(request),
49
51
  // The Host-scoped catalog needs no live Member, so suspended ones stay editable too.
50
52
  loadModels: () => ctx.remote.session.modelCatalog(),
51
53
  openMemberSession: openMemberSessionImpl,
@@ -152,7 +154,12 @@ function applyUi(ctx) {
152
154
  restore();
153
155
  };
154
156
  }, 'agent-team: member session restore');
155
- const changes = new TeamChangeStream((request, signal) => ctx.remote.agentTeam.changes(request, signal));
157
+ const changes = new TeamChangeStream(ctx.remote);
158
+ ctx.effect(() => () => changes.dispose(), 'agent-team: change subscriptions');
159
+ // The Harness resumes a live generation across reconnects, but a stream that
160
+ // already ended for good is this layer's to rebuild — and a new Host generation
161
+ // is the one moment the scope it was waiting for can be there again.
162
+ ctx.on('connection/reset', () => { changes.recover(); });
156
163
  const reads = new TeamReadStream();
157
164
  const loadMemberGroups = async () => {
158
165
  const workspaces = ctx.workspaces.list.getSnapshot().items;
@@ -183,12 +190,11 @@ function applyUi(ctx) {
183
190
  navigation.actions().exitMemberSession();
184
191
  navigation.actions().leaveTeam();
185
192
  },
186
- loadMemberGroups,
187
193
  }),
188
194
  }, TeamFooterAction));
189
195
  registerModeShadow(ctx, navigation, changes, reads, drafts, 'sidebar.workspaces', TeamWorkspaceBrowser);
190
196
  registerModeShadow(ctx, navigation, changes, reads, drafts, 'main', TeamConversation, undefined, 'conversation');
191
- registerModeShadow(ctx, navigation, changes, reads, drafts, 'sidebar.settings', TeamSettings, () => ({ loadMemberGroups }));
197
+ registerModeShadow(ctx, navigation, changes, reads, drafts, 'sidebar.settings', TeamMembersAction, () => ({ loadMemberGroups }));
192
198
  }
193
199
  export async function apply(ctx) {
194
200
  const disposeRemote = await ctx.remote.$mount(agentTeamRemote);
@@ -10,6 +10,15 @@ export declare const zh: {
10
10
  readonly teamMode: "团队模式";
11
11
  readonly workspaceSections: "工作区内容";
12
12
  readonly addAgent: "添加 Agent";
13
+ readonly importAgentTitle: "从其他 Workspace 引入";
14
+ readonly importAgent: "引入";
15
+ readonly importingAgent: "引入中…";
16
+ readonly importAgentNotice: "选择已有 Agent 加入当前 Workspace。身份、记忆与会话保持不变;Channel 仍需另行加入。";
17
+ readonly emptyImportAgents: "没有可引入的 Agent。";
18
+ readonly withdrawAgent: "从此 Workspace 撤回";
19
+ readonly withdrawAgentTitle: "撤回 {name}?";
20
+ readonly withdrawAgentNotice: "仅撤出当前 Workspace:退出此处所有 Channel、释放活跃 Claim 并清除 Attention。其他 Workspace 的工作、会话和私有记忆不受影响。";
21
+ readonly archiveOtherWorkspaces: "同时从其他 {count} 个 Workspace 收起。";
13
22
  readonly cancel: "取消";
14
23
  readonly close: "关闭";
15
24
  readonly copyCode: "复制";
@@ -27,14 +36,20 @@ export declare const zh: {
27
36
  readonly statusError: "错误";
28
37
  readonly statusUnavailable: "不可用";
29
38
  readonly addChannel: "新建频道";
30
- readonly mentionsOfMe: "提到我";
31
- readonly mentionsOfMeWithCount: "提到我,{count} 条未读提及";
32
- readonly loadingInbox: "正在加载提到我…";
33
- readonly inboxEmptyTitle: "还没有人提到你";
34
- readonly inboxEmptyHint: "需要你知道或做决定时,成员会提到你";
35
- readonly inboxTimeToday: "今天";
39
+ readonly inboxTitle: "收件箱";
40
+ readonly inboxTitleWithCount: "收件箱,{count} 条未读";
41
+ readonly loadingInbox: "正在加载收件箱…";
42
+ readonly inboxEmptyTitle: "收件箱是空的";
43
+ readonly inboxEmptyHint: "你参与的 Thread 有新活动、或有人提到你时,会出现在这里";
36
44
  readonly inboxTimeYesterday: "昨天";
37
- readonly inboxHeaderMeta: "{threads} 个 Thread · {mentions} 条提及,按最新提及排序";
45
+ readonly inboxHeaderThreads: "{count} 个 Thread";
46
+ readonly inboxHeaderUnread: "{count} 条未读";
47
+ readonly inboxHeaderMentions: "{count} 条提及";
48
+ readonly inboxRowUnread: "{count} 条未读";
49
+ readonly inboxRowUnreadMentions: "{count} 条未读,其中 {mentions} 条提及";
50
+ readonly inboxRowActor: "最新来自 {name}";
51
+ readonly inboxSectionNeedsMe: "需要我";
52
+ readonly inboxSectionRecent: "最近活跃";
38
53
  readonly channelName: "名称";
39
54
  readonly channelDescription: "说明";
40
55
  readonly initialMembers: "初始成员";
@@ -100,12 +115,16 @@ export declare const zh: {
100
115
  readonly taskStatusInReview: "待验收";
101
116
  readonly taskStatusDone: "已完成";
102
117
  readonly taskStatusClosed: "已关闭";
103
- readonly taskMessageCount: "{count} 条消息";
104
118
  readonly taskLabel: "Task #{number}";
105
119
  readonly taskPending: "Task …";
106
120
  readonly openTask: "打开 Task #{number}";
107
121
  readonly openThread: "打开讨论";
122
+ readonly openTaskUnread: "打开 Task #{number}({count} 条新动态)";
123
+ readonly openThreadUnread: "打开讨论({count} 条新动态)";
108
124
  readonly threadLabel: "讨论";
125
+ readonly recentActivity: "最近活动 {time}";
126
+ readonly replyAction: "回复";
127
+ readonly claimers: "由 {names} 处理";
109
128
  readonly asTask: "作为任务";
110
129
  readonly promoteToTask: "转为 Task";
111
130
  readonly promotingTask: "正在转为 Task…";
@@ -167,6 +186,15 @@ export declare const en: {
167
186
  readonly teamMode: "Team mode";
168
187
  readonly workspaceSections: "Workspace sections";
169
188
  readonly addAgent: "Add Agent";
189
+ readonly importAgentTitle: "Bring in from another Workspace";
190
+ readonly importAgent: "Bring in";
191
+ readonly importingAgent: "Joining…";
192
+ readonly importAgentNotice: "Choose an existing Agent to join this Workspace. Identity, memory, and session stay unchanged; join Channels separately.";
193
+ readonly emptyImportAgents: "No Agents available to bring in.";
194
+ readonly withdrawAgent: "Withdraw from this Workspace";
195
+ readonly withdrawAgentTitle: "Withdraw {name}?";
196
+ readonly withdrawAgentNotice: "Leave only this Workspace: exit its Channels, release active Claims, and clear Attention. Work elsewhere, the session, and private memory stay unchanged.";
197
+ readonly archiveOtherWorkspaces: "Also hides this Agent in {count} other Workspace(s).";
170
198
  readonly cancel: "Cancel";
171
199
  readonly close: "Close";
172
200
  readonly copyCode: "Copy";
@@ -184,14 +212,20 @@ export declare const en: {
184
212
  readonly statusError: "Error";
185
213
  readonly statusUnavailable: "Unavailable";
186
214
  readonly addChannel: "New Channel";
187
- readonly mentionsOfMe: "Mentions of me";
188
- readonly mentionsOfMeWithCount: "Mentions of me, {count} unread mention(s)";
189
- readonly loadingInbox: "Loading mentions…";
190
- readonly inboxEmptyTitle: "Nobody has mentioned you yet";
191
- readonly inboxEmptyHint: "Members will mention you when you must know or decide";
192
- readonly inboxTimeToday: "Today";
215
+ readonly inboxTitle: "Inbox";
216
+ readonly inboxTitleWithCount: "Inbox, {count} unread";
217
+ readonly loadingInbox: "Loading Inbox…";
218
+ readonly inboxEmptyTitle: "Your Inbox is empty";
219
+ readonly inboxEmptyHint: "Threads you take part in appear here when they have new activity or mention you";
193
220
  readonly inboxTimeYesterday: "Yesterday";
194
- readonly inboxHeaderMeta: "{threads} Thread(s) · {mentions} mention(s), newest first";
221
+ readonly inboxHeaderThreads: "{count} Thread(s)";
222
+ readonly inboxHeaderUnread: "{count} unread";
223
+ readonly inboxHeaderMentions: "{count} mention(s)";
224
+ readonly inboxRowUnread: "{count} unread";
225
+ readonly inboxRowUnreadMentions: "{count} unread, {mentions} mention(s)";
226
+ readonly inboxRowActor: "Latest from {name}";
227
+ readonly inboxSectionNeedsMe: "Needs me";
228
+ readonly inboxSectionRecent: "Recently active";
195
229
  readonly channelName: "Name";
196
230
  readonly channelDescription: "Description";
197
231
  readonly initialMembers: "Initial members";
@@ -257,12 +291,16 @@ export declare const en: {
257
291
  readonly taskStatusInReview: "In review";
258
292
  readonly taskStatusDone: "Done";
259
293
  readonly taskStatusClosed: "Closed";
260
- readonly taskMessageCount: "{count} messages";
261
294
  readonly taskLabel: "Task #{number}";
262
295
  readonly taskPending: "Task …";
263
296
  readonly openTask: "Open Task #{number}";
264
297
  readonly openThread: "Open thread";
298
+ readonly openTaskUnread: "Open Task #{number} ({count} new updates)";
299
+ readonly openThreadUnread: "Open thread ({count} new updates)";
265
300
  readonly threadLabel: "Thread";
301
+ readonly recentActivity: "Last activity {time}";
302
+ readonly replyAction: "Reply";
303
+ readonly claimers: "Handled by {names}";
266
304
  readonly asTask: "As task";
267
305
  readonly promoteToTask: "Convert to Task";
268
306
  readonly promotingTask: "Converting to Task…";
@@ -1 +1 @@
1
- {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4JL,CAAA;AAEV,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4JL,CAAA;AAEV,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+KL,CAAA;AAEV,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+KL,CAAA;AAEV,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAA"}
@@ -10,6 +10,15 @@ export const zh = {
10
10
  teamMode: '团队模式',
11
11
  workspaceSections: '工作区内容',
12
12
  addAgent: '添加 Agent',
13
+ importAgentTitle: '从其他 Workspace 引入',
14
+ importAgent: '引入',
15
+ importingAgent: '引入中…',
16
+ importAgentNotice: '选择已有 Agent 加入当前 Workspace。身份、记忆与会话保持不变;Channel 仍需另行加入。',
17
+ emptyImportAgents: '没有可引入的 Agent。',
18
+ withdrawAgent: '从此 Workspace 撤回',
19
+ withdrawAgentTitle: '撤回 {name}?',
20
+ withdrawAgentNotice: '仅撤出当前 Workspace:退出此处所有 Channel、释放活跃 Claim 并清除 Attention。其他 Workspace 的工作、会话和私有记忆不受影响。',
21
+ archiveOtherWorkspaces: '同时从其他 {count} 个 Workspace 收起。',
13
22
  cancel: '取消',
14
23
  close: '关闭',
15
24
  copyCode: '复制',
@@ -27,14 +36,20 @@ export const zh = {
27
36
  statusError: '错误',
28
37
  statusUnavailable: '不可用',
29
38
  addChannel: '新建频道',
30
- mentionsOfMe: '提到我',
31
- mentionsOfMeWithCount: '提到我,{count} 条未读提及',
32
- loadingInbox: '正在加载提到我…',
33
- inboxEmptyTitle: '还没有人提到你',
34
- inboxEmptyHint: '需要你知道或做决定时,成员会提到你',
35
- inboxTimeToday: '今天',
39
+ inboxTitle: '收件箱',
40
+ inboxTitleWithCount: '收件箱,{count} 条未读',
41
+ loadingInbox: '正在加载收件箱…',
42
+ inboxEmptyTitle: '收件箱是空的',
43
+ inboxEmptyHint: '你参与的 Thread 有新活动、或有人提到你时,会出现在这里',
36
44
  inboxTimeYesterday: '昨天',
37
- inboxHeaderMeta: '{threads} 个 Thread · {mentions} 条提及,按最新提及排序',
45
+ inboxHeaderThreads: '{count} 个 Thread',
46
+ inboxHeaderUnread: '{count} 条未读',
47
+ inboxHeaderMentions: '{count} 条提及',
48
+ inboxRowUnread: '{count} 条未读',
49
+ inboxRowUnreadMentions: '{count} 条未读,其中 {mentions} 条提及',
50
+ inboxRowActor: '最新来自 {name}',
51
+ inboxSectionNeedsMe: '需要我',
52
+ inboxSectionRecent: '最近活跃',
38
53
  channelName: '名称',
39
54
  channelDescription: '说明',
40
55
  initialMembers: '初始成员',
@@ -100,12 +115,16 @@ export const zh = {
100
115
  taskStatusInReview: '待验收',
101
116
  taskStatusDone: '已完成',
102
117
  taskStatusClosed: '已关闭',
103
- taskMessageCount: '{count} 条消息',
104
118
  taskLabel: 'Task #{number}',
105
119
  taskPending: 'Task …',
106
120
  openTask: '打开 Task #{number}',
107
121
  openThread: '打开讨论',
122
+ openTaskUnread: '打开 Task #{number}({count} 条新动态)',
123
+ openThreadUnread: '打开讨论({count} 条新动态)',
108
124
  threadLabel: '讨论',
125
+ recentActivity: '最近活动 {time}',
126
+ replyAction: '回复',
127
+ claimers: '由 {names} 处理',
109
128
  asTask: '作为任务',
110
129
  promoteToTask: '转为 Task',
111
130
  promotingTask: '正在转为 Task…',
@@ -167,6 +186,15 @@ export const en = {
167
186
  teamMode: 'Team mode',
168
187
  workspaceSections: 'Workspace sections',
169
188
  addAgent: 'Add Agent',
189
+ importAgentTitle: 'Bring in from another Workspace',
190
+ importAgent: 'Bring in',
191
+ importingAgent: 'Joining…',
192
+ importAgentNotice: 'Choose an existing Agent to join this Workspace. Identity, memory, and session stay unchanged; join Channels separately.',
193
+ emptyImportAgents: 'No Agents available to bring in.',
194
+ withdrawAgent: 'Withdraw from this Workspace',
195
+ withdrawAgentTitle: 'Withdraw {name}?',
196
+ withdrawAgentNotice: 'Leave only this Workspace: exit its Channels, release active Claims, and clear Attention. Work elsewhere, the session, and private memory stay unchanged.',
197
+ archiveOtherWorkspaces: 'Also hides this Agent in {count} other Workspace(s).',
170
198
  cancel: 'Cancel',
171
199
  close: 'Close',
172
200
  copyCode: 'Copy',
@@ -184,14 +212,20 @@ export const en = {
184
212
  statusError: 'Error',
185
213
  statusUnavailable: 'Unavailable',
186
214
  addChannel: 'New Channel',
187
- mentionsOfMe: 'Mentions of me',
188
- mentionsOfMeWithCount: 'Mentions of me, {count} unread mention(s)',
189
- loadingInbox: 'Loading mentions…',
190
- inboxEmptyTitle: 'Nobody has mentioned you yet',
191
- inboxEmptyHint: 'Members will mention you when you must know or decide',
192
- inboxTimeToday: 'Today',
215
+ inboxTitle: 'Inbox',
216
+ inboxTitleWithCount: 'Inbox, {count} unread',
217
+ loadingInbox: 'Loading Inbox…',
218
+ inboxEmptyTitle: 'Your Inbox is empty',
219
+ inboxEmptyHint: 'Threads you take part in appear here when they have new activity or mention you',
193
220
  inboxTimeYesterday: 'Yesterday',
194
- inboxHeaderMeta: '{threads} Thread(s) · {mentions} mention(s), newest first',
221
+ inboxHeaderThreads: '{count} Thread(s)',
222
+ inboxHeaderUnread: '{count} unread',
223
+ inboxHeaderMentions: '{count} mention(s)',
224
+ inboxRowUnread: '{count} unread',
225
+ inboxRowUnreadMentions: '{count} unread, {mentions} mention(s)',
226
+ inboxRowActor: 'Latest from {name}',
227
+ inboxSectionNeedsMe: 'Needs me',
228
+ inboxSectionRecent: 'Recently active',
195
229
  channelName: 'Name',
196
230
  channelDescription: 'Description',
197
231
  initialMembers: 'Initial members',
@@ -257,12 +291,16 @@ export const en = {
257
291
  taskStatusInReview: 'In review',
258
292
  taskStatusDone: 'Done',
259
293
  taskStatusClosed: 'Closed',
260
- taskMessageCount: '{count} messages',
261
294
  taskLabel: 'Task #{number}',
262
295
  taskPending: 'Task …',
263
296
  openTask: 'Open Task #{number}',
264
297
  openThread: 'Open thread',
298
+ openTaskUnread: 'Open Task #{number} ({count} new updates)',
299
+ openThreadUnread: 'Open thread ({count} new updates)',
265
300
  threadLabel: 'Thread',
301
+ recentActivity: 'Last activity {time}',
302
+ replyAction: 'Reply',
303
+ claimers: 'Handled by {names}',
266
304
  asTask: 'As task',
267
305
  promoteToTask: 'Convert to Task',
268
306
  promotingTask: 'Converting to Task…',
@@ -1,5 +1,5 @@
1
1
  import type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
2
- import type { AgentTeamAddMemberRequest, AgentTeamArchiveChannelRequest, AgentTeamArchiveChannelResult, AgentTeamArchiveMemberRequest, AgentTeamArchiveMemberResult, AgentTeamChannelRef, AgentTeamClientMemberStatus, AgentTeamClearMemberContextRequest, AgentTeamClearMemberContextResult, AgentTeamCreateChannelRequest, AgentTeamCreateChannelResult, AgentTeamInbox, AgentTeamInboxRequest, AgentTeamJoinChannelRequest, AgentTeamJoinChannelResult, AgentTeamGetAttachmentRequest, AgentTeamGetAttachmentResult, AgentTeamPutAttachmentRequest, AgentTeamPutAttachmentResult, AgentTeamMemberResult, AgentTeamRecoverMemberRequest, AgentTeamRecoverMemberResult, AgentTeamMembersRequest, AgentTeamRemoveChannelMemberRequest, AgentTeamRemoveChannelMemberResult, AgentTeamReplyRequest, AgentTeamResolveTaskRefsRequest, AgentTeamResolveTaskRefsResult, AgentTeamReplyResult, AgentTeamConfirmationRequired, AgentTeamThreadHistory, AgentTeamThreadHistoryRequest, AgentTeamThreadObservations, AgentTeamThreadObservationsRequest, AgentTeamThreadReadRequest, AgentTeamThreadReadResult, AgentTeamPromoteThreadRequest, AgentTeamPromoteThreadResult, AgentTeamTaskRequest, AgentTeamTaskResult, AgentTeamSendMessageRequest, AgentTeamSendMessageResult, AgentTeamUpdateChannelRequest, AgentTeamUpdateChannelResult, AgentTeamUpdateMemberRequest, AgentTeamView, AgentTeamViewRequest } from '@wowyuarm/dsh-agent-team/types';
2
+ import type { AgentTeamAddMemberRequest, AgentTeamArchiveChannelRequest, AgentTeamArchiveChannelResult, AgentTeamArchiveMemberRequest, AgentTeamArchiveMemberResult, AgentTeamChannelRef, AgentTeamClientMemberStatus, AgentTeamClearMemberContextRequest, AgentTeamClearMemberContextResult, AgentTeamCreateChannelRequest, AgentTeamCreateChannelResult, AgentTeamInbox, AgentTeamInboxRequest, AgentTeamJoinWorkspaceRequest, AgentTeamJoinWorkspaceResult, AgentTeamLeaveWorkspaceRequest, AgentTeamLeaveWorkspaceResult, AgentTeamJoinChannelRequest, AgentTeamJoinChannelResult, AgentTeamGetAttachmentRequest, AgentTeamGetAttachmentResult, AgentTeamPutAttachmentRequest, AgentTeamPutAttachmentResult, AgentTeamMemberResult, AgentTeamRecoverMemberRequest, AgentTeamRecoverMemberResult, AgentTeamMembersRequest, AgentTeamRemoveChannelMemberRequest, AgentTeamRemoveChannelMemberResult, AgentTeamReplyRequest, AgentTeamResolveTaskRefsRequest, AgentTeamResolveTaskRefsResult, AgentTeamReplyResult, AgentTeamConfirmationRequired, AgentTeamThreadHistory, AgentTeamThreadHistoryRequest, AgentTeamThreadObservations, AgentTeamThreadObservationsRequest, AgentTeamThreadReadRequest, AgentTeamThreadReadResult, AgentTeamPromoteThreadRequest, AgentTeamPromoteThreadResult, AgentTeamTaskRequest, AgentTeamTaskResult, AgentTeamSendMessageRequest, AgentTeamSendMessageResult, AgentTeamUpdateChannelRequest, AgentTeamUpdateChannelResult, AgentTeamUpdateMemberRequest, AgentTeamView, AgentTeamViewRequest } from '@wowyuarm/dsh-agent-team/types';
3
3
  import type { RemoteResult } from '@deepseek-ai/dsh-typert-protocol';
4
4
  import type { TeamNavigationActions, TeamNavigationSnapshot } from './navigation.ts';
5
5
  import type { TeamChangeListener, TeamChangeScope } from './team-changes.ts';
@@ -61,6 +61,8 @@ export type TeamSidebarProps = PropsRuntime<'sidebar.workspaces'> & PropsLocale<
61
61
  */
62
62
  clearMemberContext: (request: AgentTeamClearMemberContextRequest) => Promise<RemoteResult<AgentTeamClearMemberContextResult>>;
63
63
  archiveMember: (request: AgentTeamArchiveMemberRequest) => Promise<RemoteResult<AgentTeamArchiveMemberResult>>;
64
+ joinWorkspace: (request: AgentTeamJoinWorkspaceRequest) => Promise<RemoteResult<AgentTeamJoinWorkspaceResult>>;
65
+ leaveWorkspace: (request: AgentTeamLeaveWorkspaceRequest) => Promise<RemoteResult<AgentTeamLeaveWorkspaceResult>>;
64
66
  joinChannel: (request: AgentTeamJoinChannelRequest) => Promise<RemoteResult<AgentTeamJoinChannelResult>>;
65
67
  removeChannelMember: (request: AgentTeamRemoveChannelMemberRequest) => Promise<RemoteResult<AgentTeamRemoveChannelMemberResult>>;
66
68
  /** Session-independent Host model catalog (`llm.models`); needs no live Member. */
@@ -102,6 +104,5 @@ export interface TeamMemberGroup {
102
104
  }
103
105
  export type TeamFooterProps = PropsRuntime<'sidebar.footer.action'> & PropsLocale<'team'> & TeamNavigationActions & {
104
106
  navigation: TeamNavigationSource;
105
- loadMemberGroups: () => Promise<readonly TeamMemberGroup[]>;
106
107
  };
107
108
  //# sourceMappingURL=slots.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../../src/client/slots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,KAAK,EACV,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,4BAA4B,EAC5B,mBAAmB,EACnB,2BAA2B,EAC3B,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,4BAA4B,EAC5B,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,uBAAuB,EACvB,mCAAmC,EACnC,kCAAkC,EAClC,qBAAqB,EACrB,+BAA+B,EAC/B,8BAA8B,EAC9B,oBAAoB,EACpB,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,2BAA2B,EAC3B,kCAAkC,EAClC,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,aAAa,EACb,oBAAoB,EACrB,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,sBAAsB,CAAA;IACzC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CAChD;AAED,gGAAgG;AAChG,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,KAAK,MAAM,IAAI,CAAA;AAEvG,wEAAwE;AACxE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAA;KACnD,CAAA;CACF;AAED,2EAA2E;AAC3E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAC5C;AAED,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACvG;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,oBAAoB,CAAC,GAC7D,WAAW,CAAC,MAAM,CAAC,GACnB,qBAAqB,GACrB;IACA,UAAU,EAAE,oBAAoB,CAAA;IAChC,WAAW,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,YAAY,CAAC,SAAS,2BAA2B,EAAE,CAAC,CAAC,CAAA;IAChH,oFAAoF;IACpF,SAAS,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAA;IACpF,+GAA+G;IAC/G,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;IACpD,gBAAgB,EAAE,oBAAoB,CAAA;IACtC,SAAS,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAC/F,YAAY,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAA;IACrF,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,cAAc,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC,CAAA;IACjH,YAAY,EAAE,CAAC,OAAO,EAAE,4BAA4B,KAAK,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAA;IACrG,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,OAAO,EAAE,kCAAkC,KAAK,OAAO,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC,CAAA;IAC7H,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,WAAW,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAA;IACxG,mBAAmB,EAAE,CAAC,OAAO,EAAE,mCAAmC,KAAK,OAAO,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAC,CAAA;IAChI,mFAAmF;IACnF,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACzD,6EAA6E;IAC7E,iBAAiB,EAAE,CAAC,SAAS,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IAC1F,kBAAkB,CAAC,EAAE,mBAAmB,CAAA;CACzC,CAAA;AAEH,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,qBAAqB,GAAG;IACvG,UAAU,EAAE,oBAAoB,CAAA;IAChC,gEAAgE;IAChE,MAAM,EAAE,cAAc,CAAA;IACtB,YAAY,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAA;IACrF,UAAU,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAA;IACrG,iBAAiB,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAC5G,gBAAgB,EAAE,oBAAoB,CAAA;IACtC,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,WAAW,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAA;IACxG,WAAW,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAA;IACxG,mBAAmB,EAAE,CAAC,OAAO,EAAE,mCAAmC,KAAK,OAAO,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAC,CAAA;IAChI,KAAK,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,YAAY,CAAC,oBAAoB,GAAG,6BAA6B,CAAC,CAAC,CAAA;IACtH,UAAU,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAA;IACzF,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,eAAe,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,OAAO,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAA;IACpH,WAAW,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,YAAY,CAAC,SAAS,2BAA2B,EAAE,CAAC,CAAC,CAAA;IAChH,2FAA2F;IAC3F,SAAS,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAA;IACpF,wGAAwG;IACxG,kBAAkB,EAAE,CAAC,OAAO,EAAE,kCAAkC,KAAK,OAAO,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC,CAAA;CACxH,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG;IACvF,gBAAgB,EAAE,MAAM,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAA;CAC5D,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,2BAA2B,EAAE,CAAA;CACzD;AAED,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,uBAAuB,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,qBAAqB,GAAG;IAClH,UAAU,EAAE,oBAAoB,CAAA;IAChC,gBAAgB,EAAE,MAAM,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAA;CAC5D,CAAA"}
1
+ {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../../src/client/slots.ts"],"names":[],"mappings":"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"}