@akasecurity/cli 0.9.1 → 0.9.3

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 (160) hide show
  1. package/README.md +4 -0
  2. package/dist/cli.js +1233 -533
  3. package/package.json +6 -6
  4. package/web-ui/package.json +2 -2
  5. package/web-ui/packages/plugin-sdk/package.json +1 -1
  6. package/web-ui/packages/schema/package.json +1 -1
  7. package/web-ui/packages/ui-kit/package.json +7 -7
  8. package/web-ui/web-ui/.next/BUILD_ID +1 -1
  9. package/web-ui/web-ui/.next/app-build-manifest.json +129 -129
  10. package/web-ui/web-ui/.next/app-path-routes-manifest.json +6 -6
  11. package/web-ui/web-ui/.next/build-manifest.json +14 -14
  12. package/web-ui/web-ui/.next/prerender-manifest.json +10 -10
  13. package/web-ui/web-ui/.next/required-server-files.json +1 -1
  14. package/web-ui/web-ui/.next/server/app/(app)/activity/page.js +2 -2
  15. package/web-ui/web-ui/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  16. package/web-ui/web-ui/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  17. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js +2 -2
  18. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js.nft.json +1 -1
  19. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page_client-reference-manifest.js +1 -1
  20. package/web-ui/web-ui/.next/server/app/(app)/detections/page.js +2 -2
  21. package/web-ui/web-ui/.next/server/app/(app)/detections/page.js.nft.json +1 -1
  22. package/web-ui/web-ui/.next/server/app/(app)/detections/page_client-reference-manifest.js +1 -1
  23. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js +2 -2
  24. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js.nft.json +1 -1
  25. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page_client-reference-manifest.js +1 -1
  26. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js +2 -2
  27. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js.nft.json +1 -1
  28. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page_client-reference-manifest.js +1 -1
  29. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js +2 -2
  30. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js.nft.json +1 -1
  31. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page_client-reference-manifest.js +1 -1
  32. package/web-ui/web-ui/.next/server/app/(app)/findings/page.js +2 -2
  33. package/web-ui/web-ui/.next/server/app/(app)/findings/page.js.nft.json +1 -1
  34. package/web-ui/web-ui/.next/server/app/(app)/findings/page_client-reference-manifest.js +1 -1
  35. package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js +2 -2
  36. package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js.nft.json +1 -1
  37. package/web-ui/web-ui/.next/server/app/(app)/inventory/page_client-reference-manifest.js +1 -1
  38. package/web-ui/web-ui/.next/server/app/(app)/policies/page.js +2 -2
  39. package/web-ui/web-ui/.next/server/app/(app)/policies/page.js.nft.json +1 -1
  40. package/web-ui/web-ui/.next/server/app/(app)/policies/page_client-reference-manifest.js +1 -1
  41. package/web-ui/web-ui/.next/server/app/(app)/scan/page.js +2 -2
  42. package/web-ui/web-ui/.next/server/app/(app)/scan/page.js.nft.json +1 -1
  43. package/web-ui/web-ui/.next/server/app/(app)/scan/page_client-reference-manifest.js +1 -1
  44. package/web-ui/web-ui/.next/server/app/(app)/security/page.js +2 -2
  45. package/web-ui/web-ui/.next/server/app/(app)/security/page.js.nft.json +1 -1
  46. package/web-ui/web-ui/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
  47. package/web-ui/web-ui/.next/server/app/(app)/settings/page.js +2 -2
  48. package/web-ui/web-ui/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  49. package/web-ui/web-ui/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  50. package/web-ui/web-ui/.next/server/app/(app)/updates/page.js +2 -2
  51. package/web-ui/web-ui/.next/server/app/(app)/updates/page.js.nft.json +1 -1
  52. package/web-ui/web-ui/.next/server/app/(app)/updates/page_client-reference-manifest.js +1 -1
  53. package/web-ui/web-ui/.next/server/app/_not-found/page.js +2 -2
  54. package/web-ui/web-ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  55. package/web-ui/web-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  56. package/web-ui/web-ui/.next/server/app/_not-found.html +1 -1
  57. package/web-ui/web-ui/.next/server/app/_not-found.rsc +10 -10
  58. package/web-ui/web-ui/.next/server/app/icon.svg/route.js +1 -1
  59. package/web-ui/web-ui/.next/server/app/icon.svg/route.js.nft.json +1 -1
  60. package/web-ui/web-ui/.next/server/app/index.html +1 -1
  61. package/web-ui/web-ui/.next/server/app/index.rsc +10 -10
  62. package/web-ui/web-ui/.next/server/app/page.js +2 -2
  63. package/web-ui/web-ui/.next/server/app/page.js.nft.json +1 -1
  64. package/web-ui/web-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  65. package/web-ui/web-ui/.next/server/app-paths-manifest.json +6 -6
  66. package/web-ui/web-ui/.next/server/chunks/100.js +1 -0
  67. package/web-ui/web-ui/.next/server/chunks/142.js +700 -0
  68. package/web-ui/web-ui/.next/server/chunks/472.js +84 -0
  69. package/web-ui/web-ui/.next/server/chunks/723.js +22 -0
  70. package/web-ui/web-ui/.next/server/chunks/75.js +6 -0
  71. package/web-ui/web-ui/.next/server/chunks/830.js +123 -0
  72. package/web-ui/web-ui/.next/server/chunks/850.js +1 -0
  73. package/web-ui/web-ui/.next/server/chunks/853.js +698 -0
  74. package/web-ui/web-ui/.next/server/chunks/871.js +1 -0
  75. package/web-ui/web-ui/.next/server/chunks/924.js +2 -0
  76. package/web-ui/web-ui/.next/server/chunks/959.js +9 -0
  77. package/web-ui/web-ui/.next/server/functions-config-manifest.json +6 -6
  78. package/web-ui/web-ui/.next/server/middleware-build-manifest.js +1 -1
  79. package/web-ui/web-ui/.next/server/middleware-manifest.json +5 -5
  80. package/web-ui/web-ui/.next/server/middleware.js +2 -2
  81. package/web-ui/web-ui/.next/server/pages/404.html +1 -1
  82. package/web-ui/web-ui/.next/server/pages/500.html +1 -1
  83. package/web-ui/web-ui/.next/server/pages/_app.js +1 -1
  84. package/web-ui/web-ui/.next/server/pages/_app.js.nft.json +1 -1
  85. package/web-ui/web-ui/.next/server/pages/_document.js +1 -1
  86. package/web-ui/web-ui/.next/server/pages/_document.js.nft.json +1 -1
  87. package/web-ui/web-ui/.next/server/pages/_error.js +3 -3
  88. package/web-ui/web-ui/.next/server/pages/_error.js.nft.json +1 -1
  89. package/web-ui/web-ui/.next/server/server-reference-manifest.js +1 -1
  90. package/web-ui/web-ui/.next/server/server-reference-manifest.json +1 -1
  91. package/web-ui/web-ui/.next/static/{ez8SLWYcUCScGuFekZ-G_ → X_Z1LZQpnGXTuZXKkv4Vb}/_buildManifest.js +1 -1
  92. package/web-ui/web-ui/.next/static/chunks/137-8f757e04d1877a6c.js +1 -0
  93. package/web-ui/web-ui/.next/static/chunks/517-a4643cfd51efbca4.js +1 -0
  94. package/web-ui/web-ui/.next/static/chunks/613-734dcad67e1fa08c.js +1 -0
  95. package/web-ui/web-ui/.next/static/chunks/784-25fa9bc074877c93.js +62 -0
  96. package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-72558bcb945a0abc.js +1 -0
  97. package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-540aa3dbe1c0b3ad.js +1 -0
  98. package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-8fac90d5b77b7f89.js +1 -0
  99. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-06ee1868466199df.js +1 -0
  100. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-8b2ea0bbbc4fc69c.js +1 -0
  101. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-2aa604a6c36786fc.js +1 -0
  102. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-28f48db02051d88c.js +1 -0
  103. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-15bc43471843cf2e.js +1 -0
  104. package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-f034effcd10a332b.js +1 -0
  105. package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/page-de465eacbb359987.js +1 -0
  106. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-fa10c50b1436102d.js +1 -0
  107. package/web-ui/web-ui/.next/static/chunks/app/(app)/security/page-a61b90eb3a575f85.js +1 -0
  108. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-be0284caa1e78227.js +1 -0
  109. package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-eec4e54274dcbb4d.js +1 -0
  110. package/web-ui/web-ui/.next/static/chunks/app/_not-found/page-26662e9d7ee32abc.js +1 -0
  111. package/web-ui/web-ui/.next/static/chunks/app/layout-e531d303d8c8a313.js +1 -0
  112. package/web-ui/web-ui/.next/static/chunks/app/page-3ffe075f223c0af9.js +1 -0
  113. package/web-ui/web-ui/.next/static/chunks/{813c9d6d-dc0a9294021710c1.js → dddf6c0a-f09ab3fc84be1c52.js} +1 -1
  114. package/web-ui/web-ui/.next/static/chunks/framework-f8855380599951ba.js +1 -0
  115. package/web-ui/web-ui/.next/static/chunks/main-app-7291de73392cac56.js +1 -0
  116. package/web-ui/web-ui/.next/static/chunks/main-ff0082770df07ddc.js +1 -0
  117. package/web-ui/web-ui/.next/static/chunks/pages/_app-56d1709db70ee49f.js +1 -0
  118. package/web-ui/web-ui/.next/static/chunks/pages/_error-63dd320a91a40541.js +1 -0
  119. package/web-ui/web-ui/.next/static/chunks/{webpack-14166b28d6557de1.js → webpack-ea80c9c368a8364e.js} +1 -1
  120. package/web-ui/web-ui/.next/static/css/a30725ee12aca680.css +2 -0
  121. package/web-ui/web-ui/package.json +12 -9
  122. package/web-ui/web-ui/.next/server/chunks/244.js +0 -649
  123. package/web-ui/web-ui/.next/server/chunks/264.js +0 -1
  124. package/web-ui/web-ui/.next/server/chunks/291.js +0 -647
  125. package/web-ui/web-ui/.next/server/chunks/345.js +0 -1
  126. package/web-ui/web-ui/.next/server/chunks/367.js +0 -6
  127. package/web-ui/web-ui/.next/server/chunks/397.js +0 -22
  128. package/web-ui/web-ui/.next/server/chunks/45.js +0 -1
  129. package/web-ui/web-ui/.next/server/chunks/461.js +0 -123
  130. package/web-ui/web-ui/.next/server/chunks/773.js +0 -84
  131. package/web-ui/web-ui/.next/server/chunks/849.js +0 -9
  132. package/web-ui/web-ui/.next/server/chunks/983.js +0 -2
  133. package/web-ui/web-ui/.next/static/chunks/24-d36fb6bd72e29537.js +0 -62
  134. package/web-ui/web-ui/.next/static/chunks/338-78876603768c14bb.js +0 -1
  135. package/web-ui/web-ui/.next/static/chunks/496-a8b6c34560896a23.js +0 -1
  136. package/web-ui/web-ui/.next/static/chunks/561-52ad6ae6bf64b471.js +0 -1
  137. package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-797e2ce43b8db7e1.js +0 -1
  138. package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-d9e9023871035a2d.js +0 -1
  139. package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-5bd8e04955058e46.js +0 -1
  140. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-a254c9fc7cc27b97.js +0 -1
  141. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-622151ff8e6960c8.js +0 -1
  142. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-c1221106bd6ba356.js +0 -1
  143. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-fc68b0fb9b669a03.js +0 -1
  144. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-68418378cfb10a0f.js +0 -1
  145. package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-d15081016f40ac92.js +0 -1
  146. package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/page-a73f4fb185479b19.js +0 -1
  147. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-2b9ea3e95dbe82fb.js +0 -1
  148. package/web-ui/web-ui/.next/static/chunks/app/(app)/security/page-2675f7fb69829b71.js +0 -1
  149. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-315b8b57329d5eb6.js +0 -1
  150. package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-77adb595bb447040.js +0 -1
  151. package/web-ui/web-ui/.next/static/chunks/app/_not-found/page-5728154141ad0edb.js +0 -1
  152. package/web-ui/web-ui/.next/static/chunks/app/layout-8b19b03146218dc7.js +0 -1
  153. package/web-ui/web-ui/.next/static/chunks/app/page-79d71c1635fbf565.js +0 -1
  154. package/web-ui/web-ui/.next/static/chunks/framework-09f91e50832141e4.js +0 -1
  155. package/web-ui/web-ui/.next/static/chunks/main-80ce91d706b796ad.js +0 -1
  156. package/web-ui/web-ui/.next/static/chunks/main-app-23de550d13c8bec1.js +0 -1
  157. package/web-ui/web-ui/.next/static/chunks/pages/_app-ab1bd755bf3a4f53.js +0 -1
  158. package/web-ui/web-ui/.next/static/chunks/pages/_error-541b64fd411d8da6.js +0 -1
  159. package/web-ui/web-ui/.next/static/css/500a1c2bf0fc64fb.css +0 -2
  160. /package/web-ui/web-ui/.next/static/{ez8SLWYcUCScGuFekZ-G_ → X_Z1LZQpnGXTuZXKkv4Vb}/_ssgManifest.js +0 -0
