audit-tools 0.55.9 → 0.55.10

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 (29) hide show
  1. package/dist/audit/cli/auditStep.d.ts +1 -1
  2. package/dist/audit/cli/dispatch/packetFilter.d.ts +1 -1
  3. package/dist/audit/cli/functionalPreflight.d.ts +4 -4
  4. package/dist/audit/cli/sampleRunCommand.d.ts +1 -1
  5. package/dist/audit/cli/steps.d.ts +2 -2
  6. package/dist/audit/contracts/workerSchemas.d.ts +14 -14
  7. package/dist/audit/contracts/wrapperResponse.d.ts +8 -8
  8. package/dist/audit/orchestrator/requeueCommand.d.ts +1 -1
  9. package/dist/audit/types/auditState.d.ts +2 -2
  10. package/dist/audit/types/reviewPlanning.d.ts +2 -2
  11. package/dist/audit/types.d.ts +12 -12
  12. package/dist/remediate/intake.d.ts +2 -2
  13. package/dist/shared/tooling/allowlistedExec.d.ts +3 -0
  14. package/dist/shared/tooling/allowlistedExec.d.ts.map +1 -1
  15. package/dist/shared/tooling/allowlistedExec.js +54 -31
  16. package/dist/shared/tooling/allowlistedExec.js.map +1 -1
  17. package/dist/shared/tooling/exec.d.ts +4 -1
  18. package/dist/shared/tooling/exec.d.ts.map +1 -1
  19. package/dist/shared/tooling/exec.js +76 -71
  20. package/dist/shared/tooling/exec.js.map +1 -1
  21. package/dist/shared/tooling/ownedProcessLifecycle.d.ts +30 -0
  22. package/dist/shared/tooling/ownedProcessLifecycle.d.ts.map +1 -0
  23. package/dist/shared/tooling/ownedProcessLifecycle.js +99 -0
  24. package/dist/shared/tooling/ownedProcessLifecycle.js.map +1 -0
  25. package/dist/shared/tooling/windowsOwnedJob.d.ts +35 -0
  26. package/dist/shared/tooling/windowsOwnedJob.d.ts.map +1 -0
  27. package/dist/shared/tooling/windowsOwnedJob.js +145 -0
  28. package/dist/shared/tooling/windowsOwnedJob.js.map +1 -0
  29. package/package.json +2 -1
