@te-river/opencode-team-mode 1.5.6 → 1.5.7
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 +340 -528
- package/README.zh-CN.md +336 -480
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +33 -25
- package/dist/agents.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 +7 -4
- package/dist/prompts/lead.js.map +1 -1
- package/dist/prompts/shared.d.ts +1 -1
- package/dist/prompts/shared.d.ts.map +1 -1
- package/dist/prompts/shared.js +15 -13
- 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 +28 -5
- package/dist/prompts/specialists.js.map +1 -1
- package/dist/tm/args-schema.d.ts +6 -0
- package/dist/tm/args-schema.d.ts.map +1 -1
- package/dist/tm/args-schema.js +23 -1
- package/dist/tm/args-schema.js.map +1 -1
- package/dist/tm/config.d.ts +13 -5
- package/dist/tm/config.d.ts.map +1 -1
- package/dist/tm/config.js +18 -6
- package/dist/tm/config.js.map +1 -1
- package/dist/tm/index.d.ts +11 -4
- package/dist/tm/index.d.ts.map +1 -1
- package/dist/tm/index.js +20 -6
- package/dist/tm/index.js.map +1 -1
- package/dist/tm/memory.d.ts +8 -2
- package/dist/tm/memory.d.ts.map +1 -1
- package/dist/tm/memory.js +31 -21
- package/dist/tm/memory.js.map +1 -1
- package/dist/tm/pipelines.d.ts.map +1 -1
- package/dist/tm/pipelines.js +7 -0
- package/dist/tm/pipelines.js.map +1 -1
- package/dist/tm/preview.d.ts.map +1 -1
- package/dist/tm/preview.js +32 -5
- package/dist/tm/preview.js.map +1 -1
- package/dist/tm/ptc/gate.d.ts.map +1 -1
- package/dist/tm/ptc/gate.js +4 -1
- package/dist/tm/ptc/gate.js.map +1 -1
- package/dist/tm/ptc/summary.d.ts.map +1 -1
- package/dist/tm/ptc/summary.js +5 -0
- package/dist/tm/ptc/summary.js.map +1 -1
- package/dist/tm/ptc/tool.d.ts.map +1 -1
- package/dist/tm/ptc/tool.js +2 -1
- package/dist/tm/ptc/tool.js.map +1 -1
- package/dist/tm/search.d.ts +58 -0
- package/dist/tm/search.d.ts.map +1 -0
- package/dist/tm/search.js +229 -0
- package/dist/tm/search.js.map +1 -0
- package/dist/tm/shell-bridge.d.ts +1 -1
- package/dist/tm/shell-bridge.d.ts.map +1 -1
- package/dist/tm/shell-bridge.js +52 -6
- package/dist/tm/shell-bridge.js.map +1 -1
- package/dist/tm/tools.js +1 -1
- package/dist/tm/webfetch.d.ts +23 -8
- package/dist/tm/webfetch.d.ts.map +1 -1
- package/dist/tm/webfetch.js +96 -16
- package/dist/tm/webfetch.js.map +1 -1
- package/docs/installation.md +201 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-bridge.js","sourceRoot":"","sources":["../../src/tm/shell-bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,CAAU,EAAE,OAAe;IAC/D,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;QAC5B,
|
|
1
|
+
{"version":3,"file":"shell-bridge.js","sourceRoot":"","sources":["../../src/tm/shell-bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/tm/tools.js
CHANGED
|
@@ -30,7 +30,7 @@ const TM_GREP_DESCRIPTION = `Full-text regex search inside the project (governed
|
|
|
30
30
|
- Governance: results up to TM_OFFLOAD_THRESHOLD tokens return inline; larger ones are offloaded to a handle {offloaded, ref, access_token, expire_at, tokens, preview} whose preview carries match clues (file:line). Page through with tm_fetch.
|
|
31
31
|
- Strategy: aggregate first (narrow pattern, counts), fetch raw lines only when needed.`;
|
|
32
32
|
const TM_BASH_DESCRIPTION = `Run a READ-ONLY shell command in the project (governed passthrough of the built-in bash). Dialect: bash on POSIX, PowerShell-like on Windows (Get-Content / Get-ChildItem / Select-String work; ls/cat/dir are aliased).
|
|
33
|
-
- Allowlist only (P3): ls cat head tail grep rg find awk sort uniq wc cut dir Get-Content Get-ChildItem Select-String Measure-Object — extend via TM_BASH_READONLY_ALLOWED. Anything else is rejected with a read-only suggestion or an ask to HUMAN.
|
|
33
|
+
- Allowlist only (P3): ls cat head tail grep rg find awk sort uniq wc cut dir Get-Content Get-ChildItem Select-String Measure-Object Select-Object Where-Object Sort-Object Group-Object — extend via TM_BASH_READONLY_ALLOWED. Anything else is rejected with a read-only suggestion or an ask to HUMAN.
|
|
34
34
|
- R6 still applies on top: env dumps (env/printenv/set, $env:) and env-file paths are blocked exactly like the built-in bash — two layers, non-conflicting (R6 forbids, the allowlist permits).
|
|
35
35
|
- Escapes rejected: output redirection (> >>), command substitution ($(), backticks, <() >()), find -delete/-exec, tail -f, Get-Content/Get-ChildItem -Wait, awk system(), rg --pre.
|
|
36
36
|
- Governance: output up to TM_OFFLOAD_THRESHOLD tokens returns inline; larger output is offloaded to a tm_fetch handle. Use for aggregations (count/sort/uniq); for plain search prefer tm_grep (host index, auto-governed).`;
|
package/dist/tm/webfetch.d.ts
CHANGED
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Red lines carried over from the P5 network-zero era:
|
|
12
12
|
* - only http(s) URLs — file:// and every other scheme rejected outright;
|
|
13
|
-
* - the HOST must be on the allowlist (seeded with the
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* - the HOST must be on the allowlist (seeded with the CN-reachable
|
|
14
|
+
* lookup hosts: moegirl wiki / bilibili / bing CN+int / baidu / sogou /
|
|
15
|
+
* 360 / npm registry / GitHub API — see config.ts
|
|
16
|
+
* DEFAULT_WEBFETCH_DOMAINS; TM_WEBFETCH_ALLOWED_DOMAINS overrides, "*"
|
|
17
|
+
* opens every host);
|
|
17
18
|
* - redirects are followed MANUALLY and every hop re-checked against the
|
|
18
19
|
* allowlist (an allowlisted shortener cannot bounce off-site);
|
|
19
20
|
* - a URL naming an env file (isEnvFilePath) is refused — the R6 red
|
|
@@ -24,8 +25,6 @@
|
|
|
24
25
|
import type { ToolResult } from "../types.js";
|
|
25
26
|
import { type TmConfig } from "./config.js";
|
|
26
27
|
import type { TmPipelines } from "./pipelines.js";
|
|
27
|
-
/** Seeded allowlist — the four lookup hosts the design names. */
|
|
28
|
-
export declare const DEFAULT_WEBFETCH_DOMAINS: readonly string[];
|
|
29
28
|
/** True when `hostname` is the domain itself or a subdomain of it. */
|
|
30
29
|
export declare function hostAllowed(hostname: string, allowlist: readonly string[]): boolean;
|
|
31
30
|
export type UrlVerdict = {
|
|
@@ -44,12 +43,29 @@ export declare function checkWebUrl(raw: unknown, allowlist: readonly string[]):
|
|
|
44
43
|
/** Crude but dependency-free HTML → text (script/style/comments stripped,
|
|
45
44
|
* block tags become newlines, common entities decoded). */
|
|
46
45
|
export declare function htmlToText(html: string): string;
|
|
46
|
+
/** Search-engine result pages whose raw HTML is worth collapsing into a
|
|
47
|
+
* clean hit list (title + URL) instead of a wall of stripped page text. */
|
|
48
|
+
export declare const SEARCH_PAGE_RE: RegExp;
|
|
49
|
+
export interface SearchHit {
|
|
50
|
+
title: string;
|
|
51
|
+
url: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Pull external result hits (title + URL) out of a search-engine result
|
|
55
|
+
* page's RAW HTML. Dependency-free: anchor scan + noise filters (relative
|
|
56
|
+
* hrefs, click trackers, engine chrome, duplicates). Engines rearrange
|
|
57
|
+
* their markup often, so the filter set is intentionally loose — callers
|
|
58
|
+
* fall back to plain text extraction when the list comes back thin.
|
|
59
|
+
*/
|
|
60
|
+
export declare function extractSearchHits(html: string, max?: number): SearchHit[];
|
|
61
|
+
/** Compact numbered rendering — what actually enters the context. */
|
|
62
|
+
export declare function renderSearchHits(query: string, engine: string, hits: SearchHit[]): string;
|
|
47
63
|
export interface WebFetchResult {
|
|
48
64
|
text: string;
|
|
49
65
|
contentType: string;
|
|
50
66
|
finalUrl: string;
|
|
51
67
|
}
|
|
52
|
-
type FetchImpl = (input: string, init?: Record<string, unknown>) => Promise<{
|
|
68
|
+
export type FetchImpl = (input: string, init?: Record<string, unknown>) => Promise<{
|
|
53
69
|
ok?: boolean;
|
|
54
70
|
status: number;
|
|
55
71
|
headers: {
|
|
@@ -90,5 +106,4 @@ export declare function buildTmWebfetchTool(deps: {
|
|
|
90
106
|
args: Record<string, unknown>;
|
|
91
107
|
execute: (rawArgs: Record<string, unknown>, ctx: unknown) => Promise<ToolResult>;
|
|
92
108
|
};
|
|
93
|
-
export {};
|
|
94
109
|
//# sourceMappingURL=webfetch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webfetch.d.ts","sourceRoot":"","sources":["../../src/tm/webfetch.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"webfetch.d.ts","sourceRoot":"","sources":["../../src/tm/webfetch.ts"],"names":[],"mappings":"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"}
|
package/dist/tm/webfetch.js
CHANGED
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Red lines carried over from the P5 network-zero era:
|
|
12
12
|
* - only http(s) URLs — file:// and every other scheme rejected outright;
|
|
13
|
-
* - the HOST must be on the allowlist (seeded with the
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* - the HOST must be on the allowlist (seeded with the CN-reachable
|
|
14
|
+
* lookup hosts: moegirl wiki / bilibili / bing CN+int / baidu / sogou /
|
|
15
|
+
* 360 / npm registry / GitHub API — see config.ts
|
|
16
|
+
* DEFAULT_WEBFETCH_DOMAINS; TM_WEBFETCH_ALLOWED_DOMAINS overrides, "*"
|
|
17
|
+
* opens every host);
|
|
17
18
|
* - redirects are followed MANUALLY and every hop re-checked against the
|
|
18
19
|
* allowlist (an allowlisted shortener cannot bounce off-site);
|
|
19
20
|
* - a URL naming an env file (isEnvFilePath) is refused — the R6 red
|
|
@@ -22,16 +23,9 @@
|
|
|
22
23
|
* HTML stripped to text before governance.
|
|
23
24
|
*/
|
|
24
25
|
import { isEnvFilePath } from "../envprotect.js";
|
|
25
|
-
import { shorten } from "./config.js";
|
|
26
|
+
import { shorten, DEFAULT_WEBFETCH_DOMAINS } from "./config.js";
|
|
26
27
|
import { detectContentType } from "./preview.js";
|
|
27
28
|
import { tmError, toToolResult } from "./result.js";
|
|
28
|
-
/** Seeded allowlist — the four lookup hosts the design names. */
|
|
29
|
-
export const DEFAULT_WEBFETCH_DOMAINS = [
|
|
30
|
-
"mobile.moegirl.org.cn",
|
|
31
|
-
"search.bilibili.com",
|
|
32
|
-
"cn.bing.com",
|
|
33
|
-
"www.baidu.com",
|
|
34
|
-
];
|
|
35
29
|
const WEBFETCH_UA = "Mozilla/5.0 (compatible; TeamMode-tm_webfetch/1.0)";
|
|
36
30
|
const WEBFETCH_TIMEOUT_MS = 20_000;
|
|
37
31
|
const WEBFETCH_MAX_BYTES = 2_000_000;
|
|
@@ -101,11 +95,76 @@ export function htmlToText(html) {
|
|
|
101
95
|
.replace(/\n{2,}/g, "\n")
|
|
102
96
|
.trim();
|
|
103
97
|
}
|
|
98
|
+
// ---------- search-result extraction ----------
|
|
99
|
+
/** Anchor tag scanner — captures the href (double- or single-quoted) plus
|
|
100
|
+
* the inner text. */
|
|
101
|
+
const ANCHOR_RE = /<a\b[^>]*href\s*=\s*(?:"([^"]*)"|'([^']*)')[^>]*>([\s\S]*?)<\/a\s*>/gi;
|
|
102
|
+
/** Search-engine result pages whose raw HTML is worth collapsing into a
|
|
103
|
+
* clean hit list (title + URL) instead of a wall of stripped page text. */
|
|
104
|
+
export const SEARCH_PAGE_RE = /(?:cn\.bing\.com|www\.bing\.com)\/search|\.baidu\.com\/s\b|sogou\.com\/web|so\.com\/s\b|search\.bilibili\.com\/all/i;
|
|
105
|
+
/** Click trackers / redirector links that point back at the engine instead
|
|
106
|
+
* of the destination (bing /ck/, baidu /link?, sogou /link?, ms fwlink). */
|
|
107
|
+
const ENGINE_TRACKER_RE = /bing\.com\/ck\/|baidu\.com\/link\?|sogou\.com\/link\?|go\.microsoft\.com\/fwlink/i;
|
|
108
|
+
function decodeEntities(s) {
|
|
109
|
+
return s
|
|
110
|
+
.replace(/ /gi, " ")
|
|
111
|
+
.replace(/&/gi, "&")
|
|
112
|
+
.replace(/</gi, "<")
|
|
113
|
+
.replace(/>/gi, ">")
|
|
114
|
+
.replace(/"/gi, '"')
|
|
115
|
+
.replace(/�?39;|'/gi, "'");
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Pull external result hits (title + URL) out of a search-engine result
|
|
119
|
+
* page's RAW HTML. Dependency-free: anchor scan + noise filters (relative
|
|
120
|
+
* hrefs, click trackers, engine chrome, duplicates). Engines rearrange
|
|
121
|
+
* their markup often, so the filter set is intentionally loose — callers
|
|
122
|
+
* fall back to plain text extraction when the list comes back thin.
|
|
123
|
+
*/
|
|
124
|
+
export function extractSearchHits(html, max = 10) {
|
|
125
|
+
const hits = [];
|
|
126
|
+
const seen = new Set();
|
|
127
|
+
for (const m of html.matchAll(ANCHOR_RE)) {
|
|
128
|
+
const href = decodeEntities((m[1] ?? m[2] ?? "").trim());
|
|
129
|
+
if (!/^https?:\/\//i.test(href))
|
|
130
|
+
continue;
|
|
131
|
+
if (ENGINE_TRACKER_RE.test(href))
|
|
132
|
+
continue;
|
|
133
|
+
const title = decodeEntities(m[3].replace(/<[^>]+>/g, " "))
|
|
134
|
+
.replace(/\s+/g, " ")
|
|
135
|
+
.trim();
|
|
136
|
+
// <4 chars kills engine chrome (下一页 / 首页 / More) without risking real titles
|
|
137
|
+
if (title.length < 4)
|
|
138
|
+
continue;
|
|
139
|
+
const key = href.split("#")[0];
|
|
140
|
+
if (seen.has(key))
|
|
141
|
+
continue;
|
|
142
|
+
seen.add(key);
|
|
143
|
+
hits.push({ title: title.length > 110 ? title.slice(0, 110) + "…" : title, url: href });
|
|
144
|
+
if (hits.length >= max)
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
return hits;
|
|
148
|
+
}
|
|
149
|
+
/** Compact numbered rendering — what actually enters the context. */
|
|
150
|
+
export function renderSearchHits(query, engine, hits) {
|
|
151
|
+
const lines = [`[search] ${engine} × "${query}" → ${hits.length} 条结果:`];
|
|
152
|
+
hits.forEach((h, i) => {
|
|
153
|
+
lines.push(`${i + 1}. ${h.title}`);
|
|
154
|
+
lines.push(` ${h.url}`);
|
|
155
|
+
});
|
|
156
|
+
lines.push("(读正文: tm_webfetch 结果 URL;JS 渲染页用 tm_browser 打开。)");
|
|
157
|
+
return lines.join("\n");
|
|
158
|
+
}
|
|
104
159
|
const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
|
|
105
160
|
async function readBodyCapped(res, maxBytes) {
|
|
106
161
|
const reader = res.body?.getReader?.();
|
|
107
|
-
if (!reader)
|
|
108
|
-
|
|
162
|
+
if (!reader) {
|
|
163
|
+
// some hosts expose only text() (no streaming body) — the cap still
|
|
164
|
+
// applies, as a post-read string truncation
|
|
165
|
+
const t = String(await res.text?.() ?? "");
|
|
166
|
+
return t.length > maxBytes ? t.slice(0, maxBytes) + "\n…(响应体超出字节上限,已截断)" : t;
|
|
167
|
+
}
|
|
109
168
|
const decoder = new TextDecoder("utf-8");
|
|
110
169
|
let out = "";
|
|
111
170
|
let bytes = 0;
|
|
@@ -178,9 +237,9 @@ export function extractWebResponse(raw, contentType) {
|
|
|
178
237
|
return { text: raw, isHtml: false };
|
|
179
238
|
}
|
|
180
239
|
// ---------- tool definition ----------
|
|
181
|
-
const WEBFETCH_DESCRIPTION = `Fetch a web page through the governed pipeline (domain allowlist + threshold offload) —
|
|
240
|
+
const WEBFETCH_DESCRIPTION = `Fetch a web page through the governed pipeline (domain allowlist + threshold offload) — use it for a KNOWN URL; for open-ended lookups PREFER tm_search (multi-engine, extracted results) and user-configured MCP/browser/search tools.
|
|
182
241
|
|
|
183
|
-
- Seeded hosts: mobile.moegirl.org.cn (wiki term: https://mobile.moegirl.org.cn/TERM) · search.bilibili.com (https://search.bilibili.com/all?keyword=QUERY) · cn.bing.com (https://cn.bing.com/search?q=QUERY) · www.baidu.com (https://www.baidu.com/s?wd=QUERY). URL-encode the query (CJK terms too). Expand colloquial/abbreviated terms to canonical forms and fetch BOTH spellings.
|
|
242
|
+
- Seeded hosts (CN-reachable, no API keys): mobile.moegirl.org.cn (wiki term: https://mobile.moegirl.org.cn/TERM) · search.bilibili.com (https://search.bilibili.com/all?keyword=QUERY) · cn.bing.com (https://cn.bing.com/search?q=QUERY; append &ensearch=1 for international results) · www.baidu.com (https://www.baidu.com/s?wd=QUERY) · www.sogou.com (https://www.sogou.com/web?query=QUERY) · www.so.com (https://www.so.com/s?q=QUERY) · registry.npmjs.org (package JSON: https://registry.npmjs.org/<pkg>/latest, search: https://registry.npmjs.org/-/v1/search?text=QUERY) · api.github.com (repo search: https://api.github.com/search/repositories?q=QUERY). URL-encode the query (CJK terms too). Search-engine result pages are auto-extracted to a title+URL hit list. Expand colloquial/abbreviated terms to canonical forms and fetch BOTH spellings.
|
|
184
243
|
- Governance: only http(s), hosts must be allowlisted (extend via TM_WEBFETCH_ALLOWED_DOMAINS, "*" opens all), redirects re-checked per hop, HTML stripped to text; output above TM_OFFLOAD_THRESHOLD tokens is offloaded to a handle — page with tm_fetch (try mode:"structure" first).
|
|
185
244
|
- This is a governed tool: out-of-allowlist hosts are rejected, not dialog-governed.`;
|
|
186
245
|
/** Build the tm_webfetch ToolDefinition over the SHARED main pipelines
|
|
@@ -205,7 +264,28 @@ export function buildTmWebfetchTool(deps) {
|
|
|
205
264
|
const stepId = pipelines.nextStepId();
|
|
206
265
|
pipelines.store.appendTrajectory({ tool, step_id: stepId, event: "call" });
|
|
207
266
|
const res = await fetchWebText(verdict.url, allowlist, { fetchImpl: deps.fetchImpl });
|
|
267
|
+
// Search-engine result pages collapse to a clean hit list (title +
|
|
268
|
+
// URL) BEFORE governance — the stripped page text is ~90% engine
|
|
269
|
+
// chrome. Thin extraction (markup changed / anti-bot shell) falls
|
|
270
|
+
// through to the plain-text path.
|
|
271
|
+
if (SEARCH_PAGE_RE.test(res.finalUrl)) {
|
|
272
|
+
const hits = extractSearchHits(res.text);
|
|
273
|
+
if (hits.length > 0) {
|
|
274
|
+
const sp = verdict.url.searchParams;
|
|
275
|
+
const query = sp.get("q") ?? sp.get("wd") ?? sp.get("query") ?? sp.get("keyword") ?? "";
|
|
276
|
+
const listing = renderSearchHits(query || res.finalUrl, "webfetch", hits);
|
|
277
|
+
return toToolResult(pipelines.govern(stepId, tool, listing, {
|
|
278
|
+
contentType: detectContentType(listing),
|
|
279
|
+
clue: `search url=${shorten(res.finalUrl, 120)}`,
|
|
280
|
+
}));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
208
283
|
const { text } = extractWebResponse(res.text, res.contentType);
|
|
284
|
+
if (!text.trim()) {
|
|
285
|
+
// anti-bot / JS-rendered pages (baidu is the usual offender) return
|
|
286
|
+
// an empty shell — tell the agent instead of storing nothing
|
|
287
|
+
return toToolResult(tmError(tool, "execute", "页面内容为空——该站点可能是反爬或 JS 渲染页(baidu 常见)。换 tm_search 的其他引擎(bing/sogou/so)、用 tm_browser 打开,或直接访问数据源 URL(如 registry.npmjs.org/<pkg>/latest)。"));
|
|
288
|
+
}
|
|
209
289
|
const contentType = detectContentType(text);
|
|
210
290
|
return toToolResult(pipelines.govern(stepId, tool, text, {
|
|
211
291
|
contentType,
|
package/dist/tm/webfetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webfetch.js","sourceRoot":"","sources":["../../src/tm/webfetch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webfetch.js","sourceRoot":"","sources":["../../src/tm/webfetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# TeamMode Installation Guide / 安装指南
|
|
2
|
+
|
|
3
|
+
> **For LLM agents:** your user asked you to install `@te-river/opencode-team-mode`. This document is the complete, self-contained procedure. Read it fully, then execute. Do not improvise package names or config locations — everything you need is here.
|
|
4
|
+
>
|
|
5
|
+
> **面向 LLM 智能体:** 用户要求你安装 `@te-river/opencode-team-mode`。本文档是完整、自包含的安装规程。通读后再执行。不要 improvised 包名或配置路径——所需信息全在这里。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Part A — English
|
|
10
|
+
|
|
11
|
+
### What you are installing
|
|
12
|
+
|
|
13
|
+
An OpenCode plugin that injects a **six-agent development team** (Team Lead, Architect, Implementer, Reviewer, Tester, Researcher) plus six slash commands and nine governed `tm_*` tools into the user's OpenCode. npm package: [`@te-river/opencode-team-mode`](https://www.npmjs.com/package/@te-river/opencode-team-mode). It runs entirely locally; no telemetry, no API keys.
|
|
14
|
+
|
|
15
|
+
### Step 1 — Locate the OpenCode config file
|
|
16
|
+
|
|
17
|
+
Check, in order:
|
|
18
|
+
|
|
19
|
+
1. **Project config:** `opencode.json` or `opencode.jsonc` in the current project root.
|
|
20
|
+
2. **Global config:** `~/.config/opencode/opencode.json` (or `.jsonc`) — on Windows typically `C:\Users\<user>\.config\opencode\opencode.json`.
|
|
21
|
+
|
|
22
|
+
If neither exists, create the global one (`~/.config/opencode/opencode.jsonc`) so the team is available in every project.
|
|
23
|
+
|
|
24
|
+
### Step 2 — Add the plugin entry
|
|
25
|
+
|
|
26
|
+
Merge (do not replace unrelated keys) into the config's `"plugin"` array:
|
|
27
|
+
|
|
28
|
+
```jsonc
|
|
29
|
+
{
|
|
30
|
+
"$schema": "https://opencode.ai/config.json",
|
|
31
|
+
"plugin": [
|
|
32
|
+
"@te-river/opencode-team-mode@latest"
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
If a `"plugin"` array already exists, append the string to it. If the entry is already present, the user may want an **update** instead — see Updating below.
|
|
38
|
+
|
|
39
|
+
### Step 3 — Restart OpenCode
|
|
40
|
+
|
|
41
|
+
The plugin is resolved and loaded **once at startup**. The user must fully quit and restart OpenCode (Desktop: quit from the tray/menu, not just close the window; CLI: restart the `opencode` process).
|
|
42
|
+
|
|
43
|
+
### Step 4 — Verify
|
|
44
|
+
|
|
45
|
+
After restart, verify in this order:
|
|
46
|
+
|
|
47
|
+
1. The agent picker (`@` mentions) lists: **team, architect, implementer, reviewer, tester, researcher**.
|
|
48
|
+
2. Slash commands `/team-plan`, `/team-implement`, `/team-review`, `/team-test`, `/team-research`, `/team-run` autocomplete.
|
|
49
|
+
3. Optional deeper check: `npm view @te-river/opencode-team-mode version` shows the latest published version; ask the user to start a chat and confirm the **team** agent responds.
|
|
50
|
+
|
|
51
|
+
Report which checks passed. If verification fails, see Troubleshooting.
|
|
52
|
+
|
|
53
|
+
### Updating
|
|
54
|
+
|
|
55
|
+
> The installer is idempotent: **re-running it IS the update.** It re-patches
|
|
56
|
+
> the config (no-op when present), purges the stale plugin cache, and
|
|
57
|
+
> re-resolves any npm-installed copy. This exists because OpenCode caches
|
|
58
|
+
> plugins by spec string (`~/.cache/opencode/packages/<name>@latest`) and
|
|
59
|
+
> does not re-resolve `@latest` when a new version publishes (upstream
|
|
60
|
+
> limitation).
|
|
61
|
+
|
|
62
|
+
**Path 1 — re-run the one-line installer:**
|
|
63
|
+
|
|
64
|
+
macOS / Linux (bash):
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
curl -fsSL https://ghproxy.net/https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/scripts/install.sh | bash
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Windows (PowerShell):
|
|
71
|
+
|
|
72
|
+
```powershell
|
|
73
|
+
irm https://ghproxy.net/https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/scripts/install.ps1 | iex
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Path 2 — let an agent do it.** Paste this to any coding agent:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
Update the OpenCode plugin @te-river/opencode-team-mode following
|
|
80
|
+
https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/docs/installation.md
|
|
81
|
+
(the "Updating" section), then verify the install using the checks in that guide.
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Path 3 — manual** (what the scripts automate):
|
|
85
|
+
|
|
86
|
+
1. Delete the cached package directory: `rm -rf ~/.cache/opencode/packages/@te_river+opencode-team-mode@latest` (Windows PowerShell: `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\opencode\cache\packages\@te_river+opencode-team-mode@latest"` — also check `~/.cache/opencode/packages/` under the user profile; remove any directory matching `*opencode-team-mode*`).
|
|
87
|
+
2. If the plugin was also npm-installed into `~/.config/opencode` (check its `package.json` / `package-lock.json`), run `npm install @te-river/opencode-team-mode@latest` there.
|
|
88
|
+
3. Restart OpenCode and re-verify.
|
|
89
|
+
|
|
90
|
+
### Uninstalling
|
|
91
|
+
|
|
92
|
+
1. Remove the entry from the `"plugin"` array in the config file(s) you edited.
|
|
93
|
+
2. Delete the cache directory (path above) if you want to reclaim the disk space.
|
|
94
|
+
3. Restart OpenCode — the agents, commands and tools disappear.
|
|
95
|
+
|
|
96
|
+
### Troubleshooting
|
|
97
|
+
|
|
98
|
+
| Symptom | Cause | Fix |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| Agents don't appear | OpenCode not restarted, or config file is the wrong one | Fully restart; confirm the file you edited is the one OpenCode loads |
|
|
101
|
+
| Version is old despite `@latest` | Plugin cache never invalidates | See Updating — delete the cache dir |
|
|
102
|
+
| Node version error on startup | npm needs Node ≥ 18 | Upgrade Node |
|
|
103
|
+
| Env-var commands suddenly prompt for confirmation | That's the plugin's R6 protection working as designed | Approve once per operation, or set `TM_ENV_PROTECT=off` (not recommended) |
|
|
104
|
+
| A user-defined agent named `team`/`architect`/… got shadowed | Plugin injects defaults; your own definitions always win | The plugin never clobbers user agents — check for typos in your agent names |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Part B — 中文
|
|
109
|
+
|
|
110
|
+
### 你在安装什么
|
|
111
|
+
|
|
112
|
+
一个 OpenCode 插件,向用户的 OpenCode 注入**六人开发团队**(Team Lead、Architect、Implementer、Reviewer、Tester、Researcher)+ 六个斜杠命令 + 九个受治理的 `tm_*` 工具。npm 包:[`@te-river/opencode-team-mode`](https://www.npmjs.com/package/@te-river/opencode-team-mode)。完全本地运行,无遥测、无 API Key。
|
|
113
|
+
|
|
114
|
+
### 第 1 步 — 找到 OpenCode 配置文件
|
|
115
|
+
|
|
116
|
+
按顺序检查:
|
|
117
|
+
|
|
118
|
+
1. **项目配置:** 当前项目根目录下的 `opencode.json` 或 `opencode.jsonc`。
|
|
119
|
+
2. **全局配置:** `~/.config/opencode/opencode.json`(或 `.jsonc`)——Windows 下通常是 `C:\Users\<用户名>\.config\opencode\opencode.json`。
|
|
120
|
+
|
|
121
|
+
都不存在时,创建全局配置(`~/.config/opencode/opencode.jsonc`),让团队在每个项目里都可用。
|
|
122
|
+
|
|
123
|
+
### 第 2 步 — 加入插件条目
|
|
124
|
+
|
|
125
|
+
合并(不要动无关的键)进配置的 `"plugin"` 数组:
|
|
126
|
+
|
|
127
|
+
```jsonc
|
|
128
|
+
{
|
|
129
|
+
"$schema": "https://opencode.ai/config.json",
|
|
130
|
+
"plugin": [
|
|
131
|
+
"@te-river/opencode-team-mode@latest"
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
已有 `"plugin"` 数组就把字符串追加进去。如果条目已经存在,用户想要的可能是**更新**——见下文"更新"。
|
|
137
|
+
|
|
138
|
+
### 第 3 步 — 重启 OpenCode
|
|
139
|
+
|
|
140
|
+
插件只在**启动时**解析和加载一次。用户需要完全退出并重启 OpenCode(桌面版:从托盘/菜单退出,不是只关窗口;CLI:重启 `opencode` 进程)。
|
|
141
|
+
|
|
142
|
+
### 第 4 步 — 验证
|
|
143
|
+
|
|
144
|
+
重启后按顺序验证:
|
|
145
|
+
|
|
146
|
+
1. Agent 选择器(`@` 提及)里出现:**team、architect、implementer、reviewer、tester、researcher**。
|
|
147
|
+
2. 斜杠命令 `/team-plan`、`/team-implement`、`/team-review`、`/team-test`、`/team-research`、`/team-run` 可以自动补全。
|
|
148
|
+
3. 可选的深度检查:`npm view @te-river/opencode-team-mode version` 显示最新发布版本;请用户开一个会话确认 **team** agent 能正常响应。
|
|
149
|
+
|
|
150
|
+
报告哪些检查通过。验证失败时看"故障排查"。
|
|
151
|
+
|
|
152
|
+
### 更新
|
|
153
|
+
|
|
154
|
+
> 安装器是幂等的:**重跑安装器就是更新。** 它会补齐配置(已存在则跳过)、
|
|
155
|
+
> 清掉过期插件缓存、并重解析 npm 安装的副本。之所以需要这一步:OpenCode
|
|
156
|
+
> 按 spec 字符串缓存插件(`~/.cache/opencode/packages/<name>@latest`),
|
|
157
|
+
> 新版本发布后不会重新解析 `@latest`(上游已知问题)。
|
|
158
|
+
|
|
159
|
+
**路径一 —— 重跑一行安装器:**
|
|
160
|
+
|
|
161
|
+
macOS / Linux(bash):
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
curl -fsSL https://ghproxy.net/https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/scripts/install.sh | bash
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Windows(PowerShell):
|
|
168
|
+
|
|
169
|
+
```powershell
|
|
170
|
+
irm https://ghproxy.net/https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/scripts/install.ps1 | iex
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**路径二 —— 让 agent 更新。** 把这段话粘给任意编码 agent:
|
|
174
|
+
|
|
175
|
+
```text
|
|
176
|
+
更新 OpenCode 插件 @te-river/opencode-team-mode:按照
|
|
177
|
+
https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/docs/installation.md
|
|
178
|
+
的"更新"章节执行,并按该指南里的检查项验证。
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**路径三 —— 手动**(脚本自动化的内容):
|
|
182
|
+
|
|
183
|
+
1. 删除缓存的包目录:`rm -rf ~/.cache/opencode/packages/@te_river+opencode-team-mode@latest`(Windows PowerShell:`Remove-Item -Recurse -Force "$env:LOCALAPPDATA\opencode\cache\packages\@te_river+opencode-team-mode@latest"`——用户目录下的 `~/.cache/opencode/packages/` 也要检查;删除所有匹配 `*opencode-team-mode*` 的目录)。
|
|
184
|
+
2. 如果插件还被 npm 装进了 `~/.config/opencode`(检查它的 `package.json` / `package-lock.json`),在那里执行 `npm install @te-river/opencode-team-mode@latest`。
|
|
185
|
+
3. 重启 OpenCode 并重新验证。
|
|
186
|
+
|
|
187
|
+
### 卸载
|
|
188
|
+
|
|
189
|
+
1. 从你编辑过的配置文件里的 `"plugin"` 数组移除该条目。
|
|
190
|
+
2. 想回收磁盘空间的话删除上面的缓存目录。
|
|
191
|
+
3. 重启 OpenCode——agents、命令和工具全部消失。
|
|
192
|
+
|
|
193
|
+
### 故障排查
|
|
194
|
+
|
|
195
|
+
| 症状 | 原因 | 修复 |
|
|
196
|
+
|---|---|---|
|
|
197
|
+
| Agents 没出现 | OpenCode 没重启,或改错了配置文件 | 完全重启;确认改的文件就是 OpenCode 加载的那个 |
|
|
198
|
+
| 用着 `@latest` 版本还是旧的 | 插件缓存永不失效 | 见"更新"——删除缓存目录 |
|
|
199
|
+
| 启动报 Node 版本错误 | npm 需要 Node ≥ 18 | 升级 Node |
|
|
200
|
+
| 环境变量命令突然弹确认框 | 这是插件的 R6 保护在正常工作 | 每个操作选"一次",或设 `TM_ENV_PROTECT=off`(不推荐) |
|
|
201
|
+
| 用户自定义的 `team`/`architect` 等 agent 被遮蔽 | 插件注入默认值;你的定义永远优先 | 插件从不覆盖用户 agent——检查你的 agent 名字有没有拼错 |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@te-river/opencode-team-mode",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.7",
|
|
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",
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
"dist",
|
|
16
16
|
"README.md",
|
|
17
17
|
"README.zh-CN.md",
|
|
18
|
-
"LICENSE"
|
|
18
|
+
"LICENSE",
|
|
19
|
+
"docs"
|
|
19
20
|
],
|
|
20
21
|
"scripts": {
|
|
21
22
|
"build": "tsc",
|