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