@@ -0,0 +1,99 @@
1
+ // sites-pinned: tests/shared/exec-owned-bounds.test.ts, tests/shared/exec-utf8-capture.test.ts, tests/shared/allowlisted-exec-runner-internals.test.ts
2
+ import { spawn } from "node:child_process";
3
+ import { fileURLToPath } from "node:url";
4
+ import { isOwnedJobMessage } from "./windowsOwnedJob.js";
5
+ /** One bound's TERM grace plus a finite hard-kill/capture-drain window. */
6
+ export const OWNED_PROCESS_DRAIN_GRACE_MS = 1_000;
7
+ export const OWNED_PROCESS_TERM_GRACE_MS = 2_000;
8
+ /** Shared referenced cleanup clock; callers retain their own error/capture contract. */
9
+ export function beginOwnedProcessTermination(owned, onEscalate, onDrainLimit) {
10
+ const escalation = setTimeout(() => { onEscalate(); owned.terminate("SIGKILL"); }, OWNED_PROCESS_TERM_GRACE_MS);
11
+ const drain = setTimeout(() => { owned.terminate("SIGKILL"); onDrainLimit(); }, OWNED_PROCESS_TERM_GRACE_MS + OWNED_PROCESS_DRAIN_GRACE_MS);
12
+ owned.terminate("SIGTERM");
13
+ return () => { clearTimeout(escalation); clearTimeout(drain); };
14
+ }
15
+ /** Ordinary descendant ownership; neither process groups nor Jobs are a sandbox. */
16
+ export function spawnOwnedProcess(argv, options) {
17
+ const windows = process.platform === "win32";
18
+ let stopped = false;
19
+ let rootExited = false;
20
+ let rootStatus = null;
21
+ let rootSignal = null;
22
+ let emptyObserved = false;
23
+ let terminationError;
24
+ // Both src and dist tooling live three levels beneath the package root.
25
+ // The normal build publishes this executable helper in dist/**.
26
+ const helper = fileURLToPath(new URL("../../../dist/shared/tooling/windowsOwnedJob.js", import.meta.url));
27
+ const child = (windows
28
+ ? spawn(process.execPath, [helper], { cwd: options.cwd, env: { ...options.env, NODE_OPTIONS: undefined }, stdio: ["pipe", "pipe", "pipe", "ipc"], windowsHide: true, shell: false })
29
+ : spawn(argv[0], argv.slice(1), { cwd: options.cwd, env: options.env, stdio: ["pipe", "pipe", "pipe"], windowsHide: true, shell: false, detached: true }));
30
+ if (windows) {
31
+ child.on("message", (message) => {
32
+ if (!isOwnedJobMessage(message))
33
+ return;
34
+ switch (message.type) {
35
+ case "ready":
36
+ if (!stopped && child.connected && (options.deadlineAt === undefined || Date.now() < options.deadlineAt))
37
+ child.send({ argv, env: options.env, deadlineAt: options.deadlineAt }, (error) => { if (error && !stopped)
38
+ child.emit("error", error); });
39
+ break;
40
+ case "root_exit":
41
+ rootExited = true;
42
+ rootStatus = message.code;
43
+ rootSignal = message.signal;
44
+ break;
45
+ case "empty":
46
+ emptyObserved = true;
47
+ break;
48
+ case "error":
49
+ child.emit("error", Object.assign(new Error(message.message), { code: message.code }));
50
+ break;
51
+ case "started": break;
52
+ }
53
+ });
54
+ }
55
+ else {
56
+ child.once("exit", (code, signal) => { rootExited = true; rootStatus = code; rootSignal = signal; });
57
+ }
58
+ const terminate = (signal) => {
59
+ stopped = true;
60
+ try {
61
+ if (windows) {
62
+ if (!child.kill(signal) && child.exitCode === null && child.signalCode === null)
63
+ terminationError = "owner termination not confirmed";
64
+ }
65
+ else if (child.pid !== undefined && child.pid > 0 && child.pid !== process.pid)
66
+ process.kill(-child.pid, signal);
67
+ }
68
+ catch (error) {
69
+ const code = error.code;
70
+ if (code !== "ESRCH")
71
+ terminationError = code ?? "owned process termination failed";
72
+ }
73
+ };
74
+ const cleanup = (stdioIncomplete) => {
75
+ if (!windows && child.pid !== undefined) {
76
+ try {
77
+ process.kill(-child.pid, 0);
78
+ }
79
+ catch (error) {
80
+ if (error.code === "ESRCH")
81
+ emptyObserved = true;
82
+ }
83
+ }
84
+ return { scope: windows ? "windows_job" : "process_group", root_exit_observed: rootExited, stdio_incomplete: stdioIncomplete, cleanup_verified: emptyObserved, ...(terminationError ? { termination_error: terminationError } : {}) };
85
+ };
86
+ const release = () => {
87
+ stopped = true;
88
+ // A still-live Windows helper must not survive a terminal fallback/error.
89
+ // Its disconnect handler closes the sole Job handle through process exit.
90
+ if (windows && child.connected) {
91
+ try {
92
+ child.disconnect();
93
+ }
94
+ catch { /* already disconnected */ }
95
+ }
96
+ };
97
+ return { child, terminate, cleanup, release, rootExited: () => rootExited, rootStatus: () => rootStatus, rootSignal: () => rootSignal };
98
+ }
99
+ //# sourceMappingURL=ownedProcessLifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownedProcessLifecycle.js","sourceRoot":"","sources":["../../../src/shared/tooling/ownedProcessLifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ export type OwnedJobMessage = {
3
+ type: "ready";
4
+ } | {
5
+ type: "started";
6
+ pid: number;
7
+ } | {
8
+ type: "root_exit";
9
+ code: number | null;
10
+ signal: string | null;
11
+ } | {
12
+ type: "empty";
13
+ } | {
14
+ type: "error";
15
+ message: string;
16
+ code: string;
17
+ };
18
+ /** The inherited IPC channel carries lifecycle metadata, never target output. */
19
+ export declare function isOwnedJobMessage(value: unknown): value is OwnedJobMessage;
20
+ export interface WindowsJobRuntime {
21
+ platform: NodeJS.Platform;
22
+ send(message: OwnedJobMessage, done?: () => void): void;
23
+ onStart(handler: (payload: unknown) => void): void;
24
+ onDisconnect(handler: () => void): void;
25
+ spawn(argv: string[], env: NodeJS.ProcessEnv): ChildProcess;
26
+ closeInheritedStdio(): void;
27
+ exit(code: number): void;
28
+ }
29
+ export interface WindowsJobOwnership {
30
+ activeCount(): number;
31
+ releaseEmpty(): void;
32
+ }
33
+ /** Injectable protocol/ownership seams never send synthetic identities to OS APIs. */
34
+ export declare function runWindowsOwnedJob(runtime: WindowsJobRuntime, createJob?: () => Promise<WindowsJobOwnership>): Promise<void>;
35
+ //# sourceMappingURL=windowsOwnedJob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windowsOwnedJob.d.ts","sourceRoot":"","sources":["../../../src/shared/tooling/windowsOwnedJob.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI9D,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAS1E;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACxD,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IACnD,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC;IAC5D,mBAAmB,IAAI,IAAI,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,IAAI,MAAM,CAAC;IACtB,YAAY,IAAI,IAAI,CAAC;CACtB;AAoCD,sFAAsF;AACtF,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,GAAE,MAAM,OAAO,CAAC,mBAAmB,CAAmB,GAC9D,OAAO,CAAC,IAAI,CAAC,CAyDf"}
@@ -0,0 +1,145 @@
1
+ // sites-pinned: tests/shared/windows-owned-job.test.ts, tests/shared/exec-owned-bounds.test.ts
2
+ import { spawn } from "node:child_process";
3
+ import { closeSync } from "node:fs";
4
+ import { fileURLToPath } from "node:url";
5
+ /** The inherited IPC channel carries lifecycle metadata, never target output. */
6
+ export function isOwnedJobMessage(value) {
7
+ if (!value || typeof value !== "object" || !("type" in value))
8
+ return false;
9
+ switch (value.type) {
10
+ case "ready":
11
+ case "empty": return true;
12
+ case "started": return "pid" in value && Number.isSafeInteger(value.pid) && Number(value.pid) > 0;
13
+ case "root_exit": return "code" in value && (value.code === null || Number.isInteger(value.code)) && "signal" in value && (value.signal === null || typeof value.signal === "string");
14
+ case "error": return "message" in value && typeof value.message === "string" && "code" in value && typeof value.code === "string";
15
+ default: return false;
16
+ }
17
+ }
18
+ async function createNativeJob() {
19
+ const { default: koffi } = await import("koffi");
20
+ const kernel = koffi.load("kernel32.dll");
21
+ // Koffi lays out pointer-sized fields for the running ABI; no x64 offsets.
22
+ const basic = koffi.struct({ user: "int64_t", jobUser: "int64_t", flags: "uint32_t", min: "size_t", max: "size_t", count: "uint32_t", affinity: "uintptr_t", priority: "uint32_t", scheduling: "uint32_t" });
23
+ const limits = koffi.struct({ basic, io: koffi.array("uint64_t", 6), processMemory: "size_t", jobMemory: "size_t", peakProcess: "size_t", peakJob: "size_t" });
24
+ const accounting = koffi.struct({ user: "int64_t", kernel: "int64_t", periodUser: "int64_t", periodKernel: "int64_t", pageFaults: "uint32_t", total: "uint32_t", active: "uint32_t", terminated: "uint32_t" });
25
+ const create = kernel.func("void * __stdcall CreateJobObjectW(void *, str16)");
26
+ const set = kernel.func("__stdcall", "SetInformationJobObject", "int", ["void *", "int", koffi.pointer(limits), "uint32_t"]);
27
+ const assign = kernel.func("int __stdcall AssignProcessToJobObject(void *, void *)");
28
+ const current = kernel.func("void * __stdcall GetCurrentProcess()");
29
+ const query = kernel.func("__stdcall", "QueryInformationJobObject", "int", ["void *", "int", koffi.out(koffi.pointer(accounting)), "uint32_t", "void *"]);
30
+ const close = kernel.func("int __stdcall CloseHandle(void *)");
31
+ const lastError = kernel.func("uint32_t __stdcall GetLastError()");
32
+ const values = { basic: { user: 0, jobUser: 0, flags: 0x2000, min: 0, max: 0, count: 0, affinity: 0, priority: 0, scheduling: 0 }, io: [0, 0, 0, 0, 0, 0], processMemory: 0, jobMemory: 0, peakProcess: 0, peakJob: 0 };
33
+ // Null security attributes make this sole Job handle noninheritable. Assign
34
+ // OURSELVES before launching target code: no create-then-assign fork race.
35
+ const job = create(null, null);
36
+ if (!job || !set(job, 9, values, koffi.sizeof(limits)) || !assign(job, current())) {
37
+ if (job)
38
+ close(job);
39
+ throw new Error(`Windows Job ownership setup failed (${String(lastError())})`);
40
+ }
41
+ const activeCount = () => {
42
+ const info = {};
43
+ if (!query(job, 1, info, koffi.sizeof(accounting), null) || typeof info.active !== "number" || !Number.isInteger(info.active) || info.active < 1)
44
+ throw new Error(`Windows Job accounting failed (${String(lastError())})`);
45
+ return info.active;
46
+ };
47
+ return { activeCount, releaseEmpty() {
48
+ if (activeCount() !== 1)
49
+ throw new Error("Windows Job still owns target processes");
50
+ values.basic.flags = 0;
51
+ if (!set(job, 9, values, koffi.sizeof(limits)) || !close(job))
52
+ throw new Error(`Windows Job release failed (${String(lastError())})`);
53
+ } };
54
+ }
55
+ /** Injectable protocol/ownership seams never send synthetic identities to OS APIs. */
56
+ export async function runWindowsOwnedJob(runtime, createJob = createNativeJob) {
57
+ if (runtime.platform !== "win32")
58
+ throw new Error("owned Job helper requires Windows");
59
+ const job = await createJob();
60
+ let poll;
61
+ const exit = (code) => { clearInterval(poll); runtime.exit(code); };
62
+ // Unexpected owner disappearance closes the last handle and terminates all
63
+ // ordinary Job members. No breakaway flags and no process-name discovery.
64
+ runtime.onDisconnect(() => exit(1));
65
+ const releaseEmptyJob = (code) => {
66
+ try {
67
+ job.releaseEmpty();
68
+ runtime.send({ type: "empty" }, () => exit(code));
69
+ }
70
+ catch (error) {
71
+ runtime.send({ type: "error", code: "EOWNERSHIP", message: error instanceof Error ? error.message : "Windows Job release failed" });
72
+ exit(1);
73
+ }
74
+ };
75
+ runtime.onStart((payload) => {
76
+ try {
77
+ if (!payload || typeof payload !== "object" || !("argv" in payload) || !Array.isArray(payload.argv) || payload.argv.length === 0 || !payload.argv.every((part) => typeof part === "string"))
78
+ throw new Error("invalid owned Job start message");
79
+ if (!("env" in payload) || !payload.env || typeof payload.env !== "object")
80
+ throw new Error("missing owned Job environment");
81
+ if ("deadlineAt" in payload && typeof payload.deadlineAt === "number" && Date.now() >= payload.deadlineAt) {
82
+ runtime.send({ type: "error", code: "ETIMEDOUT", message: "owned subprocess deadline expired before target start" });
83
+ releaseEmptyJob(1);
84
+ return;
85
+ }
86
+ const child = runtime.spawn(payload.argv, payload.env);
87
+ child.once("spawn", () => {
88
+ if (child.pid)
89
+ runtime.send({ type: "started", pid: child.pid });
90
+ // The target has inherited its copies. The helper must not itself keep
91
+ // capture writers or the input reader open while descendants run.
92
+ runtime.closeInheritedStdio();
93
+ });
94
+ child.once("error", (error) => {
95
+ runtime.send({ type: "error", code: error.code ?? "EOWNERSHIP", message: error.message });
96
+ releaseEmptyJob(1);
97
+ });
98
+ child.once("exit", (code, signal) => {
99
+ runtime.send({ type: "root_exit", code, signal });
100
+ poll = setInterval(() => {
101
+ try {
102
+ if (job.activeCount() !== 1)
103
+ return;
104
+ clearInterval(poll);
105
+ releaseEmptyJob(code ?? 1);
106
+ }
107
+ catch (error) {
108
+ clearInterval(poll);
109
+ runtime.send({ type: "error", code: "EOWNERSHIP", message: error instanceof Error ? error.message : "Windows Job accounting failed" });
110
+ exit(1);
111
+ }
112
+ }, 10);
113
+ });
114
+ }
115
+ catch (error) {
116
+ runtime.send({ type: "error", code: "EOWNERSHIP", message: error instanceof Error ? error.message : "Windows Job start failed" });
117
+ exit(1);
118
+ }
119
+ });
120
+ runtime.send({ type: "ready" });
121
+ }
122
+ if (process.argv[1] === fileURLToPath(import.meta.url)) {
123
+ if (!process.send)
124
+ process.exit(1);
125
+ runWindowsOwnedJob({
126
+ platform: process.platform,
127
+ send: (message, done) => { if (done)
128
+ process.send?.(message, done);
129
+ else
130
+ process.send?.(message); },
131
+ onStart: (handler) => { process.once("message", handler); },
132
+ onDisconnect: (handler) => { process.once("disconnect", handler); },
133
+ spawn: (argv, env) => spawn(argv[0], argv.slice(1), { env, stdio: "inherit", windowsHide: true, shell: false }),
134
+ closeInheritedStdio: () => { for (const fd of [0, 1, 2]) {
135
+ try {
136
+ closeSync(fd);
137
+ }
138
+ catch { /* already closed */ }
139
+ } },
140
+ exit: (code) => { process.exit(code); },
141
+ }).catch((error) => {
142
+ process.send?.({ type: "error", code: "EOWNERSHIP", message: error instanceof Error ? error.message : "Windows Job setup failed" }, () => process.exit(1));
143
+ });
144
+ }
145
+ //# sourceMappingURL=windowsOwnedJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windowsOwnedJob.js","sourceRoot":"","sources":["../../../src/shared/tooling/windowsOwnedJob.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AASzC,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5E,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO,CAAC;QAAC,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;QACxC,KAAK,SAAS,CAAC,CAAC,OAAO,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClG,KAAK,WAAW,CAAC,CAAC,OAAO,MAAM,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QACtL,KAAK,OAAO,CAAC,CAAC,OAAO,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;QAClI,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;IACxB,CAAC;AACH,CAAC;AAiBD,KAAK,UAAU,eAAe;IAC5B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1C,2EAA2E;IAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAC7M,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/J,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAC/M,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7H,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1J,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACxN,4EAA4E;IAC5E,2EAA2E;IAC3E,MAAM,GAAG,GAAY,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAClF,IAAI,GAAG;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,WAAW,GAAG,GAAW,EAAE;QAC/B,MAAM,IAAI,GAAwB,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QAC5N,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC,CAAC;IACF,OAAO,EAAE,WAAW,EAAE,YAAY;YAChC,IAAI,WAAW,EAAE,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACpF,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACxI,CAAC,EAAE,CAAC;AACN,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA0B,EAC1B,YAAgD,eAAe;IAE/D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvF,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9B,IAAI,IAAgC,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAQ,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,2EAA2E;IAC3E,0EAA0E;IAC1E,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAQ,EAAE;QAC7C,IAAI,CAAC;YACH,GAAG,CAAC,YAAY,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,EAAE,CAAC,CAAC;YACpI,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,CAAC,OAAgB,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACzP,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC7H,IAAI,YAAY,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1G,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC,CAAC;gBACrH,eAAe,CAAC,CAAC,CAAC,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,OAAO,CAAC,GAAwB,CAAC,CAAC;YACxF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,IAAI,KAAK,CAAC,GAAG;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACjE,uEAAuE;gBACvE,kEAAkE;gBAClE,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAChC,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;gBACnD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1F,eAAe,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBAClC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBAClD,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;oBACtB,IAAI,CAAC;wBACH,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC;4BAAE,OAAO;wBACpC,aAAa,CAAC,IAAI,CAAC,CAAC;wBACpB,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;oBAC7B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,aAAa,CAAC,IAAI,CAAC,CAAC;wBACpB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,EAAE,CAAC,CAAC;wBACvI,IAAI,CAAC,CAAC,CAAC,CAAC;oBACV,CAAC;gBACH,CAAC,EAAE,EAAE,CAAC,CAAC;YACT,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC;YAClI,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACvD,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,kBAAkB,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;;YAAM,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnG,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACnE,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAChH,mBAAmB,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC;gBAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC;QACpH,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACxC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC1B,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,EAA4B,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvL,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-tools",
3
- "version": "0.55.9",
3
+ "version": "0.55.10",
4
4
  "private": false,
5
5
  "license": "ISC",
6
6
  "description": "Provider-neutral code auditing and remediation workflows for arbitrary repositories.",
@@ -131,6 +131,7 @@
131
131
  },
132
132
  "dependencies": {
133
133
  "commander": "^13.0.0",
134
+ "koffi": "3.3.3",
134
135
  "smol-toml": "^1.9.0",
135
136
  "strip-json-comments": "^5.0.3",
136
137
  "tree-sitter-wasms": "^0.1.13",