@codyswann/lisa 3.70.0 → 3.70.1
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/all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh +224 -7
- package/dist/codex/scripts/block-no-verify.sh +190 -3
- package/dist/configs/vitest/scratch-global-setup.d.ts +32 -0
- package/dist/configs/vitest/scratch-global-setup.d.ts.map +1 -1
- package/dist/configs/vitest/scratch-global-setup.js +48 -0
- package/dist/configs/vitest/scratch-global-setup.js.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +2 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +5 -3
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/opencode/hooks-installer.d.ts.map +1 -1
- package/dist/opencode/hooks-installer.js +14 -0
- package/dist/opencode/hooks-installer.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/hooks/block-no-verify.agy.sh +200 -6
- package/plugins/lisa/hooks/block-no-verify.sh +224 -7
- package/plugins/lisa-agy/hooks/block-no-verify.agy.sh +200 -6
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/hooks/block-no-verify.sh +224 -7
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/block-no-verify.sh +224 -7
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/hooks/block-no-verify.agy.sh +200 -6
- package/plugins/src/base/hooks/block-no-verify.sh +224 -7
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
# 2. HUSKY=0 / HUSKY_SKIP_HOOKS=... — disables husky-managed git hooks;
|
|
13
13
|
# 3. core.hooksPath pointed anywhere but an allowlisted in-repo hooks dir;
|
|
14
14
|
# 4. --config-env=core.hooksPath=VAR, in both the one- and two-token spellings;
|
|
15
|
-
# 5. GIT_CONFIG_KEY_<n>=core.hooksPath env-var-style command-scope config
|
|
15
|
+
# 5. GIT_CONFIG_KEY_<n>=core.hooksPath env-var-style command-scope config;
|
|
16
|
+
# 6. the short `-n`, as a real argv token of a `git commit` — bare, or bundled
|
|
17
|
+
# into a short-option cluster such as `-nm "msg"`.
|
|
16
18
|
#
|
|
17
19
|
# The line below is what lets `lisa apply` tell a downstream copy of this guard
|
|
18
20
|
# that is BEHIND from one that is AHEAD. Byte comparison cannot: both look like
|
|
@@ -23,15 +25,31 @@
|
|
|
23
25
|
# Add a name here in the same commit that closes a vector. A hardening that
|
|
24
26
|
# forgets to is invisible to refresh, and shows up as an unexplained diff at
|
|
25
27
|
# review time instead of a named capability.
|
|
26
|
-
# lisa-guard-capabilities: no-verify-abbrev, husky-env, hookspath-allowlist, config-env, git-config-key
|
|
28
|
+
# lisa-guard-capabilities: no-verify-abbrev, husky-env, hookspath-allowlist, config-env, git-config-key, no-verify-short
|
|
27
29
|
#
|
|
28
30
|
# Shell-token matching avoids false positives from issue bodies, heredocs, and
|
|
29
31
|
# commit-message prose while still catching quoted real argv values such as
|
|
30
32
|
# `git -c "core.hooksPath=/dev/null"`.
|
|
31
33
|
#
|
|
32
|
-
# The short `-n` form
|
|
33
|
-
# grep cannot distinguish a real -n option from -n in commit-message prose or
|
|
34
|
-
# unrelated piped command
|
|
34
|
+
# The short `-n` form used to be excluded here, and the stated reason was that
|
|
35
|
+
# "grep cannot distinguish a real -n option from -n in commit-message prose or
|
|
36
|
+
# an unrelated piped command". That was true of the matcher it was written for.
|
|
37
|
+
# It is not true of this one: the command is TOKENIZED, not grepped, so `-m "fix
|
|
38
|
+
# the -n flag"` is one token holding the message and `grep -n` is a separate
|
|
39
|
+
# command — the two cases the comment called inseparable are separated by the
|
|
40
|
+
# same machinery `--config-env` and `GIT_CONFIG_KEY_<n>` already depend on.
|
|
41
|
+
#
|
|
42
|
+
# A rationale that outlives the implementation it describes is worse than none:
|
|
43
|
+
# it reads as a considered decision and stops the next reader from re-examining
|
|
44
|
+
# it. Measured against real git, `git commit -n`, `-nm msg`, and `-anm msg` all
|
|
45
|
+
# skip pre-commit exactly as completely as `--no-verify`, and `-nm` is the more
|
|
46
|
+
# likely spelling in practice because it reads as an ordinary message flag.
|
|
47
|
+
#
|
|
48
|
+
# What the old comment got right is the part about `-n` being common, and that
|
|
49
|
+
# concern is answered by SCOPE rather than by giving up: `-n` is `--dry-run` for
|
|
50
|
+
# `push`, `--no-stat` for `merge`, and a line count for head/tail/sort/grep, so
|
|
51
|
+
# the match is confined to the argv of a `git commit` invocation and nothing
|
|
52
|
+
# else. See `git_commit_skips_verification` below.
|
|
35
53
|
set -euo pipefail
|
|
36
54
|
|
|
37
55
|
input="$(cat)"
|
|
@@ -168,6 +186,203 @@ def disables_verification(token):
|
|
|
168
186
|
and NO_VERIFY.startswith(token)
|
|
169
187
|
)
|
|
170
188
|
|
|
189
|
+
|
|
190
|
+
# `git commit -n` is the short spelling of --no-verify and skips pre-commit and
|
|
191
|
+
# commit-msg identically. Matching it needs one thing the `--no-verify` scan
|
|
192
|
+
# above does not: SCOPE. `-n` means --dry-run to `git push`, --no-stat to `git
|
|
193
|
+
# merge`, and a line count to head/tail/sort/grep, so a token-anywhere match
|
|
194
|
+
# would refuse ordinary commands all day. Only `git commit` reads it as a hook
|
|
195
|
+
# bypass, so only that invocation's argv is scanned.
|
|
196
|
+
#
|
|
197
|
+
# The tokenizer below is a SECOND pass, deliberately not shared with the one the
|
|
198
|
+
# checks above use. `shlex.split` leaves `|` and `;` glued to their neighbours,
|
|
199
|
+
# which those checks paper over by stripping the punctuation off each token —
|
|
200
|
+
# fine when the question is "does this token look like a bypass anywhere in the
|
|
201
|
+
# line", fatal when the question is "where does this command end", because
|
|
202
|
+
# `git commit -m x && grep -n foo` would then read as one long git invocation
|
|
203
|
+
# and refuse the grep. `punctuation_chars=True` emits the operators as their own
|
|
204
|
+
# tokens, so the invocation's boundary is a token the scan can stop at.
|
|
205
|
+
COMMAND_SEPARATORS = {
|
|
206
|
+
";", "|", "||", "&", "&&", "(", ")", "<", ">", ">>", "<<", "&|",
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
# git's own options that take a SEPARATE value token, which therefore must be
|
|
210
|
+
# skipped when looking for the subcommand: `git -c core.hooksPath=x commit` and
|
|
211
|
+
# `git -C /repo commit` both reach `commit`.
|
|
212
|
+
GIT_GLOBAL_SEPARATE_VALUE = {
|
|
213
|
+
"-c", "-C", "--config-env", "--git-dir", "--work-tree",
|
|
214
|
+
"--namespace", "--exec-path", "--super-prefix",
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
# `git commit` long options whose value can be a separate token. Listed so the
|
|
218
|
+
# VALUE is never mistaken for a flag — `git commit --author "A -n B" -m x`
|
|
219
|
+
# must stay allowed. Only genuinely value-taking options belong here: adding a
|
|
220
|
+
# boolean one by mistake would swallow the token after it, and `git commit
|
|
221
|
+
# --amend -n` would go unnoticed.
|
|
222
|
+
COMMIT_LONG_SEPARATE_VALUE = {
|
|
223
|
+
"--message", "--file", "--author", "--date", "--template", "--cleanup",
|
|
224
|
+
"--reuse-message", "--reedit-message", "--fixup", "--squash",
|
|
225
|
+
"--pathspec-from-file", "--trailer",
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
# Short `git commit` options that REQUIRE a value: `-m`/`-F`/`-c`/`-C`/`-t`.
|
|
229
|
+
# In a cluster the value is whatever follows them in the same token, or the next
|
|
230
|
+
# token when nothing does — which is why `-mn` is the message "n" and not a
|
|
231
|
+
# bypass, and `-nm msg` IS one.
|
|
232
|
+
COMMIT_SHORT_REQUIRED_VALUE = set("mFcCt")
|
|
233
|
+
|
|
234
|
+
# Short options taking an OPTIONAL value, which git only ever reads attached:
|
|
235
|
+
# `-uno` is --untracked-files=no, `-Skeyid` is --gpg-sign=keyid. The cluster
|
|
236
|
+
# ends at them either way, so `-un` is untracked-files "n" rather than a bypass.
|
|
237
|
+
COMMIT_SHORT_OPTIONAL_VALUE = set("uS")
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def line_boundaries_as_separators(text):
|
|
241
|
+
"""Turn newlines into command separators, keeping continuations intact.
|
|
242
|
+
|
|
243
|
+
A newline ends a command exactly as `;` does, but shlex treats it as plain
|
|
244
|
+
whitespace — so `git commit -m x` on one line and `grep -n foo` on the next
|
|
245
|
+
read as ONE invocation and the grep gets refused. That is the same
|
|
246
|
+
false-positive class the short-form match exists to avoid, arriving through
|
|
247
|
+
the boundary rather than through the token.
|
|
248
|
+
|
|
249
|
+
Backslash-newline is joined first, because there the newline is NOT a
|
|
250
|
+
boundary: `git commit \\` + newline + `-nm x` is one command, and turning
|
|
251
|
+
that newline into a separator would hide a real bypass.
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
text: The command line, heredoc payloads already stripped.
|
|
255
|
+
|
|
256
|
+
Returns:
|
|
257
|
+
The same command with line breaks spelled as separators.
|
|
258
|
+
"""
|
|
259
|
+
joined = text.replace("\r\n", "\n").replace("\\\n", " ")
|
|
260
|
+
return joined.replace("\n", " ; ")
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
def shell_tokens(text):
|
|
264
|
+
"""Tokenize a command with shell operators kept as their own tokens.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
text: The command line, heredoc payloads already stripped.
|
|
268
|
+
|
|
269
|
+
Returns:
|
|
270
|
+
The token list, with `;`, `|`, `&&`, `(` and friends standing alone.
|
|
271
|
+
"""
|
|
272
|
+
lexer = shlex.shlex(
|
|
273
|
+
line_boundaries_as_separators(text), posix=True, punctuation_chars=True
|
|
274
|
+
)
|
|
275
|
+
lexer.whitespace_split = True
|
|
276
|
+
# shlex treats `#` as a comment introducer by default and would silently
|
|
277
|
+
# truncate the rest of the line; `shlex.split` disables it, and so must this.
|
|
278
|
+
lexer.commenters = ""
|
|
279
|
+
return list(lexer)
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def cluster_skips_verification(cluster):
|
|
283
|
+
"""Read a short-option cluster the way git's own parser reads it.
|
|
284
|
+
|
|
285
|
+
Args:
|
|
286
|
+
cluster: A single token beginning with one `-`, e.g. `-nm` or `-mn`.
|
|
287
|
+
|
|
288
|
+
Returns:
|
|
289
|
+
A pair (bypasses, consumes_next_token). `bypasses` is True when a real
|
|
290
|
+
`-n` option is present; `consumes_next_token` is True when the cluster
|
|
291
|
+
ends in a value-taking option whose value is the following token.
|
|
292
|
+
"""
|
|
293
|
+
body = cluster[1:]
|
|
294
|
+
for offset, letter in enumerate(body):
|
|
295
|
+
if letter == "n":
|
|
296
|
+
return (True, False)
|
|
297
|
+
if letter in COMMIT_SHORT_REQUIRED_VALUE:
|
|
298
|
+
# Everything after this letter is the value. It is a separate token
|
|
299
|
+
# only when nothing is attached.
|
|
300
|
+
return (False, offset == len(body) - 1)
|
|
301
|
+
if letter in COMMIT_SHORT_OPTIONAL_VALUE:
|
|
302
|
+
return (False, False)
|
|
303
|
+
return (False, False)
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def commit_bypasses_verification(argv):
|
|
307
|
+
"""Whether a `git commit` invocation's argv carries a real short `-n`.
|
|
308
|
+
|
|
309
|
+
Args:
|
|
310
|
+
argv: Tokens following the `commit` subcommand, to the end of the line.
|
|
311
|
+
|
|
312
|
+
Returns:
|
|
313
|
+
True if git would read one of them as --no-verify.
|
|
314
|
+
"""
|
|
315
|
+
index = 0
|
|
316
|
+
while index < len(argv):
|
|
317
|
+
token = argv[index]
|
|
318
|
+
index += 1
|
|
319
|
+
# `--` ends the options; everything after it is a pathspec, and a file
|
|
320
|
+
# legitimately named `-n` is not a bypass.
|
|
321
|
+
if token in COMMAND_SEPARATORS or token == "--":
|
|
322
|
+
return False
|
|
323
|
+
if token.startswith("--"):
|
|
324
|
+
if token in COMMIT_LONG_SEPARATE_VALUE:
|
|
325
|
+
index += 1
|
|
326
|
+
continue
|
|
327
|
+
# A bare `-` is git's stdin placeholder, not an option cluster.
|
|
328
|
+
if not token.startswith("-") or token == "-":
|
|
329
|
+
continue
|
|
330
|
+
bypasses, consumes_next = cluster_skips_verification(token)
|
|
331
|
+
if bypasses:
|
|
332
|
+
return True
|
|
333
|
+
if consumes_next:
|
|
334
|
+
index += 1
|
|
335
|
+
return False
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def subcommand_after_git(tokens, start):
|
|
339
|
+
"""Find the subcommand a `git` token introduces, and its argv.
|
|
340
|
+
|
|
341
|
+
Args:
|
|
342
|
+
tokens: The full operator-aware token list.
|
|
343
|
+
start: Index just past the `git` token.
|
|
344
|
+
|
|
345
|
+
Returns:
|
|
346
|
+
A pair (subcommand, argv), or None when the invocation names none.
|
|
347
|
+
"""
|
|
348
|
+
index = start
|
|
349
|
+
while index < len(tokens):
|
|
350
|
+
token = tokens[index]
|
|
351
|
+
if token in COMMAND_SEPARATORS:
|
|
352
|
+
return None
|
|
353
|
+
if not token.startswith("-"):
|
|
354
|
+
return (token, tokens[index + 1:])
|
|
355
|
+
index += 2 if token in GIT_GLOBAL_SEPARATE_VALUE else 1
|
|
356
|
+
return None
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def git_commit_skips_verification(text):
|
|
360
|
+
"""Whether the command runs `git commit` with the short `-n` bypass.
|
|
361
|
+
|
|
362
|
+
Args:
|
|
363
|
+
text: The command line, heredoc payloads already stripped.
|
|
364
|
+
|
|
365
|
+
Returns:
|
|
366
|
+
True if any `git commit` invocation on the line skips verification.
|
|
367
|
+
"""
|
|
368
|
+
try:
|
|
369
|
+
scoped_tokens = shell_tokens(text)
|
|
370
|
+
except ValueError:
|
|
371
|
+
return False
|
|
372
|
+
for index, token in enumerate(scoped_tokens):
|
|
373
|
+
# `/usr/bin/git` and a bare `git` are the same program; an env prefix
|
|
374
|
+
# (`HUSKY=1 git commit -n`) simply sits in an earlier token.
|
|
375
|
+
if token != "git" and not token.endswith("/git"):
|
|
376
|
+
continue
|
|
377
|
+
found = subcommand_after_git(scoped_tokens, index + 1)
|
|
378
|
+
if found and found[0] == "commit" and commit_bypasses_verification(found[1]):
|
|
379
|
+
return True
|
|
380
|
+
return False
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
if git_commit_skips_verification(strip_heredocs(command)):
|
|
384
|
+
sys.exit(1)
|
|
385
|
+
|
|
171
386
|
for i, token in enumerate(normalized_tokens):
|
|
172
387
|
if disables_verification(token):
|
|
173
388
|
sys.exit(1)
|
|
@@ -238,8 +453,10 @@ sys.exit(0)
|
|
|
238
453
|
PY
|
|
239
454
|
then
|
|
240
455
|
cat >&2 <<'EOF'
|
|
241
|
-
Blocked: this command bypasses pre-commit/pre-push hooks (--no-verify
|
|
242
|
-
or core.hooksPath disabling).
|
|
456
|
+
Blocked: this command bypasses pre-commit/pre-push hooks (--no-verify or its
|
|
457
|
+
short form -n, HUSKY=0, or core.hooksPath disabling). `git commit -n` and a
|
|
458
|
+
cluster such as `-nm "msg"` skip pre-commit exactly as completely as the long
|
|
459
|
+
flag. Fix the underlying issue (security audit, lint,
|
|
243
460
|
typecheck, tests, formatting) instead. If a fix is genuinely impossible, ask the
|
|
244
461
|
user to make the risk-acceptance decision and add a specific documented ignore;
|
|
245
462
|
never bypass the hook.
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# Lisa-managed Codex hook script (PreToolUse Bash).
|
|
3
|
-
# Blocks git commands that bypass verification hooks: the --no-verify long flag
|
|
4
|
-
#
|
|
3
|
+
# Blocks git commands that bypass verification hooks: the --no-verify long flag
|
|
4
|
+
# and any abbreviation git accepts for it, its short form -n as a real argv
|
|
5
|
+
# token of a `git commit` (bare or bundled, as in `-nm "msg"`), HUSKY=0 /
|
|
6
|
+
# HUSKY_SKIP_HOOKS= (disables husky hooks), and core.hooksPath pointed
|
|
5
7
|
# at /dev/null or set empty (disables all git hooks). Shell-token matching
|
|
6
8
|
# avoids false positives from issue bodies, heredocs, and commit-message prose
|
|
7
9
|
# while still catching quoted real argv values such as
|
|
@@ -106,6 +108,191 @@ def is_permitted_hooks_path(value):
|
|
|
106
108
|
return cleaned.rstrip("/") in PERMITTED_HOOKS_PATHS
|
|
107
109
|
|
|
108
110
|
|
|
111
|
+
# `git commit -n` is the short spelling of --no-verify and skips pre-commit and
|
|
112
|
+
# commit-msg identically; so does a cluster such as `-nm "msg"`. Matching it
|
|
113
|
+
# needs SCOPE, which is why it was long excluded: `-n` means --dry-run to `git
|
|
114
|
+
# push`, --no-stat to `git merge`, and a line count to head/tail/sort/grep. Only
|
|
115
|
+
# `git commit` reads it as a hook bypass, so only that invocation's argv is
|
|
116
|
+
# scanned. Parity with the Claude block-no-verify.sh, which carries the full
|
|
117
|
+
# rationale for why a tokenizer can make this distinction and a grep could not.
|
|
118
|
+
#
|
|
119
|
+
# A SECOND tokenizer pass, deliberately not shared with the checks above:
|
|
120
|
+
# `shlex.split` glues `|` and `;` to their neighbours, so `git commit -m x &&
|
|
121
|
+
# grep -n foo` would read as one long git invocation and refuse the grep.
|
|
122
|
+
# `punctuation_chars=True` emits the operators as their own tokens, giving the
|
|
123
|
+
# scan a boundary to stop at.
|
|
124
|
+
COMMAND_SEPARATORS = {
|
|
125
|
+
";", "|", "||", "&", "&&", "(", ")", "<", ">", ">>", "<<", "&|",
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
# git's own options taking a SEPARATE value token, skipped when looking for the
|
|
129
|
+
# subcommand so `git -c core.hooksPath=x commit` still reaches `commit`.
|
|
130
|
+
GIT_GLOBAL_SEPARATE_VALUE = {
|
|
131
|
+
"-c", "-C", "--config-env", "--git-dir", "--work-tree",
|
|
132
|
+
"--namespace", "--exec-path", "--super-prefix",
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
# `git commit` long options whose value can be a separate token, listed so the
|
|
136
|
+
# VALUE is never read as a flag (`git commit --author "A -n B" -m x` is fine).
|
|
137
|
+
# Only genuinely value-taking options belong here: a boolean added by mistake
|
|
138
|
+
# would swallow the next token and miss `git commit --amend -n`.
|
|
139
|
+
COMMIT_LONG_SEPARATE_VALUE = {
|
|
140
|
+
"--message", "--file", "--author", "--date", "--template", "--cleanup",
|
|
141
|
+
"--reuse-message", "--reedit-message", "--fixup", "--squash",
|
|
142
|
+
"--pathspec-from-file", "--trailer",
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
# Short options REQUIRING a value. In a cluster the value is whatever follows in
|
|
146
|
+
# the same token, or the next token when nothing does — which is why `-mn` is
|
|
147
|
+
# the message "n" and not a bypass, while `-nm msg` is one.
|
|
148
|
+
COMMIT_SHORT_REQUIRED_VALUE = set("mFcCt")
|
|
149
|
+
|
|
150
|
+
# Short options taking an OPTIONAL value, which git reads only when attached:
|
|
151
|
+
# `-uno` is --untracked-files=no, so `-un` is a mode and not a bypass.
|
|
152
|
+
COMMIT_SHORT_OPTIONAL_VALUE = set("uS")
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def line_boundaries_as_separators(text):
|
|
156
|
+
"""Turn newlines into command separators, keeping continuations intact.
|
|
157
|
+
|
|
158
|
+
A newline ends a command exactly as `;` does, but shlex treats it as plain
|
|
159
|
+
whitespace — so `git commit -m x` on one line and `grep -n foo` on the next
|
|
160
|
+
read as ONE invocation and the grep gets refused. That is the same
|
|
161
|
+
false-positive class the short-form match exists to avoid, arriving through
|
|
162
|
+
the boundary rather than through the token.
|
|
163
|
+
|
|
164
|
+
Backslash-newline is joined first, because there the newline is NOT a
|
|
165
|
+
boundary: `git commit \\` + newline + `-nm x` is one command, and turning
|
|
166
|
+
that newline into a separator would hide a real bypass.
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
text: The command line, heredoc payloads already stripped.
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
The same command with line breaks spelled as separators.
|
|
173
|
+
"""
|
|
174
|
+
joined = text.replace("\r\n", "\n").replace("\\\n", " ")
|
|
175
|
+
return joined.replace("\n", " ; ")
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def shell_tokens(text):
|
|
179
|
+
"""Tokenize a command with shell operators kept as their own tokens.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
text: The command line, heredoc payloads already stripped.
|
|
183
|
+
|
|
184
|
+
Returns:
|
|
185
|
+
The token list, with `;`, `|`, `&&`, `(` and friends standing alone.
|
|
186
|
+
"""
|
|
187
|
+
lexer = shlex.shlex(
|
|
188
|
+
line_boundaries_as_separators(text), posix=True, punctuation_chars=True
|
|
189
|
+
)
|
|
190
|
+
lexer.whitespace_split = True
|
|
191
|
+
# shlex treats `#` as a comment introducer and would truncate the line;
|
|
192
|
+
# `shlex.split` disables it, and so must this.
|
|
193
|
+
lexer.commenters = ""
|
|
194
|
+
return list(lexer)
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def cluster_skips_verification(cluster):
|
|
198
|
+
"""Read a short-option cluster the way git's own parser reads it.
|
|
199
|
+
|
|
200
|
+
Args:
|
|
201
|
+
cluster: A single token beginning with one `-`, e.g. `-nm` or `-mn`.
|
|
202
|
+
|
|
203
|
+
Returns:
|
|
204
|
+
A pair (bypasses, consumes_next_token).
|
|
205
|
+
"""
|
|
206
|
+
body = cluster[1:]
|
|
207
|
+
for offset, letter in enumerate(body):
|
|
208
|
+
if letter == "n":
|
|
209
|
+
return (True, False)
|
|
210
|
+
if letter in COMMIT_SHORT_REQUIRED_VALUE:
|
|
211
|
+
return (False, offset == len(body) - 1)
|
|
212
|
+
if letter in COMMIT_SHORT_OPTIONAL_VALUE:
|
|
213
|
+
return (False, False)
|
|
214
|
+
return (False, False)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def commit_bypasses_verification(argv):
|
|
218
|
+
"""Whether a `git commit` invocation's argv carries a real short `-n`.
|
|
219
|
+
|
|
220
|
+
Args:
|
|
221
|
+
argv: Tokens following the `commit` subcommand, to the end of the line.
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
True if git would read one of them as --no-verify.
|
|
225
|
+
"""
|
|
226
|
+
index = 0
|
|
227
|
+
while index < len(argv):
|
|
228
|
+
token = argv[index]
|
|
229
|
+
index += 1
|
|
230
|
+
# `--` ends the options; a file legitimately named `-n` is not a bypass.
|
|
231
|
+
if token in COMMAND_SEPARATORS or token == "--":
|
|
232
|
+
return False
|
|
233
|
+
if token.startswith("--"):
|
|
234
|
+
if token in COMMIT_LONG_SEPARATE_VALUE:
|
|
235
|
+
index += 1
|
|
236
|
+
continue
|
|
237
|
+
# A bare `-` is git's stdin placeholder, not an option cluster.
|
|
238
|
+
if not token.startswith("-") or token == "-":
|
|
239
|
+
continue
|
|
240
|
+
bypasses, consumes_next = cluster_skips_verification(token)
|
|
241
|
+
if bypasses:
|
|
242
|
+
return True
|
|
243
|
+
if consumes_next:
|
|
244
|
+
index += 1
|
|
245
|
+
return False
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def subcommand_after_git(tokens, start):
|
|
249
|
+
"""Find the subcommand a `git` token introduces, and its argv.
|
|
250
|
+
|
|
251
|
+
Args:
|
|
252
|
+
tokens: The full operator-aware token list.
|
|
253
|
+
start: Index just past the `git` token.
|
|
254
|
+
|
|
255
|
+
Returns:
|
|
256
|
+
A pair (subcommand, argv), or None when the invocation names none.
|
|
257
|
+
"""
|
|
258
|
+
index = start
|
|
259
|
+
while index < len(tokens):
|
|
260
|
+
token = tokens[index]
|
|
261
|
+
if token in COMMAND_SEPARATORS:
|
|
262
|
+
return None
|
|
263
|
+
if not token.startswith("-"):
|
|
264
|
+
return (token, tokens[index + 1:])
|
|
265
|
+
index += 2 if token in GIT_GLOBAL_SEPARATE_VALUE else 1
|
|
266
|
+
return None
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def git_commit_skips_verification(text):
|
|
270
|
+
"""Whether the command runs `git commit` with the short `-n` bypass.
|
|
271
|
+
|
|
272
|
+
Args:
|
|
273
|
+
text: The command line, heredoc payloads already stripped.
|
|
274
|
+
|
|
275
|
+
Returns:
|
|
276
|
+
True if any `git commit` invocation on the line skips verification.
|
|
277
|
+
"""
|
|
278
|
+
try:
|
|
279
|
+
scoped_tokens = shell_tokens(text)
|
|
280
|
+
except ValueError:
|
|
281
|
+
return False
|
|
282
|
+
for index, token in enumerate(scoped_tokens):
|
|
283
|
+
# `/usr/bin/git` and a bare `git` are the same program; an env prefix
|
|
284
|
+
# (`HUSKY=1 git commit -n`) simply sits in an earlier token.
|
|
285
|
+
if token != "git" and not token.endswith("/git"):
|
|
286
|
+
continue
|
|
287
|
+
found = subcommand_after_git(scoped_tokens, index + 1)
|
|
288
|
+
if found and found[0] == "commit" and commit_bypasses_verification(found[1]):
|
|
289
|
+
return True
|
|
290
|
+
return False
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
if git_commit_skips_verification(strip_heredocs(command)):
|
|
294
|
+
sys.exit(1)
|
|
295
|
+
|
|
109
296
|
for i, token in enumerate(normalized_tokens):
|
|
110
297
|
if disables_verification(token):
|
|
111
298
|
sys.exit(1)
|
|
@@ -153,7 +340,7 @@ then
|
|
|
153
340
|
"hookSpecificOutput": {
|
|
154
341
|
"hookEventName": "PreToolUse",
|
|
155
342
|
"permissionDecision": "deny",
|
|
156
|
-
"permissionDecisionReason": "Blocked: this command bypasses pre-commit/pre-push hooks (--no-verify, HUSKY=0, or core.hooksPath disabling). Fix the underlying issue (security audit, lint, typecheck, tests, formatting) instead. If a fix is genuinely impossible, ask the user to make the risk-acceptance decision and add a specific documented ignore; never bypass the hook."
|
|
343
|
+
"permissionDecisionReason": "Blocked: this command bypasses pre-commit/pre-push hooks (--no-verify or its short form -n, HUSKY=0, or core.hooksPath disabling). `git commit -n` and a cluster such as `-nm \"msg\"` skip pre-commit exactly as completely as the long flag. Fix the underlying issue (security audit, lint, typecheck, tests, formatting) instead. If a fix is genuinely impossible, ask the user to make the risk-acceptance decision and add a specific documented ignore; never bypass the hook."
|
|
157
344
|
}
|
|
158
345
|
}'
|
|
159
346
|
fi
|
|
@@ -47,6 +47,38 @@ export declare const inspectNamespace: (dir?: string, alive?: (pid: number) => b
|
|
|
47
47
|
* @returns The message, or `undefined` when the namespace is healthy.
|
|
48
48
|
*/
|
|
49
49
|
export declare const describeResidueFailure: (dir: string, residue: NamespaceResidue) => string | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Renders the banner printed at the moment of refusal.
|
|
52
|
+
*
|
|
53
|
+
* A throw from `setup` exits 1, which is the half of the contract that works.
|
|
54
|
+
* The other half did not: Vitest reports the throw as an unhandled error AFTER
|
|
55
|
+
* the run summary, so what an operator actually saw, in order, was
|
|
56
|
+
*
|
|
57
|
+
* ```
|
|
58
|
+
* line 5: No test files found, exiting with code 1
|
|
59
|
+
* lines 11-390: a full coverage report, every file at 0%
|
|
60
|
+
* line 397: Error: Test scratch namespace ... past the ceiling of 512
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* measured on vitest 4.1.9 over a 416-line output. The guard bit correctly and
|
|
64
|
+
* was still PRESENTED as a coverage failure — "no tests" and an all-zero
|
|
65
|
+
* coverage table are the first and largest things on the page, and the reason
|
|
66
|
+
* is 392 lines below the verdict. Anything reading the top of the output, or
|
|
67
|
+
* reading the coverage numbers, gets the wrong story; that is a silent
|
|
68
|
+
* degradation inside a guard written to abolish silent degradation.
|
|
69
|
+
*
|
|
70
|
+
* So the reason is printed HERE, before the throw, from a hook that runs before
|
|
71
|
+
* collection — which puts it above every line of that output instead of below
|
|
72
|
+
* it. The throw is kept exactly as it was: this changes where the reason is
|
|
73
|
+
* read, not whether the run fails.
|
|
74
|
+
*
|
|
75
|
+
* The banner says what the zeroes below it mean, because the operator standing
|
|
76
|
+
* at this gate is not necessarily an engineer and "0% coverage" reads as a
|
|
77
|
+
* verdict on the code rather than as the absence of a measurement.
|
|
78
|
+
* @param failure - The residue failure being reported
|
|
79
|
+
* @returns Operator-readable banner text.
|
|
80
|
+
*/
|
|
81
|
+
export declare const renderRefusalNotice: (failure: string) => string;
|
|
50
82
|
/**
|
|
51
83
|
* Reclaims residue from previous runs, then refuses to start into a namespace
|
|
52
84
|
* that is accumulating.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratch-global-setup.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-global-setup.ts"],"names":[],"mappings":"AA8CA;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAK,MAA8B,EACnC,QAAO,CAAC,GAAG,EAAE,MAAM,KAAK,OAAwB,KAC/C,gBAWF,CAAC;AAUF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sBAAsB,GACjC,KAAK,MAAM,EACX,SAAS,gBAAgB,KACxB,MAAM,GAAG,SAoBX,CAAC;AA2BF;;;;GAIG;AACH,eAAO,MAAM,KAAK,QAAO,
|
|
1
|
+
{"version":3,"file":"scratch-global-setup.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-global-setup.ts"],"names":[],"mappings":"AA8CA;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAK,MAA8B,EACnC,QAAO,CAAC,GAAG,EAAE,MAAM,KAAK,OAAwB,KAC/C,gBAWF,CAAC;AAUF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sBAAsB,GACjC,KAAK,MAAM,EACX,SAAS,gBAAgB,KACxB,MAAM,GAAG,SAoBX,CAAC;AA2BF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,MAcxC,CAAC;AAEf;;;;GAIG;AACH,eAAO,MAAM,KAAK,QAAO,IAexB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,QAAO,IAE3B,CAAC"}
|
|
@@ -130,6 +130,51 @@ const auditNamespace = (dir) => {
|
|
|
130
130
|
const first = sweepThenInspect(dir);
|
|
131
131
|
return first.orphaned.length > 0 ? sweepThenInspect(dir) : first;
|
|
132
132
|
};
|
|
133
|
+
/**
|
|
134
|
+
* Renders the banner printed at the moment of refusal.
|
|
135
|
+
*
|
|
136
|
+
* A throw from `setup` exits 1, which is the half of the contract that works.
|
|
137
|
+
* The other half did not: Vitest reports the throw as an unhandled error AFTER
|
|
138
|
+
* the run summary, so what an operator actually saw, in order, was
|
|
139
|
+
*
|
|
140
|
+
* ```
|
|
141
|
+
* line 5: No test files found, exiting with code 1
|
|
142
|
+
* lines 11-390: a full coverage report, every file at 0%
|
|
143
|
+
* line 397: Error: Test scratch namespace ... past the ceiling of 512
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* measured on vitest 4.1.9 over a 416-line output. The guard bit correctly and
|
|
147
|
+
* was still PRESENTED as a coverage failure — "no tests" and an all-zero
|
|
148
|
+
* coverage table are the first and largest things on the page, and the reason
|
|
149
|
+
* is 392 lines below the verdict. Anything reading the top of the output, or
|
|
150
|
+
* reading the coverage numbers, gets the wrong story; that is a silent
|
|
151
|
+
* degradation inside a guard written to abolish silent degradation.
|
|
152
|
+
*
|
|
153
|
+
* So the reason is printed HERE, before the throw, from a hook that runs before
|
|
154
|
+
* collection — which puts it above every line of that output instead of below
|
|
155
|
+
* it. The throw is kept exactly as it was: this changes where the reason is
|
|
156
|
+
* read, not whether the run fails.
|
|
157
|
+
*
|
|
158
|
+
* The banner says what the zeroes below it mean, because the operator standing
|
|
159
|
+
* at this gate is not necessarily an engineer and "0% coverage" reads as a
|
|
160
|
+
* verdict on the code rather than as the absence of a measurement.
|
|
161
|
+
* @param failure - The residue failure being reported
|
|
162
|
+
* @returns Operator-readable banner text.
|
|
163
|
+
*/
|
|
164
|
+
export const renderRefusalNotice = (failure) => [
|
|
165
|
+
"",
|
|
166
|
+
"═".repeat(78),
|
|
167
|
+
"TEST RUN REFUSED TO START — this is NOT a coverage failure.",
|
|
168
|
+
"",
|
|
169
|
+
failure,
|
|
170
|
+
"",
|
|
171
|
+
"No test ran, so nothing below this line measured anything. Vitest will",
|
|
172
|
+
'print "No test files found" and a coverage table reading 0% for every',
|
|
173
|
+
"file; both are what a refused run looks like, not a verdict on the code.",
|
|
174
|
+
"Fix the reason named above and run again.",
|
|
175
|
+
"═".repeat(78),
|
|
176
|
+
"",
|
|
177
|
+
].join("\n");
|
|
133
178
|
/**
|
|
134
179
|
* Reclaims residue from previous runs, then refuses to start into a namespace
|
|
135
180
|
* that is accumulating.
|
|
@@ -144,6 +189,9 @@ export const setup = () => {
|
|
|
144
189
|
const residue = auditNamespace(dir);
|
|
145
190
|
const failure = describeResidueFailure(dir, residue);
|
|
146
191
|
if (failure !== undefined) {
|
|
192
|
+
// Written to stderr before the throw so it lands above Vitest's own
|
|
193
|
+
// output — see renderRefusalNotice for the measured ordering it fixes.
|
|
194
|
+
process.stderr.write(renderRefusalNotice(failure));
|
|
147
195
|
throw new Error(failure);
|
|
148
196
|
}
|
|
149
197
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratch-global-setup.js","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-global-setup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scratch-global-setup.js","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-global-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CA0iBjC,CAAC"}
|
|
@@ -392,6 +392,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
392
392
|
]),
|
|
393
393
|
"scripts/lisa-hooks/block-no-verify.sh": Object.freeze([
|
|
394
394
|
"031ef7a53fc49cb18665105b834b7b50ad6a43317e0821949809e877e0562ce4",
|
|
395
|
+
"08399603387ff80240777dffa4b564a9d6ee82e64a329d3790f99ccaf6dbff04",
|
|
395
396
|
"18b7bb8867c5e6f719a9c503a38525f4c05e3d611717c3e1a503cf58dfb2832f",
|
|
396
397
|
"2df476aacebcb2544a12f459a0092e88eb28c0d00e45fd7ed909c75dfe441027",
|
|
397
398
|
"33e2bd341eb992036059b0c4606db35a218adcfeca7e44d174fedf8ebdff29d2",
|
|
@@ -402,6 +403,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
402
403
|
"a6ed91576efebb6ba40cfa4e9d8a3e8566314909210ae8d5860be62a3feb4cff",
|
|
403
404
|
"aa95a84f9f9224914947a09b858535aa8bd052199ff64cb53768cf78fb69b687",
|
|
404
405
|
"b9f299cb9d3ad75b71296376ae2c40eb207a3b2706dafdaa41fc586050a53aad",
|
|
406
|
+
"d18448d642f40d46f690a7c868ed39627cb10b0fdcbd5a9505c26d05163a95d7",
|
|
405
407
|
"dd1aea1b9fdd0da023bf704b331b350bc14620f4364afa5001c6690fcbc940cc",
|
|
406
408
|
"e3407d63eae16662923d46b75b6a41e7ca7ab206b428ea2cbb0b4fee226f6516",
|
|
407
409
|
]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"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"}
|