teamshare-bridge 0.26.15 → 0.26.17
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/dist/bridge/daemon.js +13 -3
- package/dist/bridge/daemon.js.map +1 -1
- package/dist/bridge/local-server.d.ts +52 -8
- package/dist/bridge/local-server.js +449 -50
- package/dist/bridge/local-server.js.map +1 -1
- package/dist/cli/commands/blog.js +3 -0
- package/dist/cli/commands/blog.js.map +1 -1
- package/dist/cli/commands/harness.d.ts +1 -1
- package/dist/cli/commands/harness.js +2 -1
- package/dist/cli/commands/harness.js.map +1 -1
- package/dist/cli/commands/research.js +23 -1
- package/dist/cli/commands/research.js.map +1 -1
- package/dist/lib/agent-scope.d.ts +21 -0
- package/dist/lib/agent-scope.js +35 -0
- package/dist/lib/agent-scope.js.map +1 -0
- package/dist/lib/brief.js +4 -0
- package/dist/lib/brief.js.map +1 -1
- package/dist/lib/browser/network-log.d.ts +33 -0
- package/dist/lib/browser/network-log.js +58 -11
- package/dist/lib/browser/network-log.js.map +1 -1
- package/dist/lib/chat/board-reply.js +2 -0
- package/dist/lib/chat/board-reply.js.map +1 -1
- package/dist/lib/chat/chat-reply.js +2 -0
- package/dist/lib/chat/chat-reply.js.map +1 -1
- package/dist/lib/chat/doc-reply.js +2 -0
- package/dist/lib/chat/doc-reply.js.map +1 -1
- package/dist/lib/chat/workflow-author-reply.js +2 -0
- package/dist/lib/chat/workflow-author-reply.js.map +1 -1
- package/dist/lib/diagnostics.d.ts +2 -0
- package/dist/lib/diagnostics.js +9 -6
- package/dist/lib/diagnostics.js.map +1 -1
- package/dist/lib/harness/harness-adapter.d.ts +15 -8
- package/dist/lib/harness/harness-adapter.js +33 -7
- package/dist/lib/harness/harness-adapter.js.map +1 -1
- package/dist/lib/harness/relay-key.d.ts +23 -0
- package/dist/lib/harness/relay-key.js +36 -0
- package/dist/lib/harness/relay-key.js.map +1 -0
- package/dist/lib/harness/spawn.d.ts +23 -5
- package/dist/lib/harness/spawn.js +153 -22
- package/dist/lib/harness/spawn.js.map +1 -1
- package/dist/lib/scope-guard.d.ts +54 -0
- package/dist/lib/scope-guard.js +246 -0
- package/dist/lib/scope-guard.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Scope guard (2026-10-25).
|
|
4
|
+
*
|
|
5
|
+
* A QA run lost its tools at the 63-minute mark and spent the next hour
|
|
6
|
+
* operating the PLATFORM instead of reporting a blocker: it listed processes,
|
|
7
|
+
* read `~/.teamshare/config.json` and `~/.config/opencode/opencode.jsonc`,
|
|
8
|
+
* printed a live `ts_...` key into the transcript and called the TeamShare API
|
|
9
|
+
* with it. Nothing in the runtime noticed, because the harness had a shell and
|
|
10
|
+
* no rule said what it may touch.
|
|
11
|
+
*
|
|
12
|
+
* Removing the shell fixes the QA lane. This module is the second layer that
|
|
13
|
+
* works for EVERY harness (codex/gemini/cursor have no permission model): it
|
|
14
|
+
* classifies the tool input a harness is about to run and lets the caller abort
|
|
15
|
+
* the session on a platform-level action.
|
|
16
|
+
*
|
|
17
|
+
* The classifier is PURE and deliberately conservative: it only sees tool
|
|
18
|
+
* inputs (a shell command, a path, a URL), never assistant prose, so a report
|
|
19
|
+
* that merely mentions `.teamshare` cannot trip it. Every rule is a literal
|
|
20
|
+
* pattern with a stable id, and the tests pin both the hits and the
|
|
21
|
+
* false-positives a real repository path produces (`teamshare-bridge/`,
|
|
22
|
+
* `../.teamshare-worktrees/`, `teamshare/research/`).
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.classifyScopeViolation = classifyScopeViolation;
|
|
26
|
+
exports.scopeTextsFromLine = scopeTextsFromLine;
|
|
27
|
+
exports.inspectLineForScope = inspectLineForScope;
|
|
28
|
+
/** Keys whose string values are the actual tool INPUT (never prose). */
|
|
29
|
+
const TOOL_INPUT_KEYS = new Set([
|
|
30
|
+
'command',
|
|
31
|
+
'cmd',
|
|
32
|
+
'code',
|
|
33
|
+
'script',
|
|
34
|
+
'filePath',
|
|
35
|
+
'file_path',
|
|
36
|
+
'path',
|
|
37
|
+
'pattern',
|
|
38
|
+
'url',
|
|
39
|
+
]);
|
|
40
|
+
const MAX_TEXTS = 40;
|
|
41
|
+
const MAX_DEPTH = 6;
|
|
42
|
+
const MAX_TEXT_LENGTH = 8_000;
|
|
43
|
+
/**
|
|
44
|
+
* Path of the machine-local bridge state (`~/.teamshare`). Written so that it
|
|
45
|
+
* matches `~/.teamshare/config.json`, `%USERPROFILE%\.teamshare\...` and
|
|
46
|
+
* `C:\...\.teamshare\...` but NOT `.teamshare-worktrees` (a mirror path) or
|
|
47
|
+
* `<cwd>/teamshare/` (the research scratch folder).
|
|
48
|
+
*/
|
|
49
|
+
const PRIVATE_STATE = /(?:^|[\\/\s"'`=(])\.teamshare(?:[\\/]|$|[\s"'`),])/;
|
|
50
|
+
/**
|
|
51
|
+
* The ONE agent-writable part of the state folder: a task run's run report
|
|
52
|
+
* (`~/.teamshare/reports/<taskId>.md`, uploaded by the bridge). It holds no
|
|
53
|
+
* credential and every brief instructs the agent to write it, so flagging it
|
|
54
|
+
* would abort honest work.
|
|
55
|
+
*/
|
|
56
|
+
const REPORT_PATH = /(?:^|[\\/\s"'`=(])\.teamshare[\\/]reports(?:[\\/]|$|[\s"'`),])/;
|
|
57
|
+
/** Private state that is NOT the run-report folder. */
|
|
58
|
+
function hasPrivateStatePath(text) {
|
|
59
|
+
if (!PRIVATE_STATE.test(text))
|
|
60
|
+
return false;
|
|
61
|
+
return PRIVATE_STATE.test(text.replace(new RegExp(REPORT_PATH.source, 'g'), ' '));
|
|
62
|
+
}
|
|
63
|
+
/** `opencode.json` / `.config/opencode` - the harness's own MCP identity. */
|
|
64
|
+
const MCP_CONFIG = /(?:^|[\\/\s"'`=(])\.config[\\/]opencode(?:[\\/]|$)/i;
|
|
65
|
+
const OPENCODE_JSON = /(?:^|[\\/\s"'`=(])opencode\.jsonc?(?:$|[\s"'`])/i;
|
|
66
|
+
/** The relay endpoints themselves. */
|
|
67
|
+
const RELAY_PROBE = /\bmcp-relay\b|\bmcp-token\b|\b(?:127\.0\.0\.1|localhost):\d{2,5}[\\/]mcp(?:-relay)?\b/i;
|
|
68
|
+
/**
|
|
69
|
+
* A platform CLI invoked as a COMMAND.
|
|
70
|
+
*
|
|
71
|
+
* The position matters: `cd teamshare-bridge`, `--prefix teamshare-bridge` and
|
|
72
|
+
* `"teamshare-bridge/src/x.ts"` are ordinary work on this repository, while
|
|
73
|
+
* `teamshare-agent doctor` and `sh -c "teamshare-bridge status"` are the agent
|
|
74
|
+
* operating the platform. A separator (or a shell `-c`) is required, and the
|
|
75
|
+
* token may not be followed by a path separator or word character.
|
|
76
|
+
*/
|
|
77
|
+
const PLATFORM_CLI = /(?:^|[;&|(]\s*|\(\s*|\b(?:sudo|doas)\s+|\b(?:bash|sh|zsh|cmd|powershell|pwsh)\b[^\n]{0,40}?)(?:"|')?(?:teamshare-agent|teamshare-bridge|opencode)(?:\.(?:exe|cmd|ps1))?(?:"|')?(?![\w\\/.-])/i;
|
|
78
|
+
/** Credentials: a literal key, or a header that carries one. */
|
|
79
|
+
const CREDENTIAL_LITERAL = /\bts_(?:ba_)?[A-Za-z0-9_-]{16,}\b/;
|
|
80
|
+
const CREDENTIAL_HEADER = /\bx-api-key\b|\bx-teamshare-(?:session-token|machine-id)\b/i;
|
|
81
|
+
/** A network call to the hub, from a shell or from Code Mode. */
|
|
82
|
+
const API_CALL = /https?:\/\/(?:api\.)?teamshare\.name\.ng|\b(curl|wget|Invoke-WebRequest|Invoke-RestMethod|iwr|irm|https?\.request|fetch)\b[\s\S]{0,240}(?:api\.teamshare|teamshare\.name\.ng)/i;
|
|
83
|
+
/** Process inspection is normal for a code run; recorded, never fatal. */
|
|
84
|
+
const PROCESS_INSPECT = /\b(Get-Process|tasklist|ps\s+(?:aux|-ef)|pgrep)\b/i;
|
|
85
|
+
/**
|
|
86
|
+
* Redact the credential shapes a violating command may contain BEFORE the
|
|
87
|
+
* detail is logged, posted or sent as a diagnostic. The guard's whole purpose
|
|
88
|
+
* includes not repeating a key it just caught.
|
|
89
|
+
*/
|
|
90
|
+
function redactSensitive(text) {
|
|
91
|
+
return text
|
|
92
|
+
.replace(/\bts_(?:ba_)?[A-Za-z0-9_-]{6,}\b/g, '[REDACTED_KEY]')
|
|
93
|
+
.replace(/\bsk-[A-Za-z0-9_-]{6,}\b/g, '[REDACTED_KEY]')
|
|
94
|
+
.replace(/(Bearer\s+)[A-Za-z0-9._-]{8,}/gi, '$1[REDACTED]')
|
|
95
|
+
.replace(/((?:x-api-key|x-teamshare-session-token|x-teamshare-machine-id)["']?\s*[:=]\s*["']?)[^"'\s,}]+/gi, '$1[REDACTED]');
|
|
96
|
+
}
|
|
97
|
+
function detailOf(text) {
|
|
98
|
+
const oneLine = redactSensitive(text)
|
|
99
|
+
.replace(/\s+/g, ' ')
|
|
100
|
+
.trim()
|
|
101
|
+
.slice(0, 240);
|
|
102
|
+
return oneLine;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Classify ONE tool input. Returns `null` when the input is ordinary work.
|
|
106
|
+
* Order is deliberate: the first match is the most specific reason a human
|
|
107
|
+
* will read in the run console.
|
|
108
|
+
*/
|
|
109
|
+
function classifyScopeViolation(input) {
|
|
110
|
+
const text = typeof input === 'string' ? input : '';
|
|
111
|
+
if (!text.trim())
|
|
112
|
+
return null;
|
|
113
|
+
const detail = detailOf(text);
|
|
114
|
+
if (CREDENTIAL_LITERAL.test(text)) {
|
|
115
|
+
return {
|
|
116
|
+
rule: 'credential_literal',
|
|
117
|
+
severity: 'abort',
|
|
118
|
+
reason: 'a literal TeamShare API key was used in a tool call; agents never handle keys',
|
|
119
|
+
detail,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (CREDENTIAL_HEADER.test(text)) {
|
|
123
|
+
return {
|
|
124
|
+
rule: 'credential_header',
|
|
125
|
+
severity: 'abort',
|
|
126
|
+
reason: 'a TeamShare credential header was set by hand; the harness already authenticates itself',
|
|
127
|
+
detail,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (hasPrivateStatePath(text)) {
|
|
131
|
+
return {
|
|
132
|
+
rule: 'private_state',
|
|
133
|
+
severity: 'abort',
|
|
134
|
+
reason: 'the bridge state folder (~/.teamshare) is off limits - it holds credentials and other agents’ sessions',
|
|
135
|
+
detail,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
if (MCP_CONFIG.test(text) || OPENCODE_JSON.test(text)) {
|
|
139
|
+
return {
|
|
140
|
+
rule: 'mcp_config',
|
|
141
|
+
severity: 'abort',
|
|
142
|
+
reason: 'the harness MCP config is off limits - it carries the run’s identity',
|
|
143
|
+
detail,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
if (RELAY_PROBE.test(text)) {
|
|
147
|
+
return {
|
|
148
|
+
rule: 'relay_probe',
|
|
149
|
+
severity: 'abort',
|
|
150
|
+
reason: 'the MCP relay endpoint is not a target for a run',
|
|
151
|
+
detail,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (PLATFORM_CLI.test(text)) {
|
|
155
|
+
return {
|
|
156
|
+
rule: 'platform_cli',
|
|
157
|
+
severity: 'abort',
|
|
158
|
+
reason: 'a run never drives the TeamShare bridge/CLI - infrastructure failures are reported, not repaired',
|
|
159
|
+
detail,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (API_CALL.test(text)) {
|
|
163
|
+
return {
|
|
164
|
+
rule: 'api_call',
|
|
165
|
+
severity: 'abort',
|
|
166
|
+
reason: 'a run must use its TeamShare MCP tools, never call the API by hand',
|
|
167
|
+
detail,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
if (PROCESS_INSPECT.test(text)) {
|
|
171
|
+
return {
|
|
172
|
+
rule: 'process_inspect',
|
|
173
|
+
severity: 'warn',
|
|
174
|
+
reason: 'process inspection is outside the task’s scope',
|
|
175
|
+
detail,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
function collect(value, out, depth) {
|
|
181
|
+
if (out.length >= MAX_TEXTS || depth > MAX_DEPTH)
|
|
182
|
+
return;
|
|
183
|
+
if (typeof value === 'string')
|
|
184
|
+
return;
|
|
185
|
+
if (Array.isArray(value)) {
|
|
186
|
+
for (const item of value)
|
|
187
|
+
collect(item, out, depth + 1);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (!value || typeof value !== 'object')
|
|
191
|
+
return;
|
|
192
|
+
for (const [key, child] of Object.entries(value)) {
|
|
193
|
+
if (out.length >= MAX_TEXTS)
|
|
194
|
+
return;
|
|
195
|
+
if (typeof child === 'string' && TOOL_INPUT_KEYS.has(key)) {
|
|
196
|
+
if (child.length > MAX_TEXT_LENGTH) {
|
|
197
|
+
out.push(child.slice(0, MAX_TEXT_LENGTH));
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
out.push(child);
|
|
201
|
+
}
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
if (typeof child === 'object')
|
|
205
|
+
collect(child, out, depth + 1);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* The tool INPUTS carried by one streamed harness line.
|
|
210
|
+
*
|
|
211
|
+
* Only JSON lines are read: every supported harness emits one JSON event per
|
|
212
|
+
* line, and a non-JSON line is console text (assistant prose), which must never
|
|
213
|
+
* be classified as an action. Returns `[]` for anything it cannot parse.
|
|
214
|
+
*/
|
|
215
|
+
function scopeTextsFromLine(line) {
|
|
216
|
+
const raw = typeof line === 'string' ? line.trim() : '';
|
|
217
|
+
if (!raw.startsWith('{') && !raw.startsWith('['))
|
|
218
|
+
return [];
|
|
219
|
+
let parsed;
|
|
220
|
+
try {
|
|
221
|
+
parsed = JSON.parse(raw);
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
return [];
|
|
225
|
+
}
|
|
226
|
+
const out = [];
|
|
227
|
+
collect(parsed, out, 0);
|
|
228
|
+
return out;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* The first ABORT violation across a line's tool inputs. Warnings are collected
|
|
232
|
+
* separately so a code run is not killed for listing its own processes.
|
|
233
|
+
*/
|
|
234
|
+
function inspectLineForScope(line) {
|
|
235
|
+
const warnings = [];
|
|
236
|
+
for (const text of scopeTextsFromLine(line)) {
|
|
237
|
+
const hit = classifyScopeViolation(text);
|
|
238
|
+
if (!hit)
|
|
239
|
+
continue;
|
|
240
|
+
if (hit.severity === 'abort')
|
|
241
|
+
return { abort: hit, warnings };
|
|
242
|
+
warnings.push(hit);
|
|
243
|
+
}
|
|
244
|
+
return { abort: null, warnings };
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=scope-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-guard.js","sourceRoot":"","sources":["../../src/lib/scope-guard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED