@codyswann/lisa 4.28.4 → 4.29.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.
Files changed (218) hide show
  1. package/README.md +3 -1
  2. package/all/copy-overwrite/scripts/lisa-gates.mjs +2 -1
  3. package/all/copy-overwrite/scripts/lisa-hooks/sonar-secrets.sh +3 -2
  4. package/all/copy-overwrite/scripts/lisa-postinstall.mjs +6 -2
  5. package/cdk/create-only/vitest.config.local.ts +5 -1
  6. package/cdk/package-lisa/package.lisa.json +14 -7
  7. package/dist/cli/apply.d.ts +20 -0
  8. package/dist/cli/apply.d.ts.map +1 -1
  9. package/dist/cli/apply.js +70 -3
  10. package/dist/cli/apply.js.map +1 -1
  11. package/dist/cli/doctor-apply-freshness.d.ts.map +1 -1
  12. package/dist/cli/doctor-apply-freshness.js +10 -4
  13. package/dist/cli/doctor-apply-freshness.js.map +1 -1
  14. package/dist/cli/lisa-test-run-bootstrap.d.ts +3 -0
  15. package/dist/cli/lisa-test-run-bootstrap.d.ts.map +1 -0
  16. package/dist/cli/lisa-test-run-bootstrap.js +201 -0
  17. package/dist/cli/lisa-test-run-bootstrap.js.map +1 -0
  18. package/dist/cli/lisa-test-run-ipc.d.ts +42 -0
  19. package/dist/cli/lisa-test-run-ipc.d.ts.map +1 -0
  20. package/dist/cli/lisa-test-run-ipc.js +200 -0
  21. package/dist/cli/lisa-test-run-ipc.js.map +1 -0
  22. package/dist/cli/lisa-test-run-process-group.d.ts +30 -0
  23. package/dist/cli/lisa-test-run-process-group.d.ts.map +1 -0
  24. package/dist/cli/lisa-test-run-process-group.js +123 -0
  25. package/dist/cli/lisa-test-run-process-group.js.map +1 -0
  26. package/dist/cli/lisa-test-run-reaper.d.ts +3 -0
  27. package/dist/cli/lisa-test-run-reaper.d.ts.map +1 -0
  28. package/dist/cli/lisa-test-run-reaper.js +195 -0
  29. package/dist/cli/lisa-test-run-reaper.js.map +1 -0
  30. package/dist/cli/lisa-test-run-runtime.d.ts +46 -0
  31. package/dist/cli/lisa-test-run-runtime.d.ts.map +1 -0
  32. package/dist/cli/lisa-test-run-runtime.js +123 -0
  33. package/dist/cli/lisa-test-run-runtime.js.map +1 -0
  34. package/dist/cli/lisa-test-run-supervisor.d.ts +13 -0
  35. package/dist/cli/lisa-test-run-supervisor.d.ts.map +1 -0
  36. package/dist/cli/lisa-test-run-supervisor.js +268 -0
  37. package/dist/cli/lisa-test-run-supervisor.js.map +1 -0
  38. package/dist/cli/lisa-test-run.d.ts +3 -0
  39. package/dist/cli/lisa-test-run.d.ts.map +1 -0
  40. package/dist/cli/lisa-test-run.js +66 -0
  41. package/dist/cli/lisa-test-run.js.map +1 -0
  42. package/dist/cli/shared-options.d.ts +11 -4
  43. package/dist/cli/shared-options.d.ts.map +1 -1
  44. package/dist/cli/shared-options.js +8 -8
  45. package/dist/cli/shared-options.js.map +1 -1
  46. package/dist/configs/vitest/base.d.ts.map +1 -1
  47. package/dist/configs/vitest/base.js +5 -2
  48. package/dist/configs/vitest/base.js.map +1 -1
  49. package/dist/configs/vitest/cdk.d.ts +4 -0
  50. package/dist/configs/vitest/cdk.d.ts.map +1 -1
  51. package/dist/configs/vitest/cdk.js +5 -0
  52. package/dist/configs/vitest/cdk.js.map +1 -1
  53. package/dist/configs/vitest/harper-fabric.d.ts.map +1 -1
  54. package/dist/configs/vitest/harper-fabric.js +1 -0
  55. package/dist/configs/vitest/harper-fabric.js.map +1 -1
  56. package/dist/configs/vitest/nestjs.d.ts.map +1 -1
  57. package/dist/configs/vitest/nestjs.js +1 -0
  58. package/dist/configs/vitest/nestjs.js.map +1 -1
  59. package/dist/configs/vitest/phaser.d.ts.map +1 -1
  60. package/dist/configs/vitest/phaser.js +1 -0
  61. package/dist/configs/vitest/phaser.js.map +1 -1
  62. package/dist/configs/vitest/scratch-authority.d.ts +25 -0
  63. package/dist/configs/vitest/scratch-authority.d.ts.map +1 -0
  64. package/dist/configs/vitest/scratch-authority.js +107 -0
  65. package/dist/configs/vitest/scratch-authority.js.map +1 -0
  66. package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts +5 -0
  67. package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts.map +1 -0
  68. package/dist/configs/vitest/scratch-bound-cleanup-programs.js +219 -0
  69. package/dist/configs/vitest/scratch-bound-cleanup-programs.js.map +1 -0
  70. package/dist/configs/vitest/scratch-bound-cleanup.d.ts +28 -0
  71. package/dist/configs/vitest/scratch-bound-cleanup.d.ts.map +1 -0
  72. package/dist/configs/vitest/scratch-bound-cleanup.js +155 -0
  73. package/dist/configs/vitest/scratch-bound-cleanup.js.map +1 -0
  74. package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts +17 -0
  75. package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts.map +1 -0
  76. package/dist/configs/vitest/scratch-bound-root-cleanup.js +149 -0
  77. package/dist/configs/vitest/scratch-bound-root-cleanup.js.map +1 -0
  78. package/dist/configs/vitest/scratch-global-setup.d.ts +17 -9
  79. package/dist/configs/vitest/scratch-global-setup.d.ts.map +1 -1
  80. package/dist/configs/vitest/scratch-global-setup.js +103 -35
  81. package/dist/configs/vitest/scratch-global-setup.js.map +1 -1
  82. package/dist/configs/vitest/scratch-leak-setup.d.ts +2 -0
  83. package/dist/configs/vitest/scratch-leak-setup.d.ts.map +1 -0
  84. package/dist/configs/vitest/scratch-leak-setup.js +108 -0
  85. package/dist/configs/vitest/scratch-leak-setup.js.map +1 -0
  86. package/dist/configs/vitest/scratch-namespace-authority.d.ts +80 -0
  87. package/dist/configs/vitest/scratch-namespace-authority.d.ts.map +1 -0
  88. package/dist/configs/vitest/scratch-namespace-authority.js +291 -0
  89. package/dist/configs/vitest/scratch-namespace-authority.js.map +1 -0
  90. package/dist/configs/vitest/scratch-owner.d.ts +131 -0
  91. package/dist/configs/vitest/scratch-owner.d.ts.map +1 -0
  92. package/dist/configs/vitest/scratch-owner.js +297 -0
  93. package/dist/configs/vitest/scratch-owner.js.map +1 -0
  94. package/dist/configs/vitest/scratch-route-profile.d.ts +36 -0
  95. package/dist/configs/vitest/scratch-route-profile.d.ts.map +1 -0
  96. package/dist/configs/vitest/scratch-route-profile.js +217 -0
  97. package/dist/configs/vitest/scratch-route-profile.js.map +1 -0
  98. package/dist/configs/vitest/scratch-run-root-compatibility.d.ts +33 -0
  99. package/dist/configs/vitest/scratch-run-root-compatibility.d.ts.map +1 -0
  100. package/dist/configs/vitest/scratch-run-root-compatibility.js +137 -0
  101. package/dist/configs/vitest/scratch-run-root-compatibility.js.map +1 -0
  102. package/dist/configs/vitest/scratch-run-root-intent.d.ts +66 -0
  103. package/dist/configs/vitest/scratch-run-root-intent.d.ts.map +1 -0
  104. package/dist/configs/vitest/scratch-run-root-intent.js +183 -0
  105. package/dist/configs/vitest/scratch-run-root-intent.js.map +1 -0
  106. package/dist/configs/vitest/scratch-setup.d.ts.map +1 -1
  107. package/dist/configs/vitest/scratch-setup.js +45 -15
  108. package/dist/configs/vitest/scratch-setup.js.map +1 -1
  109. package/dist/configs/vitest/scratch-supervision-intent.d.ts +8 -0
  110. package/dist/configs/vitest/scratch-supervision-intent.d.ts.map +1 -0
  111. package/dist/configs/vitest/scratch-supervision-intent.js +125 -0
  112. package/dist/configs/vitest/scratch-supervision-intent.js.map +1 -0
  113. package/dist/configs/vitest/scratch-supervision-protocol.d.ts +12 -0
  114. package/dist/configs/vitest/scratch-supervision-protocol.d.ts.map +1 -0
  115. package/dist/configs/vitest/scratch-supervision-protocol.js +230 -0
  116. package/dist/configs/vitest/scratch-supervision-protocol.js.map +1 -0
  117. package/dist/configs/vitest/scratch-supervision.d.ts +64 -0
  118. package/dist/configs/vitest/scratch-supervision.d.ts.map +1 -0
  119. package/dist/configs/vitest/scratch-supervision.js +209 -0
  120. package/dist/configs/vitest/scratch-supervision.js.map +1 -0
  121. package/dist/configs/vitest/scratch-sweep.d.ts +66 -0
  122. package/dist/configs/vitest/scratch-sweep.d.ts.map +1 -0
  123. package/dist/configs/vitest/scratch-sweep.js +82 -0
  124. package/dist/configs/vitest/scratch-sweep.js.map +1 -0
  125. package/dist/configs/vitest/scratch.d.ts +14 -187
  126. package/dist/configs/vitest/scratch.d.ts.map +1 -1
  127. package/dist/configs/vitest/scratch.js +18 -285
  128. package/dist/configs/vitest/scratch.js.map +1 -1
  129. package/dist/configs/vitest/typescript.d.ts.map +1 -1
  130. package/dist/configs/vitest/typescript.js +1 -0
  131. package/dist/configs/vitest/typescript.js.map +1 -1
  132. package/dist/core/apply-mode.d.ts +80 -29
  133. package/dist/core/apply-mode.d.ts.map +1 -1
  134. package/dist/core/apply-mode.js +23 -2
  135. package/dist/core/apply-mode.js.map +1 -1
  136. package/dist/core/apply-receipt.d.ts +5 -1
  137. package/dist/core/apply-receipt.d.ts.map +1 -1
  138. package/dist/core/apply-receipt.js.map +1 -1
  139. package/dist/core/config.d.ts +24 -12
  140. package/dist/core/config.d.ts.map +1 -1
  141. package/dist/core/config.js.map +1 -1
  142. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  143. package/dist/core/lisa-owned-hash-ledger.js +8 -0
  144. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  145. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  146. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  147. package/dist/core/upstream-evidence-manifest.js +63 -15
  148. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  149. package/dist/migrations/ensure-lisa-postinstall.d.ts +1 -1
  150. package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
  151. package/dist/migrations/ensure-lisa-postinstall.js +28 -5
  152. package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
  153. package/dist/utils/postinstall-trampoline-source.js +10 -1
  154. package/dist/utils/postinstall-trampoline-source.js.map +1 -1
  155. package/expo/package-lisa/package.lisa.json +14 -14
  156. package/harper-fabric/package-lisa/package.lisa.json +8 -3
  157. package/nestjs/create-only/vitest.config.local.ts +5 -1
  158. package/nestjs/package-lisa/package.lisa.json +14 -8
  159. package/npm-package/package-lisa/package.lisa.json +8 -0
  160. package/package.json +17 -13
  161. package/phaser/package-lisa/package.lisa.json +9 -3
  162. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  163. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  164. package/plugins/lisa/hooks/sonar-secrets.sh +3 -2
  165. package/plugins/lisa-agy/plugin.json +1 -1
  166. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  167. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  168. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  169. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  170. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  171. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  172. package/plugins/lisa-copilot/hooks/sonar-secrets.sh +3 -2
  173. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  174. package/plugins/lisa-cursor/hooks/sonar-secrets.sh +3 -2
  175. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  176. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  177. package/plugins/lisa-expo-agy/plugin.json +1 -1
  178. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  179. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  180. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  181. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  182. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  183. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  184. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  185. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  186. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  187. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  188. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  189. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  190. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  191. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  192. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  193. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  194. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  195. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  196. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  197. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  198. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  199. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  200. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  201. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  202. package/plugins/lisa-rails-agy/plugin.json +1 -1
  203. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  204. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  205. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  206. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  207. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  208. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  209. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  210. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  211. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  212. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  213. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  214. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  215. package/plugins/src/base/hooks/sonar-secrets.sh +3 -2
  216. package/scripts/install-claude-plugins.sh +7 -2
  217. package/typescript/create-only/vitest.config.local.ts +5 -1
  218. package/typescript/package-lisa/package.lisa.json +14 -8
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scratch-leak-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-leak-setup.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-leak-setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Per-suite backstop that makes a leaked fixture fail the suite that leaked it.
3
+ *
4
+ * The worker-wide run root is still removed wholesale on exit and reclaimed by
5
+ * a successor after SIGKILL. This hook is the attribution layer: it snapshots
6
+ * the run-root children before collection, runs last after every user
7
+ * `afterAll`, removes anything added by the suite, and fails on additions whose
8
+ * prefix was not registered before collection.
9
+ * @module configs/vitest/scratch-leak-setup
10
+ */
11
+ import * as fs from "node:fs";
12
+ import { tmpdir } from "node:os";
13
+ import * as path from "node:path";
14
+ import { afterAll } from "vitest";
15
+ import { readBoundedScratchNames, removeAuthorizedScratchChildren, } from "./scratch-authority.js";
16
+ import { SCRATCH_OWNER_FILE, readScratchOwnerRecord } from "./scratch-owner.js";
17
+ /** Run root whose children this suite owns. */
18
+ const runRoot = tmpdir();
19
+ /** Fail immediately if the setup order did not install scratch first. */
20
+ if (!path.basename(runRoot).startsWith("worker-")) {
21
+ throw new Error(`Scratch leak guard started before scratch redirection: ${runRoot}`);
22
+ }
23
+ /** Owner record binds the prefix registry and path identity to this root. */
24
+ const owner = readScratchOwnerRecord(runRoot);
25
+ /** Direct children present before this suite imports any test module. */
26
+ const baseline = new Set([
27
+ ...readBoundedScratchNames(runRoot),
28
+ SCRATCH_OWNER_FILE,
29
+ ]);
30
+ /**
31
+ * Render the prefix a mkdtemp-shaped basename came from.
32
+ * @param name - Direct scratch child basename
33
+ * @returns Display prefix
34
+ */
35
+ function displayedPrefix(name) {
36
+ return /^[\s\S]*[A-Za-z0-9]{6}$/u.test(name) ? `${name.slice(0, -6)}*` : name;
37
+ }
38
+ /**
39
+ * Remove every classified addition through one inode-bound cleanup process.
40
+ * @param names - Direct scratch child basenames
41
+ */
42
+ function removeInternalChildren(names) {
43
+ for (const name of names) {
44
+ if (path.basename(name) !== name || name === "." || name === "..") {
45
+ throw new Error(`Scratch leak guard refused non-basename child: ${name}`);
46
+ }
47
+ }
48
+ const before = fs.lstatSync(runRoot);
49
+ if (before.dev !== owner.root.dev ||
50
+ before.ino !== owner.root.ino ||
51
+ fs.realpathSync(runRoot) !== owner.root.canonicalPath) {
52
+ throw new Error("Scratch run-root identity changed before leak cleanup");
53
+ }
54
+ const marker = readScratchOwnerRecord(runRoot);
55
+ if (marker.token !== owner.token) {
56
+ throw new Error("Scratch owner marker changed before leak cleanup");
57
+ }
58
+ removeAuthorizedScratchChildren({
59
+ parent: owner.root,
60
+ basenames: names,
61
+ });
62
+ if (readScratchOwnerRecord(runRoot).token !== owner.token) {
63
+ throw new Error("Scratch owner marker changed during leak cleanup");
64
+ }
65
+ }
66
+ /**
67
+ * Read the run root or throw a suite-attributed diagnostic.
68
+ * @returns Current direct-child basenames
69
+ */
70
+ function readRunRootNames() {
71
+ try {
72
+ return readBoundedScratchNames(runRoot);
73
+ }
74
+ catch (error) {
75
+ throw new Error(`Scratch leak guard could not read suite root ${runRoot}: ${String(error)}`);
76
+ }
77
+ }
78
+ /**
79
+ * Whether one addition belongs to a prefix registered before collection.
80
+ * @param name - Added direct-child basename
81
+ * @returns Whether the stack registered ownership
82
+ */
83
+ function isRegisteredAddition(name) {
84
+ return owner.registeredPrefixes.some(prefix => name.startsWith(prefix));
85
+ }
86
+ /**
87
+ * Audit direct additions after user hooks, clean every one, and fail on any
88
+ * prefix the stack did not register before collection.
89
+ */
90
+ afterAll(() => {
91
+ const names = readRunRootNames();
92
+ const additions = names.filter(name => !baseline.has(name));
93
+ const unregistered = additions.filter(name => !isRegisteredAddition(name));
94
+ try {
95
+ removeInternalChildren(additions);
96
+ }
97
+ catch (error) {
98
+ throw new Error(`Scratch leak guard could not clean ${additions.join(", ")} for suite ${owner.suiteLabel}: ${String(error)}`);
99
+ }
100
+ if (unregistered.length > 0) {
101
+ const details = [...unregistered]
102
+ .sort((left, right) => left.localeCompare(right))
103
+ .map(name => `${name} (${displayedPrefix(name)})`)
104
+ .join(", ");
105
+ throw new Error(`Suite ${owner.suiteLabel} leaked ${String(unregistered.length)} unregistered scratch fixture(s): ${details}`);
106
+ }
107
+ });
108
+ //# sourceMappingURL=scratch-leak-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-leak-setup.js","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-leak-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { parseScratchRunRootName, scratchRunRootName, type ScratchPathIdentity } from "./scratch-owner.js";
2
+ /** Public compatibility name for the exact managed namespace. */
3
+ export declare const SCRATCH_NAMESPACE = "lisa-scratch";
4
+ /** Prefix identifying a per-process run root inside the namespace. */
5
+ export declare const RUN_ROOT_PREFIX = "run-";
6
+ /** Legacy default retained for callers; age alone never authorizes deletion. */
7
+ export declare const DEFAULT_RECLAIM_AGE_MS: number;
8
+ /** Absolute cap shared by startup inspection and destructive sweeps. */
9
+ export declare const MAX_SCRATCH_NAMESPACE_SCAN_ENTRIES = 120000;
10
+ /** Maximum UTF-8 bytes accepted in one direct namespace basename. */
11
+ export declare const MAX_SCRATCH_NAMESPACE_NAME_BYTES = 1024;
12
+ /** Maximum direct entries one already-authorized suite audit may retain. */
13
+ export declare const SCRATCH_DIRECT_ENTRY_LIMIT = 100000;
14
+ /** Maximum UTF-8 bytes in one authorized direct-child basename. */
15
+ export declare const SCRATCH_DIRECT_NAME_BYTES = 1024;
16
+ /** Recognisable quarantine prefix, with a random suffix per removal. */
17
+ export declare const SCRATCH_QUARANTINE_PREFIX = ".lisa-quarantine-";
18
+ /** Namespace identity plus local ownership facts. */
19
+ export interface ScratchNamespaceIdentity extends ScratchPathIdentity {
20
+ readonly uid: number | undefined;
21
+ }
22
+ /** Authority required before any destructive scratch operation. */
23
+ export interface ScratchNamespaceAuthority {
24
+ readonly baseCanonicalPath: string;
25
+ readonly namespace: ScratchNamespaceIdentity;
26
+ }
27
+ /**
28
+ * Resolve the only public platform-temp authority.
29
+ * @returns Logical platform temp root
30
+ */
31
+ export declare const scratchBaseDir: () => string;
32
+ /**
33
+ * Resolve the shared namespace directory.
34
+ * @returns Managed namespace path
35
+ */
36
+ export declare const scratchNamespaceDir: () => string;
37
+ /** Build one unique direct run-root basename. */
38
+ export declare const runRootName: typeof scratchRunRootName;
39
+ /** Parse one recognized direct run-root basename. */
40
+ export declare const parseRunRootName: typeof parseScratchRunRootName;
41
+ /**
42
+ * Consume injected direct namespace basenames under the 120k hard bound.
43
+ * @param names - Direct namespace basenames
44
+ * @returns Deterministically sorted names
45
+ */
46
+ export declare function collectBoundedScratchNamespaceNames(names: Iterable<string>): readonly string[];
47
+ /**
48
+ * Stream one real namespace without following direct children.
49
+ * @param dir - Namespace path
50
+ * @returns Validated direct basenames
51
+ */
52
+ export declare function readBoundedScratchNamespace(dir: string): readonly string[];
53
+ /**
54
+ * Validate one direct-name stream under the distinct 100k suite bound.
55
+ * @param names - Direct basename stream
56
+ * @returns Validated names in source order
57
+ */
58
+ export declare function collectBoundedScratchNames(names: Iterable<string>): readonly string[];
59
+ /**
60
+ * Stream one already-authorized directory under the 100k suite bound.
61
+ * @param directory - Authorized suite directory
62
+ * @returns Validated direct basenames
63
+ */
64
+ export declare function readBoundedScratchNames(directory: string): readonly string[];
65
+ /**
66
+ * Establish and pin the canonical scratch namespace.
67
+ * @returns Filesystem authority for its exact direct `lisa-scratch` child
68
+ */
69
+ export declare function createScratchNamespaceAuthority(): ScratchNamespaceAuthority;
70
+ /**
71
+ * Revalidate that the namespace is still the directory authority pinned.
72
+ * @param authority - Captured namespace authority
73
+ */
74
+ export declare function assertScratchNamespaceAuthority(authority: ScratchNamespaceAuthority): void;
75
+ /**
76
+ * Resolve authority for an existing exact namespace without creating it.
77
+ * @returns Captured authority, or undefined when absent
78
+ */
79
+ export declare function authorityForExistingScratchNamespace(): ScratchNamespaceAuthority | undefined;
80
+ //# sourceMappingURL=scratch-namespace-authority.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-namespace-authority.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-namespace-authority.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,uBAAuB,EACvB,kBAAkB,EAElB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAK5B,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,iBAA+B,CAAC;AAE9D,sEAAsE;AACtE,eAAO,MAAM,eAAe,SAA0B,CAAC;AAEvD,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,QAAqB,CAAC;AAEzD,wEAAwE;AACxE,eAAO,MAAM,kCAAkC,SAAU,CAAC;AAE1D,qEAAqE;AACrE,eAAO,MAAM,gCAAgC,OAAQ,CAAC;AAEtD,4EAA4E;AAC5E,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAElD,mEAAmE;AACnE,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAE/C,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D,qDAAqD;AACrD,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,mEAAmE;AACnE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC;CAC9C;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAO,MAAqB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAO,MACS,CAAC;AAEjD,iDAAiD;AACjD,eAAO,MAAM,WAAW,2BAAqB,CAAC;AAE9C,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,gCAA0B,CAAC;AAWxD;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GACtB,SAAS,MAAM,EAAE,CA0BnB;AAoBD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAgB1E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GACtB,SAAS,MAAM,EAAE,CAiBnB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAe5E;AAiFD;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,yBAAyB,CAiB3E;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,yBAAyB,GACnC,IAAI,CAqBN;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,IAChD,yBAAyB,GACzB,SAAS,CAuBZ"}
@@ -0,0 +1,291 @@
1
+ /** Canonical platform-temp namespace capture and immutable identity authority. */
2
+ import * as fs from "node:fs";
3
+ import * as os from "node:os";
4
+ import * as path from "node:path";
5
+ import { SCRATCH_RUN_ROOT_PREFIX, parseScratchRunRootName, scratchRunRootName, scratchPathIdentity, } from "./scratch-owner.js";
6
+ /** Exact shared namespace basename used by the authority implementation. */
7
+ const AUTHORIZED_SCRATCH_NAMESPACE = "lisa-scratch";
8
+ /** Public compatibility name for the exact managed namespace. */
9
+ export const SCRATCH_NAMESPACE = AUTHORIZED_SCRATCH_NAMESPACE;
10
+ /** Prefix identifying a per-process run root inside the namespace. */
11
+ export const RUN_ROOT_PREFIX = SCRATCH_RUN_ROOT_PREFIX;
12
+ /** Legacy default retained for callers; age alone never authorizes deletion. */
13
+ export const DEFAULT_RECLAIM_AGE_MS = 6 * 60 * 60 * 1000;
14
+ /** Absolute cap shared by startup inspection and destructive sweeps. */
15
+ export const MAX_SCRATCH_NAMESPACE_SCAN_ENTRIES = 120_000;
16
+ /** Maximum UTF-8 bytes accepted in one direct namespace basename. */
17
+ export const MAX_SCRATCH_NAMESPACE_NAME_BYTES = 1_024;
18
+ /** Maximum direct entries one already-authorized suite audit may retain. */
19
+ export const SCRATCH_DIRECT_ENTRY_LIMIT = 100_000;
20
+ /** Maximum UTF-8 bytes in one authorized direct-child basename. */
21
+ export const SCRATCH_DIRECT_NAME_BYTES = 1_024;
22
+ /** Recognisable quarantine prefix, with a random suffix per removal. */
23
+ export const SCRATCH_QUARANTINE_PREFIX = ".lisa-quarantine-";
24
+ /**
25
+ * Resolve the only public platform-temp authority.
26
+ * @returns Logical platform temp root
27
+ */
28
+ export const scratchBaseDir = () => os.tmpdir();
29
+ /**
30
+ * Resolve the shared namespace directory.
31
+ * @returns Managed namespace path
32
+ */
33
+ export const scratchNamespaceDir = () => path.join(scratchBaseDir(), SCRATCH_NAMESPACE);
34
+ /** Build one unique direct run-root basename. */
35
+ export const runRootName = scratchRunRootName;
36
+ /** Parse one recognized direct run-root basename. */
37
+ export const parseRunRootName = parseScratchRunRootName;
38
+ /**
39
+ * Stable code-point ordering independent of host locale.
40
+ * @param left - Left basename
41
+ * @param right - Right basename
42
+ * @returns Sort comparator result
43
+ */
44
+ const codePointCompare = (left, right) => left === right ? 0 : left < right ? -1 : 1;
45
+ /**
46
+ * Consume injected direct namespace basenames under the 120k hard bound.
47
+ * @param names - Direct namespace basenames
48
+ * @returns Deterministically sorted names
49
+ */
50
+ export function collectBoundedScratchNamespaceNames(names) {
51
+ const collected = [];
52
+ for (const name of names) {
53
+ if (name === "" ||
54
+ name === "." ||
55
+ name === ".." ||
56
+ name.includes("/") ||
57
+ name.includes("\\")) {
58
+ throw new Error(`Scratch namespace scan refused non-basename: ${name}`);
59
+ }
60
+ if (Buffer.byteLength(name, "utf8") > MAX_SCRATCH_NAMESPACE_NAME_BYTES) {
61
+ throw new Error(`Scratch namespace name exceeds ${String(MAX_SCRATCH_NAMESPACE_NAME_BYTES)} bytes`);
62
+ }
63
+ if (collected.length >= MAX_SCRATCH_NAMESPACE_SCAN_ENTRIES) {
64
+ throw new Error(`Scratch namespace scan exceeds ${String(MAX_SCRATCH_NAMESPACE_SCAN_ENTRIES)} entries`);
65
+ }
66
+ // eslint-disable-next-line functional/immutable-data -- bounded streaming avoids attacker-sized materialization
67
+ collected.push(name);
68
+ }
69
+ return [...collected].sort(codePointCompare);
70
+ }
71
+ /**
72
+ * Open one real namespace directory while preserving absence.
73
+ * @param dir - Namespace path
74
+ * @returns Open handle, or undefined when absent
75
+ */
76
+ function openScratchNamespace(dir) {
77
+ try {
78
+ const stat = fs.lstatSync(dir);
79
+ if (stat.isSymbolicLink() || !stat.isDirectory()) {
80
+ throw new Error(`Scratch namespace is not a real directory: ${dir}`);
81
+ }
82
+ return fs.opendirSync(dir);
83
+ }
84
+ catch (error) {
85
+ if (error.code === "ENOENT")
86
+ return undefined;
87
+ throw error;
88
+ }
89
+ }
90
+ /**
91
+ * Stream one real namespace without following direct children.
92
+ * @param dir - Namespace path
93
+ * @returns Validated direct basenames
94
+ */
95
+ export function readBoundedScratchNamespace(dir) {
96
+ const directory = openScratchNamespace(dir);
97
+ if (directory === undefined)
98
+ return [];
99
+ try {
100
+ return collectBoundedScratchNamespaceNames((function* entries() {
101
+ for (;;) {
102
+ const entry = directory.readSync();
103
+ if (entry === null)
104
+ return;
105
+ yield entry.name;
106
+ }
107
+ })());
108
+ }
109
+ finally {
110
+ directory.closeSync();
111
+ }
112
+ }
113
+ /**
114
+ * Validate one direct-name stream under the distinct 100k suite bound.
115
+ * @param names - Direct basename stream
116
+ * @returns Validated names in source order
117
+ */
118
+ export function collectBoundedScratchNames(names) {
119
+ const collected = [];
120
+ for (const name of names) {
121
+ if (Buffer.byteLength(name, "utf8") > SCRATCH_DIRECT_NAME_BYTES) {
122
+ throw new Error(`Scratch direct basename exceeds ${String(SCRATCH_DIRECT_NAME_BYTES)} bytes`);
123
+ }
124
+ // eslint-disable-next-line functional/immutable-data -- refuse before retaining the 100001st entry
125
+ collected.push(name);
126
+ if (collected.length > SCRATCH_DIRECT_ENTRY_LIMIT) {
127
+ throw new Error(`Scratch direct entry count exceeds ${String(SCRATCH_DIRECT_ENTRY_LIMIT)}`);
128
+ }
129
+ }
130
+ return collected;
131
+ }
132
+ /**
133
+ * Stream one already-authorized directory under the 100k suite bound.
134
+ * @param directory - Authorized suite directory
135
+ * @returns Validated direct basenames
136
+ */
137
+ export function readBoundedScratchNames(directory) {
138
+ const handle = fs.opendirSync(directory);
139
+ try {
140
+ return collectBoundedScratchNames({
141
+ *[Symbol.iterator]() {
142
+ for (;;) {
143
+ const entry = handle.readSync();
144
+ if (entry === null)
145
+ return;
146
+ yield entry.name;
147
+ }
148
+ },
149
+ });
150
+ }
151
+ finally {
152
+ handle.closeSync();
153
+ }
154
+ }
155
+ /**
156
+ * Return the current uid where the platform supplies one.
157
+ * @returns Current uid or undefined on platforms without uid ownership
158
+ */
159
+ const currentUid = () => process.getuid?.();
160
+ /**
161
+ * Ensure the namespace path exists as a real directory.
162
+ * @param namespacePath - Exact namespace path
163
+ */
164
+ function assertRealDirectory(namespacePath) {
165
+ const existing = fs.lstatSync(namespacePath);
166
+ if (existing.isSymbolicLink()) {
167
+ throw new Error(`Scratch namespace must not be a symlink: ${namespacePath}`);
168
+ }
169
+ if (!existing.isDirectory()) {
170
+ throw new Error(`Scratch namespace is not a directory: ${namespacePath}`);
171
+ }
172
+ }
173
+ /**
174
+ * Create the namespace or accept a concurrent creator only after revalidation.
175
+ * @param namespacePath - Exact namespace path
176
+ */
177
+ function ensureNamespaceDirectory(namespacePath) {
178
+ try {
179
+ assertRealDirectory(namespacePath);
180
+ }
181
+ catch (error) {
182
+ if (error.code !== "ENOENT")
183
+ throw error;
184
+ try {
185
+ fs.mkdirSync(namespacePath, { mode: 0o700 });
186
+ }
187
+ catch (mkdirError) {
188
+ if (mkdirError.code !== "EEXIST") {
189
+ throw mkdirError;
190
+ }
191
+ assertRealDirectory(namespacePath);
192
+ }
193
+ }
194
+ }
195
+ /**
196
+ * Assert local namespace ownership without silently broadening authority.
197
+ * @param namespacePath - Exact namespace path
198
+ */
199
+ function enforceNamespaceOwnership(namespacePath) {
200
+ const stat = fs.lstatSync(namespacePath);
201
+ const uid = currentUid();
202
+ if (uid !== undefined && stat.uid !== uid) {
203
+ throw new Error(`Scratch namespace uid ${String(stat.uid)} does not match current uid ${String(uid)}`);
204
+ }
205
+ if ((stat.mode & 0o777) !== 0o700) {
206
+ throw new Error(`Scratch namespace mode must be 0700: ${namespacePath}`);
207
+ }
208
+ }
209
+ /**
210
+ * Capture the namespace identity after its creation and mode repair.
211
+ * @param namespacePath - Exact namespace path
212
+ * @param baseCanonicalPath - Pinned physical temp base
213
+ * @returns Captured authority
214
+ */
215
+ function captureNamespaceAuthority(namespacePath, baseCanonicalPath) {
216
+ const uid = currentUid();
217
+ const identity = scratchPathIdentity(namespacePath);
218
+ if (path.dirname(identity.canonicalPath) !== baseCanonicalPath) {
219
+ throw new Error("Scratch namespace escaped its canonical temp base");
220
+ }
221
+ return {
222
+ baseCanonicalPath,
223
+ namespace: { ...identity, uid },
224
+ };
225
+ }
226
+ /**
227
+ * Establish and pin the canonical scratch namespace.
228
+ * @returns Filesystem authority for its exact direct `lisa-scratch` child
229
+ */
230
+ export function createScratchNamespaceAuthority() {
231
+ const baseDir = os.tmpdir();
232
+ const baseStat = fs.lstatSync(baseDir);
233
+ if (baseStat.isSymbolicLink()) {
234
+ throw new Error(`Scratch temp base must not be a symlink: ${baseDir}`);
235
+ }
236
+ if (!baseStat.isDirectory()) {
237
+ throw new Error(`Scratch temp base is not a directory: ${baseDir}`);
238
+ }
239
+ const baseCanonicalPath = fs.realpathSync(baseDir);
240
+ const namespacePath = path.join(baseCanonicalPath, AUTHORIZED_SCRATCH_NAMESPACE);
241
+ ensureNamespaceDirectory(namespacePath);
242
+ enforceNamespaceOwnership(namespacePath);
243
+ return captureNamespaceAuthority(namespacePath, baseCanonicalPath);
244
+ }
245
+ /**
246
+ * Revalidate that the namespace is still the directory authority pinned.
247
+ * @param authority - Captured namespace authority
248
+ */
249
+ export function assertScratchNamespaceAuthority(authority) {
250
+ const current = scratchPathIdentity(authority.namespace.canonicalPath);
251
+ if (current.dev !== authority.namespace.dev ||
252
+ current.ino !== authority.namespace.ino ||
253
+ current.canonicalPath !== authority.namespace.canonicalPath) {
254
+ throw new Error("Scratch namespace identity changed after authority capture");
255
+ }
256
+ const stat = fs.lstatSync(authority.namespace.canonicalPath);
257
+ if ((stat.mode & 0o777) !== 0o700) {
258
+ throw new Error("Scratch namespace mode changed after authority capture");
259
+ }
260
+ if (authority.namespace.uid !== undefined &&
261
+ stat.uid !== authority.namespace.uid) {
262
+ throw new Error("Scratch namespace uid changed after authority capture");
263
+ }
264
+ }
265
+ /**
266
+ * Resolve authority for an existing exact namespace without creating it.
267
+ * @returns Captured authority, or undefined when absent
268
+ */
269
+ export function authorityForExistingScratchNamespace() {
270
+ const dir = path.join(os.tmpdir(), AUTHORIZED_SCRATCH_NAMESPACE);
271
+ try {
272
+ const stat = fs.lstatSync(dir);
273
+ if (stat.isSymbolicLink() || !stat.isDirectory()) {
274
+ throw new Error(`Scratch namespace must be a real directory: ${dir}`);
275
+ }
276
+ }
277
+ catch (error) {
278
+ if (error.code === "ENOENT")
279
+ return undefined;
280
+ throw error;
281
+ }
282
+ if (path.basename(dir) !== AUTHORIZED_SCRATCH_NAMESPACE) {
283
+ throw new Error(`Scratch namespace must be the exact ${AUTHORIZED_SCRATCH_NAMESPACE} child`);
284
+ }
285
+ const authority = createScratchNamespaceAuthority();
286
+ if (fs.realpathSync(dir) !== authority.namespace.canonicalPath) {
287
+ throw new Error("Scratch namespace path does not match canonical authority");
288
+ }
289
+ return authority;
290
+ }
291
+ //# sourceMappingURL=scratch-namespace-authority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-namespace-authority.js","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-namespace-authority.ts"],"names":[],"mappings":"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"}