@wernerbisschoff/pi-gatekeeper 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gatekeeper.d.ts +73 -38
- package/dist/gatekeeper.d.ts.map +1 -1
- package/dist/gatekeeper.js +418 -214
- package/dist/gatekeeper.js.map +1 -1
- package/package.json +1 -1
package/dist/gatekeeper.d.ts
CHANGED
|
@@ -53,8 +53,7 @@ export type PermissionDecision = {
|
|
|
53
53
|
};
|
|
54
54
|
/**
|
|
55
55
|
* Outcome of prompting for a compound (multi-segment) command. Maps each segment to its
|
|
56
|
-
* scoped decision
|
|
57
|
-
* Used as the return type of {@link promptForCompoundCommand} (FLOW-12 Step 3).
|
|
56
|
+
* scoped decision. Used as the return type of {@link promptForCompoundCommand} (FLOW-12 Step 3).
|
|
58
57
|
*
|
|
59
58
|
* Flow references:
|
|
60
59
|
* - FLOW-12 Step 3 ("CompoundDecision as return type of promptForCompoundCommand")
|
|
@@ -64,10 +63,20 @@ export type CompoundDecision = {
|
|
|
64
63
|
segments: Array<{
|
|
65
64
|
segment: string;
|
|
66
65
|
decision: "allow" | "deny";
|
|
67
|
-
scope: "ephemeral" | "session" | "persist";
|
|
66
|
+
scope: "ephemeral" | "session" | "always" | "persist";
|
|
68
67
|
pattern?: string;
|
|
69
68
|
}>;
|
|
70
|
-
|
|
69
|
+
/**
|
|
70
|
+
* True when the user dismissed the prompt (Escape, focus loss, TUI
|
|
71
|
+
* auto-dismiss) without choosing any option. Distinct from "every segment
|
|
72
|
+
* was explicitly denied" — `finalizeCompoundGateResult` uses this flag to
|
|
73
|
+
* emit "Blocked: Prompt dismissed" instead of the misleading
|
|
74
|
+
* "Blocked: All segments denied" message. Always `false` for headless
|
|
75
|
+
* short-circuit, empty segments, prompt throw, and normal completion
|
|
76
|
+
* paths; only `true` when `ctx.ui.select` resolves with `undefined`
|
|
77
|
+
* mid-iteration.
|
|
78
|
+
*/
|
|
79
|
+
cancelled: boolean;
|
|
71
80
|
};
|
|
72
81
|
/** ─── Sensitive Path Guard (compile-time, not user-configurable) ─── */
|
|
73
82
|
/**
|
|
@@ -499,7 +508,10 @@ export declare function splitShellSegments(cmd: string): ShellSegment[];
|
|
|
499
508
|
* candidate is a pure file-system path rather than a compound command fragment. Used by
|
|
500
509
|
* {@link getAllowListEntries} to drop `/tmp/out` / `~/notes.md`-style entries from the prompt
|
|
501
510
|
* preview and the on-disk allowlist so a developer cannot accidentally approve only the file
|
|
502
|
-
* portion of `cat /tmp/output.txt`.
|
|
511
|
+
* portion of `cat /tmp/output.txt`. Composed of (a) the `isBarePath` predicate used by
|
|
512
|
+
* {@link isFilePath} for the bare-prefix case and (b) the {@link isFileOnlySegment} check
|
|
513
|
+
* applied to the trimmed entry to also drop single-token relative paths and known-extension
|
|
514
|
+
* filenames that survive the multiline split.
|
|
503
515
|
*
|
|
504
516
|
* Order of checks matters: the empty-string short-circuit returns `false` BEFORE the regex
|
|
505
517
|
* matches, so an empty entry never collides with the `/^[/~].*$/` anchor; the leading-`/` or
|
|
@@ -509,6 +521,34 @@ export declare function splitShellSegments(cmd: string): ShellSegment[];
|
|
|
509
521
|
* Source anchor: `architecture.md:152-163`, `data-model.md:177-228`.
|
|
510
522
|
*/
|
|
511
523
|
export declare function isBarePath(entry: string): boolean;
|
|
524
|
+
/**
|
|
525
|
+
* Broader file-path detector than {@link isBarePath}. Catches:
|
|
526
|
+
* - Bare absolute / home-relative paths (`/tmp/x`, `~/x`) — delegated to {@link isBarePath}
|
|
527
|
+
* - Relative paths with separators (`build/config.json`, `src/index.ts`)
|
|
528
|
+
* - Standalone filenames with a known script/data extension (`script.sh`, `config.json`,
|
|
529
|
+
* `foo.txt`)
|
|
530
|
+
*
|
|
531
|
+
* Used by {@link isFileOnlySegment} (single-token filter) and by {@link extractCommandStem}
|
|
532
|
+
* to stop stripping a command's file-argument tail. The empty-string short-circuit matches
|
|
533
|
+
* {@link isBarePath}'s ordering so the two predicates compose cleanly.
|
|
534
|
+
*/
|
|
535
|
+
export declare function isFilePath(entry: string): boolean;
|
|
536
|
+
/**
|
|
537
|
+
* True when `entry` is a "file-only" segment — after stripping leading env-var assignments,
|
|
538
|
+
* the segment is a SINGLE file-path token with no command word and no shell-operator
|
|
539
|
+
* punctuation (e.g., `script.sh`, `./run.sh`, `build/config.json`). Used by
|
|
540
|
+
* {@link getAllowListEntries} and {@link appendStemsToAllowList} to drop segments that point
|
|
541
|
+
* at a file rather than execute a command, so a multi-line input like
|
|
542
|
+
* echo hello
|
|
543
|
+
* script.sh
|
|
544
|
+
* does not produce an allowlist entry for `script.sh` (the user has to invoke the file
|
|
545
|
+
* explicitly via `bash script.sh` or `./script.sh` to land it in the allow list).
|
|
546
|
+
*
|
|
547
|
+
* Multi-token segments (`rm foo.sh`, `cat /tmp/x`) are NOT file-only — the first word is a
|
|
548
|
+
* command, the rest are arguments. The BARE_PATH_METACHAR_RE scan filters out shell-operator
|
|
549
|
+
* fragments and multi-word entries in one pass.
|
|
550
|
+
*/
|
|
551
|
+
export declare function isFileOnlySegment(entry: string): boolean;
|
|
512
552
|
/**
|
|
513
553
|
* Returns `true` when `segment` looks like a leading shell environment-variable assignment
|
|
514
554
|
* (`VAR=value`). Identifiers must start with `[a-zA-Z_]` and contain `[a-zA-Z0-9_]*` before
|
|
@@ -646,29 +686,6 @@ export declare function sessionAllow(command: string): void;
|
|
|
646
686
|
* {@link setCurrentMode}.
|
|
647
687
|
*/
|
|
648
688
|
export declare function isSessionAllowed(command: string): boolean;
|
|
649
|
-
/**
|
|
650
|
-
* Set the Allow All Once flag. After this call, the next
|
|
651
|
-
* {@link consumeAllowAllOnce} returns `true` and clears the flag.
|
|
652
|
-
* Exported so the TSK-009-03 lifecycle tests can drive it directly
|
|
653
|
-
* without going through {@link promptForCompoundCommand}.
|
|
654
|
-
*/
|
|
655
|
-
export declare function setAllowAllOnce(): void;
|
|
656
|
-
/**
|
|
657
|
-
* Consume (read-and-clear) the Allow All Once flag. Returns `true`
|
|
658
|
-
* exactly once when the flag was set by a prior {@link setAllowAllOnce}
|
|
659
|
-
* call; subsequent calls return `false` until the flag is re-set.
|
|
660
|
-
* This one-shot semantics mirrors the existing {@link isEphemeralAllowed}
|
|
661
|
-
* pattern.
|
|
662
|
-
*/
|
|
663
|
-
export declare function consumeAllowAllOnce(): boolean;
|
|
664
|
-
/**
|
|
665
|
-
* Unconditionally clear the Allow All Once flag. Idempotent — calling
|
|
666
|
-
* when the flag is already `false` is a no-op. Primed as the test-teardown
|
|
667
|
-
* seam (per-test `beforeEach` in the FLOW-12 lifecycle describe); intended
|
|
668
|
-
* for cleanup after compound command execution resolves (FLOW-12 Step 8 —
|
|
669
|
-
* integration pending).
|
|
670
|
-
*/
|
|
671
|
-
export declare function resetAllowAllOnce(): void;
|
|
672
689
|
/**
|
|
673
690
|
* Persist command stems from "ask" segments to the current level's allow list.
|
|
674
691
|
* Each stem is written in two forms — bare (`"git diff"`) and wildcard (`"git diff *"`)
|
|
@@ -681,19 +698,38 @@ export declare function resetAllowAllOnce(): void;
|
|
|
681
698
|
* glued-wildcard forms (`"git*"`) so future programmatic callers (FLOW-12's
|
|
682
699
|
* `promptForCompoundCommand`) cannot seed `perm-rules.json` with an over-broad
|
|
683
700
|
* pattern that would match `gitlog` / `git-fetch`. Empty input is a no-op (no write).
|
|
701
|
+
*
|
|
702
|
+
* Scope parameter:
|
|
703
|
+
* - `"session"` — in-memory only; adds each stem to {@link sessionAllowList} so it
|
|
704
|
+
* survives the rest of the session without ever touching disk. No file-only
|
|
705
|
+
* filtering or pattern expansion (matches the existing `sessionAllow` contract).
|
|
706
|
+
* - `"always"` (default) — persist to `perm-rules.json` per the original contract.
|
|
684
707
|
*/
|
|
685
|
-
export declare function appendStemsToAllowList(stems: readonly string[], ctx: ExtensionContext): void;
|
|
708
|
+
export declare function appendStemsToAllowList(stems: readonly string[], ctx: ExtensionContext, scope?: "session" | "always"): void;
|
|
686
709
|
/**
|
|
687
710
|
* Segment-by-segment interactive prompt for compound commands (FLOW-12).
|
|
688
711
|
*
|
|
689
|
-
* For each "ask" segment, computes
|
|
690
|
-
*
|
|
691
|
-
*
|
|
692
|
-
*
|
|
693
|
-
*
|
|
694
|
-
*
|
|
695
|
-
*
|
|
696
|
-
*
|
|
712
|
+
* For each "ask" segment, computes the command stem (and parent stem for
|
|
713
|
+
* multi-word commands), presents them in a `ctx.ui.select()` dialog with
|
|
714
|
+
* a per-segment menu (Allow "{stem}" once, Allow "{stem}" this session,
|
|
715
|
+
* Allow "{stem}" always, Deny "{stem}"; multi-word segments also expose
|
|
716
|
+
* parent-stem session/always variants), and returns a {@link CompoundDecision}
|
|
717
|
+
* mapping each segment to its scoped result.
|
|
718
|
+
*
|
|
719
|
+
* After applying a per-segment decision, the function short-circuits when
|
|
720
|
+
* the user commits to a session or always scope (remaining segments are
|
|
721
|
+
* auto-allowed through that scope without further prompting); "once" and
|
|
722
|
+
* "deny" continue iterating so each segment is decided individually.
|
|
723
|
+
*
|
|
724
|
+
* **Classifier-aware pre-pass** (FLOW-12 Step 2 enhancement): segments
|
|
725
|
+
* whose per-segment classifier verdict is `allow` (e.g. cascade-matched
|
|
726
|
+
* `git diff *` for a `cd /repo; git diff HEAD` chain) are recorded as
|
|
727
|
+
* `decision: "allow"` in the result WITHOUT prompting — the cascade rule
|
|
728
|
+
* already gates them, so re-prompting wastes UI cycles and trains the user
|
|
729
|
+
* to deny out of habit. Per-segment `deny` is unreachable here because
|
|
730
|
+
* `runPermissionGate` routes denies through `classifyCommand`'s combined
|
|
731
|
+
* precedence before reaching this prompt (the compound branch only fires
|
|
732
|
+
* when combined decision is `ask`).
|
|
697
733
|
*
|
|
698
734
|
* Headless short-circuit (FLOW-11): when `ctx.hasUI === false`, returns an empty
|
|
699
735
|
* `CompoundDecision` immediately without calling `ctx.ui.select` — the caller
|
|
@@ -703,7 +739,6 @@ export declare function appendStemsToAllowList(stems: readonly string[], ctx: Ex
|
|
|
703
739
|
*
|
|
704
740
|
* Flow references:
|
|
705
741
|
* - FLOW-12 Step 3 ("segment-by-segment prompt loop")
|
|
706
|
-
* - FLOW-12 Step 8 ("Allow All Once flag lifecycle")
|
|
707
742
|
* - FLOW-08 Step 3 ("scope-based persistence routing")
|
|
708
743
|
*/
|
|
709
744
|
export declare function promptForCompoundCommand(segments: string[], ctx: ExtensionContext): Promise<CompoundDecision>;
|
package/dist/gatekeeper.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gatekeeper.d.ts","sourceRoot":"","sources":["../src/gatekeeper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,KAAK,EAGV,YAAY,EACZ,gBAAgB,EAGjB,MAAM,iCAAiC,CAAC;AAKzC,mEAAmE;AAEnE,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AACxD;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,KAAK,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,KAAK,EAAE;QACL,GAAG,EAAE,UAAU,CAAC;QAChB,MAAM,EAAE,UAAU,CAAC;QACnB,IAAI,EAAE,UAAU,CAAC;KAClB,CAAC;CACH;AAED;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"gatekeeper.d.ts","sourceRoot":"","sources":["../src/gatekeeper.ts"],"names":[],"mappings":"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"}
|