@scopebond/hook 0.5.0 → 0.6.0
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 +52 -6
- package/dist/cli.js +64 -8
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +2 -9
- package/dist/init.js.map +1 -1
- package/dist/install.d.ts +18 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +84 -19
- package/dist/install.js.map +1 -1
- package/dist/map.d.ts +6 -3
- package/dist/map.d.ts.map +1 -1
- package/dist/map.js +762 -60
- package/dist/map.js.map +1 -1
- package/dist/minimize.d.ts +6 -3
- package/dist/minimize.d.ts.map +1 -1
- package/dist/minimize.js +24 -4
- package/dist/minimize.js.map +1 -1
- package/dist/runtime.d.ts +4 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +75 -9
- package/dist/runtime.js.map +1 -1
- package/dist/shell.d.ts +53 -4
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +737 -81
- package/dist/shell.js.map +1 -1
- package/package.json +3 -3
package/dist/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"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","sourcesContent":["// Shell decomposition for the hook mapper. A single Bash tool call can carry many\n// commands — `a && b`, `a; b`, `a | b`, `$(c)`, `` `c` ``, `bash -c '…'`, `( c )` —\n// so mapping only the first token lets a denied program ride in behind an allowed\n// one. This module splits a command line into the simple commands it will actually\n// run, so the mapper can emit an intent for each and the runtime can deny if any\n// one of them is out of policy.\n//\n// It is best-effort and fail-safe: anything it cannot parse with confidence is\n// returned as a single `opaque` command, which the caller denies (strict) or\n// observes (non-strict) rather than trusting. Every scan is linear in the input\n// length with no backtracking, so a hostile command cannot stall the hot path.\n\nexport interface SimpleCommand {\n /** The invoked program's basename, after stripping sudo/env/assignment prefixes.\n * Empty when it cannot be determined. */\n program: string;\n /** The first token whole (pre-basename), so a caller can scrub it before splitting\n * on \"/\": a bare-secret command must not leak a path-fragment as the program. */\n programRaw: string;\n /** Remaining argv (quotes removed), best-effort — used to parse git push. */\n argv: string[];\n /** The raw simple-command text, for the redacted command digest. */\n raw: string;\n /** True when parsing was not confident; the caller must fail closed. */\n opaque: boolean;\n}\n\nconst SHELLS = new Set([\"sh\", \"bash\", \"zsh\", \"dash\", \"ksh\", \"ash\", \"busybox\"]);\nconst MAX_DEPTH = 6;\n\n/** Split a command line into top-level simple-command strings at unquoted\n * separators (`;`, newline, `&&`, `||`, `|`, `&`), leaving quotes, `$( )`,\n * backticks and `( )` groups intact inside each piece. */\nfunction splitTopLevel(src: string): { segments: string[]; unbalanced: boolean } {\n const segments: string[] = [];\n let cur = \"\";\n let quote: '\"' | \"'\" | null = null;\n let paren = 0; // depth of $( ) and ( )\n let backtick = false;\n const flush = () => { const t = cur.trim(); if (t) segments.push(t); cur = \"\"; };\n\n for (let i = 0; i < src.length; i++) {\n const c = src[i];\n const n = src[i + 1];\n if (quote) {\n cur += c;\n if (quote === \"'\") { if (c === \"'\") quote = null; }\n else if (c === \"\\\\\" && n !== undefined) cur += src[++i];\n else if (c === '\"') quote = null;\n continue;\n }\n if (c === \"'\" || c === '\"') { quote = c; cur += c; continue; }\n if (c === \"`\") { backtick = !backtick; cur += c; continue; }\n if (backtick) { cur += c; continue; }\n if (c === \"\\\\\" && n !== undefined) { cur += c + src[++i]; continue; }\n if (c === \"$\" && n === \"(\") { paren++; cur += \"$(\"; i++; continue; }\n if (c === \"(\") { paren++; cur += c; continue; }\n if (c === \")\") { if (paren > 0) paren--; cur += c; continue; }\n if (paren > 0) { cur += c; continue; }\n if (c === \";\" || c === \"\\n\") { flush(); continue; }\n if (c === \"&\" && n === \"&\") { flush(); i++; continue; }\n if (c === \"|\" && n === \"|\") { flush(); i++; continue; }\n if (c === \"&\" || c === \"|\") { flush(); continue; }\n cur += c;\n }\n flush();\n return { segments, unbalanced: quote !== null || paren !== 0 || backtick };\n}\n\n/** Pull the contents of command substitutions and subshell groups out of one\n * segment — `$( … )`, `` ` … ` ``, and a leading `( … )` — for recursion, and\n * return the segment with those regions blanked so the outer command tokenizes\n * cleanly. */\nfunction extractSubstitutions(seg: string): { outer: string; inner: string[] } {\n const inner: string[] = [];\n let outer = \"\";\n let quote: '\"' | \"'\" | null = null;\n for (let i = 0; i < seg.length; i++) {\n const c = seg[i];\n const n = seg[i + 1];\n if (quote) {\n outer += c;\n if (quote === \"'\") { if (c === \"'\") quote = null; }\n else if (c === \"\\\\\" && n !== undefined) outer += seg[++i];\n else if (c === '\"') quote = null;\n continue;\n }\n if (c === \"'\" || c === '\"') { quote = c; outer += c; continue; }\n if (c === \"`\") {\n const end = seg.indexOf(\"`\", i + 1);\n if (end === -1) { outer += c; continue; }\n inner.push(seg.slice(i + 1, end));\n i = end;\n continue;\n }\n if ((c === \"$\" && n === \"(\") || c === \"(\") {\n const start = c === \"(\" ? i + 1 : i + 2;\n let depth = 1;\n let j = start;\n for (; j < seg.length && depth > 0; j++) {\n if (seg[j] === \"(\") depth++;\n else if (seg[j] === \")\") depth--;\n }\n inner.push(seg.slice(start, depth === 0 ? j - 1 : j));\n i = j - 1;\n continue;\n }\n outer += c;\n }\n return { outer, inner };\n}\n\n/** Tokenize a simple command into words, honoring single and double quotes. */\nfunction tokenize(s: string): string[] {\n const out: string[] = [];\n let cur = \"\";\n let has = false;\n let quote: '\"' | \"'\" | null = null;\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n const n = s[i + 1];\n if (quote === \"'\") { if (c === \"'\") quote = null; else cur += c; has = true; continue; }\n if (quote === '\"') {\n if (c === '\"') quote = null;\n else if (c === \"\\\\\" && n !== undefined) cur += s[++i];\n else cur += c;\n has = true; continue;\n }\n if (c === \"'\" || c === '\"') { quote = c; has = true; continue; }\n if (c === \"\\\\\" && n !== undefined) { cur += s[++i]; has = true; continue; }\n if (/\\s/.test(c)) { if (has) { out.push(cur); cur = \"\"; has = false; } continue; }\n cur += c; has = true;\n }\n if (has) out.push(cur);\n return out;\n}\n\nconst basename = (t: string): string => t.replace(/^.*[\\\\/]/, \"\");\nconst isAssignment = (t: string): boolean => /^[A-Za-z_][A-Za-z0-9_]*=/.test(t);\n\n/** Strip a leading run of `sudo`, `env`, `command`, `nohup`, `nice`, `time`,\n * `xargs`, `exec` wrappers and `NAME=value` assignments, so the program is the\n * real one about to run. `env`/`xargs` consume their own following words as the\n * command, which is handled by simply dropping the wrapper token. */\nfunction stripPrefixes(tokens: string[]): string[] {\n const wrappers = new Set([\"sudo\", \"env\", \"command\", \"nohup\", \"nice\", \"time\", \"exec\", \"stdbuf\", \"setsid\", \"xargs\"]);\n let i = 0;\n while (i < tokens.length) {\n const t = tokens[i];\n if (isAssignment(t)) { i++; continue; }\n if (wrappers.has(basename(t))) {\n i++;\n // `sudo -u user`, `nice -n 10`, `env -i` … skip option words and their args.\n while (i < tokens.length && tokens[i].startsWith(\"-\")) {\n const opt = tokens[i];\n i++;\n if (/^-[unC]$/.test(opt) && i < tokens.length && !tokens[i].startsWith(\"-\")) i++;\n }\n continue;\n }\n break;\n }\n return tokens.slice(i);\n}\n\n/** Find the script argument of a shell invoked with `-c`, including combined short\n * flags where `c` is last (`-lc`, `-xec`). The script is the next non-option word. */\nfunction shellScriptArg(argv: string[]): string | null {\n for (let i = 0; i < argv.length; i++) {\n if (argv[i] === \"-c\" || /^-[A-Za-z]*c$/.test(argv[i])) {\n for (let j = i + 1; j < argv.length; j++) if (!argv[j].startsWith(\"-\")) return argv[j];\n }\n }\n return null;\n}\n\n/** Decompose a command line into the simple commands it will run. Recurses into\n * `-c` scripts and command substitutions up to a bounded depth. */\nexport function decomposeShell(command: string, depth = 0): SimpleCommand[] {\n const src = command.trim();\n if (!src) return [];\n const opaque = (): SimpleCommand[] => [{ program: \"\", programRaw: \"\", argv: [], raw: src, opaque: true }];\n if (depth > MAX_DEPTH) return opaque();\n\n const { segments, unbalanced } = splitTopLevel(src);\n if (unbalanced) return opaque();\n\n const out: SimpleCommand[] = [];\n for (const seg of segments) {\n const { outer, inner } = extractSubstitutions(seg);\n for (const sub of inner) out.push(...decomposeShell(sub, depth + 1));\n\n const tokens = stripPrefixes(tokenize(outer));\n if (tokens.length === 0) continue; // pure substitution/subshell — inner already handled\n const program = basename(tokens[0]);\n const argv = tokens.slice(1);\n out.push({ program, programRaw: tokens[0], argv, raw: seg, opaque: false });\n\n if (SHELLS.has(program)) {\n const script = shellScriptArg(argv);\n if (script) out.push(...decomposeShell(script, depth + 1));\n }\n }\n return out.length ? out : opaque();\n}\n\n/** Parse a `git … push …` simple command into git.push params, or null if it is\n * not a push. Handles global options that take an argument (`-C dir`, `-c k=v`),\n * `--force`/`-f`/`--force-with-lease`, and a leading `+` force refspec. */\nexport function parseGitPush(cmd: SimpleCommand): { force: boolean; remote?: string; ref?: string } | null {\n if (cmd.program !== \"git\") return null;\n const a = cmd.argv;\n let i = 0;\n while (i < a.length) {\n const t = a[i];\n if (t === \"-C\" || t === \"-c\" || t === \"--git-dir\" || t === \"--work-tree\" || t === \"--namespace\") { i += 2; continue; }\n if (t.startsWith(\"-\")) { i++; continue; }\n break;\n }\n if (a[i] !== \"push\") return null;\n const rest = a.slice(i + 1);\n let force = false;\n const positional: string[] = [];\n for (const t of rest) {\n if (t === \"--force\" || t === \"-f\" || t === \"--force-with-lease\" || t.startsWith(\"--force-with-lease=\")) { force = true; continue; }\n if (t.startsWith(\"-\")) continue;\n positional.push(t);\n }\n const params: { force: boolean; remote?: string; ref?: string } = { force };\n if (positional[0]) params.remote = positional[0];\n if (positional[1]) {\n let refspec = positional[1];\n if (refspec.startsWith(\"+\")) { force = true; params.force = true; refspec = refspec.slice(1); }\n params.ref = refspec.replace(/^[^:]*:\\+?/, \"\"); // src:dst → dst\n }\n return params;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"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","sourcesContent":["// Shell decomposition for the hook mapper. A single Bash tool call can carry many\n// commands — `a && b`, `a; b`, `a | b`, `$(c)`, `` `c` ``, `bash -c '…'`, `( c )` —\n// so mapping only the first token lets a denied program ride in behind an allowed\n// one. This module splits a command line into the simple commands it will actually\n// run, so the mapper can emit an intent for each and the runtime can deny if any\n// one of them is out of policy.\n//\n// It is best-effort and fail-safe: anything it cannot parse with confidence is\n// returned as a single `opaque` command (as is a command whose program is only known\n// at run time), which the mapper records with an empty program so the starter policy\n// denies it rather than trusting it. Every scan is linear in the input\n// length with no backtracking, so a hostile command cannot stall the hot path.\n\nexport interface Redirect {\n /** The operator without its file descriptor: `>`, `>>`, `>|`, `<`, `<>`. */\n op: string;\n target: string;\n}\n\nexport interface SimpleCommand {\n /** The invoked program's basename, after stripping sudo/env/assignment prefixes.\n * Empty when it cannot be determined. */\n program: string;\n /** The first token whole (pre-basename), so a caller can scrub it before splitting\n * on \"/\": a bare-secret command must not leak a path-fragment as the program. */\n programRaw: string;\n /** Remaining argv (quotes and redirections removed), best-effort. */\n argv: string[];\n /** File redirections (`> f`, `>>f`, `x>f`, `< f`, `&> f`), in order. */\n redirects: Redirect[];\n /** The raw simple-command text, for the redacted command digest. */\n raw: string;\n /** True when parsing was not confident; the caller must fail closed. */\n opaque: boolean;\n}\n\n/** The canonical program name used for every decision: basename, lower-cased, with\n * a Windows executable suffix removed. `RM.EXE`, `/bin/rm` and `rm` are one program\n * — Windows and macOS resolve them case-insensitively, so matching the literal\n * spelling would let a case or suffix variant through. */\nexport const canonProgram = (t: string): string =>\n t.replace(/^.*[\\\\/]/, \"\").toLowerCase().replace(/\\.(?:exe|cmd|bat|com|ps1)$/, \"\");\n\nconst SHELLS = new Set([\"sh\", \"bash\", \"zsh\", \"dash\", \"ksh\", \"ash\", \"fish\"]);\nconst POWERSHELLS = new Set([\"powershell\", \"pwsh\"]);\nconst MAX_DEPTH = 6;\n\n/** Split a command line into top-level simple-command strings at unquoted\n * separators (`;`, newline, `&&`, `||`, `|`, `&`), leaving quotes, `$( )`,\n * backticks and `( )` groups intact inside each piece. */\nfunction splitTopLevel(src: string): { segments: string[]; unbalanced: boolean } {\n const segments: string[] = [];\n let cur = \"\";\n let quote: '\"' | \"'\" | null = null;\n let paren = 0; // depth of $( ) and ( )\n let backtick = false;\n const flush = () => { const t = cur.trim(); if (t) segments.push(t); cur = \"\"; };\n\n for (let i = 0; i < src.length; i++) {\n const c = src[i];\n const n = src[i + 1];\n if (quote) {\n cur += c;\n if (quote === \"'\") { if (c === \"'\") quote = null; }\n else if (c === \"\\\\\" && n !== undefined) cur += src[++i];\n else if (c === '\"') quote = null;\n continue;\n }\n if (c === \"'\" || c === '\"') { quote = c; cur += c; continue; }\n if (c === \"`\") { backtick = !backtick; cur += c; continue; }\n if (backtick) { cur += c; continue; }\n if (c === \"\\\\\" && n !== undefined) { cur += c + src[++i]; continue; }\n if (c === \"$\" && n === \"(\") { paren++; cur += \"$(\"; i++; continue; }\n if (c === \"(\") { paren++; cur += c; continue; }\n if (c === \")\") { if (paren > 0) paren--; cur += c; continue; }\n if (paren > 0) { cur += c; continue; }\n const prev = src[i - 1];\n // An unquoted `#` at the start of a word begins a comment that runs to the end of\n // the line (`rm -rf x # don't` must not read as an unbalanced quote).\n if (c === \"#\" && (prev === undefined || /[\\s;&|()]/.test(prev))) {\n while (i + 1 < src.length && src[i + 1] !== \"\\n\") i++;\n continue;\n }\n // `&>file`, `2>&1`, `<&3` and `>|file` are redirections, not separators.\n if (c === \"&\" && (n === \">\" || prev === \">\" || prev === \"<\")) { cur += c; continue; }\n if (c === \"|\" && prev === \">\") { cur += c; continue; }\n if (c === \";\" || c === \"\\n\") { flush(); continue; }\n if (c === \"&\" && n === \"&\") { flush(); i++; continue; }\n if (c === \"|\" && n === \"|\") { flush(); i++; continue; }\n if (c === \"&\" || c === \"|\") { flush(); continue; }\n cur += c;\n }\n flush();\n return { segments, unbalanced: quote !== null || paren !== 0 || backtick };\n}\n\n/** What a command substitution leaves behind in the outer command: a parameter\n * expansion, so the word it sat in is treated as unresolved (its value is only known\n * at run time) — as a program name it is dynamic, as a path it is glob-tested. */\nconst SUBST = \"${__sb_subst}\";\n\n/** Pull the contents of command substitutions and subshell groups out of one\n * segment — `$( … )` and `` ` … ` `` (also inside double quotes, where the shell\n * still runs them) and `( … )` groups — for recursion. A substitution is replaced\n * by a placeholder expansion; a group is blanked, except an empty `()` (a function\n * definition), which is kept. */\nfunction extractSubstitutions(seg: string): { outer: string; inner: string[] } {\n const inner: string[] = [];\n let outer = \"\";\n let quote: '\"' | \"'\" | null = null;\n const group = (start: number): number => {\n let depth = 1;\n let j = start;\n for (; j < seg.length && depth > 0; j++) {\n if (seg[j] === \"(\") depth++;\n else if (seg[j] === \")\") depth--;\n }\n inner.push(seg.slice(start, depth === 0 ? j - 1 : j));\n return j - 1;\n };\n for (let i = 0; i < seg.length; i++) {\n const c = seg[i];\n const n = seg[i + 1];\n if (quote === \"'\") { outer += c; if (c === \"'\") quote = null; continue; }\n if (c === \"`\") {\n const end = seg.indexOf(\"`\", i + 1);\n if (end === -1) { outer += c; continue; }\n inner.push(seg.slice(i + 1, end));\n outer += SUBST;\n i = end;\n continue;\n }\n if (c === \"$\" && n === \"(\") { i = group(i + 2); outer += SUBST; continue; }\n if (quote === '\"') {\n outer += c;\n if (c === \"\\\\\" && n !== undefined) outer += seg[++i];\n else if (c === '\"') quote = null;\n continue;\n }\n if (c === \"'\" || c === '\"') { quote = c; outer += c; continue; }\n if (c === \"\\\\\" && n !== undefined) { outer += c + seg[++i]; continue; }\n if (c === \"(\" && n === \")\") { outer += \"()\"; i++; continue; }\n if (c === \"(\") { i = group(i + 1); continue; }\n outer += c;\n }\n return { outer, inner };\n}\n\ninterface Token { t: string; op: boolean }\n\n/** Tokenize a simple command into words, honoring single and double quotes.\n * Unquoted redirection operators (`>`, `>>`, `2>`, `&>`, `>|`, `<`, `<<`, `>&`)\n * become their own operator tokens even when written without spaces (`x>file`),\n * so a redirection target can never hide inside a word. */\nfunction tokenize(s: string): Token[] {\n const out: Token[] = [];\n let cur = \"\";\n let has = false;\n let quote: '\"' | \"'\" | null = null;\n const push = () => { if (has) { out.push({ t: cur, op: false }); cur = \"\"; has = false; } };\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n const n = s[i + 1];\n if (quote === \"'\") { if (c === \"'\") quote = null; else cur += c; has = true; continue; }\n if (quote === '\"') {\n // As in bash: inside double quotes a backslash escapes only $ ` \" \\ and newline;\n // before anything else it is a literal character (so \"a\\b\" keeps its backslash).\n if (c === '\"') quote = null;\n else if (c === \"\\\\\" && n !== undefined && /[$`\"\\\\\\n]/.test(n)) cur += s[++i];\n else cur += c;\n has = true; continue;\n }\n if (c === \"'\" || c === '\"') { quote = c; has = true; continue; }\n if (c === \"\\\\\" && n !== undefined) { cur += s[++i]; has = true; continue; }\n if (/\\s/.test(c)) { push(); continue; }\n if (c === \">\" || c === \"<\" || (c === \"&\" && n === \">\")) {\n // A pure file-descriptor number (or `&`) directly before the operator is part of it.\n let op = \"\";\n if (has && /^\\d+$/.test(cur)) { cur = \"\"; has = false; } else push();\n if (c === \"&\") { op = \"&\"; i++; }\n op += s[i];\n const next = s[i + 1];\n if (next === s[i] && next !== undefined) { op += next; i++; if (op.endsWith(\"<<\") && s[i + 1] === \"<\") { op += \"<\"; i++; } }\n else if (next === \"|\" || next === \"&\" || (s[i] === \"<\" && next === \">\")) { op += next; i++; }\n out.push({ t: op, op: true });\n continue;\n }\n cur += c; has = true;\n }\n push();\n return out;\n}\n\n/** Separate redirections from the command's words. `>`/`>>`/`>|`/`&>` targets are\n * writes, `<` a read, `<>` both; here-doc/here-string operands and fd duplications\n * (`2>&1`) are dropped. */\nfunction splitRedirects(tokens: Token[]): { words: string[]; redirects: Redirect[] } {\n const words: string[] = [];\n const redirects: Redirect[] = [];\n for (let i = 0; i < tokens.length; i++) {\n const tok = tokens[i];\n if (!tok.op) { words.push(tok.t); continue; }\n const target = tokens[i + 1] && !tokens[i + 1].op ? tokens[i + 1].t : undefined;\n if (target !== undefined) i++;\n const op = tok.t.replace(/^&/, \"\");\n if (op.startsWith(\"<<\") || target === undefined) continue; // here-doc delimiter / here-string text\n if ((op === \">&\" || op === \"<&\") && /^(?:\\d+|-)$/.test(target)) continue; // 2>&1, <&-\n redirects.push({ op: op === \">&\" ? \">\" : op === \"<&\" ? \"<\" : op, target });\n }\n return { words, redirects };\n}\n\nconst basename = (t: string): string => t.replace(/^.*[\\\\/]/, \"\");\nconst isAssignment = (t: string): boolean => /^[A-Za-z_][A-Za-z0-9_]*=/.test(t);\n\n/** How a wrapper's own options are spelled, so its option VALUES are never mistaken\n * for the command it runs (`time -p rm` has no value; `sudo -iu root rm` does).\n * `short`: letters that take a value (attached `-uroot` or the next word); `optional`:\n * letters whose value can only be attached (`xargs -i{}`); `long`: long options that\n * take the next word; `lead`: a leading operand consumed before the command\n * (`timeout 5`); `write`/`read`: options whose value is a file written or read. */\ninterface WrapperSpec { short?: string; optional?: string; long?: string[]; lead?: RegExp; write?: string[]; read?: string[] }\nconst DURATION = /^[\\d.]+[smhd]?$/i;\nconst WRAPPERS = new Map<string, WrapperSpec>([\n [\"sudo\", { short: \"ugCDhpRrTtU\", long: [\"--user\", \"--group\", \"--close-from\", \"--chdir\", \"--prompt\", \"--chroot\", \"--role\", \"--type\", \"--command-timeout\", \"--other-user\", \"--host\"] }],\n [\"doas\", { short: \"uCa\" }],\n [\"pkexec\", { long: [\"--user\"] }],\n [\"env\", { short: \"uCSPa\", long: [\"--unset\", \"--chdir\", \"--split-string\", \"--argv0\"] }],\n [\"command\", {}],\n [\"builtin\", {}],\n [\"nohup\", {}],\n [\"nice\", { short: \"n\", long: [\"--adjustment\"] }],\n [\"time\", { short: \"fo\", long: [\"--format\", \"--output\"], write: [\"-o\", \"--output\"] }],\n [\"exec\", { short: \"a\" }],\n [\"stdbuf\", { short: \"ioe\", long: [\"--input\", \"--output\", \"--error\"] }],\n [\"setsid\", {}],\n [\"xargs\", { short: \"ILnPsdEa\", optional: \"iel\", long: [\"--arg-file\", \"--delimiter\", \"--max-args\", \"--max-procs\", \"--max-chars\", \"--process-slot-var\"], read: [\"-a\", \"--arg-file\"] }],\n [\"busybox\", {}],\n [\"timeout\", { short: \"sk\", long: [\"--signal\", \"--kill-after\"], lead: DURATION }],\n [\"gtimeout\", { short: \"sk\", long: [\"--signal\", \"--kill-after\"], lead: DURATION }],\n [\"ionice\", { short: \"cnp\", long: [\"--class\", \"--classdata\", \"--pid\"] }],\n [\"chrt\", { short: \"TPD\", long: [\"--sched-runtime\", \"--sched-period\", \"--sched-deadline\"], lead: /^\\d+$/ }],\n [\"taskset\", { lead: /^(?:0x[0-9a-f]+|[\\d,-]+)$/i }],\n [\"caffeinate\", { short: \"wt\" }],\n [\"strace\", { short: \"abeEIoOpPsSuX\", long: [\"--output\", \"--trace\", \"--signal\", \"--status\", \"--attach\", \"--string-limit\", \"--user\", \"--env\"], write: [\"-o\", \"--output\"] }],\n [\"ltrace\", { short: \"aADeFlnopsuxw\", long: [\"--output\", \"--library\"], write: [\"-o\", \"--output\"] }],\n [\"chroot\", { long: [\"--userspec\", \"--groups\"], lead: /^[^-]/ }],\n [\"unbuffer\", {}],\n [\"catchsegv\", {}],\n [\"torsocks\", { short: \"uapP\" }],\n [\"proxychains\", { short: \"f\" }],\n [\"proxychains4\", { short: \"f\" }],\n]);\n\n// Shell reserved words and grouping in command position. They run nothing themselves;\n// the command after them is the real one (`if rm …`, `then rm …`, `{ rm …`, `! rm …`).\nconst KEYWORDS = new Set([\"if\", \"then\", \"else\", \"elif\", \"fi\", \"do\", \"done\", \"while\", \"until\", \"{\", \"}\", \"!\", \"coproc\", \"esac\"]);\n\ninterface Wrapper { name: string; raw: string; redirects: Redirect[] }\n\n/** Words of a string as the shell would split it (quotes honored, operators dropped). */\nconst words = (s: string): string[] => tokenize(s).filter((t) => !t.op).map((t) => t.t);\n\n/** Strip the leading shell keywords, `NAME=value` assignments and wrappers (`sudo`,\n * `env`, `time`, `xargs`, `timeout`, `strace` …, each with its own option arity) so\n * the program is the real one about to run. `env -S \"…\"` splits its string into the\n * command. Returns the remaining words and the wrappers passed on the way. */\nfunction stripPrefixes(input: string[]): { tokens: string[]; wrappers: Wrapper[] } {\n let tokens = input;\n const wrappers: Wrapper[] = [];\n let i = 0;\n for (let guard = 0; i < tokens.length && guard < 1000; guard++) {\n const t = tokens[i];\n if (isAssignment(t)) { i++; continue; }\n if (KEYWORDS.has(t)) { i++; continue; }\n // `for x in …` / `select x in …`: the header runs nothing (its substitutions were\n // already extracted); the body follows `do`.\n if (t === \"for\" || t === \"select\") return { tokens: [], wrappers };\n // `case WORD in PATTERN) cmd`: skip to the command after the pattern.\n if (t === \"case\") {\n const at = tokens.indexOf(\"in\", i + 1);\n if (at < 0) return { tokens: [], wrappers };\n i = at + 1;\n continue;\n }\n // A case pattern opening a segment (`b) cmd`), or a function definition\n // (`f() { cmd`, `function f { cmd`).\n if (/^[^()]*\\)$/.test(t) && !t.startsWith(\"$\")) { i++; continue; }\n if (t.length > 2 && t.endsWith(\"()\")) { i++; if (tokens[i] === \"{\") i++; continue; }\n if (t === \"function\" && i + 1 < tokens.length) { i += 2; if (tokens[i] === \"()\") i++; if (tokens[i] === \"{\") i++; continue; }\n const w = canonProgram(t);\n const spec = WRAPPERS.get(w);\n if (!spec) break;\n // `command -v rm` / `command -V rm` only describes rm; it runs nothing.\n if (w === \"command\") {\n let query = false;\n for (let j = i + 1; j < tokens.length && tokens[j].startsWith(\"-\"); j++) if (/^-[A-Za-z]*[vV]/.test(tokens[j])) query = true;\n if (query) break;\n }\n const redirects: Redirect[] = [];\n wrappers.push({ name: w, raw: t, redirects });\n i++;\n let split: string | undefined;\n const value = (name: string, attached: string | undefined): void => {\n let v = attached;\n if (v === undefined && i < tokens.length) v = tokens[i++];\n if (v === undefined) return;\n if (spec.write?.includes(name)) redirects.push({ op: \">\", target: v });\n if (spec.read?.includes(name)) redirects.push({ op: \"<\", target: v });\n if (w === \"env\" && (name === \"-S\" || name === \"--split-string\")) split = v;\n };\n while (i < tokens.length) {\n const o = tokens[i];\n if (o === \"--\") { i++; break; }\n if (!o.startsWith(\"-\") || o === \"-\") break;\n i++;\n if (o.startsWith(\"--\")) {\n const eq = o.indexOf(\"=\");\n if (eq > 0) value(o.slice(0, eq), o.slice(eq + 1));\n else if (spec.long?.includes(o)) value(o, undefined);\n continue;\n }\n for (let k = 1; k < o.length; k++) {\n if (spec.optional?.includes(o[k])) break;\n if (spec.short?.includes(o[k])) { value(\"-\" + o[k], o.slice(k + 1) || undefined); break; }\n }\n }\n if (split !== undefined) { tokens = [...words(split), ...tokens.slice(i)]; i = 0; continue; }\n if (spec.lead && i < tokens.length && spec.lead.test(tokens[i])) i++;\n }\n return { tokens: tokens.slice(i), wrappers };\n}\n\n/** A program word whose name is only known at run time: a variable (`$r`), an\n * ANSI-C string (`$'\\x72m'`) or a command substitution in its last path segment. */\nconst isDynamicProgram = (word: string): boolean => /[$`]/.test(word.replace(/^.*\\//, \"\"));\n\n/** The script run by `su -c …`, `script -qc …`, `runuser … -c`, `flock -c …`: the\n * value of `-c`/`--command` (also as the last letter of a short-option cluster). */\nfunction commandOption(argv: string[]): string | null {\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a.startsWith(\"--command=\") || a.startsWith(\"--session-command=\")) return a.slice(a.indexOf(\"=\") + 1);\n if (a === \"-c\" || a === \"--command\" || a === \"--session-command\" || /^-[A-Za-z]+c$/.test(a)) return argv[i + 1] ?? null; }\n return null;\n}\n\n/** The command words `parallel` runs: everything before the first `:::`/`::::`\n * argument separator, after its own options. */\nfunction parallelCommand(argv: string[]): string | null {\n const valued = new Set([\"-j\", \"-P\", \"-S\", \"-a\", \"-d\", \"-I\", \"-E\", \"-C\", \"-N\", \"-n\", \"-L\", \"--jobs\", \"--sshlogin\", \"--sshloginfile\", \"--arg-file\", \"--delimiter\", \"--colsep\", \"--results\", \"--tmpdir\", \"--workdir\", \"--wd\", \"--joblog\", \"--halt\", \"--delay\", \"--timeout\", \"--retries\", \"--max-args\", \"--max-lines\", \"--env\", \"--basefile\", \"--return\", \"--transferfile\"]);\n let i = 0;\n while (i < argv.length && argv[i].startsWith(\"-\") && !argv[i].startsWith(\":::\")) { i += valued.has(argv[i]) ? 2 : 1; }\n const cmd: string[] = [];\n for (; i < argv.length && !/^::::?\\+?$/.test(argv[i]); i++) cmd.push(argv[i]);\n return cmd.length ? cmd.join(\" \") : null;\n}\n\n/** The command `watch` re-runs: its operands joined (watch passes them to `sh -c`). */\nfunction watchCommand(argv: string[]): string | null {\n let i = 0;\n while (i < argv.length && argv[i].startsWith(\"-\")) {\n const o = argv[i++];\n if (o === \"--\") break;\n if (o === \"-n\" || o === \"-q\" || o === \"--interval\" || o === \"--equexit\") i++;\n }\n return i < argv.length ? argv.slice(i).join(\" \") : null;\n}\n\n/** Find the script argument of a shell invoked with `-c`, including combined short\n * flags where `c` is last (`-lc`, `-xec`). The script is the next non-option word. */\nfunction shellScriptArg(argv: string[]): string | null {\n for (let i = 0; i < argv.length; i++) {\n if (argv[i] === \"-c\" || /^-[A-Za-z]*c$/.test(argv[i])) {\n for (let j = i + 1; j < argv.length; j++) if (!argv[j].startsWith(\"-\")) return argv[j];\n }\n }\n return null;\n}\n\n/** `cmd /c …` / `cmd /k …`: everything after the switch is the script. */\nfunction cmdScriptArg(argv: string[]): string | null {\n const at = argv.findIndex((a) => /^\\/[ck]$/i.test(a));\n return at >= 0 && at + 1 < argv.length ? argv.slice(at + 1).join(\" \") : null;\n}\n\n/** `pwsh -Command …` / `-c …` (rest of argv is the script) or `-EncodedCommand <b64>`\n * (base64 UTF-16LE, decoded here so an encoded command cannot hide its program).\n * Returns undefined when there is no inline script, null when it cannot be decoded. */\nfunction powershellScriptArg(argv: string[]): string | null | undefined {\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i].toLowerCase();\n if (/^[-/](?:c|command|com|comm|comma|comman)$/.test(a)) return argv.slice(i + 1).join(\" \") || null;\n if (/^[-/](?:e|ec|en|enc|enco|encod|encode|encoded|encodedc\\w*)$/.test(a)) {\n const b64 = argv[i + 1];\n if (!b64 || !/^[A-Za-z0-9+/=]+$/.test(b64)) return null;\n const text = Buffer.from(b64, \"base64\").toString(\"utf16le\");\n return /[\\u0000-\\u0008�]/.test(text) ? null : text;\n }\n }\n return undefined;\n}\n\n/** `find … -exec cmd {} ;` / `-execdir` / `-ok`: the embedded command runs per match. */\nfunction findExecCommands(argv: string[]): string[] {\n const out: string[] = [];\n for (let i = 0; i < argv.length; i++) {\n if (!/^-(?:exec|execdir|ok|okdir)$/.test(argv[i])) continue;\n const cmd: string[] = [];\n let j = i + 1;\n for (; j < argv.length && argv[j] !== \";\" && argv[j] !== \"+\" && argv[j] !== \"\\\\;\"; j++) cmd.push(argv[j]);\n if (cmd.length) out.push(cmd.map((w) => (/[\\s'\"]/.test(w) ? `'${w.replace(/'/g, \"\")}'` : w)).join(\" \"));\n i = j;\n }\n return out;\n}\n\ninterface Heredoc { line: number; delim: string; dashed: boolean; ownerIsShell: boolean }\n\n/** Find here-document openers (`<<word`, `<<-word`, `<< 'word'`, `<<\\word`) in the\n * whole command, honoring quotes and command-substitution nesting so a `<<` inside\n * `\"$(cat <<EOF …)\"` is seen but a `<<` inside a quoted string, a here-string\n * (`<<<`) or arithmetic is not. Each opener records its delimiter, the source line it\n * sits on, and whether the command that owns it runs a shell (its body is a script)\n * rather than consuming the body as data. `words`/`stripPrefixes` resolve the owning\n * program past wrappers (`sudo bash <<EOF`). */\nfunction findHeredocs(src: string): Heredoc[] {\n const found: Heredoc[] = [];\n const stack: Array<'\"' | null> = []; // saved quote state at each substitution entry\n let quote: '\"' | \"'\" | null = null;\n let cmdStart = 0;\n let line = 0;\n for (let i = 0; i < src.length; i++) {\n const c = src[i];\n const n = src[i + 1];\n if (c === \"\\n\") { line++; if (!quote) cmdStart = i + 1; continue; }\n if (quote === \"'\") { if (c === \"'\") quote = null; continue; }\n if (quote === '\"') {\n if (c === \"\\\\\" && n !== undefined) { i++; continue; }\n if (c === '\"') { quote = null; continue; }\n // Command substitutions run inside double quotes; a here-doc can open there.\n if (c === \"$\" && n === \"(\") { stack.push(quote); quote = null; cmdStart = i + 2; i++; continue; }\n if (c === \"`\") { stack.push(quote); quote = null; cmdStart = i + 1; continue; }\n continue;\n }\n // unquoted\n if (c === \"\\\\\" && n !== undefined) { i++; continue; }\n if (c === \"'\" || c === '\"') { quote = c; continue; }\n if (c === \"$\" && n === \"(\") { stack.push(null); cmdStart = i + 2; i++; continue; }\n if (c === \"`\") { stack.push(null); cmdStart = i + 1; continue; }\n if (c === \"(\") { stack.push(null); cmdStart = i + 1; continue; }\n if (c === \")\") { if (stack.length) quote = stack.pop() ?? null; cmdStart = i + 1; continue; }\n if (c === \";\" || c === \"&\" || c === \"|\") { cmdStart = i + 1; continue; }\n if (c === \"<\" && n === \"<\") {\n if (src[i + 2] === \"<\") { i += 2; continue; } // here-string, not a here-doc\n let j = i + 2;\n let dashed = false;\n if (src[j] === \"-\") { dashed = true; j++; }\n while (src[j] === \" \" || src[j] === \"\\t\") j++;\n let delim = \"\";\n const q = src[j];\n if (q === \"'\" || q === '\"') {\n const end = src.indexOf(q, j + 1);\n if (end === -1 || src.slice(j + 1, end).includes(\"\\n\")) { i = j; continue; }\n delim = src.slice(j + 1, end);\n j = end + 1;\n } else {\n if (src[j] === \"\\\\\") j++;\n while (j < src.length && /[A-Za-z0-9_./-]/.test(src[j])) delim += src[j++];\n }\n if (delim) {\n const cmdText = src.slice(cmdStart, i);\n const { tokens } = stripPrefixes(words(cmdText));\n const prog = tokens.length ? canonProgram(tokens[0]) : \"\";\n found.push({ line, delim, dashed, ownerIsShell: SHELLS.has(prog) });\n }\n i = j - 1;\n continue;\n }\n }\n return found;\n}\n\n/** Remove here-document bodies before the line-splitter runs, so their lines are\n * never parsed as commands. A body is inert data — a commit message, an HTTP\n * payload, a note written with `cat <<EOF > f` (the redirection still records the\n * write) — except a body fed to a shell (`bash <<EOF …`), which runs and is returned\n * for its own decomposition. A `<<` whose delimiter never recurs on a later line is\n * left untouched (it was arithmetic or otherwise not a here-doc). */\nfunction stripHeredocs(src: string): { text: string; scripts: string[] } {\n if (!src.includes(\"<<\")) return { text: src, scripts: [] };\n const openers = findHeredocs(src);\n if (openers.length === 0) return { text: src, scripts: [] };\n const strip = (s: string) => s.replace(/^\\t+/, \"\");\n const byLine = new Map<number, Heredoc[]>();\n for (const op of openers) { const l = byLine.get(op.line) ?? []; l.push(op); byLine.set(op.line, l); }\n const lines = src.split(\"\\n\");\n const out: string[] = [];\n const scripts: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n out.push(lines[i]);\n const ops = byLine.get(i);\n if (!ops) continue;\n for (const op of ops) {\n // Only consume a body when the terminator is actually present below.\n let end = -1;\n for (let j = i + 1; j < lines.length; j++) {\n if ((op.dashed ? strip(lines[j]) : lines[j]) === op.delim) { end = j; break; }\n }\n if (end === -1) continue;\n const body = lines.slice(i + 1, end).map((l) => (op.dashed ? strip(l) : l));\n if (op.ownerIsShell) scripts.push(body.join(\"\\n\"));\n i = end; // skip the body and the terminator line\n }\n }\n return { text: out.join(\"\\n\"), scripts };\n}\n\n/** Decompose a command line into the simple commands it will run. Recurses into\n * `-c` scripts and command substitutions up to a bounded depth. */\nexport function decomposeShell(command: string, depth = 0): SimpleCommand[] {\n const src = command.trim();\n if (!src) return [];\n const opaque = (raw = src): SimpleCommand[] => [{ program: \"\", programRaw: \"\", argv: [], redirects: [], raw, opaque: true }];\n if (depth > MAX_DEPTH) return opaque();\n\n const { text, scripts } = stripHeredocs(src);\n const fromHeredocs = scripts.flatMap((s) => decomposeShell(s, depth + 1));\n\n const { segments, unbalanced } = splitTopLevel(text);\n if (unbalanced) return [...opaque(), ...fromHeredocs];\n\n const out: SimpleCommand[] = [];\n for (const seg of segments) {\n const { outer, inner } = extractSubstitutions(seg);\n for (const sub of inner) out.push(...decomposeShell(sub, depth + 1));\n\n const split = splitRedirects(tokenize(outer));\n const { tokens, wrappers } = stripPrefixes(split.words);\n const redirects = split.redirects;\n // Each wrapper is recorded as a command of its own (`sudo` is a program a policy\n // may deny), carrying any file its options name (`time -o f`, `xargs -a f`).\n for (const w of wrappers) out.push({ program: basename(w.raw), programRaw: w.raw, argv: [], redirects: w.redirects, raw: seg, opaque: false });\n if (tokens.length === 0) {\n // A bare redirection (`> file`) still writes its target.\n if (redirects.length) out.push({ program: \"\", programRaw: \"\", argv: [], redirects, raw: seg, opaque: false });\n continue; // pure substitution/subshell — inner already handled\n }\n // A program named by a variable, an ANSI-C string or a substitution is only known\n // at run time: it cannot be judged by name, so it is opaque (fails closed).\n if (isDynamicProgram(tokens[0])) { out.push(...opaque(seg)); continue; }\n const program = basename(tokens[0]);\n const argv = tokens.slice(1);\n out.push({ program, programRaw: tokens[0], argv, redirects, raw: seg, opaque: false });\n\n const canon = canonProgram(program);\n const nested = (script: string | null | undefined) => { if (script) out.push(...decomposeShell(script, depth + 1)); };\n if (SHELLS.has(canon)) {\n nested(shellScriptArg(argv));\n } else if (canon === \"eval\") {\n nested(argv.join(\" \"));\n } else if (canon === \"trap\") {\n if (argv.length >= 2 && !argv[0].startsWith(\"-\")) nested(argv[0]);\n } else if (canon === \"su\" || canon === \"runuser\" || canon === \"script\" || canon === \"flock\" || canon === \"sg\") {\n const script = commandOption(argv);\n if (script) nested(script);\n else if (canon === \"sg\" || canon === \"flock\") {\n // `sg group cmd …` / `flock [-w n] lockfile cmd …`: the words after the first operand.\n const ops: string[] = [];\n for (let k = 0; k < argv.length; k++) {\n if (argv[k].startsWith(\"-\") && ops.length === 0) { if (/^-[wEn]$/.test(argv[k])) k++; continue; }\n ops.push(argv[k]);\n }\n nested(ops.slice(1).join(\" \"));\n }\n } else if (canon === \"watch\") {\n nested(watchCommand(argv));\n } else if (canon === \"parallel\") {\n nested(parallelCommand(argv));\n } else if (canon === \"cmd\") {\n const script = cmdScriptArg(argv);\n if (script) out.push(...decomposeShell(script, depth + 1));\n } else if (POWERSHELLS.has(canon)) {\n const script = powershellScriptArg(argv);\n if (script === null) out.push(...opaque(seg));\n else if (script) out.push(...decomposeShell(script, depth + 1));\n } else if (canon === \"find\") {\n for (const script of findExecCommands(argv)) out.push(...decomposeShell(script, depth + 1));\n }\n }\n out.push(...fromHeredocs);\n return out.length ? out : opaque();\n}\n\n/** One pushed destination: the branch it updates and whether that update is forced. */\nexport interface PushTarget {\n ref?: string;\n force: boolean;\n /** True when the destination ref is being deleted (`:dst`, `--delete`), which\n * rewrites the branch's existence and so is destructive even without `--force`. */\n del?: boolean;\n /** True when the push targets every branch (`--all`, `--mirror`, `--branches`), so\n * it necessarily reaches any protected ref; `--mirror` also prunes and forces. */\n all?: boolean;\n}\n\n/** Canonicalize a push destination to the short branch name a policy names:\n * `refs/heads/main` → `main`, `heads/main` → `main`. `HEAD` and `@` mean the\n * current branch and resolve to undefined (the runtime fills the real branch in). */\nexport function canonRef(dst: string): string | undefined {\n const d = dst.trim();\n if (!d || d === \"HEAD\" || d === \"@\") return undefined;\n return d.replace(/^refs\\/heads\\//, \"\").replace(/^heads\\//, \"\");\n}\n\n\n/** A git invocation split into its global `-c` config values, its subcommand and\n * the subcommand's arguments, or null if the program is not git. Global options\n * that take a value (`-C dir`, `-c k=v`, `--git-dir d` …) are skipped with it. */\nexport function gitArgs(cmd: SimpleCommand): { sub?: string; args: string[]; configs: string[] } | null {\n if (canonProgram(cmd.program) !== \"git\") return null;\n const a = cmd.argv;\n const configs: string[] = [];\n let i = 0;\n while (i < a.length) {\n const t = a[i];\n if (t === \"-c\" || t === \"--config-env\") { configs.push(a[i + 1] ?? \"\"); i += 2; continue; }\n if (t.startsWith(\"--config-env=\")) { configs.push(t.slice(\"--config-env=\".length)); i++; continue; }\n if (t === \"-C\" || t === \"--git-dir\" || t === \"--work-tree\" || t === \"--namespace\" || t === \"--super-prefix\") { i += 2; continue; }\n if (t.startsWith(\"-\")) { i++; continue; }\n break;\n }\n return { sub: a[i], args: a.slice(i + 1), configs };\n}\n\n/** The ref recorded for a push whose destination cannot be read from the command\n * line: an alias (`git -c alias.ship=push ship`), a configured push refspec\n * (`-c remote.origin.push=…`, `-c push.default=matching`) or a lower-level push\n * (`git send-pack`, `git http-push`, `git subtree push`). It starts with `-`, which\n * the starter branch guard refuses, so an unreadable push fails closed. */\nexport const UNKNOWN_REF = \"--unknown\";\n\n/** Parse a `git … push …` simple command, or null if it is not a push. Handles\n * global options that take an argument (`-C dir`, `-c k=v`), push options that take\n * one (`-o`, `--repo`, `--receive-pack`), every force spelling (`--force`, `-f`,\n * `-uf`, `--force-with-lease`, `--force-if-includes`, a `+` refspec), `src:dst` and\n * fully qualified refspecs, and multiple refspecs — each destination is returned,\n * so `git push origin feature refs/heads/main` cannot hide `main` in second place.\n * `--all`, `--mirror` and `--branches` push every branch: they return the literal\n * flag as the ref, which the starter policy denies; `--tags` alone pushes only tags\n * and returns `--tags`, which it allows. `ref`/`force` mirror the first target for\n * callers that expect a single push. */\nexport function parseGitPush(cmd: SimpleCommand): { force: boolean; remote?: string; ref?: string; targets: PushTarget[] } | null {\n const g = gitArgs(cmd);\n if (!g) return null;\n const aliased = g.configs.some((c) => /^alias\\./i.test(c));\n const configuredPush = g.configs.some((c) => /^(?:remote\\..*\\.push(?:url)?|push\\.default|remote\\.pushdefault)(?:=|$)/i.test(c));\n const lowLevel = g.sub === \"send-pack\" || g.sub === \"http-push\" || (g.sub === \"subtree\" && g.args.includes(\"push\"));\n if (aliased || lowLevel || (g.sub === \"push\" && configuredPush)) {\n return { force: false, ref: UNKNOWN_REF, targets: [{ ref: UNKNOWN_REF, force: false }] };\n }\n if (g.sub !== \"push\") return null;\n const rest = g.args;\n let force = false;\n let everything: string | undefined;\n let tags = false;\n let del = false;\n let repo: string | undefined;\n const positional: string[] = [];\n for (let k = 0; k < rest.length; k++) {\n const t = rest[k];\n if (t === \"--force\" || t === \"--force-with-lease\" || t.startsWith(\"--force-with-lease=\") || t === \"--force-if-includes\") { force = true; continue; }\n if (/^-[A-Za-z]+$/.test(t) && t.includes(\"f\")) { force = true; continue; } // -f, -uf, -fu\n if (t === \"--delete\" || (/^-[A-Za-z]+$/.test(t) && t.includes(\"d\"))) { del = true; continue; } // --delete, -d, -df\n if (t === \"--all\" || t === \"--mirror\" || t === \"--branches\") { everything = t; if (t === \"--mirror\") force = true; continue; }\n if (t === \"--tags\") { tags = true; continue; }\n if (t === \"--repo\") { repo = rest[++k]; continue; }\n if (t.startsWith(\"--repo=\")) { repo = t.slice(\"--repo=\".length); continue; }\n if (t === \"-o\" || t === \"--push-option\" || t === \"--receive-pack\" || t === \"--exec\") { k++; continue; }\n if (t === \"--\") continue;\n if (t.startsWith(\"-\")) continue;\n positional.push(t);\n }\n // `--repo <r>` names the repository. git itself still reads a first positional as\n // the repository when one is given, but the option's documentation reads as if the\n // positionals were then all refspecs — so with `--repo`, every positional is checked\n // as a refspec AND, when at most one is given, the current branch is too. Either\n // reading of `git push --repo origin HEAD:main` is covered.\n const remote = repo ?? positional[0];\n const specs = repo !== undefined ? positional : positional.slice(1);\n const targets: PushTarget[] = [];\n // `--all`/`--mirror`/`--branches` reach every branch, so they hit any protected ref;\n // `--mirror` also prunes and force-updates. The pseudo-ref keeps the starter policy's\n // ref allowlist denying it; `all` is the signal a force_push_guard clause reads.\n if (everything) targets.push({ ref: everything, force, all: true, ...(everything === \"--mirror\" ? { del: true } : {}) });\n for (const spec of specs) {\n let s = spec;\n let f = force;\n if (s.startsWith(\"+\")) { f = true; s = s.slice(1); }\n const colon = s.indexOf(\":\");\n // `src:dst` pushes to dst; `:dst` deletes dst; `src:` has no destination, so src.\n const isDelete = del || (colon >= 0 && s.slice(0, colon) === \"\");\n const dst = colon >= 0 ? (s.slice(colon + 1) || s.slice(0, colon)) : s;\n targets.push({ ref: canonRef(dst.replace(/^\\+/, \"\")), force: f || dst.startsWith(\"+\"), ...(isDelete ? { del: true } : {}) });\n }\n if (repo !== undefined && positional.length <= 1 && !everything && !tags) targets.push({ ref: undefined, force, ...(del ? { del: true } : {}) });\n if (targets.length === 0) targets.push(tags ? { ref: \"--tags\", force } : { ref: undefined, force, ...(del ? { del: true } : {}) });\n const first = targets[0];\n return { force: targets.some((t) => t.force), ...(remote !== undefined ? { remote } : {}), ...(first.ref !== undefined ? { ref: first.ref } : {}), targets };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scopebond/hook",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Scopebond hook for Claude Code, Cursor, and OpenAI Codex — checks coding-agent actions against policy before they run and records a signed receipt locally.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Avouro LLC",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"dist"
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
|
+
"@scopebond/policy-schema": "^0.4.1",
|
|
45
46
|
"@scopebond/sdk": "^0.1.2",
|
|
46
|
-
"@scopebond/gateway": "^0.
|
|
47
|
-
"@scopebond/policy-schema": "^0.4.0"
|
|
47
|
+
"@scopebond/gateway": "^0.7.0"
|
|
48
48
|
},
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|