@getmarrow/mcp 3.9.102 → 3.9.106
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 +71 -24
- package/dist/approval-reply.d.ts +2 -0
- package/dist/approval-reply.d.ts.map +1 -0
- package/dist/approval-reply.js +18 -0
- package/dist/approval-reply.js.map +1 -0
- package/dist/cli.js +1716 -1644
- 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 +61 -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/env.d.ts +8 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +83 -4
- package/dist/env.js.map +1 -1
- package/dist/hook-context.d.ts.map +1 -1
- package/dist/hook-context.js +25 -0
- package/dist/hook-context.js.map +1 -1
- package/dist/hook-contract.d.ts +4 -3
- package/dist/hook-contract.d.ts.map +1 -1
- package/dist/hook-contract.js +43 -5
- package/dist/hook-contract.js.map +1 -1
- package/dist/hook-pre-action.d.ts +80 -3
- package/dist/hook-pre-action.d.ts.map +1 -1
- package/dist/hook-pre-action.js +435 -29
- package/dist/hook-pre-action.js.map +1 -1
- package/dist/hook-tool-policy.d.ts +73 -4
- package/dist/hook-tool-policy.d.ts.map +1 -1
- package/dist/hook-tool-policy.js +287 -18
- package/dist/hook-tool-policy.js.map +1 -1
- package/dist/hook.d.ts +1 -1
- package/dist/hook.d.ts.map +1 -1
- package/dist/hook.js +15 -7
- package/dist/hook.js.map +1 -1
- package/dist/host-approval-state.d.ts +7 -0
- package/dist/host-approval-state.d.ts.map +1 -1
- package/dist/host-approval-state.js +15 -0
- package/dist/host-approval-state.js.map +1 -1
- package/dist/host-approval.d.ts +22 -1
- package/dist/host-approval.d.ts.map +1 -1
- package/dist/host-approval.js +65 -4
- package/dist/host-approval.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 +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -11
- package/dist/index.js.map +1 -1
- package/dist/keyless-server.d.ts +53 -0
- package/dist/keyless-server.d.ts.map +1 -0
- package/dist/keyless-server.js +230 -0
- package/dist/keyless-server.js.map +1 -0
- package/dist/normalized-action.d.ts +31 -6
- package/dist/normalized-action.d.ts.map +1 -1
- package/dist/normalized-action.js +550 -105
- package/dist/normalized-action.js.map +1 -1
- package/dist/own-server-identity.d.ts +142 -0
- package/dist/own-server-identity.d.ts.map +1 -0
- package/dist/own-server-identity.js +1123 -0
- package/dist/own-server-identity.js.map +1 -0
- package/dist/own-tool.d.ts +21 -9
- package/dist/own-tool.d.ts.map +1 -1
- package/dist/own-tool.js +25 -10
- 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/env-dump.d.ts +45 -0
- package/dist/seatbelt/env-dump.d.ts.map +1 -0
- package/dist/seatbelt/env-dump.js +308 -0
- package/dist/seatbelt/env-dump.js.map +1 -0
- package/dist/seatbelt/fallback-copy.d.ts +16 -0
- package/dist/seatbelt/fallback-copy.d.ts.map +1 -0
- package/dist/seatbelt/fallback-copy.js +68 -0
- package/dist/seatbelt/fallback-copy.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 +91 -0
- package/dist/seatbelt/hook.d.ts.map +1 -0
- package/dist/seatbelt/hook.js +396 -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 +10581 -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 +352 -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/secret-paths.d.ts +17 -0
- package/dist/secret-paths.d.ts.map +1 -0
- package/dist/secret-paths.js +32 -0
- package/dist/secret-paths.js.map +1 -0
- package/dist/session-loop-guard.d.ts.map +1 -1
- package/dist/session-loop-guard.js +15 -5
- package/dist/session-loop-guard.js.map +1 -1
- 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 +3 -2
- 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,45 @@
|
|
|
1
|
+
/** S4 reasons that mean "prints the environment". The keyed hook keeps only these from a mapper run. */
|
|
2
|
+
export declare const ENV_DUMP_REASONS: ReadonlySet<string>;
|
|
3
|
+
/**
|
|
4
|
+
* Programs that run the command at the end of their argv with a grammar the mapper does not model. A bare `env` or
|
|
5
|
+
* `printenv` as their last word is that command, not a name (`python -m venv env` and `conda activate env` stay fine:
|
|
6
|
+
* those programs are not listed).
|
|
7
|
+
*/
|
|
8
|
+
export declare const EXEC_WRAPPERS: ReadonlySet<string>;
|
|
9
|
+
/** `compgen -e`, `-v`, `-A export` and `-A variable` list the names of the environment's variables. */
|
|
10
|
+
export declare function compgenListsVariables(args: ReadonlyArray<string | null>): boolean;
|
|
11
|
+
/** `tmux [options] show-environment` (also `showenv`, a unique prefix, and a command after `\\;`) prints a session's variables. */
|
|
12
|
+
export declare function tmuxShowsEnvironment(args: ReadonlyArray<string | null>): boolean;
|
|
13
|
+
/** `systemctl [--user] show-environment` prints the manager's environment. */
|
|
14
|
+
export declare function systemctlShowsEnvironment(args: ReadonlyArray<string | null>): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* BSD `ps e`, `ps auxe`, `ps eww` and `ps -E` print every process's environment. A word of letters that holds `e`, or a dash
|
|
17
|
+
* cluster that holds `E`, outside the value of an option (`ps -p 1 -o etime` asks for a column, not the environment).
|
|
18
|
+
*/
|
|
19
|
+
export declare function psPrintsEnvironment(args: ReadonlyArray<string | null>): boolean;
|
|
20
|
+
/** The older, looser reading of `ps`: any word of letters that holds `e`, option values included. The keyless seatbelt keeps stopping it. */
|
|
21
|
+
export declare function psLooselyPrintsEnvironment(args: ReadonlyArray<string | null>): boolean;
|
|
22
|
+
/** The environment object in a jq filter: `env`, `$ENV` (not a `.env` field, a key, or text in a string). */
|
|
23
|
+
export declare function jqFilterReadsEnvironment(filter: string): boolean;
|
|
24
|
+
/** The filter of a jq command line: the first word that is not an option or an option's value. With -f the program is a file: none. */
|
|
25
|
+
export declare function jqFilters(args: ReadonlyArray<string | null>): string[];
|
|
26
|
+
/** `npm run env` (also pnpm, yarn and bun) runs npm's built-in `env` script, which prints the environment. */
|
|
27
|
+
export declare function packageRunsEnvScript(args: ReadonlyArray<string | null>): boolean;
|
|
28
|
+
export { PROC_ENVIRON } from '../secret-paths';
|
|
29
|
+
/** A glob that can name `environ`: `/proc/self/env*`, `/proc/1/*`, `/proc/self/task/1/e[n]viron`. */
|
|
30
|
+
export declare function procGlobMatchesEnviron(path: string): boolean;
|
|
31
|
+
/** `/proc`, `/proc/<pid>` and `/proc/<pid>/task[/<tid>]`: a folder whose recursive read reaches every `environ` under it. */
|
|
32
|
+
export declare const PROC_PROCESS_DIRECTORY: RegExp;
|
|
33
|
+
/** Programs that read or copy every file under a folder named to them. */
|
|
34
|
+
export declare const RECURSIVE_READERS: ReadonlySet<string>;
|
|
35
|
+
/** Variables whose value runs as a command: a pager, editor, askpass or diff helper set to `env` prints the environment. */
|
|
36
|
+
export declare const HELPER_ENV_VARS: ReadonlySet<string>;
|
|
37
|
+
/** A command word that is the environment printer, alone or followed by arguments. */
|
|
38
|
+
export declare const ENV_PRINTER_COMMAND: RegExp;
|
|
39
|
+
/** `man -P env`, `man --pager=printenv`: the pager is the command. */
|
|
40
|
+
export declare function manPagerPrintsEnvironment(args: ReadonlyArray<string | null>): boolean;
|
|
41
|
+
/** strace shows the whole environment of an exec it traces unless its strings are abbreviated: `-v`, `--no-abbrev`, `-e abbrev=none`, `-e verbose=...`. */
|
|
42
|
+
export declare function straceShowsEnvironment(args: ReadonlyArray<string | null>): boolean;
|
|
43
|
+
/** `tmux send-keys env Enter`, `tmux new -d printenv`, `tmux run-shell env`: a command window or pane runs the environment printer. */
|
|
44
|
+
export declare function tmuxRunsEnvironmentPrinter(args: ReadonlyArray<string | null>): boolean;
|
|
45
|
+
//# sourceMappingURL=env-dump.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-dump.d.ts","sourceRoot":"","sources":["../../src/seatbelt/env-dump.ts"],"names":[],"mappings":"AAKA,wGAAwG;AACxG,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAI/C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,CAI5C,CAAC;AAIH,uGAAuG;AACvG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAWjF;AAOD,mIAAmI;AACnI,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAYhF;AAED,8EAA8E;AAC9E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAErF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAqB/E;AAED,6IAA6I;AAC7I,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAEtF;AAED,6GAA6G;AAC7G,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED,uIAAuI;AACvI,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,EAAE,CAWtE;AAID,8GAA8G;AAC9G,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAUhF;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,qGAAqG;AACrG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiB5D;AAED,6HAA6H;AAC7H,eAAO,MAAM,sBAAsB,QAAmD,CAAC;AAEvF,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAgH,CAAC;AAEnK,4HAA4H;AAC5H,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAC4E,CAAC;AAE7H,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,QAA2C,CAAC;AAE5E,sEAAsE;AACtE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CASrF;AAED,2JAA2J;AAC3J,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAkBlF;AAQD,uIAAuI;AACvI,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAetF"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Env-dump forms: every command an agent can type that prints many or all environment variables.
|
|
3
|
+
// One table for both modes: the keyless seatbelt mapper stops them (S4) and the keyed hook policy
|
|
4
|
+
// holds them (hook-tool-policy.ts asks the mapper and keeps only the reasons named here). Pure
|
|
5
|
+
// word-level predicates over literal arguments; no file contents are read.
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ENV_PRINTER_COMMAND = exports.HELPER_ENV_VARS = exports.RECURSIVE_READERS = exports.PROC_PROCESS_DIRECTORY = exports.PROC_ENVIRON = exports.EXEC_WRAPPERS = exports.ENV_DUMP_REASONS = void 0;
|
|
8
|
+
exports.compgenListsVariables = compgenListsVariables;
|
|
9
|
+
exports.tmuxShowsEnvironment = tmuxShowsEnvironment;
|
|
10
|
+
exports.systemctlShowsEnvironment = systemctlShowsEnvironment;
|
|
11
|
+
exports.psPrintsEnvironment = psPrintsEnvironment;
|
|
12
|
+
exports.psLooselyPrintsEnvironment = psLooselyPrintsEnvironment;
|
|
13
|
+
exports.jqFilterReadsEnvironment = jqFilterReadsEnvironment;
|
|
14
|
+
exports.jqFilters = jqFilters;
|
|
15
|
+
exports.packageRunsEnvScript = packageRunsEnvScript;
|
|
16
|
+
exports.procGlobMatchesEnviron = procGlobMatchesEnviron;
|
|
17
|
+
exports.manPagerPrintsEnvironment = manPagerPrintsEnvironment;
|
|
18
|
+
exports.straceShowsEnvironment = straceShowsEnvironment;
|
|
19
|
+
exports.tmuxRunsEnvironmentPrinter = tmuxRunsEnvironmentPrinter;
|
|
20
|
+
/** S4 reasons that mean "prints the environment". The keyed hook keeps only these from a mapper run. */
|
|
21
|
+
exports.ENV_DUMP_REASONS = new Set([
|
|
22
|
+
'env_dump_env', 'env_dump_set', 'env_dump_export', 'env_dump_declare', 'env_dump_declare_secret', 'env_dump_readonly', 'env_dump_printenv',
|
|
23
|
+
'env_dump_printenv_secret', 'interpreter_env_dump', 'ps_environment', 'proc_environ', 'env_dump_compgen', 'env_dump_tmux', 'env_dump_systemctl',
|
|
24
|
+
'env_dump_jq', 'env_dump_strace', 'env_dump_php_info', 'env_dump_npm_run_env', 'tripwire_secret_dumper', 'echo_secret_var',
|
|
25
|
+
]);
|
|
26
|
+
/**
|
|
27
|
+
* Programs that run the command at the end of their argv with a grammar the mapper does not model. A bare `env` or
|
|
28
|
+
* `printenv` as their last word is that command, not a name (`python -m venv env` and `conda activate env` stay fine:
|
|
29
|
+
* those programs are not listed).
|
|
30
|
+
*/
|
|
31
|
+
exports.EXEC_WRAPPERS = new Set([
|
|
32
|
+
'setpriv', 'unshare', 'runuser', 'nsenter', 'chroot', 'fakeroot', 'fakeroot-sysv', 'fakechroot', 'systemd-run', 'firejail', 'bwrap', 'strace', 'ltrace',
|
|
33
|
+
'sg', 'proot', 'torsocks', 'proxychains', 'proxychains4', 'tsocks', 'xvfb-run', 'dbus-run-session', 'cross-env', 'env-cmd', 'dotenv', 'dotenvx', 'direnv',
|
|
34
|
+
'sandbox-exec', 'cgexec', 'sshpass', 'chronic', 'rlwrap',
|
|
35
|
+
]);
|
|
36
|
+
const letters = (text) => /^[a-zA-Z]+$/.test(text);
|
|
37
|
+
/** `compgen -e`, `-v`, `-A export` and `-A variable` list the names of the environment's variables. */
|
|
38
|
+
function compgenListsVariables(args) {
|
|
39
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
40
|
+
const a = args[i];
|
|
41
|
+
if (a === null)
|
|
42
|
+
continue;
|
|
43
|
+
if (a === '--')
|
|
44
|
+
return false;
|
|
45
|
+
if (/^-A./.test(a)) {
|
|
46
|
+
if (/^(?:export|variable)$/.test(a.slice(2)))
|
|
47
|
+
return true;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (a === '-A') {
|
|
51
|
+
const v = args[i + 1];
|
|
52
|
+
if (v === 'export' || v === 'variable')
|
|
53
|
+
return true;
|
|
54
|
+
i += 1;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (/^-[oGWFCXPS]$/.test(a)) {
|
|
58
|
+
i += 1;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (/^-[a-zA-Z]+$/.test(a) && /[ev]/.test(a.slice(1).replace(/[oGWFCXPS].*$/, '')))
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
/** tmux accepts any unambiguous prefix of a command name or alias: `show-e` and `showe` are show-environment. */
|
|
67
|
+
function tmuxShowEnvironmentWord(word) {
|
|
68
|
+
return (word.length >= 6 && 'show-environment'.startsWith(word)) || (word.length >= 5 && 'showenv'.startsWith(word));
|
|
69
|
+
}
|
|
70
|
+
/** `tmux [options] show-environment` (also `showenv`, a unique prefix, and a command after `\\;`) prints a session's variables. */
|
|
71
|
+
function tmuxShowsEnvironment(args) {
|
|
72
|
+
let i = 0;
|
|
73
|
+
// Global options come before the first command: -S, -L, -f, -c and -T take a value.
|
|
74
|
+
while (i < args.length && args[i] !== null && args[i].startsWith('-') && args[i] !== '-')
|
|
75
|
+
i += /^-[SLfcT]$/.test(args[i]) ? 2 : 1;
|
|
76
|
+
let commandStart = true;
|
|
77
|
+
for (; i < args.length; i += 1) {
|
|
78
|
+
const a = args[i];
|
|
79
|
+
if (a === ';' || a === '\\;') {
|
|
80
|
+
commandStart = true;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (a !== null && commandStart && tmuxShowEnvironmentWord(a))
|
|
84
|
+
return true;
|
|
85
|
+
commandStart = false;
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
/** `systemctl [--user] show-environment` prints the manager's environment. */
|
|
90
|
+
function systemctlShowsEnvironment(args) {
|
|
91
|
+
return args.some((a) => a === 'show-environment');
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* BSD `ps e`, `ps auxe`, `ps eww` and `ps -E` print every process's environment. A word of letters that holds `e`, or a dash
|
|
95
|
+
* cluster that holds `E`, outside the value of an option (`ps -p 1 -o etime` asks for a column, not the environment).
|
|
96
|
+
*/
|
|
97
|
+
function psPrintsEnvironment(args) {
|
|
98
|
+
const longWithValue = /^--(?:sort|pid|ppid|user|User|group|Group|tty|sid|format|cols|columns|width|lines|rows|quick-pid)$/;
|
|
99
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
100
|
+
const a = args[i];
|
|
101
|
+
if (a === null)
|
|
102
|
+
continue;
|
|
103
|
+
if (a.startsWith('--')) {
|
|
104
|
+
if (longWithValue.test(a))
|
|
105
|
+
i += 1;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (/^-[a-zA-Z]+$/.test(a)) {
|
|
109
|
+
for (let k = 1; k < a.length; k += 1) {
|
|
110
|
+
if (a[k] === 'E')
|
|
111
|
+
return true;
|
|
112
|
+
if ('oOpquUgGstCnND'.includes(a[k])) {
|
|
113
|
+
if (k === a.length - 1)
|
|
114
|
+
i += 1;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (letters(a)) {
|
|
121
|
+
for (let k = 0; k < a.length; k += 1) {
|
|
122
|
+
if (a[k] === 'e')
|
|
123
|
+
return true;
|
|
124
|
+
if ('oOpqUgGstCnND'.includes(a[k])) {
|
|
125
|
+
if (k === a.length - 1)
|
|
126
|
+
i += 1;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
/** The older, looser reading of `ps`: any word of letters that holds `e`, option values included. The keyless seatbelt keeps stopping it. */
|
|
135
|
+
function psLooselyPrintsEnvironment(args) {
|
|
136
|
+
return args.some((a) => a !== null && letters(a) && a.includes('e'));
|
|
137
|
+
}
|
|
138
|
+
/** The environment object in a jq filter: `env`, `$ENV` (not a `.env` field, a key, or text in a string). */
|
|
139
|
+
function jqFilterReadsEnvironment(filter) {
|
|
140
|
+
const code = filter.replace(/"(?:[^"\\]|\\.)*"/g, '""');
|
|
141
|
+
return /\$ENV\b/.test(code) || /(?<![.$\w])env\b(?!\s*[:,}])/.test(code);
|
|
142
|
+
}
|
|
143
|
+
/** The filter of a jq command line: the first word that is not an option or an option's value. With -f the program is a file: none. */
|
|
144
|
+
function jqFilters(args) {
|
|
145
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
146
|
+
const a = args[i];
|
|
147
|
+
if (a === null)
|
|
148
|
+
continue;
|
|
149
|
+
if (a === '--arg' || a === '--argjson' || a === '--slurpfile' || a === '--rawfile') {
|
|
150
|
+
i += 2;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (a === '--indent') {
|
|
154
|
+
i += 1;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (a === '--from-file' || /^-[a-zA-Z]*f$/.test(a))
|
|
158
|
+
return [];
|
|
159
|
+
if (a.startsWith('-') && a !== '-')
|
|
160
|
+
continue;
|
|
161
|
+
return [a];
|
|
162
|
+
}
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
const RUN_SCRIPT_WORDS = new Set(['run', 'run-script', 'rum', 'urn']);
|
|
166
|
+
/** `npm run env` (also pnpm, yarn and bun) runs npm's built-in `env` script, which prints the environment. */
|
|
167
|
+
function packageRunsEnvScript(args) {
|
|
168
|
+
const at = args.findIndex((a) => a !== null && RUN_SCRIPT_WORDS.has(a));
|
|
169
|
+
if (at < 0)
|
|
170
|
+
return false;
|
|
171
|
+
for (let i = at + 1; i < args.length; i += 1) {
|
|
172
|
+
const a = args[i];
|
|
173
|
+
if (a === null)
|
|
174
|
+
return false;
|
|
175
|
+
if (a.startsWith('-')) {
|
|
176
|
+
if (a === '--prefix' || a === '-C' || a === '--workspace' || a === '-w' || a === '--cwd')
|
|
177
|
+
i += 1;
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
return a === 'env';
|
|
181
|
+
}
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
var secret_paths_1 = require("../secret-paths");
|
|
185
|
+
Object.defineProperty(exports, "PROC_ENVIRON", { enumerable: true, get: function () { return secret_paths_1.PROC_ENVIRON; } });
|
|
186
|
+
/** A glob that can name `environ`: `/proc/self/env*`, `/proc/1/*`, `/proc/self/task/1/e[n]viron`. */
|
|
187
|
+
function procGlobMatchesEnviron(path) {
|
|
188
|
+
const m = /^\/proc\/[^/]+\/(?:task\/[^/]+\/)?([^/]*[*?[][^/]*)$/.exec(path);
|
|
189
|
+
if (!m)
|
|
190
|
+
return false;
|
|
191
|
+
let source = '';
|
|
192
|
+
for (let i = 0; i < m[1].length; i += 1) {
|
|
193
|
+
const ch = m[1][i];
|
|
194
|
+
if (ch === '*')
|
|
195
|
+
source += '.*';
|
|
196
|
+
else if (ch === '?')
|
|
197
|
+
source += '.';
|
|
198
|
+
else if (ch === '[') {
|
|
199
|
+
const end = m[1].indexOf(']', i + 2);
|
|
200
|
+
if (end < 0)
|
|
201
|
+
return true;
|
|
202
|
+
const body = m[1].slice(i + 1, end).replace(/^[!^]/, '');
|
|
203
|
+
source += `[${body.replace(/[\\\]^]/g, '\\$&')}]`;
|
|
204
|
+
i = end;
|
|
205
|
+
}
|
|
206
|
+
else
|
|
207
|
+
source += ch.replace(/[.+^${}()|\\]/g, '\\$&');
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
return new RegExp(`^${source}$`).test('environ');
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/** `/proc`, `/proc/<pid>` and `/proc/<pid>/task[/<tid>]`: a folder whose recursive read reaches every `environ` under it. */
|
|
217
|
+
exports.PROC_PROCESS_DIRECTORY = /^\/proc(?:\/[^/]+(?:\/task(?:\/[^/]+)?)?)?\/?$/;
|
|
218
|
+
/** Programs that read or copy every file under a folder named to them. */
|
|
219
|
+
exports.RECURSIVE_READERS = new Set(['grep', 'egrep', 'fgrep', 'rg', 'ag', 'ack', 'tar', 'gtar', 'bsdtar', 'cp', 'rsync', 'zip', 'scp']);
|
|
220
|
+
/** Variables whose value runs as a command: a pager, editor, askpass or diff helper set to `env` prints the environment. */
|
|
221
|
+
exports.HELPER_ENV_VARS = new Set(['PAGER', 'GIT_PAGER', 'MANPAGER', 'EDITOR', 'VISUAL', 'GIT_EDITOR', 'GIT_SEQUENCE_EDITOR', 'GIT_EXTERNAL_DIFF',
|
|
222
|
+
'GIT_SSH_COMMAND', 'GIT_SSH', 'GIT_ASKPASS', 'SSH_ASKPASS', 'BROWSER', 'LESSOPEN', 'GIT_PROXY_COMMAND', 'PROMPT_COMMAND']);
|
|
223
|
+
/** A command word that is the environment printer, alone or followed by arguments. */
|
|
224
|
+
exports.ENV_PRINTER_COMMAND = /^\s*(?:\S*\/)?(?:env|printenv)(?:\s|$)/;
|
|
225
|
+
/** `man -P env`, `man --pager=printenv`: the pager is the command. */
|
|
226
|
+
function manPagerPrintsEnvironment(args) {
|
|
227
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
228
|
+
const a = args[i];
|
|
229
|
+
if (a === null)
|
|
230
|
+
continue;
|
|
231
|
+
if ((a === '-P' || a === '--pager') && args[i + 1] != null && exports.ENV_PRINTER_COMMAND.test(args[i + 1]))
|
|
232
|
+
return true;
|
|
233
|
+
const m = /^(?:--pager=|-P)([\s\S]+)$/.exec(a);
|
|
234
|
+
if (m && exports.ENV_PRINTER_COMMAND.test(m[1]))
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
/** strace shows the whole environment of an exec it traces unless its strings are abbreviated: `-v`, `--no-abbrev`, `-e abbrev=none`, `-e verbose=...`. */
|
|
240
|
+
function straceShowsEnvironment(args) {
|
|
241
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
242
|
+
const a = args[i];
|
|
243
|
+
if (a === null)
|
|
244
|
+
continue;
|
|
245
|
+
if (a === '--')
|
|
246
|
+
return false;
|
|
247
|
+
if (a === '--no-abbrev')
|
|
248
|
+
return true;
|
|
249
|
+
if (a === '-e' || a === '--trace' || a === '--abbrev' || a === '--verbose') {
|
|
250
|
+
if (/(?:abbrev\s*=\s*none|verbose)/.test(String(args[i + 1] ?? '')))
|
|
251
|
+
return true;
|
|
252
|
+
i += a === '-e' || a === '--trace' ? 1 : 0;
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (/^-e./.test(a)) {
|
|
256
|
+
if (/(?:abbrev\s*=\s*none|verbose)/.test(a))
|
|
257
|
+
return true;
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
if (/^-[a-zA-Z]+$/.test(a)) {
|
|
261
|
+
for (let k = 1; k < a.length; k += 1) {
|
|
262
|
+
if (a[k] === 'v')
|
|
263
|
+
return true;
|
|
264
|
+
if ('eopsEuOSabPIUX'.includes(a[k])) {
|
|
265
|
+
if (k === a.length - 1)
|
|
266
|
+
i += 1;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
if (!a.startsWith('-'))
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
const TMUX_COMMAND_VALUE_FLAGS = {
|
|
278
|
+
'send-keys': 'tNc', send: 'tNc', 'run-shell': 'cdt', run: 'cdt', 'new-session': 'cefFnstxy', new: 'cefFnstxy', 'new-window': 'cenFt', neww: 'cenFt',
|
|
279
|
+
'split-window': 'ceFltp', splitw: 'ceFltp', 'respawn-pane': 'cet', respawnp: 'cet', 'respawn-window': 'cet', respawnw: 'cet', 'pipe-pane': 't', pipep: 't',
|
|
280
|
+
'if-shell': 't', if: 't',
|
|
281
|
+
};
|
|
282
|
+
/** `tmux send-keys env Enter`, `tmux new -d printenv`, `tmux run-shell env`: a command window or pane runs the environment printer. */
|
|
283
|
+
function tmuxRunsEnvironmentPrinter(args) {
|
|
284
|
+
let i = 0;
|
|
285
|
+
while (i < args.length && args[i] !== null && args[i].startsWith('-') && args[i] !== '-')
|
|
286
|
+
i += /^-[SLfcT]$/.test(args[i]) ? 2 : 1;
|
|
287
|
+
const name = args[i];
|
|
288
|
+
if (name === null || name === undefined || !(name in TMUX_COMMAND_VALUE_FLAGS))
|
|
289
|
+
return false;
|
|
290
|
+
const valueFlags = TMUX_COMMAND_VALUE_FLAGS[name];
|
|
291
|
+
for (i += 1; i < args.length; i += 1) {
|
|
292
|
+
const a = args[i];
|
|
293
|
+
if (a === null)
|
|
294
|
+
continue;
|
|
295
|
+
if (a === ';' || a === '\\;')
|
|
296
|
+
return false;
|
|
297
|
+
if (/^-[a-zA-Z]$/.test(a) && valueFlags.includes(a[1])) {
|
|
298
|
+
i += 1;
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (a.startsWith('-') && a.length > 1)
|
|
302
|
+
continue;
|
|
303
|
+
if (/^(?:\S*\/)?(?:env|printenv)$/.test(a))
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=env-dump.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-dump.js","sourceRoot":"","sources":["../../src/seatbelt/env-dump.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** The reason codes of the resolver that can explain a fallback, in the order the text picks one. */
|
|
2
|
+
declare const REASON_ORDER: readonly ["strict", "key_rejected", "home_unknown", "home_unusable", "env_home_unusable", "home_mismatch", "evidence_unknown"];
|
|
3
|
+
export type FallbackReason = typeof REASON_ORDER[number];
|
|
4
|
+
export declare const FALLBACK_OTHER = "setup_unconfirmed";
|
|
5
|
+
/** The one code that explains the fallback: the first of the resolver's reasons in the fixed order, else the generic code. */
|
|
6
|
+
export declare function pickFallbackReason(reasons: unknown): FallbackReason | typeof FALLBACK_OTHER;
|
|
7
|
+
/** The sentence both fallback texts share. Fixed words only: no path, value or user name. */
|
|
8
|
+
export declare function fallbackSentence(code?: string | null): string;
|
|
9
|
+
/** The code printed after "Code:" / "mode:" for a pick. */
|
|
10
|
+
export declare function fallbackCode(code?: string | null): string;
|
|
11
|
+
/** The hold text for a protected action when the fallback is on and the seatbelt did not answer. */
|
|
12
|
+
export declare function setupUnconfirmedText(code?: string | null): string;
|
|
13
|
+
/** Every hold text setupUnconfirmedText can return: one per row of the table, generated from it and from no input. */
|
|
14
|
+
export declare function setupUnconfirmedTexts(): string[];
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=fallback-copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback-copy.d.ts","sourceRoot":"","sources":["../../src/seatbelt/fallback-copy.ts"],"names":[],"mappings":"AAOA,qGAAqG;AACrG,QAAA,MAAM,YAAY,gIAAiI,CAAC;AACpJ,MAAM,MAAM,cAAc,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,cAAc,sBAAsB,CAAC;AA0BlD,8HAA8H;AAC9H,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,OAAO,cAAc,CAI3F;AAMD,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG7D;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEzD;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEjE;AAED,sHAAsH;AACtH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Words for the keyless fallback: why a machine without a key is in the stricter `claimed_no_key`
|
|
3
|
+
// mode with no sign of an account, and what the person at the machine can do about it.
|
|
4
|
+
//
|
|
5
|
+
// Text only. The mode itself is decided by resolveSeatbeltMode() (src/seatbelt-mode.ts); this module
|
|
6
|
+
// reads the reason codes it already computed and never changes a mode or a decision. A resolution
|
|
7
|
+
// without a known reason gets the generic row (code `setup_unconfirmed`).
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.FALLBACK_OTHER = void 0;
|
|
10
|
+
exports.pickFallbackReason = pickFallbackReason;
|
|
11
|
+
exports.fallbackSentence = fallbackSentence;
|
|
12
|
+
exports.fallbackCode = fallbackCode;
|
|
13
|
+
exports.setupUnconfirmedText = setupUnconfirmedText;
|
|
14
|
+
exports.setupUnconfirmedTexts = setupUnconfirmedTexts;
|
|
15
|
+
/** The reason codes of the resolver that can explain a fallback, in the order the text picks one. */
|
|
16
|
+
const REASON_ORDER = ['strict', 'key_rejected', 'home_unknown', 'home_unusable', 'env_home_unusable', 'home_mismatch', 'evidence_unknown'];
|
|
17
|
+
exports.FALLBACK_OTHER = 'setup_unconfirmed';
|
|
18
|
+
const DOCTOR = 'npx -y @getmarrow/install@latest doctor';
|
|
19
|
+
const REASON_TEXT = {
|
|
20
|
+
strict: 'MARROW_SEATBELT_STRICT=1 is set',
|
|
21
|
+
key_rejected: 'the Marrow key on this machine was rejected',
|
|
22
|
+
home_unknown: 'it cannot find your login home folder (common in containers that run as a user with no home)',
|
|
23
|
+
home_unusable: 'your login home folder is missing, is not a folder, or is /',
|
|
24
|
+
env_home_unusable: 'HOME points to a folder that is missing, is not a folder, or is /',
|
|
25
|
+
home_mismatch: 'HOME is not your login home folder',
|
|
26
|
+
evidence_unknown: 'a folder or file it checks (your home folder, ~/.marrow, or an agent folder such as ~/.claude) belongs to another user, can be written by other users, or could not be read',
|
|
27
|
+
[exports.FALLBACK_OTHER]: 'it could not confirm this machine\'s setup',
|
|
28
|
+
};
|
|
29
|
+
const FIX_TEXT = {
|
|
30
|
+
strict: 'unset MARROW_SEATBELT_STRICT',
|
|
31
|
+
key_rejected: `run ${DOCTOR}`,
|
|
32
|
+
home_unknown: 'run the agent as a user that has a home folder',
|
|
33
|
+
home_unusable: 'give this user a real home folder',
|
|
34
|
+
env_home_unusable: 'set HOME to your login home folder',
|
|
35
|
+
home_mismatch: 'start the agent with HOME set to your login home folder',
|
|
36
|
+
evidence_unknown: 'make sure your home folder, ~/.marrow and your agent folders (such as ~/.claude) belong to you and can be read, then run chmod go-w on them',
|
|
37
|
+
[exports.FALLBACK_OTHER]: `run ${DOCTOR}`,
|
|
38
|
+
};
|
|
39
|
+
/** The one code that explains the fallback: the first of the resolver's reasons in the fixed order, else the generic code. */
|
|
40
|
+
function pickFallbackReason(reasons) {
|
|
41
|
+
if (!Array.isArray(reasons))
|
|
42
|
+
return exports.FALLBACK_OTHER;
|
|
43
|
+
for (const code of REASON_ORDER)
|
|
44
|
+
if (reasons.includes(code))
|
|
45
|
+
return code;
|
|
46
|
+
return exports.FALLBACK_OTHER;
|
|
47
|
+
}
|
|
48
|
+
function known(code) {
|
|
49
|
+
return typeof code === 'string' && Object.prototype.hasOwnProperty.call(REASON_TEXT, code) ? code : exports.FALLBACK_OTHER;
|
|
50
|
+
}
|
|
51
|
+
/** The sentence both fallback texts share. Fixed words only: no path, value or user name. */
|
|
52
|
+
function fallbackSentence(code) {
|
|
53
|
+
const picked = known(code);
|
|
54
|
+
return `Marrow uses its stricter no-key mode here because ${REASON_TEXT[picked]}. Fix (for the person at this machine, not the agent): ${FIX_TEXT[picked]}, or add a Marrow key (getmarrow.ai/docs#start-here).`;
|
|
55
|
+
}
|
|
56
|
+
/** The code printed after "Code:" / "mode:" for a pick. */
|
|
57
|
+
function fallbackCode(code) {
|
|
58
|
+
return known(code);
|
|
59
|
+
}
|
|
60
|
+
/** The hold text for a protected action when the fallback is on and the seatbelt did not answer. */
|
|
61
|
+
function setupUnconfirmedText(code) {
|
|
62
|
+
return `Marrow stopped this action: there is no Marrow key on this machine, and ${fallbackSentence(code)} Agent: do not retry it another way and do not edit Marrow settings; tell the user why it was stopped. Code: ${fallbackCode(code)}.`;
|
|
63
|
+
}
|
|
64
|
+
/** Every hold text setupUnconfirmedText can return: one per row of the table, generated from it and from no input. */
|
|
65
|
+
function setupUnconfirmedTexts() {
|
|
66
|
+
return Object.keys(REASON_TEXT).map((code) => setupUnconfirmedText(code));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=fallback-copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback-copy.js","sourceRoot":"","sources":["../../src/seatbelt/fallback-copy.ts"],"names":[],"mappings":";AAAA,kGAAkG;AAClG,uFAAuF;AACvF,EAAE;AACF,qGAAqG;AACrG,kGAAkG;AAClG,0EAA0E;;;AAiC1E,gDAIC;AAOD,4CAGC;AAGD,oCAEC;AAGD,oDAEC;AAGD,sDAEC;AA5DD,qGAAqG;AACrG,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,CAAU,CAAC;AAGvI,QAAA,cAAc,GAAG,mBAAmB,CAAC;AAElD,MAAM,MAAM,GAAG,yCAAyC,CAAC;AAEzD,MAAM,WAAW,GAA2D;IAC1E,MAAM,EAAE,iCAAiC;IACzC,YAAY,EAAE,6CAA6C;IAC3D,YAAY,EAAE,8FAA8F;IAC5G,aAAa,EAAE,6DAA6D;IAC5E,iBAAiB,EAAE,mEAAmE;IACtF,aAAa,EAAE,oCAAoC;IACnD,gBAAgB,EAAE,6KAA6K;IAC/L,CAAC,sBAAc,CAAC,EAAE,4CAA4C;CAC/D,CAAC;AAEF,MAAM,QAAQ,GAA2D;IACvE,MAAM,EAAE,8BAA8B;IACtC,YAAY,EAAE,OAAO,MAAM,EAAE;IAC7B,YAAY,EAAE,gDAAgD;IAC9D,aAAa,EAAE,mCAAmC;IAClD,iBAAiB,EAAE,oCAAoC;IACvD,aAAa,EAAE,yDAAyD;IACxE,gBAAgB,EAAE,6IAA6I;IAC/J,CAAC,sBAAc,CAAC,EAAE,OAAO,MAAM,EAAE;CAClC,CAAC;AAEF,8HAA8H;AAC9H,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,sBAAc,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,YAAY;QAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACzE,OAAO,sBAAc,CAAC;AACxB,CAAC;AAED,SAAS,KAAK,CAAC,IAAa;IAC1B,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAsB,CAAC,CAAC,CAAC,sBAAc,CAAC;AACvI,CAAC;AAED,6FAA6F;AAC7F,SAAgB,gBAAgB,CAAC,IAAoB;IACnD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,qDAAqD,WAAW,CAAC,MAAM,CAAC,0DAA0D,QAAQ,CAAC,MAAM,CAAC,uDAAuD,CAAC;AACnN,CAAC;AAED,2DAA2D;AAC3D,SAAgB,YAAY,CAAC,IAAoB;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,oGAAoG;AACpG,SAAgB,oBAAoB,CAAC,IAAoB;IACvD,OAAO,2EAA2E,gBAAgB,CAAC,IAAI,CAAC,gHAAgH,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AAChP,CAAC;AAED,sHAAsH;AACtH,SAAgB,qBAAqB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface AssignEvent {
|
|
2
|
+
name: string;
|
|
3
|
+
uncond: boolean;
|
|
4
|
+
exhaustive: boolean;
|
|
5
|
+
inLoop: boolean;
|
|
6
|
+
declare: boolean;
|
|
7
|
+
array?: string[] | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function scanAssignments(src: string): AssignEvent[] | null;
|
|
10
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/seatbelt/guards.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,MAAM,EAAE,OAAO,CAAC;IAGhB,UAAU,EAAE,OAAO,CAAC;IAEpB,MAAM,EAAE,OAAO,CAAC;IAEhB,OAAO,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACzB;AAeD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,IAAI,CAgWjE"}
|