@te-river/opencode-team-mode 1.5.14 → 1.6.0
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 +788 -674
- package/README.zh-CN.md +712 -618
- package/dist/agents.d.ts +5 -3
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +19 -8
- package/dist/agents.js.map +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/capabilities.js +2 -2
- package/dist/capabilities.js.map +1 -1
- package/dist/host-hooks.d.ts +13 -2
- package/dist/host-hooks.d.ts.map +1 -1
- package/dist/host-hooks.js +19 -5
- package/dist/host-hooks.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -14
- package/dist/index.js.map +1 -1
- package/dist/prompts/lead.d.ts +1 -1
- package/dist/prompts/lead.d.ts.map +1 -1
- package/dist/prompts/lead.js +135 -17
- package/dist/prompts/lead.js.map +1 -1
- package/dist/prompts/shared.d.ts +2 -2
- package/dist/prompts/shared.d.ts.map +1 -1
- package/dist/prompts/shared.js +94 -16
- package/dist/prompts/shared.js.map +1 -1
- package/dist/prompts/specialists.d.ts +2 -2
- package/dist/prompts/specialists.d.ts.map +1 -1
- package/dist/prompts/specialists.js +43 -10
- package/dist/prompts/specialists.js.map +1 -1
- package/dist/task-offload.d.ts +67 -0
- package/dist/task-offload.d.ts.map +1 -0
- package/dist/task-offload.js +123 -0
- package/dist/task-offload.js.map +1 -0
- package/dist/tm/args-schema.d.ts +4 -0
- package/dist/tm/args-schema.d.ts.map +1 -1
- package/dist/tm/args-schema.js +44 -3
- package/dist/tm/args-schema.js.map +1 -1
- package/dist/tm/board.d.ts +113 -0
- package/dist/tm/board.d.ts.map +1 -0
- package/dist/tm/board.js +275 -0
- package/dist/tm/board.js.map +1 -0
- package/dist/tm/browser.d.ts +325 -6
- package/dist/tm/browser.d.ts.map +1 -1
- package/dist/tm/browser.js +1329 -135
- package/dist/tm/browser.js.map +1 -1
- package/dist/tm/config.d.ts +36 -1
- package/dist/tm/config.d.ts.map +1 -1
- package/dist/tm/config.js +29 -1
- package/dist/tm/config.js.map +1 -1
- package/dist/tm/dispatch.d.ts +118 -31
- package/dist/tm/dispatch.d.ts.map +1 -1
- package/dist/tm/dispatch.js +385 -131
- package/dist/tm/dispatch.js.map +1 -1
- package/dist/tm/dupe-guard.js +1 -1
- package/dist/tm/dupe-guard.js.map +1 -1
- package/dist/tm/egress.d.ts +44 -0
- package/dist/tm/egress.d.ts.map +1 -0
- package/dist/tm/egress.js +191 -0
- package/dist/tm/egress.js.map +1 -0
- package/dist/tm/guard.js +1 -1
- package/dist/tm/guard.js.map +1 -1
- package/dist/tm/index.d.ts +28 -2
- package/dist/tm/index.d.ts.map +1 -1
- package/dist/tm/index.js +198 -10
- package/dist/tm/index.js.map +1 -1
- package/dist/tm/perm-ask.d.ts +47 -5
- package/dist/tm/perm-ask.d.ts.map +1 -1
- package/dist/tm/perm-ask.js +98 -7
- package/dist/tm/perm-ask.js.map +1 -1
- package/dist/tm/pipelines.d.ts.map +1 -1
- package/dist/tm/pipelines.js +24 -2
- package/dist/tm/pipelines.js.map +1 -1
- package/dist/tm/ptc/tool.d.ts.map +1 -1
- package/dist/tm/ptc/tool.js +2 -4
- package/dist/tm/ptc/tool.js.map +1 -1
- package/dist/tm/pty.d.ts.map +1 -1
- package/dist/tm/pty.js +6 -3
- package/dist/tm/pty.js.map +1 -1
- package/dist/tm/search.d.ts +5 -0
- package/dist/tm/search.d.ts.map +1 -1
- package/dist/tm/search.js +19 -17
- package/dist/tm/search.js.map +1 -1
- package/dist/tm/stats.d.ts +46 -0
- package/dist/tm/stats.d.ts.map +1 -1
- package/dist/tm/stats.js +124 -7
- package/dist/tm/stats.js.map +1 -1
- package/dist/tm/store.d.ts +3 -0
- package/dist/tm/store.d.ts.map +1 -1
- package/dist/tm/store.js +6 -1
- package/dist/tm/store.js.map +1 -1
- package/dist/tm/webfetch.d.ts +52 -0
- package/dist/tm/webfetch.d.ts.map +1 -1
- package/dist/tm/webfetch.js +128 -22
- package/dist/tm/webfetch.js.map +1 -1
- package/dist/tool-coerce.d.ts +24 -0
- package/dist/tool-coerce.d.ts.map +1 -0
- package/dist/tool-coerce.js +63 -0
- package/dist/tool-coerce.js.map +1 -0
- package/dist/types.d.ts +7 -1
- package/dist/types.d.ts.map +1 -1
- package/docs/installation.md +69 -2
- package/package.json +61 -59
package/dist/tm/dispatch.d.ts
CHANGED
|
@@ -1,29 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* tm_join — the COLLECT side of sub-agent work (issue #7 of 2026-09-18; the
|
|
3
|
+
* dispatch side was removed in 1.5.16).
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
5
|
+
* What is gone and why: this module used to own a plugin-side dispatcher,
|
|
6
|
+
* `tm_dispatch`, which bought the lead real overlap by creating child sessions
|
|
7
|
+
* through `client.session.create` + `promptAsync`. It was removed on the
|
|
8
|
+
* user's instruction, because a child a plugin creates is a session the user
|
|
9
|
+
* can neither open from the tool card nor stop from the interface — the host
|
|
10
|
+
* renders only its own built-in tools, and only its own `task` card links to a
|
|
11
|
+
* live child session. "The lead can `cancel:true` it" is not the same thing as
|
|
12
|
+
* the user being able to. Delegation therefore goes back to the host's `task`
|
|
13
|
+
* (and `task { background: true }`, which the installers switch on), and what
|
|
14
|
+
* stays here is the half that is still ours to do: observing and collecting
|
|
15
|
+
* children, which is also how the lead reads back a reply that
|
|
16
|
+
* `src/task-offload.ts` replaced with a pointer.
|
|
14
17
|
*
|
|
15
18
|
* Contract kept from T3 (no sub-agent spawns a sub-agent):
|
|
16
|
-
* - `
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* - children are the five named specialists, never "team";
|
|
20
|
-
* -
|
|
21
|
-
* host
|
|
19
|
+
* - `tm_join` executes ONLY for the team lead (ctx.agent check here, plus an
|
|
20
|
+
* explicit deny for the five specialists in agents.ts — the tm_* wildcard
|
|
21
|
+
* would otherwise hand it to everyone);
|
|
22
|
+
* - the children it knows about are the five named specialists, never "team";
|
|
23
|
+
* - everything it touches is parented to the calling session (parentID), and
|
|
24
|
+
* parentage is READ BACK from the host before an id is claimed — this module
|
|
25
|
+
* never assumes a session belongs to the caller.
|
|
22
26
|
*
|
|
23
27
|
* Context economy (design goal #4): tm_join renders each child's reply
|
|
24
|
-
* through the SAME governance pipeline as every other tm_* tool, so
|
|
25
|
-
*
|
|
26
|
-
*
|
|
28
|
+
* through the SAME governance pipeline as every other tm_* tool, so a long
|
|
29
|
+
* sub-agent report arrives as a handle + an 80-token preview the lead can page
|
|
30
|
+
* through with tm_fetch — not kilotokens dumped inline.
|
|
27
31
|
*/
|
|
28
32
|
import type { HostEvent, ToolDefinition } from "../types.js";
|
|
29
33
|
import type { TmPipelines } from "./pipelines.js";
|
|
@@ -59,28 +63,93 @@ export interface DispatchDeps {
|
|
|
59
63
|
onChildSession?: (sessionID: string, agent: string) => void;
|
|
60
64
|
/** Injectable clock for tests. */
|
|
61
65
|
now?: () => number;
|
|
66
|
+
/** tm_browser's live lease table (id + owning session + idle). tm_join uses
|
|
67
|
+
* it to report a child that settled while still holding a visible window —
|
|
68
|
+
* see the lease tripwire. Absent = the check is skipped, never assumed. */
|
|
69
|
+
browserLeases?: () => {
|
|
70
|
+
id: string;
|
|
71
|
+
owner: string;
|
|
72
|
+
agent: string;
|
|
73
|
+
idleMs: number;
|
|
74
|
+
}[];
|
|
62
75
|
/** Ceiling on how long tm_join will wait on a round of children. */
|
|
63
76
|
maxWaitMs?: number;
|
|
64
77
|
}
|
|
65
78
|
interface SessionApi {
|
|
66
|
-
create?: (opts: unknown) => Promise<unknown>;
|
|
67
|
-
promptAsync?: (opts: unknown) => Promise<unknown>;
|
|
68
79
|
messages?: (opts: unknown) => Promise<unknown>;
|
|
80
|
+
get?: (opts: unknown) => Promise<unknown>;
|
|
69
81
|
status?: (opts: unknown) => Promise<unknown>;
|
|
70
82
|
abort?: (opts: unknown) => Promise<unknown>;
|
|
71
83
|
/** GET /session/{id}/children -> Session[] — the host's own session tree,
|
|
72
84
|
* i.e. the recovery source when this process never saw the dispatch. */
|
|
73
85
|
children?: (opts: unknown) => Promise<unknown>;
|
|
86
|
+
/** GET /session/{id}/todo -> Todo[] — READ-ONLY (the SDK gives no write
|
|
87
|
+
* body; writing is the built-in `todowrite` tool's job). We use it as the
|
|
88
|
+
* goal tripwire below. */
|
|
89
|
+
todo?: (opts: unknown) => Promise<unknown>;
|
|
74
90
|
}
|
|
75
|
-
/**
|
|
76
|
-
|
|
91
|
+
/** Open items on the host's own todo list, in the shape tm_join reports. */
|
|
92
|
+
export interface HostTodo {
|
|
93
|
+
content: string;
|
|
94
|
+
status: string;
|
|
95
|
+
}
|
|
96
|
+
export declare function openHostTodos(todos: unknown): HostTodo[];
|
|
97
|
+
/** #80: the line tm_join adds when a SETTLED child still owns a browser window.
|
|
98
|
+
* Takes only the leases already filtered to settled children, so the ownership
|
|
99
|
+
* rule stays where the child registry is; this function's whole job is to say
|
|
100
|
+
* it in the one shape that survives the lead's skimming — and to refuse to say
|
|
101
|
+
* it for a window that was never ours. */
|
|
102
|
+
export declare function leaseTripwire(held: readonly {
|
|
103
|
+
id: string;
|
|
104
|
+
owner: string;
|
|
105
|
+
agent: string;
|
|
106
|
+
idleMs: number;
|
|
107
|
+
}[], callerSessionID?: string): string | null;
|
|
108
|
+
/** Resolve the host session API defensively — `messages` is what tm_join
|
|
109
|
+
* cannot work without (the collected reply); a host without it means the
|
|
110
|
+
* caller must degrade, and `create`/`promptAsync` are deliberately NOT part
|
|
111
|
+
* of this contract any more: nothing here spawns sessions. */
|
|
77
112
|
export declare function sessionApiOf(client: unknown): SessionApi | null;
|
|
78
|
-
/** The
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
|
|
113
|
+
/** The host's OWN visible-and-non-blocking sub-agent path: its built-in `task`
|
|
114
|
+
* takes `background: true`, and because that card is rendered by the host's
|
|
115
|
+
* own `task` renderer it links to the live child session — which a plugin tool
|
|
116
|
+
* card structurally cannot do. Gated behind a runtime flag (verified in the
|
|
117
|
+
* desktop binary): `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS`, falling back
|
|
118
|
+
* to the umbrella `OPENCODE_EXPERIMENTAL`. We read the SAME env the host
|
|
119
|
+
* reads — our plugin runs inside that process — so this is a fact, not a
|
|
120
|
+
* guess. */
|
|
121
|
+
export declare function hostBackgroundSubagentsEnabled(env?: NodeJS.ProcessEnv): boolean;
|
|
122
|
+
/** What a tm_join wait may actually cost. The FIRST bounded wait gets the
|
|
123
|
+
* requested budget (clamped to TM_JOIN_MAX_WAIT_MS); a wait that follows a
|
|
124
|
+
* wait which settled nothing gets cut to REPEAT_WAIT_MS, because the second
|
|
125
|
+
* one is the shape of a lead parking instead of working — measured live at
|
|
126
|
+
* 2 × 300 s of nothing while six children ran. */
|
|
127
|
+
export declare const REPEAT_WAIT_MS = 10000;
|
|
128
|
+
export declare function joinBudget(waitMs: number, maxWaitMs: number, prev: {
|
|
129
|
+
stillRunning: number;
|
|
130
|
+
streak: number;
|
|
131
|
+
} | undefined): {
|
|
132
|
+
budget: number;
|
|
133
|
+
repeat: boolean;
|
|
134
|
+
streak: number;
|
|
135
|
+
};
|
|
136
|
+
/** Recognise the title a `tm_dispatch` child used to carry — the tool is no
|
|
137
|
+
* longer registered (a plugin-spawned child is a session the user can neither
|
|
138
|
+
* open from a card nor stop from the UI), but children created before the
|
|
139
|
+
* change are still live in the host's session tree and tm_join must still
|
|
140
|
+
* collect them.
|
|
141
|
+
*
|
|
142
|
+
* The shape was the host's OWN subagent convention — the built-in task tool
|
|
143
|
+
* titles its children `${description} (@${agent} subagent)` (verified in the
|
|
144
|
+
* desktop binary), which is what the renderer's `taskSession()` heuristic
|
|
145
|
+
* reads to colour a child row. Ours added a ` ·tm` marker inside that shape,
|
|
146
|
+
* and the marker is LOAD-BEARING in both directions: it is what tells a
|
|
147
|
+
* leftover dispatch apart from a host `task` child, so an automatic tree walk
|
|
148
|
+
* never claims a reply that belongs to the host's dispatcher. The pre-1.5.15
|
|
149
|
+
* shape (`tm:<agent>:<label>`) still parses for the same reason — a session
|
|
150
|
+
* that exists must stay collectable. A child named explicitly by id takes a
|
|
151
|
+
* different path (`claimNamedChild`), where the lock is the host's own
|
|
152
|
+
* parentage rather than the title. */
|
|
84
153
|
export declare function parseDispatchTitle(title: unknown, targets: readonly string[]): {
|
|
85
154
|
agent: string;
|
|
86
155
|
label: string;
|
|
@@ -99,9 +168,21 @@ export declare function parseDispatchTitle(title: unknown, targets: readonly str
|
|
|
99
168
|
export declare function lastAssistantMessage(messages: unknown): {
|
|
100
169
|
text: string;
|
|
101
170
|
completedAt?: number;
|
|
171
|
+
error?: string;
|
|
102
172
|
};
|
|
103
173
|
/** Back-compat seam: the reply text alone. */
|
|
104
174
|
export declare function lastAssistantText(messages: unknown): string;
|
|
175
|
+
/**
|
|
176
|
+
* Turn whatever the host puts in an error slot into ONE readable line.
|
|
177
|
+
*
|
|
178
|
+
* The live host nests them (`{name, data:{message, ref}}`, `{error:{message}}`,
|
|
179
|
+
* a bare string — sometimes several at once), and `String(obj)` is
|
|
180
|
+
* "[object Object]". That is what a lead reported to a user for three child
|
|
181
|
+
* sessions that died at launch: the one diagnostic the whole flow had was
|
|
182
|
+
* destroyed by our own rendering. Never again: dig the known fields, then
|
|
183
|
+
* fall back to a compact key dump — never a bare object stringify.
|
|
184
|
+
*/
|
|
185
|
+
export declare function describeHostError(err: unknown, max?: number): string;
|
|
105
186
|
/** One child's status line — the lead reads these, so keep them terse. */
|
|
106
187
|
export declare function renderChildLine(c: ChildRecord, elapsedMs: number): string;
|
|
107
188
|
/** Verdicts tm_join can actually observe (issue #7's "leader keeps control"). */
|
|
@@ -110,8 +191,14 @@ export declare function summarizeStates(children: readonly ChildRecord[]): {
|
|
|
110
191
|
idle: number;
|
|
111
192
|
error: number;
|
|
112
193
|
};
|
|
194
|
+
/** `ids` arrives in three shapes on the live host: a real array, a
|
|
195
|
+
* JSON-array STRING (`"[\"ses_x\"]"` — what a model actually sent on
|
|
196
|
+
* 2026-09-19), or a comma-separated list. Array.isArray alone silently
|
|
197
|
+
* ignored the string form and returned EVERY child when the lead asked for
|
|
198
|
+
* one, which is the same class of bug as the old `Boolean("false")` headless
|
|
199
|
+
* trap: the arg is trusted because it "looks" like the declared type. */
|
|
200
|
+
export declare function parseIdList(raw: unknown): string[] | null;
|
|
113
201
|
export declare function buildDispatchTools(deps: DispatchDeps): {
|
|
114
|
-
tm_dispatch: ToolDefinition;
|
|
115
202
|
tm_join: ToolDefinition;
|
|
116
203
|
/** Feed the host event bus: `session.idle` / `session.error` /
|
|
117
204
|
* `session.status` mark children settled without polling. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/tm/dispatch.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/tm/dispatch.ts"],"names":[],"mappings":"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"}
|