@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
@@ -1,7 +1,7 @@
1
- import { AgentTeamDmDeliveryError, markAgentTeamPreset } from '@wowyuarm/dsh-agent-team/host';
1
+ import { AGENT_TEAM_HUMAN_HANDLE, AgentTeamDmDeliveryError, markAgentTeamPreset } from '@wowyuarm/dsh-agent-team/host';
2
2
  import { formatTeamTimestamp } from '@wowyuarm/dsh-agent-team/time-format';
3
3
  import { registerContextTools } from "./context-tools.js";
4
- import { member, service } from "./host-access.js";
4
+ import { service, workspaceOf, workspaceParam } from "./host-access.js";
5
5
  import { defineTool } from '@deepseek-ai/dsh-tools';
6
6
  export const name = 'wowyuarm-agent-team-tools';
7
7
  export const inject = ['tools'];
@@ -114,13 +114,13 @@ function rejectionLines(noun, value) {
114
114
  }
115
115
  const teamInbox = defineTool({
116
116
  name: 'team_inbox',
117
- description: 'List your bounded Team Inbox for triage: unread Thread summaries with counts, without message bodies and without marking anything read. Read a selected Thread with team_thread read; the inbox itself authorizes no mutation.',
118
- parameters: { limit: { type: 'number' } },
117
+ description: 'List your bounded Team Inbox across all joined Workspaces for triage: unread Thread summaries with counts, without message bodies and without marking anything read. Read a selected Thread with team_thread read; the inbox itself authorizes no mutation.',
118
+ parameters: { limit: { type: 'number' }, workspace: { type: 'string', description: 'Optional Workspace id filter. Omit to triage all your participations together.' } },
119
119
  output: {
120
120
  schema: { type: 'object', additionalProperties: false, properties: {
121
121
  totalUnreadCount: { type: 'number', required: true }, totalDirectCount: { type: 'number', required: true },
122
122
  items: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: {
123
- threadRef: { type: 'string', required: true }, channelRef: { type: 'string', required: true },
123
+ workspaceId: { type: 'string', required: true }, threadRef: { type: 'string', required: true }, channelRef: { type: 'string', required: true },
124
124
  taskRef: { type: 'string' }, status: { type: 'string' }, revision: { type: 'number', required: true }, unreadCount: { type: 'number', required: true }, directCount: { type: 'number', required: true },
125
125
  taskNumber: { type: 'number' }, newestOccurredAt: { type: 'string' },
126
126
  } } },
@@ -139,7 +139,7 @@ const teamInbox = defineTool({
139
139
  const shown = value.items.reduce((sum, item) => sum + item.unreadCount, 0);
140
140
  return [{ type: 'text', text: [
141
141
  `Inbox — ${value.totalUnreadCount} unread update(s) total, ${value.totalDirectCount} direct, across ${value.items.length} Thread(s) shown${value.totalUnreadCount > shown ? `; ${value.totalUnreadCount - shown} more on Threads beyond this bounded list — call again with a larger limit.` : '.'}`,
142
- ...value.items.map(item => `${item.threadRef}${item.channelRef === undefined ? '' : ` · ${item.channelRef}`}${item.taskRef === undefined ? '' : ` · ${taskStanding(item)}`} · ${item.unreadCount} unread, ${item.directCount} direct${item.newestOccurredAt === undefined ? '' : ` · newest ${formatTeamTimestamp(item.newestOccurredAt)}`}`),
142
+ ...value.items.map(item => `${item.workspaceId} · ${item.threadRef}${item.channelRef === undefined ? '' : ` · ${item.channelRef}`}${item.taskRef === undefined ? '' : ` · ${taskStanding(item)}`} · ${item.unreadCount} unread, ${item.directCount} direct${item.newestOccurredAt === undefined ? '' : ` · newest ${formatTeamTimestamp(item.newestOccurredAt)}`}`),
143
143
  'Read a selected Thread with team_thread read. Listing changes no read state and supplies no write token.',
144
144
  ].join('\n') }];
145
145
  },
@@ -148,16 +148,13 @@ const teamInbox = defineTool({
148
148
  const agent = exec.agent;
149
149
  if (agent === undefined)
150
150
  throw new Error('team_inbox requires an Agent session');
151
- const current = member(agent);
152
151
  const host = service(agent);
153
- const inbox = host.inboxForAgent(agent, { workspaceId: current.workspaceId, ...(args.limit === undefined ? {} : { limit: args.limit }) });
154
- const taskNumbers = new Map(host.viewForAgent(agent, { workspaceId: current.workspaceId, topLevelOnly: true, includeActivities: false, direction: 'before' })
155
- .taskNumbers.map(entry => [entry.taskRef, entry.taskNumber]));
152
+ const inbox = host.inboxForAgent(agent, { ...(args.workspace === undefined ? {} : { workspaceId: workspaceOf(args, agent) }), ...(args.limit === undefined ? {} : { limit: args.limit }) });
156
153
  return {
157
154
  totalUnreadCount: inbox.totalUnreadCount, totalDirectCount: inbox.totalDirectCount,
158
155
  items: inbox.items.map(item => {
159
- const taskNumber = item.task === undefined ? undefined : taskNumbers.get(item.task.taskRef);
160
- return { threadRef: item.thread.threadRef, channelRef: item.channelRef,
156
+ const taskNumber = item.taskNumber;
157
+ return { workspaceId: item.workspaceId, threadRef: item.thread.threadRef, channelRef: item.channelRef,
161
158
  ...(item.task === undefined ? {} : { taskRef: item.task.taskRef, status: item.task.status }),
162
159
  revision: item.thread.revision, unreadCount: item.unreadCount, directCount: item.directCount, newestOccurredAt: item.newestOccurredAt,
163
160
  ...(taskNumber === undefined ? {} : { taskNumber }) };
@@ -167,18 +164,19 @@ const teamInbox = defineTool({
167
164
  });
168
165
  const teamThread = defineTool({
169
166
  name: 'team_thread',
170
- description: 'Read or manage your Attention on one Thread. read acknowledges one chronological batch of unread facts and is the only read-side source of a next-write token — and only once no unread remains; your own committed public mutations hand off the token as well. history pages older facts without changing read state; status, follow, and unfollow change or report Attention only and render no Thread timeline. Prefer threadRef; taskRef is a compatibility alias when the Thread has a Task.',
167
+ description: 'Read or manage your Attention on one Thread. read acknowledges one chronological batch of unread facts and is the only read-side source of a next-write token — and only once no unread remains; your own committed public mutations hand off the token as well. A read orients on the Thread anchor and that batch, never the whole Thread: a Member re-entering one it has read before gets no background at all, so the facts between are its own to page back to. history pages older facts without changing read state; status, follow, and unfollow change or report Attention only and render no Thread timeline. Prefer threadRef; taskRef is a compatibility alias when the Thread has a Task.',
171
168
  parameters: {
172
169
  action: { type: 'string', required: true, enum: ['status', 'follow', 'unfollow', 'read', 'history'] },
173
170
  threadRef: { type: 'string', description: "Full branded Thread ref exactly as returned by Team tools, including the 'thread:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
174
171
  taskRef: { type: 'string', description: "Optional Task ref alias for released clients. Prefer threadRef; if both are given they must identify the same Thread." },
175
- beforeSequence: { type: 'number' }, limit: { type: 'number' },
172
+ beforeSequence: { type: 'number' }, limit: { type: 'number' }, workspace: workspaceParam,
176
173
  },
177
174
  output: {
178
175
  schema: { type: 'object', additionalProperties: false, properties: {
176
+ workspaceId: { type: 'string', required: true }, channelRef: { type: 'string', required: true },
179
177
  kind: { type: 'string', required: true }, threadRef: { type: 'string', required: true }, taskRef: { type: 'string' },
180
178
  revision: { type: 'number', required: true }, status: { type: 'string' }, resolution: { type: 'string' }, taskNumber: { type: 'number' },
181
- following: { type: 'boolean', required: true }, readThroughSequence: { type: 'number' }, remainingUnreadCount: { type: 'number' }, cursor: { type: 'number' }, hasMore: { type: 'boolean' },
179
+ following: { type: 'boolean', required: true }, readThroughSequence: { type: 'number' }, remainingUnreadCount: { type: 'number' }, earlierFactCount: { type: 'number' }, cursor: { type: 'number' }, hasMore: { type: 'boolean' },
182
180
  anchor: { type: 'object', required: true, additionalProperties: false, properties: {
183
181
  messageRef: { type: 'string', required: true }, sender: { type: 'string', required: true }, body: { type: 'string', required: true }, sequence: { type: 'number', required: true }, occurredAt: { type: 'string' },
184
182
  } },
@@ -201,15 +199,16 @@ const teamThread = defineTool({
201
199
  // current collision surface or any write token.
202
200
  render: (args, value) => {
203
201
  const standing = taskStanding(value);
202
+ const source = `Workspace: ${value.workspaceId} · Channel: ${value.channelRef}`;
204
203
  if (value.kind === 'status') {
205
- return [{ type: 'text', text: `Attention status — ${value.following ? 'following' : 'not following'} ${value.threadRef}${standing === '' ? '' : ` · ${standing}`}.` }];
204
+ return [{ type: 'text', text: `${source}\nAttention status — ${value.following ? 'following' : 'not following'} ${value.threadRef}${standing === '' ? '' : ` · ${standing}`}.` }];
206
205
  }
207
206
  if (value.kind === 'follow' || value.kind === 'unfollow') {
208
- return [{ type: 'text', text: `Attention changed — ${value.following ? 'now following' : 'no longer following'} ${value.threadRef}${standing === '' ? '' : ` · ${standing}`}.` }];
207
+ return [{ type: 'text', text: `${source}\nAttention changed — ${value.following ? 'now following' : 'no longer following'} ${value.threadRef}${standing === '' ? '' : ` · ${standing}`}.` }];
209
208
  }
210
209
  if (value.kind === 'history') {
211
210
  const facts = value.facts;
212
- const lines = [`History for ${value.threadRef}${standing === '' ? '' : ` · ${standing}`}`];
211
+ const lines = [source, `History for ${value.threadRef}${standing === '' ? '' : ` · ${standing}`}`];
213
212
  // First page (no beforeSequence supplied) orients on the full
214
213
  // anchor; a continuation orients on the shared bounded subject. An
215
214
  // anchor already selected as a fact never repeats.
@@ -235,6 +234,7 @@ const teamThread = defineTool({
235
234
  // A read with nothing unread writes no durable operation, so the opening
236
235
  // line claims a commit only when unread facts were actually acknowledged.
237
236
  const lines = [
237
+ source,
238
238
  acknowledged === 0
239
239
  ? `Read — no unread updates on ${value.threadRef}; nothing remains.`
240
240
  : `Read committed — acknowledged ${acknowledged} unread update(s) on ${value.threadRef}; ${remaining} remain.`,
@@ -263,6 +263,13 @@ const teamThread = defineTool({
263
263
  else
264
264
  lines.push(...facts.map(fact => factLine(fact)));
265
265
  lines.push('', `Read through sequence ${value.readThroughSequence}; ${remaining} unread update(s) remaining${remaining > 0 ? ' — call team_thread read again.' : '.'}`);
266
+ // What this bounded read answered with is the newest batch; the span
267
+ // before the watermark is the orientation it did not supply. Rendering
268
+ // the count is what lets a returning reader see the size of that span
269
+ // instead of assuming the batch is the Thread.
270
+ const earlier = value.earlierFactCount ?? 0;
271
+ if (earlier > 0)
272
+ lines.push(`Earlier facts: ${earlier} — read older ones with team_thread.history.`);
266
273
  if (value.contextAdvice !== undefined)
267
274
  lines.push('', ...adviceLines(value.contextAdvice));
268
275
  if (remaining === 0)
@@ -274,15 +281,14 @@ const teamThread = defineTool({
274
281
  const agent = exec.agent;
275
282
  if (agent === undefined)
276
283
  throw new Error('team_thread requires an Agent session');
277
- const current = member(agent);
278
284
  const host = service(agent);
279
285
  if (args.threadRef === undefined && args.taskRef === undefined)
280
286
  throw new Error('team_thread requires threadRef');
281
- const base = { workspaceId: current.workspaceId, ...(args.threadRef === undefined ? {} : { threadRef: args.threadRef }), ...(args.taskRef === undefined ? {} : { taskRef: args.taskRef }) };
287
+ const base = { workspaceId: workspaceOf(args, agent), ...(args.threadRef === undefined ? {} : { threadRef: args.threadRef }), ...(args.taskRef === undefined ? {} : { taskRef: args.taskRef }) };
282
288
  const taskNumberOf = (task) => {
283
289
  if (task === undefined)
284
290
  return {};
285
- const resolved = host.resolveTaskRefs({ workspaceId: current.workspaceId, taskRefs: [task.taskRef] }).resolved[0];
291
+ const resolved = host.resolveTaskRefs({ workspaceId: base.workspaceId, taskRefs: [task.taskRef] }).resolved[0];
286
292
  return resolved === undefined ? {} : { taskNumber: resolved.taskNumber };
287
293
  };
288
294
  if (args.action === 'status') {
@@ -290,28 +296,28 @@ const teamThread = defineTool({
290
296
  throw new Error('status does not accept history arguments');
291
297
  const status = host.attentionStatusForAgent(agent, base);
292
298
  const snapshot = host.threadHistoryForAgent(agent, { ...base, beforeSequence: 1, limit: 1 });
293
- return threadResult('status', snapshot, status.attention, [], taskNumberOf(snapshot.task));
299
+ return threadResult('status', base.workspaceId, snapshot, status.attention, [], taskNumberOf(snapshot.task));
294
300
  }
295
301
  if (args.action === 'follow' || args.action === 'unfollow') {
296
302
  if (args.beforeSequence !== undefined || args.limit !== undefined)
297
303
  throw new Error(`${args.action} does not accept history arguments`);
298
304
  const result = await host.changeAttentionForAgent(agent, { requestId: requestId(agent.id, exec.callId), ...base, action: args.action });
299
305
  const snapshot = host.threadHistoryForAgent(agent, { ...base, beforeSequence: 1, limit: 1 });
300
- return threadResult(args.action, snapshot, result.attention, [], taskNumberOf(snapshot.task));
306
+ return threadResult(args.action, base.workspaceId, snapshot, result.attention, [], taskNumberOf(snapshot.task));
301
307
  }
302
308
  if (args.action === 'history') {
303
309
  const history = host.threadHistoryForAgent(agent, { ...base, ...(args.beforeSequence === undefined ? {} : { beforeSequence: args.beforeSequence }), ...(args.limit === undefined ? {} : { limit: args.limit }) });
304
310
  const status = host.attentionStatusForAgent(agent, base);
305
- return threadResult('history', history, status.attention, history.facts.map(fact => fact.kind === 'message'
311
+ return threadResult('history', base.workspaceId, history, status.attention, history.facts.map(fact => fact.kind === 'message'
306
312
  ? { sequence: fact.sequence, kind: 'message', body: fact.message.body, sender: fact.message.sender, mentions: [...fact.mentions], occurredAt: fact.occurredAt }
307
313
  : activityFactView(fact.sequence, fact.activity, undefined, fact.occurredAt)), { cursor: history.cursor, hasMore: history.hasMore, ...taskNumberOf(history.task) });
308
314
  }
309
315
  if (args.beforeSequence !== undefined || args.limit !== undefined)
310
316
  throw new Error('read does not accept history arguments');
311
317
  const read = await host.readThreadForAgent(agent, { requestId: requestId(agent.id, exec.callId), ...base });
312
- return threadResult('read', read, read.attention, read.facts.map(entry => entry.fact.kind === 'message'
318
+ return threadResult('read', base.workspaceId, read, read.attention, read.facts.map(entry => entry.fact.kind === 'message'
313
319
  ? { sequence: entry.fact.sequence, kind: 'message', body: entry.fact.message.body, sender: entry.fact.message.sender, mentions: [...entry.fact.mentions], unread: entry.unread, direct: entry.direct, occurredAt: entry.fact.occurredAt }
314
- : activityFactView(entry.fact.sequence, entry.fact.activity, { unread: entry.unread, direct: entry.direct }, entry.fact.occurredAt)), { readThroughSequence: read.readThroughSequence, remainingUnreadCount: read.remainingUnreadCount, ...(read.contextAdvice === undefined ? {} : { contextAdvice: adviceView(read.contextAdvice) }), ...taskNumberOf(read.task) });
320
+ : activityFactView(entry.fact.sequence, entry.fact.activity, { unread: entry.unread, direct: entry.direct }, entry.fact.occurredAt)), { readThroughSequence: read.readThroughSequence, remainingUnreadCount: read.remainingUnreadCount, ...(read.earlierFactCount === undefined ? {} : { earlierFactCount: read.earlierFactCount }), ...(read.contextAdvice === undefined ? {} : { contextAdvice: adviceView(read.contextAdvice) }), ...taskNumberOf(read.task) });
315
321
  },
316
322
  });
317
323
  /** One rendered fact line; markers are inline, never a separate ellipsis line. */
@@ -325,8 +331,9 @@ function factLine(fact) {
325
331
  function claimLine(claim) {
326
332
  return `${claim.claimRef} — ${claim.owner}: ${claim.direction}`;
327
333
  }
328
- function threadResult(kind, snapshot, attention, facts, extra = {}) {
334
+ function threadResult(kind, workspaceId, snapshot, attention, facts, extra = {}) {
329
335
  return {
336
+ workspaceId, channelRef: snapshot.anchor.channelRef,
330
337
  kind, threadRef: snapshot.thread.threadRef, revision: snapshot.thread.revision,
331
338
  ...(snapshot.task === undefined ? {} : { taskRef: snapshot.task.taskRef, status: snapshot.task.status, resolution: snapshot.task.resolution }),
332
339
  ...(extra.taskNumber === undefined ? {} : { taskNumber: extra.taskNumber }),
@@ -348,7 +355,7 @@ function adviceLines(advice) {
348
355
  }
349
356
  const teamMessage = markAgentTeamPreset(defineTool({
350
357
  name: 'team_message',
351
- description: 'Start a top-level Thread, reply to an existing Thread, or send a direct message (DM). Read the Thread first: a reply needs the current next-write token from a fully drained team_thread read (or your own last committed mutation), and unread work rejects before staleness is even checked. start defaults to a taskless Thread; pass asTask true to create a Task in the same send. A top-level start may mention related Agents directly; in replies, only a Human can invite an unfollowed Agent. Pass Member refs in mentions and spell their handles inside the body; only mentioned Members render as mention chips. dm sends a private direct message to one enabled Agent Member in your Workspace: use it for quick clarifications and status syncs — never for task work, decisions, or anything that needs team visibility or traceability (use a Thread); if a DM exchange with the same Member exceeds about 3 exchanges, move it to a Thread, because every DM costs the recipient a full agent turn.',
358
+ description: 'Start a top-level Thread, reply to an existing Thread, or send a direct message (DM). Read the Thread first: a reply needs the current next-write token from a fully drained team_thread read (or your own last committed mutation), and unread work rejects before staleness is even checked — and a mention only delivers its Message and restores Attention, never the Thread\'s earlier facts, so entering a Thread whose facts have left your context means reading back through it first. start defaults to a taskless Thread; pass asTask true to create a Task in the same send. A top-level start may mention related Agents directly; in replies, only a Human can invite a Member the Thread has never carried. Mention by writing `@Handle` in body the `@` is required, matching ignores case, and each named Member is delivered to and renders as a mention chip; `@all` reaches every Member of the Channel. Naming a Member this Thread has never carried still commits, delivers nothing to that Member, and reports them under undeliveredMentions: ask the Human to invite them, or reach them with a dm. dm sends a private direct message to one enabled Agent Member in your Workspace: use it for quick clarifications and status syncs — never for task work, decisions, or anything that needs team visibility or traceability (use a Thread); if a DM exchange with the same Member exceeds about 3 exchanges, move it to a Thread, because every DM costs the recipient a full agent turn.',
352
359
  parameters: {
353
360
  action: { type: 'string', required: true, enum: ['start', 'reply', 'dm'] },
354
361
  channelRef: { type: 'string', description: "Full branded Channel ref exactly as returned by Team tools, including the 'channel:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
@@ -356,15 +363,16 @@ const teamMessage = markAgentTeamPreset(defineTool({
356
363
  taskRef: { type: 'string', description: "Optional Task ref alias for reply on a Taskful Thread. Prefer threadRef; an unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
357
364
  memberRef: { type: 'string', description: "Full branded Member ref exactly as returned by Team tools, including the 'member:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves. Required for dm; the Member must be an enabled Agent in your Workspace (the Human cannot be DMed)." },
358
365
  asTask: { type: 'boolean', description: 'When true, start creates a Task with the Thread. Default false creates a taskless Thread.' },
359
- body: { type: 'string', required: true, description: "Markdown body. Lead with the conclusion or state. Mention the Human only when they must know or decide, with a one-to-three-sentence opening and a `Decision needed: X (default: Y)` line when a decision is owed; mechanical detail follows below. Cite Team refs exactly as returned, as bare text with one colon (e.g. task:0f0a…) — never a double colon, never inside backticks or quotes. Unambiguous UUID abbreviations (first 6+ hex chars) also resolve. Spell each mentioned Member's handle in the prose so the mention renders inline." }, baseRevision: { type: 'number', description: "The next-write token from your latest fully drained team_thread read (or your own last committed mutation) on this Thread. Copy the explicitly rendered value verbatim; never increment, derive, compare, or cite it — it is an opaque concurrency token, not a fact about the Thread." },
360
- mentions: { type: 'array', items: { type: 'string' }, description: 'Member refs to mention. Mentioned Agents receive the Message directly; write their handles in the body (any casing, optional @) so the mention renders inline.' },
366
+ body: { type: 'string', required: true, description: "Markdown body. Lead with the conclusion or state. Mention the Human only when they must know or decide; when a decision is owed, say plainly what needs deciding and what happens by default if nobody answers no fixed template. Keep it the shortest useful message for the recipients; mechanical detail follows below. Cite Team refs exactly as returned, as bare text with one colon (e.g. task:0f0a…) — never a double colon, never inside backticks or quotes. Unambiguous UUID abbreviations (first 6+ hex chars) also resolve. Mention a Member by writing `@Handle` (`@` required, case-insensitive) in the prose: that is what delivers the Message to them and renders the mention chip, and `@all` reaches the whole Channel." }, baseRevision: { type: 'number', description: "The next-write token from your latest fully drained team_thread read (or your own last committed mutation) on this Thread. Copy the explicitly rendered value verbatim; never increment, derive, compare, or cite it — it is an opaque concurrency token, not a fact about the Thread." },
361
367
  attachments: { type: 'array', items: { type: 'string' }, description: 'Absolute file paths to share, e.g. screenshots or generated artifacts; images render as thumbnails for recipients. The Host validates each path and copies the file into the attachment cache, and members also receive one cached path per attachment; if any path fails validation the whole send is rejected.' },
368
+ workspace: workspaceParam,
362
369
  },
363
370
  output: {
364
371
  schema: { type: 'object', additionalProperties: false, properties: {
365
372
  kind: { type: 'string', required: true }, action: { type: 'string' }, taskRef: { type: 'string' }, threadRef: { type: 'string' }, revision: { type: 'number' },
366
373
  expectedRevision: { type: 'number' }, messageRef: { type: 'string' }, memberIds: { type: 'array', items: { type: 'string' } }, unreadCount: { type: 'number' }, directCount: { type: 'number' },
367
374
  recipientMemberId: { type: 'string' }, recipientHandle: { type: 'string' }, delivered: { type: 'boolean' }, deliveryNote: { type: 'string' }, occurredAt: { type: 'string' },
375
+ undeliveredMentions: { type: 'array', items: { type: 'string' } },
368
376
  } },
369
377
  render: (_args, value) => {
370
378
  if (value.kind === 'dm-sent') {
@@ -381,6 +389,9 @@ const teamMessage = markAgentTeamPreset(defineTool({
381
389
  value.action === 'start' ? 'Committed — Thread created.' : 'Committed — reply added.',
382
390
  [value.messageRef, value.threadRef, ...(value.taskRef === undefined ? [] : [value.taskRef])].join(' · '),
383
391
  ...(value.occurredAt === undefined ? [] : [`Committed at ${formatTeamTimestamp(value.occurredAt)}`]),
392
+ ...(value.undeliveredMentions === undefined || value.undeliveredMentions.length === 0 ? [] : [
393
+ `Mention not delivered — ${value.undeliveredMentions.join(', ')} never took part in this Thread, so nothing reached them. Only a Human can invite a Member: reach them with a dm, or ask the Human.`,
394
+ ]),
384
395
  nextWriteLine(value.revision),
385
396
  ].join('\n') }];
386
397
  }
@@ -398,26 +409,24 @@ const teamMessage = markAgentTeamPreset(defineTool({
398
409
  const agent = exec.agent;
399
410
  if (agent === undefined)
400
411
  throw new Error('team_message requires an Agent session');
401
- const current = member(agent);
402
412
  const host = service(agent);
403
- const mentions = args.mentions;
404
413
  const rawPaths = args.attachments;
405
414
  const attachmentPaths = Array.isArray(rawPaths) ? rawPaths.filter((entry) => typeof entry === 'string' && entry.trim() !== '') : undefined;
406
415
  const paths = attachmentPaths !== undefined && attachmentPaths.length > 0 ? { attachmentPaths } : {};
407
416
  if (args.action === 'start') {
408
417
  if (args.channelRef === undefined || args.taskRef !== undefined || args.threadRef !== undefined || args.baseRevision !== undefined)
409
418
  throw new Error('start requires channelRef and does not accept threadRef, taskRef, or baseRevision');
410
- const result = await host.sendMessageForAgent(agent, { requestId: requestId(agent.id, exec.callId), workspaceId: current.workspaceId,
411
- channelRef: args.channelRef, body: args.body, asTask: args.asTask === true, ...(mentions === undefined ? {} : { recipients: mentions }), ...paths });
419
+ const result = await host.sendMessageForAgent(agent, { requestId: requestId(agent.id, exec.callId), workspaceId: workspaceOf(args, agent),
420
+ channelRef: args.channelRef, body: args.body, asTask: args.asTask === true, ...paths });
412
421
  return messageOutcome(result, 'start');
413
422
  }
414
423
  if (args.action === 'dm') {
415
424
  if (args.memberRef === undefined || args.channelRef !== undefined || args.threadRef !== undefined || args.taskRef !== undefined
416
- || args.baseRevision !== undefined || args.asTask !== undefined || mentions !== undefined || attachmentPaths !== undefined) {
417
- throw new Error('dm requires memberRef and body only; it does not accept channelRef, threadRef, taskRef, baseRevision, asTask, mentions, or attachments');
425
+ || args.baseRevision !== undefined || args.asTask !== undefined || attachmentPaths !== undefined) {
426
+ throw new Error('dm requires memberRef and body only; it does not accept channelRef, threadRef, taskRef, baseRevision, asTask, or attachments');
418
427
  }
419
428
  try {
420
- const result = await host.dmForAgent(agent, { requestId: requestId(agent.id, exec.callId), workspaceId: current.workspaceId,
429
+ const result = await host.dmForAgent(agent, { requestId: requestId(agent.id, exec.callId), workspaceId: workspaceOf(args, agent),
421
430
  recipientMemberId: args.memberRef, body: args.body });
422
431
  return { kind: 'dm-sent', recipientMemberId: result.recipient.memberId, recipientHandle: result.recipient.handle, delivered: true, occurredAt: result.receipt.occurredAt };
423
432
  }
@@ -432,19 +441,23 @@ const teamMessage = markAgentTeamPreset(defineTool({
432
441
  if ((args.threadRef === undefined && args.taskRef === undefined) || args.channelRef !== undefined || args.asTask !== undefined || typeof baseRevision !== 'number' || !Number.isSafeInteger(baseRevision) || baseRevision < 1) {
433
442
  throw new Error('reply requires threadRef and a positive baseRevision; drain the Thread with team_thread read and copy the token it renders, or reuse the one your own last committed mutation rendered');
434
443
  }
435
- const result = await host.replyForAgent(agent, { requestId: requestId(agent.id, exec.callId), workspaceId: current.workspaceId,
444
+ const result = await host.replyForAgent(agent, { requestId: requestId(agent.id, exec.callId), workspaceId: workspaceOf(args, agent),
436
445
  ...(args.threadRef === undefined ? {} : { threadRef: args.threadRef }),
437
446
  ...(args.taskRef === undefined ? {} : { taskRef: args.taskRef }),
438
- body: args.body, baseRevision,
439
- ...(mentions === undefined ? {} : { recipients: mentions }), ...paths });
447
+ body: args.body, baseRevision, ...paths });
440
448
  return messageOutcome(result, 'reply');
441
449
  },
442
450
  }));
443
451
  function messageOutcome(result, action) {
444
- if (result.kind === 'committed')
452
+ if (result.kind === 'committed') {
453
+ // A start always delivers to the Members it names — they begin following the
454
+ // new Thread — so only a reply can report names the Thread has never carried.
455
+ const undelivered = 'undeliveredMentions' in result ? result.undeliveredMentions : undefined;
445
456
  return { kind: result.kind, action, threadRef: result.thread.threadRef,
446
457
  ...(result.task === undefined ? {} : { taskRef: result.task.taskRef }),
447
- revision: result.thread.revision, messageRef: result.message.messageRef, occurredAt: result.receipt.occurredAt };
458
+ revision: result.thread.revision, messageRef: result.message.messageRef, occurredAt: result.receipt.occurredAt,
459
+ ...(undelivered === undefined || undelivered.length === 0 ? {} : { undeliveredMentions: [...undelivered] }) };
460
+ }
448
461
  if (result.kind === 'member_not_following')
449
462
  return { kind: result.kind, memberIds: [...result.memberIds],
450
463
  ...(result.taskRef === undefined ? {} : { taskRef: result.taskRef }), ...(result.threadRef === undefined ? {} : { threadRef: result.threadRef, revision: result.revision }) };
@@ -464,6 +477,7 @@ const teamClaim = defineTool({
464
477
  taskRef: { type: 'string', required: true, description: "Full branded Task ref exactly as returned by Team tools, including the 'task:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
465
478
  baseRevision: { type: 'number', description: "The next-write token from your latest fully drained team_thread read (or your own last committed mutation) on this Task's Thread. Copy the explicitly rendered value verbatim; never increment, derive, compare, or cite it — it is an opaque concurrency token, not a fact about the Task." }, direction: { type: 'string' },
466
479
  claimRef: { type: 'string', description: "Full branded Claim ref exactly as returned by team_claim, including the 'claim:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
480
+ workspace: workspaceParam,
467
481
  },
468
482
  output: {
469
483
  schema: { type: 'object', additionalProperties: false, properties: {
@@ -505,9 +519,8 @@ const teamClaim = defineTool({
505
519
  const agent = exec.agent;
506
520
  if (agent === undefined)
507
521
  throw new Error('team_claim requires an Agent session');
508
- const current = member(agent);
509
522
  const host = service(agent);
510
- const base = { workspaceId: current.workspaceId, taskRef: args.taskRef };
523
+ const base = { workspaceId: workspaceOf(args, agent), taskRef: args.taskRef };
511
524
  if (args.action === 'list') {
512
525
  if (args.baseRevision !== undefined || args.direction !== undefined || args.claimRef !== undefined)
513
526
  throw new Error('list accepts only taskRef');
@@ -544,11 +557,13 @@ const teamView = defineTool({
544
557
  description: 'Discover your authorized Team addresses: current Channels, a newest-first page of top-level Threads (each with its bounded anchor subject; Task standing inline on taskful rows), and current Members. This is an address book, not a work queue — unread work lives in team_inbox, and a Thread is read with team_thread read. The cursor pages Thread rows only.',
545
558
  parameters: {
546
559
  channelRef: { type: 'string', description: "Full branded Channel ref exactly as returned by Team tools, including the 'channel:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
547
- limit: { type: 'number' }, cursor: { type: 'number' },
560
+ limit: { type: 'number' }, cursor: { type: 'number' }, workspace: workspaceParam,
548
561
  },
549
562
  output: {
550
563
  schema: { type: 'object', additionalProperties: false, properties: {
551
564
  channels: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { channelRef: { type: 'string', required: true }, name: { type: 'string', required: true } } } },
565
+ workspaceId: { type: 'string', required: true },
566
+ workspaces: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { workspaceId: { type: 'string', required: true }, title: { type: 'string' }, default: { type: 'boolean', required: true } } } },
552
567
  members: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: {
553
568
  memberId: { type: 'string', required: true }, kind: { type: 'string', required: true }, handle: { type: 'string', required: true }, description: { type: 'string', required: true }, presence: { type: 'string', required: true },
554
569
  } } },
@@ -568,7 +583,7 @@ const teamView = defineTool({
568
583
  // which is reading, never writing from a directory snapshot.
569
584
  render: (_args, value) => {
570
585
  const continuation = value.page === 'threads';
571
- const lines = [];
586
+ const lines = [`Workspace: ${value.workspaceId}`];
572
587
  if (!continuation) {
573
588
  lines.push('Team directory', '', 'Channels — current');
574
589
  if (value.channels.length === 0)
@@ -583,6 +598,10 @@ const teamView = defineTool({
583
598
  else
584
599
  lines.push(...value.threads.map(thread => `${thread.threadRef} · ${thread.channelRef}${thread.taskRef === undefined ? ' · taskless' : ` · ${taskStanding(thread)}`} — ${thread.subject}${thread.lastActivityAt === undefined ? '' : ` · last activity ${formatTeamTimestamp(thread.lastActivityAt)}`}`));
585
600
  lines.push(`Thread cursor ${value.cursor}; hasMore=${value.hasMore ? 'true' : 'false'}${value.hasMore ? ' — older Thread anchors exist; page again with this cursor.' : ' — no older Threads remain.'}`);
601
+ if (!continuation && value.workspaces.length > 1) {
602
+ lines.push('', 'Workspaces — you participate in');
603
+ lines.push(...value.workspaces.map(workspace => `${workspace.workspaceId}${workspace.title === undefined ? '' : ` · ${workspace.title}`}${workspace.default ? ' · default — your Session and cwd live here' : ' — address it with the workspace argument; file work needs absolute paths'}`));
604
+ }
586
605
  if (!continuation) {
587
606
  lines.push('', 'Members — current');
588
607
  if (value.members.length === 0)
@@ -597,14 +616,17 @@ const teamView = defineTool({
597
616
  const agent = exec.agent;
598
617
  if (agent === undefined)
599
618
  throw new Error('team_view requires an Agent session');
600
- const current = member(agent);
601
619
  const host = service(agent);
602
- const view = host.viewForAgent(agent, { workspaceId: current.workspaceId, ...(args.channelRef === undefined ? {} : { channelRef: args.channelRef }), ...(args.limit === undefined ? {} : { limit: args.limit }), ...(args.cursor === undefined ? {} : { cursor: args.cursor }), topLevelOnly: true, includeActivities: false, direction: 'before' });
620
+ const workspaceId = workspaceOf(args, agent);
621
+ const view = host.viewForAgent(agent, { workspaceId, ...(args.channelRef === undefined ? {} : { channelRef: args.channelRef }), ...(args.limit === undefined ? {} : { limit: args.limit }), ...(args.cursor === undefined ? {} : { cursor: args.cursor }), topLevelOnly: true, includeActivities: false, direction: 'before' });
603
622
  const visibleMemberIds = new Set(view.members.map(membership => membership.memberId));
604
623
  return {
624
+ workspaceId,
625
+ workspaces: view.workspaces.map(participation => ({ workspaceId: participation.workspaceId,
626
+ ...(participation.title === undefined ? {} : { title: participation.title }), default: participation.default })),
605
627
  channels: view.channels.map(channel => ({ channelRef: channel.channelRef, name: channel.name })),
606
628
  members: [
607
- { memberId: view.humanMemberId, kind: 'human', handle: 'human', description: 'Human Team Member', presence: 'available' },
629
+ { memberId: view.humanMemberId, kind: 'human', handle: AGENT_TEAM_HUMAN_HANDLE, description: 'Human Team Member', presence: 'available' },
608
630
  ...host.members().filter(status => visibleMemberIds.has(status.member.memberId)).map(status => ({ memberId: status.member.memberId,
609
631
  kind: 'agent', handle: status.member.handle, description: status.member.description, presence: status.presence })),
610
632
  ],
@@ -5,10 +5,20 @@
5
5
  * rejection rather than a silent no-op. Both messages are user-facing text.
6
6
  */
7
7
  import AgentTeam from '@wowyuarm/dsh-agent-team/host';
8
+ import type { WorkspaceId } from '@deepseek-ai/dsh-api-workspace-controller/client';
8
9
  /** The Agent shape every Team tool receives. */
9
10
  export type TeamToolAgent = NonNullable<Parameters<AgentTeam['memberForAgent']>[0]>;
10
11
  /** Resolve the Team Host service, or reject the tool call. */
11
12
  export declare function service(agent: TeamToolAgent): AgentTeam;
12
13
  /** Resolve the calling Team Member, or reject the tool call. */
13
14
  export declare function member(agent: TeamToolAgent): import("@wowyuarm/dsh-agent-team/types").AgentTeamAgentMember;
15
+ /** A collaboration address, never a cwd or Session switch. */
16
+ export declare const workspaceParam: {
17
+ type: "string";
18
+ description: string;
19
+ };
20
+ /** Reject ambiguous routing before a tool reads facts or attempts a mutation. */
21
+ export declare function workspaceOf(args: {
22
+ workspace?: string | undefined;
23
+ }, agent: TeamToolAgent): WorkspaceId;
14
24
  //# sourceMappingURL=host-access.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"host-access.d.ts","sourceRoot":"","sources":["../../src/host-access.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,SAAS,MAAM,+BAA+B,CAAA;AAErD,gDAAgD;AAChD,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnF,8DAA8D;AAC9D,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAIvD;AAED,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,KAAK,EAAE,aAAa,iEAI1C"}
1
+ {"version":3,"file":"host-access.d.ts","sourceRoot":"","sources":["../../src/host-access.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,SAAS,MAAM,+BAA+B,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAA;AAEnF,gDAAgD;AAChD,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnF,8DAA8D;AAC9D,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAIvD;AAED,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,KAAK,EAAE,aAAa,iEAI1C;AAED,8DAA8D;AAC9D,eAAO,MAAM,cAAc;;;CAG1B,CAAA;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,KAAK,EAAE,aAAa,GAAG,WAAW,CAUvG"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAelD,eAAO,MAAM,IAAI,8BAA8B,CAAA;AAC/C,eAAO,MAAM,MAAM,UAAY,CAAA;AAupB/B,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAOxC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAelD,eAAO,MAAM,IAAI,8BAA8B,CAAA;AAC/C,eAAO,MAAM,MAAM,UAAY,CAAA;AA8qB/B,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAOxC"}