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.
Files changed (44) hide show
  1. package/dist/bridge/daemon.js +13 -3
  2. package/dist/bridge/daemon.js.map +1 -1
  3. package/dist/bridge/local-server.d.ts +52 -8
  4. package/dist/bridge/local-server.js +449 -50
  5. package/dist/bridge/local-server.js.map +1 -1
  6. package/dist/cli/commands/blog.js +3 -0
  7. package/dist/cli/commands/blog.js.map +1 -1
  8. package/dist/cli/commands/harness.d.ts +1 -1
  9. package/dist/cli/commands/harness.js +2 -1
  10. package/dist/cli/commands/harness.js.map +1 -1
  11. package/dist/cli/commands/research.js +23 -1
  12. package/dist/cli/commands/research.js.map +1 -1
  13. package/dist/lib/agent-scope.d.ts +21 -0
  14. package/dist/lib/agent-scope.js +35 -0
  15. package/dist/lib/agent-scope.js.map +1 -0
  16. package/dist/lib/brief.js +4 -0
  17. package/dist/lib/brief.js.map +1 -1
  18. package/dist/lib/browser/network-log.d.ts +33 -0
  19. package/dist/lib/browser/network-log.js +58 -11
  20. package/dist/lib/browser/network-log.js.map +1 -1
  21. package/dist/lib/chat/board-reply.js +2 -0
  22. package/dist/lib/chat/board-reply.js.map +1 -1
  23. package/dist/lib/chat/chat-reply.js +2 -0
  24. package/dist/lib/chat/chat-reply.js.map +1 -1
  25. package/dist/lib/chat/doc-reply.js +2 -0
  26. package/dist/lib/chat/doc-reply.js.map +1 -1
  27. package/dist/lib/chat/workflow-author-reply.js +2 -0
  28. package/dist/lib/chat/workflow-author-reply.js.map +1 -1
  29. package/dist/lib/diagnostics.d.ts +2 -0
  30. package/dist/lib/diagnostics.js +9 -6
  31. package/dist/lib/diagnostics.js.map +1 -1
  32. package/dist/lib/harness/harness-adapter.d.ts +15 -8
  33. package/dist/lib/harness/harness-adapter.js +33 -7
  34. package/dist/lib/harness/harness-adapter.js.map +1 -1
  35. package/dist/lib/harness/relay-key.d.ts +23 -0
  36. package/dist/lib/harness/relay-key.js +36 -0
  37. package/dist/lib/harness/relay-key.js.map +1 -0
  38. package/dist/lib/harness/spawn.d.ts +23 -5
  39. package/dist/lib/harness/spawn.js +153 -22
  40. package/dist/lib/harness/spawn.js.map +1 -1
  41. package/dist/lib/scope-guard.d.ts +54 -0
  42. package/dist/lib/scope-guard.js +246 -0
  43. package/dist/lib/scope-guard.js.map +1 -0
  44. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "teamshare-bridge",
3
- "version": "0.26.15",
3
+ "version": "0.26.17",
4
4
  "description": "Local bridge for TeamShare agents - CLI session runner, auto-wake WebSocket daemon, and teamshare:// protocol handler.",
5
5
  "type": "commonjs",
6
6
  "license": "MIT",