@akasecurity/cli 0.8.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/cli.js +412 -97
- package/package.json +10 -4
- package/web-ui/rules/core-code-context/db-table-name.json +0 -1
- package/web-ui/web-ui/.next/BUILD_ID +1 -1
- package/web-ui/web-ui/.next/app-build-manifest.json +52 -51
- package/web-ui/web-ui/.next/app-path-routes-manifest.json +3 -3
- package/web-ui/web-ui/.next/build-manifest.json +2 -2
- package/web-ui/web-ui/.next/prerender-manifest.json +15 -15
- package/web-ui/web-ui/.next/required-server-files.json +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/activity/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/data-shares/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/detections/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/detections/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/findings/page.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/findings/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/inventory/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/policies/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/scan/page.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/scan/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/scan/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/security/page.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/settings/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/updates/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/updates/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/updates/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found.html +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found.rsc +2 -2
- package/web-ui/web-ui/.next/server/app/index.html +1 -1
- package/web-ui/web-ui/.next/server/app/index.rsc +2 -2
- package/web-ui/web-ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app-paths-manifest.json +3 -3
- package/web-ui/web-ui/.next/server/chunks/366.js +73 -57
- package/web-ui/web-ui/.next/server/chunks/45.js +1 -1
- package/web-ui/web-ui/.next/server/chunks/461.js +5 -5
- package/web-ui/web-ui/.next/server/chunks/484.js +72 -56
- package/web-ui/web-ui/.next/server/chunks/773.js +4 -4
- package/web-ui/web-ui/.next/server/chunks/900.js +1 -0
- package/web-ui/web-ui/.next/server/chunks/918.js +2 -0
- package/web-ui/web-ui/.next/server/functions-config-manifest.json +6 -6
- package/web-ui/web-ui/.next/server/middleware-manifest.json +5 -5
- package/web-ui/web-ui/.next/server/pages/404.html +1 -1
- package/web-ui/web-ui/.next/server/pages/500.html +1 -1
- package/web-ui/web-ui/.next/server/server-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/server-reference-manifest.json +1 -1
- package/web-ui/web-ui/.next/static/chunks/{24-b20c857178647805.js → 24-55b96836aea5ce23.js} +3 -3
- package/web-ui/web-ui/.next/static/chunks/561-c3388f066f813e17.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-0c208c8b275a69ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/{page-d469bd704615ea76.js → page-b7387fc879294f9e.js} +1 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-d3c788335ec106bc.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-b9b760f81ad59940.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/{page-d6cfd847bb528eec.js → page-f25f688accef752f.js} +1 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-4b63bb2d272bab7e.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-d33f3999e89c7e77.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/{page-0eb54f5acb30a73e.js → page-4b11bbcc65f8d953.js} +1 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-d15081016f40ac92.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/{page-b00573441ac43bdf.js → page-00047eaf00adfcaa.js} +1 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-a2e02ffad2177626.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-e36c0f23fca981e3.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/{layout-8b19b03146218dc7.js → layout-40fea3e270a8e120.js} +1 -1
- package/web-ui/web-ui/.next/static/css/43f95c94ecc1bd17.css +2 -0
- package/web-ui/web-ui/server.js +1 -1
- package/web-ui/web-ui/.next/server/chunks/640.js +0 -1
- package/web-ui/web-ui/.next/server/chunks/913.js +0 -2
- package/web-ui/web-ui/.next/static/chunks/561-46ea4b9ad0419130.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-49c63d0cec0da80d.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-07ca4b0ce174ef7a.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-16d5fd7d373c8f0b.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-291617f3a4d46a01.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-c59135e0cfa8d5c7.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-a86819fe3aeb2491.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-3b5fe92cd995b763.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-50f828314c9a5d91.js +0 -1
- package/web-ui/web-ui/.next/static/css/dfdcbdce6b7c9eb0.css +0 -2
- /package/web-ui/web-ui/.next/static/{zNaHfOWePiRki0ugHKYzl → Oz-9GZNGXujYNXihIv5sm}/_buildManifest.js +0 -0
- /package/web-ui/web-ui/.next/static/{zNaHfOWePiRki0ugHKYzl → Oz-9GZNGXujYNXihIv5sm}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=366,exports.ids=[366],exports.modules={28819:(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:()=>cm,iRC:()=>aJ,GCf:()=>E,TUN:()=>O,SHn:()=>au,rov:()=>bL,V0H:()=>a_,PEm:()=>aW,cqq:()=>F,jON:()=>aS,lFU:()=>d,PhW:()=>ab,uQz:()=>bK,BIx:()=>aq,hd_:()=>bM,tXp:()=>bE,plk:()=>bu,mAj:()=>bz,Fnc:()=>cD,ryv:()=>r,tTV:()=>aa,rG:()=>bH,q_t:()=>p,i1j:()=>bN,xog:()=>by,hzO:()=>cF,by7:()=>cE,Gw9:()=>cB,q11:()=>h,U7X:()=>w,y_0:()=>cC,I8t:()=>g,DhA:()=>a6,WSs:()=>cI,a45:()=>bs,N6N:()=>f,A6E:()=>bG,pnU:()=>bt,V9M:()=>bS,$BP:()=>bT,yaP:()=>bO,zw:()=>bP,JAl:()=>bU,$3l:()=>bV,gzP:()=>bQ,QCA:()=>bR,C05:()=>cG});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"}],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}},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(),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(),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()}).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(),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()}).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(),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"});let aK=s.Ik({type:s.eu("keyword"),keywords:s.YO(s.Yj()).min(1),caseSensitive:s.zM().default(!1)}),aL=s.Ik({type:s.eu("regex"),pattern:s.Yj(),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({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)}}function bv(a){return({log:"monitored",block:"blocked",redact:"redacted",warn:"warned",allow:"allowed"})[a]??"allowed"}function bw(a){return P[a]??"api"}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 bx=["open","handled","dismissed","resolved"];function by(a){return"code_change"!==a.kind?"handled":null===a.findingKey?"open":"resolved"===a.latestResolutionStatus?"resolved":"dismissed"===a.latestResolutionStatus?"dismissed":"open"}function bz(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:bw(a.sourceTool),repo:a.repo,file:a.file,action:bv(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(bw))].sort():f.map(a=>a.provider)).filter(a=>!k.has(a)&&(k.add(a),!0)),m=new Set(i?i.actionsTaken.map(bv):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 bx)if(b.has(a))return a}}(i?i.statusInputs.map(by):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&&(bC.set(u,[...m]),void 0!==i.searchText&&bA.set(u,bB(u,i.searchText))),g.push(u)}return g}let bA=new WeakMap;function bB(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.id),...void 0===b?[]:[b]].join(" ").toLowerCase()}let bC=new WeakMap;function bD(a){let b=bC.get(a);if(void 0!==b)return b;let c=[...new Set(a.instances.map(a=>a.action))];return bC.set(a,c),c}function bE(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=>bD(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=bA.get(a);if(void 0!==b)return b;let c=bB(a);return bA.set(a,c),c})(b).includes(a))}return c}let bF={critical:0,high:1,medium:2,low:3};function bG(a){return[...a].sort((a,b)=>{let c=(bF[a.severity]??-1)-(bF[b.severity]??-1);return 0!==c?c:b.latestDetectedAt.localeCompare(a.latestDetectedAt)})}function bH(a,b){let c=bE(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=bE(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=bE(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 bD(a))h.set(b,(h.get(b)??0)+1);let i=bE(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 bI=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(bI)}).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 bJ=s.k5(["standalone"]),bK=s.k5(["redact","warn"]),bL=s.k5(["full","session-only"]),bM=s.Ik({specVersion:s.ai().int().positive().default(2),runMode:s.vk(a=>"attached"===a?"standalone":a,bJ.default("standalone")),policy:bK.default("redact"),historicalAccess:bL.default("session-only"),onboardedAt:t.w$().optional()});function bN(){return bM.parse({})}function bO(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 bP(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 bQ(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 bR(a,b,c){return{id:b,url:a.url,name:a.name??null,attributes:JSON.stringify(a.attributes),firstSeen:c,lastSeen:c}}function bS(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 bT(a,b){return{id:b,class:a.class,label:a.label??null,attributes:a.attributes?JSON.stringify(a.attributes):null}}function bU(a,b){return{id:b,ruleId:a.ruleId,name:a.name,category:a.category,severity:a.severity,definition:a.definition,version:a.version}}function bV(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 bW=s.Ik({path:s.Yj().min(1),name:s.Yj().min(1),origin:ap,defaultAccess:ao});s.Ik({files:s.YO(bW),truncated:s.zM(),scannedAt:s.Yj()}),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 bX=s.Ik({ruleId:s.Yj(),category:v,severity:w,span:z,confidence:s.ai().min(0).max(1),match:s.Yj()}).meta({id:"RuleTestMatch"}),bY=s.Ik({label:s.Yj(),shouldMatch:s.zM(),didMatch:s.zM(),passed:s.zM(),matches:s.YO(bX)}).meta({id:"FixtureResult"});s.Ik({adhoc:s.Ik({matches:s.YO(bX)}).optional(),fixtures:s.YO(bY),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 bZ=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(bZ)}).meta({id:"SeveritySummaryResponse"});let b$=["7d","30d","3m","6m"],b_=s.k5(b$).meta({id:"SecurityRange"});s.Ik({range:s.k5(b$).default("30d")});let b0=s.k5(["blocked","redacted","warned"]).meta({id:"EnforcementActionKind"}),b1=s.Ik({kind:b0,count:s.ai().int().nonnegative(),delta:s.ai().int()}).meta({id:"EnforcementAction"});s.Ik({range:b_,total:s.ai().int().nonnegative(),actions:s.YO(b1)}).meta({id:"EnforcementActionsResponse"});let b2=s.k5(["day","week"]).meta({id:"TimeseriesGranularity"}),b3=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:b_,granularity:b2,points:s.YO(b3)}).meta({id:"FindingsTimeseriesResponse"});let b4=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:b_,granularity:b2,points:s.YO(b4)}).meta({id:"MttrTrendResponse"});let b5=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(b5)}).meta({id:"RecentlyResolvedResponse"});let b6=["repo","user"],b7=s.k5(b6).meta({id:"SourceKind"}),b8=s.Ik({id:s.Yj(),name:s.Yj(),kind:b7,findingsCount:s.ai().int().nonnegative()}).meta({id:"TopSource"});s.Ik({range:b_,items:s.YO(b8)}).meta({id:"TopSourcesResponse"}),s.Ik({range:s.k5(b$).default("30d"),limit:u.ai().int().min(1).max(50).default(5),kind:s.k5(b6).optional()});let b9=s.k5(["claudecode","cursor","codex","chatgpt","copilot","api"]).meta({id:"Provider"}),ca=s.Ik({provider:b9,coverage:s.ai().int().min(0).max(100),supported:s.zM()}).meta({id:"ScanCoverageProvider"});s.Ik({range:b_,providers:s.YO(ca)}).meta({id:"ScanCoverageResponse"});let cb=s.k5(["repo","user","team","policy","share","rule"]).meta({id:"SubjectType"}),cc=s.Ik({type:cb,id:s.Yj(),label:s.Yj()}).meta({id:"RecommendationSubject"}),cd=s.k5(["apply","navigate"]).meta({id:"RecommendationActionMode"}),ce=s.Ik({mode:cd,type:s.Yj(),label:s.Yj(),href:s.Yj().optional(),policyId:s.Yj().optional(),teamId:s.Yj().optional()}).meta({id:"RecommendationAction"}),cf=s.Ik({id:s.Yj(),category:s.Yj(),severity:w,title:s.Yj(),description:s.Yj(),subjects:s.YO(cc),action:ce}).meta({id:"RecommendedAction"});s.Ik({items:s.YO(cf)}).meta({id:"RecommendedActionsResponse"}),s.Ik({limit:u.ai().int().min(1).max(20).default(3)});let cg=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:cg}).meta({id:"ApplyRecommendedActionResponse"}),s.Ik({id:s.Yj(),status:s.eu("dismissed")}).meta({id:"DismissRecommendedActionResponse"}),s.Ik({id:s.Yj()});let ch=s.k5(["provider","internal","ip"]).meta({id:"DestinationKind"}),ci=s.k5(["https","http","sftp","grpc","smtp"]).meta({id:"Transport"}),cj=s.k5(["secrets","pii","customer","source","telemetry","logs","metrics","none"]).meta({id:"DataClass"}),ck=cj.options,cl=s.k5(["recognized","internal","unverified","ip"]).meta({id:"ShareTrustLevel"}),cm=s.k5(["allow","block"]).meta({id:"EgressDecision"}),cn=s.k5(["allowed","blocked","review"]).meta({id:"EgressStatus"}),co=s.k5(["raw_ip","unverified_domain","plaintext_transport"]).meta({id:"ReviewReason"}),cp=s.k5(["GET","POST","PUT","DELETE"]).meta({id:"HttpMethod"}),cq=s.Ik({needsReview:s.zM(),reasons:s.YO(co)}).meta({id:"ReviewInfo"}),cr=s.Ik({port:s.ai().int().nullable(),geo:s.Yj().nullable(),ptr:s.Yj().nullable()}).meta({id:"DestinationNetwork"}),cs=s.Ik({id:s.Yj(),method:cp,transport:ci,url:s.Yj(),template:s.zM(),dataClass:cj,lastSeen:t.w$(),callSiteCount:s.ai().int().nonnegative()}).meta({id:"EndpointSummary"}),ct=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"}),cu=cs.extend({sites:s.YO(ct)}).meta({id:"EndpointWithSites"}),cv=s.Ik({id:s.Yj(),kind:ch,name:s.Yj(),host:s.Yj(),category:s.Yj(),trust:cl,status:cn,isCustom:s.zM(),lastSeen:t.w$(),endpointCount:s.ai().int().nonnegative(),callSiteCount:s.ai().int().nonnegative(),transports:s.YO(ci),dataClasses:s.YO(cj),review:cq,network:cr.nullable(),endpoints:s.YO(cs)}).meta({id:"ShareDestinationSummary"});cv.omit({endpointCount:!0,callSiteCount:!0,endpoints:!0}).extend({note:s.Yj().nullable(),endpoints:s.YO(cu)}).meta({id:"ShareDestinationDetail"});let cw=s.Ik({id:s.Yj(),kind:ch,name:s.Yj(),host:s.Yj(),trust:cl,status:cn,review:cq,topDataClass:cj,callSiteCount:s.ai().int().nonnegative(),lastSeen:t.w$()}).meta({id:"ReviewDestination"}),cx=s.Ik({kind:ch,total:s.ai().int().nonnegative(),items:s.YO(cv)}).meta({id:"ShareDestinationGroup"});s.Ik({groups:s.YO(cx)}).meta({id:"ListShareDestinationsResponse"}),s.Ik({items:s.YO(cw)}).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(),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:cm.nullable()}).meta({id:"SetEgressDecisionBody"}),s.Ik({destination:cv}).meta({id:"SetEgressDecisionResponse"}),s.Ik({q:s.Yj().optional(),kind:s.YO(ch).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(ch).optional()});let cy=new Set(["recognized","internal"]);function cz(a){return cy.has(a)?"allowed":"review"}function cA(a){return"block"===a?"blocked":"allowed"}function cB(a,b){return null===b?cz(a):cA(b)}function cC(a,b){return null!==b&&cA(b)!==cz(a)}function cD(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")&&c.push("plaintext_transport"),c}(a,b);return{needsReview:c.length>0,reasons:c}}function cE(a){return Array.from(new Set(a))}function cF(a){let b=new Set(a);return ck.filter(a=>b.has(a))}function cG(a){return cF(a)[0]??"none"}let cH={raw_ip:0,unverified_domain:1,plaintext_transport:2};function cI(a){return 0===a.length?1/0:Math.min(...a.map(a=>cH[a]))}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 cJ=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(cJ),notes:s.Yj()})},78366:(a,b,c)=>{c.d(b,{WR:()=>aa,qA:()=>ab,o8:()=>bc,KS:()=>bb,tI:()=>a9,_2:()=>a7,Rd:()=>a5,Ji:()=>a1,v5:()=>a6});var d=c(77598),e=c(73024),f=c(76760),g=c(79868),h=c(28819);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}
|
|
1
|
+
"use strict";exports.id=366,exports.ids=[366],exports.modules={78366:(a,b,c)=>{c.d(b,{WR:()=>ab,qA:()=>ac,o8:()=>bc,KS:()=>bb,tI:()=>a9,_2:()=>a7,Rd:()=>a5,Ji:()=>a1,v5:()=>a6});var d=c(77598),e=c(73024),f=c(76760),g=c(79868),h=c(85674);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
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
3
|
id,
|
|
4
4
|
event_type,
|
|
@@ -10,8 +10,12 @@
|
|
|
10
10
|
json_extract(attributes, '$.link') AS link,
|
|
11
11
|
json_extract(attributes, '$.targetId') AS target_id,
|
|
12
12
|
json_extract(attributes, '$.internal') AS internal,
|
|
13
|
-
json_extract(attributes, '$.flagged') AS flagged`,R="event_type = 'session'"
|
|
14
|
-
|
|
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
|
|
15
19
|
WHERE s.event_type = 'session' AND s.ended_at IS NULL
|
|
16
20
|
AND max(
|
|
17
21
|
s.started_at,
|
|
@@ -32,7 +36,8 @@
|
|
|
32
36
|
SELECT 1 FROM audit_events d
|
|
33
37
|
WHERE d.root_session_id = audit_events.id
|
|
34
38
|
AND (d.content LIKE ? ESCAPE '\\'
|
|
35
|
-
OR json_extract(d.attributes, '$.detail') LIKE ? ESCAPE '\\')))`),g.push(b,b,b,b,b,b)}
|
|
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,
|
|
36
41
|
json_extract(attributes, '$.harness') AS harness,
|
|
37
42
|
content AS title,
|
|
38
43
|
json_extract(attributes, '$.project') AS project,
|
|
@@ -44,7 +49,7 @@
|
|
|
44
49
|
FROM audit_events
|
|
45
50
|
WHERE ${f.join(" AND ")}
|
|
46
51
|
ORDER BY started_at DESC, id DESC
|
|
47
|
-
LIMIT ?`),[...g,
|
|
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,
|
|
48
53
|
json_extract(attributes, '$.harness') AS harness,
|
|
49
54
|
content AS title,
|
|
50
55
|
json_extract(attributes, '$.project') AS project,
|
|
@@ -98,7 +103,7 @@
|
|
|
98
103
|
count(DISTINCT json_extract(attributes, '$.destination')) AS n
|
|
99
104
|
FROM audit_events
|
|
100
105
|
WHERE root_session_id IN (${c}) AND event_type = 'share'
|
|
101
|
-
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
|
|
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
|
|
102
107
|
(id, parent_id, root_session_id, event_type,
|
|
103
108
|
host_id, harness_id, source_project_id, started_at, ended_at,
|
|
104
109
|
severity, priority, content, content_hash, attributes)
|
|
@@ -119,28 +124,28 @@
|
|
|
119
124
|
WHERE COALESCE(json_extract(excluded.attributes, '$.output_tokens'), 0)
|
|
120
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
|
|
121
126
|
FROM audit_events
|
|
122
|
-
WHERE event_type = 'llm_call' AND attributes IS NOT NULL`))}}class
|
|
123
|
-
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
|
|
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
|
|
124
129
|
WHERE event_type = 'config_scan'
|
|
125
|
-
ORDER BY started_at DESC, id DESC LIMIT 1`))}class
|
|
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
|
|
126
131
|
WHERE object_type IN ('skill', 'hook', 'mcp_server', 'config_file') AND last_seen >= :startedAt
|
|
127
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
|
|
128
133
|
FROM inspection_findings f
|
|
129
134
|
JOIN inspection_definitions d ON d.id = f.inspection_definition_id
|
|
130
|
-
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:
|
|
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,
|
|
131
136
|
rules_json AS rulesJson
|
|
132
|
-
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:
|
|
133
|
-
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=
|
|
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,
|
|
134
139
|
rules_json AS rulesJson, updated_at AS updatedAt
|
|
135
140
|
FROM installed_packs
|
|
136
|
-
WHERE namespace = ? AND pack_id = ?`),[c,d]);if(!e)return Promise.resolve(null);let f=
|
|
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
|
|
137
142
|
FROM findings f JOIN events e ON e.id = f.event_id
|
|
138
|
-
WHERE e.occurred_at >= ? AND f.rule_id IN (${c})`,[b,...a])}}class
|
|
139
|
-
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
|
|
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
|
|
140
145
|
AND (expires_at IS NULL OR expires_at > :now)
|
|
141
|
-
AND (max_uses IS NULL OR use_count < max_uses)`;class
|
|
146
|
+
AND (max_uses IS NULL OR use_count < max_uses)`;class af{constructor(a){this.db=a,this.consumeStmt=a.prepare(`UPDATE exceptions
|
|
142
147
|
SET use_count = use_count + 1, last_used_at = :now, updated_at = :now
|
|
143
|
-
WHERE id = :id AND ${
|
|
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)
|
|
144
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
|
|
145
150
|
SET revoked_at = :now, revoked_by = :revokedBy,
|
|
146
151
|
revoke_reason = 'superseded by a new grant for the same value',
|
|
@@ -148,7 +153,7 @@
|
|
|
148
153
|
WHERE rule_id = :ruleId AND value_fingerprint = :valueFingerprint
|
|
149
154
|
AND key_version = :keyVersion AND revoked_at IS NULL
|
|
150
155
|
AND ((expires_at IS NOT NULL AND expires_at <= :now)
|
|
151
|
-
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
|
|
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 (
|
|
152
157
|
id, rule_id, category, value_fingerprint, key_version, masked_value,
|
|
153
158
|
scope, expires_at, max_uses, use_count, last_used_at, justification,
|
|
154
159
|
conditions, created_by, created_via, created_at, updated_at
|
|
@@ -156,22 +161,22 @@
|
|
|
156
161
|
:id, :ruleId, :category, :valueFingerprint, :keyVersion, :maskedValue,
|
|
157
162
|
:scope, :expiresAt, :maxUses, 0, NULL, :justification,
|
|
158
163
|
:conditions, :createdBy, :createdVia, :now, :now
|
|
159
|
-
)`).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 ${
|
|
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
|
|
160
165
|
SET revoked_at = :now, revoked_by = :revokedBy, revoke_reason = :reason, updated_at = :now
|
|
161
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
|
|
162
|
-
WHERE key_version = :keyVersion AND ${
|
|
163
|
-
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-
|
|
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
|
|
164
169
|
WHERE blocked_at > :cutoff
|
|
165
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
|
|
166
171
|
WHERE updated_at < :cutoff
|
|
167
172
|
AND (revoked_at IS NOT NULL
|
|
168
173
|
OR (expires_at IS NOT NULL AND expires_at <= :now)
|
|
169
|
-
OR (max_uses IS NOT NULL AND use_count >= max_uses))`).run({cutoff:b-a,now:b}).changes))}}function
|
|
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`(
|
|
170
175
|
SELECT fr.status FROM finding_resolution fr
|
|
171
176
|
WHERE fr.finding_key = ${a}.finding_key
|
|
172
177
|
ORDER BY fr.created_at DESC, fr.rowid DESC
|
|
173
178
|
LIMIT 1
|
|
174
|
-
)`}let
|
|
179
|
+
)`}let ai=`(
|
|
175
180
|
SELECT finding_key, status FROM (
|
|
176
181
|
SELECT fr.finding_key, fr.status,
|
|
177
182
|
ROW_NUMBER() OVER (
|
|
@@ -180,7 +185,7 @@
|
|
|
180
185
|
) AS rn
|
|
181
186
|
FROM finding_resolution fr
|
|
182
187
|
) WHERE rn = 1
|
|
183
|
-
)`;function
|
|
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)
|
|
184
189
|
VALUES (:id, :eventId, :ruleId, :category, :severity, :spanStart, :spanEnd, :maskedMatch, :actionTaken, :confidence, :findingKey,
|
|
185
190
|
(SELECT occurred_at FROM events WHERE id = :eventId))
|
|
186
191
|
ON CONFLICT (finding_key) DO UPDATE SET
|
|
@@ -198,8 +203,15 @@
|
|
|
198
203
|
f.action_taken, f.confidence, e.occurred_at, e.source_tool, e.kind
|
|
199
204
|
FROM findings f JOIN events e ON e.id = f.event_id
|
|
200
205
|
ORDER BY e.occurred_at DESC, f.rowid DESC
|
|
201
|
-
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})))}
|
|
202
|
-
|
|
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
|
|
203
215
|
FROM (
|
|
204
216
|
SELECT f.id AS id, f.rule_id AS rule_id, f.category AS category,
|
|
205
217
|
f.severity AS severity, f.masked_match AS masked_match,
|
|
@@ -207,6 +219,7 @@
|
|
|
207
219
|
e.occurred_at AS occurred_at, e.source_tool AS source_tool,
|
|
208
220
|
json_extract(e.metadata, '$.repo') AS repo,
|
|
209
221
|
json_extract(e.metadata, '$.filePath') AS file,
|
|
222
|
+
json_extract(e.metadata, '$.toolName') AS tool_name,
|
|
210
223
|
e.kind AS kind, f.finding_key AS finding_key,
|
|
211
224
|
latest.status AS latest_status,
|
|
212
225
|
ROW_NUMBER() OVER (
|
|
@@ -215,12 +228,14 @@
|
|
|
215
228
|
) AS rn
|
|
216
229
|
FROM findings f
|
|
217
230
|
JOIN events e ON e.id = f.event_id
|
|
218
|
-
LEFT JOIN ${
|
|
231
|
+
LEFT JOIN ${ai} latest
|
|
219
232
|
ON latest.finding_key = f.finding_key
|
|
233
|
+
${b}
|
|
220
234
|
)
|
|
221
235
|
WHERE rn <= :cap
|
|
222
|
-
ORDER BY occurred_at DESC, id DESC`),{cap:200}).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??"",status:(0,h.xog)({kind:a.kind,findingKey:a.finding_key,latestResolutionStatus:a.latest_status})})),
|
|
223
|
-
group_concat(DISTINCT json_extract(e.metadata, '$.filePath')) AS files
|
|
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,
|
|
224
239
|
count(*) AS instance_count,
|
|
225
240
|
max(e.occurred_at) AS latest_at,
|
|
226
241
|
group_concat(DISTINCT e.source_tool) AS source_tools,
|
|
@@ -230,30 +245,31 @@
|
|
|
230
245
|
(CASE WHEN f.finding_key IS NULL THEN '' ELSE 'k' END) || '|' ||
|
|
231
246
|
coalesce(latest.status, '')
|
|
232
247
|
)) AS status_inputs
|
|
233
|
-
${
|
|
248
|
+
${c}
|
|
234
249
|
FROM findings f
|
|
235
250
|
JOIN events e ON e.id = f.event_id
|
|
236
|
-
LEFT JOIN ${
|
|
251
|
+
LEFT JOIN ${ai} latest
|
|
237
252
|
ON latest.finding_key = f.finding_key
|
|
238
|
-
|
|
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
|
|
239
255
|
FROM findings f
|
|
240
|
-
LEFT JOIN ${
|
|
256
|
+
LEFT JOIN ${ai} latest
|
|
241
257
|
ON latest.finding_key = f.finding_key
|
|
242
258
|
WHERE latest.status IS NULL OR latest.status != 'resolved'
|
|
243
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
|
|
244
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
|
|
245
261
|
FROM findings f JOIN events e ON e.id = f.event_id
|
|
246
262
|
WHERE e.occurred_at >= :since
|
|
247
|
-
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
|
|
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
|
|
248
264
|
(id, rule_id, name, category, severity, definition, version)
|
|
249
265
|
VALUES
|
|
250
|
-
(: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
|
|
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
|
|
251
267
|
(id, audit_event_id, inspection_definition_id, classified_data_id,
|
|
252
268
|
span_start, span_end, masked_match, action_taken, confidence)
|
|
253
269
|
VALUES
|
|
254
270
|
(:id, :auditEventId, :inspectionDefinitionId, :classifiedDataId,
|
|
255
271
|
:spanStart, :spanEnd, :maskedMatch, :actionTaken, :confidence)
|
|
256
|
-
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
|
|
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)
|
|
257
273
|
VALUES (:id, :namespace, :packId, :version, :name, :rulesJson, 1, :now, :now)
|
|
258
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)
|
|
259
275
|
VALUES (:id, :namespace, :packId, :version, :name, :rulesJson, :recordedBy, :now)
|
|
@@ -265,7 +281,7 @@
|
|
|
265
281
|
updated_at = excluded.updated_at
|
|
266
282
|
WHERE available_packs.version <> excluded.version
|
|
267
283
|
OR available_packs.name <> excluded.name
|
|
268
|
-
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()===
|
|
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
|
|
269
285
|
version = (SELECT a.version FROM available_packs a
|
|
270
286
|
WHERE a.namespace = :namespace AND a.pack_id = :packId),
|
|
271
287
|
name = (SELECT a.name FROM available_packs a
|
|
@@ -275,17 +291,17 @@
|
|
|
275
291
|
updated_at = :now
|
|
276
292
|
WHERE namespace = :namespace AND pack_id = :packId
|
|
277
293
|
AND EXISTS (SELECT 1 FROM available_packs a
|
|
278
|
-
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!==
|
|
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,
|
|
279
295
|
coalesce(sum(json_array_length(rules_json)), 0) AS rules,
|
|
280
296
|
coalesce(sum(enabled), 0) AS enabled
|
|
281
|
-
FROM installed_packs`))??{packs:0,rules:0,enabled:0})}countsByPolicyId(){return H(this.db,`SELECT coalesce(policy_id, '${
|
|
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
|
|
282
298
|
FROM installed_packs
|
|
283
299
|
GROUP BY k`)}listByPolicyId(a){return C(this.db.prepare(`SELECT namespace, pack_id AS packId, name, enabled, rules_json AS rulesJson
|
|
284
300
|
FROM installed_packs
|
|
285
|
-
WHERE coalesce(policy_id, '${
|
|
286
|
-
ORDER BY name ASC`),[a]).map(a=>({id:`${a.namespace}/${a.packId}`,name:a.name,ruleCount:
|
|
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
|
|
287
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
|
|
288
|
-
WHERE namespace = :namespace AND pack_id = :packId`).run({enabled:+!!c,now:Date.now(),namespace:a,packId:b}).changes)>0}storedSignature(){return
|
|
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
|
|
289
305
|
(id, object_type, location, title, host_id, attributes, first_seen, last_seen)
|
|
290
306
|
VALUES
|
|
291
307
|
(:id, :objectType, :location, :title, :hostId, :attributes, :firstSeen, :lastSeen)
|
|
@@ -298,13 +314,13 @@
|
|
|
298
314
|
WHERE object_type = :objectType AND title IS NOT NULL
|
|
299
315
|
ORDER BY title`),{objectType:a}).map(a=>a.title)}osVersions(){return C(this.db.prepare(`SELECT DISTINCT os_version AS value FROM inventory
|
|
300
316
|
WHERE object_type = 'host' AND os_version IS NOT NULL
|
|
301
|
-
ORDER BY value`)).map(a=>a.value)}}let
|
|
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
|
|
302
318
|
FROM inventory_asset a
|
|
303
319
|
LEFT JOIN mcp_trust_override o ON o.asset_id = a.id
|
|
304
320
|
WHERE a.asset_type = 'mcp' AND coalesce(o.trust, a.trust) IS NOT NULL
|
|
305
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
|
|
306
322
|
WHERE object_type = 'harness'
|
|
307
|
-
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=
|
|
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)
|
|
308
324
|
VALUES (:id, :projectId, :path, :access, :now, :now)
|
|
309
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)
|
|
310
326
|
VALUES (:id, :assetId, :trust, :now, :now)
|
|
@@ -329,8 +345,8 @@
|
|
|
329
345
|
a.tools_json AS toolsJson, coalesce(o.trust, a.trust) AS effectiveTrust
|
|
330
346
|
FROM inventory_asset a
|
|
331
347
|
LEFT JOIN mcp_trust_override o ON o.asset_id = a.id
|
|
332
|
-
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??
|
|
333
|
-
WHERE ${
|
|
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
|
|
334
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,
|
|
335
351
|
coalesce(o.access, f.default_access) AS eff,
|
|
336
352
|
count(*) AS n,
|
|
@@ -344,12 +360,12 @@
|
|
|
344
360
|
o.access AS overrideAccess
|
|
345
361
|
FROM project_file f
|
|
346
362
|
LEFT JOIN file_access_override o ON o.project_id = f.project_id AND o.path = f.path
|
|
347
|
-
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
|
|
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)
|
|
348
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)
|
|
349
365
|
VALUES (:id, 'global', :target, :action, 1, :now, :now)
|
|
350
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
|
|
351
367
|
WHERE scope='global' AND action IN ('block','redact')
|
|
352
|
-
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
|
|
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
|
|
353
369
|
(id, project_id, path, name, origin, default_access, findings_count, blocked_at, note, created_at, updated_at)
|
|
354
370
|
VALUES
|
|
355
371
|
(:id, :projectId, :path, :name, :origin, :defaultAccess, 0, NULL, NULL, :now, :now)
|
|
@@ -357,7 +373,7 @@
|
|
|
357
373
|
name = excluded.name,
|
|
358
374
|
origin = excluded.origin,
|
|
359
375
|
default_access = excluded.default_access,
|
|
360
|
-
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
|
|
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)
|
|
361
377
|
VALUES (:id, :findingKey, :status, :method, :resolvedAt, :evidence, :createdAt)`),this.latestStmt=a.prepare(`SELECT status, method, resolved_at, evidence
|
|
362
378
|
FROM finding_resolution
|
|
363
379
|
WHERE finding_key = :findingKey
|
|
@@ -368,20 +384,20 @@
|
|
|
368
384
|
WHERE e.kind = 'code_change'
|
|
369
385
|
AND json_extract(e.metadata, '$.filePath') = :path
|
|
370
386
|
AND f.finding_key IS NOT NULL
|
|
371
|
-
AND ${
|
|
387
|
+
AND ${ah("f")} IS NOT 'resolved'`),this.resolvedAtRestStmt=a.prepare(`SELECT DISTINCT f.finding_key AS finding_key
|
|
372
388
|
FROM findings f
|
|
373
389
|
JOIN events e ON e.id = f.event_id
|
|
374
390
|
WHERE e.kind = 'code_change'
|
|
375
391
|
AND json_extract(e.metadata, '$.filePath') = :path
|
|
376
392
|
AND f.finding_key IS NOT NULL
|
|
377
|
-
AND ${
|
|
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 scan_ledger (path, mtime, content_hash, ruleset_hash, scanned_at)
|
|
378
394
|
VALUES (:path, :mtime, :contentHash, :rulesetHash, :scannedAt)
|
|
379
395
|
ON CONFLICT (path) DO UPDATE SET
|
|
380
396
|
mtime = excluded.mtime,
|
|
381
397
|
content_hash = excluded.content_hash,
|
|
382
398
|
ruleset_hash = excluded.ruleset_hash,
|
|
383
399
|
scanned_at = excluded.scanned_at`),this.readStmt=a.prepare(`SELECT path, mtime, content_hash AS contentHash
|
|
384
|
-
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
|
|
400
|
+
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 aO=["critical","high","medium","low"],aP={block:"blocked",redact:"redacted",warn:"warned"},aQ=["blocked","redacted","warned"],aR=[{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}],aS={"7d":"day","30d":"day","3m":"week","6m":"week"};function aT(a){return 864e5*Math.floor(a/864e5)}function aU(a){return new Date(a).toISOString().slice(0,10)}class aV{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,
|
|
385
401
|
COUNT(*) AS count,
|
|
386
402
|
SUM(CASE
|
|
387
403
|
WHEN e.kind != 'code_change' THEN 1
|
|
@@ -397,9 +413,9 @@
|
|
|
397
413
|
END) AS open_at_rest
|
|
398
414
|
FROM findings f
|
|
399
415
|
JOIN events e ON e.id = f.event_id
|
|
400
|
-
LEFT JOIN ${
|
|
416
|
+
LEFT JOIN ${ai} latest
|
|
401
417
|
ON latest.finding_key = f.finding_key
|
|
402
|
-
GROUP BY f.severity`)).map(a=>[a.severity,a])),b=
|
|
418
|
+
GROUP BY f.severity`)).map(a=>[a.severity,a])),b=aO.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:aR.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=aP[a.actionTaken];b&&(a.occurredAt>=d?f[b]++:g[b]++)}let i=aQ.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=aS[a],c=("day"===b?1:7)*864e5,d=h.eI7[a],e="day"===b?d:Math.ceil(d/7),f=this.now(),g=aT(f)-(d-1)*864e5,i=this.findingsInRange(g,f),j=Array.from({length:e},(a,b)=>({timestamp:aU(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=aS[a],c=("day"===b?1:7)*864e5,d=h.eI7[a],e="day"===b?d:Math.ceil(d/7),f=this.now(),g=aT(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,
|
|
403
419
|
(
|
|
404
420
|
SELECT fr.status FROM finding_resolution fr
|
|
405
421
|
WHERE fr.finding_key = f.finding_key
|
|
@@ -424,7 +440,7 @@
|
|
|
424
440
|
SELECT 1 FROM finding_resolution fr
|
|
425
441
|
WHERE fr.finding_key = f.finding_key
|
|
426
442
|
AND fr.resolved_at >= :windowStart
|
|
427
|
-
)`),{windowStart:g}),
|
|
443
|
+
)`),{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 aO){let c=`${String(b)}:${a}`,e=k.get(c)??0;d[a]=e>0?(j.get(c)??0)/e:null}return{timestamp:aU(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
|
|
428
444
|
FROM findings f JOIN events e ON e.id = f.event_id
|
|
429
445
|
WHERE e.occurred_at >= :from AND e.occurred_at < :to
|
|
430
446
|
AND json_extract(e.metadata, '$.repo') IS NOT NULL
|
|
@@ -546,7 +562,7 @@ BEGIN SELECT RAISE(IGNORE); END`),function(a){let b=new Set(r(a,"audit_events",{
|
|
|
546
562
|
ON CONFLICT(id) DO UPDATE SET
|
|
547
563
|
first_seen = min(first_seen, excluded.first_seen),
|
|
548
564
|
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 = ?
|
|
549
|
-
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
|
|
565
|
+
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 aN(g),A=new af(g),B=new aM(g),C=new aV(g),D=new _(g),E=new aZ(g),F=new aK(m),G=new as(g),H=new aI(g),I=new aL(g),J=new T(g),K=new a$(g),L=new U(g),M=new V(g),N=new al(g),O=new am(g),P=new X(g);return l.seedDefaults(),{events:j,findings:k,policies:l,installedPacks:m,scanLedger:s,exceptions:A,resolutions:B,security:C,detections:D,shares:E,policyCatalog:F,inventory:G,inventoryAssets:H,activity:J,sourceProject:K,auditEvents:L,classifiedData:M,inspectionDefinitions:N,inspectionFindings:O,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=G.upsert(a.host,c)),a.harness&&(b.harnessId=G.upsert(a_(a.harness,b.hostId),c)),b.accountId=G.upsert(a_({objectType:"user",identityKey:"local",attributes:{source:"local"}},b.hostId),c),a.project&&(b.sourceProjectId=K.upsert(a.project,c))})?b:{}},recordConfigScan:function(a){o(g,()=>{let b=(0,h.I8t)(a.scanEvent.startedAt);for(let c of a.items)G.upsert(c,b);L.insertAuditEvent(a.scanEvent);let c=new Map;for(let b of a.definitions??[])c.set(`${b.ruleId}@${b.version}`,N.upsert(b));for(let b of a.findings??[]){let e=c.get(`${b.ruleId}@${b.version}`);e&&O.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,()=>{I.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
|
|
550
566
|
WHERE id <> :canonicalId
|
|
551
567
|
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:()=>P.report(),facets:function(){return{hosts:G.distinctTitles("host"),harnesses:G.distinctTitles("harness"),osVersions:G.osVersions(),projects:K.distinctNames()}},purgeSampleData:()=>{!function(a){try{if(!a.prepare(`SELECT (
|
|
552
568
|
EXISTS(SELECT 1 FROM share_destination WHERE provenance = 'sample')
|
|
@@ -563,4 +579,4 @@ BEGIN SELECT RAISE(IGNORE); END`),function(a){let b=new Set(r(a,"audit_events",{
|
|
|
563
579
|
value TEXT NOT NULL
|
|
564
580
|
)`),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 a2(a){return(0,f.join)(a,"exception.key")}function a3(a,b){y(a);let c=a2(a),d=`${c}.tmp`,f=JSON.stringify({version:b.version,material:b.material.toString("base64")});(0,e.writeFileSync)(d,`${f}
|
|
565
581
|
`,{mode:384}),(0,e.renameSync)(d,c);try{(0,e.chmodSync)(c,384)}catch{}return b}function a4(a){let b;try{b=(0,e.readFileSync)(a2(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 a5(a){let b=a4(a);if(b){try{(0,e.chmodSync)(a2(a),384)}catch{}return b}return a3(a,{version:1,material:(0,d.randomBytes)(32)})}function a6(a){let b=a4(a);return a3(a,{version:(b?.version??0)+1,material:(0,d.randomBytes)(32)})}function a7(a,b){return(0,d.createHmac)("sha256",a.material).update(b,"utf8").digest("hex")}c(51455);var a8=c(48161);function a9(){return(0,f.join)((0,a8.homedir)(),".aka")}function ba(a=a9()){return(0,f.join)(a,"settings")}function bb(a=a9()){return(0,f.join)(a,"data")}function bc(a,b=a9()){let c=ba(b),d=function(a=a9()){let b=function(a){let b;try{b=(0,e.readFileSync)(a,"utf8")}catch{return null}return B(b)??null}((0,f.join)(ba(a),"settings.json"));if(!b)return(0,h.i1j)();try{return h.hd_.parse(b)}catch{return(0,h.i1j)()}}(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)}
|
|
566
|
-
`,{mode:384}),(0,e.renameSync)(j,i),g}}};
|
|
582
|
+
`,{mode:384}),(0,e.renameSync)(j,i),g}},85674:(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:()=>cF,iRC:()=>aJ,GCf:()=>E,TUN:()=>O,SHn:()=>au,rov:()=>bL,V0H:()=>a_,PEm:()=>aW,eI7:()=>bZ,cqq:()=>F,jON:()=>aS,lFU:()=>d,PhW:()=>ab,uQz:()=>bK,BIx:()=>aq,hd_:()=>bM,tXp:()=>bE,plk:()=>bu,mAj:()=>bz,Fnc:()=>cW,ryv:()=>r,tTV:()=>aa,rG:()=>bH,q_t:()=>p,i1j:()=>bN,xog:()=>by,hzO:()=>cY,by7:()=>cX,Gw9:()=>cU,q11:()=>h,U7X:()=>w,y_0:()=>cV,I8t:()=>g,DhA:()=>a6,WSs:()=>c_,a45:()=>bs,N6N:()=>f,A6E:()=>bG,pnU:()=>bt,V9M:()=>bS,$BP:()=>bT,yaP:()=>bO,zw:()=>bP,JAl:()=>bU,$3l:()=>bV,gzP:()=>bQ,QCA:()=>bR,C05:()=>cZ});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"}],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"});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(),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)}}function bv(a){return({log:"monitored",block:"blocked",redact:"redacted",warn:"warned",allow:"allowed"})[a]??"allowed"}function bw(a){return P[a]??"api"}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 bx=["open","handled","dismissed","resolved"];function by(a){return"code_change"!==a.kind?"handled":null===a.findingKey?"open":"resolved"===a.latestResolutionStatus?"resolved":"dismissed"===a.latestResolutionStatus?"dismissed":"open"}function bz(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:bw(a.sourceTool),repo:a.repo,file:a.file,...void 0===a.toolName?{}:{toolName:a.toolName},action:bv(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(bw))].sort():f.map(a=>a.provider)).filter(a=>!k.has(a)&&(k.add(a),!0)),m=new Set(i?i.actionsTaken.map(bv):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 bx)if(b.has(a))return a}}(i?i.statusInputs.map(by):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&&(bC.set(u,[...m]),void 0!==i.searchText&&bA.set(u,bB(u,i.searchText))),g.push(u)}return g}let bA=new WeakMap;function bB(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 bC=new WeakMap;function bD(a){let b=bC.get(a);if(void 0!==b)return b;let c=[...new Set(a.instances.map(a=>a.action))];return bC.set(a,c),c}function bE(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=>bD(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=bA.get(a);if(void 0!==b)return b;let c=bB(a);return bA.set(a,c),c})(b).includes(a))}return c}let bF={critical:0,high:1,medium:2,low:3};function bG(a){return[...a].sort((a,b)=>{let c=(bF[a.severity]??-1)-(bF[b.severity]??-1);return 0!==c?c:b.latestDetectedAt.localeCompare(a.latestDetectedAt)})}function bH(a,b){let c=bE(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=bE(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=bE(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 bD(a))h.set(b,(h.get(b)??0)+1);let i=bE(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 bI=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(bI)}).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 bJ=s.k5(["standalone"]),bK=s.k5(["redact","warn"]),bL=s.k5(["full","session-only"]),bM=s.Ik({specVersion:s.ai().int().positive().default(2),runMode:s.vk(a=>"attached"===a?"standalone":a,bJ.default("standalone")),policy:bK.default("redact"),historicalAccess:bL.default("session-only"),onboardedAt:t.w$().optional()});function bN(){return bM.parse({})}function bO(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 bP(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 bQ(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 bR(a,b,c){return{id:b,url:a.url,name:a.name??null,attributes:JSON.stringify(a.attributes),firstSeen:c,lastSeen:c}}function bS(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 bT(a,b){return{id:b,class:a.class,label:a.label??null,attributes:a.attributes?JSON.stringify(a.attributes):null}}function bU(a,b){return{id:b,ruleId:a.ruleId,name:a.name,category:a.category,severity:a.severity,definition:a.definition,version:a.version}}function bV(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 bW=s.Ik({path:s.Yj().min(1),name:s.Yj().min(1),origin:ap,defaultAccess:ao});s.Ik({files:s.YO(bW),truncated:s.zM(),scannedAt:s.Yj()});let bX=["7d","30d","3m","6m"],bY=s.k5(bX).meta({id:"TimeRange"}),bZ={"7d":7,"30d":30,"3m":90,"6m":180};bY.catch("7d");let b$=s.k5(["still-valid","unknown","invalid"]),b_=s.Ik({filePath:s.Yj(),span:z.optional()}).strict(),b0=s.Ik({provider:s.Yj(),maskedToken:s.Yj(),where:b_,state:b$,observedAt:t.w$().optional()}).strict();s.Ik({provider:s.Yj(),maskedToken:s.Yj(),consolePath:s.Yj(),occurrenceSpread:s.ai().int().positive()}).strict();let b1=s.k5(["redact-rotation-checklist","redact-only","set-secret-redact","leave"]),b2=s.k5(["first-run","pre-push","secret-scan"]);s.Ik({entrySource:b2}).strict();let b3=s.Ik({id:b1,label:s.Yj()}),b4=s.Ik({kind:s.eu("decision"),entrySource:b2,secretCount:s.ai().int().positive(),prompt:s.Yj(),options:s.PV([b3.extend({id:s.eu("redact-rotation-checklist")}),b3.extend({id:s.eu("redact-only")}),b3.extend({id:s.eu("set-secret-redact")}),b3.extend({id:s.eu("leave")})])}),b5=s.Ik({kind:s.eu("no-decision")});s.gM("kind",[b4,b5]),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 b6=s.Ik({ruleId:s.Yj(),category:v,severity:w,span:z,confidence:s.ai().min(0).max(1),match:s.Yj()}).meta({id:"RuleTestMatch"}),b7=s.Ik({label:s.Yj(),shouldMatch:s.zM(),didMatch:s.zM(),passed:s.zM(),matches:s.YO(b6)}).meta({id:"FixtureResult"});s.Ik({adhoc:s.Ik({matches:s.YO(b6)}).optional(),fixtures:s.YO(b7),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 b8=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(b8)}).meta({id:"SeveritySummaryResponse"}),s.Ik({range:s.k5(bX).default("7d")});let b9=s.k5(["blocked","redacted","warned"]).meta({id:"EnforcementActionKind"}),ca=s.Ik({kind:b9,count:s.ai().int().nonnegative(),delta:s.ai().int()}).meta({id:"EnforcementAction"});s.Ik({range:bY,total:s.ai().int().nonnegative(),actions:s.YO(ca)}).meta({id:"EnforcementActionsResponse"});let cb=s.k5(["day","week"]).meta({id:"TimeseriesGranularity"}),cc=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:bY,granularity:cb,points:s.YO(cc)}).meta({id:"FindingsTimeseriesResponse"});let cd=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:bY,granularity:cb,points:s.YO(cd)}).meta({id:"MttrTrendResponse"});let ce=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(ce)}).meta({id:"RecentlyResolvedResponse"});let cf=["repo","user"],cg=s.k5(cf).meta({id:"SourceKind"}),ch=s.Ik({id:s.Yj(),name:s.Yj(),kind:cg,findingsCount:s.ai().int().nonnegative()}).meta({id:"TopSource"});s.Ik({range:bY,items:s.YO(ch)}).meta({id:"TopSourcesResponse"}),s.Ik({range:s.k5(bX).default("7d"),limit:u.ai().int().min(1).max(50).default(5),kind:s.k5(cf).optional()});let ci=s.k5(["claudecode","cursor","codex","chatgpt","copilot","api"]).meta({id:"Provider"}),cj=s.Ik({provider:ci,coverage:s.ai().int().min(0).max(100),supported:s.zM()}).meta({id:"ScanCoverageProvider"});s.Ik({range:bY,providers:s.YO(cj)}).meta({id:"ScanCoverageResponse"});let ck=s.k5(["repo","user","team","policy","share","rule"]).meta({id:"SubjectType"}),cl=s.Ik({type:ck,id:s.Yj(),label:s.Yj()}).meta({id:"RecommendationSubject"}),cm=s.k5(["apply","navigate"]).meta({id:"RecommendationActionMode"}),cn=s.Ik({mode:cm,type:s.Yj(),label:s.Yj(),href:s.Yj().optional(),policyId:s.Yj().optional(),teamId:s.Yj().optional()}).meta({id:"RecommendationAction"}),co=s.Ik({id:s.Yj(),category:s.Yj(),severity:w,title:s.Yj(),description:s.Yj(),subjects:s.YO(cl),action:cn}).meta({id:"RecommendedAction"});s.Ik({items:s.YO(co)}).meta({id:"RecommendedActionsResponse"}),s.Ik({limit:u.ai().int().min(1).max(20).default(3)});let cp=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:cp}).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 cq=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(cq),notes:s.Yj()});let cr=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"]}),cs=s.Ik({ruleId:s.Yj(),category:v,valueFingerprint:s.Yj(),keyVersion:s.ai().int().nonnegative()}),ct=s.Ik({pattern:s.Yj(),count:s.ai().int().nonnegative(),values:s.YO(cs).min(1)}),cu=s.Ik({category:v,count:s.ai().int().nonnegative(),egress:s.zM()}),cv=s.Ik({counts:cr,routineCategories:s.YO(v),surfacedCategories:s.YO(v),findingKinds:s.YO(cu),posture:s.g1(v,a0),maskedFindings:s.YO(b0).optional(),falsePositivePatterns:s.YO(ct).optional()}),cw=cq.pick({category:!0,genuineCount:!0,fpCount:!0}).extend({egress:s.zM()});s.Ik({categories:s.YO(cw),posture:s.g1(v,a0)}),s.Ik({frame:cv,copy:s.Yj()}),s.k5(["scan","floor"]);let cx=s.Ik({id:s.k5(["enter-remediation","open-dashboard","not-now"]),label:s.Yj()}),cy=s.PV([cx.extend({id:s.eu("open-dashboard")}),cx.extend({id:s.eu("not-now")})]),cz=s.PV([cx.extend({id:s.eu("enter-remediation")}),cx.extend({id:s.eu("open-dashboard")}),cx.extend({id:s.eu("not-now")})]);s.Ik({worthALook:s.ai().int().nonnegative(),liveKeys:s.ai().int().nonnegative().optional(),options:s.KC([cy,cz])}).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 cA=s.k5(["provider","internal","ip"]).meta({id:"DestinationKind"}),cB=s.k5(["https","http","sftp","grpc","smtp"]).meta({id:"Transport"}),cC=s.k5(["secrets","pii","customer","source","telemetry","logs","metrics","none"]).meta({id:"DataClass"}),cD=cC.options,cE=s.k5(["recognized","internal","unverified","ip"]).meta({id:"ShareTrustLevel"}),cF=s.k5(["allow","block"]).meta({id:"EgressDecision"}),cG=s.k5(["allowed","blocked","review"]).meta({id:"EgressStatus"}),cH=s.k5(["raw_ip","unverified_domain","plaintext_transport"]).meta({id:"ReviewReason"}),cI=s.k5(["GET","POST","PUT","DELETE"]).meta({id:"HttpMethod"}),cJ=s.Ik({needsReview:s.zM(),reasons:s.YO(cH)}).meta({id:"ReviewInfo"}),cK=s.Ik({port:s.ai().int().nullable(),geo:s.Yj().nullable(),ptr:s.Yj().nullable()}).meta({id:"DestinationNetwork"}),cL=s.Ik({id:s.Yj(),method:cI,transport:cB,url:s.Yj(),template:s.zM(),dataClass:cC,lastSeen:t.w$(),callSiteCount:s.ai().int().nonnegative()}).meta({id:"EndpointSummary"}),cM=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"}),cN=cL.extend({sites:s.YO(cM)}).meta({id:"EndpointWithSites"}),cO=s.Ik({id:s.Yj(),kind:cA,name:s.Yj(),host:s.Yj(),category:s.Yj(),trust:cE,status:cG,isCustom:s.zM(),lastSeen:t.w$(),endpointCount:s.ai().int().nonnegative(),callSiteCount:s.ai().int().nonnegative(),transports:s.YO(cB),dataClasses:s.YO(cC),review:cJ,network:cK.nullable(),endpoints:s.YO(cL)}).meta({id:"ShareDestinationSummary"});cO.omit({endpointCount:!0,callSiteCount:!0,endpoints:!0}).extend({note:s.Yj().nullable(),endpoints:s.YO(cN)}).meta({id:"ShareDestinationDetail"});let cP=s.Ik({id:s.Yj(),kind:cA,name:s.Yj(),host:s.Yj(),trust:cE,status:cG,review:cJ,topDataClass:cC,callSiteCount:s.ai().int().nonnegative(),lastSeen:t.w$()}).meta({id:"ReviewDestination"}),cQ=s.Ik({kind:cA,total:s.ai().int().nonnegative(),items:s.YO(cO)}).meta({id:"ShareDestinationGroup"});s.Ik({groups:s.YO(cQ)}).meta({id:"ListShareDestinationsResponse"}),s.Ik({items:s.YO(cP)}).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(),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:cF.nullable()}).meta({id:"SetEgressDecisionBody"}),s.Ik({destination:cO}).meta({id:"SetEgressDecisionResponse"}),s.Ik({q:s.Yj().optional(),kind:s.YO(cA).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(cA).optional()});let cR=new Set(["recognized","internal"]);function cS(a){return cR.has(a)?"allowed":"review"}function cT(a){return"block"===a?"blocked":"allowed"}function cU(a,b){return null===b?cS(a):cT(b)}function cV(a,b){return null!==b&&cT(b)!==cS(a)}function cW(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")&&c.push("plaintext_transport"),c}(a,b);return{needsReview:c.length>0,reasons:c}}function cX(a){return Array.from(new Set(a))}function cY(a){let b=new Set(a);return cD.filter(a=>b.has(a))}function cZ(a){return cY(a)[0]??"none"}let c$={raw_ip:0,unverified_domain:1,plaintext_transport:2};function c_(a){return 0===a.length?1/0:Math.min(...a.map(a=>c$[a]))}}};
|