@wowyuarm/dsh-agent-team 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/agent-team/core-skills/member-skill-manager/SKILL.md +2 -0
- package/packages/agent-team/lib/index.js +58 -0
- package/packages/agent-team/lib/ledger.js +135 -12
- package/packages/agent-team/lib/member-context.js +1 -1
- package/packages/agent-team/lib/progress-nudge.js +320 -0
- package/packages/agent-team/lib/typert.host.js +27 -26
- package/packages/agent-team/lib/typert.remote-client.d.ts.map +1 -1
- package/packages/agent-team/lib/typert.remote-client.js +26 -25
- package/packages/agent-team/lib/types/index.d.ts +8 -0
- package/packages/agent-team/lib/types/index.d.ts.map +1 -1
- package/packages/agent-team/lib/types/ledger.d.ts +27 -2
- package/packages/agent-team/lib/types/ledger.d.ts.map +1 -1
- package/packages/agent-team/lib/types/progress-nudge.d.ts +136 -0
- package/packages/agent-team/lib/types/progress-nudge.d.ts.map +1 -0
- package/packages/agent-team/lib/types/types/entities.d.ts +18 -0
- package/packages/agent-team/lib/types/types/entities.d.ts.map +1 -1
- package/packages/agent-team/lib/types/types/requests-results.d.ts +2 -0
- package/packages/agent-team/lib/types/types/requests-results.d.ts.map +1 -1
- package/packages/agent-team/preset/team-member/agent.cordis.yml +2 -2
- package/packages/client-agent-team/lib/client.js +406 -512
- package/packages/client-agent-team/lib/client.js.map +1 -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 +3 -7
- package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts +3 -1
- package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamComposer.js +37 -27
- package/packages/client-agent-team/lib/types/client/TeamConversation.d.ts +1 -1
- package/packages/client-agent-team/lib/types/client/TeamConversation.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamConversation.js +2 -2
- package/packages/client-agent-team/lib/types/client/TeamMemberAvatar.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamMemberAvatar.js +3 -2
- package/packages/client-agent-team/lib/types/client/TeamMessage.js +5 -0
- package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts +2 -2
- package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamPresenceDot.js +4 -6
- package/packages/client-agent-team/lib/types/client/TeamStateDot.d.ts +14 -0
- package/packages/client-agent-team/lib/types/client/TeamStateDot.d.ts.map +1 -0
- package/packages/client-agent-team/lib/types/client/TeamStateDot.js +15 -0
- package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts +1 -0
- package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamThreadPage.js +41 -16
- package/packages/client-agent-team/lib/types/client/index.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/index.js +2 -67
- package/packages/client-agent-team/lib/types/client/locales.d.ts +0 -2
- package/packages/client-agent-team/lib/types/client/locales.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/locales.js +0 -2
- package/packages/client-agent-team/lib/types/client/sidebar-drag.d.ts +1 -2
- package/packages/client-agent-team/lib/types/client/sidebar-drag.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/slots.d.ts +3 -1
- package/packages/client-agent-team/lib/types/client/slots.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/task-refs.d.ts +7 -1
- package/packages/client-agent-team/lib/types/client/task-refs.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/task-refs.js +25 -3
- package/packages/client-agent-team/lib/types/client/team-formatters.d.ts +11 -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 +14 -11
- package/packages/tool-agent-team/lib/index.js +9 -9
- package/packages/client-agent-team/lib/types/client/TeamMemberDock.d.ts +0 -12
- package/packages/client-agent-team/lib/types/client/TeamMemberDock.d.ts.map +0 -1
- package/packages/client-agent-team/lib/types/client/TeamMemberDock.js +0 -13
- package/packages/client-agent-team/lib/types/client/member-session-input.d.ts +0 -20
- package/packages/client-agent-team/lib/types/client/member-session-input.d.ts.map +0 -1
- package/packages/client-agent-team/lib/types/client/member-session-input.js +0 -110
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress-visibility nudges: advisory Session notices that keep Member agents
|
|
3
|
+
* reporting progress into their Threads. Two regimes over one shared
|
|
4
|
+
* per-Member silent-tool-call counter:
|
|
5
|
+
*
|
|
6
|
+
* - Thread progress (A): a Member holding an active Claim, or following a
|
|
7
|
+
* taskless Thread, that has run many tool calls since its last committed
|
|
8
|
+
* public communication is reminded to post a brief update. The reminder
|
|
9
|
+
* ladder advances 20 → 40 → 60… per Member.
|
|
10
|
+
* - Claim suggestion (B): a Member following a still-`todo` Task it has never
|
|
11
|
+
* claimed is reminded — once per (Member, Thread) within the current Member
|
|
12
|
+
* Session — that team_claim exists.
|
|
13
|
+
*
|
|
14
|
+
* The Coordinator owns counting, thresholds, notice formatting, dedupe,
|
|
15
|
+
* in-flight revocation, and the deferred steer. It consumes only facts the
|
|
16
|
+
* Host already holds: live `tool/call`/`user/message` session events in their
|
|
17
|
+
* real `{type, seq, time, data}` envelope, the Session log for one-time
|
|
18
|
+
* recovery, committed ledger operations, and a ledger-owned eligibility
|
|
19
|
+
* projection (`progressNudgeTargets`). It never writes Team facts and never
|
|
20
|
+
* wakes idle agents on its own — a nudge rides the member's next tool call.
|
|
21
|
+
*
|
|
22
|
+
* @module @wowyuarm/dsh-agent-team/progress-nudge
|
|
23
|
+
*/
|
|
24
|
+
import { createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
25
|
+
const PROGRESS_NUDGE_PLUGIN_ID = '@wowyuarm/dsh-agent-team';
|
|
26
|
+
/** Notice summary for every nudge this Coordinator injects. */
|
|
27
|
+
export const PROGRESS_NUDGE_NOTICE_SUMMARY = 'Progress visibility reminder';
|
|
28
|
+
export const PROGRESS_NUDGE_TOOL_CALLS_START = 20;
|
|
29
|
+
export const PROGRESS_NUDGE_TOOL_CALLS_STEP = 20;
|
|
30
|
+
export const CLAIM_SUGGESTION_TOOL_CALLS = 5;
|
|
31
|
+
/** Stable line prefix marking Claim-suggestion targets inside a nudge notice; the only text this module ever parses back. */
|
|
32
|
+
const CLAIM_TARGET_LINE_PREFIX = '- Claim target: Task ';
|
|
33
|
+
const CLAIM_TARGET_LINE = /^- Claim target: Task (task:[0-9a-f-]+) — Thread (thread:[0-9a-f-]+)$/;
|
|
34
|
+
/** Ledger operation kinds that count as committed public communication and reset silence. */
|
|
35
|
+
export function isPublicCommunicationOperationKind(kind) {
|
|
36
|
+
return kind === 'team/message-sent' || kind === 'team/thread-replied'
|
|
37
|
+
|| kind === 'team/claim-created' || kind === 'team/claim-done' || kind === 'team/claim-released';
|
|
38
|
+
}
|
|
39
|
+
/** Whether one message is a nudge notice this module injected. */
|
|
40
|
+
export function isProgressNudgeNotice(message) {
|
|
41
|
+
const source = message.source;
|
|
42
|
+
return source.kind === 'plugin' && source.plugin === PROGRESS_NUDGE_PLUGIN_ID
|
|
43
|
+
&& source.form === 'notice' && source.summary === PROGRESS_NUDGE_NOTICE_SUMMARY;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Event-driven per-Member nudge state machine. All state is in-process and
|
|
47
|
+
* scoped to one Member Session; nothing is persisted. The Host feeds it live
|
|
48
|
+
* session events in their real envelope, committed operations, and lifecycle
|
|
49
|
+
* stop points.
|
|
50
|
+
*/
|
|
51
|
+
export class ProgressNudgeCoordinator {
|
|
52
|
+
members = new Map();
|
|
53
|
+
agentForMember;
|
|
54
|
+
targetsForMember;
|
|
55
|
+
sessionLogForMember;
|
|
56
|
+
log;
|
|
57
|
+
scheduleSteer;
|
|
58
|
+
progressThresholdStart;
|
|
59
|
+
progressThresholdStep;
|
|
60
|
+
claimSuggestionThreshold;
|
|
61
|
+
constructor(options) {
|
|
62
|
+
this.agentForMember = options.agentForMember;
|
|
63
|
+
this.targetsForMember = options.targetsForMember;
|
|
64
|
+
this.sessionLogForMember = options.sessionLogForMember;
|
|
65
|
+
this.log = options.log;
|
|
66
|
+
this.scheduleSteer = options.scheduleSteer ?? (run => { queueMicrotask(run); });
|
|
67
|
+
this.progressThresholdStart = options.progressThresholdStart ?? PROGRESS_NUDGE_TOOL_CALLS_START;
|
|
68
|
+
this.progressThresholdStep = options.progressThresholdStep ?? PROGRESS_NUDGE_TOOL_CALLS_STEP;
|
|
69
|
+
this.claimSuggestionThreshold = options.claimSuggestionThreshold ?? CLAIM_SUGGESTION_TOOL_CALLS;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* One live session event for a Member, in its real `{type, seq, time, data}`
|
|
73
|
+
* envelope. Only `tool/call` counts toward silence; a `user/message` whose
|
|
74
|
+
* source is exactly this module's own notice records that the model consumed
|
|
75
|
+
* the nudge (a Claim suggestion becomes final only then). The live `agent`
|
|
76
|
+
* is passed in by the caller because it exists at event time even before
|
|
77
|
+
* the Host finishes publishing the handle.
|
|
78
|
+
*/
|
|
79
|
+
onSessionEvent(memberId, sessionId, agent, event) {
|
|
80
|
+
if (event.type === 'user/message') {
|
|
81
|
+
if (!isProgressNudgeNotice(event.data))
|
|
82
|
+
return;
|
|
83
|
+
const state = this.members.get(memberId);
|
|
84
|
+
if (state === undefined)
|
|
85
|
+
return;
|
|
86
|
+
const notice = state.pending;
|
|
87
|
+
if (notice !== undefined && notice.messageId === event.data.id)
|
|
88
|
+
state.pending = undefined;
|
|
89
|
+
for (const threadRef of claimTargetThreadRefs(event.data))
|
|
90
|
+
state.claimSuggested.add(threadRef);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (event.type !== 'tool/call')
|
|
94
|
+
return;
|
|
95
|
+
let state = this.members.get(memberId);
|
|
96
|
+
if (state === undefined || state.sessionId !== sessionId) {
|
|
97
|
+
// First event of this Member Session (or a generation the Host did not
|
|
98
|
+
// stop explicitly): fresh tracking replaces whatever was there, and
|
|
99
|
+
// consumed one-time suggestions are recovered from the durable log so a
|
|
100
|
+
// Host restart or suspend/resume within the same Session cannot repeat
|
|
101
|
+
// them. A Human-initiated new Session has a different id and starts
|
|
102
|
+
// empty, exactly as specified.
|
|
103
|
+
this.dropState(memberId, state);
|
|
104
|
+
state = { sessionId, silentToolCalls: 0, nextProgressThreshold: this.progressThresholdStart,
|
|
105
|
+
claimSuggested: this.recoverClaimSuggestions(memberId, sessionId), };
|
|
106
|
+
this.members.set(memberId, state);
|
|
107
|
+
}
|
|
108
|
+
state.silentToolCalls += 1;
|
|
109
|
+
if (state.lastNudgeTurn === event.data.turn)
|
|
110
|
+
return;
|
|
111
|
+
this.maybeNudge(memberId, state, agent, event.data.turn);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* One ledger operation committed. A Member actor's public communication
|
|
115
|
+
* resets its silence; every commit also reconciles pending notices whose
|
|
116
|
+
* targets may have just disappeared (Task accepted, Channel archived, the
|
|
117
|
+
* Claim taken by someone else).
|
|
118
|
+
*/
|
|
119
|
+
onCommitted(operation) {
|
|
120
|
+
if (operation.actor.kind === 'member' && operation.actor.memberId !== undefined
|
|
121
|
+
&& isPublicCommunicationOperationKind(operation.kind)) {
|
|
122
|
+
const state = this.members.get(operation.actor.memberId);
|
|
123
|
+
if (state !== undefined) {
|
|
124
|
+
state.silentToolCalls = 0;
|
|
125
|
+
state.nextProgressThreshold = this.progressThresholdStart;
|
|
126
|
+
this.revokePending(operation.actor.memberId, state);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
this.reconcileAll();
|
|
130
|
+
}
|
|
131
|
+
/** Revoke one Member's queued-but-unconsumed nudge, e.g. when a higher-priority Team notice is injected. */
|
|
132
|
+
revokePendingNotice(memberId) {
|
|
133
|
+
const state = this.members.get(memberId);
|
|
134
|
+
if (state !== undefined)
|
|
135
|
+
this.revokePending(memberId, state);
|
|
136
|
+
}
|
|
137
|
+
/** Drop all tracking for one Member (suspend/archive/remove/renew/context-clear/steer failure). */
|
|
138
|
+
stopTracking(memberId) {
|
|
139
|
+
this.dropState(memberId, this.members.get(memberId));
|
|
140
|
+
this.members.delete(memberId);
|
|
141
|
+
}
|
|
142
|
+
/** Stop tracking every Member. */
|
|
143
|
+
dispose() {
|
|
144
|
+
for (const memberId of this.members.keys())
|
|
145
|
+
this.stopTracking(memberId);
|
|
146
|
+
}
|
|
147
|
+
/** Rebuild the consumed one-time suggestion set from this Session's durable log. */
|
|
148
|
+
recoverClaimSuggestions(memberId, sessionId) {
|
|
149
|
+
const suggested = new Set();
|
|
150
|
+
const log = this.sessionLogForMember(memberId, sessionId);
|
|
151
|
+
if (log === undefined)
|
|
152
|
+
return suggested;
|
|
153
|
+
for (const event of log.events) {
|
|
154
|
+
if (event.type !== 'user/message')
|
|
155
|
+
continue;
|
|
156
|
+
if (!isProgressNudgeNotice(event.data))
|
|
157
|
+
continue;
|
|
158
|
+
for (const threadRef of claimTargetThreadRefs(event.data))
|
|
159
|
+
suggested.add(threadRef);
|
|
160
|
+
}
|
|
161
|
+
return suggested;
|
|
162
|
+
}
|
|
163
|
+
dropState(memberId, state) {
|
|
164
|
+
if (state === undefined)
|
|
165
|
+
return;
|
|
166
|
+
this.revokePending(memberId, state);
|
|
167
|
+
this.members.delete(memberId);
|
|
168
|
+
}
|
|
169
|
+
revokePending(memberId, state) {
|
|
170
|
+
const notice = state.pending;
|
|
171
|
+
if (notice !== undefined) {
|
|
172
|
+
notice.canceled = true;
|
|
173
|
+
if (notice.steered) {
|
|
174
|
+
const agent = this.agentForMember(memberId);
|
|
175
|
+
const pending = agent === undefined ? undefined
|
|
176
|
+
: [...agent.inbox.nextStep, ...agent.inbox.nextTurn].find(message => message.id === notice.messageId);
|
|
177
|
+
// A just-consumed notice is simply gone; remove() returning false is expected.
|
|
178
|
+
if (pending !== undefined)
|
|
179
|
+
agent.inbox.remove(pending.id);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
state.pending = undefined;
|
|
183
|
+
}
|
|
184
|
+
/** Re-check every live Member's pending notice against the targets it actually listed. */
|
|
185
|
+
reconcileAll() {
|
|
186
|
+
for (const [memberId, state] of this.members) {
|
|
187
|
+
const notice = state.pending;
|
|
188
|
+
if (notice === undefined)
|
|
189
|
+
continue;
|
|
190
|
+
const agent = this.agentForMember(memberId);
|
|
191
|
+
if (agent === undefined) {
|
|
192
|
+
this.dropState(memberId, state);
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
const targets = this.targetsForMember(memberId);
|
|
196
|
+
// The notice is stale when ANY target it listed is no longer eligible:
|
|
197
|
+
// the body names threads whose work may be finished, so a partial
|
|
198
|
+
// survival must not keep the whole stale notice alive.
|
|
199
|
+
const progressAlive = notice.progressThreadRefs.length === 0
|
|
200
|
+
|| notice.progressThreadRefs.every(threadRef => targets.progress.some(target => target.threadRef === threadRef));
|
|
201
|
+
const claimAlive = notice.claimThreadRefs.length === 0
|
|
202
|
+
|| notice.claimThreadRefs.every(threadRef => targets.claim.some(target => target.threadRef === threadRef));
|
|
203
|
+
if (!progressAlive || !claimAlive)
|
|
204
|
+
this.revokePending(memberId, state);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
maybeNudge(memberId, state, agent, turn) {
|
|
208
|
+
const targets = this.targetsForMember(memberId);
|
|
209
|
+
const progressDue = state.silentToolCalls >= state.nextProgressThreshold && targets.progress.length > 0;
|
|
210
|
+
const freshClaimTargets = targets.claim
|
|
211
|
+
.filter(target => !state.claimSuggested.has(target.threadRef) && state.pending?.claimThreadRefs.includes(target.threadRef) !== true);
|
|
212
|
+
const claimDue = state.silentToolCalls >= this.claimSuggestionThreshold && freshClaimTargets.length > 0;
|
|
213
|
+
if (!progressDue && !claimDue)
|
|
214
|
+
return;
|
|
215
|
+
if (this.hasBlockingNotice(agent))
|
|
216
|
+
return;
|
|
217
|
+
const progressTargets = progressDue ? targets.progress : [];
|
|
218
|
+
const claimTargets = claimDue ? freshClaimTargets : [];
|
|
219
|
+
const notice = createUserMessage({
|
|
220
|
+
content: [{ type: 'text', text: nudgeNoticeText(state.silentToolCalls, progressTargets, claimTargets) }],
|
|
221
|
+
source: { kind: 'plugin', plugin: PROGRESS_NUDGE_PLUGIN_ID, form: 'notice', summary: PROGRESS_NUDGE_NOTICE_SUMMARY },
|
|
222
|
+
});
|
|
223
|
+
const pending = {
|
|
224
|
+
messageId: notice.id,
|
|
225
|
+
progressThreadRefs: progressTargets.map(target => target.threadRef),
|
|
226
|
+
claimThreadRefs: claimTargets.map(target => target.threadRef),
|
|
227
|
+
steered: false,
|
|
228
|
+
canceled: false,
|
|
229
|
+
};
|
|
230
|
+
// Record intent first: the scheduled steer, its cancellation check, and
|
|
231
|
+
// its failure handling all live on this single PendingNotice object, so a
|
|
232
|
+
// revoke between queueing and the microtask leaves no orphan injection.
|
|
233
|
+
// lastNudgeTurn stays as the same-turn intent guard, but the A threshold
|
|
234
|
+
// only commits after the real steer succeeds — a canceled or failed
|
|
235
|
+
// schedule leaves the rung due so the next tool call retries it.
|
|
236
|
+
state.pending = pending;
|
|
237
|
+
state.lastNudgeTurn = turn;
|
|
238
|
+
this.scheduleSteer(() => {
|
|
239
|
+
if (pending.canceled)
|
|
240
|
+
return;
|
|
241
|
+
try {
|
|
242
|
+
agent.steer(notice);
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
this.log?.(`progress nudge steer failed for member '${memberId}': ${error instanceof Error ? error.message : String(error)}`);
|
|
246
|
+
pending.canceled = true;
|
|
247
|
+
if (state.pending === pending)
|
|
248
|
+
state.pending = undefined;
|
|
249
|
+
this.stopTracking(memberId);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
pending.steered = true;
|
|
253
|
+
if (pending.progressThreadRefs.length > 0) {
|
|
254
|
+
// Advance the ladder past the count at real success in one move: a
|
|
255
|
+
// long silence held back by higher-priority notices must not replay
|
|
256
|
+
// every skipped rung on successive tool calls after the blocker
|
|
257
|
+
// clears.
|
|
258
|
+
while (state.nextProgressThreshold <= state.silentToolCalls)
|
|
259
|
+
state.nextProgressThreshold += this.progressThresholdStep;
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Recovery, Inbox, and pre-compaction notices outrank a progress nudge. If
|
|
265
|
+
* one is already pending, this nudge stays due and retries on the next tool
|
|
266
|
+
* call; a DM relay is not a notice and never blocks.
|
|
267
|
+
*/
|
|
268
|
+
hasBlockingNotice(agent) {
|
|
269
|
+
for (const message of [...agent.inbox.nextStep, ...agent.inbox.nextTurn]) {
|
|
270
|
+
const source = message.source;
|
|
271
|
+
if (source.kind !== 'plugin' || source.plugin !== PROGRESS_NUDGE_PLUGIN_ID || source.form !== 'notice')
|
|
272
|
+
continue;
|
|
273
|
+
if (source.summary !== PROGRESS_NUDGE_NOTICE_SUMMARY)
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/** Extract the threadRefs this module itself wrote as Claim targets in one notice. */
|
|
280
|
+
function claimTargetThreadRefs(message) {
|
|
281
|
+
const refs = [];
|
|
282
|
+
for (const block of message.content) {
|
|
283
|
+
if (block.type !== 'text')
|
|
284
|
+
continue;
|
|
285
|
+
for (const line of block.text.split('\n')) {
|
|
286
|
+
const match = CLAIM_TARGET_LINE.exec(line);
|
|
287
|
+
if (match !== null)
|
|
288
|
+
refs.push(match[2]);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return refs;
|
|
292
|
+
}
|
|
293
|
+
function nudgeNoticeText(silentToolCalls, progress, claim) {
|
|
294
|
+
const sections = [];
|
|
295
|
+
if (progress.length > 0) {
|
|
296
|
+
sections.push([
|
|
297
|
+
'Progress visibility reminder',
|
|
298
|
+
'',
|
|
299
|
+
`You have made ${silentToolCalls} tool calls since your last visible Team update. Please briefly update the relevant Thread(s): what you confirmed, what remains, and any blocker. Read the Thread first if needed, then continue working.`,
|
|
300
|
+
'',
|
|
301
|
+
...progress.map(target => target.reason === 'active-claim'
|
|
302
|
+
? `- Task ${target.taskRef} — Thread ${target.threadRef}`
|
|
303
|
+
: `- Taskless Thread ${target.threadRef} (reply only if your current work relates to it)`),
|
|
304
|
+
].join('\n'));
|
|
305
|
+
}
|
|
306
|
+
if (claim.length > 0) {
|
|
307
|
+
sections.push([
|
|
308
|
+
'Claim visibility reminder',
|
|
309
|
+
'',
|
|
310
|
+
'You have been working while following the Task(s) below, but you have never claimed a direction there.',
|
|
311
|
+
'',
|
|
312
|
+
...claim.map(target => `${CLAIM_TARGET_LINE_PREFIX}${target.taskRef} — Thread ${target.threadRef}`),
|
|
313
|
+
'',
|
|
314
|
+
'If your current work belongs to one of these Tasks, briefly state your direction in its Thread and consider team_claim. If it does not, no action is required. This is advisory, not a claim requirement.',
|
|
315
|
+
].join('\n'));
|
|
316
|
+
}
|
|
317
|
+
if (progress.length > 0)
|
|
318
|
+
sections.push('This is advisory; do not stop useful work merely to produce a long status report.');
|
|
319
|
+
return sections.join('\n\n');
|
|
320
|
+
}
|
|
@@ -947,6 +947,7 @@ const _wowyuarm_dsh_agent_team_agentTeam_threadObservations_result$schema = z.ob
|
|
|
947
947
|
'memberId': z.intersection(z.string(), z.unknown()).readonly(),
|
|
948
948
|
'action': z.union([z.literal("follow"), z.literal("unfollow")]).readonly(),
|
|
949
949
|
})).readonly(),
|
|
950
|
+
'followers': z.array(z.intersection(z.string(), z.unknown())).readonly(),
|
|
950
951
|
})
|
|
951
952
|
const _wowyuarm_dsh_agent_team_agentTeam_updateChannel_parameter_0$schema = z.object({
|
|
952
953
|
'requestId': z.intersection(z.string(), z.unknown()).readonly(),
|
|
@@ -1170,7 +1171,7 @@ export const TYPERT = {
|
|
|
1170
1171
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamMemberResult',
|
|
1171
1172
|
schema: _wowyuarm_dsh_agent_team_agentTeam_addMember_result$schema,
|
|
1172
1173
|
},
|
|
1173
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1174
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":475,"column":9},
|
|
1174
1175
|
},
|
|
1175
1176
|
{
|
|
1176
1177
|
id: '@wowyuarm/dsh-agent-team#agentTeam/archiveChannel',
|
|
@@ -1195,7 +1196,7 @@ export const TYPERT = {
|
|
|
1195
1196
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamArchiveChannelResult',
|
|
1196
1197
|
schema: _wowyuarm_dsh_agent_team_agentTeam_archiveChannel_result$schema,
|
|
1197
1198
|
},
|
|
1198
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1199
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":465,"column":9},
|
|
1199
1200
|
},
|
|
1200
1201
|
{
|
|
1201
1202
|
id: '@wowyuarm/dsh-agent-team#agentTeam/archiveMember',
|
|
@@ -1220,7 +1221,7 @@ export const TYPERT = {
|
|
|
1220
1221
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamArchiveMemberResult',
|
|
1221
1222
|
schema: _wowyuarm_dsh_agent_team_agentTeam_archiveMember_result$schema,
|
|
1222
1223
|
},
|
|
1223
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1224
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":745,"column":9},
|
|
1224
1225
|
},
|
|
1225
1226
|
{
|
|
1226
1227
|
id: '@wowyuarm/dsh-agent-team#agentTeam/changeAttention',
|
|
@@ -1245,7 +1246,7 @@ export const TYPERT = {
|
|
|
1245
1246
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamThreadAttentionResult',
|
|
1246
1247
|
schema: _wowyuarm_dsh_agent_team_agentTeam_changeAttention_result$schema,
|
|
1247
1248
|
},
|
|
1248
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1249
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":867,"column":9},
|
|
1249
1250
|
},
|
|
1250
1251
|
{
|
|
1251
1252
|
id: '@wowyuarm/dsh-agent-team#agentTeam/changes',
|
|
@@ -1271,7 +1272,7 @@ export const TYPERT = {
|
|
|
1271
1272
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamChangesResult',
|
|
1272
1273
|
schema: _wowyuarm_dsh_agent_team_agentTeam_changes_result$schema,
|
|
1273
1274
|
},
|
|
1274
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1275
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":397,"column":9},
|
|
1275
1276
|
},
|
|
1276
1277
|
{
|
|
1277
1278
|
id: '@wowyuarm/dsh-agent-team#agentTeam/changeTask',
|
|
@@ -1296,7 +1297,7 @@ export const TYPERT = {
|
|
|
1296
1297
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamTaskResult',
|
|
1297
1298
|
schema: _wowyuarm_dsh_agent_team_agentTeam_changeTask_result$schema,
|
|
1298
1299
|
},
|
|
1299
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1300
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":757,"column":9},
|
|
1300
1301
|
},
|
|
1301
1302
|
{
|
|
1302
1303
|
id: '@wowyuarm/dsh-agent-team#agentTeam/clearMemberContext',
|
|
@@ -1321,7 +1322,7 @@ export const TYPERT = {
|
|
|
1321
1322
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamClearMemberContextResult',
|
|
1322
1323
|
schema: _wowyuarm_dsh_agent_team_agentTeam_clearMemberContext_result$schema,
|
|
1323
1324
|
},
|
|
1324
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1325
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":568,"column":9},
|
|
1325
1326
|
},
|
|
1326
1327
|
{
|
|
1327
1328
|
id: '@wowyuarm/dsh-agent-team#agentTeam/createChannel',
|
|
@@ -1346,7 +1347,7 @@ export const TYPERT = {
|
|
|
1346
1347
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamCreateChannelResult',
|
|
1347
1348
|
schema: _wowyuarm_dsh_agent_team_agentTeam_createChannel_result$schema,
|
|
1348
1349
|
},
|
|
1349
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1350
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":438,"column":9},
|
|
1350
1351
|
},
|
|
1351
1352
|
{
|
|
1352
1353
|
id: '@wowyuarm/dsh-agent-team#agentTeam/getAttachment',
|
|
@@ -1371,7 +1372,7 @@ export const TYPERT = {
|
|
|
1371
1372
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamGetAttachmentResult',
|
|
1372
1373
|
schema: _wowyuarm_dsh_agent_team_agentTeam_getAttachment_result$schema,
|
|
1373
1374
|
},
|
|
1374
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1375
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":853,"column":9},
|
|
1375
1376
|
},
|
|
1376
1377
|
{
|
|
1377
1378
|
id: '@wowyuarm/dsh-agent-team#agentTeam/inbox',
|
|
@@ -1396,7 +1397,7 @@ export const TYPERT = {
|
|
|
1396
1397
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamInbox',
|
|
1397
1398
|
schema: _wowyuarm_dsh_agent_team_agentTeam_inbox_result$schema,
|
|
1398
1399
|
},
|
|
1399
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1400
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":876,"column":3},
|
|
1400
1401
|
},
|
|
1401
1402
|
{
|
|
1402
1403
|
id: '@wowyuarm/dsh-agent-team#agentTeam/joinChannel',
|
|
@@ -1421,7 +1422,7 @@ export const TYPERT = {
|
|
|
1421
1422
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamJoinChannelResult',
|
|
1422
1423
|
schema: _wowyuarm_dsh_agent_team_agentTeam_joinChannel_result$schema,
|
|
1423
1424
|
},
|
|
1424
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1425
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":777,"column":9},
|
|
1425
1426
|
},
|
|
1426
1427
|
{
|
|
1427
1428
|
id: '@wowyuarm/dsh-agent-team#agentTeam/members',
|
|
@@ -1447,7 +1448,7 @@ export const TYPERT = {
|
|
|
1447
1448
|
typeSymbol: '@wowyuarm/dsh-agent-team#agentTeam/members:result',
|
|
1448
1449
|
schema: _wowyuarm_dsh_agent_team_agentTeam_members_result$schema,
|
|
1449
1450
|
},
|
|
1450
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1451
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":388,"column":3},
|
|
1451
1452
|
},
|
|
1452
1453
|
{
|
|
1453
1454
|
id: '@wowyuarm/dsh-agent-team#agentTeam/promoteThread',
|
|
@@ -1472,7 +1473,7 @@ export const TYPERT = {
|
|
|
1472
1473
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamPromoteThreadResult',
|
|
1473
1474
|
schema: _wowyuarm_dsh_agent_team_agentTeam_promoteThread_result$schema,
|
|
1474
1475
|
},
|
|
1475
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1476
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":767,"column":9},
|
|
1476
1477
|
},
|
|
1477
1478
|
{
|
|
1478
1479
|
id: '@wowyuarm/dsh-agent-team#agentTeam/putAttachment',
|
|
@@ -1497,7 +1498,7 @@ export const TYPERT = {
|
|
|
1497
1498
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamPutAttachmentResult',
|
|
1498
1499
|
schema: _wowyuarm_dsh_agent_team_agentTeam_putAttachment_result$schema,
|
|
1499
1500
|
},
|
|
1500
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1501
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":840,"column":9},
|
|
1501
1502
|
},
|
|
1502
1503
|
{
|
|
1503
1504
|
id: '@wowyuarm/dsh-agent-team#agentTeam/readThread',
|
|
@@ -1522,7 +1523,7 @@ export const TYPERT = {
|
|
|
1522
1523
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamThreadReadResult',
|
|
1523
1524
|
schema: _wowyuarm_dsh_agent_team_agentTeam_readThread_result$schema,
|
|
1524
1525
|
},
|
|
1525
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1526
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":883,"column":9},
|
|
1526
1527
|
},
|
|
1527
1528
|
{
|
|
1528
1529
|
id: '@wowyuarm/dsh-agent-team#agentTeam/recoverMember',
|
|
@@ -1547,7 +1548,7 @@ export const TYPERT = {
|
|
|
1547
1548
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamRecoverMemberResult',
|
|
1548
1549
|
schema: _wowyuarm_dsh_agent_team_agentTeam_recoverMember_result$schema,
|
|
1549
1550
|
},
|
|
1550
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1551
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":529,"column":9},
|
|
1551
1552
|
},
|
|
1552
1553
|
{
|
|
1553
1554
|
id: '@wowyuarm/dsh-agent-team#agentTeam/removeChannelMember',
|
|
@@ -1572,7 +1573,7 @@ export const TYPERT = {
|
|
|
1572
1573
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamRemoveChannelMemberResult',
|
|
1573
1574
|
schema: _wowyuarm_dsh_agent_team_agentTeam_removeChannelMember_result$schema,
|
|
1574
1575
|
},
|
|
1575
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1576
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":788,"column":9},
|
|
1576
1577
|
},
|
|
1577
1578
|
{
|
|
1578
1579
|
id: '@wowyuarm/dsh-agent-team#agentTeam/reply',
|
|
@@ -1597,7 +1598,7 @@ export const TYPERT = {
|
|
|
1597
1598
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamReplyResult',
|
|
1598
1599
|
schema: _wowyuarm_dsh_agent_team_agentTeam_reply_result$schema,
|
|
1599
1600
|
},
|
|
1600
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1601
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":861,"column":9},
|
|
1601
1602
|
},
|
|
1602
1603
|
{
|
|
1603
1604
|
id: '@wowyuarm/dsh-agent-team#agentTeam/resolveTaskRefs',
|
|
@@ -1622,7 +1623,7 @@ export const TYPERT = {
|
|
|
1622
1623
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamResolveTaskRefsResult',
|
|
1623
1624
|
schema: _wowyuarm_dsh_agent_team_agentTeam_resolveTaskRefs_result$schema,
|
|
1624
1625
|
},
|
|
1625
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1626
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":375,"column":3},
|
|
1626
1627
|
},
|
|
1627
1628
|
{
|
|
1628
1629
|
id: '@wowyuarm/dsh-agent-team#agentTeam/sendMessage',
|
|
@@ -1647,7 +1648,7 @@ export const TYPERT = {
|
|
|
1647
1648
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamSendMessageResult',
|
|
1648
1649
|
schema: _wowyuarm_dsh_agent_team_agentTeam_sendMessage_result$schema,
|
|
1649
1650
|
},
|
|
1650
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1651
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":797,"column":9},
|
|
1651
1652
|
},
|
|
1652
1653
|
{
|
|
1653
1654
|
id: '@wowyuarm/dsh-agent-team#agentTeam/threadHistory',
|
|
@@ -1672,7 +1673,7 @@ export const TYPERT = {
|
|
|
1672
1673
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamThreadHistory',
|
|
1673
1674
|
schema: _wowyuarm_dsh_agent_team_agentTeam_threadHistory_result$schema,
|
|
1674
1675
|
},
|
|
1675
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1676
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":899,"column":3},
|
|
1676
1677
|
},
|
|
1677
1678
|
{
|
|
1678
1679
|
id: '@wowyuarm/dsh-agent-team#agentTeam/threadObservations',
|
|
@@ -1697,7 +1698,7 @@ export const TYPERT = {
|
|
|
1697
1698
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamThreadObservations',
|
|
1698
1699
|
schema: _wowyuarm_dsh_agent_team_agentTeam_threadObservations_result$schema,
|
|
1699
1700
|
},
|
|
1700
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1701
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":892,"column":3},
|
|
1701
1702
|
},
|
|
1702
1703
|
{
|
|
1703
1704
|
id: '@wowyuarm/dsh-agent-team#agentTeam/updateChannel',
|
|
@@ -1722,7 +1723,7 @@ export const TYPERT = {
|
|
|
1722
1723
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamUpdateChannelResult',
|
|
1723
1724
|
schema: _wowyuarm_dsh_agent_team_agentTeam_updateChannel_result$schema,
|
|
1724
1725
|
},
|
|
1725
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1726
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":450,"column":9},
|
|
1726
1727
|
},
|
|
1727
1728
|
{
|
|
1728
1729
|
id: '@wowyuarm/dsh-agent-team#agentTeam/updateMember',
|
|
@@ -1747,7 +1748,7 @@ export const TYPERT = {
|
|
|
1747
1748
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamMemberResult',
|
|
1748
1749
|
schema: _wowyuarm_dsh_agent_team_agentTeam_updateMember_result$schema,
|
|
1749
1750
|
},
|
|
1750
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1751
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":685,"column":9},
|
|
1751
1752
|
},
|
|
1752
1753
|
{
|
|
1753
1754
|
id: '@wowyuarm/dsh-agent-team#agentTeam/view',
|
|
@@ -1772,7 +1773,7 @@ export const TYPERT = {
|
|
|
1772
1773
|
typeSymbol: '@wowyuarm/dsh-agent-team/types#AgentTeamView',
|
|
1773
1774
|
schema: _wowyuarm_dsh_agent_team_agentTeam_view_result$schema,
|
|
1774
1775
|
},
|
|
1775
|
-
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":
|
|
1776
|
+
sourceLocation: {"file":"packages/agent-team/src/index.ts","line":906,"column":3},
|
|
1776
1777
|
},
|
|
1777
1778
|
],
|
|
1778
1779
|
model: {
|
|
@@ -2474,7 +2475,7 @@ export const TYPERT = {
|
|
|
2474
2475
|
},
|
|
2475
2476
|
{
|
|
2476
2477
|
"name": "AgentTeamThreadObservations",
|
|
2477
|
-
"declaration": "export interface AgentTeamThreadObservations {\n readonly items: readonly AgentTeamThreadAttentionObservation[];\n}"
|
|
2478
|
+
"declaration": "export interface AgentTeamThreadObservations {\n readonly items: readonly AgentTeamThreadAttentionObservation[];\n readonly followers: readonly AgentTeamMemberId[];\n}"
|
|
2478
2479
|
},
|
|
2479
2480
|
{
|
|
2480
2481
|
"name": "AgentTeamThreadObservationsRequest",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typert.remote-client.d.ts","names":["addMember","archiveChannel","archiveMember","changeAttention","changes","changeTask","clearMemberContext","createChannel","getAttachment","inbox","joinChannel","members","promoteThread","putAttachment","readThread","recoverMember","removeChannelMember","reply","resolveTaskRefs","sendMessage","threadHistory","threadObservations","updateChannel","updateMember","view"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"typert.remote-client.d.ts","names":["addMember","archiveChannel","archiveMember","changeAttention","changes","changeTask","clearMemberContext","createChannel","getAttachment","inbox","joinChannel","members","promoteThread","putAttachment","readThread","recoverMember","removeChannelMember","reply","resolveTaskRefs","sendMessage","threadHistory","threadObservations","updateChannel","updateMember","view"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;IA0dQA,S;IAVAC,c;IAwRAC,a;IA0HAC,e;IAtdAC,O;IAwWAC,U;IA7LAC,kB;IAlIAC,a;IA+ZAC,a;IAuBNC,K;IAnGMC,W;IArYNC,O;IA2XMC,a;IAyEAC,a;IA2CAC,U;IAlWAC,a;IAmQAC,mB;IAyEAC,K;IAteNC,e;IAsaMC,W;IAsGNC,a;IAPAC,kB;IA1bMC,a;IA2OAC,Y;IA6NNC,I;;;IA/aMxB,qB;IAVAC,0B;IAwRAC,yB;IA0HAC,2B;IAtdAC,mB;IAwWAC,sB;IA7LAC,8B;IAlIAC,yB;IA+ZAC,yB;IAuBNC,iB;IAnGMC,uB;IArYNC,mB;IA2XMC,yB;IAyEAC,yB;IA2CAC,sB;IAlWAC,yB;IAmQAC,+B;IAyEAC,iB;IAteNC,2B;IAsaMC,uB;IAsGNC,yB;IAPAC,8B;IA1bMC,yB;IA2OAC,wB;IA6NNC,gB","ignoreList":[]}
|