@@ -1,649 +0,0 @@
1
- "use strict";exports.id=244,exports.ids=[244],exports.modules={4244:(a,b,c)=>{c.d(b,{WR:()=>ab,qA:()=>ac,o8:()=>bg,KS:()=>be,tI:()=>bc,_2:()=>ba,Rd:()=>a8,Ji:()=>a4,xR:()=>bf,v5:()=>a9});var d=c(77598),e=c(73024),f=c(76760),g=c(79868),h=c(87400);function i(a){return a.replace(/\\/g,"\\\\").replace(/%/g,"\\%").replace(/_/g,"\\_")}function j(a){return Array.from({length:a},()=>"?").join(", ")}function k(a){return`%${i(a)}%`}function l(a){return`(${a.map(a=>`${a} LIKE ? ESCAPE '\\'`).join(" OR ")})`}let m=0;function n(a,b,c="DEFERRED"){if(a.isTransaction){let c=`aka_sp_${String(m+=1)}`;a.exec(`SAVEPOINT ${c}`);try{b(),a.exec(`RELEASE ${c}`)}catch(b){try{a.exec(`ROLLBACK TO ${c}`),a.exec(`RELEASE ${c}`)}catch{}throw b}return}a.exec("IMMEDIATE"===c?"BEGIN IMMEDIATE":"BEGIN");try{b(),a.exec("COMMIT")}catch(b){try{a.exec("ROLLBACK")}catch{}throw b}}function o(a,b,c="DEFERRED"){let d=a.isTransaction;try{return n(a,b,c),!0}catch(b){if(!a.isTransaction&&d)throw b;return!1}}function p(a){process.stderr.write(`[aka] ${a}
2
- `)}function q(a,b,c){return void 0!==a.prepare("SELECT 1 FROM sqlite_master WHERE type = ? AND name = ? LIMIT 1").get(b,c)}function r(a,b,c){let d=c?.includeGenerated?"table_xinfo":"table_info";return a.prepare(`PRAGMA ${d}(${b})`).all().map(a=>a.name)}function s(a){return(0,d.createHash)("sha256").update(a).digest("hex")}function t(a){return s((0,h.tTV)(["source_project",a]))}function u(a){return"column"===a.kind?`column ${a.table}.${a.name}`:`table ${a.name}`}let v=[{name:"input_tokens",ddl:"ALTER TABLE audit_events ADD COLUMN input_tokens integer GENERATED ALWAYS AS (json_extract(attributes, '$.input_tokens')) VIRTUAL"},{name:"output_tokens",ddl:"ALTER TABLE audit_events ADD COLUMN output_tokens integer GENERATED ALWAYS AS (json_extract(attributes, '$.output_tokens')) VIRTUAL"},{name:"cache_creation_input_tokens",ddl:"ALTER TABLE audit_events ADD COLUMN cache_creation_input_tokens integer GENERATED ALWAYS AS (json_extract(attributes, '$.cache_creation_input_tokens')) VIRTUAL"},{name:"cache_read_input_tokens",ddl:"ALTER TABLE audit_events ADD COLUMN cache_read_input_tokens integer GENERATED ALWAYS AS (json_extract(attributes, '$.cache_read_input_tokens')) VIRTUAL"},{name:"model",ddl:"ALTER TABLE audit_events ADD COLUMN model text GENERATED ALWAYS AS (json_extract(attributes, '$.model')) VIRTUAL"},{name:"provider",ddl:"ALTER TABLE audit_events ADD COLUMN provider text GENERATED ALWAYS AS (json_extract(attributes, '$.provider')) VIRTUAL"}];function w(a,b){r(a,b).includes("synced_at")||a.exec(`ALTER TABLE ${b} ADD COLUMN synced_at integer`)}let x="aka.db";function y(a){(0,e.mkdirSync)(a,{recursive:!0,mode:448});try{(0,e.chmodSync)(a,448)}catch{}}function z(a){return[`${a}-wal`,`${a}-shm`]}function A(a,b){if(null==a)return b;try{return JSON.parse(a)}catch{return b}}function B(a){if(null!=a)try{let b=JSON.parse(a);if("object"==typeof b&&null!==b)return b}catch{}}function C(a,b){return void 0===b?a.all():Array.isArray(b)?a.all(...b):a.all(b)}function D(a,b){return void 0===b?a.get():Array.isArray(b)?a.get(...b):a.get(b)}function E(a){return 1===a||!0===a}function F(a){let b={};for(let[c,d]of Object.entries(a))b[c]=void 0===d?null:d;return b}function G(a,b,c){return D(a.prepare(b),c)?.n??0}function H(a,b,c){let d=new Map;for(let e of C(a.prepare(b),c))d.set(e.k,e.n);return d}function I(a,b){let c=[];for(let d of a)try{c.push(b(d))}catch{}return c}let J="max(started_at, coalesce(ended_at, started_at))";function K(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return"UTC"}}let L={session:"session",prompt:"prompt",response:"response",tool_call:"tool",hook:"hook",detection:"detection",share:"share",permission:"permission",commit:"commit",error:"error",active:"active"};function M(a){if(!a)return[];let b=A(a,null);return Array.isArray(b)?b:[]}function N(a){let b=h.TUN.safeParse(a);return b.success?b.data:"claudecode"}function O(a,b,c){let d=Math.max(a.started_at,b.lastActivityMs),{status:e,endedAtMs:f}=function(a,b,c){if(a.status){let b=h.PhW.safeParse(a.status);if(b.success)return{status:b.data,endedAtMs:a.ended_at}}return null!==a.ended_at?{status:"completed",endedAtMs:a.ended_at}:b>=c-18e5?{status:"active",endedAtMs:null}:{status:"completed",endedAtMs:b}}(a,d,c);return{id:a.id,harness:N(a.harness),title:a.title||a.project||a.repo||`Session ${a.id.slice(0,8)}`,project:a.project??"",repo:a.repo??"",branches:M(a.branches),startedAt:(0,h.q11)(a.started_at),endedAt:null===f?null:(0,h.q11)(f),status:e,turns:b.turns,findings:b.findings,shares:b.shares}}function P(a){let b=L[a.event_type];if(!b)return null;let c=a.severity?h.U7X.safeParse(a.severity):null,d=a.link?h.Itg.safeParse(a.link):null;return{id:a.id,occurredAt:(0,h.q11)(a.started_at),kind:b,title:a.title??"",detail:a.detail??"",tool:a.tool,severity:c?.success?c.data:null,link:d?.success?d.data:null,targetId:a.target_id,internal:E(a.internal),flagged:E(a.flagged)}}let Q=`
3
- id,
4
- event_type,
5
- started_at,
6
- coalesce(content, json_extract(attributes, '$.tool_name')) AS title,
7
- coalesce(json_extract(attributes, '$.detail'), json_extract(attributes, '$.target')) AS detail,
8
- coalesce(json_extract(attributes, '$.tool_name'), json_extract(attributes, '$.tool')) AS tool,
9
- json_extract(attributes, '$.severity') AS severity,
10
- json_extract(attributes, '$.link') AS link,
11
- json_extract(attributes, '$.targetId') AS target_id,
12
- json_extract(attributes, '$.internal') AS internal,
13
- json_extract(attributes, '$.flagged') AS flagged`,R="event_type = 'session'",S=`EXISTS (
14
- SELECT 1 FROM audit_events c
15
- WHERE c.root_session_id = audit_events.id
16
- AND c.event_type NOT IN ('hook', 'config_scan'))`;class T{constructor(a,b=()=>Date.now()){this.db=a,this.now=b}stats(a){let{startMs:b,endMs:c}=function a(b,c){let d;try{d=new Intl.DateTimeFormat("en-US",{timeZone:b,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}).formatToParts(new Date(c))}catch{let d=K();return b===d?function(a){let b=864e5*Math.floor(a/864e5);return{startMs:b,endMs:b+864e5}}(c):a(d,c)}let e=Object.fromEntries(d.map(a=>[a.type,a.value])),f=Number(e.year),g=Number(e.month),h=Number(e.day),i=Number(e.hour),j=Date.UTC(f,g-1,h,i,Number(e.minute),Number(e.second))-c,k=Date.UTC(f,g-1,h,0,0,0)-j;return{startMs:k,endMs:k+864e5}}(a??K(),this.now()),d=G(this.db,`SELECT count(*) AS n FROM audit_events
17
- WHERE ${R} AND started_at >= ? AND started_at < ?
18
- AND ${S}`,[b,c]),e=this.now()-18e5,f=G(this.db,`SELECT count(*) AS n FROM audit_events s
19
- WHERE s.event_type = 'session' AND s.ended_at IS NULL
20
- AND max(
21
- s.started_at,
22
- coalesce(
23
- (SELECT max(${J}) FROM audit_events e WHERE e.root_session_id = s.id),
24
- s.started_at
25
- )
26
- ) >= ?`,[e]),g=G(this.db,`SELECT count(*) AS n FROM audit_events
27
- WHERE event_type = 'tool_call' AND started_at >= ? AND started_at < ?`,[b,c]);return Promise.resolve({sessionsToday:d,liveNow:f,toolCallsToday:g,findingsToday:G(this.db,`SELECT count(*) AS n FROM inspection_findings f
28
- JOIN audit_events e ON e.id = f.audit_event_id
29
- WHERE e.started_at >= ? AND e.started_at < ?`,[b,c]),egressToday:G(this.db,`SELECT count(DISTINCT json_extract(attributes, '$.destination')) AS n
30
- FROM audit_events
31
- WHERE event_type = 'share' AND started_at >= ? AND started_at < ?`,[b,c])})}listSessions(a){var b;let c=a.cursor?function(a){let b=B(Buffer.from(a,"base64url").toString("utf8"));return void 0!==b&&"startedAtMs"in b&&"id"in b&&"number"==typeof b.startedAtMs&&"string"==typeof b.id?b:null}(a.cursor):null,d=a.to?(0,h.I8t)(a.to):this.now(),e=a.from?(0,h.I8t)(a.from):void 0,f=[R],g=[];if(a.harness&&a.harness.length>0&&(f.push(`coalesce(json_extract(attributes, '$.harness'), 'claudecode') IN (${j(a.harness.length)})`),g.push(...a.harness)),void 0!==e&&(f.push("started_at >= ?"),g.push(e)),f.push("started_at <= ?"),g.push(d),a.q){let b=k(a.q);f.push(`(content LIKE ? ESCAPE '\\'
32
- OR json_extract(attributes, '$.project') LIKE ? ESCAPE '\\'
33
- OR json_extract(attributes, '$.repo') LIKE ? ESCAPE '\\'
34
- OR json_extract(attributes, '$.branches') LIKE ? ESCAPE '\\'
35
- OR EXISTS (
36
- SELECT 1 FROM audit_events d
37
- WHERE d.root_session_id = audit_events.id
38
- AND (d.content LIKE ? ESCAPE '\\'
39
- OR json_extract(d.attributes, '$.detail') LIKE ? ESCAPE '\\')))`),g.push(b,b,b,b,b,b)}let i=G(this.db,`SELECT count(*) AS n FROM audit_events
40
- WHERE ${[...f,`NOT ${S}`].join(" AND ")}`,g);a.excludeEmpty&&f.push(S),c&&(f.push("(started_at < ? OR (started_at = ? AND id < ?))"),g.push(c.startedAtMs,c.startedAtMs,c.id));let l=a.limit,m=C(this.db.prepare(`SELECT id,
41
- json_extract(attributes, '$.harness') AS harness,
42
- content AS title,
43
- json_extract(attributes, '$.project') AS project,
44
- json_extract(attributes, '$.repo') AS repo,
45
- json_extract(attributes, '$.branches') AS branches,
46
- json_extract(attributes, '$.status') AS status,
47
- started_at,
48
- ended_at
49
- FROM audit_events
50
- WHERE ${f.join(" AND ")}
51
- ORDER BY started_at DESC, id DESC
52
- LIMIT ?`),[...g,l+1]),n=m.length>l,o=n?m.slice(0,l):m,p=this.rollupsFor(o.map(a=>a.id)),q=this.now(),r=o.map(a=>O(a,p.get(a.id)??{turns:0,findings:0,shares:0,lastActivityMs:0},q)),s=o[o.length-1];return Promise.resolve({items:r,nextCursor:n&&s?(b={startedAtMs:s.started_at,id:s.id},Buffer.from(JSON.stringify(b)).toString("base64url")):null,emptyCount:i})}getSession(a){let b=D(this.db.prepare(`SELECT id,
53
- json_extract(attributes, '$.harness') AS harness,
54
- content AS title,
55
- json_extract(attributes, '$.project') AS project,
56
- json_extract(attributes, '$.repo') AS repo,
57
- json_extract(attributes, '$.branches') AS branches,
58
- json_extract(attributes, '$.status') AS status,
59
- json_extract(attributes, '$.host') AS host,
60
- json_extract(attributes, '$.cwd') AS cwd,
61
- json_extract(attributes, '$.models') AS models,
62
- json_extract(attributes, '$.version') AS version,
63
- json_extract(attributes, '$.files') AS files,
64
- started_at,
65
- ended_at
66
- FROM audit_events
67
- WHERE id = ? AND event_type = 'session'
68
- LIMIT 1`),[a]);if(!b)return Promise.resolve(null);let c=C(this.db.prepare(`SELECT ${Q}
69
- FROM audit_events
70
- WHERE id = ? OR root_session_id = ?
71
- ORDER BY started_at ASC, id ASC`),[a,a]).map(P).filter(a=>null!==a),d=D(this.db.prepare(`SELECT
72
- coalesce(sum(input_tokens), 0) AS input,
73
- coalesce(sum(output_tokens), 0) AS output,
74
- coalesce(sum(cache_creation_input_tokens), 0) AS cache_creation,
75
- coalesce(sum(cache_read_input_tokens), 0) AS cache_read
76
- FROM audit_events
77
- WHERE root_session_id = ? AND event_type = 'llm_call'`),[a])??{input:0,output:0,cache_creation:0,cache_read:0},e=D(this.db.prepare(`SELECT model, provider FROM audit_events
78
- WHERE root_session_id = ? AND event_type = 'llm_call'
79
- ORDER BY started_at ASC, id ASC
80
- LIMIT 1`),[a]),f=C(this.db.prepare(`SELECT coalesce(json_extract(attributes, '$.tool_name'), json_extract(attributes, '$.tool')) AS tool,
81
- count(*) AS n
82
- FROM audit_events
83
- WHERE root_session_id = ? AND event_type = 'tool_call'
84
- GROUP BY coalesce(json_extract(attributes, '$.tool_name'), json_extract(attributes, '$.tool'))`),[a]),g=C(this.db.prepare(`SELECT DISTINCT model FROM audit_events
85
- WHERE root_session_id = ? AND event_type = 'llm_call' AND model IS NOT NULL AND model <> ''
86
- ORDER BY model`),[a]).map(a=>a.model),h=G(this.db,`SELECT count(*) AS n FROM audit_events
87
- WHERE root_session_id = ? AND event_type = 'commit'`,[a]),i=this.rollupsFor([a]).get(a)??{turns:0,findings:0,shares:0,lastActivityMs:0},j={sessionId:a,model:e?.model??"",provider:e?.provider??"",inputTokens:d.input,outputTokens:d.output,cacheCreation:d.cache_creation,cacheRead:d.cache_read,totalTokens:d.input+d.output+d.cache_creation+d.cache_read,estimatedCostUsd:null};return Promise.resolve({...O(b,i,this.now()),host:b.host??"",cwd:b.cwd??"",models:g.length>0?g:M(b.models),version:b.version??"",tokens:j,tools:Object.fromEntries(f.flatMap(a=>a.tool?[[a.tool,a.n]]:[])),files:M(b.files),commits:h,events:c})}tokenReports(a){let b=this.readLlmCallLeaves(void 0===a?{}:{fromMs:a});return Promise.resolve((0,h.ryv)(b,h.q_t))}tokenReportForSession(a){return Promise.resolve((0,h.ryv)(this.readLlmCallLeaves({sessionId:a}),h.q_t)[0]??null)}harnessFacets(a){let b=C(this.db.prepare(`SELECT DISTINCT coalesce(json_extract(attributes, '$.harness'), 'claudecode') AS harness
88
- FROM audit_events WHERE ${R}${void 0===a?"":" AND started_at >= ?"}`),void 0===a?void 0:[a]),c=new Set;for(let a of b)c.add(N(a.harness));return Promise.resolve([...c])}readLlmCallLeaves(a={}){let b=["event_type = 'llm_call'","attributes IS NOT NULL"],c=[];return void 0!==a.sessionId&&(b.push("root_session_id = ?"),c.push(a.sessionId)),void 0!==a.fromMs&&(b.push("started_at >= ?"),c.push(a.fromMs)),I(C(this.db.prepare(`SELECT root_session_id AS sessionId, attributes
89
- FROM audit_events
90
- WHERE ${b.join(" AND ")}`),c).filter(a=>null!==a.sessionId),a=>({sessionId:a.sessionId,attributes:JSON.parse(a.attributes)}))}rollupsFor(a){let b=new Map(a.map(a=>[a,{turns:0,findings:0,shares:0,lastActivityMs:0}]));if(0===a.length)return b;let c=j(a.length);for(let d of C(this.db.prepare(`SELECT root_session_id AS id, max(${J}) AS m FROM audit_events
91
- WHERE root_session_id IN (${c})
92
- GROUP BY root_session_id`),a)){if(null===d.id)continue;let a=b.get(d.id);a&&null!==d.m&&(a.lastActivityMs=d.m)}for(let d of C(this.db.prepare(`SELECT root_session_id AS id, count(*) AS n FROM audit_events
93
- WHERE root_session_id IN (${c}) AND event_type = 'prompt'
94
- GROUP BY root_session_id`),a)){if(null===d.id)continue;let a=b.get(d.id);a&&(a.turns=d.n)}for(let d of C(this.db.prepare(`SELECT root_session_id AS id,
95
- count(DISTINCT json_extract(attributes, '$.run_key')) AS n
96
- FROM audit_events
97
- WHERE root_session_id IN (${c}) AND event_type = 'llm_call'
98
- AND json_extract(attributes, '$.run_key') IS NOT NULL
99
- GROUP BY root_session_id`),a)){if(null===d.id)continue;let a=b.get(d.id);a&&(a.turns=Math.max(a.turns,d.n))}for(let d of C(this.db.prepare(`SELECT e.root_session_id AS id, count(*) AS n FROM inspection_findings f
100
- JOIN audit_events e ON e.id = f.audit_event_id
101
- WHERE e.root_session_id IN (${c})
102
- GROUP BY e.root_session_id`),a)){if(null===d.id)continue;let a=b.get(d.id);a&&(a.findings=d.n)}for(let d of C(this.db.prepare(`SELECT root_session_id AS id,
103
- count(DISTINCT json_extract(attributes, '$.destination')) AS n
104
- FROM audit_events
105
- WHERE root_session_id IN (${c}) AND event_type = 'share'
106
- GROUP BY root_session_id`),a)){if(null===d.id)continue;let a=b.get(d.id);a&&(a.shares=d.n)}return b}}class U{constructor(a){this.db=a,this.insertStmt=a.prepare(`INSERT OR IGNORE INTO audit_events
107
- (id, parent_id, root_session_id, event_type,
108
- host_id, harness_id, source_project_id, started_at, ended_at,
109
- severity, priority, content, content_hash, attributes)
110
- VALUES
111
- (:id, :parentId, :rootSessionId, :eventType,
112
- :hostId, :harnessId, :sourceProjectId, :startedAt, :endedAt,
113
- :severity, :priority, :content, :contentHash, :attributes)`),this.upsertLlmCallStmt=a.prepare(`INSERT INTO audit_events
114
- (id, parent_id, root_session_id, event_type,
115
- host_id, harness_id, source_project_id, started_at, ended_at,
116
- severity, priority, content, content_hash, attributes)
117
- VALUES
118
- (:id, :parentId, :rootSessionId, :eventType,
119
- :hostId, :harnessId, :sourceProjectId, :startedAt, :endedAt,
120
- :severity, :priority, :content, :contentHash, :attributes)
121
- ON CONFLICT(id) DO UPDATE SET
122
- attributes = excluded.attributes,
123
- ended_at = excluded.ended_at
124
- WHERE COALESCE(json_extract(excluded.attributes, '$.output_tokens'), 0)
125
- > COALESCE(json_extract(audit_events.attributes, '$.output_tokens'), 0)`)}runInTransaction(a){n(this.db,a)}insertAuditEvent(a){let b=(0,h.V9M)(a);this.insertStmt.run(F({id:b.id,parentId:b.parentId,rootSessionId:b.rootSessionId,eventType:b.eventType,hostId:b.hostId,harnessId:b.harnessId,sourceProjectId:b.sourceProjectId,startedAt:b.startedAt,endedAt:b.endedAt,severity:b.severity,priority:b.priority,content:b.content,contentHash:b.contentHash,attributes:b.attributes}))}insertLlmCall(a){var b,c;let d=(0,h.I8t)(a.startedAt);if(!Number.isFinite(d))return;let e=(b=a.sessionId,c=a.messageId,s((0,h.tTV)(["audit_event_llm_call",b,c])));this.upsertLlmCallStmt.run(F({id:e,parentId:a.parentId,rootSessionId:a.rootSessionId,eventType:"llm_call",hostId:null,harnessId:null,sourceProjectId:null,startedAt:d,endedAt:null,severity:null,priority:null,content:null,contentHash:null,attributes:JSON.stringify(a.attributes)}))}insertToolCall(a){var b,c;let d=(0,h.I8t)(a.startedAt);if(!Number.isFinite(d))return;let e=(b=a.sessionId,c=a.toolUseId,s((0,h.tTV)(["audit_event_tool_call",b,c])));this.insertStmt.run(F({id:e,parentId:a.parentId,rootSessionId:a.rootSessionId,eventType:"tool_call",hostId:null,harnessId:null,sourceProjectId:null,startedAt:d,endedAt:null,severity:null,priority:null,content:null,contentHash:null,attributes:JSON.stringify(a.attributes)}))}findById(a){return D(this.db.prepare("SELECT * FROM audit_events WHERE id = :id"),{id:a})}sessionProvider(a){let b=this.findById(a);if(!b?.attributes)return;let c=B(b.attributes)?.provider;if("string"==typeof c)return c}llmCallLeaves(){return C(this.db.prepare(`SELECT root_session_id AS sessionId, attributes
126
- FROM audit_events
127
- WHERE event_type = 'llm_call' AND attributes IS NOT NULL`))}}class V{constructor(a){this.db=a,this.insertStmt=a.prepare(`INSERT OR IGNORE INTO classified_data (id, class, label, attributes)
128
- VALUES (:id, :class, :label, :attributes)`)}upsert(a){var b;let c=(b=a.class,s((0,h.tTV)(["classified_data",b]))),d=(0,h.$BP)(a,c);return this.insertStmt.run(F({id:d.id,class:d.class,label:d.label,attributes:d.attributes})),c}}function W(a){return D(a.prepare(`SELECT id, started_at, attributes FROM audit_events
129
- WHERE event_type = 'config_scan'
130
- ORDER BY started_at DESC, id DESC LIMIT 1`))}class X{constructor(a){this.db=a}report(){let a=W(this.db);if(!a)return{scannedAt:null,skills:[],hooks:[],mcpServers:[],configFiles:[],topics:[]};let b=C(this.db.prepare(`SELECT id, object_type AS objectType, title, location, attributes FROM inventory
131
- WHERE object_type IN ('skill', 'hook', 'mcp_server', 'config_file') AND last_seen >= :startedAt
132
- ORDER BY object_type, title`),{startedAt:a.started_at}),c=C(this.db.prepare(`SELECT f.masked_match AS maskedMatch, d.rule_id AS ruleId, d.name AS name
133
- FROM inspection_findings f
134
- JOIN inspection_definitions d ON d.id = f.inspection_definition_id
135
- WHERE f.audit_event_id = :scanId`),{scanId:a.id}),d=[],e=[],f=[],g=[],h=this.trustOverrides();for(let a of b){let b=B(a.attributes);b&&("skill"===a.objectType?d.push(function(a,b){let c={id:a.id,name:a.title??"(unnamed)",source:Y(b.source)??"unknown",scope:Y(b.scope)??"unknown",status:"unknown"},d=Y(b.description);void 0!==d&&(c.description=d);let e=Y(b.version);void 0!==e&&(c.installedVersion=e);let f=Y(b.updated_at);return void 0!==f&&(c.updatedAt=f),c}(a,b)):"hook"===a.objectType?e.push(function(a,b,c){let d=Y(b.command)??"",e=c.filter(a=>a.maskedMatch===d),f={id:a.id,event:Y(b.event)??"unknown",command:d,scope:Y(b.scope)??"unknown",status:e.some(a=>"hook-external-egress"===a.ruleId)?"egress":e.some(a=>"hook-conflict"===a.ruleId)?"conflict":e.some(a=>"hook-unknown"===a.ruleId)?"unknown":"active",warnings:e.map(a=>a.name)},g=Y(b.matcher);void 0!==g&&(f.matcher=g);let h=Y(b.plugin_name);return void 0!==h&&(f.pluginName=h),f}(a,b,c)):"mcp_server"===a.objectType?f.push(function(a,b,c){let d={id:a.id,name:a.title??"(unnamed)",scope:Y(b.scope)??"unknown",transport:Y(b.transport)??"unknown",trust:c.get(a.id)??"unapproved"},e=Y(b.command);void 0!==e&&(d.command=e);let f=Y(b.url);if(void 0!==f&&(d.url=f),Array.isArray(b.env_keys)){let a=b.env_keys.filter(a=>"string"==typeof a);a.length>0&&(d.envKeys=a)}let g=Y(b.plugin_name);void 0!==g&&(d.pluginName=g);let h=Y(b.marketplace);void 0!==h&&(d.marketplace=h);let i=Y(b.project);return void 0!==i&&(d.project=i),d}(a,b,h)):g.push(function(a,b){let c=Y(b.scope)??"unknown",d={id:a.id,name:a.title??"(unnamed)",path:a.location??"",scope:c,kind:Y(b.kind)??"Configuration file",untracked:"local"===c},e=Y(b.detail);void 0!==e&&(d.detail=e),"number"==typeof b.entry_count&&(d.entryCount=b.entry_count);let f=Y(b.updated_at);return void 0!==f&&(d.updatedAt=f),d}(a,b)))}return{scannedAt:new Date(a.started_at).toISOString(),skills:d,hooks:e,mcpServers:f,configFiles:g,topics:function(a,b,c,d,e){let f=[],g=a.filter(a=>"update_available"===a.status).length,h={topic:"skills",count:a.length};g>0&&(h.attention=`${String(g)} updates`),f.push(h);let i=b.filter(a=>"egress"===a.status).length,j=b.filter(a=>"conflict"===a.status).length,k=b.filter(a=>"unknown"===a.status).length,l=[];i>0&&l.push(`${String(i)} egress`),k>0&&l.push(`${String(k)} unknown`),j>0&&l.push(`${String(j)} conflict${j>1?"s":""}`);let m={topic:"hooks",count:b.length};l.length>0&&(m.attention=l.join(" \xb7 ")),f.push(m);let n=c.filter(a=>"unapproved"===a.trust).length,o={topic:"mcp",count:c.length};n>0&&(o.attention=`${String(n)} unapproved`),f.push(o);let p=d.filter(a=>a.untracked).length,q={topic:"config_files",count:d.length};p>0&&(q.attention=`${String(p)} untracked`),f.push(q);let r=function(a){let b=B(a)?.errors;return"number"==typeof b?b:0}(e),s={topic:"configuration",count:r};return r>0&&(s.attention=`${String(r)} sources failed to parse`),f.push(s),f}(d,e,f,g,a.attributes)}}trustOverrides(){let a=C(this.db.prepare("SELECT asset_id AS assetId, trust FROM mcp_trust_override")),b=new Map;for(let c of a)("known-good"===c.trust||"risky"===c.trust||"unapproved"===c.trust)&&b.set(c.assetId,c.trust);return b}}function Y(a){return"string"==typeof a?a:void 0}function Z(a){let b=A(a,[]);if(!Array.isArray(b))return[];let c=[];for(let a of b)a&&"object"==typeof a&&c.push(a);return c}function $(a,b){return a.version!==b.version||a.rulesJson!==b.rulesJson}class _{constructor(a,b=()=>Date.now()){this.db=a,this.now=b}listDetections(a){let b=C(this.db.prepare(`SELECT namespace, pack_id AS packId, version, name, enabled, policy_id AS policyId,
136
- rules_json AS rulesJson
137
- FROM installed_packs`)),c=this.availableByPack(),d=b.map(a=>{let b=c.get(`${a.namespace}/${a.packId}`);return{namespace:a.namespace,packId:a.packId,version:a.version,name:a.name,enabled:E(a.enabled),ruleCount:Z(a.rulesJson).length,policyId:a.policyId,...b&&$(a,b)?{latestVersion:b.version}:{}}});return Promise.resolve((0,h.plk)(d,a))}availableByPack(){return new Map(C(this.db.prepare(`SELECT namespace, pack_id AS packId, version, rules_json AS rulesJson
138
- FROM available_packs`)).map(a=>[`${a.namespace}/${a.packId}`,a]))}getDetectionStats(){let a=C(this.db.prepare("SELECT enabled, rules_json AS rulesJson FROM installed_packs")),b=0,c=0,d=new Set;for(let e of a){E(e.enabled)&&(c+=1);let a=Z(e.rulesJson);for(let c of(b+=a.length,a))"string"==typeof c.id&&d.add(c.id)}return Promise.resolve({detections:a.length,rules:b,active:c,findingsLast30d:this.countFindingsLast30d([...d])})}getDetectionDetail(a){let b=(0,h.pnU)(a);if(!b)return Promise.resolve(null);let{namespace:c,packId:d}=b,e=D(this.db.prepare(`SELECT namespace, pack_id AS packId, version, name, enabled, policy_id AS policyId,
139
- rules_json AS rulesJson, updated_at AS updatedAt
140
- FROM installed_packs
141
- WHERE namespace = ? AND pack_id = ?`),[c,d]);if(!e)return Promise.resolve(null);let f=Z(e.rulesJson),g=f.map(a=>a.id).filter(a=>"string"==typeof a),i=this.countFindingsLast30d(g),j=this.availableByPack().get(`${e.namespace}/${e.packId}`),k=j?$(e,j)?{available:!0,latestVersion:j.version,latestRuleCount:Z(j.rulesJson).length}:{available:!1,latestVersion:j.version}:null;return Promise.resolve((0,h.a45)({namespace:e.namespace,packId:e.packId,version:e.version,name:e.name,enabled:E(e.enabled),rules:f,updatedAt:new Date(e.updatedAt),policyId:e.policyId},i,k))}countFindingsLast30d(a){if(0===a.length)return 0;let b=this.now()-2592e6,c=j(a.length);return G(this.db,`SELECT count(*) AS n
142
- FROM findings f JOIN events e ON e.id = f.event_id
143
- WHERE e.occurred_at >= ? AND f.rule_id IN (${c})`,[b,...a])}}class aa{constructor(a){this.db=a,this.insertStmt=a.prepare(`INSERT INTO events (id, source_tool, kind, occurred_at, content_hash, content, metadata)
144
- VALUES (:id, :sourceTool, :kind, :occurredAt, :contentHash, :content, :metadata)`)}insertEvent(a){let b=(0,h.yaP)(a);this.insertStmt.run(F({id:b.id,sourceTool:b.sourceTool,kind:b.kind,occurredAt:b.occurredAt,contentHash:b.contentHash,content:b.content,metadata:b.metadata}))}contentHashes(){return Promise.resolve(new Set(C(this.db.prepare("SELECT content_hash FROM events")).map(a=>a.content_hash)))}}let ab=864e5;class ac extends Error{constructor(a){super(`duplicate-active-exception: an active exception already exists for rule "${a}" and this value — revoke it before granting a new one`),this.code="duplicate-active-exception",this.name="DuplicateActiveExceptionError"}}class ad extends Error{constructor(a){super(`ambiguous-exception-id: "${a}" matches more than one exception — add more characters`),this.code="ambiguous-exception-id",this.name="AmbiguousExceptionIdError"}}let ae=`revoked_at IS NULL
145
- AND (expires_at IS NULL OR expires_at > :now)
146
- AND (max_uses IS NULL OR use_count < max_uses)`;class af{constructor(a){this.db=a,this.consumeStmt=a.prepare(`UPDATE exceptions
147
- SET use_count = use_count + 1, last_used_at = :now, updated_at = :now
148
- WHERE id = :id AND ${ae}`),this.insertBlockedStmt=a.prepare(`INSERT OR REPLACE INTO blocked_detections (reference, rule_id, category, value_fingerprint, key_version, masked_value, session_id, repo, blocked_at)
149
- VALUES (:reference, :ruleId, :category, :valueFingerprint, :keyVersion, :maskedValue, :sessionId, :repo, :blockedAt)`),this.sweepBlockedStmt=a.prepare("DELETE FROM blocked_detections WHERE blocked_at <= :cutoff")}create(a){try{return Promise.resolve(this.createSync(a))}catch(a){return Promise.reject(a instanceof Error?a:Error(String(a)))}}createSync(a){if(a.conditions?.provider!==void 0)throw Error("provider conditions are not supported yet — a grant with one would never apply");let b=(0,d.randomUUID)(),c=Date.now();try{this.insertExceptionRow(b,a,c)}catch(d){if(!(d instanceof Error&&(2067===d.errcode||d.message.includes("UNIQUE constraint failed"))))throw d;n(this.db,()=>{if(1!==Number(this.db.prepare(`UPDATE exceptions
150
- SET revoked_at = :now, revoked_by = :revokedBy,
151
- revoke_reason = 'superseded by a new grant for the same value',
152
- updated_at = :now
153
- WHERE rule_id = :ruleId AND value_fingerprint = :valueFingerprint
154
- AND key_version = :keyVersion AND revoked_at IS NULL
155
- AND ((expires_at IS NOT NULL AND expires_at <= :now)
156
- OR (max_uses IS NOT NULL AND use_count >= max_uses))`).run({now:c,revokedBy:a.createdBy,ruleId:a.ruleId,valueFingerprint:a.valueFingerprint,keyVersion:a.keyVersion}).changes))throw new ac(a.ruleId);this.insertExceptionRow(b,a,c)},"IMMEDIATE")}let e=D(this.db.prepare("SELECT * FROM exceptions WHERE id = :id"),{id:b});if(void 0===e)throw Error("exception row not found immediately after insert");return ag(e)}insertExceptionRow(a,b,c){this.db.prepare(`INSERT INTO exceptions (
157
- id, rule_id, category, value_fingerprint, key_version, masked_value,
158
- scope, expires_at, max_uses, use_count, last_used_at, justification,
159
- conditions, created_by, created_via, created_at, updated_at
160
- ) VALUES (
161
- :id, :ruleId, :category, :valueFingerprint, :keyVersion, :maskedValue,
162
- :scope, :expiresAt, :maxUses, 0, NULL, :justification,
163
- :conditions, :createdBy, :createdVia, :now, :now
164
- )`).run({id:a,ruleId:b.ruleId,category:b.category,valueFingerprint:b.valueFingerprint,keyVersion:b.keyVersion,maskedValue:b.maskedValue,scope:b.scope,expiresAt:null===b.expiresAt?null:(0,h.I8t)(b.expiresAt),maxUses:b.maxUses,justification:b.justification,conditions:null===b.conditions?null:JSON.stringify(b.conditions),createdBy:b.createdBy,createdVia:b.createdVia,now:c})}list(a){let b=a?.includeTerminal?"":`WHERE ${ae}`;return Promise.resolve(I(C(this.db.prepare(`SELECT * FROM exceptions ${b} ORDER BY created_at DESC, rowid DESC`),a?.includeTerminal?{}:{now:Date.now()}),ag))}getByIdPrefix(a){if(0===a.length)return Promise.resolve(void 0);let b=C(this.db.prepare(String.raw`SELECT * FROM exceptions WHERE id LIKE :pattern ESCAPE '\' LIMIT 2`),{pattern:`${i(a)}%`});if(b.length>1)return Promise.reject(new ad(a));let c=b[0];if(!c)return Promise.resolve(void 0);try{return Promise.resolve(ag(c))}catch{return Promise.resolve(void 0)}}revoke(a,b,c){let d=Date.now();return Promise.resolve(1===Number(this.db.prepare(`UPDATE exceptions
165
- SET revoked_at = :now, revoked_by = :revokedBy, revoke_reason = :reason, updated_at = :now
166
- WHERE id = :id AND revoked_at IS NULL`).run({id:a,revokedBy:b,reason:c??null,now:d}).changes))}consume(a,b=Date.now()){return Promise.resolve(1===Number(this.consumeStmt.run({id:a,now:b}).changes))}activeBundleEntries(a,b=Date.now()){return Promise.resolve(I(C(this.db.prepare(`SELECT * FROM exceptions
167
- WHERE key_version = :keyVersion AND ${ae}
168
- ORDER BY created_at DESC, rowid DESC`),{keyVersion:a,now:b}),a=>{let b=null===a.conditions?null:JSON.parse(a.conditions);return h.iRC.parse({id:a.id,ruleId:a.rule_id,valueFingerprint:a.value_fingerprint,keyVersion:a.key_version,expiresAt:null===a.expires_at?null:(0,h.q11)(a.expires_at),maxUses:a.max_uses,useCount:a.use_count,conditions:b})}))}recordBlocked(a){let b=Date.now();return this.sweepBlockedStmt.run({cutoff:b-ab}),this.insertBlockedStmt.run({reference:a.reference,ruleId:a.ruleId,category:a.category,valueFingerprint:a.valueFingerprint,keyVersion:a.keyVersion,maskedValue:a.maskedValue,sessionId:a.sessionId,repo:a.repo,blockedAt:b}),Promise.resolve()}recentBlocked(a=18e5){return Promise.resolve(C(this.db.prepare(`SELECT * FROM blocked_detections
169
- WHERE blocked_at > :cutoff
170
- ORDER BY blocked_at DESC, rowid DESC`),{cutoff:Date.now()-a}).map(a=>({reference:a.reference,ruleId:a.rule_id,category:a.category,valueFingerprint:a.value_fingerprint,keyVersion:a.key_version,maskedValue:a.masked_value,sessionId:a.session_id,repo:a.repo,blockedAt:(0,h.q11)(a.blocked_at)})))}sweepTerminal(a,b=Date.now()){return Promise.resolve(Number(this.db.prepare(`DELETE FROM exceptions
171
- WHERE updated_at < :cutoff
172
- AND (revoked_at IS NOT NULL
173
- OR (expires_at IS NOT NULL AND expires_at <= :now)
174
- OR (max_uses IS NOT NULL AND use_count >= max_uses))`).run({cutoff:b-a,now:b}).changes))}}function ag(a){let b=null===a.conditions?null:JSON.parse(a.conditions);return h.V8B.parse({id:a.id,ruleId:a.rule_id,category:a.category,valueFingerprint:a.value_fingerprint,keyVersion:a.key_version,maskedValue:a.masked_value,scope:a.scope,expiresAt:null===a.expires_at?null:(0,h.q11)(a.expires_at),maxUses:a.max_uses,useCount:a.use_count,lastUsedAt:null===a.last_used_at?null:(0,h.q11)(a.last_used_at),justification:a.justification,conditions:b,createdBy:a.created_by,createdVia:a.created_via,createdAt:(0,h.q11)(a.created_at),updatedAt:(0,h.q11)(a.updated_at),revokedAt:null===a.revoked_at?null:(0,h.q11)(a.revoked_at),revokedBy:a.revoked_by,revokeReason:a.revoke_reason})}function ah(a){return`(
175
- SELECT fr.status FROM finding_resolution fr
176
- WHERE fr.finding_key = ${a}.finding_key
177
- ORDER BY fr.created_at DESC, fr.rowid DESC
178
- LIMIT 1
179
- )`}let ai=`(
180
- SELECT finding_key, status FROM (
181
- SELECT fr.finding_key, fr.status,
182
- ROW_NUMBER() OVER (
183
- PARTITION BY fr.finding_key
184
- ORDER BY fr.created_at DESC, fr.rowid DESC
185
- ) AS rn
186
- FROM finding_resolution fr
187
- ) WHERE rn = 1
188
- )`;function aj(a){return null===a||""===a?[]:a.split(",")}class ak{constructor(a){this.db=a,this.insertStmt=a.prepare(`INSERT INTO findings (id, event_id, rule_id, category, severity, span_start, span_end, masked_match, action_taken, confidence, finding_key, first_detected_at)
189
- VALUES (:id, :eventId, :ruleId, :category, :severity, :spanStart, :spanEnd, :maskedMatch, :actionTaken, :confidence, :findingKey,
190
- (SELECT occurred_at FROM events WHERE id = :eventId))
191
- ON CONFLICT (finding_key) DO UPDATE SET
192
- event_id = excluded.event_id,
193
- category = excluded.category,
194
- severity = excluded.severity,
195
- span_start = excluded.span_start,
196
- span_end = excluded.span_end,
197
- masked_match = excluded.masked_match,
198
- action_taken = excluded.action_taken,
199
- confidence = excluded.confidence`),this.sessionDupStmt=a.prepare(`SELECT 1 FROM findings f JOIN events e ON e.id = f.event_id
200
- WHERE f.rule_id = :ruleId AND f.masked_match = :maskedMatch
201
- AND json_extract(e.metadata, '$.sessionId') = :sessionId
202
- LIMIT 1`)}insertFindings(a,b={}){for(let c of a){if(b.sessionId&&this.isSessionDuplicate(c,b.sessionId))continue;let a=(0,h.zw)(c);this.insertStmt.run({id:a.id,eventId:a.eventId,ruleId:a.ruleId,category:a.category,severity:a.severity,spanStart:a.spanStart,spanEnd:a.spanEnd,maskedMatch:a.maskedMatch,actionTaken:a.actionTaken,confidence:a.confidence,findingKey:a.findingKey??null})}}isSessionDuplicate(a,b){return void 0!==this.sessionDupStmt.get({ruleId:a.ruleId,maskedMatch:a.maskedMatch,sessionId:b})}recentFindings(a){let b=a?.limit??50;return Promise.resolve(C(this.db.prepare(`SELECT f.id, f.event_id, f.rule_id, f.category, f.severity, f.masked_match,
203
- f.action_taken, f.confidence, e.occurred_at, e.source_tool, e.kind
204
- FROM findings f JOIN events e ON e.id = f.event_id
205
- ORDER BY e.occurred_at DESC, f.rowid DESC
206
- LIMIT :limit`),{limit:b}).map(a=>({id:a.id,eventId:a.event_id,ruleId:a.rule_id,category:a.category,severity:a.severity,maskedMatch:a.masked_match,actionTaken:a.action_taken,confidence:a.confidence,occurredAt:(0,h.q11)(a.occurred_at),sourceTool:a.source_tool,kind:a.kind})))}sessionFindingsCount(a){return a?Promise.resolve(G(this.db,`SELECT count(*) AS n FROM findings f
207
- JOIN events e ON e.id = f.event_id
208
- WHERE json_extract(e.metadata, '$.sessionId') = :sessionId`,{sessionId:a})):Promise.resolve(0)}sessionFirings(a){return Object.fromEntries(H(this.db,`SELECT d.rule_id AS k, count(*) AS n
209
- FROM inspection_findings f
210
- JOIN audit_events e ON e.id = f.audit_event_id
211
- JOIN inspection_definitions d ON d.id = f.inspection_definition_id
212
- WHERE e.root_session_id = :sessionId
213
- GROUP BY d.rule_id`,{sessionId:a}))}listGroupedFindings(a){let b=a.sessionId?"WHERE json_extract(e.metadata, '$.sessionId') = :sessionId":"",c=a.sessionId?{sessionId:a.sessionId}:{},d=this.groupAggregates(void 0!==a.q&&""!==a.q,{predicate:b,params:c}),e=C(this.db.prepare(`SELECT id, rule_id, category, severity, masked_match, action_taken, confidence,
214
- occurred_at, source_tool, repo, file, tool_name, kind, finding_key, latest_status
215
- FROM (
216
- SELECT f.id AS id, f.rule_id AS rule_id, f.category AS category,
217
- f.severity AS severity, f.masked_match AS masked_match,
218
- f.action_taken AS action_taken, f.confidence AS confidence,
219
- e.occurred_at AS occurred_at, e.source_tool AS source_tool,
220
- json_extract(e.metadata, '$.repo') AS repo,
221
- json_extract(e.metadata, '$.filePath') AS file,
222
- json_extract(e.metadata, '$.toolName') AS tool_name,
223
- e.kind AS kind, f.finding_key AS finding_key,
224
- latest.status AS latest_status,
225
- ROW_NUMBER() OVER (
226
- PARTITION BY f.rule_id
227
- ORDER BY e.occurred_at DESC, f.id DESC
228
- ) AS rn
229
- FROM findings f
230
- JOIN events e ON e.id = f.event_id
231
- LEFT JOIN ${ai} latest
232
- ON latest.finding_key = f.finding_key
233
- ${b}
234
- )
235
- WHERE rn <= :cap
236
- ORDER BY occurred_at DESC, id DESC`),{cap:200,...c}).map(a=>({id:a.id,ruleId:a.rule_id,category:a.category,severity:a.severity,maskedMatch:a.masked_match,actionTaken:a.action_taken,confidence:a.confidence,occurredAt:(0,h.q11)(a.occurred_at),sourceTool:a.source_tool,repo:a.repo??"",file:a.file??"",...null===a.tool_name?{}:{toolName:a.tool_name},status:(0,h.xog)({kind:a.kind,findingKey:a.finding_key,latestResolutionStatus:a.latest_status})})),f=(0,h.mAj)(e,{aggregates:d}),g={severity:a.severity,providers:a.provider,actions:a.action,subtype:a.subtype,q:a.q},i=(0,h.rG)(f,g),j=(0,h.A6E)((0,h.tXp)(f,g)),k={findings:j.reduce((a,b)=>a+b.instanceCount,0),groups:j.length},l=a.limit??h.goN;return Promise.resolve({totals:k,facets:i,items:j.slice(0,l),nextCursor:null,...a.sessionId?{sessionFirings:this.sessionFirings(a.sessionId)}:{}})}groupAggregates(a,b){let c=a?`, group_concat(DISTINCT json_extract(e.metadata, '$.repo')) AS repos,
237
- group_concat(DISTINCT json_extract(e.metadata, '$.filePath')) AS files,
238
- group_concat(DISTINCT 'via ' || json_extract(e.metadata, '$.toolName')) AS tool_names`:", NULL AS repos, NULL AS files, NULL AS tool_names";return new Map(this.db.prepare(`SELECT f.rule_id AS rule_id,
239
- count(*) AS instance_count,
240
- max(e.occurred_at) AS latest_at,
241
- group_concat(DISTINCT e.source_tool) AS source_tools,
242
- group_concat(DISTINCT f.action_taken) AS actions_taken,
243
- group_concat(DISTINCT (
244
- e.kind || '|' ||
245
- (CASE WHEN f.finding_key IS NULL THEN '' ELSE 'k' END) || '|' ||
246
- coalesce(latest.status, '')
247
- )) AS status_inputs
248
- ${c}
249
- FROM findings f
250
- JOIN events e ON e.id = f.event_id
251
- LEFT JOIN ${ai} latest
252
- ON latest.finding_key = f.finding_key
253
- ${b.predicate}
254
- GROUP BY f.rule_id`).all(b.params).map(b=>[b.rule_id,{instanceCount:b.instance_count,sourceTools:aj(b.source_tools),actionsTaken:aj(b.actions_taken),statusInputs:aj(b.status_inputs).map(a=>{let[b="",c="",d=""]=a.split("|");return{kind:b,findingKey:""===c?null:c,latestResolutionStatus:""===d?null:d}}),latestDetectedAt:(0,h.q11)(b.latest_at),...a?{searchText:[b.repos??"",b.files??"",b.tool_names??""].filter(a=>""!==a).join(" ")}:{}}]))}healthSummary(){let a=G(this.db,"SELECT count(*) AS n FROM findings"),b=Object.fromEntries(h.S8C.map(a=>[a,0]));for(let a of C(this.db.prepare("SELECT action_taken, count(*) AS c FROM findings GROUP BY action_taken")))a.action_taken in b&&(b[a.action_taken]=a.c);let c={critical:0,high:0,medium:0,low:0};for(let a of C(this.db.prepare(`SELECT f.severity AS severity, count(*) AS c
255
- FROM findings f
256
- LEFT JOIN ${ai} latest
257
- ON latest.finding_key = f.finding_key
258
- WHERE latest.status IS NULL OR latest.status != 'resolved'
259
- GROUP BY f.severity`)))a.severity in c&&(c[a.severity]=a.c);let d=h.IgC,e=new Set(C(this.db.prepare(`SELECT DISTINCT json_extract(target, '$.category') AS category
260
- FROM policies WHERE enabled = 1 AND json_extract(target, '$.category') IS NOT NULL`)).map(a=>a.category));return Promise.resolve({findings:a,byAction:b,bySeverity:c,coverage:0===d.length?0:d.filter(a=>e.has(a)).length/d.length})}activityByDay(a=7){let b=864e5*Math.floor(Date.now()/864e5)-(a-1)*864e5,c=C(this.db.prepare(`SELECT date(e.occurred_at / 1000, 'unixepoch') AS day, f.action_taken AS action, count(*) AS c
261
- FROM findings f JOIN events e ON e.id = f.event_id
262
- WHERE e.occurred_at >= :since
263
- GROUP BY day, f.action_taken`),{since:b}),d=new Map;for(let c=0;c<a;c++){let a=new Date(b+864e5*c).toISOString().slice(0,10);d.set(a,{day:a,total:0,redacted:0,warned:0,blocked:0})}for(let a of c){let b=d.get(a.day);b&&(b.total+=a.c,"redact"===a.action?b.redacted+=a.c:"warn"===a.action?b.warned+=a.c:"block"===a.action&&(b.blocked+=a.c))}return Promise.resolve([...d.values()].sort((a,b)=>a.day.localeCompare(b.day)))}}class al{constructor(a){this.db=a,this.insertStmt=a.prepare(`INSERT OR IGNORE INTO inspection_definitions
264
- (id, rule_id, name, category, severity, definition, version)
265
- VALUES
266
- (:id, :ruleId, :name, :category, :severity, :definition, :version)`)}upsert(a){var b,c;let d=(b=a.ruleId,c=a.version,s((0,h.tTV)(["inspection_definition",b,c]))),e=(0,h.JAl)(a,d);return this.insertStmt.run({id:e.id,ruleId:e.ruleId,name:e.name,category:e.category,severity:e.severity,definition:e.definition,version:e.version}),d}}class am{constructor(a){this.db=a,this.insertStmt=a.prepare(`INSERT INTO inspection_findings
267
- (id, audit_event_id, inspection_definition_id, classified_data_id,
268
- span_start, span_end, masked_match, action_taken, confidence)
269
- VALUES
270
- (:id, :auditEventId, :inspectionDefinitionId, :classifiedDataId,
271
- :spanStart, :spanEnd, :maskedMatch, :actionTaken, :confidence)
272
- ON CONFLICT(id) DO NOTHING`)}insertFinding(a){let b=(0,h.$3l)(a);this.insertStmt.run(F({id:b.id,auditEventId:b.auditEventId,inspectionDefinitionId:b.inspectionDefinitionId,classifiedDataId:b.classifiedDataId,spanStart:b.spanStart,spanEnd:b.spanEnd,maskedMatch:b.maskedMatch,actionTaken:b.actionTaken,confidence:b.confidence}))}}function an(a){let b=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-.]+))?$/.exec(a.trim());return b?{core:[Number(b[1]),Number(b[2]),Number(b[3])],pre:b[4]?b[4].split("."):[]}:null}let ao=h.Jr;function ap(a){return a.map(a=>{var b;return`${a.namespace}/${a.packId}@${a.version}#${b=a.rulesJson,(0,d.createHash)("sha1").update(b).digest("hex")}`}).sort().join(",")}function aq(a){let b=/^(\d+)\.(\d+)\.(\d+)/.exec(a);return b?[Number(b[1]),Number(b[2]),Number(b[3])]:null}class ar{constructor(a){this.db=a,this.insertMissingStmt=a.prepare(`INSERT INTO installed_packs (id, namespace, pack_id, version, name, rules_json, enabled, created_at, updated_at)
273
- VALUES (:id, :namespace, :packId, :version, :name, :rulesJson, 1, :now, :now)
274
- ON CONFLICT (namespace, pack_id) DO NOTHING`),this.upsertAvailableStmt=a.prepare(`INSERT INTO available_packs (id, namespace, pack_id, version, name, rules_json, recorded_by, updated_at)
275
- VALUES (:id, :namespace, :packId, :version, :name, :rulesJson, :recordedBy, :now)
276
- ON CONFLICT (namespace, pack_id) DO UPDATE SET
277
- version = excluded.version,
278
- name = excluded.name,
279
- rules_json = excluded.rules_json,
280
- recorded_by = excluded.recorded_by,
281
- updated_at = excluded.updated_at
282
- WHERE available_packs.version <> excluded.version
283
- OR available_packs.name <> excluded.name
284
- OR available_packs.rules_json <> excluded.rules_json`),this.signatureStmt=a.prepare("SELECT namespace, pack_id AS packId, version, rules_json AS rulesJson FROM available_packs")}recordInventory(a,b){if(0!==a.length)try{let c=a.map(a=>({namespace:a.namespace,packId:a.packId,version:a.version,name:a.name,rulesJson:JSON.stringify(a.rules),ruleIds:new Set(a.rules.map(a=>a.id))}));if(this.storedSignature()===ap(c))return;let e=Date.now();n(this.db,()=>{let a=this.mirrorState(),f=!1;for(let g of c){let c={id:(0,d.randomUUID)(),namespace:g.namespace,packId:g.packId,version:g.version,name:g.name,rulesJson:g.rulesJson,now:e},h=a.get(`${g.namespace}/${g.packId}`);void 0===h||!function(a,b){let c=aq(a.version);if(null===c)return!0;let d=aq(b.version);if(null===d)return!1;for(let a=0;a<3;a++){let b=c[a]??0,e=d[a]??0;if(b!==e)return b<e}for(let c of b.ruleIds)if(!a.ruleIds.has(c))return!0;return!1}(g,h)?this.upsertAvailableStmt.run({...c,id:(0,d.randomUUID)(),recordedBy:b?.recordedBy??null}):f=!0,this.insertMissingStmt.run(c)}f||this.pruneAvailable(c.map(a=>`${a.namespace}/${a.packId}`))},"IMMEDIATE")}catch{}}mirrorState(){return new Map(C(this.db.prepare("SELECT namespace, pack_id AS packId, version, rules_json AS rulesJson FROM available_packs")).map(a=>[`${a.namespace}/${a.packId}`,{version:a.version,ruleIds:function(a){let b=new Set,c=A(a,[]);if(!Array.isArray(c))return b;for(let a of c)if(a&&"object"==typeof a){let c=a.id;"string"==typeof c&&b.add(c)}return b}(a.rulesJson)}]))}pruneAvailable(a){let b=C(this.db.prepare("SELECT namespace, pack_id AS packId FROM available_packs")),c=new Set(a),d=this.db.prepare("DELETE FROM available_packs WHERE namespace = ? AND pack_id = ?");for(let a of b)c.has(`${a.namespace}/${a.packId}`)||d.run(a.namespace,a.packId)}applyUpdate(a,b){if(this.db.isTransaction)throw Error("applyUpdate must not be called inside an open transaction");let c=!1;return n(this.db,()=>{this.db.exec("UPDATE _pack_write_gate SET open = 1 WHERE id = 1");let d=this.db.prepare(`UPDATE installed_packs SET
285
- version = (SELECT a.version FROM available_packs a
286
- WHERE a.namespace = :namespace AND a.pack_id = :packId),
287
- name = (SELECT a.name FROM available_packs a
288
- WHERE a.namespace = :namespace AND a.pack_id = :packId),
289
- rules_json = (SELECT a.rules_json FROM available_packs a
290
- WHERE a.namespace = :namespace AND a.pack_id = :packId),
291
- updated_at = :now
292
- WHERE namespace = :namespace AND pack_id = :packId
293
- AND EXISTS (SELECT 1 FROM available_packs a
294
- WHERE a.namespace = :namespace AND a.pack_id = :packId)`).run({namespace:a,packId:b,now:Date.now()});this.db.exec("UPDATE _pack_write_gate SET open = 0 WHERE id = 1"),c=Number(d.changes)>0},"IMMEDIATE"),c}installedRuleset(){let a=C(this.db.prepare("SELECT enabled, policy_id AS policyId, rules_json AS rulesJson FROM installed_packs")),b={installedPacks:a.length,enabledPacks:0,rules:[],invalidRules:0,ruleActions:new Map};for(let c of a){let a;if(!E(c.enabled))continue;b.enabledPacks+=1;let d=(0,h.DhA)(c.policyId);try{a=JSON.parse(c.rulesJson)}catch{b.invalidRules+=1;continue}if(!Array.isArray(a)){b.invalidRules+=1;continue}for(let c of a){let a=h.jON.safeParse(c);a.success?(b.rules.push(a.data),b.ruleActions.set(a.data.id,d)):b.invalidRules+=1}}return b}newestRecordedBinary(){let a=C(this.db.prepare("SELECT DISTINCT recorded_by AS recordedBy FROM available_packs WHERE recorded_by IS NOT NULL")),b=null;for(let c of a){let a=c.recordedBy.lastIndexOf("@");if(a<=0||a===c.recordedBy.length-1)continue;let d=c.recordedBy.slice(0,a),e=c.recordedBy.slice(a+1);null!==an(e)&&(null===b||function(a,b){let c=an(a),d=an(b);if(!c||!d)return 0;for(let a=0;a<3;a++){let b=c.core[a]??0,e=d.core[a]??0;if(b!==e)return b<e?-1:1}return function(a,b){if(0===a.length&&0===b.length)return 0;if(0===a.length)return 1;if(0===b.length)return -1;let c=Math.min(a.length,b.length);for(let d=0;d<c;d++){let c=a[d]??"",e=b[d]??"";if(c===e)continue;let f=/^\d+$/.test(c),g=/^\d+$/.test(e);if(f&&!g)return -1;if(!f&&g)return 1;if(f&&g)return Number(c)<Number(e)?-1:1;return c<e?-1:1}return a.length===b.length?0:a.length<b.length?-1:1}(c.pre,d.pre)}(e,b.version)>0)&&(b={binary:d,version:e})}return b}counts(){return Promise.resolve(D(this.db.prepare(`SELECT count(*) AS packs,
295
- coalesce(sum(json_array_length(rules_json)), 0) AS rules,
296
- coalesce(sum(enabled), 0) AS enabled
297
- FROM installed_packs`))??{packs:0,rules:0,enabled:0})}countsByPolicyId(){return H(this.db,`SELECT coalesce(policy_id, '${ao}') AS k, count(*) AS n
298
- FROM installed_packs
299
- GROUP BY k`)}listByPolicyId(a){return C(this.db.prepare(`SELECT namespace, pack_id AS packId, name, enabled, rules_json AS rulesJson
300
- FROM installed_packs
301
- WHERE coalesce(policy_id, '${ao}') = ?
302
- ORDER BY name ASC`),[a]).map(a=>({id:`${a.namespace}/${a.packId}`,name:a.name,ruleCount:Z(a.rulesJson).length,enabled:E(a.enabled)}))}setPolicy(a,b,c){if(null!==c&&!h.HUb.safeParse(c).success)throw Error(`Unknown policy '${c}'. Must be one of: ${h.V0H.join(", ")}.`);return Number(this.db.prepare(`UPDATE installed_packs SET policy_id = :policyId, updated_at = :now
303
- WHERE namespace = :namespace AND pack_id = :packId`).run({policyId:c,now:Date.now(),namespace:a,packId:b}).changes)>0}setEnabled(a,b,c){return Number(this.db.prepare(`UPDATE installed_packs SET enabled = :enabled, updated_at = :now
304
- WHERE namespace = :namespace AND pack_id = :packId`).run({enabled:+!!c,now:Date.now(),namespace:a,packId:b}).changes)>0}storedSignature(){return ap(C(this.signatureStmt))}}class as{constructor(a){this.db=a,this.upsertStmt=a.prepare(`INSERT INTO inventory
305
- (id, object_type, location, title, host_id, attributes, first_seen, last_seen)
306
- VALUES
307
- (:id, :objectType, :location, :title, :hostId, :attributes, :firstSeen, :lastSeen)
308
- ON CONFLICT(id) DO UPDATE SET
309
- location = excluded.location,
310
- title = excluded.title,
311
- host_id = excluded.host_id,
312
- attributes = excluded.attributes,
313
- last_seen = excluded.last_seen`)}upsert(a,b=Date.now()){var c,d;let e=(c=a.objectType,d=a.identityKey,s((0,h.tTV)(["inventory",c,d]))),f=(0,h.gzP)(a,e,b);return this.upsertStmt.run(F({id:f.id,objectType:f.objectType,location:f.location,title:f.title,hostId:f.hostId,attributes:f.attributes,firstSeen:f.firstSeen,lastSeen:f.lastSeen})),e}findById(a){return D(this.db.prepare("SELECT * FROM inventory WHERE id = :id"),{id:a})}distinctTitles(a){return C(this.db.prepare(`SELECT DISTINCT title FROM inventory
314
- WHERE object_type = :objectType AND title IS NOT NULL
315
- ORDER BY title`),{objectType:a}).map(a=>a.title)}osVersions(){return C(this.db.prepare(`SELECT DISTINCT os_version AS value FROM inventory
316
- WHERE object_type = 'host' AND os_version IS NOT NULL
317
- ORDER BY value`)).map(a=>a.value)}}let at=["config","skill","mcp","hook"],au=new Set(h.SHn.options),av="(url IS NULL OR (url NOT LIKE '%/.claude/worktrees/%' AND url NOT LIKE '%\\.claude\\worktrees\\%'))",aw={claudecode:"Claude Code",cursor:"Cursor",codex:"Codex"},ax={accessCounts:{open:0,approved:0,blocked:0,total:0},findingsCount:0};function ay(a,b){if(a.provider&&au.has(a.provider))return a.provider;let c=(b.title??"").toLowerCase().replace(/[\s-]/g,"");return c.includes("claudecode")||"claude"===c?"claudecode":c.includes("cursor")?"cursor":c.includes("codex")?"codex":null}function az(a){return a.some(a=>{let b=A(a.attributes,{});return"sample"!==b.provenance&&"claudecode"===ay(b,a)})}function aA(a){let b={id:a.id,type:a.assetType,name:a.name,sub:a.sub??"",flags:A(a.flagsJson,[])};return"mcp"===a.assetType&&a.effectiveTrust&&(b.trust=a.effectiveTrust),b}function aB(a){let b="update_available"===a.status?["update"]:[],c={source:a.source,scope:a.scope};return void 0!==a.installedVersion&&(c.installedVersion=a.installedVersion),void 0!==a.latestVersion&&(c.latestVersion=a.latestVersion),void 0!==a.updatedAt&&(c.updatedAt=a.updatedAt),{id:a.id,assetType:"skill",name:a.name,sub:`Skill \xb7 ${a.source}`,description:a.description??null,flagsJson:JSON.stringify(b),metaJson:JSON.stringify(c),trust:null,toolsJson:null,effectiveTrust:null}}function aC(a){let b="egress"===a.status?["risk"]:"conflict"===a.status?["conflict"]:"unknown"===a.status?["unknown"]:[],c={event:a.event,command:a.command,scope:a.scope,status:a.status};return void 0!==a.matcher&&(c.matcher=a.matcher),void 0!==a.pluginName&&(c.pluginName=a.pluginName),a.warnings.length>0&&(c.warnings=a.warnings),{id:a.id,assetType:"hook",name:aF(a.command.trim(),64),sub:a.matcher?`Hook \xb7 ${a.event} \xb7 ${a.matcher}`:`Hook \xb7 ${a.event}`,description:a.warnings.length>0?a.warnings.join(" \xb7 "):null,flagsJson:JSON.stringify(b),metaJson:JSON.stringify(c),trust:null,toolsJson:null,effectiveTrust:null}}function aD(a){let b={scope:a.scope,transport:a.transport};return void 0!==a.command&&(b.command=a.command),void 0!==a.url&&(b.url=a.url),void 0!==a.envKeys&&(b.envKeys=a.envKeys),void 0!==a.pluginName&&(b.pluginName=a.pluginName),void 0!==a.marketplace&&(b.marketplace=a.marketplace),void 0!==a.project&&(b.project=a.project),{id:a.id,assetType:"mcp",name:a.name,sub:`MCP server \xb7 ${a.transport} \xb7 ${aF(function(a){if(void 0!==a.url)try{return new URL(a.url).host}catch{return a.url}return a.command??a.name}(a),48)}`,description:null,flagsJson:"[]",metaJson:JSON.stringify(b),trust:"unapproved",toolsJson:null,effectiveTrust:a.trust}}function aE(a){let b=a.untracked?["untracked"]:[],c={kind:a.kind,scope:a.scope,path:a.path};return void 0!==a.detail&&(c.detail=a.detail),void 0!==a.entryCount&&(c.entryCount=a.entryCount),void 0!==a.updatedAt&&(c.updatedAt=a.updatedAt),{id:a.id,assetType:"config",name:a.name,sub:a.kind,description:a.detail??null,flagsJson:JSON.stringify(b),metaJson:JSON.stringify(c),trust:null,toolsJson:null,effectiveTrust:null}}function aF(a,b){return a.length>b?`${a.slice(0,b-1)}…`:a}function aG(a,b,c){let d=A(a.attributes,{});return{id:a.id,name:a.name??"",repo:a.url??"",visibility:d.visibility??"private",language:d.language??"",policyDefault:d.policyDefault??"approved",updatedAt:new Date(a.lastSeen).toISOString(),accessCounts:b,findingsCount:c}}function aH(a){return{path:a.path,name:a.name,origin:a.origin,access:a.effectiveAccess,isCustom:null!==a.overrideAccess&&a.overrideAccess!==a.defaultAccess,findings:a.findingsCount,blockedAt:null!==a.blockedAtMs?new Date(a.blockedAtMs).toISOString():null,note:a.note}}class aI{constructor(a){this.db=a}getInventoryStats(){let a=H(this.db,"SELECT asset_type AS k, count(*) AS n FROM inventory_asset GROUP BY asset_type"),b={project:0,skill:a.get("skill")??0,mcp:a.get("mcp")??0,hook:a.get("hook")??0,config:a.get("config")??0};b.project=G(this.db,`SELECT count(*) AS n FROM source_project WHERE ${av}`);let c=H(this.db,`SELECT coalesce(o.trust, a.trust) AS k, count(*) AS n
318
- FROM inventory_asset a
319
- LEFT JOIN mcp_trust_override o ON o.asset_id = a.id
320
- WHERE a.asset_type = 'mcp' AND coalesce(o.trust, a.trust) IS NOT NULL
321
- GROUP BY coalesce(o.trust, a.trust)`),d={"known-good":c.get("known-good")??0,risky:c.get("risky")??0,unapproved:c.get("unapproved")??0},e=G(this.db,`SELECT count(*) AS n FROM inventory
322
- WHERE object_type = 'harness'
323
- AND (last_seen >= :liveSince OR json_extract(attributes, '$.provenance') = 'sample')`,{liveSince:Date.now()-2592e6}),f=G(this.db,"SELECT count(*) AS n FROM inventory_asset WHERE flags_json <> '[]'"),g=G(this.db,"SELECT count(DISTINCT project_id) AS n FROM project_file WHERE findings_count > 0"),h=this.configAssetRows();for(let a of h)b[a.assetType]+=1,"mcp"===a.assetType&&a.effectiveTrust&&(d[a.effectiveTrust]+=1);return Promise.resolve({attention:f+g+h.filter(a=>"[]"!==a.flagsJson).length,byType:b,harnesses:e,mcpTrust:d})}listHarnesses(a){let b=this.fetchHarnessRows();if(0===b.length)return Promise.resolve({items:[]});let c=new Map;for(let a of b){let b=ay(A(a.attributes,{}),a);if(!b)continue;let d=c.get(b);d?d.push(a):c.set(b,[a])}let d=this.assetsByHarness(b.map(a=>a.id),a),e=[...new Set(b.flatMap(a=>A(a.attributes,{}).projectIds??[]))],f=this.fetchProjectsByIds(e),g=this.projectAggregates(e),h=this.configAssetRows(a,az(b)),i=[];for(let[b,e]of c){let c=e.flatMap(a=>d.get(a.id)??[]),j=e.some(a=>"sample"!==A(a.attributes,{}).provenance)&&"claudecode"===b&&h.length>0?[...c,...h].sort((a,b)=>a.name.localeCompare(b.name)):c;if(a&&0===j.length)continue;let k=e[0];if(!k)continue;let l=A(k.attributes,{}),m=[...new Set(e.flatMap(a=>A(a.attributes,{}).projectIds??[]))].map(a=>f.get(a)).filter(a=>void 0!==a).map(a=>{let b=g.get(a.id)??ax;return aG(a,b.accessCounts,b.findingsCount)}),n=e.reduce((a,b)=>a+(A(b.attributes,{}).sessions??0),0),o=j.reduce((a,b)=>a+A(b.flagsJson,[]).length,0),p=new Map;for(let a of j){let b=p.get(a.assetType);b?b.push(aA(a)):p.set(a.assetType,[aA(a)])}let q=at.filter(a=>p.has(a)).map(a=>({type:a,assets:p.get(a)??[]}));i.push({id:b,label:l.label??aw[b],kind:l.kind??l.provider??b,version:l.harness_version??k.harnessVersion??"",sessions:n,assetCount:j.length,flagCount:o,projects:m,categories:q})}return Promise.resolve({items:i})}listAssets(a){let b=this.fetchAssets(a.type,a.q);if(0===b.length)return Promise.resolve({groups:[]});let c=new Map;for(let a of b){let b=c.get(a.assetType);b?b.push(a):c.set(a.assetType,[a])}let d=[...c.entries()].map(([a,b])=>{let c=new Map;for(let a of b)for(let b of A(a.flagsJson,[]))c.set(b,(c.get(b)??0)+1);let d={type:a,total:b.length,flagRollup:Object.fromEntries(c),items:b.map(aA)};if("mcp"===a){let a=new Map;for(let c of b)c.effectiveTrust&&a.set(c.effectiveTrust,(a.get(c.effectiveTrust)??0)+1);d.trustRollup=Object.fromEntries(a)}return d});return d.sort((a,b)=>at.indexOf(a.type)-at.indexOf(b.type)),Promise.resolve({groups:d})}getAsset(a){let b=this.fetchAssetById(a);return Promise.resolve(b?function(a){let b={id:a.id,type:a.assetType,name:a.name,sub:a.sub??"",flags:A(a.flagsJson,[]),description:a.description??null,trust:"mcp"===a.assetType?a.effectiveTrust??null:null,meta:A(a.metaJson,{}),finding:null};if("mcp"===a.assetType&&null!==a.toolsJson){let c=A(a.toolsJson,[]);b.tools="unapproved"===a.effectiveTrust?c.map(a=>({...a,risk:a.risk??"Tool access blocked: MCP server trust is unapproved."})):c}return b}(b):null)}listProjects(a){let b=this.fetchProjects(a),c=this.projectAggregates(b.map(a=>a.id));return Promise.resolve({items:b.map(a=>{let b=c.get(a.id)??ax;return aG(a,b.accessCounts,b.findingsCount)})})}getProjectTree(a,b){let c=this.fetchProjectById(a);if(!c)return Promise.resolve(null);let d=A(c.attributes,{}),e={id:c.id,repo:c.url??"",visibility:d.visibility??"private"},f=b.path??"";if("blocked"===b.filter){let b=this.fetchProjectFilesBlocked(a);return b.sort((a,b)=>(b.blockedAtMs??0)-(a.blockedAtMs??0)),Promise.resolve({project:e,path:f,files:b.map(aH)})}if(void 0!==b.q&&""!==b.q)return Promise.resolve({project:e,path:f,files:this.fetchProjectFilesSearch(a,b.q).map(aH)});let g=this.fetchProjectFilesUnder(a,f),h=""===f?"":`${f}/`,i=[],j=new Map;for(let a of g){let b=h.length>0?a.path.slice(h.length):a.path,c=b.indexOf("/");if(-1===c)i.push(a);else{let d=b.slice(0,c),e=j.get(d)??[];e.push(a),j.set(d,e)}}let k=[...j.entries()].sort(([a],[b])=>a.localeCompare(b)).map(([a,b])=>({name:a,path:h.length>0?`${f}/${a}`:a,accessCounts:function(a){let b={open:0,approved:0,blocked:0,total:0};for(let c of a)b.total++,b[c.effectiveAccess]++;return b}(b)}));return Promise.resolve({project:e,path:f,folders:k,files:i.map(aH)})}getProjectFile(a,b){let c=this.fetchProjectById(a);if(!c)return Promise.resolve(null);let d=this.fetchProjectFile(a,b);if(!d)return Promise.resolve(null);let e=A(c.attributes,{});return Promise.resolve({...aH(d),project:{repo:c.url??"",visibility:e.visibility??"private",language:e.language??"",policyDefault:e.policyDefault??"approved",updatedAt:new Date(c.lastSeen).toISOString()},findingsRefs:[]})}setFileAccess(a,b,c){let e=this.fetchProjectFile(a,b);return!!e&&(c===e.defaultAccess?this.db.prepare("DELETE FROM file_access_override WHERE project_id = ? AND path = ?").run(a,b):this.db.prepare(`INSERT INTO file_access_override (id, project_id, path, access, created_at, updated_at)
324
- VALUES (:id, :projectId, :path, :access, :now, :now)
325
- ON CONFLICT (project_id, path) DO UPDATE SET access = excluded.access, updated_at = excluded.updated_at`).run({id:(0,d.randomUUID)(),projectId:a,path:b,access:c,now:Date.now()}),!0)}setMcpTrust(a,b){let c=this.fetchAssetById(a);return c?"mcp"!==c.assetType?"not_mcp":(b===c.trust?this.db.prepare("DELETE FROM mcp_trust_override WHERE asset_id = ?").run(a):this.db.prepare(`INSERT INTO mcp_trust_override (id, asset_id, trust, created_at, updated_at)
326
- VALUES (:id, :assetId, :trust, :now, :now)
327
- ON CONFLICT (asset_id) DO UPDATE SET trust = excluded.trust, updated_at = excluded.updated_at`).run({id:(0,d.randomUUID)(),assetId:a,trust:b,now:Date.now()}),this.configRowsCache=void 0,"ok"):"not_found"}fetchHarnessRows(){return C(this.db.prepare(`SELECT id, title, attributes, harness_version AS harnessVersion
328
- FROM inventory
329
- WHERE object_type = 'harness'
330
- AND (last_seen >= :liveSince OR json_extract(attributes, '$.provenance') = 'sample')`),{liveSince:Date.now()-2592e6})}assetsByHarness(a,b){let c=new Map;if(0===a.length)return c;let d=[...a],e=`ha.harness_id IN (${j(a.length)})`;if(b){let a=k(b);e+=` AND ${l(["a.name","a.sub"])}`,d.push(a,a)}for(let a of C(this.db.prepare(`SELECT ha.harness_id AS harnessInvId, a.id, a.asset_type AS assetType, a.name, a.sub,
331
- a.description, a.flags_json AS flagsJson, a.meta_json AS metaJson, a.trust,
332
- a.tools_json AS toolsJson, coalesce(o.trust, a.trust) AS effectiveTrust
333
- FROM harness_asset ha
334
- JOIN inventory_asset a ON a.id = ha.asset_id
335
- LEFT JOIN mcp_trust_override o ON o.asset_id = a.id
336
- WHERE ${e}
337
- ORDER BY a.name ASC`),d)){let b=a.harnessInvId,[d]=this.mapAssetRows([a]);if(!d)continue;let e=c.get(b);e?e.push(d):c.set(b,[d])}return c}fetchAssets(a,b){let c=[],d=[];if(a&&a.length>0&&(c.push(`a.asset_type IN (${j(a.length)})`),d.push(...a)),b){let a=k(b);c.push(l(["a.name","a.sub"])),d.push(a,a)}let e=c.length?`WHERE ${c.join(" AND ")}`:"",f=this.mapAssetRows(C(this.db.prepare(`SELECT a.id, a.asset_type AS assetType, a.name, a.sub, a.description,
338
- a.flags_json AS flagsJson, a.meta_json AS metaJson, a.trust,
339
- a.tools_json AS toolsJson, coalesce(o.trust, a.trust) AS effectiveTrust
340
- FROM inventory_asset a
341
- LEFT JOIN mcp_trust_override o ON o.asset_id = a.id
342
- ${e}
343
- ORDER BY a.name ASC`),d)),g=this.configAssetRows(b).filter(b=>!a||0===a.length||a.includes(b.assetType));return g.length>0?[...f,...g].sort((a,b)=>a.name.localeCompare(b.name)):f}fetchAssetById(a){return this.mapAssetRows(C(this.db.prepare(`SELECT a.id, a.asset_type AS assetType, a.name, a.sub, a.description,
344
- a.flags_json AS flagsJson, a.meta_json AS metaJson, a.trust,
345
- a.tools_json AS toolsJson, coalesce(o.trust, a.trust) AS effectiveTrust
346
- FROM inventory_asset a
347
- LEFT JOIN mcp_trust_override o ON o.asset_id = a.id
348
- WHERE a.id = ?`),[a]))[0]??this.configAssetRows().find(b=>b.id===a)??null}mapAssetRows(a){return a.map(a=>({id:a.id,assetType:a.assetType,name:a.name,sub:a.sub??null,description:a.description??null,flagsJson:a.flagsJson??"[]",metaJson:a.metaJson??"{}",trust:a.trust??null,toolsJson:a.toolsJson??null,effectiveTrust:a.effectiveTrust??null}))}configAssetRows(a,b){let c=this.liveConfigAssetRows(b);if(!a)return c;let d=a.toLowerCase();return c.filter(a=>a.name.toLowerCase().includes(d)||(a.sub??"").toLowerCase().includes(d))}liveConfigAssetRows(a){if(!(a??az(this.fetchHarnessRows())))return[];let b=this.latestConfigScanId();if(null===b)return[];if(this.configRowsCache?.scanId===b)return this.configRowsCache.rows;let c=new X(this.db).report(),d=[...c.skills.map(aB),...c.hooks.map(aC),...c.mcpServers.map(aD),...c.configFiles.map(aE)].sort((a,b)=>a.name.localeCompare(b.name));return this.configRowsCache={scanId:b,rows:d},d}latestConfigScanId(){return W(this.db)?.id??null}fetchProjects(a){let b=`SELECT id, url, name, attributes, last_seen AS lastSeen FROM source_project
349
- WHERE ${av}`,c=[];if(a){let d=k(a);b+=` AND ${l(["name","url"])}`,c.push(d,d)}return b+=" ORDER BY name ASC",C(this.db.prepare(b),c)}fetchProjectById(a){return D(this.db.prepare("SELECT id, url, name, attributes, last_seen AS lastSeen FROM source_project WHERE id = ?"),[a])??null}fetchProjectsByIds(a){let b=new Map;if(0===a.length)return b;for(let c of C(this.db.prepare(`SELECT id, url, name, attributes, last_seen AS lastSeen
350
- FROM source_project WHERE id IN (${j(a.length)})`),a))b.set(c.id,c);return b}projectAggregates(a){let b=new Map;if(0===a.length)return b;for(let c of C(this.db.prepare(`SELECT f.project_id AS projectId,
351
- coalesce(o.access, f.default_access) AS eff,
352
- count(*) AS n,
353
- coalesce(sum(f.findings_count), 0) AS findings
354
- FROM project_file f
355
- LEFT JOIN file_access_override o ON o.project_id = f.project_id AND o.path = f.path
356
- WHERE f.project_id IN (${j(a.length)})
357
- GROUP BY f.project_id, eff`),a)){let a=b.get(c.projectId);a||(a={accessCounts:{open:0,approved:0,blocked:0,total:0},findingsCount:0},b.set(c.projectId,a)),a.accessCounts.total+=c.n,a.accessCounts[c.eff]+=c.n,a.findingsCount+=c.findings}return b}fileSelect(a){return`SELECT f.path, f.name, f.origin, f.default_access AS defaultAccess,
358
- f.findings_count AS findingsCount, f.blocked_at AS blockedAtMs, f.note,
359
- coalesce(o.access, f.default_access) AS effectiveAccess,
360
- o.access AS overrideAccess
361
- FROM project_file f
362
- LEFT JOIN file_access_override o ON o.project_id = f.project_id AND o.path = f.path
363
- WHERE ${a}`}mapFileRows(a){return a.map(a=>({path:a.path,name:a.name,origin:a.origin,defaultAccess:a.defaultAccess,findingsCount:a.findingsCount??0,blockedAtMs:a.blockedAtMs??null,note:a.note??null,effectiveAccess:a.effectiveAccess,overrideAccess:a.overrideAccess??null}))}fetchProjectFilesUnder(a,b){return""===b?this.mapFileRows(C(this.db.prepare(this.fileSelect("f.project_id = ? ORDER BY f.path ASC")),[a])):this.mapFileRows(C(this.db.prepare(this.fileSelect("f.project_id = ? AND f.path LIKE ? ESCAPE '\\' ORDER BY f.path ASC")),[a,`${i(b)}/%`]))}fetchProjectFilesSearch(a,b){let c=k(b);return this.mapFileRows(C(this.db.prepare(this.fileSelect("f.project_id = ? AND (f.path LIKE ? ESCAPE '\\' OR f.name LIKE ? ESCAPE '\\') ORDER BY f.path ASC")),[a,c,c]))}fetchProjectFilesBlocked(a){return this.mapFileRows(C(this.db.prepare(this.fileSelect("f.project_id = ? AND coalesce(o.access, f.default_access) = 'blocked' AND f.blocked_at IS NOT NULL")),[a]))}fetchProjectFile(a,b){return this.mapFileRows(C(this.db.prepare(this.fileSelect("f.project_id = ? AND f.path = ?")),[a,b]))[0]??null}}class aJ{constructor(a){this.db=a}readPolicies(){return Promise.resolve(I(C(this.db.prepare("SELECT * FROM policies")),a=>{let b=JSON.parse(a.target),c=a.custom_keywords?JSON.parse(a.custom_keywords):void 0;return h.PEm.parse({id:a.id,scope:a.scope,target:b,action:a.action,enabled:E(a.enabled),customKeywords:c})}))}seedDefaults(){if(G(this.db,"SELECT count(*) AS n FROM policies")>0)return;let a=this.db.prepare(`INSERT INTO policies (id, scope, target, action, enabled, created_at, updated_at)
364
- VALUES (:id, 'global', :target, :action, 1, :now, :now)`);o(this.db,()=>{for(let[b,c]of Object.entries(h.unw))a.run({id:(0,d.randomUUID)(),target:JSON.stringify({category:b}),action:c,now:Date.now()})})}upsertCategoryAction(a,b){let c=Date.now();this.db.prepare(`INSERT INTO policies (id, scope, target, action, enabled, created_at, updated_at)
365
- VALUES (:id, 'global', :target, :action, 1, :now, :now)
366
- ON CONFLICT(scope, target) DO UPDATE SET action = excluded.action, enabled = 1, updated_at = excluded.updated_at`).run({id:(0,d.randomUUID)(),target:JSON.stringify({category:a}),action:b,now:c})}capCategoryActions(){return Number(this.db.prepare(`UPDATE policies SET action='warn', updated_at=:now
367
- WHERE scope='global' AND action IN ('block','redact')
368
- AND json_extract(target,'$.category') IS NOT NULL`).run({now:Date.now()}).changes)}getCategoryAction(a){let b=this.db.prepare("SELECT action FROM policies WHERE scope='global' AND json_extract(target,'$.category') = :category").get({category:a});return b?.action}}class aK{constructor(a){this.packs=a}getPolicyList(a){if("custom"===a)return Promise.resolve({items:[]});let b=this.packs.countsByPolicyId();return Promise.resolve({items:h.RRF.map(a=>({id:a,kind:"builtin",name:h.ZpU[a].name,enabled:!0,usedByCount:b.get(a)??0}))})}getPolicyStats(){let a=this.packs.countsByPolicyId(),b=h.V0H.reduce((b,c)=>b+(a.get(c)??0),0),c=h.V0H.length;return Promise.resolve({policies:c,builtin:c,custom:0,detectionsGoverned:b})}getPolicyDetail(a){let b=h.V0H.find(b=>b===a);if(void 0===b)return Promise.resolve(null);let c=h.ZpU[b];return Promise.resolve({specVersion:1,id:a,kind:"builtin",name:c.name,enabled:!0,description:c.description,usedBy:this.packs.listByPolicyId(a)})}}class aL{constructor(a){this.db=a,this.maxStampStmt=a.prepare("SELECT coalesce(max(updated_at), 0) AS maxStamp FROM project_file WHERE project_id = :projectId"),this.upsertStmt=a.prepare(`INSERT INTO project_file
369
- (id, project_id, path, name, origin, default_access, findings_count, blocked_at, note, created_at, updated_at)
370
- VALUES
371
- (:id, :projectId, :path, :name, :origin, :defaultAccess, 0, NULL, NULL, :now, :now)
372
- ON CONFLICT (project_id, path) DO UPDATE SET
373
- name = excluded.name,
374
- origin = excluded.origin,
375
- default_access = excluded.default_access,
376
- updated_at = excluded.updated_at`),this.pruneStmt=a.prepare("DELETE FROM project_file WHERE project_id = :projectId AND updated_at < :now")}replaceForProject(a,b,c){let e=Math.max(c,(D(this.maxStampStmt,{projectId:a})?.maxStamp??0)+1);for(let c of b.files)this.upsertStmt.run({id:(0,d.randomUUID)(),projectId:a,path:c.path,name:c.name,origin:c.origin,defaultAccess:c.defaultAccess,now:e});b.truncated||this.pruneStmt.run({projectId:a,now:e})}}class aM{constructor(a,b=()=>Date.now()){this.db=a,this.now=b,this.insertStmt=a.prepare(`INSERT INTO finding_resolution (id, finding_key, status, method, resolved_at, evidence, created_at)
377
- VALUES (:id, :findingKey, :status, :method, :resolvedAt, :evidence, :createdAt)`),this.latestStmt=a.prepare(`SELECT status, method, resolved_at, evidence
378
- FROM finding_resolution
379
- WHERE finding_key = :findingKey
380
- ORDER BY created_at DESC, rowid DESC
381
- LIMIT 1`),this.openAtRestStmt=a.prepare(`SELECT DISTINCT f.finding_key AS finding_key
382
- FROM findings f
383
- JOIN events e ON e.id = f.event_id
384
- WHERE e.kind = 'code_change'
385
- AND json_extract(e.metadata, '$.filePath') = :path
386
- AND f.finding_key IS NOT NULL
387
- AND ${ah("f")} IS NOT 'resolved'`),this.resolvedAtRestStmt=a.prepare(`SELECT DISTINCT f.finding_key AS finding_key
388
- FROM findings f
389
- JOIN events e ON e.id = f.event_id
390
- WHERE e.kind = 'code_change'
391
- AND json_extract(e.metadata, '$.filePath') = :path
392
- AND f.finding_key IS NOT NULL
393
- AND ${ah("f")} = 'resolved'`)}insertResolution(a){this.insertStmt.run({id:(0,d.randomUUID)(),findingKey:a.findingKey,status:h.GCf.parse(a.status),method:h.cqq.parse(a.method),resolvedAt:a.resolvedAt,evidence:a.evidence,createdAt:this.now()})}latestByKey(a){let b=D(this.latestStmt,{findingKey:a});if(b)return{status:b.status,method:b.method,resolvedAt:b.resolved_at,evidence:b.evidence??""}}openAtRestKeysForPath(a){return C(this.openAtRestStmt,{path:a}).map(a=>a.finding_key)}resolvedAtRestKeysForPath(a){return C(this.resolvedAtRestStmt,{path:a}).map(a=>a.finding_key)}}class aN{constructor(a){this.db=a,this.upsertStmt=a.prepare(`INSERT INTO rule_probe_cache (rule_key, verdict, worst_probe_ms, checked_at)
394
- VALUES (:ruleKey, :verdict, :worstProbeMs, :checkedAt)
395
- ON CONFLICT (rule_key) DO UPDATE SET
396
- verdict = excluded.verdict,
397
- worst_probe_ms = excluded.worst_probe_ms,
398
- checked_at = excluded.checked_at`),this.readStmt=a.prepare("SELECT verdict, worst_probe_ms AS worstProbeMs FROM rule_probe_cache WHERE rule_key = :ruleKey")}getVerdict(a){return D(this.readStmt,{ruleKey:a})}setVerdict(a,b,c){o(this.db,()=>{this.upsertStmt.run({ruleKey:a,verdict:b,worstProbeMs:c,checkedAt:Date.now()})})}}class aO{constructor(a){this.db=a,this.upsertStmt=a.prepare(`INSERT INTO scan_ledger (path, mtime, content_hash, ruleset_hash, scanned_at)
399
- VALUES (:path, :mtime, :contentHash, :rulesetHash, :scannedAt)
400
- ON CONFLICT (path) DO UPDATE SET
401
- mtime = excluded.mtime,
402
- content_hash = excluded.content_hash,
403
- ruleset_hash = excluded.ruleset_hash,
404
- scanned_at = excluded.scanned_at`),this.readStmt=a.prepare(`SELECT path, mtime, content_hash AS contentHash
405
- FROM scan_ledger WHERE ruleset_hash = :rulesetHash`)}entriesForRuleset(a){return new Map(C(this.readStmt,{rulesetHash:a}).map(a=>[a.path,{mtime:a.mtime,contentHash:a.contentHash}]))}upsertEntries(a){if(0===a.length)return;let b=Date.now();o(this.db,()=>{for(let c of a)this.upsertStmt.run({path:c.path,mtime:c.mtime,contentHash:c.contentHash,rulesetHash:c.rulesetHash,scannedAt:b})})}}let aP=["critical","high","medium","low"],aQ={block:"blocked",redact:"redacted",warn:"warned"},aR=["blocked","redacted","warned"],aS=[{provider:"claudecode",coverage:100,supported:!0},{provider:"cursor",coverage:0,supported:!1},{provider:"codex",coverage:0,supported:!1},{provider:"chatgpt",coverage:0,supported:!1},{provider:"copilot",coverage:0,supported:!1},{provider:"api",coverage:0,supported:!1}],aT={"7d":"day","30d":"day","3m":"week","6m":"week"};function aU(a){return 864e5*Math.floor(a/864e5)}function aV(a){return new Date(a).toISOString().slice(0,10)}class aW{constructor(a,b=()=>Date.now()){this.db=a,this.now=b}severitySummary(){let a=new Map(C(this.db.prepare(`SELECT f.severity AS severity,
406
- COUNT(*) AS count,
407
- SUM(CASE
408
- WHEN e.kind != 'code_change' THEN 1
409
- WHEN f.finding_key IS NULL THEN 0
410
- WHEN latest.status = 'resolved' THEN 1
411
- ELSE 0
412
- END) AS caught,
413
- SUM(CASE
414
- WHEN e.kind = 'code_change'
415
- AND f.finding_key IS NOT NULL
416
- AND (latest.status IS NULL OR latest.status != 'resolved') THEN 1
417
- ELSE 0
418
- END) AS open_at_rest
419
- FROM findings f
420
- JOIN events e ON e.id = f.event_id
421
- LEFT JOIN ${ai} latest
422
- ON latest.finding_key = f.finding_key
423
- GROUP BY f.severity`)).map(a=>[a.severity,a])),b=aP.map(b=>({severity:b,count:a.get(b)?.count??0,caught:a.get(b)?.caught??0,openAtRest:a.get(b)?.open_at_rest??0}));return Promise.resolve({total:b.reduce((a,b)=>a+b.count,0),needsRemediation:b.reduce((a,b)=>a+b.openAtRest,0),bySeverity:b})}scanCoverage(a){return Promise.resolve({range:a,providers:aS.map(a=>({...a}))})}enforcementActions(a){let b=864e5*h.eI7[a],c=this.now(),d=c-b,e=this.findingsInRange(c-2*b,c),f={blocked:0,redacted:0,warned:0},g={blocked:0,redacted:0,warned:0};for(let a of e){let b=aQ[a.actionTaken];b&&(a.occurredAt>=d?f[b]++:g[b]++)}let i=aR.map(a=>({kind:a,count:f[a],delta:f[a]-g[a]}));return Promise.resolve({range:a,total:i.reduce((a,b)=>a+b.count,0),actions:i})}findingsTimeseries(a){let b=aT[a],c=("day"===b?1:7)*864e5,d=h.eI7[a],e="day"===b?d:Math.ceil(d/7),f=this.now(),g=aU(f)-(d-1)*864e5,i=this.findingsInRange(g,f),j=Array.from({length:e},(a,b)=>({timestamp:aV(g+b*c),critical:0,high:0,medium:0}));for(let a of i){let b=j[Math.floor((a.occurredAt-g)/c)];if(b){var k;("critical"===(k=a.severity)||"high"===k||"medium"===k)&&b[a.severity]++}}return Promise.resolve({range:a,granularity:b,points:j})}mttrTrend(a){let b=aT[a],c=("day"===b?1:7)*864e5,d=h.eI7[a],e="day"===b?d:Math.ceil(d/7),f=this.now(),g=aU(f)-(d-1)*864e5,i=C(this.db.prepare(`SELECT COALESCE(f.first_detected_at, e.occurred_at) AS first_detected_at, f.severity AS severity,
424
- (
425
- SELECT fr.status FROM finding_resolution fr
426
- WHERE fr.finding_key = f.finding_key
427
- ORDER BY fr.created_at DESC, fr.rowid DESC
428
- LIMIT 1
429
- ) AS latest_status,
430
- (
431
- SELECT fr.method FROM finding_resolution fr
432
- WHERE fr.finding_key = f.finding_key
433
- ORDER BY fr.created_at DESC, fr.rowid DESC
434
- LIMIT 1
435
- ) AS latest_method,
436
- (
437
- SELECT fr.resolved_at FROM finding_resolution fr
438
- WHERE fr.finding_key = f.finding_key
439
- ORDER BY fr.created_at DESC, fr.rowid DESC
440
- LIMIT 1
441
- ) AS latest_resolved_at
442
- FROM findings f JOIN events e ON e.id = f.event_id
443
- WHERE f.finding_key IS NOT NULL
444
- AND EXISTS (
445
- SELECT 1 FROM finding_resolution fr
446
- WHERE fr.finding_key = f.finding_key
447
- AND fr.resolved_at >= :windowStart
448
- )`),{windowStart:g}),j=new Map,k=new Map;for(let a of i){if("resolved"!==a.latest_status||"fixed-at-source"!==a.latest_method||null==a.latest_resolved_at||a.latest_resolved_at<g||a.latest_resolved_at>=f)continue;let b=Math.floor((a.latest_resolved_at-g)/c);if(b<0||b>=e)continue;let d=`${String(b)}:${a.severity}`,h=Math.max(0,a.latest_resolved_at-a.first_detected_at);j.set(d,(j.get(d)??0)+h),k.set(d,(k.get(d)??0)+1)}return Promise.resolve({range:a,granularity:b,points:Array.from({length:e},(a,b)=>{let d={};for(let a of aP){let c=`${String(b)}:${a}`,e=k.get(c)??0;d[a]=e>0?(j.get(c)??0)/e:null}return{timestamp:aV(g+b*c),bySeverity:d}})})}topSources(a,b={}){let c=b.limit??5;if("user"===b.kind)return Promise.resolve({range:a,items:[]});let d=this.now(),e=d-864e5*h.eI7[a];return Promise.resolve({range:a,items:C(this.db.prepare(`SELECT json_extract(e.metadata, '$.repo') AS repo, count(*) AS c
449
- FROM findings f JOIN events e ON e.id = f.event_id
450
- WHERE e.occurred_at >= :from AND e.occurred_at < :to
451
- AND json_extract(e.metadata, '$.repo') IS NOT NULL
452
- AND json_extract(e.metadata, '$.repo') != ''
453
- GROUP BY repo
454
- ORDER BY c DESC, repo
455
- LIMIT :limit`),{from:e,to:d,limit:c}).map(a=>({id:`repo_${a.repo}`,name:a.repo,kind:"repo",findingsCount:a.c}))})}recentlyResolved(a=20){return Promise.resolve({items:C(this.db.prepare(`SELECT f.finding_key AS finding_key,
456
- f.rule_id AS rule_id,
457
- f.severity AS severity,
458
- json_extract(e.metadata, '$.filePath') AS path,
459
- COALESCE(f.first_detected_at, e.occurred_at) AS first_detected_at,
460
- (
461
- SELECT fr.resolved_at FROM finding_resolution fr
462
- WHERE fr.finding_key = f.finding_key
463
- ORDER BY fr.created_at DESC, fr.rowid DESC
464
- LIMIT 1
465
- ) AS latest_resolved_at
466
- FROM findings f JOIN events e ON e.id = f.event_id
467
- WHERE e.kind = 'code_change'
468
- AND f.finding_key IS NOT NULL
469
- AND (
470
- SELECT fr.status FROM finding_resolution fr
471
- WHERE fr.finding_key = f.finding_key
472
- ORDER BY fr.created_at DESC, fr.rowid DESC
473
- LIMIT 1
474
- ) = 'resolved'
475
- AND (
476
- SELECT fr.method FROM finding_resolution fr
477
- WHERE fr.finding_key = f.finding_key
478
- ORDER BY fr.created_at DESC, fr.rowid DESC
479
- LIMIT 1
480
- ) = 'fixed-at-source'
481
- AND (
482
- SELECT fr.resolved_at FROM finding_resolution fr
483
- WHERE fr.finding_key = f.finding_key
484
- ORDER BY fr.created_at DESC, fr.rowid DESC
485
- LIMIT 1
486
- ) IS NOT NULL
487
- ORDER BY latest_resolved_at DESC
488
- LIMIT :limit`),{limit:a}).map(a=>({findingKey:a.finding_key,ruleId:a.rule_id,severity:a.severity,path:a.path??"",resolvedAt:new Date(a.latest_resolved_at).toISOString(),detectedAt:new Date(a.first_detected_at).toISOString()}))})}findingsInRange(a,b){return C(this.db.prepare(`SELECT e.occurred_at AS occurred_at, f.severity AS severity, f.action_taken AS action_taken
489
- FROM findings f JOIN events e ON e.id = f.event_id
490
- WHERE e.occurred_at >= :from AND e.occurred_at < :to
491
- ORDER BY e.occurred_at`),{from:a,to:b}).map(a=>({occurredAt:a.occurred_at,severity:a.severity,actionTaken:a.action_taken}))}}let aX=["provider","internal","external","ip"],aY="('http', 'ws')",aZ=`LEFT JOIN egress_decision_override oh ON oh.host = d.host
492
- LEFT JOIN egress_decision_override ol ON ol.destination_id = d.id AND ol.host IS NULL`;function a$(a){return{id:a.id,method:a.method,transport:a.transport,url:a.url,template:a.template,dataClass:a.dataClass,lastSeen:new Date(a.lastSeenMs).toISOString(),callSiteCount:a.callSiteCount}}function a_(a,b){let c=b.map(a=>a.transport),d=b.map(a=>a.dataClass),e=b.reduce((a,b)=>a+b.callSiteCount,0),f=b.length>0?Math.max(...b.map(a=>a.lastSeenMs)):a.lastSeenMs;return{id:a.id,kind:a.kind,name:a.name,host:a.host,category:a.category,trust:a.trust,status:(0,h.Gw9)(a.trust,a.overrideDecision),isCustom:(0,h.y_0)(a.trust,a.overrideDecision),lastSeen:new Date(f).toISOString(),endpointCount:b.length,callSiteCount:e,transports:(0,h.by7)(c),dataClasses:(0,h.hzO)(d),review:(0,h.Fnc)(a.trust,c),network:"provider"===a.kind?null:A(a.networkJson,null),endpoints:b.map(a$)}}class a0{constructor(a){this.db=a}stats(){let a=G(this.db,"SELECT count(*) AS n FROM share_destination"),b=G(this.db,"SELECT count(*) AS n FROM share_endpoint"),c=G(this.db,"SELECT count(*) AS n FROM share_call_site"),d=G(this.db,`SELECT count(DISTINCT destination_id) AS n FROM share_endpoint
493
- WHERE transport IN ${aY}`),e=G(this.db,`SELECT count(DISTINCT d.id) AS n
494
- FROM share_destination d
495
- LEFT JOIN share_endpoint e ON e.destination_id = d.id
496
- AND e.transport IN ${aY}
497
- WHERE d.trust IN ('unverified', 'ip') OR e.id IS NOT NULL`),f=H(this.db,"SELECT kind AS k, count(*) AS n FROM share_destination GROUP BY kind"),g={provider:f.get("provider")??0,internal:f.get("internal")??0,external:f.get("external")??0,ip:f.get("ip")??0},h=H(this.db,"SELECT trust AS k, count(*) AS n FROM share_destination GROUP BY trust");return Promise.resolve({destinations:a,endpoints:b,callSites:c,needsReview:e,insecure:d,byKind:g,byTrust:{recognized:h.get("recognized")??0,internal:h.get("internal")??0,unverified:h.get("unverified")??0,ip:h.get("ip")??0}})}listDestinations(a){let b=void 0===a.q||""===a.q?void 0:a.q,c=this.fetchDestinations(b,a.kind),d=this.groupEndpoints(c.map(a=>a.id)),e=c.map(a=>a_(a,d.get(a.id)??[])),f=new Map;for(let a of e){let b=f.get(a.kind);b?b.push(a):f.set(a.kind,[a])}return Promise.resolve({groups:aX.filter(a=>f.has(a)).map(a=>{let b=f.get(a)??[];return{kind:a,total:b.length,items:b}})})}needsReview(){let a=this.fetchDestinations(void 0,void 0,!0),b=this.groupEndpoints(a.map(a=>a.id));return Promise.resolve({items:a.map(a=>({dest:a,endpoints:b.get(a.id)??[]})).map(({dest:a,endpoints:b})=>({summary:a_(a,b),endpoints:b})).filter(({summary:a})=>a.review.needsReview).map(({summary:a,endpoints:b})=>({id:a.id,kind:a.kind,name:a.name,host:a.host,trust:a.trust,status:a.status,review:a.review,topDataClass:(0,h.C05)(b.map(a=>a.dataClass)),callSiteCount:a.callSiteCount,lastSeen:a.lastSeen})).sort((a,b)=>{let c=(0,h.WSs)(a.review.reasons)-(0,h.WSs)(b.review.reasons);return 0!==c?c:b.lastSeen.localeCompare(a.lastSeen)})})}getDestination(a){let b=this.fetchDestinationById(a);if(!b)return Promise.resolve(null);let c=this.fetchEndpoints([b.id]),d=this.fetchCallSites(c.map(a=>a.id));return Promise.resolve(function(a,b,c){let d=b.map(a=>a.transport),e=b.length>0?Math.max(...b.map(a=>a.lastSeenMs)):a.lastSeenMs,f=new Map;for(let a of c.slice(0,200)){let b={id:a.id,project:a.project,file:a.file,line:a.line,snippet:a.snippet,dynamic:a.dynamic,vendored:a.vendored,projectId:a.projectId},c=f.get(a.endpointId);c?c.push(b):f.set(a.endpointId,[b])}return{id:a.id,kind:a.kind,name:a.name,host:a.host,category:a.category,trust:a.trust,status:(0,h.Gw9)(a.trust,a.overrideDecision),isCustom:(0,h.y_0)(a.trust,a.overrideDecision),lastSeen:new Date(e).toISOString(),transports:(0,h.by7)(d),dataClasses:(0,h.hzO)(b.map(a=>a.dataClass)),review:(0,h.Fnc)(a.trust,d),network:"provider"===a.kind?null:A(a.networkJson,null),note:a.note,endpoints:b.map(a=>({...a$(a),sites:f.get(a.id)??[]}))}}(b,c,d))}setEgressDecision(a,b){let c=!1;return n(this.db,()=>{let e=this.db.prepare("SELECT host FROM share_destination WHERE id = ?").get(a);void 0!==e&&(c=!0,this.db.prepare(`DELETE FROM egress_decision_override
498
- WHERE host = :host OR (destination_id = :destinationId AND host IS NULL)`).run({host:e.host,destinationId:a}),null!==b&&this.db.prepare(`INSERT INTO egress_decision_override
499
- (id, destination_id, host, decision, created_at, updated_at)
500
- VALUES (:id, :destinationId, :host, :decision, :now, :now)`).run({id:(0,d.randomUUID)(),destinationId:a,host:e.host,decision:b,now:Date.now()}))},"IMMEDIATE"),c}recordProjectEgress(a){let{hits:b,droppedFiles:c,truncated:d}=function(a,b){if(a.length<=5e3)return{hits:[...a],droppedFiles:[],truncated:!1};if("walk"===b)return{hits:a.slice(0,5e3),droppedFiles:[],truncated:!0};let c=new Map;for(let b of a){let a=c.get(b.site.file);void 0===a?c.set(b.site.file,[b]):a.push(b)}let d=[],e=[];for(let[a,b]of c)d.length+b.length>5e3?e.push(a):d.push(...b);return{hits:d,droppedFiles:e,truncated:!0}}(a.hits,a.reconcile.mode),e=function(a,b){if("walk"===a.mode||0===b.length)return a;let c=new Set(b);return{mode:"ledger",scannedFiles:a.scannedFiles.filter(a=>!c.has(a)),deletedFiles:a.deletedFiles.filter(a=>!c.has(a))}}(a.reconcile,c),f=Date.now(),g={destinations:0,endpoints:0,callSites:0,truncated:d,droppedFiles:c};return n(this.db,()=>{let h=a.projectId??this.knownProjectId(a.projectKey);this.reconcileCallSites(a.projectKey,e),this.upsertHits(a,b,h,f),this.confirmLastSeen(a.projectKey,f),this.pruneOrphans(),g={...this.projectTotals(a.projectKey),truncated:d,droppedFiles:c}},"IMMEDIATE"),g}reconcileCallSites(a,b){if("walk"===b.mode){let c=b.walkedPrefix.replace(/\/+$/,"");this.db.prepare(`DELETE FROM share_call_site
501
- WHERE project_key = :key
502
- AND (:prefix = '' OR file = :prefix OR file LIKE :subtree ESCAPE '\\')
503
- AND file NOT LIKE '.%'
504
- AND file NOT LIKE '%/.%'`).run({key:a,prefix:c,subtree:`${i(c)}/%`});return}let c=[...new Set([...b.scannedFiles,...b.deletedFiles])];for(let b=0;b<c.length;b+=500){let d=c.slice(b,b+500);this.db.prepare(`DELETE FROM share_call_site
505
- WHERE project_key = ? AND file IN (${j(d.length)})`).run(a,...d)}}upsertHits(a,b,c,e){if(0===b.length)return;let f=this.db.prepare(`INSERT INTO share_destination
506
- (id, kind, name, host, category, trust, network_json, last_seen, provenance,
507
- created_at, updated_at)
508
- VALUES (:id, :kind, :name, :host, :category, :trust, :networkJson, :now, 'scan', :now, :now)
509
- ON CONFLICT (host) DO UPDATE SET
510
- kind = excluded.kind,
511
- name = excluded.name,
512
- category = excluded.category,
513
- trust = excluded.trust,
514
- network_json = excluded.network_json,
515
- last_seen = excluded.last_seen,
516
- updated_at = excluded.updated_at`),g=this.db.prepare("SELECT id FROM share_destination WHERE host = ?"),h=this.db.prepare(`INSERT INTO share_endpoint
517
- (id, destination_id, method, transport, url, template, data_class, last_seen,
518
- created_at, updated_at)
519
- VALUES (:id, :destinationId, :method, :transport, :url, :template, :dataClass, :now,
520
- :now, :now)
521
- ON CONFLICT (destination_id, method, url) DO UPDATE SET
522
- transport = excluded.transport,
523
- template = excluded.template,
524
- data_class = excluded.data_class,
525
- last_seen = excluded.last_seen,
526
- updated_at = excluded.updated_at`),i=this.db.prepare("SELECT id FROM share_endpoint WHERE destination_id = ? AND method = ? AND url = ?"),j=this.db.prepare(`INSERT INTO share_call_site
527
- (id, endpoint_id, project, project_key, file, line, snippet, dynamic, vendored,
528
- project_id, created_at, updated_at)
529
- VALUES (:id, :endpointId, :project, :projectKey, :file, :line, :snippet, :dynamic,
530
- :vendored, :projectId, :now, :now)
531
- ON CONFLICT (endpoint_id, project_key, file, line) DO UPDATE SET
532
- snippet = excluded.snippet,
533
- dynamic = excluded.dynamic,
534
- vendored = excluded.vendored,
535
- project = excluded.project,
536
- project_id = COALESCE(excluded.project_id, share_call_site.project_id),
537
- updated_at = excluded.updated_at`),k=new Map,l=new Map;for(let m of b){let b=k.get(m.host);void 0===b&&(f.run({id:(0,d.randomUUID)(),kind:m.kind,name:m.name,host:m.host,category:m.category,trust:m.trust,networkJson:null===m.network?null:JSON.stringify(m.network),now:e}),b=D(g,[m.host])?.id??"",k.set(m.host,b));let n=`${b}\0${m.method}\0${m.url}`,o=l.get(n);void 0===o&&(h.run({id:(0,d.randomUUID)(),destinationId:b,method:m.method,transport:m.transport,url:m.url,template:+!!m.template,dataClass:m.dataClass,now:e}),o=D(i,[b,m.method,m.url])?.id??"",l.set(n,o)),j.run({id:(0,d.randomUUID)(),endpointId:o,project:a.project,projectKey:a.projectKey,file:m.site.file,line:m.site.line,snippet:m.site.snippet,dynamic:+!!m.site.dynamic,vendored:+!!m.site.vendored,projectId:c,now:e})}}knownProjectId(a){return D(this.db.prepare(`SELECT project_id AS projectId FROM share_call_site
538
- WHERE project_key = ? AND project_id IS NOT NULL LIMIT 1`),[a])?.projectId??null}confirmLastSeen(a,b){this.db.prepare(`UPDATE share_endpoint SET last_seen = :now, updated_at = :now
539
- WHERE id IN (SELECT DISTINCT endpoint_id FROM share_call_site WHERE project_key = :key)`).run({now:b,key:a}),this.db.prepare(`UPDATE share_destination SET last_seen = :now, updated_at = :now
540
- WHERE id IN (SELECT DISTINCT e.destination_id
541
- FROM share_endpoint e
542
- JOIN share_call_site c ON c.endpoint_id = e.id
543
- WHERE c.project_key = :key)`).run({now:b,key:a})}pruneOrphans(){this.db.exec(`DELETE FROM share_endpoint
544
- WHERE NOT EXISTS (SELECT 1 FROM share_call_site c WHERE c.endpoint_id = share_endpoint.id)`),this.db.exec(`DELETE FROM egress_decision_override
545
- WHERE host IS NULL
546
- AND destination_id IN (
547
- SELECT d.id FROM share_destination d
548
- WHERE NOT EXISTS (SELECT 1 FROM share_endpoint e WHERE e.destination_id = d.id))`),this.db.exec(`DELETE FROM share_destination
549
- WHERE NOT EXISTS (
550
- SELECT 1 FROM share_endpoint e WHERE e.destination_id = share_destination.id)`)}projectTotals(a){return{destinations:G(this.db,`SELECT count(DISTINCT e.destination_id) AS n
551
- FROM share_endpoint e
552
- JOIN share_call_site c ON c.endpoint_id = e.id
553
- WHERE c.project_key = ?`,[a]),endpoints:G(this.db,"SELECT count(DISTINCT endpoint_id) AS n FROM share_call_site WHERE project_key = ?",[a]),callSites:G(this.db,"SELECT count(*) AS n FROM share_call_site WHERE project_key = ?",[a])}}mapDestRow(a){return{id:a.id,kind:a.kind,name:a.name,host:a.host,category:a.category,trust:a.trust,note:a.note,networkJson:a.networkJson,lastSeenMs:a.lastSeenMs,overrideDecision:a.overrideDecision??null}}fetchDestinations(a,b,c=!1){let d,e=`d.id, d.kind, d.name, d.host, d.category, d.trust, d.note,
554
- d.network_json AS networkJson, d.last_seen AS lastSeenMs,
555
- d.created_at AS createdAt,
556
- COALESCE(oh.decision, ol.decision) AS overrideDecision`,f=[],g=[];if(b&&b.length>0&&(f.push(`d.kind IN (${j(b.length)})`),g.push(...b)),c&&f.push(`(d.trust IN ('unverified', 'ip')
557
- OR EXISTS (SELECT 1 FROM share_endpoint re
558
- WHERE re.destination_id = d.id
559
- AND re.transport IN ${aY}))`),a){let b=k(a);f.push(`(d.name LIKE ? ESCAPE '\\' OR d.category LIKE ? ESCAPE '\\' OR e.url LIKE ? ESCAPE '\\'
560
- OR c.project LIKE ? ESCAPE '\\' OR c.file LIKE ? ESCAPE '\\')`),g.push(b,b,b,b,b),d=`SELECT DISTINCT ${e}
561
- FROM share_destination d
562
- ${aZ}
563
- LEFT JOIN share_endpoint e ON e.destination_id = d.id
564
- LEFT JOIN share_call_site c ON c.endpoint_id = e.id
565
- ${f.length?`WHERE ${f.join(" AND ")}`:""}
566
- ORDER BY d.created_at ASC, d.id ASC`}else d=`SELECT ${e}
567
- FROM share_destination d
568
- ${aZ}
569
- ${f.length?`WHERE ${f.join(" AND ")}`:""}
570
- ORDER BY d.created_at ASC, d.id ASC`;return C(this.db.prepare(d),g).map(a=>this.mapDestRow(a))}fetchDestinationById(a){let b=D(this.db.prepare(`SELECT d.id, d.kind, d.name, d.host, d.category, d.trust, d.note,
571
- d.network_json AS networkJson, d.last_seen AS lastSeenMs,
572
- COALESCE(oh.decision, ol.decision) AS overrideDecision
573
- FROM share_destination d
574
- ${aZ}
575
- WHERE d.id = ?`),[a]);return b?this.mapDestRow(b):null}fetchEndpoints(a){return 0===a.length?[]:C(this.db.prepare(`SELECT e.id, e.destination_id AS destinationId, e.method, e.transport, e.url,
576
- e.template, e.data_class AS dataClass, e.last_seen AS lastSeenMs,
577
- count(c.id) AS callSiteCount
578
- FROM share_endpoint e
579
- LEFT JOIN share_call_site c ON c.endpoint_id = e.id
580
- WHERE e.destination_id IN (${j(a.length)})
581
- GROUP BY e.id
582
- ORDER BY e.created_at ASC, e.id ASC`),a).map(a=>({id:a.id,destinationId:a.destinationId,method:a.method,transport:a.transport,url:a.url,template:1===a.template,dataClass:a.dataClass,lastSeenMs:a.lastSeenMs,callSiteCount:a.callSiteCount}))}groupEndpoints(a){let b=new Map;for(let c of this.fetchEndpoints(a)){let a=b.get(c.destinationId);a?a.push(c):b.set(c.destinationId,[c])}return b}fetchCallSites(a){return 0===a.length?[]:C(this.db.prepare(`SELECT id, endpoint_id AS endpointId, project, file, line, snippet, dynamic, vendored,
583
- project_id AS projectId
584
- FROM share_call_site
585
- WHERE endpoint_id IN (${j(a.length)})
586
- ORDER BY created_at ASC, id ASC`),a).map(a=>({id:a.id,endpointId:a.endpointId,project:a.project,file:a.file,line:a.line,snippet:a.snippet,dynamic:1===a.dynamic,vendored:1===a.vendored,projectId:a.projectId}))}}class a1{constructor(a){this.db=a,this.upsertStmt=a.prepare(`INSERT INTO source_project
587
- (id, url, name, attributes, first_seen, last_seen)
588
- VALUES
589
- (:id, :url, :name, :attributes, :firstSeen, :lastSeen)
590
- ON CONFLICT(id) DO UPDATE SET
591
- url = excluded.url,
592
- name = excluded.name,
593
- attributes = excluded.attributes,
594
- last_seen = excluded.last_seen`)}upsert(a,b=Date.now()){let c=t(a.url),d=(0,h.QCA)(a,c,b);return this.upsertStmt.run(F({id:d.id,url:d.url,name:d.name,attributes:d.attributes,firstSeen:d.firstSeen,lastSeen:d.lastSeen})),c}findById(a){return D(this.db.prepare("SELECT * FROM source_project WHERE id = :id"),{id:a})}distinctNames(){return C(this.db.prepare(`SELECT DISTINCT name FROM source_project
595
- WHERE name IS NOT NULL
596
- ORDER BY name`)).map(a=>a.name)}}function a2(a,b){return b?{...a,hostId:b}:a}function a3(a){let b=new g.DatabaseSync(a);return b.exec("PRAGMA journal_mode = WAL"),b.exec("PRAGMA busy_timeout = 2000"),b.exec("PRAGMA foreign_keys = ON"),b}function a4(a){var b;y(a);let c=(0,f.join)(a,x),g=a3(c);if(q(b=g,"table","tenants")||r(b,"events").includes("tenant_id")){g.close();let a=function(a){let b=`${a}.legacy.${String(Date.now())}.bak`;for(let c of((0,e.renameSync)(a,b),z(a)))(0,e.existsSync)(c)&&(0,e.rmSync)(c);return b}(c);g=a3(c),p(`Detected an older, incompatible (tenant-bearing) ${x}; backed it up to ${a} and created a fresh store.`)}for(let a of(!function(a){var b;let c=a.prepare("PRAGMA user_version").get().user_version;a.exec("CREATE TABLE IF NOT EXISTS migration_ledger (tag TEXT PRIMARY KEY, applied_at INTEGER NOT NULL)");let d=new Set(a.prepare("SELECT tag FROM migration_ledger").all().map(a=>a.tag)),e=0===d.size&&c>0,f=a.prepare("INSERT OR IGNORE INTO migration_ledger (tag, applied_at) VALUES (?, ?)");for(let[b,g]of h.lFU.entries()){if(d.has(g.tag))continue;let h=function(a){let b=[];for(let c of a.matchAll(/CREATE TABLE (?:IF NOT EXISTS )?`([^`]+)`/g))void 0===c[1]||c[1].startsWith("__new_")||b.push({kind:"table",name:c[1]});for(let c of a.matchAll(/ALTER TABLE `([^`]+)` ADD (?:COLUMN )?`([^`]+)`/g))void 0!==c[1]&&void 0!==c[2]&&b.push({kind:"column",table:c[1],name:c[2]});return b}(g.sql),i=h.filter(b=>"column"===b.kind?r(a,b.table,{includeGenerated:!0}).includes(b.name):q(a,"table",b.name));if(i.length>0&&i.length<h.length){let a=h.filter(a=>!i.includes(a)),b=`sqlite migration ${g.tag} has no ledger row, but the store already has ${i.map(u).join(", ")} while missing ${a.map(u).join(", ")} — the schema diverged from the migration history; refusing to replay or skip.`;throw p(b),Error(`[aka] ${b}`)}let j=h.length>0?i.length===h.length:e&&b<c,k=/PRAGMA foreign_keys\s*=\s*OFF/i.test(g.sql),l=g.sql.split(/-->\s*statement-breakpoint/).map(a=>a.trim()).filter(a=>a.length>0);k&&a.exec("PRAGMA foreign_keys = OFF");try{n(a,()=>{for(let b of l){let c=function(a){let b=a.replace(/^(?:\s*--[^\n]*\n?)+/,"").trimStart();return/^CREATE (?:UNIQUE )?INDEX (?:IF NOT EXISTS )?`([^`]+)`/.exec(b)?.[1]}(b);if(void 0===c){if(j)continue}else if(q(a,"index",c))continue;a.exec(b)}if(k&&!j){let b=a.prepare("PRAGMA foreign_key_check").all();if(b.length>0)throw Error(`[aka] sqlite migration ${g.tag} left ${String(b.length)} foreign-key violation(s); rolling back.`)}f.run(g.tag,Date.now())},"IMMEDIATE")}finally{k&&a.exec("PRAGMA foreign_keys = ON")}}c<h.lFU.length&&a.exec(`PRAGMA user_version = ${String(h.lFU.length)}`),w(a,"events"),w(a,"audit_events"),a.exec(`CREATE TABLE IF NOT EXISTS scan_ledger (
597
- path TEXT PRIMARY KEY,
598
- mtime TEXT NOT NULL,
599
- content_hash TEXT NOT NULL,
600
- ruleset_hash TEXT NOT NULL,
601
- scanned_at INTEGER NOT NULL
602
- )`),a.exec(`CREATE TABLE IF NOT EXISTS blocked_detections (
603
- reference TEXT PRIMARY KEY,
604
- rule_id TEXT NOT NULL,
605
- category TEXT NOT NULL,
606
- value_fingerprint TEXT NOT NULL,
607
- key_version INTEGER NOT NULL,
608
- masked_value TEXT NOT NULL,
609
- session_id TEXT,
610
- repo TEXT,
611
- blocked_at INTEGER NOT NULL
612
- )`),a.exec(`CREATE TABLE IF NOT EXISTS rule_probe_cache (
613
- rule_key TEXT PRIMARY KEY,
614
- verdict TEXT NOT NULL,
615
- worst_probe_ms REAL NOT NULL,
616
- checked_at INTEGER NOT NULL
617
- )`),(b=a).exec(`CREATE TABLE IF NOT EXISTS \`_pack_write_gate\` (
618
- \`id\` integer PRIMARY KEY NOT NULL,
619
- \`open\` integer DEFAULT 0 NOT NULL,
620
- CONSTRAINT "ck_pack_write_gate_single_row" CHECK("_pack_write_gate"."id" = 1)
621
- )`),b.exec("INSERT OR IGNORE INTO _pack_write_gate (id, open) VALUES (1, 0)"),b.exec(`CREATE TRIGGER IF NOT EXISTS trg_installed_packs_write_gate
622
- BEFORE UPDATE OF version, name, rules_json ON installed_packs
623
- WHEN (SELECT open FROM _pack_write_gate WHERE id = 1) IS NOT 1
624
- BEGIN SELECT RAISE(IGNORE); END`),function(a){let b=new Set(r(a,"audit_events",{includeGenerated:!0}));for(let c of v)b.has(c.name)||a.exec(c.ddl)}(a),function(a){try{let b=a.prepare(`SELECT id, url, name, attributes, first_seen AS firstSeen, last_seen AS lastSeen
625
- FROM source_project
626
- WHERE url IS NOT NULL AND id NOT LIKE 'sample:%'
627
- ORDER BY last_seen DESC, id`).all().map(a=>({row:a,canonicalId:t(a.url)})).filter(({row:a,canonicalId:b})=>a.id!==b);if(0===b.length)return;let c=a.prepare(`INSERT INTO source_project (id, url, name, attributes, first_seen, last_seen)
628
- VALUES (?, ?, ?, ?, ?, ?)
629
- ON CONFLICT(id) DO UPDATE SET
630
- first_seen = min(first_seen, excluded.first_seen),
631
- last_seen = max(last_seen, excluded.last_seen)`),d=a.prepare("UPDATE audit_events SET source_project_id = ? WHERE source_project_id = ?"),e=a.prepare("UPDATE share_call_site SET project_id = ? WHERE project_id = ?"),f=["project_file","file_access_override"].map(b=>({dropCollisions:a.prepare(`DELETE FROM ${b} WHERE project_id = ?
632
- AND path IN (SELECT path FROM ${b} WHERE project_id = ?)`),repoint:a.prepare(`UPDATE ${b} SET project_id = ? WHERE project_id = ?`)})),g=a.prepare("DELETE FROM source_project WHERE id = ?");n(a,()=>{for(let{row:a,canonicalId:h}of b){for(let{dropCollisions:b,repoint:e}of(c.run(h,a.url,a.name,a.attributes,a.firstSeen,a.lastSeen),d.run(h,a.id),f))b.run(a.id,h),e.run(h,a.id);e.run(h,a.id),g.run(a.id)}},"IMMEDIATE")}catch(a){p(`source_project id reconcile failed: ${String(a)}`)}}(a)}(g),[c,...z(c)]))try{(0,e.chmodSync)(a,384)}catch{}let j=new aa(g),k=new ak(g),l=new aJ(g),m=new ar(g),s=new aO(g),A=new af(g),B=new aM(g),C=new aN(g),D=new aW(g),E=new _(g),F=new a0(g),G=new aK(m),H=new as(g),I=new aI(g),J=new aL(g),K=new T(g),L=new a1(g),M=new U(g),N=new V(g),O=new al(g),P=new am(g),Q=new X(g);return l.seedDefaults(),{events:j,findings:k,policies:l,installedPacks:m,scanLedger:s,exceptions:A,resolutions:B,ruleProbeCache:C,security:D,detections:E,shares:F,policyCatalog:G,inventory:H,inventoryAssets:I,activity:K,sourceProject:L,auditEvents:M,classifiedData:N,inspectionDefinitions:O,inspectionFindings:P,recordCapture:function(a,b){o(g,()=>{j.insertEvent(a);let c=a.metadata?.sessionId;k.insertFindings(b,c?{sessionId:c}:{})})},ensureInventory:function(a){let b={};return o(g,()=>{let c=Date.now();a.host&&(b.hostId=H.upsert(a.host,c)),a.harness&&(b.harnessId=H.upsert(a2(a.harness,b.hostId),c)),b.accountId=H.upsert(a2({objectType:"user",identityKey:"local",attributes:{source:"local"}},b.hostId),c),a.project&&(b.sourceProjectId=L.upsert(a.project,c))})?b:{}},recordConfigScan:function(a){o(g,()=>{let b=(0,h.I8t)(a.scanEvent.startedAt);for(let c of a.items)H.upsert(c,b);M.insertAuditEvent(a.scanEvent);let c=new Map;for(let b of a.definitions??[])c.set(`${b.ruleId}@${b.version}`,O.upsert(b));for(let b of a.findings??[]){let e=c.get(`${b.ruleId}@${b.version}`);e&&P.insertFinding({id:(0,d.randomUUID)(),auditEventId:a.scanEvent.id,inspectionDefinitionId:e,span:b.span,maskedMatch:b.maskedMatch,actionTaken:b.actionTaken,confidence:b.confidence})}})},recordProjectFiles:function(a,b){0!==b.files.length&&o(g,()=>{J.replaceForProject(a,b,Date.now())})},reconcileWorktreeProjects:function(a,b,c){try{let d=b.split(f.sep).join("/"),e=c.split(f.sep).join("/"),h=c===b?"":"url IN (:worktreePosix, :worktreeWin) OR ",j=g.prepare(`SELECT id FROM source_project
633
- WHERE id <> :canonicalId
634
- AND (${h}url LIKE :pattern ESCAPE '\\' OR url LIKE :patternWin ESCAPE '\\')`).all({canonicalId:a,...c===b?{}:{worktreePosix:e,worktreeWin:e.split("/").join("\\")},pattern:`${i(d)}/.claude/worktrees/%`,patternWin:`${i(d.split("/").join("\\"))}\\\\.claude\\\\worktrees\\\\%`});if(0===j.length)return;n(g,()=>{for(let{id:b}of j)g.prepare("UPDATE audit_events SET source_project_id = :canonicalId WHERE source_project_id = :id").run({canonicalId:a,id:b}),g.prepare("UPDATE OR IGNORE file_access_override SET project_id = :canonicalId WHERE project_id = :id").run({canonicalId:a,id:b}),g.prepare("DELETE FROM file_access_override WHERE project_id = :id").run({id:b}),g.prepare("DELETE FROM project_file WHERE project_id = :id").run({id:b}),g.prepare("DELETE FROM source_project WHERE id = :id").run({id:b})})}catch{}},configInventoryReport:()=>Q.report(),facets:function(){return{hosts:H.distinctTitles("host"),harnesses:H.distinctTitles("harness"),osVersions:H.osVersions(),projects:L.distinctNames()}},purgeSampleData:()=>{!function(a){try{if(!a.prepare(`SELECT (
635
- EXISTS(SELECT 1 FROM share_destination WHERE provenance = 'sample')
636
- OR EXISTS(SELECT 1 FROM audit_events WHERE id LIKE 'sample:activity:%')
637
- OR EXISTS(SELECT 1 FROM inventory_asset WHERE provenance = 'sample')
638
- ) AS n`).get().n)return;n(a,()=>{a.exec(`DELETE FROM share_call_site WHERE endpoint_id IN (
639
- SELECT e.id FROM share_endpoint e
640
- JOIN share_destination d ON d.id = e.destination_id
641
- WHERE d.provenance = 'sample')`),a.exec(`DELETE FROM egress_decision_override WHERE destination_id IN (
642
- SELECT id FROM share_destination WHERE provenance = 'sample')`),a.exec(`DELETE FROM share_endpoint WHERE destination_id IN (
643
- SELECT id FROM share_destination WHERE provenance = 'sample')`),a.exec("DELETE FROM share_destination WHERE provenance = 'sample'"),a.exec(`DELETE FROM harness_asset WHERE asset_id IN (SELECT id FROM inventory_asset WHERE provenance = 'sample')
644
- OR harness_id IN (SELECT id FROM inventory WHERE object_type = 'harness' AND json_extract(attributes, '$.provenance') = 'sample')`),a.exec("DELETE FROM mcp_trust_override WHERE asset_id IN (SELECT id FROM inventory_asset WHERE provenance = 'sample')"),a.exec("DELETE FROM file_access_override WHERE project_id IN (SELECT id FROM source_project WHERE json_extract(attributes, '$.provenance') = 'sample')"),a.exec("DELETE FROM project_file WHERE project_id IN (SELECT id FROM source_project WHERE json_extract(attributes, '$.provenance') = 'sample')"),a.exec("DELETE FROM inventory_asset WHERE provenance = 'sample'"),a.exec("DELETE FROM source_project WHERE json_extract(attributes, '$.provenance') = 'sample'"),a.exec("DELETE FROM inventory WHERE object_type = 'harness' AND json_extract(attributes, '$.provenance') = 'sample'"),a.exec("DELETE FROM inspection_findings WHERE id LIKE 'sample:activity:%'"),a.exec("DELETE FROM inspection_definitions WHERE id LIKE 'sample:activity:%'"),a.exec("DELETE FROM audit_events WHERE root_session_id LIKE 'sample:activity:%'"),a.exec("DELETE FROM audit_events WHERE id LIKE 'sample:activity:%'"),a.exec(`CREATE TABLE IF NOT EXISTS app_meta (
645
- key TEXT PRIMARY KEY,
646
- value TEXT NOT NULL
647
- )`),a.exec("DELETE FROM app_meta WHERE key LIKE 'sample_seeded:%'")})}catch{}}(g)},transaction:async function a(a){g.exec("BEGIN");try{let b=await a();return g.exec("COMMIT"),b}catch(a){try{g.exec("ROLLBACK")}catch{}throw a}},close:()=>{g.close()}}}function a5(a){return(0,f.join)(a,"exception.key")}function a6(a,b){y(a);let c=a5(a),d=`${c}.tmp`,f=JSON.stringify({version:b.version,material:b.material.toString("base64")});(0,e.writeFileSync)(d,`${f}
648
- `,{mode:384}),(0,e.renameSync)(d,c);try{(0,e.chmodSync)(c,384)}catch{}return b}function a7(a){let b;try{b=(0,e.readFileSync)(a5(a),"utf8")}catch(a){if("ENOENT"===a.code)return null;throw a instanceof Error?a:Error(String(a))}let c=JSON.parse(b);if("object"!=typeof c||null===c)throw Error("exception key file is corrupt: not a JSON object");let{version:d,material:f}=c;if("number"!=typeof d||!Number.isInteger(d)||d<1)throw Error("exception key file is corrupt: bad version");if("string"!=typeof f)throw Error("exception key file is corrupt: bad material");let g=Buffer.from(f,"base64");if(32!==g.length)throw Error("exception key file is corrupt: bad material length");return{version:d,material:g}}function a8(a){let b=a7(a);if(b){try{(0,e.chmodSync)(a5(a),384)}catch{}return b}return a6(a,{version:1,material:(0,d.randomBytes)(32)})}function a9(a){let b=a7(a);return a6(a,{version:(b?.version??0)+1,material:(0,d.randomBytes)(32)})}function ba(a,b){return(0,d.createHmac)("sha256",a.material).update(b,"utf8").digest("hex")}c(51455);var bb=c(48161);function bc(){return(0,f.join)((0,bb.homedir)(),".aka")}function bd(a=bc()){return(0,f.join)(a,"settings")}function be(a=bc()){return(0,f.join)(a,"data")}function bf(a=bc()){let b=function(a){let b;try{b=(0,e.readFileSync)(a,"utf8")}catch{return null}return B(b)??null}((0,f.join)(bd(a),"settings.json"));if(!b)return(0,h.i1j)();try{return h.hd_.parse(b)}catch{return(0,h.i1j)()}}function bg(a,b=bc()){let c=bd(b),d=bf(b),g=h.hd_.parse({...d,...a,onboardedAt:a.onboardedAt??d.onboardedAt??new Date().toISOString()});y(c);let i=(0,f.join)(c,"settings.json"),j=`${i}.tmp`;return(0,e.writeFileSync)(j,`${JSON.stringify(g,null,2)}
649
- `,{mode:384}),(0,e.renameSync)(j,i),g}},87400:(a,b,c)=>{c.d(b,{S8C:()=>y,hxQ:()=>ao,Itg:()=>ad,RRF:()=>a1,ZpU:()=>a4,HUb:()=>a0,unw:()=>a3,goN:()=>N,Jr:()=>a5,V8B:()=>aI,IgC:()=>aY,aIg:()=>bA,iRC:()=>aJ,GCf:()=>E,TUN:()=>O,SHn:()=>au,rov:()=>b4,V0H:()=>a_,PEm:()=>aW,eI7:()=>ci,cqq:()=>F,jON:()=>aS,lFU:()=>d,PhW:()=>ab,uQz:()=>b3,BIx:()=>aq,hd_:()=>b5,tXp:()=>bZ,plk:()=>bu,mAj:()=>bU,Fnc:()=>c$,ryv:()=>r,tTV:()=>aa,rG:()=>b0,q_t:()=>p,i1j:()=>b6,xog:()=>bT,hzO:()=>c0,by7:()=>c_,Gw9:()=>cY,q11:()=>h,U7X:()=>w,y_0:()=>cZ,I8t:()=>g,DhA:()=>a6,WSs:()=>c3,a45:()=>bs,N6N:()=>f,A6E:()=>b_,pnU:()=>bt,V9M:()=>cb,$BP:()=>cc,yaP:()=>b7,zw:()=>b8,JAl:()=>cd,$3l:()=>ce,gzP:()=>b9,QCA:()=>ca,C05:()=>c1});let d=[{tag:"0000_acoustic_felicia_hardy",sql:"CREATE TABLE `audit_events` (\n `id` text PRIMARY KEY NOT NULL,\n `parent_id` text,\n `root_session_id` text,\n `event_type` text NOT NULL,\n `host_id` text,\n `harness_id` text,\n `source_project_id` text,\n `started_at` integer NOT NULL,\n `ended_at` integer,\n `severity` text,\n `priority` text,\n `content` text,\n `content_hash` text,\n `attributes` text,\n FOREIGN KEY (`parent_id`) REFERENCES `audit_events`(`id`) ON UPDATE no action ON DELETE no action,\n FOREIGN KEY (`root_session_id`) REFERENCES `audit_events`(`id`) ON UPDATE no action ON DELETE no action,\n FOREIGN KEY (`host_id`) REFERENCES `inventory`(`id`) ON UPDATE no action ON DELETE no action,\n FOREIGN KEY (`harness_id`) REFERENCES `inventory`(`id`) ON UPDATE no action ON DELETE no action,\n FOREIGN KEY (`source_project_id`) REFERENCES `source_project`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_audit_parent` ON `audit_events` (`parent_id`);--\x3e statement-breakpoint\nCREATE INDEX `idx_audit_session` ON `audit_events` (`root_session_id`,`started_at`);--\x3e statement-breakpoint\nCREATE INDEX `idx_audit_harness_t` ON `audit_events` (`harness_id`,`started_at`);--\x3e statement-breakpoint\nCREATE INDEX `idx_audit_project_t` ON `audit_events` (`source_project_id`,`started_at`);--\x3e statement-breakpoint\nCREATE TABLE `classified_data` (\n `id` text PRIMARY KEY NOT NULL,\n `class` text NOT NULL,\n `label` text,\n `attributes` text\n);\n--\x3e statement-breakpoint\nCREATE TABLE `events` (\n `id` text PRIMARY KEY NOT NULL,\n `source_tool` text NOT NULL,\n `kind` text NOT NULL,\n `occurred_at` integer NOT NULL,\n `content_hash` text NOT NULL,\n `content` text NOT NULL,\n `metadata` text\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_events_occurred` ON `events` (`occurred_at`);--\x3e statement-breakpoint\nCREATE TABLE `findings` (\n `id` text PRIMARY KEY NOT NULL,\n `event_id` text NOT NULL,\n `rule_id` text NOT NULL,\n `category` text NOT NULL,\n `severity` text NOT NULL,\n `span_start` integer NOT NULL,\n `span_end` integer NOT NULL,\n `masked_match` text NOT NULL,\n `action_taken` text NOT NULL,\n `confidence` real NOT NULL,\n FOREIGN KEY (`event_id`) REFERENCES `events`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_findings_event` ON `findings` (`event_id`);--\x3e statement-breakpoint\nCREATE TABLE `inspection_definitions` (\n `id` text PRIMARY KEY NOT NULL,\n `rule_id` text NOT NULL,\n `name` text NOT NULL,\n `category` text NOT NULL,\n `severity` text NOT NULL,\n `definition` text NOT NULL,\n `version` text NOT NULL\n);\n--\x3e statement-breakpoint\nCREATE TABLE `inspection_findings` (\n `id` text PRIMARY KEY NOT NULL,\n `audit_event_id` text NOT NULL,\n `inspection_definition_id` text NOT NULL,\n `classified_data_id` text,\n `span_start` integer NOT NULL,\n `span_end` integer NOT NULL,\n `masked_match` text NOT NULL,\n `action_taken` text NOT NULL,\n `confidence` real NOT NULL,\n FOREIGN KEY (`audit_event_id`) REFERENCES `audit_events`(`id`) ON UPDATE no action ON DELETE no action,\n FOREIGN KEY (`inspection_definition_id`) REFERENCES `inspection_definitions`(`id`) ON UPDATE no action ON DELETE no action,\n FOREIGN KEY (`classified_data_id`) REFERENCES `classified_data`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_inspection_findings_event` ON `inspection_findings` (`audit_event_id`);--\x3e statement-breakpoint\nCREATE TABLE `installed_packs` (\n `id` text PRIMARY KEY NOT NULL,\n `namespace` text NOT NULL,\n `pack_id` text NOT NULL,\n `version` text NOT NULL,\n `name` text NOT NULL,\n `rules_json` text NOT NULL,\n `enabled` integer DEFAULT true NOT NULL,\n `policy_id` text,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL\n);\n--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_installed_packs_pack` ON `installed_packs` (`namespace`,`pack_id`);--\x3e statement-breakpoint\nCREATE TABLE `inventory` (\n `id` text PRIMARY KEY NOT NULL,\n `object_type` text NOT NULL,\n `location` text,\n `title` text,\n `host_id` text,\n `attributes` text NOT NULL,\n `os_version` text GENERATED ALWAYS AS (json_extract(attributes, '$.os_version')) VIRTUAL,\n `harness_version` text GENERATED ALWAYS AS (json_extract(attributes, '$.harness_version')) VIRTUAL,\n `first_seen` integer NOT NULL,\n `last_seen` integer NOT NULL,\n FOREIGN KEY (`host_id`) REFERENCES `inventory`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_inventory_type` ON `inventory` (`object_type`);--\x3e statement-breakpoint\nCREATE INDEX `idx_inventory_type_osver` ON `inventory` (`object_type`,`os_version`);--\x3e statement-breakpoint\nCREATE INDEX `idx_inventory_type_harnessver` ON `inventory` (`object_type`,`harness_version`);--\x3e statement-breakpoint\nCREATE TABLE `policies` (\n `id` text PRIMARY KEY NOT NULL,\n `scope` text DEFAULT 'global' NOT NULL,\n `target` text NOT NULL,\n `action` text NOT NULL,\n `enabled` integer DEFAULT true NOT NULL,\n `custom_keywords` text,\n `name` text,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL\n);\n--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_policies_scope_target` ON `policies` (`scope`,`target`);--\x3e statement-breakpoint\nCREATE TABLE `source_project` (\n `id` text PRIMARY KEY NOT NULL,\n `url` text,\n `name` text,\n `attributes` text NOT NULL,\n `first_seen` integer NOT NULL,\n `last_seen` integer NOT NULL\n);\n"},{tag:"0001_adorable_marten_broadcloak",sql:"ALTER TABLE `audit_events` ADD `input_tokens` integer GENERATED ALWAYS AS (json_extract(attributes, '$.input_tokens')) VIRTUAL;--\x3e statement-breakpoint\nALTER TABLE `audit_events` ADD `output_tokens` integer GENERATED ALWAYS AS (json_extract(attributes, '$.output_tokens')) VIRTUAL;--\x3e statement-breakpoint\nALTER TABLE `audit_events` ADD `cache_creation_input_tokens` integer GENERATED ALWAYS AS (json_extract(attributes, '$.cache_creation_input_tokens')) VIRTUAL;--\x3e statement-breakpoint\nALTER TABLE `audit_events` ADD `cache_read_input_tokens` integer GENERATED ALWAYS AS (json_extract(attributes, '$.cache_read_input_tokens')) VIRTUAL;--\x3e statement-breakpoint\nALTER TABLE `audit_events` ADD `model` text GENERATED ALWAYS AS (json_extract(attributes, '$.model')) VIRTUAL;--\x3e statement-breakpoint\nALTER TABLE `audit_events` ADD `provider` text GENERATED ALWAYS AS (json_extract(attributes, '$.provider')) VIRTUAL;--\x3e statement-breakpoint\nCREATE INDEX `idx_audit_session_type` ON `audit_events` (`root_session_id`,`started_at`) WHERE event_type = 'llm_call';"},{tag:"0002_groovy_big_bertha",sql:"CREATE TABLE `exceptions` (\n `id` text PRIMARY KEY NOT NULL,\n `rule_id` text NOT NULL,\n `category` text NOT NULL,\n `value_fingerprint` text NOT NULL,\n `key_version` integer NOT NULL,\n `masked_value` text NOT NULL,\n `scope` text NOT NULL,\n `expires_at` integer,\n `max_uses` integer,\n `use_count` integer DEFAULT 0 NOT NULL,\n `last_used_at` integer,\n `justification` text NOT NULL,\n `conditions` text,\n `created_by` text NOT NULL,\n `created_via` text NOT NULL,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL,\n `revoked_at` integer,\n `revoked_by` text,\n `revoke_reason` text\n);\n--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_exceptions_active` ON `exceptions` (`rule_id`,`value_fingerprint`,`key_version`) WHERE revoked_at IS NULL;"},{tag:"0003_rich_sage",sql:"CREATE TABLE `egress_decision_override` (\n `id` text PRIMARY KEY NOT NULL,\n `destination_id` text NOT NULL,\n `decision` text NOT NULL,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL,\n FOREIGN KEY (`destination_id`) REFERENCES `share_destination`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_egress_decision_override` ON `egress_decision_override` (`destination_id`);--\x3e statement-breakpoint\nCREATE TABLE `file_access_override` (\n `id` text PRIMARY KEY NOT NULL,\n `project_id` text NOT NULL,\n `path` text NOT NULL,\n `access` text NOT NULL,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL,\n FOREIGN KEY (`project_id`) REFERENCES `source_project`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_file_access_override_project` ON `file_access_override` (`project_id`);--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_file_access_override` ON `file_access_override` (`project_id`,`path`);--\x3e statement-breakpoint\nCREATE TABLE `harness_asset` (\n `id` text PRIMARY KEY NOT NULL,\n `harness_id` text NOT NULL,\n `asset_id` text NOT NULL,\n `created_at` integer NOT NULL,\n FOREIGN KEY (`harness_id`) REFERENCES `inventory`(`id`) ON UPDATE no action ON DELETE no action,\n FOREIGN KEY (`asset_id`) REFERENCES `inventory_asset`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_harness_asset_harness` ON `harness_asset` (`harness_id`);--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_harness_asset` ON `harness_asset` (`harness_id`,`asset_id`);--\x3e statement-breakpoint\nCREATE TABLE `inventory_asset` (\n `id` text PRIMARY KEY NOT NULL,\n `asset_type` text NOT NULL,\n `name` text NOT NULL,\n `sub` text,\n `description` text,\n `flags_json` text DEFAULT '[]' NOT NULL,\n `meta_json` text DEFAULT '{}' NOT NULL,\n `trust` text,\n `tools_json` text,\n `provenance` text DEFAULT 'scan' NOT NULL,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_inventory_asset_type` ON `inventory_asset` (`asset_type`);--\x3e statement-breakpoint\nCREATE TABLE `mcp_trust_override` (\n `id` text PRIMARY KEY NOT NULL,\n `asset_id` text NOT NULL,\n `trust` text NOT NULL,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL,\n FOREIGN KEY (`asset_id`) REFERENCES `inventory_asset`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_mcp_trust_override` ON `mcp_trust_override` (`asset_id`);--\x3e statement-breakpoint\nCREATE TABLE `project_file` (\n `id` text PRIMARY KEY NOT NULL,\n `project_id` text NOT NULL,\n `path` text NOT NULL,\n `name` text NOT NULL,\n `origin` text NOT NULL,\n `default_access` text NOT NULL,\n `findings_count` integer DEFAULT 0 NOT NULL,\n `blocked_at` integer,\n `note` text,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL,\n FOREIGN KEY (`project_id`) REFERENCES `source_project`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_project_file_project` ON `project_file` (`project_id`);--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_project_file` ON `project_file` (`project_id`,`path`);--\x3e statement-breakpoint\nCREATE TABLE `share_call_site` (\n `id` text PRIMARY KEY NOT NULL,\n `endpoint_id` text NOT NULL,\n `project` text NOT NULL,\n `file` text NOT NULL,\n `line` integer NOT NULL,\n `snippet` text NOT NULL,\n `dynamic` integer DEFAULT false NOT NULL,\n `vendored` integer DEFAULT false NOT NULL,\n `project_id` text,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL,\n FOREIGN KEY (`endpoint_id`) REFERENCES `share_endpoint`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_share_call_site_endpoint` ON `share_call_site` (`endpoint_id`);--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_share_call_site` ON `share_call_site` (`endpoint_id`,`project`,`file`,`line`);--\x3e statement-breakpoint\nCREATE TABLE `share_destination` (\n `id` text PRIMARY KEY NOT NULL,\n `kind` text NOT NULL,\n `name` text NOT NULL,\n `host` text NOT NULL,\n `category` text NOT NULL,\n `trust` text NOT NULL,\n `note` text,\n `network_json` text,\n `last_seen` integer NOT NULL,\n `provenance` text DEFAULT 'scan' NOT NULL,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_share_destination_kind` ON `share_destination` (`kind`);--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_share_destination_host` ON `share_destination` (`host`);--\x3e statement-breakpoint\nCREATE TABLE `share_endpoint` (\n `id` text PRIMARY KEY NOT NULL,\n `destination_id` text NOT NULL,\n `method` text NOT NULL,\n `transport` text NOT NULL,\n `url` text NOT NULL,\n `template` integer DEFAULT false NOT NULL,\n `data_class` text NOT NULL,\n `last_seen` integer NOT NULL,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL,\n FOREIGN KEY (`destination_id`) REFERENCES `share_destination`(`id`) ON UPDATE no action ON DELETE no action\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_share_endpoint_dest` ON `share_endpoint` (`destination_id`);--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_share_endpoint` ON `share_endpoint` (`destination_id`,`method`,`url`);"},{tag:"0004_glorious_mindworm",sql:"CREATE TABLE `available_packs` (\n `id` text PRIMARY KEY NOT NULL,\n `namespace` text NOT NULL,\n `pack_id` text NOT NULL,\n `version` text NOT NULL,\n `name` text NOT NULL,\n `rules_json` text NOT NULL,\n `updated_at` integer NOT NULL\n);\n--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_available_packs_pack` ON `available_packs` (`namespace`,`pack_id`);"},{tag:"0005_fast_vindicator",sql:'PRAGMA foreign_keys=OFF;--\x3e statement-breakpoint\nCREATE TABLE `__new_mcp_trust_override` (\n `id` text PRIMARY KEY NOT NULL,\n `asset_id` text NOT NULL,\n `trust` text NOT NULL,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL\n);\n--\x3e statement-breakpoint\nINSERT INTO `__new_mcp_trust_override`("id", "asset_id", "trust", "created_at", "updated_at") SELECT "id", "asset_id", "trust", "created_at", "updated_at" FROM `mcp_trust_override`;--\x3e statement-breakpoint\nDROP TABLE `mcp_trust_override`;--\x3e statement-breakpoint\nALTER TABLE `__new_mcp_trust_override` RENAME TO `mcp_trust_override`;--\x3e statement-breakpoint\nPRAGMA foreign_keys=ON;--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_mcp_trust_override` ON `mcp_trust_override` (`asset_id`);'},{tag:"0006_magenta_flatman",sql:'CREATE TABLE `_pack_write_gate` (\n `id` integer PRIMARY KEY NOT NULL,\n `open` integer DEFAULT 0 NOT NULL,\n CONSTRAINT "ck_pack_write_gate_single_row" CHECK("_pack_write_gate"."id" = 1)\n);\n--\x3e statement-breakpoint\nALTER TABLE `available_packs` ADD `recorded_by` text;--\x3e statement-breakpoint\nINSERT OR IGNORE INTO _pack_write_gate (id, open) VALUES (1, 0);\n--\x3e statement-breakpoint\nCREATE TRIGGER trg_installed_packs_write_gate\nBEFORE UPDATE OF version, name, rules_json ON installed_packs\nWHEN (SELECT open FROM _pack_write_gate WHERE id = 1) IS NOT 1\nBEGIN SELECT RAISE(IGNORE); END;'},{tag:"0007_thick_stick",sql:"CREATE TABLE `finding_resolution` (\n `id` text PRIMARY KEY NOT NULL,\n `finding_key` text NOT NULL,\n `status` text NOT NULL,\n `method` text NOT NULL,\n `resolved_at` integer NOT NULL,\n `evidence` text,\n `created_at` integer NOT NULL\n);\n--\x3e statement-breakpoint\nCREATE INDEX `idx_finding_resolution_key` ON `finding_resolution` (`finding_key`);--\x3e statement-breakpoint\nALTER TABLE `findings` ADD `finding_key` text;--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_findings_key` ON `findings` (`finding_key`);"},{tag:"0008_freezing_selene",sql:"ALTER TABLE `findings` ADD `first_detected_at` integer;--\x3e statement-breakpoint\nUPDATE `findings` SET `first_detected_at` = (SELECT `occurred_at` FROM `events` WHERE `events`.`id` = `findings`.`event_id`) WHERE `first_detected_at` IS NULL;"},{tag:"0009_findings_path_expression_index",sql:"-- Custom migration: partial expression index for the resolver's per-path reads.\n--\n-- openAtRestKeysForPath / resolvedAtRestKeysForPath (and the scanner's tier-3\n-- open-key probe) filter at-rest events by\n-- e.kind = 'code_change' AND json_extract(e.metadata, '$.filePath') = :path\n-- once per changed/deleted file on every scan — previously a full events scan\n-- per file. json_extract is deterministic, so SQLite allows it in an index;\n-- the WHERE kind = 'code_change' keeps the index to exactly the rows those\n-- queries can match (in-flight events are never path-addressed).\nCREATE INDEX `idx_events_code_change_path` ON `events` (json_extract(`metadata`, '$.filePath')) WHERE `kind` = 'code_change';\n"},{tag:"0010_events_session_expression_index",sql:"-- Custom migration: partial expression index for session-scoped finding reads.\n--\n-- sessionFindingsCount, the session-scoped listGroupedFindings paths, and the\n-- insert-time session dedup all filter live-capture events by\n-- json_extract(e.metadata, '$.sessionId') = :sessionId\n-- — previously a full findings-join scan with a JSON parse per row. The\n-- IS NOT NULL predicate keeps the index to session-stamped events only (an\n-- equality probe implies non-null, so SQLite still uses it).\nCREATE INDEX `idx_events_session_id` ON `events` (json_extract(`metadata`, '$.sessionId')) WHERE json_extract(`metadata`, '$.sessionId') IS NOT NULL;\n"},{tag:"0011_egress_writer",sql:'-- Stable per-project reconcile key for egress call sites, plus a host-keyed\n-- egress decision override that survives destination pruning.\n--\n-- DROP INDEX IF EXISTS, not a bare DROP: the applier replays a pending\n-- migration\'s non-index statements verbatim, so a store that lost\n-- uq_share_call_site out of band would throw here — and on the plugin hook path\n-- that throw is swallowed fail-open, silently stopping capture.\n--\n-- Existing rows carry the old key\'s discriminator into project_key\n-- (\'legacy:\' || project), so the new unique index is a re-encoding of the old\n-- one and cannot collide on rows the old one allowed. Leaving them on the\n-- column default would collapse two projects\' identical file/line hits onto\n-- one key and abort the whole migration. Writer keys are \'git:\'/\'path:\'-\n-- prefixed, so a backfilled row never collides with a captured one either.\n--\n-- egress_decision_override.destination_id becomes nullable with ON DELETE SET\n-- NULL, which SQLite can only do by rebuilding the table. `host` is ADDed\n-- before the rebuild so the copy has a column to read and so the migration\n-- still presents two probeable columns to the applier\'s evidence check.\nALTER TABLE `share_call_site` ADD `project_key` text DEFAULT \'\' NOT NULL;--\x3e statement-breakpoint\nUPDATE `share_call_site` SET `project_key` = \'legacy:\' || `project`;--\x3e statement-breakpoint\nDROP INDEX IF EXISTS `uq_share_call_site`;--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_share_call_site` ON `share_call_site` (`endpoint_id`,`project_key`,`file`,`line`);--\x3e statement-breakpoint\nCREATE INDEX `idx_share_call_site_project` ON `share_call_site` (`project_key`,`endpoint_id`);--\x3e statement-breakpoint\nALTER TABLE `egress_decision_override` ADD `host` text;--\x3e statement-breakpoint\nPRAGMA foreign_keys=OFF;--\x3e statement-breakpoint\nCREATE TABLE `__new_egress_decision_override` (\n `id` text PRIMARY KEY NOT NULL,\n `destination_id` text,\n `host` text,\n `decision` text NOT NULL,\n `created_at` integer NOT NULL,\n `updated_at` integer NOT NULL,\n FOREIGN KEY (`destination_id`) REFERENCES `share_destination`(`id`) ON UPDATE no action ON DELETE set null\n);\n--\x3e statement-breakpoint\nINSERT INTO `__new_egress_decision_override`("id", "destination_id", "host", "decision", "created_at", "updated_at") SELECT "id", "destination_id", "host", "decision", "created_at", "updated_at" FROM `egress_decision_override`;--\x3e statement-breakpoint\nDROP TABLE `egress_decision_override`;--\x3e statement-breakpoint\nALTER TABLE `__new_egress_decision_override` RENAME TO `egress_decision_override`;--\x3e statement-breakpoint\nPRAGMA foreign_keys=ON;--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_egress_decision_override` ON `egress_decision_override` (`destination_id`);--\x3e statement-breakpoint\nCREATE UNIQUE INDEX `uq_egress_decision_override_host` ON `egress_decision_override` (`host`) WHERE `host` IS NOT NULL;\n'}],e=/^(\d+)([mh])$/;function f(a,b=Date.now()){let c=a.trim().toLowerCase();return"once"===c?{scope:"once",expiresAt:new Date(b+18e5).toISOString(),maxUses:1}:"permanent"===c?{scope:"permanent",expiresAt:null,maxUses:null}:{scope:"temporary",expiresAt:new Date(b+function(a){let b=e.exec(a.trim()),c=b?Number(b[1]):0;if(!b||c<=0)throw Error(`invalid duration '${a}' — use <n>m or <n>h (e.g. 30m, 1h, 24h)`);let d=c*("h"===b[2]?36e5:6e4);if(d>864e5)throw Error(`duration '${a}' exceeds the 24h maximum for --for — use --permanent (revocable any time) for an open-ended grant`);return d}(c)).toISOString(),maxUses:null}}function g(a){return new Date(a).getTime()}function h(a){return new Date(a).toISOString()}function i(a,b){return{input:a,output:b,cacheWrite5m:1.25*a,cacheWrite1h:2*a,cacheRead:.1*a,webSearch:.01}}let j={input:0,output:0,cacheWrite5m:0,cacheWrite1h:0,cacheRead:0,webSearch:0},k={"claude-fable-5":i(10,50),"claude-opus-4-8":i(5,25),"claude-opus-4-7":i(5,25),"claude-opus-4-6":i(5,25),"claude-opus-4-5":i(5,25),"claude-sonnet-5":i(3,15),"claude-sonnet-4-6":i(3,15),"claude-sonnet-4-5":i(3,15),"claude-haiku-4-5":i(1,5)},l={...Object.fromEntries(Object.entries(k).map(([a,b])=>[`anthropic/${a}`,b])),"ollama/*":j,"local/*":j},m={standard:1,batch:.5,priority:1.5},n=Object.keys(k);function o(a){let b=a.replace(/^(us|eu|apac|global)\./,"").replace(/^anthropic[./]/,"").replace(/@[\w-]+$/,"").replace(/-v\d+:\d+$/,"").replace(/:\d+$/,"").replace(/-\d{8}$/,"");for(let a of n)if(b===a)return a;return b}let p={normalizeModelId(a,b){let c=a.trim().toLowerCase();if("ollama"===c||"local"===c)return{provider:c,model:"*"};if("anthropic"===c||"bedrock"===c||"vertex"===c)return{provider:c,model:o(b)};let d=/^anthropic\/(.+)$/.exec(b);return d?.[1]!==void 0?{provider:c,model:o(d[1])}:{provider:c,model:b}},costFor({provider:a,model:b,usage:c}){var d;let e=this.normalizeModelId(a,b),f=l[`${e.provider}/${e.model}`];return void 0===f?null:((c.inputTokens??0)*f.input+(c.outputTokens??0)*f.output+(c.cacheWrite1hTokens??0)*f.cacheWrite1h+(c.cacheWrite5mTokens??0)*f.cacheWrite5m+(c.cacheReadTokens??0)*f.cacheRead)/1e6*(void 0===(d=c.serviceTier)?1:m[d]??1)+(c.webSearchRequests??0)*f.webSearch}};new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1});let q=a=>a??0;function r(a,b){let c=new Map;for(let{sessionId:d,attributes:e}of a){let a=e.provider??"unknown",f=e.model??"unknown",g=`${a} ${f}`,h=c.get(d);void 0===h&&(h=new Map,c.set(d,h));let i=h.get(g);void 0===i&&(i={provider:a,model:f,input:0,output:0,cacheCreation:0,cacheRead:0,costUsd:0,priced:!1},h.set(g,i)),i.input+=q(e.input_tokens),i.output+=q(e.output_tokens),i.cacheCreation+=q(e.cache_creation_input_tokens),i.cacheRead+=q(e.cache_read_input_tokens);let j=b.costFor({provider:a,model:f,usage:function(a){let b={inputTokens:q(a.input_tokens),outputTokens:q(a.output_tokens),cacheWrite1hTokens:q(a.ephemeral_1h_input_tokens),cacheWrite5mTokens:q(a.ephemeral_5m_input_tokens),cacheReadTokens:q(a.cache_read_input_tokens),webSearchRequests:q(a.web_search_requests)};return void 0!==a.service_tier&&(b.serviceTier=a.service_tier),b}(e)});null!==j&&(i.costUsd+=j,i.priced=!0)}let d=[];for(let[a,b]of c){let c=[],e=0,f=0,g=!1,h=!1;for(let d of b.values()){let b=d.input+d.output+d.cacheCreation+d.cacheRead;e+=b;let i=d.priced?d.costUsd:null;null===i?h=!0:(g=!0,f+=i),c.push({sessionId:a,model:d.model,provider:d.provider,inputTokens:d.input,outputTokens:d.output,cacheCreation:d.cacheCreation,cacheRead:d.cacheRead,totalTokens:b,estimatedCostUsd:i})}c.sort((a,b)=>b.totalTokens-a.totalTokens),d.push({sessionId:a,rollups:c,totalTokens:e,estimatedCostUsd:g?f:null,costIsPartial:h})}return d.sort((a,b)=>b.totalTokens-a.totalTokens),d}var s=c(96046),t=c(74516),u=c(24054);let v=s.k5(["pii","financial","secret","phi","code_context","code_flaw","custom","config"]).meta({id:"DetectionCategory"}),w=s.k5(["critical","high","medium","low"]).meta({id:"Severity"}),x=s.k5(["warn","redact","block","allow","log"]).meta({id:"ActionTaken"}),y=x.options,z=s.Ik({start:s.ai().int().nonnegative(),end:s.ai().int().nonnegative()}).meta({id:"Span"}),A=s.Ik({id:s.Os(),eventId:s.Os(),ruleId:s.Yj(),category:v,severity:w,span:z,maskedMatch:s.Yj(),actionTaken:x,confidence:s.ai().min(0).max(1)}).meta({id:"Finding"});A.meta({id:"DetectedFinding"});let B=s.k5(["blocked","redacted","warned","allowed","quarantined","monitored"]).meta({id:"FindingAction"}),C=s.k5(["claudecode","claudedesktop","cursor","copilot","chatgpt","api"]).meta({id:"FindingProvider"}),D=s.k5(["secret","pii","source_code","external_share","mcp_server","customer_data","financial","phi","custom"]).meta({id:"FindingCategory"});s.k5(["in-flight","at-rest"]).meta({id:"FindingOrigin"});let E=s.k5(["open","handled","resolved","dismissed"]).meta({id:"FindingStatus"}),F=s.k5(["enforced-in-flight","fixed-at-source","exception","acknowledged","false-positive","redetected"]).meta({id:"ResolutionMethod"}),G=s.Ik({maskedValue:s.Yj(),contextPrefix:s.Yj()}).meta({id:"FindingMatch"}),H=s.Ik({id:s.Yj(),name:s.Yj().nullable()}).meta({id:"FindingDetectionRef"}),I=s.Ik({id:s.Yj(),name:s.Yj()}).meta({id:"FindingPolicyRef"}),J=s.Ik({id:s.Yj(),provider:C,repo:s.Yj(),file:s.Yj(),toolName:s.Yj().optional(),action:B,detectedAt:t.w$(),confidence:s.ai().min(0).max(1),status:E.optional()}).meta({id:"FindingInstance"}),K=s.Ik({id:s.Yj(),category:D,subtype:s.Yj(),severity:w,match:G,detection:H,policy:I,instanceCount:s.ai().int().nonnegative(),providers:s.YO(C),aggregateAction:B.nullable(),latestDetectedAt:t.w$(),instances:s.YO(J),status:E.optional()}).meta({id:"FindingGroup"});s.Ik({findings:s.ai().int().nonnegative(),groups:s.ai().int().nonnegative(),bySeverity:s.Ik({critical:s.ai().int().nonnegative(),high:s.ai().int().nonnegative(),medium:s.ai().int().nonnegative(),low:s.ai().int().nonnegative()})}).meta({id:"FindingStats"});let L=s.Ik({value:s.Yj(),count:s.ai().int().nonnegative()}).meta({id:"FindingFacetItem"}),M=s.Ik({severity:s.YO(L),subtype:s.YO(L),provider:s.YO(L),action:s.YO(L)}).meta({id:"FindingFacets"}),N=50;s.Ik({severity:s.YO(w).optional(),subtype:s.YO(s.Yj()).optional(),provider:s.YO(C).optional(),action:s.YO(B).optional(),q:s.Yj().optional(),sessionId:s.Yj().optional(),groupBy:s.eu("type").optional(),limit:u.ai().int().min(1).max(100).optional(),cursor:s.Yj().optional()}),s.Ik({totals:s.Ik({findings:s.ai().int().nonnegative(),groups:s.ai().int().nonnegative()}),facets:M,items:s.YO(K),nextCursor:s.Yj().nullable(),sessionFirings:s.g1(s.Yj(),s.ai().int().nonnegative()).optional()}).meta({id:"ListGroupedFindingsResponse"}),s.Ik({action:B.exclude(["quarantined"]),instanceId:s.Yj().optional()}).meta({id:"ApplyFindingActionRequest"}),K.meta({id:"ApplyFindingActionResponse"}),s.Ik({severity:s.YO(w).optional(),subtype:s.YO(s.Yj()).optional(),provider:s.YO(C).optional(),action:s.YO(B).optional(),q:s.Yj().optional(),format:s.k5(["csv","json"]).optional()}),J.extend({groupId:s.Yj(),category:D,subtype:s.Yj(),severity:w,match:G,detection:H,policy:I}).meta({id:"FindingInstanceDetail"});let O=s.k5(["claudecode","cursor","copilot","codex","windsurf","claudedesktop","chatgpt","api"]).meta({id:"Harness"}),P={"claude-code":"claudecode","claude-desktop":"claudedesktop","github-copilot":"copilot",cursor:"cursor",chatgpt:"chatgpt"},Q=s.k5(["host","harness","user","skill","hook","mcp_server","config_file"]).meta({id:"InventoryObjectType"}),R=s.k5(["session","run","tool_call","llm_call","source_lookup","prompt","response","code_change","tool_use","config_scan"]).meta({id:"AuditEventType"}),S=s.g1(s.Yj(),s.L5());s.Ik({host_name:s.Yj().optional(),os:s.Yj().optional(),os_version:s.Yj().optional(),arch:s.Yj().optional()}).catchall(s.L5()),s.Ik({harness_version:s.Yj().optional(),interface:s.Yj().optional()}).catchall(s.L5()),s.Ik({display_name:s.Yj().optional(),email:s.Yj().optional()}).catchall(s.L5()),s.Ik({source:s.Yj().optional(),version:s.Yj().optional(),description:s.Yj().optional(),updated_at:s.Yj().optional(),scope:s.Yj().optional(),plugin_name:s.Yj().optional()}).catchall(s.L5()),s.Ik({event:s.Yj().optional(),matcher:s.Yj().optional(),command:s.Yj().optional(),scope:s.Yj().optional(),plugin_name:s.Yj().optional(),timeout:s.ai().optional()}).catchall(s.L5()),s.Ik({scope:s.Yj().optional(),transport:s.Yj().optional(),command:s.Yj().optional(),url:s.Yj().optional(),env_keys:s.YO(s.Yj()).optional(),plugin_name:s.Yj().optional(),marketplace:s.Yj().optional(),project:s.Yj().optional()}).catchall(s.L5()),s.Ik({kind:s.Yj().optional(),detail:s.Yj().optional(),scope:s.Yj().optional(),updated_at:s.Yj().optional(),entry_count:s.ai().optional()}).catchall(s.L5());let T=s.Ik({model:s.Yj().optional(),provider:s.Yj().optional(),input_tokens:s.ai().int().nonnegative().optional(),output_tokens:s.ai().int().nonnegative().optional(),cache_creation_input_tokens:s.ai().int().nonnegative().optional(),cache_read_input_tokens:s.ai().int().nonnegative().optional(),ephemeral_1h_input_tokens:s.ai().int().nonnegative().optional(),ephemeral_5m_input_tokens:s.ai().int().nonnegative().optional(),web_search_requests:s.ai().int().nonnegative().optional(),web_fetch_requests:s.ai().int().nonnegative().optional(),service_tier:s.Yj().optional(),stop_reason:s.Yj().optional(),message_id:s.Yj().optional(),uuid:s.Yj().optional(),parent_uuid:s.Yj().optional(),run_key:s.Yj().optional()}).catchall(s.L5());s.Ik({sessionId:s.Yj().min(1),messageId:s.Yj().min(1),parentId:s.Yj().min(1),rootSessionId:s.Yj().min(1),startedAt:t.w$(),attributes:T});let U=s.Ik({tool_name:s.Yj().optional(),tool_use_id:s.Yj().optional(),target:s.Yj().optional(),is_error:s.zM().optional(),input_size:s.ai().int().nonnegative().optional(),output_size:s.ai().int().nonnegative().optional(),uuid:s.Yj().optional(),parent_uuid:s.Yj().optional(),run_key:s.Yj().optional()}).catchall(s.L5()),V=s.Ik({ruleId:s.Yj().min(1),ruleName:s.Yj(),ruleVersion:s.Yj().min(1),category:v,severity:w,span:z,maskedMatch:s.Yj(),actionTaken:x,confidence:s.ai().min(0).max(1)});s.Ik({sessionId:s.Yj().min(1),toolUseId:s.Yj().min(1),parentId:s.Yj().min(1),rootSessionId:s.Yj().min(1),startedAt:t.w$(),attributes:U,inspections:s.YO(V).default([])});let W=s.Ik({objectType:Q,identityKey:s.Yj().min(1),location:s.Yj().optional(),title:s.Yj().optional(),hostId:s.Yj().optional(),attributes:S.default({})}).meta({id:"InventoryInput"}),X=s.Ik({url:s.Yj().min(1),name:s.Yj().optional(),attributes:S.default({})}).meta({id:"SourceProjectInput"}),Y=s.Ik({id:s.Yj().min(1),eventType:R,startedAt:t.w$(),endedAt:t.w$().optional(),parentId:s.Yj().optional(),rootSessionId:s.Yj().optional(),hostId:s.Yj().optional(),harnessId:s.Yj().optional(),sourceProjectId:s.Yj().optional(),severity:w.optional(),priority:s.Yj().optional(),content:s.Yj().optional(),contentHash:s.Yj().optional(),attributes:S.optional()}).meta({id:"AuditEventInput"});s.Ik({class:s.Yj().min(1),label:s.Yj().optional(),attributes:S.optional()});let Z=s.Ik({ruleId:s.Yj().min(1),version:s.Yj().min(1),name:s.Yj(),category:v,severity:w,definition:s.Yj()});s.Ik({id:s.Yj().min(1),auditEventId:s.Yj().min(1),inspectionDefinitionId:s.Yj().min(1),classifiedDataId:s.Yj().optional(),span:z,maskedMatch:s.Yj(),actionTaken:x,confidence:s.ai().min(0).max(1)}),s.Ik({host:W.optional(),harness:W.optional(),project:X.optional()}).meta({id:"InventoryContext"}),s.Ik({hostId:s.Yj().optional(),harnessId:s.Yj().optional(),accountId:s.Yj().optional(),sourceProjectId:s.Yj().optional()}).meta({id:"ResolvedInventory"}),s.Ik({hosts:s.YO(s.Yj()),harnesses:s.YO(s.Yj()),osVersions:s.YO(s.Yj()),projects:s.YO(s.Yj())}).meta({id:"InventoryFacets"});let $=s.Ik({sessionId:s.Yj(),model:s.Yj(),provider:s.Yj(),inputTokens:s.ai().int().nonnegative(),outputTokens:s.ai().int().nonnegative(),cacheCreation:s.ai().int().nonnegative(),cacheRead:s.ai().int().nonnegative(),totalTokens:s.ai().int().nonnegative(),estimatedCostUsd:s.ai().nullable()}).meta({id:"TokenRollup"});s.Ik({sessionId:s.Yj(),rollups:s.YO($),totalTokens:s.ai().int().nonnegative(),estimatedCostUsd:s.ai().nullable(),costIsPartial:s.zM()});let _=s.Ik({provider:s.Yj(),model:s.Yj(),inputTokens:s.ai().int().nonnegative(),outputTokens:s.ai().int().nonnegative(),cacheTokens:s.ai().int().nonnegative(),totalTokens:s.ai().int().nonnegative(),estimatedCostUsd:s.ai().nullable()});function aa(a){return JSON.stringify(a)}s.Ik({models:s.YO(_),sessionCount:s.ai().int().nonnegative(),totalTokens:s.ai().int().nonnegative(),estimatedCostUsd:s.ai(),costIsPartial:s.zM()});let ab=s.k5(["active","completed","interrupted","error"]),ac=s.k5(["session","prompt","response","tool","hook","detection","share","permission","commit","error","active"]),ad=s.k5(["detections","shares","inventory"]),ae=s.Ik({id:s.Yj(),occurredAt:t.w$(),kind:ac,title:s.Yj(),detail:s.Yj(),tool:s.Yj().nullable(),severity:w.nullable(),link:ad.nullable(),targetId:s.Yj().nullable(),internal:s.zM(),flagged:s.zM()}).meta({id:"ActivityAuditEvent"}),af=s.Ik({id:s.Yj(),harness:O,title:s.Yj(),project:s.Yj(),repo:s.Yj(),branches:s.YO(s.Yj()),startedAt:t.w$(),endedAt:t.w$().nullable(),status:ab,turns:s.ai().int().nonnegative(),findings:s.ai().int().nonnegative(),shares:s.ai().int().nonnegative()}).meta({id:"ActivitySessionSummary"});af.extend({host:s.Yj(),cwd:s.Yj(),models:s.YO(s.Yj()),version:s.Yj(),tokens:$,tools:s.g1(s.Yj(),s.ai().int().nonnegative()),files:s.YO(s.Yj()),commits:s.ai().int().nonnegative(),events:s.YO(ae)}).meta({id:"ActivitySession"}),s.Ik({tz:s.Yj().optional()});let ag=s.Ik({sessionsToday:s.ai().int().nonnegative(),liveNow:s.ai().int().nonnegative(),toolCallsToday:s.ai().int().nonnegative(),findingsToday:s.ai().int().nonnegative(),egressToday:s.ai().int().nonnegative()}).meta({id:"GetActivityStatsResponse"});s.Ik({q:s.Yj().optional(),harness:s.YO(O).optional(),from:s.KC([t.p6(),t.w$()]).optional(),to:s.KC([t.p6(),t.w$()]).optional(),excludeEmpty:s.uE().optional(),limit:u.ai().int().min(1).max(100).default(50),cursor:s.Yj().optional()});let ah=s.Ik({items:s.YO(af),nextCursor:s.Yj().nullable(),emptyCount:s.ai().int().nonnegative()}).meta({id:"ListActivitySessionsResponse"});s.Ik({limit:u.ai().int().min(1).max(500).default(100),cursor:s.Yj().optional(),order:s.k5(["asc","desc"]).default("asc")}),s.Ik({items:s.YO(ae),nextCursor:s.Yj().nullable()}).meta({id:"ListSessionEventsResponse"}),s.Ik({format:s.k5(["ndjson","json"]).default("ndjson")}),s.Ik({format:s.k5(["csv","json"]).default("csv"),q:s.Yj().optional(),harness:s.YO(O).optional(),from:s.KC([t.p6(),t.w$()]).optional(),to:s.KC([t.p6(),t.w$()]).optional()}),s.Ik({stats:ag,sessions:ah}).meta({id:"ActivityOverviewResponse"});let ai=s.k5(["prompt","response","code_change","tool_use"]).meta({id:"EventKind"}),aj=s.k5(["claude-code","claude-desktop","cursor","chatgpt","github-copilot","cli","unknown"]).meta({id:"SourceTool"}),ak=s.Ik({sessionId:s.Yj().optional(),repo:s.Yj().optional(),filePath:s.Yj().optional(),toolName:s.Yj().optional(),gitignored:s.zM().optional(),wholeFile:s.zM().optional(),model:s.Yj().optional(),turnIndex:s.ai().int().nonnegative().optional(),correlationId:s.uR().optional(),traceId:s.Yj().regex(/^[0-9a-f]{32}$/).optional(),exceptionIds:s.YO(s.Os()).optional()}).meta({id:"EventMetadata"}),al=s.Ik({id:s.Os(),sourceTool:aj,kind:ai,occurredAt:t.w$(),contentHash:s.Yj(),content:s.Yj(),metadata:ak.optional()}).meta({id:"Event"}),am=al.meta({id:"IngestEvent"});s.Ik({events:s.YO(am).min(1).max(100),dedupe:s.eu("content-hash").optional()}).meta({id:"IngestBatch"});let an=s.k5(["project","skill","mcp","hook","config"]).meta({id:"AssetType"}),ao=s.k5(["open","approved","blocked"]).meta({id:"AccessLevel"}),ap=s.k5(["source","public-dep","vendored","config","data","docs","generated"]).meta({id:"Origin"}),aq=s.k5(["known-good","risky","unapproved"]).meta({id:"TrustLevel"}),ar=s.k5(["update","stale","conflict","unknown","change","untracked","risk","findings"]).meta({id:"Flag"}),as=s.k5(["public","private"]).meta({id:"Visibility"}),at=s.k5(["block","redact","warn"]).meta({id:"HarnessEventKind"}),au=s.k5(["claudecode","cursor","codex"]).meta({id:"HarnessId"}),av=s.Ik({open:s.ai().int().nonnegative(),approved:s.ai().int().nonnegative(),blocked:s.ai().int().nonnegative(),total:s.ai().int().nonnegative()}).meta({id:"AccessCounts"}),aw=s.Ik({id:s.Yj(),type:an,name:s.Yj(),sub:s.Yj(),flags:s.YO(ar),trust:aq.optional()}).meta({id:"AssetSummary"}),ax=s.Ik({id:s.Yj(),name:s.Yj(),repo:s.Yj(),visibility:as,language:s.Yj(),policyDefault:ao,updatedAt:t.w$(),accessCounts:av,findingsCount:s.ai().int().nonnegative()}).meta({id:"ProjectSummary"}),ay=s.Ik({type:an,assets:s.YO(aw)}),az=s.Ik({id:au,label:s.Yj(),kind:s.Yj(),version:s.Yj(),sessions:s.ai().int().nonnegative(),assetCount:s.ai().int().nonnegative(),flagCount:s.ai().int().nonnegative(),projects:s.YO(ax),categories:s.YO(ay)}).meta({id:"HarnessSummary"});s.Ik({items:s.YO(az)}).meta({id:"ListHarnessesResponse"});let aA=s.Ik({type:an,total:s.ai().int().nonnegative(),trustRollup:s.Ik({"known-good":s.ai().int().nonnegative(),risky:s.ai().int().nonnegative(),unapproved:s.ai().int().nonnegative()}).partial().strict().optional(),flagRollup:s.Ik({update:s.ai().int().nonnegative(),stale:s.ai().int().nonnegative(),conflict:s.ai().int().nonnegative(),unknown:s.ai().int().nonnegative(),change:s.ai().int().nonnegative(),untracked:s.ai().int().nonnegative(),risk:s.ai().int().nonnegative(),findings:s.ai().int().nonnegative()}).partial().strict(),items:s.YO(aw)}).meta({id:"AssetGroup"});s.Ik({groups:s.YO(aA)}).meta({id:"ListAssetsResponse"});let aB=s.Ik({name:s.Yj(),signature:s.Yj(),description:s.Yj(),write:s.zM(),risk:s.Yj().nullable()}).meta({id:"McpTool"}),aC=s.Ik({id:s.Yj(),title:s.Yj(),note:s.Yj()});aw.extend({description:s.Yj().nullable(),trust:aq.nullable(),meta:s.g1(s.Yj(),s.L5()),finding:aC.nullable(),tools:s.YO(aB).optional()}).meta({id:"AssetDetail"}),s.Ik({items:s.YO(ax)}).meta({id:"ListProjectsResponse"}),s.Ik({attention:s.ai().int().nonnegative(),byType:s.Ik({project:s.ai().int().nonnegative(),skill:s.ai().int().nonnegative(),mcp:s.ai().int().nonnegative(),hook:s.ai().int().nonnegative(),config:s.ai().int().nonnegative()}),harnesses:s.ai().int().nonnegative(),mcpTrust:s.Ik({"known-good":s.ai().int().nonnegative(),risky:s.ai().int().nonnegative(),unapproved:s.ai().int().nonnegative()})}).meta({id:"InventoryStats"});let aD=s.Ik({path:s.Yj(),name:s.Yj(),origin:ap,access:ao,isCustom:s.zM(),findings:s.ai().int().nonnegative(),blockedAt:t.w$().nullable().optional(),note:s.Yj().nullable().optional()}).meta({id:"FileSummary"}),aE=s.Ik({name:s.Yj(),path:s.Yj(),accessCounts:av}).meta({id:"FolderSummary"});s.Ik({project:s.Ik({id:s.Yj(),repo:s.Yj(),visibility:as}),path:s.Yj(),folders:s.YO(aE).optional(),files:s.YO(aD)}).meta({id:"ProjectTreeResponse"}),aD.extend({project:s.Ik({repo:s.Yj(),visibility:as,language:s.Yj(),policyDefault:ao,updatedAt:t.w$()}),findingsRefs:s.YO(s.Ik({id:s.Yj(),title:s.Yj()}))}).meta({id:"FileDetail"}),s.Ik({path:s.Yj(),access:ao}).meta({id:"SetFileAccessBody"}),s.Ik({file:aD,accessCounts:av}).meta({id:"SetFileAccessResponse"}),s.Ik({trust:aq}).meta({id:"SetMcpTrustBody"});let aF=s.Ik({kind:at,title:s.Yj(),detail:s.Yj(),occurredAt:t.w$(),findingId:s.Yj().nullable().optional()}).meta({id:"HarnessEventItem"});s.Ik({counts:s.Ik({block:s.ai().int().nonnegative(),redact:s.ai().int().nonnegative(),warn:s.ai().int().nonnegative()}),items:s.YO(aF)}).meta({id:"HarnessEventsResponse"}),s.Ik({jobId:s.Yj(),startedAt:t.w$()}).meta({id:"RescanResponse"}),s.Ik({repo:s.Yj()}).meta({id:"ConnectProjectBody"}),s.Ik({type:s.YO(an).optional(),q:s.Yj().optional()}),s.Ik({path:s.Yj().optional(),q:s.Yj().optional(),filter:s.k5(["blocked"]).optional()}),s.Ik({path:s.Yj()}),s.Ik({limit:u.ai().int().min(1).max(50).default(7)});let aG=s.k5(["once","temporary","permanent"]),aH=s.Ik({repo:s.Yj().optional(),sourceTool:s.Yj().optional(),provider:s.Yj().optional()}).strict(),aI=s.Ik({id:s.Os(),ruleId:s.Yj(),category:v,valueFingerprint:s.Yj().regex(/^[0-9a-f]{64}$/),keyVersion:s.ai().int().positive(),maskedValue:s.Yj(),scope:aG,expiresAt:t.w$().nullable(),maxUses:s.ai().int().positive().nullable(),useCount:s.ai().int().nonnegative(),lastUsedAt:t.w$().nullable(),justification:s.Yj().min(1),conditions:aH.nullable(),createdBy:s.Yj(),createdVia:s.k5(["cli-approve","cli-add","web-approve","web-add","api","setup-triage"]),createdAt:t.w$(),updatedAt:t.w$(),revokedAt:t.w$().nullable(),revokedBy:s.Yj().nullable(),revokeReason:s.Yj().nullable()}),aJ=aI.pick({id:!0,ruleId:!0,valueFingerprint:!0,keyVersion:!0,expiresAt:!0,maxUses:!0,useCount:!0,conditions:!0});s.k5(["keyword","regex","validator"]).meta({id:"MatcherType"}),s.k5(["safe","quarantined"]).meta({id:"RuleProbeVerdict"});let aK=s.Ik({type:s.eu("keyword"),keywords:s.YO(s.Yj().min(1)).min(1),caseSensitive:s.zM().default(!1)}),aL=s.Ik({type:s.eu("regex"),pattern:s.Yj().min(1).max(2e3),flags:s.Yj().default("gi"),captureGroup:s.ai().int().nonnegative().optional()}).refine(a=>(function(a,b){try{return new RegExp(a,b),!0}catch{return!1}})(a.pattern,a.flags),{message:"pattern/flags do not form a valid JavaScript regular expression",path:["pattern"]}).refine(a=>void 0!==a.captureGroup||!function(a,b){try{let c=new RegExp(a,b.replace(/[gy]/g,""));return c.exec("")?.[0].length===0}catch{return!1}}(a.pattern,a.flags),{message:'a whole-match regex that can match the empty string (e.g. "\\d*", "a?", "(?:)") can hang the matcher — scope the quantifier to a captureGroup, or require at least one character',path:["pattern"]}),aM=s.Ik({type:s.eu("validator"),name:s.k5(["luhn","entropy","ssn-checksum"]),config:s.g1(s.Yj(),s.L5()).optional()}),aN=s.gM("type",[aK,aL,aM]).meta({id:"Matcher"}),aO=s.Ik({extensions:s.YO(s.Yj().regex(/^\.[A-Za-z0-9]+$/)).min(1)}).meta({id:"AppliesTo"}),aP=s.KC([s.Yj(),s.Ik({name:s.Yj(),config:s.g1(s.Yj(),s.L5()).optional()})]).meta({id:"PostValidatorRef"}),aQ=s.Ik({categories:s.YO(v).min(1).optional(),ruleIds:s.YO(s.Yj().min(1)).min(1).optional(),labels:s.YO(s.Yj().min(1)).min(1).optional(),windowChars:s.ai().int().positive().default(160),confidenceBoost:s.ai().min(0).max(.3).optional()}).refine(a=>(a.categories?.length??0)+(a.ruleIds?.length??0)+(a.labels?.length??0)>0,{message:"requiresNearby needs at least one of categories, ruleIds, or labels"}).meta({id:"RequiresNearby"}),aR=s.Ik({label:s.Yj(),text:s.Yj().max(5e4),shouldMatch:s.zM(),filePath:s.Yj().optional(),expectedSpans:s.YO(s.Ik({start:s.ai(),end:s.ai()})).optional()}).meta({id:"RuleFixture"}),aS=s.Ik({specVersion:s.eu(1),id:s.Yj().regex(/^[a-z][a-z0-9-]*\/[a-z][a-z0-9-]*$/),name:s.Yj(),category:v,severity:w,matcher:aN,appliesTo:aO.optional(),postValidators:s.YO(aP).optional(),requiresNearby:aQ.optional(),examples:s.YO(s.Yj()).optional()}).meta({id:"Rule"}),aT=s.Ik({name:s.Yj(),email:s.Rp().optional(),url:s.OZ().optional()}).meta({id:"Author"});s.Ik({specVersion:s.eu(1),id:s.Yj(),name:s.Yj(),version:s.Yj(),rules:s.YO(s.Yj()),description:s.Yj().optional(),author:aT.optional(),license:s.Yj().optional(),sourceUrl:s.OZ().optional()}).meta({id:"PackManifest"});let aU=s.k5(["global","repo","user"]).meta({id:"PolicyScope"}),aV=s.KC([s.Ik({ruleId:s.Yj()}),s.Ik({category:v})]).meta({id:"PolicyTarget"}),aW=s.Ik({id:s.Os(),scope:aU,target:aV,action:x,enabled:s.zM().default(!0),customKeywords:s.YO(s.Yj()).optional(),name:s.Yj().optional()}).meta({id:"Policy"});s.Ik({version:s.Yj(),policies:s.YO(aW),rules:s.YO(aS).optional(),rulesComplete:s.zM().optional(),exceptions:s.YO(aJ).optional(),customKeywords:s.YO(s.Yj()),fetchedAt:t.w$()}).meta({id:"PolicyBundle"});let aX=["config"],aY=v.options.filter(a=>!aX.includes(a)),aZ={secret:"critical",financial:"critical",code_flaw:"critical",pii:"high",phi:"high",custom:"high",code_context:"low",config:"low"},a$=s.k5(["builtin","custom"]).meta({id:"PolicyKind"}),a_=["monitor","warn","redact","block"],a0=s.k5(a_).meta({id:"BuiltinPolicyId"}),a1=a_,a2={monitor:{name:"Monitor",action:"log",description:"Log every match for audit. The request is allowed through untouched."},warn:{name:"Warn",action:"warn",description:"Allow the request, but warn the user inline before it is sent."},redact:{name:"Redact",action:"redact",description:"Automatically strip the matched value from the request, then continue."},block:{name:"Block",action:"block",description:"Refuse the request entirely whenever any rule in this detection matches."}},a3=Object.fromEntries(v.options.map(a=>[a,a2[function(a){if(aX.includes(a))return"monitor";let b=aZ[a];return"critical"===b||"high"===b?"warn":"monitor"}(a)].action])),a4=Object.fromEntries(a_.map(a=>[a,{id:a,...a2[a]}])),a5="monitor";function a6(a){let b=a0.safeParse(a??a5);return a4[b.success?b.data:a5].action}let a7=s.Ik({id:s.Yj(),name:s.Yj(),ruleCount:s.ai().int().nonnegative(),enabled:s.zM()}).meta({id:"UsedByItem"}),a8=s.Ik({id:s.Yj(),kind:a$,name:s.Yj(),enabled:s.zM(),usedByCount:s.ai().int().nonnegative()}).meta({id:"PolicyListItem"});s.Ik({specVersion:s.eu(1),id:s.Yj(),kind:a$,name:s.Yj(),enabled:s.zM(),description:s.Yj(),usedBy:s.YO(a7)}).meta({id:"PolicyDetail"}),s.Ik({policies:s.ai().int().nonnegative(),builtin:s.ai().int().nonnegative(),custom:s.ai().int().nonnegative(),detectionsGoverned:s.ai().int().nonnegative()}).meta({id:"PolicyStatsResponse"}),s.Ik({cursor:s.Yj().optional(),limit:u.ai().int().min(1).max(200).default(50),sourceTool:s.Yj().optional(),kind:s.Yj().optional(),from:t.w$().optional(),to:t.w$().optional()}),s.Ik({items:s.YO(al),nextCursor:s.Yj().nullable()}).meta({id:"ListEventsResponse"}),s.Ik({accepted:s.ai().int().nonnegative(),duplicates:s.ai().int().nonnegative()}).meta({id:"IngestResponse"}),s.Ik({cursor:s.Yj().optional(),limit:u.ai().int().min(1).max(200).default(50),severity:s.Yj().optional(),category:s.Yj().optional(),eventId:s.Os().optional()}),s.Ik({items:s.YO(A),nextCursor:s.Yj().nullable()}).meta({id:"ListFindingsResponse"}),s.Ik({items:s.YO(a8)}).meta({id:"ListPoliciesResponse"}),aW.omit({id:!0}).meta({id:"CreatePolicyRequest"}),aW.partial().required({id:!0}).meta({id:"UpdatePolicyRequest"}),s.Ik({accepted:s.zM()}).meta({id:"RecordAuditEventResponse"}),s.Ik({error:s.Ik({code:s.Yj(),message:s.Yj(),details:s.L5().optional()})}).meta({id:"ErrorResponse"});let a9=s.k5(["user","project","local","plugin"]),ba=s.Ik({name:s.Yj().min(1),source:s.Yj().min(1),scope:a9,pluginName:s.Yj().optional(),version:s.Yj().optional(),description:s.Yj().optional(),updatedAt:t.w$().optional(),location:s.Yj().optional()}),bb=s.Ik({event:s.Yj().min(1),matcher:s.Yj().optional(),command:s.Yj().min(1),timeout:s.ai().optional(),scope:a9,pluginName:s.Yj().optional(),location:s.Yj().optional()}),bc=s.Ik({name:s.Yj().min(1),scope:a9,pluginName:s.Yj().optional(),marketplace:s.Yj().optional(),project:s.Yj().optional(),transport:s.Yj().min(1),command:s.Yj().optional(),url:s.Yj().optional(),envKeys:s.YO(s.Yj()).optional(),location:s.Yj().optional()}),bd=s.Ik({name:s.Yj().min(1),path:s.Yj().min(1),scope:a9,kind:s.Yj().min(1),detail:s.Yj().optional(),entryCount:s.ai().optional(),updatedAt:t.w$().optional()});s.Ik({scannedAt:t.w$(),skills:s.YO(ba),hooks:s.YO(bb),mcpServers:s.YO(bc),configFiles:s.YO(bd),errors:s.YO(s.Ik({source:s.Yj(),reason:s.Yj()}))});let be=s.Ik({ruleId:s.Yj().min(1),version:s.Yj().min(1),span:z,maskedMatch:s.Yj(),actionTaken:x,confidence:s.ai().min(0).max(1)});s.Ik({items:s.YO(W),scanEvent:Y,definitions:s.YO(Z).optional(),findings:s.YO(be).optional()});let bf=s.Yj().regex(/^[a-z][a-z0-9-]*$/),bg=s.Yj().regex(/^[a-z][a-z0-9-]*$/),bh=s.Yj().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?$/),bi=s.k5(["labs","user","org"]),bj=s.k5(["library"]).meta({id:"OriginEnum"}),bk=s.k5(["all","library","custom","customized","updates"]),bl=s.k5(["new","imported","update"]).meta({id:"LibraryStateEnum"}),bm=s.Ik({all:s.ai().int().nonnegative(),library:s.ai().int().nonnegative(),custom:s.ai().int().nonnegative(),customized:s.ai().int().nonnegative(),updates:s.ai().int().nonnegative()}).meta({id:"DetectionCounts"}),bn=s.Ik({id:s.Yj(),name:s.Yj(),version:bh,enabled:s.zM(),origin:bj,publisher:bf.optional(),publisherKind:bi.optional(),ruleCount:s.ai().int().nonnegative(),namespace:bf,packId:bg,policyId:s.Yj().optional(),latestVersion:bh.optional()}).meta({id:"DetectionListItem"});s.Ik({counts:bm,items:s.YO(bn)}).meta({id:"ListDetectionsResponse"}),s.Ik({filter:bk.optional().default("all"),q:s.Yj().optional()}),s.Ik({detections:s.ai().int().nonnegative(),rules:s.ai().int().nonnegative(),active:s.ai().int().nonnegative(),findingsLast30d:s.ai().int().nonnegative()}).meta({id:"DetectionStats"});let bo=s.Ik({id:s.Yj(),name:s.Yj(),category:v,severity:w,matcher:aN}).meta({id:"DetectionRule"}),bp=s.Ik({available:s.zM(),latestVersion:bh,latestRuleCount:s.ai().int().nonnegative().optional()}).nullable().meta({id:"DetectionUpdate"});s.Ik({id:s.Yj(),name:s.Yj(),version:bh,enabled:s.zM(),origin:bj,publisher:bf.optional(),publisherKind:bi.optional(),ruleCount:s.ai().int().nonnegative(),namespace:bf,packId:bg,description:s.Yj().optional(),editedAt:t.w$(),findingsLast30d:s.ai().int().nonnegative(),latestVersion:bh.nullable().optional(),update:bp,rules:s.YO(bo),modified:s.zM(),policyId:s.Yj().optional()}).meta({id:"DetectionDetail"});let bq=s.Ik({id:s.Yj(),name:s.Yj(),publisher:bf,publisherKind:bi.optional(),category:v.optional(),version:bh,ruleCount:s.ai().int().nonnegative(),description:s.Yj().optional(),updatedAt:t.w$(),state:bl,importedAs:s.Yj().nullable()}).meta({id:"LibraryItem"});function br(a){return{id:`${a.namespace}/${a.packId}`,name:a.name,version:a.version,enabled:a.enabled,origin:"library",namespace:a.namespace,packId:a.packId,ruleCount:a.ruleCount,...null!=a.policyId?{policyId:a.policyId}:{},...null!=a.latestVersion?{latestVersion:a.latestVersion}:{}}}function bs(a,b,c){let d=a.rules.flatMap(a=>{let b=aN.safeParse(a.matcher);return b.success?[{id:a.id,name:a.name,category:a.category,severity:a.severity,matcher:b.data}]:[]});return{id:`${a.namespace}/${a.packId}`,name:a.name,version:a.version,enabled:a.enabled,origin:"library",namespace:a.namespace,packId:a.packId,ruleCount:a.rules.length,editedAt:a.updatedAt.toISOString(),findingsLast30d:b,latestVersion:c?c.latestVersion:null,update:c,rules:d,modified:!1,...null!=a.policyId?{policyId:a.policyId}:{}}}function bt(a){let b=a.indexOf("/");return b<1||b===a.length-1?null:{namespace:a.slice(0,b),packId:a.slice(b+1)}}function bu(a,b){let c=a.filter(a=>null!=a.latestVersion),d={all:a.length,library:a.length,custom:0,customized:0,updates:c.length},e=b.filter,f="custom"===e||"customized"===e?[]:"updates"===e?[...c]:[...a];if(b.q){let a=b.q.toLowerCase();f=f.filter(b=>b.name.toLowerCase().includes(a)||b.packId.toLowerCase().includes(a)||b.namespace.toLowerCase().includes(a))}return f.sort((a,b)=>a.enabled!==b.enabled?a.enabled?-1:1:a.name.localeCompare(b.name)),{counts:d,items:f.map(br)}}s.Ik({categories:s.YO(v),items:s.YO(bq)}).meta({id:"ListLibraryResponse"}),s.Ik({libraryId:s.Yj().refine(a=>/^[^/]+\/[^/]+$/.test(a),{message:"libraryId must be in namespace/packId format"})}).meta({id:"ImportDetectionRequest"});let bv=s.k5(["provider","internal","external","ip"]).meta({id:"DestinationKind"}),bw=s.k5(["https","http","sftp","grpc","smtp","ws","wss"]).meta({id:"Transport"}),bx=s.k5(["secrets","pii","customer","source","telemetry","logs","metrics","none"]).meta({id:"DataClass"}),by=bx.options,bz=s.k5(["recognized","internal","unverified","ip"]).meta({id:"ShareTrustLevel"}),bA=s.k5(["allow","block"]).meta({id:"EgressDecision"}),bB=s.k5(["allowed","blocked","review"]).meta({id:"EgressStatus"}),bC=s.k5(["raw_ip","unverified_domain","plaintext_transport"]).meta({id:"ReviewReason"}),bD=s.k5(["GET","POST","PUT","DELETE","SDK","REF"]).meta({id:"HttpMethod"}),bE=s.Ik({needsReview:s.zM(),reasons:s.YO(bC)}).meta({id:"ReviewInfo"}),bF=s.Ik({port:s.ai().int().nullable(),geo:s.Yj().nullable(),ptr:s.Yj().nullable()}).meta({id:"DestinationNetwork"}),bG=s.Ik({id:s.Yj(),method:bD,transport:bw,url:s.Yj(),template:s.zM(),dataClass:bx,lastSeen:t.w$(),callSiteCount:s.ai().int().nonnegative()}).meta({id:"EndpointSummary"}),bH=s.Ik({id:s.Yj(),project:s.Yj(),file:s.Yj(),line:s.ai().int().nonnegative(),snippet:s.Yj(),dynamic:s.zM(),vendored:s.zM(),projectId:s.Yj().nullable()}).meta({id:"CallSite"}),bI=bG.extend({sites:s.YO(bH)}).meta({id:"EndpointWithSites"}),bJ=s.Ik({id:s.Yj(),kind:bv,name:s.Yj(),host:s.Yj(),category:s.Yj(),trust:bz,status:bB,isCustom:s.zM(),lastSeen:t.w$(),endpointCount:s.ai().int().nonnegative(),callSiteCount:s.ai().int().nonnegative(),transports:s.YO(bw),dataClasses:s.YO(bx),review:bE,network:bF.nullable(),endpoints:s.YO(bG)}).meta({id:"ShareDestinationSummary"});bJ.omit({endpointCount:!0,callSiteCount:!0,endpoints:!0}).extend({note:s.Yj().nullable(),endpoints:s.YO(bI)}).meta({id:"ShareDestinationDetail"});let bK=s.Ik({id:s.Yj(),kind:bv,name:s.Yj(),host:s.Yj(),trust:bz,status:bB,review:bE,topDataClass:bx,callSiteCount:s.ai().int().nonnegative(),lastSeen:t.w$()}).meta({id:"ReviewDestination"}),bL=s.Ik({kind:bv,total:s.ai().int().nonnegative(),items:s.YO(bJ)}).meta({id:"ShareDestinationGroup"});s.Ik({groups:s.YO(bL)}).meta({id:"ListShareDestinationsResponse"}),s.Ik({items:s.YO(bK)}).meta({id:"NeedsReviewResponse"}),s.Ik({destinations:s.ai().int().nonnegative(),endpoints:s.ai().int().nonnegative(),callSites:s.ai().int().nonnegative(),needsReview:s.ai().int().nonnegative(),insecure:s.ai().int().nonnegative(),byKind:s.Ik({provider:s.ai().int().nonnegative(),internal:s.ai().int().nonnegative(),external:s.ai().int().nonnegative(),ip:s.ai().int().nonnegative()}),byTrust:s.Ik({recognized:s.ai().int().nonnegative(),internal:s.ai().int().nonnegative(),unverified:s.ai().int().nonnegative(),ip:s.ai().int().nonnegative()})}).meta({id:"SharesStats"}),s.Ik({decision:bA.nullable()}).meta({id:"SetEgressDecisionBody"}),s.Ik({destination:bJ}).meta({id:"SetEgressDecisionResponse"}),s.Ik({q:s.Yj().optional(),kind:s.YO(bv).optional(),groupBy:s.k5(["destination"]).default("destination"),review:s.uE().default(!1)}),s.Ik({format:s.k5(["csv","json"]).default("csv"),q:s.Yj().optional(),kind:s.YO(bv).optional()});let bM=s.k5(["npm","pypi","go","maven","rubygems","cargo","composer","nuget"]).meta({id:"EgressEcosystem"});s.Ik({id:s.Yj(),name:s.Yj(),category:s.Yj(),hostSuffixes:s.YO(s.Yj()).min(1),apiBase:s.Yj(),defaultDataClasses:s.YO(bx).min(1),sdks:s.jg(bM,s.YO(s.Yj()))}).meta({id:"ProviderRegistryEntry"});let bN=s.Ik({file:s.Yj(),line:s.ai().int().positive(),snippet:s.Yj(),dynamic:s.zM(),vendored:s.zM()}).meta({id:"EgressCallSiteHit"}),bO=s.Ik({host:s.Yj(),kind:bv,name:s.Yj(),category:s.Yj(),trust:bz,network:bF.nullable(),method:bD,transport:bw,url:s.Yj(),template:s.zM(),dataClass:bx,site:bN}).meta({id:"ResolvedEgressHit"}),bP=s.gM("mode",[s.Ik({mode:s.eu("walk"),walkedPrefix:s.Yj()}),s.Ik({mode:s.eu("ledger"),scannedFiles:s.YO(s.Yj()),deletedFiles:s.YO(s.Yj())})]).meta({id:"EgressReconcile"});function bQ(a){return({log:"monitored",block:"blocked",redact:"redacted",warn:"warned",allow:"allowed"})[a]??"allowed"}function bR(a){return P[a]??"api"}s.Ik({projectKey:s.Yj().min(1),project:s.Yj(),projectId:s.Yj().nullable(),reconcile:bP,hits:s.YO(bO)}).meta({id:"RecordProjectEgressInput"}),s.Ik({destinations:s.ai().int().nonnegative(),endpoints:s.ai().int().nonnegative(),callSites:s.ai().int().nonnegative(),truncated:s.zM(),droppedFiles:s.YO(s.Yj()).default([])}).meta({id:"EgressWriteSummary"});let bS=["open","handled","dismissed","resolved"];function bT(a){return"code_change"!==a.kind?"handled":null===a.findingKey?"open":"resolved"===a.latestResolutionStatus?"resolved":"dismissed"===a.latestResolutionStatus?"dismissed":"open"}function bU(a,b={}){let c=b.overrides,d=b.packNames,e=b.aggregates,f=new Map;for(let b of a){let a=f.get(b.ruleId);a?a.push(b):f.set(b.ruleId,[b])}let g=[];for(let[a,b]of f){var h;let f=b.map(a=>{let b=c?.get(a.id)??a.actionTaken;return{id:a.id,provider:bR(a.sourceTool),repo:a.repo,file:a.file,...void 0===a.toolName?{}:{toolName:a.toolName},action:bQ(b),detectedAt:a.occurredAt,confidence:a.confidence,status:a.status}}),i=e?.get(a),j=i?.latestDetectedAt??b.reduce((a,b)=>b.occurredAt>a?b.occurredAt:a,b[0]?.occurredAt??new Date(0).toISOString()),k=new Set,l=(i?[...new Set(i.sourceTools.map(bR))].sort():f.map(a=>a.provider)).filter(a=>!k.has(a)&&(k.add(a),!0)),m=new Set(i?i.actionsTaken.map(bQ):f.map(a=>a.action)),n=1===m.size?[...m][0]??null:null,o=b[0]?.severity??"low",p={id:a,name:d?.get(a)??null},q="code_context"===(h=b[0]?.category??"custom")?"source_code":h,r={id:`category:${q}`,name:q},s={maskedValue:b[0]?.maskedMatch??"",contextPrefix:""},t=function(a){let b=new Set(a.filter(a=>void 0!==a));if(0!==b.size){for(let a of bS)if(b.has(a))return a}}(i?i.statusInputs.map(bT):f.map(a=>a.status)),u={id:a,category:q,subtype:a,severity:o,match:s,detection:p,policy:r,instanceCount:i?.instanceCount??f.length,providers:l,aggregateAction:n,latestDetectedAt:j,instances:f,status:t};i&&(bX.set(u,[...m]),void 0!==i.searchText&&bV.set(u,bW(u,i.searchText))),g.push(u)}return g}let bV=new WeakMap;function bW(a,b){return[a.subtype,a.category,a.match.maskedValue,a.policy.name,a.id,...a.instances.map(a=>a.repo),...a.instances.map(a=>a.file),...a.instances.map(a=>a.toolName?`via ${a.toolName}`:""),...a.instances.map(a=>a.id),...void 0===b?[]:[b]].join(" ").toLowerCase()}let bX=new WeakMap;function bY(a){let b=bX.get(a);if(void 0!==b)return b;let c=[...new Set(a.instances.map(a=>a.action))];return bX.set(a,c),c}function bZ(a,b){let c=a;if(b.severity&&b.severity.length>0){let a=new Set(b.severity);c=c.filter(b=>a.has(b.severity))}if(b.providers&&b.providers.length>0){let a=new Set(b.providers);c=c.filter(b=>b.providers.some(b=>a.has(b)))}if(b.actions&&b.actions.length>0){let a=new Set(b.actions);c=c.filter(b=>bY(b).some(b=>a.has(b)))}if(b.subtype&&b.subtype.length>0){let a=new Set(b.subtype);c=c.filter(b=>a.has(b.subtype))}if(b.q){let a=b.q.toLowerCase();c=c.filter(b=>(function(a){let b=bV.get(a);if(void 0!==b)return b;let c=bW(a);return bV.set(a,c),c})(b).includes(a))}return c}let b$={critical:0,high:1,medium:2,low:3};function b_(a){return[...a].sort((a,b)=>{let c=(b$[a.severity]??-1)-(b$[b.severity]??-1);return 0!==c?c:b.latestDetectedAt.localeCompare(a.latestDetectedAt)})}function b0(a,b){let c=bZ(a,{providers:b.providers,actions:b.actions,q:b.q,subtype:b.subtype}),d=new Map;for(let a of c)d.set(a.severity,(d.get(a.severity)??0)+1);let e=bZ(a,{actions:b.actions,q:b.q,subtype:b.subtype,severity:b.severity}),f=new Map;for(let a of e)for(let b of a.providers)f.set(b,(f.get(b)??0)+1);let g=bZ(a,{providers:b.providers,q:b.q,subtype:b.subtype,severity:b.severity}),h=new Map;for(let a of g)for(let b of bY(a))h.set(b,(h.get(b)??0)+1);let i=bZ(a,{providers:b.providers,actions:b.actions,q:b.q,severity:b.severity}),j=new Map;for(let a of i)j.set(a.subtype,(j.get(a.subtype)??0)+1);let k=a=>[...a.entries()].map(([a,b])=>({value:a,count:b}));return{severity:k(d),provider:k(f),action:k(h),subtype:k(j)}}let b1=s.Ik({id:s.Os(),namespace:bf,packId:bg,version:bh,name:s.Yj(),enabled:s.zM().default(!0),policyId:s.Yj().optional()}).meta({id:"InstalledPack"});s.Ik({namespace:bf,packId:bg,version:bh}).meta({id:"InstallPackRequest"}),s.Ik({items:s.YO(b1)}).meta({id:"ListInstalledPacksResponse"}),s.Ik({enabled:s.zM().optional(),policyId:s.Yj().nullable().optional()}).refine(a=>Object.keys(a).some(b=>void 0!==a[b]),{message:"At least one field must be provided"}).meta({id:"PatchInstalledPackRequest"});let b2=s.k5(["standalone"]),b3=s.k5(["redact","warn"]),b4=s.k5(["full","session-only"]),b5=s.Ik({specVersion:s.ai().int().positive().default(3),runMode:s.vk(a=>"attached"===a?"standalone":a,b2.default("standalone")),policy:b3.default("redact"),historicalAccess:b4.default("session-only"),dataSharesInPlace:s.zM().default(!0),onboardedAt:t.w$().optional()});function b6(){return b5.parse({})}function b7(a){return{id:a.id,sourceTool:a.sourceTool,kind:a.kind,occurredAt:g(a.occurredAt),contentHash:a.contentHash,content:a.content,metadata:a.metadata?JSON.stringify(a.metadata):null}}function b8(a){return{id:a.id,eventId:a.eventId,ruleId:a.ruleId,category:a.category,severity:a.severity,spanStart:a.span.start,spanEnd:a.span.end,maskedMatch:a.maskedMatch,actionTaken:a.actionTaken,confidence:a.confidence,findingKey:a.findingKey??null}}function b9(a,b,c){return{id:b,objectType:a.objectType,location:a.location??null,title:a.title??null,hostId:a.hostId??null,attributes:JSON.stringify(a.attributes),firstSeen:c,lastSeen:c}}function ca(a,b,c){return{id:b,url:a.url,name:a.name??null,attributes:JSON.stringify(a.attributes),firstSeen:c,lastSeen:c}}function cb(a){return{id:a.id,parentId:a.parentId??null,rootSessionId:a.rootSessionId??null,eventType:a.eventType,hostId:a.hostId??null,harnessId:a.harnessId??null,sourceProjectId:a.sourceProjectId??null,startedAt:g(a.startedAt),endedAt:a.endedAt?g(a.endedAt):null,severity:a.severity??null,priority:a.priority??null,content:a.content??null,contentHash:a.contentHash??null,attributes:a.attributes?JSON.stringify(a.attributes):null}}function cc(a,b){return{id:b,class:a.class,label:a.label??null,attributes:a.attributes?JSON.stringify(a.attributes):null}}function cd(a,b){return{id:b,ruleId:a.ruleId,name:a.name,category:a.category,severity:a.severity,definition:a.definition,version:a.version}}function ce(a){return{id:a.id,auditEventId:a.auditEventId,inspectionDefinitionId:a.inspectionDefinitionId,classifiedDataId:a.classifiedDataId??null,spanStart:a.span.start,spanEnd:a.span.end,maskedMatch:a.maskedMatch,actionTaken:a.actionTaken,confidence:a.confidence}}let cf=s.Ik({path:s.Yj().min(1),name:s.Yj().min(1),origin:ap,defaultAccess:ao});s.Ik({files:s.YO(cf),truncated:s.zM(),scannedAt:s.Yj()});let cg=["7d","30d","3m","6m"],ch=s.k5(cg).meta({id:"TimeRange"}),ci={"7d":7,"30d":30,"3m":90,"6m":180};ch.catch("7d");let cj=s.k5(["still-valid","unknown","invalid"]),ck=s.Ik({filePath:s.Yj(),span:z.optional()}).strict(),cl=s.Ik({provider:s.Yj(),maskedToken:s.Yj(),where:ck,state:cj,observedAt:t.w$().optional()}).strict();s.Ik({provider:s.Yj(),maskedToken:s.Yj(),consolePath:s.Yj(),occurrenceSpread:s.ai().int().positive()}).strict();let cm=s.k5(["redact-rotation-checklist","redact-only","set-secret-redact","leave"]),cn=s.k5(["first-run","pre-push","secret-scan"]);s.Ik({entrySource:cn}).strict();let co=s.Ik({id:cm,label:s.Yj()}),cp=s.Ik({kind:s.eu("decision"),entrySource:cn,secretCount:s.ai().int().positive(),prompt:s.Yj(),options:s.PV([co.extend({id:s.eu("redact-rotation-checklist")}),co.extend({id:s.eu("redact-only")}),co.extend({id:s.eu("set-secret-redact")}),co.extend({id:s.eu("leave")})])}),cq=s.Ik({kind:s.eu("no-decision")});s.gM("kind",[cp,cq]),s.Ik({rules:s.YO(aS).min(1).max(100),text:s.Yj().max(5e4).optional(),fixtures:s.YO(aR).max(200).optional()}).refine(a=>void 0!==a.text||(a.fixtures?.length??0)>0,{message:"Provide `text`, `fixtures`, or both — there must be something to test"}).meta({id:"TestRulesRequest"});let cr=s.Ik({ruleId:s.Yj(),category:v,severity:w,span:z,confidence:s.ai().min(0).max(1),match:s.Yj()}).meta({id:"RuleTestMatch"}),cs=s.Ik({label:s.Yj(),shouldMatch:s.zM(),didMatch:s.zM(),passed:s.zM(),matches:s.YO(cr)}).meta({id:"FixtureResult"});s.Ik({adhoc:s.Ik({matches:s.YO(cr)}).optional(),fixtures:s.YO(cs),summary:s.Ik({total:s.ai().int().nonnegative(),passed:s.ai().int().nonnegative(),failed:s.ai().int().nonnegative()}),unsupportedRuleIds:s.YO(s.Yj())}).meta({id:"TestRulesResponse"});let ct=s.Ik({severity:w,count:s.ai().int().nonnegative(),caught:s.ai().int().nonnegative().optional(),openAtRest:s.ai().int().nonnegative().optional()}).meta({id:"SeveritySummaryItem"});s.Ik({total:s.ai().int().nonnegative(),needsRemediation:s.ai().int().nonnegative().optional(),bySeverity:s.YO(ct)}).meta({id:"SeveritySummaryResponse"}),s.Ik({range:s.k5(cg).default("7d")});let cu=s.k5(["blocked","redacted","warned"]).meta({id:"EnforcementActionKind"}),cv=s.Ik({kind:cu,count:s.ai().int().nonnegative(),delta:s.ai().int()}).meta({id:"EnforcementAction"});s.Ik({range:ch,total:s.ai().int().nonnegative(),actions:s.YO(cv)}).meta({id:"EnforcementActionsResponse"});let cw=s.k5(["day","week"]).meta({id:"TimeseriesGranularity"}),cx=s.Ik({timestamp:t.p6(),critical:s.ai().int().nonnegative(),high:s.ai().int().nonnegative(),medium:s.ai().int().nonnegative()}).meta({id:"FindingsTimeseriesPoint"});s.Ik({range:ch,granularity:cw,points:s.YO(cx)}).meta({id:"FindingsTimeseriesResponse"});let cy=s.Ik({timestamp:t.p6(),bySeverity:s.Ik({critical:s.ai().nonnegative().nullable(),high:s.ai().nonnegative().nullable(),medium:s.ai().nonnegative().nullable(),low:s.ai().nonnegative().nullable()})}).meta({id:"MttrTrendPoint"});s.Ik({range:ch,granularity:cw,points:s.YO(cy)}).meta({id:"MttrTrendResponse"});let cz=s.Ik({findingKey:s.Yj(),ruleId:s.Yj(),severity:w,path:s.Yj(),resolvedAt:t.w$(),detectedAt:t.w$()}).meta({id:"ResolvedFeedItem"});s.Ik({items:s.YO(cz)}).meta({id:"RecentlyResolvedResponse"});let cA=["repo","user"],cB=s.k5(cA).meta({id:"SourceKind"}),cC=s.Ik({id:s.Yj(),name:s.Yj(),kind:cB,findingsCount:s.ai().int().nonnegative()}).meta({id:"TopSource"});s.Ik({range:ch,items:s.YO(cC)}).meta({id:"TopSourcesResponse"}),s.Ik({range:s.k5(cg).default("7d"),limit:u.ai().int().min(1).max(50).default(5),kind:s.k5(cA).optional()});let cD=s.k5(["claudecode","cursor","codex","chatgpt","copilot","api"]).meta({id:"Provider"}),cE=s.Ik({provider:cD,coverage:s.ai().int().min(0).max(100),supported:s.zM()}).meta({id:"ScanCoverageProvider"});s.Ik({range:ch,providers:s.YO(cE)}).meta({id:"ScanCoverageResponse"});let cF=s.k5(["repo","user","team","policy","share","rule"]).meta({id:"SubjectType"}),cG=s.Ik({type:cF,id:s.Yj(),label:s.Yj()}).meta({id:"RecommendationSubject"}),cH=s.k5(["apply","navigate"]).meta({id:"RecommendationActionMode"}),cI=s.Ik({mode:cH,type:s.Yj(),label:s.Yj(),href:s.Yj().optional(),policyId:s.Yj().optional(),teamId:s.Yj().optional()}).meta({id:"RecommendationAction"}),cJ=s.Ik({id:s.Yj(),category:s.Yj(),severity:w,title:s.Yj(),description:s.Yj(),subjects:s.YO(cG),action:cI}).meta({id:"RecommendedAction"});s.Ik({items:s.YO(cJ)}).meta({id:"RecommendedActionsResponse"}),s.Ik({limit:u.ai().int().min(1).max(20).default(3)});let cK=s.Ik({type:s.Yj(),policyId:s.Yj().optional(),teamId:s.Yj().optional()}).meta({id:"AppliedAction"});s.Ik({id:s.Yj(),status:s.eu("applied"),appliedAction:cK}).meta({id:"ApplyRecommendedActionResponse"}),s.Ik({id:s.Yj(),status:s.eu("dismissed")}).meta({id:"DismissRecommendedActionResponse"}),s.Ik({id:s.Yj()}),s.Ik({ruleId:s.Yj(),category:v,severity:w,maskedMatch:s.Yj(),rawMatch:s.Yj(),context:s.Yj(),filePath:s.Yj().optional(),confidence:s.ai().min(0).max(1),id:s.Yj().optional(),valueFingerprint:s.Yj().optional(),keyVersion:s.ai().int().nonnegative().optional()});let cL=s.Ik({category:v,action:a0,reasoning:s.Yj(),genuineCount:s.ai().int().nonnegative(),fpCount:s.ai().int().nonnegative(),fpIds:s.YO(s.Yj())});s.Ik({perCategory:s.YO(cL),notes:s.Yj()});let cM=s.Ik({total:s.ai().int().nonnegative(),important:s.ai().int().nonnegative(),routine:s.ai().int().nonnegative()}).refine(a=>a.total===a.important+a.routine,{message:"total must equal important + routine",path:["total"]}),cN=s.Ik({ruleId:s.Yj(),category:v,valueFingerprint:s.Yj(),keyVersion:s.ai().int().nonnegative()}),cO=s.Ik({pattern:s.Yj(),count:s.ai().int().nonnegative(),values:s.YO(cN).min(1)}),cP=s.Ik({category:v,count:s.ai().int().nonnegative(),egress:s.zM()}),cQ=s.Ik({counts:cM,routineCategories:s.YO(v),surfacedCategories:s.YO(v),findingKinds:s.YO(cP),posture:s.g1(v,a0),maskedFindings:s.YO(cl).optional(),falsePositivePatterns:s.YO(cO).optional()}),cR=cL.pick({category:!0,genuineCount:!0,fpCount:!0}).extend({egress:s.zM()});s.Ik({categories:s.YO(cR),posture:s.g1(v,a0)}),s.Ik({frame:cQ,copy:s.Yj()}),s.k5(["scan","floor"]);let cS=s.Ik({id:s.k5(["enter-remediation","open-dashboard","not-now"]),label:s.Yj()}),cT=s.PV([cS.extend({id:s.eu("open-dashboard")}),cS.extend({id:s.eu("not-now")})]),cU=s.PV([cS.extend({id:s.eu("enter-remediation")}),cS.extend({id:s.eu("open-dashboard")}),cS.extend({id:s.eu("not-now")})]);s.Ik({worthALook:s.ai().int().nonnegative(),liveKeys:s.ai().int().nonnegative().optional(),options:s.KC([cT,cU])}).refine(a=>a.options.some(a=>"enter-remediation"===a.id)===(a.liveKeys??0)>0,{message:"the chain-entry option is present exactly when liveKeys > 0",path:["options"]}).refine(a=>(a.liveKeys??0)<=a.worthALook,{message:"liveKeys is a subset of worthALook and cannot exceed it",path:["liveKeys"]});let cV=new Set(["recognized","internal"]);function cW(a){return cV.has(a)?"allowed":"review"}function cX(a){return"block"===a?"blocked":"allowed"}function cY(a,b){return null===b?cW(a):cX(b)}function cZ(a,b){return null!==b&&cX(b)!==cW(a)}function c$(a,b){let c=function(a,b){let c=[];return"ip"===a&&c.push("raw_ip"),"unverified"===a&&c.push("unverified_domain"),(b.includes("http")||b.includes("ws"))&&c.push("plaintext_transport"),c}(a,b);return{needsReview:c.length>0,reasons:c}}function c_(a){return Array.from(new Set(a))}function c0(a){let b=new Set(a);return by.filter(a=>b.has(a))}function c1(a){return c0(a)[0]??"none"}let c2={raw_ip:0,unverified_domain:1,plaintext_transport:2};function c3(a){return 0===a.length?1/0:Math.min(...a.map(a=>c2[a]))}}};