@te-river/opencode-team-mode 1.7.8 → 1.7.10

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 错峰重试 (#49 feature 3) �?the honest half of "back off when the provider
2
+ * 错峰重试 (#49 feature 3) — the honest half of "back off when the provider
3
3
  * throttles us".
4
4
  *
5
5
  * THE HONEST BOUNDARY, stated first because everything below is shaped by it:
@@ -8,11 +8,16 @@
8
8
  * does exactly three things, and says so:
9
9
  *
10
10
  * 1. RECOGNISE a provider throttle from the event feed (`session.error`), by
11
- * matching explicit signatures only �?never by guessing. A text that does
11
+ * matching explicit signatures only — never by guessing. A text that
12
12
  * not carry a known signature classifies as `unknown` and changes nothing.
13
13
  * 2. COMPUTE an exact wait (the fixed 5s/10s/20s ladder for retries #1/#2/#3, doubling
14
- * to the cap after that; jitter applies only when retryJitter > 0) and inject it into the
15
- * NEXT request's system prompt as an actionable sentence ("�?N 秒再�?),
14
+ * to the cap after that; jitter applies only when retryJitter > 0) — but ONLY for the
15
+ * kinds a wait can fix. A HARD quota (allocated-exceeded / increase-your-limit /
16
+ * token-limit / 余额不足) names no wait: the directive says stop and raise-or-reset,
17
+ * and the breaker trips on the SECOND consecutive hard-quota error instead of
18
+ * `breakAfter`. The structured `retryAfterMs` host 2.1.2 (#57146) puts on session
19
+ * errors is honored as the wait floor. Inject it into the
20
+ * NEXT request's system prompt as an actionable sentence ("等 N 秒再发"),
16
21
  * not a vague "try later". The directive is consumed once, so a host that
17
22
  * replays the hook in-process cannot duplicate it.
18
23
  * 3. COOL DOWN: after `breakAfter` consecutive throttle errors the breaker
@@ -33,16 +38,10 @@ export interface ProviderErrorClass {
33
38
  kind: ProviderErrorKind;
34
39
  /** A `Retry-After`-style hint parsed out of the text, in ms; 0 when absent. */
35
40
  retryAfterMs: number;
41
+ /** true only inside the quota kind when the text says waiting cannot fix this
42
+ * (allocated quota / increase your limit / token-limit / 余额不足). */
43
+ hardQuota: boolean;
36
44
  }
37
- /**
38
- * Classify a provider error from its TEXT alone. Explicit signatures only:
39
- * a text with no known signature is `unknown` and must never trip anything �? * mislabelling an ordinary error as a quota error is the failure mode the plan
40
- * names, and the way to avoid it is to require the signature.
41
- *
42
- * Order matters: quota before rate before transient, because a message can carry
43
- * more than one token (e.g. "quota exceeded (429)") and the most specific class
44
- * is the useful one.
45
- */
46
45
  export declare function classifyProviderError(text: unknown): ProviderErrorClass;
47
46
  export interface RetryConfig {
48
47
  enabled: boolean;
@@ -61,7 +60,7 @@ export interface RetryConfig {
61
60
  */
62
61
  export declare const RETRY_DEFAULTS: RetryConfig;
63
62
  /**
64
- * Resolve the knobs. An ILLEGAL value falls back to its default �?it never
63
+ * Resolve the knobs. An ILLEGAL value falls back to its default — it never
65
64
  * silently disables the feature ("非法值回退默认,不静默关闸"). Only an explicit
66
65
  * `retry: "off"` turns it off.
67
66
  */
@@ -99,7 +98,7 @@ export interface RetryDirective {
99
98
  delayMs: number;
100
99
  }
101
100
  export interface RetryGovernor {
102
- observe(text: unknown): ProviderErrorClass & {
101
+ observe(text: unknown, structuredRetryAfterMs?: number): ProviderErrorClass & {
103
102
  delayMs: number;
104
103
  };
105
104
  observeEvent(raw: unknown): void;
@@ -133,6 +132,12 @@ export declare function createRetryGovernor(opts?: RetryGovernorOptions): RetryG
133
132
  * assuming one shape.
134
133
  */
135
134
  export declare function errorTextOf(raw: unknown): string;
135
+ /**
136
+ * Host 2.1.2 (#57146) puts `retryAfterMs` on structured session errors. Read it
137
+ * defensively — same walk style as `errorTextOf`: the payload shape is not a promised
138
+ * interface, so an absent or non-numeric field is simply 0.
139
+ */
140
+ export declare function structuredRetryAfterOf(raw: unknown): number;
136
141
  export interface RetryLayerInput {
137
142
  scope?: TeamScope;
138
143
  governor: RetryGovernor;
@@ -146,9 +151,9 @@ export interface RetryLayer {
146
151
  }
147
152
  /**
148
153
  * Register the two hooks the retry layer owns:
149
- * · `session.hook("context")` �?inject the pending directive (exact seconds)
154
+ * · `session.hook("context")` — inject the pending directive (exact seconds)
150
155
  * into the NEXT request's system prompt, once, Team-scoped.
151
- * · `permission.hook("evaluate")` �?deny a `subagent` dispatch while the
156
+ * · `permission.hook("evaluate")` — deny a `subagent` dispatch while the
152
157
  * breaker's cooldown is active, Team-scoped, only ever stricter.
153
158
  *
154
159
  * Nothing here throws into a hook: a failure is counted and the call is allowed
@@ -1 +1 @@
1
- {"version":3,"file":"v2-retry.d.ts","sourceRoot":"","sources":["../../src/host/v2-retry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v2-retry.d.ts","sourceRoot":"","sources":["../../src/host/v2-retry.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 错峰重试 (#49 feature 3) �?the honest half of "back off when the provider
2
+ * 错峰重试 (#49 feature 3) — the honest half of "back off when the provider
3
3
  * throttles us".
4
4
  *
5
5
  * THE HONEST BOUNDARY, stated first because everything below is shaped by it:
@@ -8,11 +8,16 @@
8
8
  * does exactly three things, and says so:
9
9
  *
10
10
  * 1. RECOGNISE a provider throttle from the event feed (`session.error`), by
11
- * matching explicit signatures only �?never by guessing. A text that does
11
+ * matching explicit signatures only — never by guessing. A text that
12
12
  * not carry a known signature classifies as `unknown` and changes nothing.
13
13
  * 2. COMPUTE an exact wait (the fixed 5s/10s/20s ladder for retries #1/#2/#3, doubling
14
- * to the cap after that; jitter applies only when retryJitter > 0) and inject it into the
15
- * NEXT request's system prompt as an actionable sentence ("�?N 秒再�?),
14
+ * to the cap after that; jitter applies only when retryJitter > 0) — but ONLY for the
15
+ * kinds a wait can fix. A HARD quota (allocated-exceeded / increase-your-limit /
16
+ * token-limit / 余额不足) names no wait: the directive says stop and raise-or-reset,
17
+ * and the breaker trips on the SECOND consecutive hard-quota error instead of
18
+ * `breakAfter`. The structured `retryAfterMs` host 2.1.2 (#57146) puts on session
19
+ * errors is honored as the wait floor. Inject it into the
20
+ * NEXT request's system prompt as an actionable sentence ("等 N 秒再发"),
16
21
  * not a vague "try later". The directive is consumed once, so a host that
17
22
  * replays the hook in-process cannot duplicate it.
18
23
  * 3. COOL DOWN: after `breakAfter` consecutive throttle errors the breaker
@@ -29,31 +34,35 @@ import { resolveConfig } from "../tm/config.js";
29
34
  export const RETRY_MARKER = "## Team Retry";
30
35
  /**
31
36
  * Classify a provider error from its TEXT alone. Explicit signatures only:
32
- * a text with no known signature is `unknown` and must never trip anything �? * mislabelling an ordinary error as a quota error is the failure mode the plan
37
+ * a text with no known signature is `unknown` and must never trip anything —
33
38
  * names, and the way to avoid it is to require the signature.
34
39
  *
35
40
  * Order matters: quota before rate before transient, because a message can carry
36
41
  * more than one token (e.g. "quota exceeded (429)") and the most specific class
37
42
  * is the useful one.
38
43
  */
44
+ /** The exhaustion sub-signature: a wait cannot fix these — the limit must be raised
45
+ * or the period must roll over. A bare "quota exceeded" stays SOFT (it may already
46
+ * carry a reset), per the "explicit signatures only" rule above. */
47
+ const HARD_QUOTA_RE = /allocated quota exceeded|increase your quota|insufficient quota|quota limit|token[- ]limit|余额不足/;
39
48
  export function classifyProviderError(text) {
40
49
  const s = typeof text === "string" ? text : "";
41
50
  if (!s.trim())
42
- return { kind: "unknown", retryAfterMs: 0 };
51
+ return { kind: "unknown", retryAfterMs: 0, hardQuota: false };
43
52
  const lower = s.toLowerCase();
44
53
  const retryAfterMs = parseRetryAfter(s);
45
54
  if (/allocated quota exceeded|quota exceeded|insufficient_quota|exceeded.*quota|quota.*exceed|配额|余额不足/.test(lower)) {
46
- return { kind: "quota", retryAfterMs };
55
+ return { kind: "quota", retryAfterMs, hardQuota: HARD_QUOTA_RE.test(lower) };
47
56
  }
48
57
  if (/\b429\b|too many requests|rate[ _-]?limit|rate_limit_exceeded|限流|请求过于频繁/.test(lower)) {
49
- return { kind: "rate", retryAfterMs };
58
+ return { kind: "rate", retryAfterMs, hardQuota: false };
50
59
  }
51
60
  if (/\b50[0-4]\b|overloaded|temporarily unavailable|service unavailable|bad gateway|gateway timeout|timed? ?out|timeout|econnreset|etimedout|socket hang up/.test(lower)) {
52
- return { kind: "transient", retryAfterMs };
61
+ return { kind: "transient", retryAfterMs, hardQuota: false };
53
62
  }
54
- return { kind: "unknown", retryAfterMs };
63
+ return { kind: "unknown", retryAfterMs, hardQuota: false };
55
64
  }
56
- /** `Retry-After: 30` / `retry after 30 seconds` �?30 000 ms. Absent �?0. */
65
+ /** `Retry-After: 30` / `retry after 30 seconds` → 30 000 ms. Absent → 0. */
57
66
  function parseRetryAfter(s) {
58
67
  const m = /retry[-_ ]?after["'\s:=]+(\d+)/i.exec(s);
59
68
  if (!m)
@@ -78,7 +87,7 @@ export const RETRY_DEFAULTS = {
78
87
  };
79
88
  const isOff = (raw) => /^(off|false|0|no)$/i.test(String(raw ?? "").trim());
80
89
  /**
81
- * Resolve the knobs. An ILLEGAL value falls back to its default �?it never
90
+ * Resolve the knobs. An ILLEGAL value falls back to its default — it never
82
91
  * silently disables the feature ("非法值回退默认,不静默关闸"). Only an explicit
83
92
  * `retry: "off"` turns it off.
84
93
  */
@@ -136,17 +145,28 @@ export function createRetryGovernor(opts = {}) {
136
145
  threw: 0,
137
146
  };
138
147
  let streak = 0;
148
+ let hardStreak = 0;
139
149
  let cooldownUntil = 0;
140
150
  let pending = null;
141
151
  const inCooldown = () => now() < cooldownUntil;
142
- const buildDirective = (kind, delayMs) => {
152
+ const buildDirective = (cls, delayMs) => {
153
+ if (cls.hardQuota) {
154
+ const hint = cls.retryAfterMs > 0 ? `(错误文本给出的重试时间:约 ${Math.round(cls.retryAfterMs / 1000)} 秒)` : "";
155
+ return {
156
+ text: `${RETRY_MARKER}(配额耗尽,不是故障)\n检测到 provider 配额耗尽(hard quota):等待与重试都无法解决——请停止向该 provider 重发${hint},等其配额重置,或请用户提升配额/更换模型。需要完成的工作请主代理自己执行(再派子代理只会被同样的配额打回)。这是配额保护,不是插件故障;可用 retry: "off" 关闭。`,
157
+ delayMs: 0,
158
+ };
159
+ }
160
+ return buildLadderDirective(cls.kind, delayMs);
161
+ };
162
+ const buildLadderDirective = (kind, delayMs) => {
143
163
  const secs = Math.max(1, Math.round(delayMs / 1000));
144
164
  const text = inCooldown()
145
- ? `${RETRY_MARKER}(配额保护,不是故障)\n连续 ${cfg.breakAfter} 次配�?限流错误,已进入冷却:请等待 ${secs} 秒后再发下一次请求,期间新的子代理派发会被拒绝。这是配额保护,不是插件故障;可�?retry: "off" 关闭。`
146
- : `${RETRY_MARKER}(配额保护,不是故障)\n检测到 provider ${kindLabel(kind)} 错误:请等待 ${secs} 秒后再发下一次请求。这是配额保护,不是插件故障;可�?retry: "off" 关闭。`;
165
+ ? `${RETRY_MARKER}(配额保护,不是故障)\n连续 ${cfg.breakAfter} 次配额/限流错误,已进入冷却:请等待 ${secs} 秒后再发下一次请求,这是配额保护,不是插件故障;可用 retry: "off" 关闭。`
166
+ : `${RETRY_MARKER}(配额保护,不是故障)\n检测到 provider ${kindLabel(kind)} 错误:请等待 ${secs} 秒后再发下一次请求。这是配额保护,不是插件故障;可用 retry: "off" 关闭。`;
147
167
  return { text, delayMs };
148
168
  };
149
- const observe = (text) => {
169
+ const observe = (text, structuredRetryAfterMs = 0) => {
150
170
  const cls = classifyProviderError(text);
151
171
  if (cls.kind === "unknown") {
152
172
  report.unknownSeen++;
@@ -159,20 +179,27 @@ export function createRetryGovernor(opts = {}) {
159
179
  else
160
180
  report.transientSeen++;
161
181
  streak++;
162
- const delayMs = Math.max(backoffMs(streak - 1, cfg.baseMs, cfg.maxMs, cfg.jitter, random), cls.retryAfterMs);
182
+ hardStreak = cls.hardQuota ? hardStreak + 1 : 0;
183
+ const structured = Number.isFinite(structuredRetryAfterMs) && structuredRetryAfterMs > 0 ? structuredRetryAfterMs : 0;
184
+ const retryAfterSource = structured > 0 ? "structured" : cls.retryAfterMs > 0 ? "text" : "none";
185
+ // A hard quota names NO wait — the ladder would be a promise a reset cannot keep.
186
+ const delayMs = cls.hardQuota ? 0 : Math.max(backoffMs(streak - 1, cfg.baseMs, cfg.maxMs, cfg.jitter, random), structured, cls.retryAfterMs);
163
187
  report.lastDelayMs = delayMs;
164
- emit({ event: "classified", kind: cls.kind, delay_ms: delayMs, streak });
165
- // The breaker: consecutive errors, and the current one is a throttle class.
166
- if (isThrottle(cls.kind) && streak >= cfg.breakAfter) {
188
+ emit({ event: "classified", kind: cls.kind, hard_quota: cls.hardQuota, delay_ms: delayMs, streak, retry_after_source: retryAfterSource });
189
+ // The breaker: consecutive errors of a throttle class. A hard quota is different
190
+ // work — two in a row means the provider is out of allocation, and waiting for
191
+ // breakAfter only burns the user's tokens on a dead endpoint.
192
+ if (isThrottle(cls.kind) && (cls.hardQuota ? hardStreak >= 2 : streak >= cfg.breakAfter)) {
167
193
  const wasIn = inCooldown();
168
194
  cooldownUntil = now() + cfg.cooldownMs;
169
195
  report.cooldowns++;
170
196
  if (!wasIn)
171
197
  report.breakTrips++;
172
198
  streak = 0;
199
+ hardStreak = 0;
173
200
  emit({ event: "cooldown", break_trips: report.breakTrips, cooldowns: report.cooldowns, cooldown_ms: cfg.cooldownMs });
174
201
  }
175
- pending = buildDirective(cls.kind, delayMs);
202
+ pending = buildDirective(cls, delayMs);
176
203
  return { ...cls, delayMs };
177
204
  };
178
205
  return {
@@ -180,7 +207,7 @@ export function createRetryGovernor(opts = {}) {
180
207
  observeEvent(raw) {
181
208
  const text = errorTextOf(raw);
182
209
  if (text)
183
- observe(text);
210
+ observe(text, structuredRetryAfterOf(raw));
184
211
  },
185
212
  directive: () => pending,
186
213
  takeDirective() {
@@ -194,6 +221,7 @@ export function createRetryGovernor(opts = {}) {
194
221
  report,
195
222
  reset() {
196
223
  streak = 0;
224
+ hardStreak = 0;
197
225
  cooldownUntil = 0;
198
226
  pending = null;
199
227
  },
@@ -243,12 +271,42 @@ export function errorTextOf(raw) {
243
271
  }
244
272
  return parts.join(" ");
245
273
  }
274
+ /**
275
+ * Host 2.1.2 (#57146) puts `retryAfterMs` on structured session errors. Read it
276
+ * defensively — same walk style as `errorTextOf`: the payload shape is not a promised
277
+ * interface, so an absent or non-numeric field is simply 0.
278
+ */
279
+ export function structuredRetryAfterOf(raw) {
280
+ if (!raw || typeof raw !== "object")
281
+ return 0;
282
+ const pick = (v) => (typeof v === "number" && Number.isFinite(v) && v > 0 ? v : 0);
283
+ const o = raw;
284
+ const direct = pick(o.retryAfterMs);
285
+ if (direct)
286
+ return direct;
287
+ const err = o.error;
288
+ if (err && typeof err === "object") {
289
+ const e = pick(err.retryAfterMs);
290
+ if (e)
291
+ return e;
292
+ }
293
+ const props = (o.properties ?? o.payload ?? o.data);
294
+ if (props && typeof props === "object") {
295
+ const p = pick(props.retryAfterMs);
296
+ if (p)
297
+ return p;
298
+ const pe = props.error;
299
+ if (pe && typeof pe === "object")
300
+ return pick(pe.retryAfterMs);
301
+ }
302
+ return 0;
303
+ }
246
304
  const rank = { allow: 0, ask: 1, deny: 2 };
247
305
  /**
248
306
  * Register the two hooks the retry layer owns:
249
- * · `session.hook("context")` �?inject the pending directive (exact seconds)
307
+ * · `session.hook("context")` — inject the pending directive (exact seconds)
250
308
  * into the NEXT request's system prompt, once, Team-scoped.
251
- * · `permission.hook("evaluate")` �?deny a `subagent` dispatch while the
309
+ * · `permission.hook("evaluate")` — deny a `subagent` dispatch while the
252
310
  * breaker's cooldown is active, Team-scoped, only ever stricter.
253
311
  *
254
312
  * Nothing here throws into a hook: a failure is counted and the call is allowed
@@ -304,7 +362,7 @@ export async function applyV2RetryGovernor(ctx, input) {
304
362
  /* the trajectory line is an extra */
305
363
  }
306
364
  const secs = Math.max(1, Math.round(governor.cooldownRemainingMs() / 1000));
307
- const message = `配额保护:连�?${governor.breakAfter} 次配�?限流错误,已进入冷却(剩余约 ${secs} 秒)。期间不派发新的子代理;这是配额保护,不是故障。可�?retry: "off" 关闭。`;
365
+ const message = `配额保护:上游配额/限流已连续打回请求,冷却中(剩余约 ${secs} 秒)。期间不派发新的子代理——子代理的模型请求会继续被打回,需要完成的工作请主代理自己执行,或等冷却结束/提升配额。这是配额保护,不是故障;可用 retry: "off" 关闭。`;
308
366
  // Only ever stricter: a host that already denied keeps its decision.
309
367
  if (rank.deny <= rank[event.effect ?? "allow"])
310
368
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"v2-retry.js","sourceRoot":"","sources":["../../src/host/v2-retry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v2-retry.js","sourceRoot":"","sources":["../../src/host/v2-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAI/C,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAA;AAa3C;;;;;;;;GAQG;AACH;;qEAEqE;AACrE,MAAM,aAAa,GAAG,iGAAiG,CAAA;AAEvH,MAAM,UAAU,qBAAqB,CAAC,IAAa;IACjD,MAAM,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9C,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAC5E,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IAC7B,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;IAEvC,IAAI,kGAAkG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;IAC9E,CAAC;IACD,IAAI,yEAAyE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1F,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IACzD,CAAC;IACD,IAAI,wJAAwJ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzK,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAC9D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;AAC5D,CAAC;AAED,6EAA6E;AAC7E,SAAS,eAAe,CAAC,CAAS;IAChC,MAAM,CAAC,GAAG,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnD,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAChB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AACpD,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,KAAK;CAClB,CAAA;AAED,MAAM,KAAK,GAAG,CAAC,GAAY,EAAW,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAE7F;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAOI,aAAa,EAAE;IAEnB,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,KAAK,KAAK,KAAK;QAC/B,MAAM,EAAE,MAAM,CAAC,WAAW;QAC1B,KAAK,EAAE,MAAM,CAAC,UAAU;QACxB,MAAM,EAAE,MAAM,CAAC,WAAW;QAC1B,UAAU,EAAE,MAAM,CAAC,eAAe;QAClC,UAAU,EAAE,MAAM,CAAC,eAAe;KACnC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,MAAc,EAAE,KAAa,EAAE,MAAc,EAAE,MAAoB;IAC5G,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5E,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAA;AAC9C,CAAC;AA+CD,MAAM,UAAU,GAAG,CAAC,IAAuB,EAAW,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,CAAA;AAE5F,MAAM,SAAS,GAAG,CAAC,IAAuB,EAAU,EAAE,CACpD,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AAEvF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA6B,EAAE;IACjE,MAAM,GAAG,GAAgB,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,EAAE,CAAA;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IACnD,MAAM,IAAI,GAAG,CAAC,GAA4B,EAAQ,EAAE;QAClD,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAA;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;IACH,CAAC,CAAA;IAED,MAAM,MAAM,GAAgB;QAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,kBAAkB,EAAE,CAAC;QACrB,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,CAAC;QACjB,KAAK,EAAE,CAAC;KACT,CAAA;IAED,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,aAAa,GAAG,CAAC,CAAA;IACrB,IAAI,OAAO,GAA0B,IAAI,CAAA;IAEzC,MAAM,UAAU,GAAG,GAAY,EAAE,CAAC,GAAG,EAAE,GAAG,aAAa,CAAA;IAEvD,MAAM,cAAc,GAAG,CAAC,GAAuB,EAAE,OAAe,EAAkB,EAAE;QAClF,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;YACnG,OAAO;gBACL,IAAI,EACF,GAAG,YAAY,2EAA2E,IAAI,0FAA0F;gBAC1L,OAAO,EAAE,CAAC;aACX,CAAA;QACH,CAAC;QACD,OAAO,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,CAAC,IAAuB,EAAE,OAAe,EAAkB,EAAE;QACxF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAA;QACpD,MAAM,IAAI,GAAG,UAAU,EAAE;YACvB,CAAC,CAAC,GAAG,YAAY,mBAAmB,GAAG,CAAC,UAAU,uBAAuB,IAAI,8CAA8C;YAC3H,CAAC,CAAC,GAAG,YAAY,6BAA6B,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,8CAA8C,CAAA;QAC5H,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAC1B,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,sBAAsB,GAAG,CAAC,EAA4C,EAAE;QACtG,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,WAAW,EAAE,CAAA;YACpB,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;QAC/B,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM,CAAC,SAAS,EAAE,CAAA;aACvC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;;YAC1C,MAAM,CAAC,aAAa,EAAE,CAAA;QAE3B,MAAM,EAAE,CAAA;QACR,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,sBAAsB,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAA;QACrH,MAAM,gBAAgB,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;QAC/F,kFAAkF;QAClF,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,CAAA;QAC5I,MAAM,CAAC,WAAW,GAAG,OAAO,CAAA;QAC5B,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAEzI,kFAAkF;QAClF,+EAA+E;QAC/E,8DAA8D;QAC9D,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACzF,MAAM,KAAK,GAAG,UAAU,EAAE,CAAA;YAC1B,aAAa,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,CAAA;YACtC,MAAM,CAAC,SAAS,EAAE,CAAA;YAClB,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,UAAU,EAAE,CAAA;YAC/B,MAAM,GAAG,CAAC,CAAA;YACV,UAAU,GAAG,CAAC,CAAA;YACd,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;QACvH,CAAC;QAED,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACtC,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAA;IAC5B,CAAC,CAAA;IAED,OAAO;QACL,OAAO;QACP,YAAY,CAAC,GAAY;YACvB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;YAC7B,IAAI,IAAI;gBAAE,OAAO,CAAC,IAAI,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAA;QACtD,CAAC;QACD,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO;QACxB,aAAa;YACX,MAAM,CAAC,GAAG,OAAO,CAAA;YACjB,OAAO,GAAG,IAAI,CAAA;YACd,OAAO,CAAC,CAAA;QACV,CAAC;QACD,UAAU;QACV,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,GAAG,EAAE,CAAC;QAC7D,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,MAAM;QACN,KAAK;YACH,MAAM,GAAG,CAAC,CAAA;YACV,UAAU,GAAG,CAAC,CAAA;YACd,aAAa,GAAG,CAAC,CAAA;YACjB,OAAO,GAAG,IAAI,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAA;IACvC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IAC9C,MAAM,CAAC,GAAG,GAA8B,CAAA;IACxC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,CAAC,CAAU,EAAQ,EAAE;QAChC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC,CAAA;IACD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACf,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACZ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACZ,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACb,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAwC,CAAA;IAC1F,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChB,MAAM,GAAG,GAAG,KAAK,CAAC,KAA4C,CAAA;QAC9D,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;QACjE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAY;IACjD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAA;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnG,MAAM,CAAC,GAAG,GAA8B,CAAA;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IACnC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAA;IACnB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAE,GAA+B,CAAC,YAAY,CAAC,CAAA;QAC7D,IAAI,CAAC;YAAE,OAAO,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAwC,CAAA;IAC1F,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAClC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAA;QACf,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAA;QACtB,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAE,EAA8B,CAAC,YAAY,CAAC,CAAA;IAC7F,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAW,CAAA;AAenD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAc,EAAE,KAAsB;IAC/E,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;IAC9B,MAAM,aAAa,GAAqB,EAAE,CAAA;IAE1C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;IAC3B,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAClD,aAAa,CAAC,IAAI,CAChB,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAuB,EAAE,EAAE;YACxD,IAAI,CAAC;gBACH,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM;oBAAE,OAAM;gBAChE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAG,KAAiC,CAAC,SAAS,CAAC,CAAA;gBACxE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;oBAAE,OAAM;gBACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAA;gBAClC,IAAI,CAAC,CAAC;oBAAE,OAAM;gBACd,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACjD,MAAM,CAAC,kBAAkB,EAAE,CAAA;gBAC3B,IAAI,CAAC;oBACH,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC7D,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,KAAK,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAA;IACjC,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACxD,aAAa,CAAC,IAAI,CAChB,MAAM,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAA6B,EAAE,EAAE;YAClE,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,KAAK,UAAU;oBAAE,OAAM;gBACtD,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;oBACzD,MAAM,CAAC,cAAc,EAAE,CAAA;oBACvB,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;oBAAE,OAAM;gBAClC,MAAM,CAAC,cAAc,EAAE,CAAA;gBACvB,IAAI,CAAC;oBACH,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;gBACpF,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;gBAC3E,MAAM,OAAO,GAAG,+BAA+B,IAAI,4FAA4F,CAAA;gBAC/I,qEAAqE;gBACrE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC;oBAAE,OAAM;gBACtD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;gBACrB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,KAAK,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,CAAC,CACH,CAAA;IACH,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAA;AAClC,CAAC"}
@@ -190,7 +190,8 @@ it applies to new sessions.
190
190
  ### Step 4 — Restart and verify
191
191
 
192
192
  ```bash
193
- opencode reload # or just restart the desktop app
193
+ # restart the desktop app — do NOT use `opencode reload`: it crashes on
194
+ # 2.1.2's background-service path (upstream anomalyco/opencode#57719)
194
195
  ```
195
196
 
196
197
  Four checks, in this order:
@@ -211,9 +212,11 @@ Four checks, in this order:
211
212
  ### Updating / 更新
212
213
 
213
214
  ```bash
214
- opencode plugin update @te-river/opencode-team-mode # or plugin add …@latest again
215
+ opencode plugin update @te-river/opencode-team-mode # NOTE: broken on 2.1.2 — says
216
+ # "Plugin is not configured" for a configured plugin (upstream anomalyco/opencode#57719);
217
+ # re-run the installer instead
215
218
  node ~/.config/opencode/node_modules/@te-river/opencode-team-mode/scripts/gen-v2-config.mjs
216
- opencode reload
219
+ # then restart the desktop app (`opencode reload` is broken there too)
217
220
  ```
218
221
 
219
222
  The second command is not optional after an upgrade: the role files carry the prompts, and
@@ -453,7 +456,8 @@ Windows 上的路径是
453
456
  ### 第 4 步 — 重启并核对
454
457
 
455
458
  ```bash
456
- opencode reload # 或者直接重启桌面端
459
+ # 重启桌面端——不要用 `opencode reload`:它在 2.1.2 的后台服务路径上崩溃
460
+ # (上游 anomalyco/opencode#57719)
457
461
  ```
458
462
 
459
463
  按顺序做四项核对:
@@ -473,9 +477,10 @@ opencode reload # 或者直接重启桌面端
473
477
  ### 更新
474
478
 
475
479
  ```bash
476
- opencode plugin update @te-river/opencode-team-mode # 或者再跑一次 plugin add …@latest
480
+ opencode plugin update @te-river/opencode-team-mode # 注意:2.1.2 上这条会报
481
+ # "Plugin is not configured"(插件其实已配置)——请改重跑安装器(上游 anomalyco/opencode#57719)
477
482
  node ~/.config/opencode/node_modules/@te-river/opencode-team-mode/scripts/gen-v2-config.mjs
478
- opencode reload
483
+ # 然后重启桌面端(`opencode reload` 在 2.1.2 上同样会崩)
479
484
  ```
480
485
 
481
486
  第二条命令在升级之后不是可选项:角色文件里装的是提示词,新版本可能改过。重跑很便宜——没变
@@ -652,3 +652,22 @@ three forced-background `subagent` dispatches each settled and their full bodies
652
652
  (the completion envelope injection path works on 2.1.2), and the boot probe against the real
653
653
  config shows `loading plugin … @te-river/opencode-team-mode@latest` from the host cache with the
654
654
  `[team-mode] v2 人格已启动` note and no load failure.
655
+
656
+ **The reload path is broken on 2.1.2 `[L]`:** `opencode-cli reload` dies with
657
+ `ServiceUnavailableError: TypeError: o is not a function. (In 'o()', 'o' is an instance of Object)`
658
+ inside `ServerProcess.start` (exit 1); from another cwd the same trace shows
659
+ `at Worktree.refresh`. The control that localizes it: `reload --standalone` in a fully
660
+ redirected sandbox with an EMPTY config answers `Configuration reloaded` exit 0, while
661
+ service-attach reload crashes even with an empty `OPENCODE_CONFIG_DIR` and a healthy
662
+ `service status` — so the bug is the background-service attach / worktree-refresh path in the
663
+ host binary, not config content and not plugins (plugin code never runs in the CLI process).
664
+ The desktop UI surfaces the same TypeError on its plugin-update toast, and
665
+ `opencode plugin update <pkg>` reports "Plugin is not configured" for a globally configured
666
+ plugin (both with and without the `@latest` suffix). Upstream issue filed as
667
+ anomalyco/opencode#57719; our docs/installers now tell users to restart the app instead.
668
+ **The gentler path exists, untested:** the command tree carries `opencode service restart`
669
+ ("Restart the background server"; `service start|stop|status` beside it) — the first thing to
670
+ try before touching processes at all. It restarts the background server the CLI shares; how
671
+ the DESKTOP app re-attaches to its embedded server afterwards is unmeasured, so it has not
672
+ been adopted into the docs yet — verify it live (accepting a possible session interruption)
673
+ before recommending it.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@te-river/opencode-team-mode",
3
- "version": "1.7.8",
3
+ "version": "1.7.10",
4
4
  "description": "Team collaboration mode plugin for OpenCode Desktop — injects specialized agents (architect, reviewer, implementer, tester, researcher) and team workflow commands into your OpenCode workspace.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -480,7 +480,7 @@ function main() {
480
480
  for (const u of unverified) console.log(u)
481
481
  console.log(
482
482
  `\n共 ${written.length} 个文件(角色 ${Object.keys(agents).length} + 命令 ${Object.keys(commands).length})` +
483
- `${printOnly ? "(--print,未落盘)" : ""}。重启桌面端(或 opencode reload)后 Team 出现在 agent 选择器、/team-* 出现在命令列表。`,
483
+ `${printOnly ? "(--print,未落盘)" : ""}。重启桌面端后 Team 出现在 agent 选择器、/team-* 出现在命令列表(2.1.2 上别用 opencode reload,它会崩——上游 anomalyco/opencode#57719)。`,
484
484
  )
485
485
  if (unverified.length) {
486
486
  console.log(`注意:${unverified.length} 个文件无法确认是否与目标同一文件,已保留不删(#48 fail-safe)。`)