@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.
- package/README.md +6 -4
- package/README.zh.md +6 -4
- package/cordis.patch.yml +7 -3
- package/package.json +16 -3
- package/packages/agent-team/README.md +4 -4
- package/packages/agent-team/README.zh.md +4 -4
- package/packages/agent-team/lib/context-projection.js +5 -1
- package/packages/agent-team/lib/index.js +162 -113
- package/packages/agent-team/lib/ledger.js +496 -169
- package/packages/agent-team/lib/member-context.js +18 -1
- package/packages/agent-team/lib/member-runtime.js +48 -9
- package/packages/agent-team/lib/mentions.js +80 -0
- package/packages/agent-team/lib/spec.js +20 -0
- package/packages/agent-team/lib/typert.host.js +241 -46
- package/packages/agent-team/lib/typert.remote-client.d.ts +7 -3
- package/packages/agent-team/lib/typert.remote-client.d.ts.map +1 -1
- package/packages/agent-team/lib/typert.remote-client.js +178 -28
- package/packages/agent-team/lib/types/context-projection.d.ts.map +1 -1
- package/packages/agent-team/lib/types/index.d.ts +33 -14
- package/packages/agent-team/lib/types/index.d.ts.map +1 -1
- package/packages/agent-team/lib/types/ledger.d.ts +120 -18
- package/packages/agent-team/lib/types/ledger.d.ts.map +1 -1
- package/packages/agent-team/lib/types/member-context.d.ts +6 -0
- package/packages/agent-team/lib/types/member-context.d.ts.map +1 -1
- package/packages/agent-team/lib/types/member-runtime.d.ts +2 -1
- package/packages/agent-team/lib/types/member-runtime.d.ts.map +1 -1
- package/packages/agent-team/lib/types/mentions.d.ts +47 -0
- package/packages/agent-team/lib/types/mentions.d.ts.map +1 -0
- package/packages/agent-team/lib/types/spec.d.ts.map +1 -1
- package/packages/agent-team/lib/types/types/entities.d.ts +3 -20
- package/packages/agent-team/lib/types/types/entities.d.ts.map +1 -1
- package/packages/agent-team/lib/types/types/operations.d.ts +37 -1
- package/packages/agent-team/lib/types/types/operations.d.ts.map +1 -1
- package/packages/agent-team/lib/types/types/requests-results.d.ts +107 -25
- package/packages/agent-team/lib/types/types/requests-results.d.ts.map +1 -1
- package/packages/agent-team/lib/types/vendor/storage-sqlite/index.d.ts +87 -0
- package/packages/agent-team/lib/types/vendor/storage-sqlite/index.d.ts.map +1 -0
- package/packages/agent-team/lib/types/vendor/storage-sqlite/schema.d.ts +59 -0
- package/packages/agent-team/lib/types/vendor/storage-sqlite/schema.d.ts.map +1 -0
- package/packages/agent-team/lib/types/vendor/storage-sqlite/unit.d.ts +57 -0
- package/packages/agent-team/lib/types/vendor/storage-sqlite/unit.d.ts.map +1 -0
- package/packages/agent-team/lib/vendor/storage-sqlite/index.js +139 -0
- package/packages/agent-team/lib/vendor/storage-sqlite/schema.js +120 -0
- package/packages/agent-team/lib/vendor/storage-sqlite/unit.js +132 -0
- package/packages/agent-team/preset/team-member/agent.cordis.yml +48 -8
- package/packages/client-agent-team/README.md +1 -1
- package/packages/client-agent-team/README.zh.md +1 -1
- package/packages/client-agent-team/lib/client.js +2123 -1406
- package/packages/client-agent-team/lib/client.js.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamAgentImport.d.ts +12 -0
- package/packages/client-agent-team/lib/types/client/TeamAgentImport.d.ts.map +1 -0
- package/packages/client-agent-team/lib/types/client/TeamAgentImport.js +69 -0
- package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.d.ts +3 -1
- package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.js +31 -19
- package/packages/client-agent-team/lib/types/client/TeamAvatarStack.d.ts +18 -0
- package/packages/client-agent-team/lib/types/client/TeamAvatarStack.d.ts.map +1 -0
- package/packages/client-agent-team/lib/types/client/TeamAvatarStack.js +22 -0
- package/packages/client-agent-team/lib/types/client/TeamChannelPage.d.ts +3 -1
- package/packages/client-agent-team/lib/types/client/TeamChannelPage.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamChannelPage.js +111 -24
- package/packages/client-agent-team/lib/types/client/TeamChannelsPanel.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamChannelsPanel.js +10 -3
- package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamComposer.js +11 -17
- package/packages/client-agent-team/lib/types/client/TeamConversation.js +1 -1
- package/packages/client-agent-team/lib/types/client/TeamCountBadge.d.ts +20 -0
- package/packages/client-agent-team/lib/types/client/TeamCountBadge.d.ts.map +1 -0
- package/packages/client-agent-team/lib/types/client/TeamCountBadge.js +25 -0
- package/packages/client-agent-team/lib/types/client/TeamInboxPage.d.ts +9 -5
- package/packages/client-agent-team/lib/types/client/TeamInboxPage.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamInboxPage.js +92 -23
- package/packages/client-agent-team/lib/types/client/TeamMemberRow.d.ts +43 -0
- package/packages/client-agent-team/lib/types/client/TeamMemberRow.d.ts.map +1 -0
- package/packages/client-agent-team/lib/types/client/TeamMemberRow.js +27 -0
- package/packages/client-agent-team/lib/types/client/TeamMembersAction.d.ts +2 -2
- package/packages/client-agent-team/lib/types/client/TeamMembersAction.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamMembersAction.js +2 -2
- package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts +1 -1
- package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamThreadPage.js +21 -31
- package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.d.ts +1 -1
- package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.js +29 -11
- package/packages/client-agent-team/lib/types/client/index.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/index.js +11 -5
- package/packages/client-agent-team/lib/types/client/locales.d.ts +54 -16
- package/packages/client-agent-team/lib/types/client/locales.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/locales.js +54 -16
- package/packages/client-agent-team/lib/types/client/slots.d.ts +3 -2
- package/packages/client-agent-team/lib/types/client/slots.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/team-changes.d.ts +15 -25
- package/packages/client-agent-team/lib/types/client/team-changes.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/team-changes.js +82 -80
- package/packages/client-agent-team/lib/types/client/team-formatters.d.ts +45 -10
- package/packages/client-agent-team/lib/types/client/team-formatters.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/team-formatters.js +71 -30
- package/packages/tool-agent-team/README.md +3 -3
- package/packages/tool-agent-team/README.zh.md +3 -3
- package/packages/tool-agent-team/lib/host-access.js +19 -0
- package/packages/tool-agent-team/lib/index.js +71 -49
- package/packages/tool-agent-team/lib/types/host-access.d.ts +10 -0
- package/packages/tool-agent-team/lib/types/host-access.d.ts.map +1 -1
- package/packages/tool-agent-team/lib/types/index.d.ts.map +1 -1
- package/packages/agent-team/lib/progress-nudge.js +0 -328
- package/packages/agent-team/lib/types/progress-nudge.d.ts +0 -136
- package/packages/agent-team/lib/types/progress-nudge.d.ts.map +0 -1
- package/packages/client-agent-team/lib/types/client/TeamSettings.d.ts +0 -3
- package/packages/client-agent-team/lib/types/client/TeamSettings.d.ts.map +0 -1
- package/packages/client-agent-team/lib/types/client/TeamSettings.js +0 -5
- package/packages/client-agent-team/lib/types/client/scope-coverage.d.ts +0 -41
- package/packages/client-agent-team/lib/types/client/scope-coverage.d.ts.map +0 -1
- 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 {
|
|
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:
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
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:
|
|
411
|
-
channelRef: args.channelRef, body: args.body, asTask: args.asTask === true, ...
|
|
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 ||
|
|
417
|
-
throw new Error('dm requires memberRef and body only; it does not accept channelRef, threadRef, taskRef, baseRevision, asTask,
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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;
|
|
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;
|
|
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"}
|