@getmarrow/mcp 3.9.102 → 3.9.103
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 +49 -23
- package/dist/cli.js +41 -10
- package/dist/cli.js.map +1 -1
- package/dist/codex-plugin-pins.d.ts +19 -0
- package/dist/codex-plugin-pins.d.ts.map +1 -0
- package/dist/codex-plugin-pins.js +43 -0
- package/dist/codex-plugin-pins.js.map +1 -0
- package/dist/codex-plugins.d.ts +34 -0
- package/dist/codex-plugins.d.ts.map +1 -0
- package/dist/codex-plugins.js +240 -0
- package/dist/codex-plugins.js.map +1 -0
- package/dist/hook-contract.d.ts +2 -2
- package/dist/hook-contract.d.ts.map +1 -1
- package/dist/hook-contract.js +8 -3
- package/dist/hook-contract.js.map +1 -1
- package/dist/hook-pre-action.d.ts +48 -2
- package/dist/hook-pre-action.d.ts.map +1 -1
- package/dist/hook-pre-action.js +195 -22
- package/dist/hook-pre-action.js.map +1 -1
- package/dist/hook.d.ts +1 -1
- package/dist/hook.d.ts.map +1 -1
- package/dist/hook.js +12 -6
- package/dist/hook.js.map +1 -1
- package/dist/host-session.d.ts +11 -0
- package/dist/host-session.d.ts.map +1 -1
- package/dist/host-session.js +49 -0
- package/dist/host-session.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -10
- package/dist/index.js.map +1 -1
- package/dist/normalized-action.d.ts +29 -6
- package/dist/normalized-action.d.ts.map +1 -1
- package/dist/normalized-action.js +492 -102
- package/dist/normalized-action.js.map +1 -1
- package/dist/own-server-identity.d.ts +123 -0
- package/dist/own-server-identity.d.ts.map +1 -0
- package/dist/own-server-identity.js +1052 -0
- package/dist/own-server-identity.js.map +1 -0
- package/dist/own-tool.d.ts +7 -3
- package/dist/own-tool.d.ts.map +1 -1
- package/dist/own-tool.js +7 -3
- package/dist/own-tool.js.map +1 -1
- package/dist/redact.d.ts +23 -0
- package/dist/redact.d.ts.map +1 -1
- package/dist/redact.js +181 -8
- package/dist/redact.js.map +1 -1
- package/dist/seatbelt/classifier-pin.d.ts +15 -0
- package/dist/seatbelt/classifier-pin.d.ts.map +1 -0
- package/dist/seatbelt/classifier-pin.js +26 -0
- package/dist/seatbelt/classifier-pin.js.map +1 -0
- package/dist/seatbelt/guards.d.ts +10 -0
- package/dist/seatbelt/guards.d.ts.map +1 -0
- package/dist/seatbelt/guards.js +509 -0
- package/dist/seatbelt/guards.js.map +1 -0
- package/dist/seatbelt/hook.d.ts +72 -0
- package/dist/seatbelt/hook.d.ts.map +1 -0
- package/dist/seatbelt/hook.js +362 -0
- package/dist/seatbelt/hook.js.map +1 -0
- package/dist/seatbelt/longopts.d.ts +68 -0
- package/dist/seatbelt/longopts.d.ts.map +1 -0
- package/dist/seatbelt/longopts.js +377 -0
- package/dist/seatbelt/longopts.js.map +1 -0
- package/dist/seatbelt/mapper.d.ts +83 -0
- package/dist/seatbelt/mapper.d.ts.map +1 -0
- package/dist/seatbelt/mapper.js +10248 -0
- package/dist/seatbelt/mapper.js.map +1 -0
- package/dist/seatbelt/record.d.ts +94 -0
- package/dist/seatbelt/record.d.ts.map +1 -0
- package/dist/seatbelt/record.js +776 -0
- package/dist/seatbelt/record.js.map +1 -0
- package/dist/seatbelt/tables.d.ts +82 -0
- package/dist/seatbelt/tables.d.ts.map +1 -0
- package/dist/seatbelt/tables.js +359 -0
- package/dist/seatbelt/tables.js.map +1 -0
- package/dist/seatbelt-deploy.d.ts +100 -0
- package/dist/seatbelt-deploy.d.ts.map +1 -0
- package/dist/seatbelt-deploy.js +393 -0
- package/dist/seatbelt-deploy.js.map +1 -0
- package/dist/seatbelt-fs.d.ts +30 -0
- package/dist/seatbelt-fs.d.ts.map +1 -0
- package/dist/seatbelt-fs.js +94 -0
- package/dist/seatbelt-fs.js.map +1 -0
- package/dist/seatbelt-git.d.ts +212 -0
- package/dist/seatbelt-git.d.ts.map +1 -0
- package/dist/seatbelt-git.js +844 -0
- package/dist/seatbelt-git.js.map +1 -0
- package/dist/seatbelt-mode.d.ts +77 -0
- package/dist/seatbelt-mode.d.ts.map +1 -0
- package/dist/seatbelt-mode.js +496 -0
- package/dist/seatbelt-mode.js.map +1 -0
- package/dist/seatbelt-path.d.ts +123 -0
- package/dist/seatbelt-path.d.ts.map +1 -0
- package/dist/seatbelt-path.js +482 -0
- package/dist/seatbelt-path.js.map +1 -0
- package/dist/seatbelt-scripts.d.ts +109 -0
- package/dist/seatbelt-scripts.d.ts.map +1 -0
- package/dist/seatbelt-scripts.js +1060 -0
- package/dist/seatbelt-scripts.js.map +1 -0
- package/dist/tool-catalog.js +2 -2
- package/dist/tool-catalog.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/server.json +3 -3
- package/vendor/classifier/MANIFEST.json +25 -0
- package/vendor/classifier/classifier.js +1356 -0
- package/vendor/classifier/policy-baseline.js +187 -0
- package/vendor/classifier/redact.js +59 -0
- package/vendor/classifier/shell-parse.js +455 -0
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Assignment guards (audit N2). The vendored parser flattens `if/else`, `case`, `&&`/`||`, loops,
|
|
3
|
+
// groups and pipelines into one list of simple commands, so the mapper cannot tell an assignment that
|
|
4
|
+
// always runs from one that runs on some branches. This module reads the raw text once, in a single
|
|
5
|
+
// linear pass, and reports for every variable assignment in text order whether it is unconditional.
|
|
6
|
+
//
|
|
7
|
+
// It only has to be sound in one direction: an assignment is reported unconditional only when it is at
|
|
8
|
+
// the top level, not after `&&`/`||`, not in a pipeline, not backgrounded, and not inside any
|
|
9
|
+
// compound, group or subshell. Anything it is unsure of (unbalanced quotes or brackets, a keyword
|
|
10
|
+
// that does not close) comes out conditional, or the whole scan returns null and the caller treats
|
|
11
|
+
// every assignment as conditional.
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.scanAssignments = scanAssignments;
|
|
14
|
+
const ASSIGN = /^[A-Za-z_][A-Za-z0-9_]*(?:\[[^\]]*\])?\+?=/;
|
|
15
|
+
const DECLARE_WORDS = new Set(['export', 'declare', 'typeset', 'local', 'readonly']);
|
|
16
|
+
const MAX_EVENTS = 4096;
|
|
17
|
+
function scanAssignments(src) {
|
|
18
|
+
const events = [];
|
|
19
|
+
const stack = [];
|
|
20
|
+
const n = src.length;
|
|
21
|
+
let i = 0;
|
|
22
|
+
let andor = false;
|
|
23
|
+
let inPipe = false;
|
|
24
|
+
let broken = false;
|
|
25
|
+
let cmdStart = true;
|
|
26
|
+
let declareArgs = false;
|
|
27
|
+
let afterRedir = false;
|
|
28
|
+
// The last token was `&&`, `||`, `|` or `|&`: a newline does not end the list.
|
|
29
|
+
let continued = false;
|
|
30
|
+
let pending = []; // events of the simple command being read
|
|
31
|
+
const heredocs = [];
|
|
32
|
+
const finish = (nonPersistent) => {
|
|
33
|
+
if (nonPersistent)
|
|
34
|
+
for (const k of pending)
|
|
35
|
+
events[k].uncond = false;
|
|
36
|
+
pending = [];
|
|
37
|
+
declareArgs = false;
|
|
38
|
+
afterRedir = false;
|
|
39
|
+
};
|
|
40
|
+
const record = (name, declare) => {
|
|
41
|
+
if (events.length >= MAX_EVENTS) {
|
|
42
|
+
broken = true;
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const loop = stack.some((f) => f.kind === 'loop');
|
|
46
|
+
const uncond = stack.length === 0 && !andor && !inPipe && !broken;
|
|
47
|
+
const k = events.length;
|
|
48
|
+
events.push({ name, uncond, exhaustive: false, inLoop: loop, declare });
|
|
49
|
+
pending.push(k);
|
|
50
|
+
// Branch bookkeeping for exhaustiveness: only a direct, plain assignment inside an if-branch.
|
|
51
|
+
const top = stack[stack.length - 1];
|
|
52
|
+
if (top && top.kind === 'if' && !andor && !inPipe) {
|
|
53
|
+
top.branches[top.branches.length - 1].add(name);
|
|
54
|
+
top.events.push(k);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const popTo = (kind) => {
|
|
58
|
+
// Close the innermost frame of this kind; frames above it are unbalanced (a stray keyword).
|
|
59
|
+
for (let s = stack.length - 1; s >= 0; s -= 1) {
|
|
60
|
+
if (stack[s].kind !== kind)
|
|
61
|
+
continue;
|
|
62
|
+
while (stack.length - 1 > s) {
|
|
63
|
+
stack.pop();
|
|
64
|
+
broken = true;
|
|
65
|
+
}
|
|
66
|
+
return stack.pop();
|
|
67
|
+
}
|
|
68
|
+
broken = true;
|
|
69
|
+
return null;
|
|
70
|
+
};
|
|
71
|
+
// Skip a balanced region opened just before `from` (inclusive of nested quotes). Returns the index
|
|
72
|
+
// after the closer, or -1 when it does not close.
|
|
73
|
+
const skipBalanced = (from, open, close) => {
|
|
74
|
+
let depth = 1;
|
|
75
|
+
let p = from;
|
|
76
|
+
while (p < n) {
|
|
77
|
+
const c = src[p];
|
|
78
|
+
if (c === '\\') {
|
|
79
|
+
p += 2;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (c === "'") {
|
|
83
|
+
const e = src.indexOf("'", p + 1);
|
|
84
|
+
if (e < 0)
|
|
85
|
+
return -1;
|
|
86
|
+
p = e + 1;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (c === '"') {
|
|
90
|
+
p += 1;
|
|
91
|
+
while (p < n && src[p] !== '"')
|
|
92
|
+
p += src[p] === '\\' ? 2 : 1;
|
|
93
|
+
if (p >= n)
|
|
94
|
+
return -1;
|
|
95
|
+
p += 1;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (c === '`') {
|
|
99
|
+
const e = src.indexOf('`', p + 1);
|
|
100
|
+
if (e < 0)
|
|
101
|
+
return -1;
|
|
102
|
+
p = e + 1;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (c === open)
|
|
106
|
+
depth += 1;
|
|
107
|
+
else if (c === close) {
|
|
108
|
+
depth -= 1;
|
|
109
|
+
if (depth === 0)
|
|
110
|
+
return p + 1;
|
|
111
|
+
}
|
|
112
|
+
p += 1;
|
|
113
|
+
}
|
|
114
|
+
return -1;
|
|
115
|
+
};
|
|
116
|
+
while (i < n) {
|
|
117
|
+
const ch = src[i];
|
|
118
|
+
if (ch === ' ' || ch === '\t' || ch === '\r') {
|
|
119
|
+
i += 1;
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (ch === '\\' && src[i + 1] === '\n') {
|
|
123
|
+
i += 2;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (ch === '\n') {
|
|
127
|
+
finish(false);
|
|
128
|
+
// A newline right after `&&`, `||`, `|` or `|&` continues the list: the state is kept.
|
|
129
|
+
if (!continued) {
|
|
130
|
+
andor = false;
|
|
131
|
+
inPipe = false;
|
|
132
|
+
}
|
|
133
|
+
cmdStart = true;
|
|
134
|
+
i += 1;
|
|
135
|
+
// Heredoc bodies start on the next line and end at a line holding only the delimiter.
|
|
136
|
+
while (heredocs.length) {
|
|
137
|
+
const h = heredocs.shift();
|
|
138
|
+
let found = false;
|
|
139
|
+
while (i <= n) {
|
|
140
|
+
let end = src.indexOf('\n', i);
|
|
141
|
+
if (end < 0)
|
|
142
|
+
end = n;
|
|
143
|
+
let line = src.slice(i, end);
|
|
144
|
+
if (h.strip)
|
|
145
|
+
line = line.replace(/^\t+/, '');
|
|
146
|
+
i = end + 1;
|
|
147
|
+
if (line === h.delim) {
|
|
148
|
+
found = true;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
if (end >= n)
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
if (!found)
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (ch === '#') {
|
|
160
|
+
const e = src.indexOf('\n', i);
|
|
161
|
+
i = e < 0 ? n : e;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
// Operators.
|
|
165
|
+
if (ch === ';') {
|
|
166
|
+
const m = /^(?:;;&|;;|;&|;)/.exec(src.slice(i, i + 3));
|
|
167
|
+
continued = false;
|
|
168
|
+
finish(false);
|
|
169
|
+
andor = false;
|
|
170
|
+
inPipe = false;
|
|
171
|
+
cmdStart = true;
|
|
172
|
+
i += m[0].length;
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (ch === '&') {
|
|
176
|
+
if (src[i + 1] === '&') {
|
|
177
|
+
finish(false);
|
|
178
|
+
andor = true;
|
|
179
|
+
inPipe = false;
|
|
180
|
+
cmdStart = true;
|
|
181
|
+
continued = true;
|
|
182
|
+
i += 2;
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (src[i + 1] === '>') {
|
|
186
|
+
// `&>` / `&>>` redirect.
|
|
187
|
+
i += src[i + 2] === '>' ? 3 : 2;
|
|
188
|
+
afterRedir = true;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// Background: the assignment runs in a subshell.
|
|
192
|
+
continued = false;
|
|
193
|
+
finish(true);
|
|
194
|
+
andor = false;
|
|
195
|
+
inPipe = false;
|
|
196
|
+
cmdStart = true;
|
|
197
|
+
i += 1;
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
if (ch === '|') {
|
|
201
|
+
if (src[i + 1] === '|') {
|
|
202
|
+
finish(false);
|
|
203
|
+
andor = true;
|
|
204
|
+
inPipe = false;
|
|
205
|
+
cmdStart = true;
|
|
206
|
+
continued = true;
|
|
207
|
+
i += 2;
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
// A pipeline stage runs in a subshell: its assignments do not persist, and neither do the next stage's.
|
|
211
|
+
finish(true);
|
|
212
|
+
inPipe = true;
|
|
213
|
+
cmdStart = true;
|
|
214
|
+
continued = true;
|
|
215
|
+
i += src[i + 1] === '&' ? 2 : 1;
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (ch === '(') {
|
|
219
|
+
stack.push({ kind: 'paren', branches: [], hasElse: false, events: [] });
|
|
220
|
+
finish(false);
|
|
221
|
+
cmdStart = true;
|
|
222
|
+
i += 1;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (ch === ')') {
|
|
226
|
+
finish(false);
|
|
227
|
+
const top = stack[stack.length - 1];
|
|
228
|
+
if (top && top.kind === 'paren')
|
|
229
|
+
stack.pop();
|
|
230
|
+
else if (top && top.kind === 'case') { /* end of a case pattern */ }
|
|
231
|
+
else
|
|
232
|
+
broken = true;
|
|
233
|
+
cmdStart = true;
|
|
234
|
+
i += 1;
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
if (ch === '<' || ch === '>') {
|
|
238
|
+
// Process substitution is a word part; everything else is a redirect operator.
|
|
239
|
+
if (src[i + 1] === '(') {
|
|
240
|
+
const e = skipBalanced(i + 2, '(', ')');
|
|
241
|
+
if (e < 0)
|
|
242
|
+
return null;
|
|
243
|
+
i = e;
|
|
244
|
+
if (!afterRedir)
|
|
245
|
+
cmdStart = false;
|
|
246
|
+
afterRedir = false;
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
const m = /^(?:<<<|<<-|<<|<>|<&|>>|>\||>&|<|>)/.exec(src.slice(i, i + 3));
|
|
250
|
+
const op = m[0];
|
|
251
|
+
i += op.length;
|
|
252
|
+
if (op === '<<' || op === '<<-') {
|
|
253
|
+
while (src[i] === ' ' || src[i] === '\t')
|
|
254
|
+
i += 1;
|
|
255
|
+
let delim = '';
|
|
256
|
+
let q = false;
|
|
257
|
+
while (i < n && !/[\s;&|<>()]/.test(src[i])) {
|
|
258
|
+
if (src[i] === "'" || src[i] === '"') {
|
|
259
|
+
const e = src.indexOf(src[i], i + 1);
|
|
260
|
+
if (e < 0)
|
|
261
|
+
return null;
|
|
262
|
+
delim += src.slice(i + 1, e);
|
|
263
|
+
q = true;
|
|
264
|
+
i = e + 1;
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
if (src[i] === '\\') {
|
|
268
|
+
delim += src[i + 1] || '';
|
|
269
|
+
q = true;
|
|
270
|
+
i += 2;
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
delim += src[i];
|
|
274
|
+
i += 1;
|
|
275
|
+
}
|
|
276
|
+
void q;
|
|
277
|
+
if (src[i - 1] === undefined)
|
|
278
|
+
return null;
|
|
279
|
+
heredocs.push({ delim, strip: op === '<<-' });
|
|
280
|
+
}
|
|
281
|
+
else
|
|
282
|
+
afterRedir = true;
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
// A word.
|
|
286
|
+
continued = false;
|
|
287
|
+
let raw = '';
|
|
288
|
+
let quoted = false;
|
|
289
|
+
const start = i;
|
|
290
|
+
for (;;) {
|
|
291
|
+
if (i >= n)
|
|
292
|
+
break;
|
|
293
|
+
const c = src[i];
|
|
294
|
+
if (c === ' ' || c === '\t' || c === '\r' || c === '\n' || c === ';' || c === '&' || c === '|' || c === '(' || c === ')' || c === '<' || c === '>')
|
|
295
|
+
break;
|
|
296
|
+
if (c === '\\') {
|
|
297
|
+
if (src[i + 1] === '\n') {
|
|
298
|
+
i += 2;
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
quoted = true;
|
|
302
|
+
raw += src.slice(i, i + 2);
|
|
303
|
+
i += 2;
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
if (c === "'") {
|
|
307
|
+
const e = src.indexOf("'", i + 1);
|
|
308
|
+
if (e < 0)
|
|
309
|
+
return null;
|
|
310
|
+
raw += src.slice(i, e + 1);
|
|
311
|
+
quoted = true;
|
|
312
|
+
i = e + 1;
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
if (c === '"') {
|
|
316
|
+
let p = i + 1;
|
|
317
|
+
while (p < n && src[p] !== '"') {
|
|
318
|
+
if (src[p] === '\\') {
|
|
319
|
+
p += 2;
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
if (src[p] === '$' && src[p + 1] === '(') {
|
|
323
|
+
const e = skipBalanced(p + 2, '(', ')');
|
|
324
|
+
if (e < 0)
|
|
325
|
+
return null;
|
|
326
|
+
p = e;
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
if (src[p] === '`') {
|
|
330
|
+
const e = src.indexOf('`', p + 1);
|
|
331
|
+
if (e < 0)
|
|
332
|
+
return null;
|
|
333
|
+
p = e + 1;
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
p += 1;
|
|
337
|
+
}
|
|
338
|
+
if (p >= n)
|
|
339
|
+
return null;
|
|
340
|
+
raw += src.slice(i, p + 1);
|
|
341
|
+
quoted = true;
|
|
342
|
+
i = p + 1;
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
if (c === '$' && src[i + 1] === "'") {
|
|
346
|
+
let p = i + 2;
|
|
347
|
+
while (p < n && src[p] !== "'")
|
|
348
|
+
p += src[p] === '\\' ? 2 : 1;
|
|
349
|
+
if (p >= n)
|
|
350
|
+
return null;
|
|
351
|
+
raw += src.slice(i, p + 1);
|
|
352
|
+
quoted = true;
|
|
353
|
+
i = p + 1;
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
if (c === '$' && src[i + 1] === '(') {
|
|
357
|
+
const e = skipBalanced(i + 2, '(', ')');
|
|
358
|
+
if (e < 0)
|
|
359
|
+
return null;
|
|
360
|
+
raw += src.slice(i, e);
|
|
361
|
+
i = e;
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
if (c === '$' && src[i + 1] === '{') {
|
|
365
|
+
const e = skipBalanced(i + 2, '{', '}');
|
|
366
|
+
if (e < 0)
|
|
367
|
+
return null;
|
|
368
|
+
raw += src.slice(i, e);
|
|
369
|
+
i = e;
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
if (c === '`') {
|
|
373
|
+
const e = src.indexOf('`', i + 1);
|
|
374
|
+
if (e < 0)
|
|
375
|
+
return null;
|
|
376
|
+
raw += src.slice(i, e + 1);
|
|
377
|
+
i = e + 1;
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
raw += c;
|
|
381
|
+
i += 1;
|
|
382
|
+
}
|
|
383
|
+
if (i === start) {
|
|
384
|
+
i += 1;
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
// `NAME=(a b c)`: an array literal; `$NAME` is its first element (audit N2).
|
|
388
|
+
let arrayElements;
|
|
389
|
+
if (src[i] === '(' && /^[A-Za-z_][A-Za-z0-9_]*\+?=$/.test(raw) && cmdStart && !afterRedir) {
|
|
390
|
+
const e = skipBalanced(i + 1, '(', ')');
|
|
391
|
+
if (e < 0)
|
|
392
|
+
return null;
|
|
393
|
+
const inner = src.slice(i + 1, e - 1);
|
|
394
|
+
const els = (inner.match(/'[^']*'|"(?:\\.|[^"\\])*"|[^\s]+/g) || []).map((el) => (/[$`]/.test(el) ? null : el.replace(/^(['"])([\s\S]*)\1$/, '$2')));
|
|
395
|
+
arrayElements = els.some((el) => el === null) ? null : els;
|
|
396
|
+
i = e;
|
|
397
|
+
}
|
|
398
|
+
if (afterRedir) {
|
|
399
|
+
afterRedir = false;
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
// `2>file`, `3<&0`: a file descriptor number in front of a redirect is not a word.
|
|
403
|
+
if (/^[0-9]+$/.test(raw) && (src[i] === '<' || src[i] === '>'))
|
|
404
|
+
continue;
|
|
405
|
+
if (!cmdStart) {
|
|
406
|
+
if (declareArgs && ASSIGN.test(raw)) {
|
|
407
|
+
const eq = raw.indexOf('=');
|
|
408
|
+
record(raw.slice(0, eq).replace(/\+$/, '').replace(/\[.*$/, ''), true);
|
|
409
|
+
}
|
|
410
|
+
continue;
|
|
411
|
+
}
|
|
412
|
+
// Command position.
|
|
413
|
+
if (ASSIGN.test(raw)) {
|
|
414
|
+
const eq = raw.indexOf('=');
|
|
415
|
+
record(raw.slice(0, eq).replace(/\+$/, '').replace(/\[.*$/, ''), false);
|
|
416
|
+
if (arrayElements !== undefined)
|
|
417
|
+
events[events.length - 1].array = arrayElements;
|
|
418
|
+
continue;
|
|
419
|
+
}
|
|
420
|
+
if (!quoted) {
|
|
421
|
+
switch (raw) {
|
|
422
|
+
case 'if':
|
|
423
|
+
stack.push({ kind: 'if', branches: [new Set()], hasElse: false, events: [] });
|
|
424
|
+
continue;
|
|
425
|
+
case 'then': continue;
|
|
426
|
+
case 'elif': {
|
|
427
|
+
const top = stack[stack.length - 1];
|
|
428
|
+
if (top && top.kind === 'if')
|
|
429
|
+
top.branches.push(new Set());
|
|
430
|
+
else
|
|
431
|
+
broken = true;
|
|
432
|
+
continue;
|
|
433
|
+
}
|
|
434
|
+
case 'else': {
|
|
435
|
+
const top = stack[stack.length - 1];
|
|
436
|
+
if (top && top.kind === 'if') {
|
|
437
|
+
top.hasElse = true;
|
|
438
|
+
top.branches.push(new Set());
|
|
439
|
+
}
|
|
440
|
+
else
|
|
441
|
+
broken = true;
|
|
442
|
+
continue;
|
|
443
|
+
}
|
|
444
|
+
case 'fi': {
|
|
445
|
+
const f = popTo('if');
|
|
446
|
+
cmdStart = false;
|
|
447
|
+
if (f) {
|
|
448
|
+
if (f.hasElse) {
|
|
449
|
+
// A name assigned in every branch is never left unset by this chain.
|
|
450
|
+
const all = f.branches.length ? [...f.branches[0]].filter((nm) => f.branches.every((b) => b.has(nm))) : [];
|
|
451
|
+
for (const k of f.events)
|
|
452
|
+
if (all.includes(events[k].name))
|
|
453
|
+
events[k].exhaustive = true;
|
|
454
|
+
const parent = stack[stack.length - 1];
|
|
455
|
+
if (parent && parent.kind === 'if') {
|
|
456
|
+
for (const nm of all)
|
|
457
|
+
parent.branches[parent.branches.length - 1].add(nm);
|
|
458
|
+
parent.events.push(...f.events);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
case 'while':
|
|
465
|
+
case 'until':
|
|
466
|
+
stack.push({ kind: 'loop', branches: [], hasElse: false, events: [] });
|
|
467
|
+
continue;
|
|
468
|
+
case 'for':
|
|
469
|
+
case 'select':
|
|
470
|
+
stack.push({ kind: 'loop', branches: [], hasElse: false, events: [] });
|
|
471
|
+
cmdStart = false; // the header words are not commands; `do` after `;` or a newline is
|
|
472
|
+
continue;
|
|
473
|
+
case 'do': continue;
|
|
474
|
+
case 'done':
|
|
475
|
+
popTo('loop');
|
|
476
|
+
cmdStart = false;
|
|
477
|
+
continue;
|
|
478
|
+
case 'case':
|
|
479
|
+
stack.push({ kind: 'case', branches: [], hasElse: false, events: [] });
|
|
480
|
+
cmdStart = false;
|
|
481
|
+
continue;
|
|
482
|
+
case 'esac':
|
|
483
|
+
popTo('case');
|
|
484
|
+
cmdStart = false;
|
|
485
|
+
continue;
|
|
486
|
+
case '{':
|
|
487
|
+
stack.push({ kind: 'brace', branches: [], hasElse: false, events: [] });
|
|
488
|
+
continue;
|
|
489
|
+
case '}':
|
|
490
|
+
popTo('brace');
|
|
491
|
+
cmdStart = false;
|
|
492
|
+
continue;
|
|
493
|
+
case '!':
|
|
494
|
+
case 'time': continue;
|
|
495
|
+
case 'function':
|
|
496
|
+
cmdStart = false;
|
|
497
|
+
continue;
|
|
498
|
+
default: break;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
// An ordinary command word.
|
|
502
|
+
cmdStart = false;
|
|
503
|
+
if (!quoted && DECLARE_WORDS.has(raw))
|
|
504
|
+
declareArgs = true;
|
|
505
|
+
}
|
|
506
|
+
finish(false);
|
|
507
|
+
return events;
|
|
508
|
+
}
|
|
509
|
+
//# sourceMappingURL=guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/seatbelt/guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { SeatbeltDecision, SeatbeltFs as MapperFs, SeatbeltGit } from './mapper';
|
|
2
|
+
import type { SeatbeltFs } from '../seatbelt-fs';
|
|
3
|
+
/**
|
|
4
|
+
* Compiled-in rollout table. Not env, not a file: changing a value is a one-line, reviewed code
|
|
5
|
+
* change. `keyless: 'off'` makes every keyless machine `claimed_no_key` (3.9.103 holds plus the
|
|
6
|
+
* floor). `account_floor: 'on'` enforces the S0-S5 floor before the server flow.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SEATBELT_ROLLOUT: {
|
|
9
|
+
readonly keyless: 'on' | 'off';
|
|
10
|
+
readonly account_floor: 'watch' | 'on';
|
|
11
|
+
};
|
|
12
|
+
/** One wall-clock budget for the whole seatbelt path (mode resolution and mapper). Over it: stop. */
|
|
13
|
+
export declare const HOOK_BUDGET_MS = 300;
|
|
14
|
+
export declare const CLAIMED_NO_KEY_TEXT = "Marrow is linked to an account but has no working key; owner: run `npx -y @getmarrow/install@latest doctor`.";
|
|
15
|
+
/**
|
|
16
|
+
* `claimed_no_key` with no account evidence and no rejected key: a fallback because the machine's
|
|
17
|
+
* setup could not be confirmed (an evidence dir others can write, an unreadable probe, a home
|
|
18
|
+
* mismatch, strict mode). Same holds as CLAIMED_NO_KEY_TEXT, but it never claims an account exists.
|
|
19
|
+
*/
|
|
20
|
+
export declare const SETUP_UNCONFIRMED_TEXT = "Marrow has no working key on this machine and its keyless mode is off here (strict mode, or a home folder it cannot trust); owner: run `npx -y @getmarrow/install@latest doctor`.";
|
|
21
|
+
export declare function seatbeltStopText(category: string, rule: string, reason: string, mode: 'seatbelt' | 'claimed_no_key' | 'account', accountLinked?: boolean): string;
|
|
22
|
+
/** §4.2: an S0-S5 floor stop is lifted only by an enforced server allow (a verified permit); an advisory allow never lifts it. */
|
|
23
|
+
export declare function accountFloorStops(rollout: 'watch' | 'on', floor: Pick<SeatbeltDecision, 'decision'> | null, server: 'enforced_allow' | 'advisory_allow' | 'deny' | 'none'): boolean;
|
|
24
|
+
/** The mapper's file view over the host. Missing: null. A failure the mapper must not guess about throws (it stops on fs_error). */
|
|
25
|
+
export declare function hostMapperFs(fs3: SeatbeltFs): MapperFs;
|
|
26
|
+
/**
|
|
27
|
+
* The git view the mapper gets (r4 contract). `currentBranch` is read at every call, never cached;
|
|
28
|
+
* anything unclear is null. `getAll` throws when the config cannot be read in full.
|
|
29
|
+
*/
|
|
30
|
+
export declare function hostSeatbeltGit(fs3: SeatbeltFs, home: string, env: NodeJS.ProcessEnv): SeatbeltGit;
|
|
31
|
+
export interface SeatbeltHookEvent {
|
|
32
|
+
tool_name: unknown;
|
|
33
|
+
tool_input: unknown;
|
|
34
|
+
/** The event's cwd as the harness sent it; anything but an absolute path means the workspace is unknown. */
|
|
35
|
+
cwd: unknown;
|
|
36
|
+
/** The harness adapter cut the input: the action is not known in full. */
|
|
37
|
+
truncated: boolean;
|
|
38
|
+
/** The harness session id; used only for the receipt's keyed session_key. */
|
|
39
|
+
session?: unknown;
|
|
40
|
+
}
|
|
41
|
+
export interface KeylessOutcome {
|
|
42
|
+
mode: 'seatbelt' | 'claimed_no_key';
|
|
43
|
+
/** The agent text of a stop; null when the seatbelt passes the action. */
|
|
44
|
+
stopText: string | null;
|
|
45
|
+
/** True only with account evidence or a rejected key: then the text may say the machine is linked to an account. */
|
|
46
|
+
accountLinked: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* The mapper recognised the tool (audit H1). False: the seatbelt passed nothing it can vouch for, so
|
|
49
|
+
* the hook gives master's answer for that host instead of the seatbelt pass.
|
|
50
|
+
*/
|
|
51
|
+
recognized: boolean;
|
|
52
|
+
}
|
|
53
|
+
/** The keyless branch of the hook: mode (U4), then the mapper (U2) with the U3 resolvers. Never throws. */
|
|
54
|
+
export declare function keylessSeatbelt(harness: string, event: SeatbeltHookEvent): KeylessOutcome;
|
|
55
|
+
/**
|
|
56
|
+
* The account floor. `watch`: computed after the answer, for the record only; it never throws and
|
|
57
|
+
* never writes output. `on` (not active): run before the server flow; a returned text is a stop.
|
|
58
|
+
*/
|
|
59
|
+
export declare function accountFloor(harness: string, event: SeatbeltHookEvent, deadlineAt: number): string | null;
|
|
60
|
+
/**
|
|
61
|
+
* I3: how the mapper reads an action for the outage hold (Marrow unreachable). `high`: an S0-S5/S-x hit
|
|
62
|
+
* or a program on the outage list (git push, publish, deploy, remote delete), a dynamic subcommand of a
|
|
63
|
+
* listed program included. `not_high`: the mapper read all of it and found neither. `unknown`: it could
|
|
64
|
+
* not (budget, error, unparsed or dynamic text, truncated input, a tool it does not recognise); the hook
|
|
65
|
+
* then keeps the client classifier's answer. `shell`: the event ran a shell command. Never throws;
|
|
66
|
+
* writes no receipt or output.
|
|
67
|
+
*/
|
|
68
|
+
export declare function outageRisk(event: SeatbeltHookEvent, deadlineAt: number): {
|
|
69
|
+
shell: boolean;
|
|
70
|
+
risk: 'high' | 'not_high' | 'unknown';
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/seatbelt/hook.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAe,UAAU,IAAI,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACnG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,KAAK,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI,CAAA;CAGrG,CAAC;AAEH,qGAAqG;AACrG,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,mBAAmB,iHAAiH,CAAC;AAClJ;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,sLAAsL,CAAC;AAmB1N,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS,EAAE,aAAa,UAAO,GAAG,MAAM,CAO9J;AAED,kIAAkI;AAClI,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,IAAI,EAChD,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAC5D,OAAO,CAGT;AAuBD,oIAAoI;AACpI,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,QAAQ,CA+BtD;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,WAAW,CA6ElG;AAcD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,4GAA4G;IAC5G,GAAG,EAAE,OAAO,CAAC;IACb,0EAA0E;IAC1E,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA6BD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAAC;IACpC,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oHAAoH;IACpH,aAAa,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,2GAA2G;AAC3G,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,cAAc,CA8BzF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBzG;AAKD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CAAE,CAmBlI"}
|