@openrig/cli 0.4.0 → 0.4.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.
Files changed (110) hide show
  1. package/daemon/assets/plugins/openrig-core/hooks/claude.json +11 -0
  2. package/daemon/assets/plugins/openrig-core/hooks/codex.json +14 -3
  3. package/daemon/assets/plugins/openrig-core/hooks/scripts/compaction-restore-bridge.cjs +28 -24
  4. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +72 -11
  5. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +62 -29
  6. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +32 -0
  7. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  8. package/daemon/dist/adapters/codex-runtime-adapter.js +154 -1
  9. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  10. package/daemon/dist/db/migrations/044_queue_item_summary.d.ts +21 -0
  11. package/daemon/dist/db/migrations/044_queue_item_summary.d.ts.map +1 -0
  12. package/daemon/dist/db/migrations/044_queue_item_summary.js +25 -0
  13. package/daemon/dist/db/migrations/044_queue_item_summary.js.map +1 -0
  14. package/daemon/dist/domain/agent-activity-store.js +11 -0
  15. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  16. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  17. package/daemon/dist/domain/claude-compaction-enforcer.js +69 -1
  18. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  19. package/daemon/dist/domain/daemon-version.d.ts +15 -0
  20. package/daemon/dist/domain/daemon-version.d.ts.map +1 -0
  21. package/daemon/dist/domain/daemon-version.js +28 -0
  22. package/daemon/dist/domain/daemon-version.js.map +1 -0
  23. package/daemon/dist/domain/node-cmux-service.d.ts +1 -0
  24. package/daemon/dist/domain/node-cmux-service.d.ts.map +1 -1
  25. package/daemon/dist/domain/node-cmux-service.js +29 -2
  26. package/daemon/dist/domain/node-cmux-service.js.map +1 -1
  27. package/daemon/dist/domain/queue-repository.d.ts +18 -0
  28. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  29. package/daemon/dist/domain/queue-repository.js +18 -0
  30. package/daemon/dist/domain/queue-repository.js.map +1 -1
  31. package/daemon/dist/domain/scope/scope-audit.d.ts +14 -2
  32. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  33. package/daemon/dist/domain/scope/scope-audit.js +95 -0
  34. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  35. package/daemon/dist/domain/scope/types.d.ts +6 -0
  36. package/daemon/dist/domain/scope/types.d.ts.map +1 -1
  37. package/daemon/dist/domain/scope/types.js +8 -0
  38. package/daemon/dist/domain/scope/types.js.map +1 -1
  39. package/daemon/dist/domain/session-transport.d.ts +10 -0
  40. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  41. package/daemon/dist/domain/session-transport.js +153 -19
  42. package/daemon/dist/domain/session-transport.js.map +1 -1
  43. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  44. package/daemon/dist/domain/slices/slice-detail-projector.js +10 -3
  45. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  46. package/daemon/dist/domain/types.d.ts +10 -0
  47. package/daemon/dist/domain/types.d.ts.map +1 -1
  48. package/daemon/dist/domain/types.js.map +1 -1
  49. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +1 -0
  50. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  51. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +25 -1
  52. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  53. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  54. package/daemon/dist/routes/bundles.js +1 -18
  55. package/daemon/dist/routes/bundles.js.map +1 -1
  56. package/daemon/dist/routes/health-summary.d.ts.map +1 -1
  57. package/daemon/dist/routes/health-summary.js +13 -2
  58. package/daemon/dist/routes/health-summary.js.map +1 -1
  59. package/daemon/dist/routes/queue.d.ts.map +1 -1
  60. package/daemon/dist/routes/queue.js +3 -0
  61. package/daemon/dist/routes/queue.js.map +1 -1
  62. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  63. package/daemon/dist/routes/scope-audit.js +28 -1
  64. package/daemon/dist/routes/scope-audit.js.map +1 -1
  65. package/daemon/dist/routes/transport.d.ts.map +1 -1
  66. package/daemon/dist/routes/transport.js +22 -0
  67. package/daemon/dist/routes/transport.js.map +1 -1
  68. package/daemon/dist/startup.d.ts.map +1 -1
  69. package/daemon/dist/startup.js +15 -3
  70. package/daemon/dist/startup.js.map +1 -1
  71. package/dist/commands/auth.d.ts +11 -0
  72. package/dist/commands/auth.d.ts.map +1 -0
  73. package/dist/commands/auth.js +145 -0
  74. package/dist/commands/auth.js.map +1 -0
  75. package/dist/commands/config-init-workspace.d.ts.map +1 -1
  76. package/dist/commands/config-init-workspace.js +7 -4
  77. package/dist/commands/config-init-workspace.js.map +1 -1
  78. package/dist/commands/queue.d.ts.map +1 -1
  79. package/dist/commands/queue.js +23 -0
  80. package/dist/commands/queue.js.map +1 -1
  81. package/dist/commands/scope.d.ts.map +1 -1
  82. package/dist/commands/scope.js +64 -6
  83. package/dist/commands/scope.js.map +1 -1
  84. package/dist/commands/send.d.ts.map +1 -1
  85. package/dist/commands/send.js +40 -7
  86. package/dist/commands/send.js.map +1 -1
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +2 -0
  89. package/dist/index.js.map +1 -1
  90. package/dist/lib/codex-auth.d.ts +124 -0
  91. package/dist/lib/codex-auth.d.ts.map +1 -0
  92. package/dist/lib/codex-auth.js +418 -0
  93. package/dist/lib/codex-auth.js.map +1 -0
  94. package/dist/lib/scope/scope-audit.d.ts +14 -2
  95. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  96. package/dist/lib/scope/scope-audit.js +95 -0
  97. package/dist/lib/scope/scope-audit.js.map +1 -1
  98. package/dist/lib/scope/templates.d.ts +9 -0
  99. package/dist/lib/scope/templates.d.ts.map +1 -1
  100. package/dist/lib/scope/templates.js +14 -1
  101. package/dist/lib/scope/templates.js.map +1 -1
  102. package/dist/lib/scope-templates/mission-brief.md +20 -0
  103. package/dist/lib/scope-templates/placeholder.md +8 -0
  104. package/dist/lib/scope-templates/proof.md +17 -0
  105. package/package.json +2 -1
  106. package/ui/dist/assets/index-CnqRX7A3.css +32 -0
  107. package/ui/dist/assets/index-CtL9jXFt.js +582 -0
  108. package/ui/dist/index.html +2 -2
  109. package/ui/dist/assets/index-DMI6jeAX.css +0 -32
  110. package/ui/dist/assets/index-FQgCB6mC.js +0 -580
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ export declare function validateProfileName(name: unknown): name is string;
2
+ export interface CodexAuthPaths {
3
+ /** Codex state dir — CODEX_HOME or $HOME/.codex. */
4
+ codexHome: string;
5
+ /** Saved-profile dir (0700). */
6
+ profileDir: string;
7
+ /** Active auth file the Codex CLI reads (0600). */
8
+ activeAuth: string;
9
+ /** Product-native seat->profile metadata registry (0600). */
10
+ registryPath: string;
11
+ }
12
+ /** Resolve the Codex paths from an env map (default process.env). CODEX_HOME wins; else $HOME/.codex. */
13
+ export declare function resolveCodexHome(env?: NodeJS.ProcessEnv): CodexAuthPaths;
14
+ export interface CodexAuthDeps {
15
+ /** Resolve the Codex login state using EXIT CODE ONLY — never the external command's stdout/stderr
16
+ * (any future codex version could print a token there). Default: spawn `codex login status` with
17
+ * stdio ignored and map the exit code. Injectable for hermetic tests. */
18
+ loginStatus?: (codexHome: string) => "logged_in" | "not_logged_in" | "unavailable";
19
+ }
20
+ export interface AuthStatusResult {
21
+ codexHome: string;
22
+ codexHomePresent: boolean;
23
+ profileDirPresent: boolean;
24
+ activeAuthPresent: boolean;
25
+ activeAuthMode: string | null;
26
+ activeAuthModeSafe: boolean | "unknown";
27
+ profileCount: number;
28
+ loginStatus: "logged_in" | "not_logged_in" | "unavailable";
29
+ }
30
+ /** Report auth-file presence/mode/safety + profile count + login-state. NEVER reads token contents. */
31
+ export declare function authStatus(paths: CodexAuthPaths, deps?: CodexAuthDeps): AuthStatusResult;
32
+ export type AuthValidateResult = {
33
+ ok: true;
34
+ name: string;
35
+ path: string;
36
+ mode: string;
37
+ } | {
38
+ ok: false;
39
+ reason: "invalid_profile" | "missing_profile" | "unsafe_path" | "unsafe_permissions" | "malformed_json" | "parse_check_unavailable";
40
+ };
41
+ /** Validate a saved profile: name whitelist -> safe regular file -> 0600 -> JSON parseable. The
42
+ * parse is in-memory and the result is discarded; on failure we return a FIXED reason and never the
43
+ * JSON.parse error (its message can include a snippet of the file = a secret). */
44
+ export declare function authValidate(paths: CodexAuthPaths, name: string): AuthValidateResult;
45
+ export type AuthSaveResult = {
46
+ ok: true;
47
+ name: string;
48
+ path: string;
49
+ mode: string;
50
+ } | {
51
+ ok: false;
52
+ reason: "invalid_profile" | "not_configured" | "unsafe_path" | "io_error";
53
+ };
54
+ /** Snapshot the active auth file into a named profile (0600 file in the 0700 profile dir). Byte-copy
55
+ * via copyFileSync — contents never enter JS memory; result reports name/path/mode only. */
56
+ export declare function authSave(paths: CodexAuthPaths, name: string): AuthSaveResult;
57
+ export type AuthSwitchResult = {
58
+ ok: true;
59
+ name: string;
60
+ activePath: string;
61
+ mode: string;
62
+ note: string;
63
+ } | {
64
+ ok: false;
65
+ reason: "invalid_profile" | "missing_profile" | "unsafe_path" | "unsafe_permissions" | "io_error";
66
+ };
67
+ /** Activate a saved profile (copy it onto the active auth at 0600). Refuses to widen perms over an
68
+ * existing unsafe active file. Byte-copy; no content echoed. */
69
+ export declare function authSwitch(paths: CodexAuthPaths, name: string): AuthSwitchResult;
70
+ /** List saved profile names (safe regular *.json files in the profile dir), sorted. No contents read.
71
+ * Refuses to list through a symlinked / out-of-tree profile dir (returns []), so a redirected parent
72
+ * never exposes file names from outside CODEX_HOME. */
73
+ export declare function authList(paths: CodexAuthPaths): string[];
74
+ /** Stated in command output + docs: a seat label is metadata, never proof of a live account. */
75
+ export declare const SEAT_REGISTRY_DISCLAIMER = "Seat labels are metadata only; they do NOT prove a running session is actually using that account/profile.";
76
+ export interface SeatRow {
77
+ seat: string;
78
+ rig: string;
79
+ runtime: string;
80
+ cwd: string;
81
+ authProfile: string;
82
+ updatedTs: string;
83
+ }
84
+ export interface SeatSetFields {
85
+ seat: string;
86
+ rig: string;
87
+ runtime: string;
88
+ cwd?: string;
89
+ authProfile?: string;
90
+ }
91
+ export type SeatSetResult = {
92
+ ok: true;
93
+ seat: string;
94
+ registryPath: string;
95
+ mode: string;
96
+ disclaimer: string;
97
+ } | {
98
+ ok: false;
99
+ reason: "invalid_seat" | "invalid_rig" | "invalid_runtime" | "invalid_cwd" | "invalid_profile" | "unsafe_path" | "io_error";
100
+ };
101
+ /** Atomic upsert of a seat metadata row (tmp + rename). Drops pre-existing malformed rows rather than
102
+ * re-emitting fabricated metadata. `now` is injectable for deterministic tests. */
103
+ export declare function authSeatSet(paths: CodexAuthPaths, fields: SeatSetFields, now?: () => string): SeatSetResult;
104
+ /** List well-formed seat rows (malformed rows skipped). */
105
+ export declare function authSeatsList(paths: CodexAuthPaths): SeatRow[];
106
+ export type SeatShowResult = {
107
+ ok: true;
108
+ row: SeatRow;
109
+ } | {
110
+ ok: false;
111
+ reason: "invalid_seat" | "missing_seat" | "unsafe_path";
112
+ };
113
+ export declare function authSeatShow(paths: CodexAuthPaths, seat: string): SeatShowResult;
114
+ export interface SeatsReport {
115
+ registryPresent: boolean;
116
+ registryMode: string | null;
117
+ registryModeSafe: boolean | "unknown";
118
+ total: number;
119
+ known: number;
120
+ unknown: number;
121
+ malformed: number;
122
+ }
123
+ export declare function authSeatsReport(paths: CodexAuthPaths): SeatsReport;
124
+ //# sourceMappingURL=codex-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-auth.d.ts","sourceRoot":"","sources":["../../src/lib/codex-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,418 @@
1
+ // OPR.0.4.1.29 — rig auth secret-safe core (CLI-LOCAL / daemon-free).
2
+ //
3
+ // This module operates directly on the operator's Codex auth files under CODEX_HOME and is invoked
4
+ // only from the `rig auth` CLI command — it NEVER touches the daemon, so a token can never enter the
5
+ // daemon queue / SSE stream / SQLite / event log (never-queued/never-streamed is true BY CONSTRUCTION).
6
+ //
7
+ // SECRET INVARIANTS (non-negotiable): no auth/refresh/access token value is ever returned in, or used
8
+ // to build, any human-facing string. Functions return STRUCTURED, non-secret result objects
9
+ // (presence / mode / parseability / login-state / names / counts); the auth FILE is snapshotted as a
10
+ // file (mode-guarded byte copy), never read into a printed value. CODEX_HOME defaults to $HOME/.codex
11
+ // and is env-overridable (tests point it at a fixture); no personal/operator path is baked in.
12
+ import path from "node:path";
13
+ import fs from "node:fs";
14
+ import { spawnSync } from "node:child_process";
15
+ /** Strict profile-name whitelist: alnum-led, then [A-Za-z0-9._-], 1..64 chars. Excludes /, \, ~,
16
+ * leading dot, whitespace, control, and shell metacharacters. Fail closed. */
17
+ const PROFILE_NAME_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
18
+ export function validateProfileName(name) {
19
+ return typeof name === "string" && name.length > 0 && name.length <= 64 && PROFILE_NAME_RE.test(name);
20
+ }
21
+ /** Resolve the Codex paths from an env map (default process.env). CODEX_HOME wins; else $HOME/.codex. */
22
+ export function resolveCodexHome(env = process.env) {
23
+ const codexHome = typeof env.CODEX_HOME === "string" && env.CODEX_HOME.length > 0
24
+ ? env.CODEX_HOME
25
+ : path.join(env.HOME ?? "", ".codex");
26
+ return {
27
+ codexHome,
28
+ profileDir: path.join(codexHome, "auth-profiles"),
29
+ activeAuth: path.join(codexHome, "auth.json"),
30
+ registryPath: path.join(codexHome, "auth-seat-registry.tsv"),
31
+ };
32
+ }
33
+ // --- secret-safe fs helpers (no contents ever read into a returned/printed value) ---
34
+ function lstatSafe(p) {
35
+ try {
36
+ return fs.lstatSync(p);
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ function isDir(p) {
43
+ const st = lstatSafe(p);
44
+ return st !== null && st.isDirectory();
45
+ }
46
+ function isFile(p) {
47
+ const st = lstatSafe(p);
48
+ return st !== null && st.isFile();
49
+ }
50
+ /** Octal permission string (e.g. "600") or null when the path is absent/unstatable. */
51
+ function fileModeOctal(p) {
52
+ const st = lstatSafe(p);
53
+ if (st === null)
54
+ return null;
55
+ return (st.mode & 0o777).toString(8).padStart(3, "0");
56
+ }
57
+ /** A profile file is safe iff it exists, is a regular file (not a symlink — which could redirect us
58
+ * out of the profile dir), has link count 1 (a hardlink shares an inode that may live outside the
59
+ * profile dir), and lives directly in profileDir. */
60
+ function isSafeProfileFile(p, profileDir) {
61
+ const st = lstatSafe(p);
62
+ if (st === null || st.isSymbolicLink() || !st.isFile() || st.nlink !== 1)
63
+ return false;
64
+ return path.dirname(p) === profileDir;
65
+ }
66
+ /** True iff `dir` really resolves INSIDE realpath(codexHome). realpath follows every symlink in the
67
+ * chain, so a symlinked parent (e.g. an auth-profiles dir pointing outside) resolves out and is
68
+ * rejected — a lexical startsWith would be fooled. Returns false if either path can't be resolved. */
69
+ function realDirContained(dir, codexHome) {
70
+ try {
71
+ const root = fs.realpathSync(codexHome);
72
+ const resolved = fs.realpathSync(dir);
73
+ return resolved === root || resolved.startsWith(root + path.sep);
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ /** A destination we are about to write SECRET bytes onto is safe to replace iff it is absent, or a
80
+ * regular file (not a symlink) with link count 1. A symlink redirects the write; a hardlink (nlink>1)
81
+ * shares an inode that may live outside CODEX_HOME — writing through either leaks secret bytes out. */
82
+ function destReplaceable(p) {
83
+ const st = lstatSafe(p);
84
+ if (st === null)
85
+ return true;
86
+ return !st.isSymbolicLink() && st.isFile() && st.nlink === 1;
87
+ }
88
+ /** Copy `source` onto `dest` so secret bytes (a) never enter JS memory [copyFileSync does the byte
89
+ * copy] and (b) are never written THROUGH a pre-existing inode at dest: we copy into a freshly
90
+ * created (COPYFILE_EXCL) temp in dest's dir, then atomically rename over dest. Rename swaps the
91
+ * directory entry — any pre-existing hardlink/symlink inode is unlinked, never written. Caller must
92
+ * have already verified dest's parent containment and that dest is replaceable. */
93
+ function copyOntoFresh(source, dest) {
94
+ const tmp = `${dest}.tmp-${process.pid}`;
95
+ try {
96
+ try {
97
+ fs.rmSync(tmp, { force: true });
98
+ }
99
+ catch {
100
+ /* ignore */
101
+ }
102
+ fs.copyFileSync(source, tmp, fs.constants.COPYFILE_EXCL); // fresh inode; never through an existing one
103
+ fs.chmodSync(tmp, 0o600);
104
+ fs.renameSync(tmp, dest); // atomic dir-entry swap; old inode unlinked, not written
105
+ fs.chmodSync(dest, 0o600);
106
+ return true;
107
+ }
108
+ catch {
109
+ try {
110
+ fs.rmSync(tmp, { force: true });
111
+ }
112
+ catch {
113
+ /* ignore */
114
+ }
115
+ return false;
116
+ }
117
+ }
118
+ function countProfiles(profileDir) {
119
+ try {
120
+ return fs.readdirSync(profileDir).filter((n) => n.endsWith(".json") && isFile(path.join(profileDir, n))).length;
121
+ }
122
+ catch {
123
+ return 0;
124
+ }
125
+ }
126
+ /** True iff the string contains a control character (<=0x1f or 0x7f), incl. tab/newline/CR which would
127
+ * corrupt a TSV row. Printable chars (spaces, hyphens, '@', '/') are allowed. Regex-free on purpose. */
128
+ function hasControlChar(v) {
129
+ for (let i = 0; i < v.length; i++) {
130
+ const c = v.charCodeAt(i);
131
+ if (c <= 0x1f || c === 0x7f)
132
+ return true;
133
+ }
134
+ return false;
135
+ }
136
+ /** Default login-state probe: exit code only, output never captured (stdio: ignore = no leak path). */
137
+ function defaultLoginStatus(codexHome) {
138
+ const r = spawnSync("codex", ["login", "status"], {
139
+ stdio: "ignore",
140
+ env: { ...process.env, CODEX_HOME: codexHome },
141
+ });
142
+ if (r.error)
143
+ return "unavailable";
144
+ return r.status === 0 ? "logged_in" : "not_logged_in";
145
+ }
146
+ /** Report auth-file presence/mode/safety + profile count + login-state. NEVER reads token contents. */
147
+ export function authStatus(paths, deps = {}) {
148
+ const activeAuthPresent = isFile(paths.activeAuth);
149
+ const activeAuthMode = activeAuthPresent ? fileModeOctal(paths.activeAuth) : null;
150
+ return {
151
+ codexHome: paths.codexHome,
152
+ codexHomePresent: isDir(paths.codexHome),
153
+ profileDirPresent: isDir(paths.profileDir),
154
+ activeAuthPresent,
155
+ activeAuthMode,
156
+ activeAuthModeSafe: activeAuthMode === null ? "unknown" : activeAuthMode === "600",
157
+ profileCount: countProfiles(paths.profileDir),
158
+ loginStatus: (deps.loginStatus ?? defaultLoginStatus)(paths.codexHome),
159
+ };
160
+ }
161
+ /** Validate a saved profile: name whitelist -> safe regular file -> 0600 -> JSON parseable. The
162
+ * parse is in-memory and the result is discarded; on failure we return a FIXED reason and never the
163
+ * JSON.parse error (its message can include a snippet of the file = a secret). */
164
+ export function authValidate(paths, name) {
165
+ if (!validateProfileName(name))
166
+ return { ok: false, reason: "invalid_profile" };
167
+ const target = path.join(paths.profileDir, `${name}.json`);
168
+ if (lstatSafe(target) === null)
169
+ return { ok: false, reason: "missing_profile" };
170
+ // Safe regular file (no symlink/hardlink) AND a profile dir that really resolves inside CODEX_HOME.
171
+ if (!isSafeProfileFile(target, paths.profileDir) || !realDirContained(paths.profileDir, paths.codexHome)) {
172
+ return { ok: false, reason: "unsafe_path" };
173
+ }
174
+ if (fileModeOctal(target) !== "600")
175
+ return { ok: false, reason: "unsafe_permissions" };
176
+ let content;
177
+ try {
178
+ content = fs.readFileSync(target, "utf8");
179
+ }
180
+ catch {
181
+ return { ok: false, reason: "parse_check_unavailable" };
182
+ }
183
+ try {
184
+ JSON.parse(content);
185
+ }
186
+ catch {
187
+ // Intentionally ignore the error object — its message can echo file content (a secret).
188
+ return { ok: false, reason: "malformed_json" };
189
+ }
190
+ return { ok: true, name, path: target, mode: "600" };
191
+ }
192
+ /** Snapshot the active auth file into a named profile (0600 file in the 0700 profile dir). Byte-copy
193
+ * via copyFileSync — contents never enter JS memory; result reports name/path/mode only. */
194
+ export function authSave(paths, name) {
195
+ if (!validateProfileName(name))
196
+ return { ok: false, reason: "invalid_profile" };
197
+ if (!isFile(paths.activeAuth))
198
+ return { ok: false, reason: "not_configured" };
199
+ const target = path.join(paths.profileDir, `${name}.json`);
200
+ // Refuse a symlinked profile-dir BEFORE mkdir/chmod so we never follow it out of CODEX_HOME or
201
+ // mutate the outside target's mode.
202
+ const pdStat = lstatSafe(paths.profileDir);
203
+ if (pdStat !== null && pdStat.isSymbolicLink())
204
+ return { ok: false, reason: "unsafe_path" };
205
+ try {
206
+ fs.mkdirSync(paths.profileDir, { recursive: true });
207
+ fs.chmodSync(paths.profileDir, 0o700);
208
+ }
209
+ catch {
210
+ return { ok: false, reason: "io_error" };
211
+ }
212
+ // Parent must REALLY resolve inside CODEX_HOME (defeats a symlinked auth-profiles parent), and the
213
+ // existing target must not be a symlink/hardlink/non-regular file (defeats writing secret bytes
214
+ // through an inode that lives outside CODEX_HOME).
215
+ if (!realDirContained(paths.profileDir, paths.codexHome))
216
+ return { ok: false, reason: "unsafe_path" };
217
+ if (!destReplaceable(target))
218
+ return { ok: false, reason: "unsafe_path" };
219
+ if (!copyOntoFresh(paths.activeAuth, target))
220
+ return { ok: false, reason: "io_error" };
221
+ return { ok: true, name, path: target, mode: "600" };
222
+ }
223
+ /** Activate a saved profile (copy it onto the active auth at 0600). Refuses to widen perms over an
224
+ * existing unsafe active file. Byte-copy; no content echoed. */
225
+ export function authSwitch(paths, name) {
226
+ if (!validateProfileName(name))
227
+ return { ok: false, reason: "invalid_profile" };
228
+ const source = path.join(paths.profileDir, `${name}.json`);
229
+ if (lstatSafe(source) === null)
230
+ return { ok: false, reason: "missing_profile" };
231
+ if (!isSafeProfileFile(source, paths.profileDir))
232
+ return { ok: false, reason: "unsafe_path" };
233
+ // Destination guard: a symlink/non-regular OR hardlinked (nlink>1) active auth would let the copy
234
+ // write the selected profile's SECRET bytes THROUGH an inode living outside CODEX_HOME. Refuse it
235
+ // (isFile() is false for a symlink, so the old isFile-gated check silently missed both cases).
236
+ if (!destReplaceable(paths.activeAuth))
237
+ return { ok: false, reason: "unsafe_path" };
238
+ if (isFile(paths.activeAuth)) {
239
+ const m = fileModeOctal(paths.activeAuth);
240
+ if (m !== null && m !== "600")
241
+ return { ok: false, reason: "unsafe_permissions" };
242
+ }
243
+ try {
244
+ fs.mkdirSync(paths.codexHome, { recursive: true });
245
+ }
246
+ catch {
247
+ return { ok: false, reason: "io_error" };
248
+ }
249
+ if (!realDirContained(paths.codexHome, paths.codexHome))
250
+ return { ok: false, reason: "unsafe_path" };
251
+ if (!copyOntoFresh(source, paths.activeAuth))
252
+ return { ok: false, reason: "io_error" };
253
+ return {
254
+ ok: true,
255
+ name,
256
+ activePath: paths.activeAuth,
257
+ mode: "600",
258
+ note: "live Codex sessions do not switch accounts in place; restart the affected seats to pick up the new profile.",
259
+ };
260
+ }
261
+ /** List saved profile names (safe regular *.json files in the profile dir), sorted. No contents read.
262
+ * Refuses to list through a symlinked / out-of-tree profile dir (returns []), so a redirected parent
263
+ * never exposes file names from outside CODEX_HOME. */
264
+ export function authList(paths) {
265
+ if (!realDirContained(paths.profileDir, paths.codexHome))
266
+ return [];
267
+ try {
268
+ return fs
269
+ .readdirSync(paths.profileDir)
270
+ .filter((n) => n.endsWith(".json") && isSafeProfileFile(path.join(paths.profileDir, n), paths.profileDir))
271
+ .map((n) => n.slice(0, -".json".length))
272
+ .sort();
273
+ }
274
+ catch {
275
+ return [];
276
+ }
277
+ }
278
+ // --- Auth-B: seat -> profile METADATA registry (product-native; NO resume_token per orch D2) ---
279
+ /** Stated in command output + docs: a seat label is metadata, never proof of a live account. */
280
+ export const SEAT_REGISTRY_DISCLAIMER = "Seat labels are metadata only; they do NOT prove a running session is actually using that account/profile.";
281
+ // 6 columns; NO resume_token (a print surface is the worst place to hold a secret-class token).
282
+ const SEAT_COLUMNS = ["seat", "rig", "runtime", "cwd", "auth_profile", "updated_ts"];
283
+ const SEAT_HEADER = SEAT_COLUMNS.join("\t");
284
+ const SEAT_TAB_COUNT = SEAT_COLUMNS.length - 1;
285
+ function isSafeRegistryFile(p) {
286
+ const st = lstatSafe(p);
287
+ return st !== null && !st.isSymbolicLink() && st.isFile();
288
+ }
289
+ /** Reject empty + any control character (covers tab/newline/CR, which would corrupt the TSV). */
290
+ function validRegistryField(v) {
291
+ return v.length > 0 && !hasControlChar(v);
292
+ }
293
+ function rawRegistryLines(registryPath) {
294
+ let text;
295
+ try {
296
+ text = fs.readFileSync(registryPath, "utf8");
297
+ }
298
+ catch {
299
+ return [];
300
+ }
301
+ const out = [];
302
+ let first = true;
303
+ for (const line of text.split("\n")) {
304
+ if (line === "" || line.startsWith("#"))
305
+ continue;
306
+ if (first) {
307
+ first = false; // skip header
308
+ continue;
309
+ }
310
+ out.push(line);
311
+ }
312
+ return out;
313
+ }
314
+ function rowMalformed(line) {
315
+ const tabs = (line.match(/\t/g) ?? []).length;
316
+ if (tabs !== SEAT_TAB_COUNT)
317
+ return true;
318
+ return line.split("\t")[0] === "";
319
+ }
320
+ function parseRow(line) {
321
+ // Callers pre-filter via rowMalformed (guaranteed 6 fields); ?? "" satisfies strict indexing.
322
+ const f = line.split("\t");
323
+ return {
324
+ seat: f[0] ?? "",
325
+ rig: f[1] ?? "",
326
+ runtime: f[2] ?? "",
327
+ cwd: f[3] ?? "",
328
+ authProfile: f[4] ?? "",
329
+ updatedTs: f[5] ?? "",
330
+ };
331
+ }
332
+ /** Atomic upsert of a seat metadata row (tmp + rename). Drops pre-existing malformed rows rather than
333
+ * re-emitting fabricated metadata. `now` is injectable for deterministic tests. */
334
+ export function authSeatSet(paths, fields, now = () => new Date().toISOString()) {
335
+ if (!validRegistryField(fields.seat))
336
+ return { ok: false, reason: "invalid_seat" };
337
+ if (!validRegistryField(fields.rig))
338
+ return { ok: false, reason: "invalid_rig" };
339
+ if (fields.runtime !== "codex")
340
+ return { ok: false, reason: "invalid_runtime" }; // v0 whitelist
341
+ const cwd = fields.cwd && fields.cwd.length > 0 ? fields.cwd : "unknown";
342
+ if (!validRegistryField(cwd))
343
+ return { ok: false, reason: "invalid_cwd" };
344
+ const profile = fields.authProfile && fields.authProfile.length > 0 ? fields.authProfile : "unknown";
345
+ if (profile !== "unknown" && !validateProfileName(profile))
346
+ return { ok: false, reason: "invalid_profile" };
347
+ if (lstatSafe(paths.registryPath) !== null && !isSafeRegistryFile(paths.registryPath)) {
348
+ return { ok: false, reason: "unsafe_path" };
349
+ }
350
+ const kept = rawRegistryLines(paths.registryPath)
351
+ .filter((l) => !rowMalformed(l))
352
+ .filter((l) => l.split("\t")[0] !== fields.seat);
353
+ const newRow = [fields.seat, fields.rig, "codex", cwd, profile, now()].join("\t");
354
+ const body = [SEAT_HEADER, ...kept, newRow].join("\n") + "\n";
355
+ const tmp = `${paths.registryPath}.${process.pid}.tmp`;
356
+ try {
357
+ fs.mkdirSync(path.dirname(paths.registryPath), { recursive: true });
358
+ fs.writeFileSync(tmp, body, { mode: 0o600 });
359
+ fs.chmodSync(tmp, 0o600);
360
+ fs.renameSync(tmp, paths.registryPath);
361
+ fs.chmodSync(paths.registryPath, 0o600);
362
+ }
363
+ catch {
364
+ try {
365
+ fs.rmSync(tmp, { force: true });
366
+ }
367
+ catch {
368
+ /* ignore */
369
+ }
370
+ return { ok: false, reason: "io_error" };
371
+ }
372
+ return { ok: true, seat: fields.seat, registryPath: paths.registryPath, mode: "600", disclaimer: SEAT_REGISTRY_DISCLAIMER };
373
+ }
374
+ /** List well-formed seat rows (malformed rows skipped). */
375
+ export function authSeatsList(paths) {
376
+ return rawRegistryLines(paths.registryPath)
377
+ .filter((l) => !rowMalformed(l))
378
+ .map(parseRow);
379
+ }
380
+ export function authSeatShow(paths, seat) {
381
+ if (!validRegistryField(seat))
382
+ return { ok: false, reason: "invalid_seat" };
383
+ if (lstatSafe(paths.registryPath) !== null && !isSafeRegistryFile(paths.registryPath)) {
384
+ return { ok: false, reason: "unsafe_path" };
385
+ }
386
+ const row = authSeatsList(paths).find((r) => r.seat === seat);
387
+ return row ? { ok: true, row } : { ok: false, reason: "missing_seat" };
388
+ }
389
+ export function authSeatsReport(paths) {
390
+ const present = isFile(paths.registryPath);
391
+ const mode = present ? fileModeOctal(paths.registryPath) : null;
392
+ let total = 0;
393
+ let known = 0;
394
+ let unknown = 0;
395
+ let malformed = 0;
396
+ for (const line of rawRegistryLines(paths.registryPath)) {
397
+ if (rowMalformed(line)) {
398
+ malformed += 1;
399
+ continue;
400
+ }
401
+ total += 1;
402
+ const profile = line.split("\t")[4];
403
+ if (!profile || profile === "unknown")
404
+ unknown += 1;
405
+ else
406
+ known += 1;
407
+ }
408
+ return {
409
+ registryPresent: present,
410
+ registryMode: mode,
411
+ registryModeSafe: mode === null ? "unknown" : mode === "600",
412
+ total,
413
+ known,
414
+ unknown,
415
+ malformed,
416
+ };
417
+ }
418
+ //# sourceMappingURL=codex-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-auth.js","sourceRoot":"","sources":["../../src/lib/codex-auth.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,mGAAmG;AACnG,qGAAqG;AACrG,wGAAwG;AACxG,EAAE;AACF,sGAAsG;AACtG,4FAA4F;AAC5F,qGAAqG;AACrG,sGAAsG;AACtG,+FAA+F;AAC/F,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;+EAC+E;AAC/E,MAAM,eAAe,GAAG,mCAAmC,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxG,CAAC;AAaD,yGAAyG;AACzG,MAAM,UAAU,gBAAgB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,MAAM,SAAS,GACb,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAC7D,CAAC,CAAC,GAAG,CAAC,UAAU;QAChB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO;QACL,SAAS;QACT,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;QACjD,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QAC7C,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,uFAAuF;AAEvF,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,uFAAuF;AACvF,SAAS,aAAa,CAAC,CAAS;IAC9B,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxD,CAAC;AAED;;sDAEsD;AACtD,SAAS,iBAAiB,CAAC,CAAS,EAAE,UAAkB;IACtD,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;AACxC,CAAC;AAED;;uGAEuG;AACvG,SAAS,gBAAgB,CAAC,GAAW,EAAE,SAAiB;IACtD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;wGAEwG;AACxG,SAAS,eAAe,CAAC,CAAS;IAChC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED;;;;oFAIoF;AACpF,SAAS,aAAa,CAAC,MAAc,EAAE,IAAY;IACjD,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,IAAI,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,6CAA6C;QACvG,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,yDAAyD;QACnF,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB;IACvC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAClH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;yGACyG;AACzG,SAAS,cAAc,CAAC,CAAS;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AASD,uGAAuG;AACvG,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;QAChD,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE;KAC/C,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,KAAK;QAAE,OAAO,aAAa,CAAC;IAClC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC;AACxD,CAAC;AAaD,uGAAuG;AACvG,MAAM,UAAU,UAAU,CAAC,KAAqB,EAAE,OAAsB,EAAE;IACxE,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QACxC,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;QAC1C,iBAAiB;QACjB,cAAc;QACd,kBAAkB,EAAE,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,KAAK,KAAK;QAClF,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;QAC7C,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,kBAAkB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;KACvE,CAAC;AACJ,CAAC;AASD;;mFAEmF;AACnF,MAAM,UAAU,YAAY,CAAC,KAAqB,EAAE,IAAY;IAC9D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC3D,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAChF,oGAAoG;IACpG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACzG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACxF,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,wFAAwF;QACxF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC;AAMD;6FAC6F;AAC7F,MAAM,UAAU,QAAQ,CAAC,KAAqB,EAAE,IAAY;IAC1D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAChF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC3D,+FAA+F;IAC/F,oCAAoC;IACpC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC5F,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3C,CAAC;IACD,mGAAmG;IACnG,gGAAgG;IAChG,mDAAmD;IACnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACtG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC1E,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACvF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC;AAMD;iEACiE;AACjE,MAAM,UAAU,UAAU,CAAC,KAAqB,EAAE,IAAY;IAC5D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC3D,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAChF,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC9F,kGAAkG;IAClG,kGAAkG;IAClG,+FAA+F;IAC/F,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACpF,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACpF,CAAC;IACD,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACrG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACvF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI;QACJ,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,6GAA6G;KACpH,CAAC;AACJ,CAAC;AAED;;wDAEwD;AACxD,MAAM,UAAU,QAAQ,CAAC,KAAqB;IAC5C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACpE,IAAI,CAAC;QACH,OAAO,EAAE;aACN,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;aACzG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aACvC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,kGAAkG;AAElG,gGAAgG;AAChG,MAAM,CAAC,MAAM,wBAAwB,GACnC,4GAA4G,CAAC;AAE/G,gGAAgG;AAChG,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,CAAU,CAAC;AAC9F,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAmB/C,SAAS,kBAAkB,CAAC,CAAS;IACnC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;AAC5D,CAAC;AAED,iGAAiG;AACjG,SAAS,kBAAkB,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,GAAG,KAAK,CAAC,CAAC,cAAc;YAC7B,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,8FAA8F;IAC9F,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAChB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QACf,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QACnB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QACf,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QACvB,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAMD;oFACoF;AACpF,MAAM,UAAU,WAAW,CACzB,KAAqB,EACrB,MAAqB,EACrB,MAAoB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAElD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACnF,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACjF,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC,eAAe;IAChG,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAE5G,IAAI,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACtF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC;SAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE9D,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IACvD,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACvC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC;AAC9H,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,KAAqB;IACjD,OAAO,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAC/B,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnB,CAAC;AAID,MAAM,UAAU,YAAY,CAAC,KAAqB,EAAE,IAAY;IAC9D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAC5E,IAAI,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACtF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC9D,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;AACzE,CAAC;AAYD,MAAM,UAAU,eAAe,CAAC,KAAqB;IACnD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,SAAS,IAAI,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,CAAC;;YAC/C,KAAK,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO;QACL,eAAe,EAAE,OAAO;QACxB,YAAY,EAAE,IAAI;QAClB,gBAAgB,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK;QAC5D,KAAK;QACL,KAAK;QACL,OAAO;QACP,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export type RailStatus = "present" | "missing" | "malformed" | "readme-only";
2
- export type FindingSeverity = "high" | "low" | "info";
3
- export type FindingKind = "missing_progress" | "registration_ghost" | "missing_id" | "id_convention_violation" | "orphan_progress";
2
+ export type FindingSeverity = "high" | "medium" | "low" | "info";
3
+ export type FindingKind = "missing_progress" | "registration_ghost" | "missing_id" | "id_convention_violation" | "orphan_progress" | "missing_mission_brief" | "malformed_mission_brief" | "missing_mission_notes" | "missing_proof";
4
4
  export interface AuditFinding {
5
5
  kind: FindingKind;
6
6
  severity: FindingSeverity;
@@ -16,6 +16,18 @@ export interface ScopeAuditInput {
16
16
  readmeOnlyMarker: boolean;
17
17
  isActiveRelease: boolean;
18
18
  level: "mission" | "slice";
19
+ missionBriefExists?: boolean;
20
+ missionBriefPath?: string;
21
+ missionBriefContent?: string | null;
22
+ missionNotesExists?: boolean;
23
+ missionNotesPath?: string;
24
+ proofFileExists?: boolean;
25
+ proofFilePath?: string;
26
+ proofDirExists?: boolean;
27
+ proofDirPath?: string;
28
+ proofDirHasEntries?: boolean;
29
+ hasProofPacket?: boolean;
30
+ sliceStatus?: string | null;
19
31
  }
20
32
  export interface ScopeAuditResult {
21
33
  railStatus: RailStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"scope-audit.d.ts","sourceRoot":"","sources":["../../../src/lib/scope/scope-audit.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAC7E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AACtD,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,YAAY,GACZ,yBAAyB,GACzB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA2F1E"}
1
+ {"version":3,"file":"scope-audit.d.ts","sourceRoot":"","sources":["../../../src/lib/scope/scope-audit.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAC7E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,YAAY,GACZ,yBAAyB,GACzB,iBAAiB,GACjB,uBAAuB,GACvB,yBAAyB,GACzB,uBAAuB,GACvB,eAAe,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AA+CD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAkJ1E"}