@akasecurity/ai-tc-claude-code 0.9.9 → 0.9.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -493,7 +493,7 @@ var require_ignore = __commonJS({
493
493
 
494
494
  // ../../packages/plugin-sdk/src/config.ts
495
495
  import { existsSync as existsSync7 } from "fs";
496
- import { join as join12 } from "path";
496
+ import { join as join13 } from "path";
497
497
 
498
498
  // ../../packages/persistence/src/attached-derived.ts
499
499
  import { rmSync } from "fs";
@@ -21798,6 +21798,26 @@ var AttachTokenResponse = external_exports.union([
21798
21798
  AttachTokenExpired,
21799
21799
  external_exports.object({ status: printable(64) })
21800
21800
  ]);
21801
+ var DeviceCommandKind = external_exports.enum(["shares_rescan"]);
21802
+ var DeviceCommand = external_exports.object({
21803
+ id: printable(128).min(1),
21804
+ kind: DeviceCommandKind,
21805
+ issuedAt: printable(64).min(1),
21806
+ expiresAt: printable(64).min(1)
21807
+ }).strict();
21808
+ var DeviceCommandPollResponse = external_exports.object({ command: DeviceCommand.nullable() });
21809
+ var DeviceCommandFailureReason = external_exports.enum(["scan_failed", "no_projects", "expired"]);
21810
+ var DeviceCommandAckBody = external_exports.discriminatedUnion("outcome", [
21811
+ external_exports.object({
21812
+ outcome: external_exports.literal("reported"),
21813
+ projectsScanned: external_exports.number().int().nonnegative()
21814
+ }).strict(),
21815
+ external_exports.object({
21816
+ outcome: external_exports.literal("failed"),
21817
+ reason: DeviceCommandFailureReason,
21818
+ projectsScanned: external_exports.number().int().nonnegative()
21819
+ }).strict()
21820
+ ]);
21801
21821
 
21802
21822
  // ../../packages/schema/src/zod/registry.ts
21803
21823
  var Namespace = external_exports.string().regex(/^[a-z][a-z0-9-]*$/);
@@ -21964,7 +21984,7 @@ var PackManifest = external_exports.object({
21964
21984
  }).meta({ id: "PackManifest" });
21965
21985
 
21966
21986
  // ../../packages/schema/src/zod/detection.ts
21967
- var OriginEnum = external_exports.enum(["library"]).meta({ id: "OriginEnum" });
21987
+ var OriginEnum = external_exports.enum(["library", "custom"]).meta({ id: "OriginEnum" });
21968
21988
  var DetectionFilterEnum = external_exports.enum(["all", "library", "custom", "customized", "updates"]);
21969
21989
  var LibraryStateEnum = external_exports.enum(["new", "imported", "update"]).meta({ id: "LibraryStateEnum" });
21970
21990
  var DetectionCounts = external_exports.object({
@@ -22159,8 +22179,9 @@ var Event = external_exports.object({
22159
22179
  metadata: EventMetadata.optional()
22160
22180
  }).meta({ id: "Event" });
22161
22181
  var IngestEvent = Event.meta({ id: "IngestEvent" });
22182
+ var INGEST_BATCH_MAX = 100;
22162
22183
  var IngestBatch = external_exports.object({
22163
- events: external_exports.array(IngestEvent).min(1).max(100),
22184
+ events: external_exports.array(IngestEvent).min(1).max(INGEST_BATCH_MAX),
22164
22185
  // Dedup policy for this batch. Id-dedup ALWAYS applies. 'content-hash'
22165
22186
  // additionally rejects any event whose contentHash the store has already
22166
22187
  // recorded — for re-runnable bulk ingest (worktree scan, transcript
@@ -22286,6 +22307,230 @@ var PatchInstalledPackRequest = external_exports.object({
22286
22307
  message: "At least one field must be provided"
22287
22308
  }).meta({ id: "PatchInstalledPackRequest" });
22288
22309
 
22310
+ // ../../packages/schema/src/zod/policy.ts
22311
+ var PolicyScope = external_exports.enum(["global", "repo", "user"]).meta({ id: "PolicyScope" });
22312
+ var PolicyTarget = external_exports.union([external_exports.object({ ruleId: external_exports.string() }), external_exports.object({ category: DetectionCategory })]).meta({ id: "PolicyTarget" });
22313
+ var PolicyKind = external_exports.enum(["builtin", "custom"]).meta({ id: "PolicyKind" });
22314
+ var PolicyProvenance = external_exports.enum(["builtin", "authored"]).meta({ id: "PolicyProvenance" });
22315
+ var Policy = external_exports.object({
22316
+ id: external_exports.guid(),
22317
+ scope: PolicyScope,
22318
+ target: PolicyTarget,
22319
+ action: ActionTaken,
22320
+ enabled: external_exports.boolean().default(true),
22321
+ customKeywords: external_exports.array(external_exports.string()).optional(),
22322
+ // Display name — optional so older policy rows without name still parse.
22323
+ // Added for the findings API (policy.name column migration).
22324
+ name: external_exports.string().optional(),
22325
+ // Whether an AUTHORED policy governs this row's target — not a claim about
22326
+ // which row this is. A producer that collapses several rows onto one target
22327
+ // must carry the marker onto whichever row survives, or the collapse decides
22328
+ // the answer; a survivor may therefore be a built-in expansion still marked
22329
+ // 'authored' because an authored sibling targeted the same thing.
22330
+ // Optional so an older producer — and an older on-disk cache — still parses;
22331
+ // absent reads as 'builtin', which is the behaviour that predates the field.
22332
+ //
22333
+ // Deliberately NOT `kind`/PolicyKind: that name and that enum answer which
22334
+ // built-in archetype catalog entry a policy is, which every catalog surface
22335
+ // reads and which a caller may state. This one is a statement the PRODUCER
22336
+ // of a bundle makes about a row, and only the bundle builder ever stamps it
22337
+ // — the CRUD routes neither accept nor set it.
22338
+ //
22339
+ // A device consumes this in exactly one direction: an 'authored' policy
22340
+ // arriving from a control plane marks the rules it targets as not
22341
+ // locally re-assignable. That can only ever ADD a refusal, never relax one,
22342
+ // which is what makes it safe to honour from an unsigned cache — the same
22343
+ // test `prohibitedModels` passes and `reversibleRuleIds` fails.
22344
+ provenance: PolicyProvenance.optional()
22345
+ }).meta({ id: "Policy" });
22346
+ var PolicyBundle = external_exports.object({
22347
+ version: external_exports.string(),
22348
+ policies: external_exports.array(Policy),
22349
+ // Rules from the installed marketplace packs (snapshotted by the
22350
+ // control plane). The plugin registers these in addition to its bundled
22351
+ // packs. Optional so older backends — and older on-disk caches — that omit
22352
+ // the field still parse; consumers read `bundle.rules ?? []`.
22353
+ rules: external_exports.array(Rule).optional(),
22354
+ // When true, `rules` IS the complete effective ruleset and the runtime must
22355
+ // NOT merge its compiled-in bundled packs — the standalone gateway sets this
22356
+ // after reading the user's installed snapshot (installed_packs, enabled
22357
+ // packs only), which is how detection updates stay manual: new bundled
22358
+ // rules run only after the user applies the pack update. Absent/false keeps
22359
+ // the historical composition (bundled packs + rules) — older caches.
22360
+ rulesComplete: external_exports.boolean().optional(),
22361
+ // Active detection exceptions, evaluation subset only (see
22362
+ // ExceptionBundleEntry). Optional so older bundle producers — and older
22363
+ // on-disk caches — that omit the field still parse; consumers read
22364
+ // `bundle.exceptions ?? []`.
22365
+ exceptions: external_exports.array(ExceptionBundleEntry).optional(),
22366
+ // Rule ids whose pack is assigned a REVERSIBLE archetype (Redact & Vault).
22367
+ // A second axis over the same `redact` action, carried beside the policies
22368
+ // rather than on them: nothing writes ruleId-targeted policies to disk, so
22369
+ // widening Policy itself would change a persisted shape to express something
22370
+ // only the in-memory bundle needs. Optional so an older producer — or an
22371
+ // older on-disk cache — still parses; consumers read `?? []` and get the
22372
+ // pre-existing one-way behaviour, which is the safe direction to default.
22373
+ reversibleRuleIds: external_exports.array(external_exports.string()).optional(),
22374
+ // Installed pack version, keyed by ruleId, for rules in `rules` that came
22375
+ // from a versioned installed pack. Optional so older backends — and older
22376
+ // on-disk caches — that omit the field still parse; consumers fall back to
22377
+ // the rule's own spec version. NOT the bundle version above — see
22378
+ // installedRuleset's ruleVersions for the source of truth.
22379
+ ruleVersions: external_exports.record(external_exports.string(), external_exports.string()).optional(),
22380
+ // Model ids (the raw `model` string a harness reports, e.g.
22381
+ // `claude-opus-4-1`) the tenant has PROHIBITED. The plugin refuses to switch
22382
+ // a session onto one (PreModelSwitch) and refuses a turn that would run on
22383
+ // one (UserPromptSubmit). Optional so an older backend — and an older
22384
+ // on-disk cache — still parses; consumers read `?? []`, which is the
22385
+ // unenforced behaviour that predates this field and the safe direction to
22386
+ // default.
22387
+ //
22388
+ // Ids, not display names: the governance decision is keyed on the exact
22389
+ // string the harness reports (`model_status_override.versionId` in the
22390
+ // control plane), so no name resolution stands between the decision and the
22391
+ // comparison.
22392
+ prohibitedModels: external_exports.array(external_exports.string()).optional(),
22393
+ customKeywords: external_exports.array(external_exports.string()),
22394
+ fetchedAt: external_exports.iso.datetime()
22395
+ }).meta({ id: "PolicyBundle" });
22396
+ var POLICY_BUNDLE_SHAPE_ID = [
22397
+ ...Object.keys(PolicyBundle.shape),
22398
+ ...Object.keys(Policy.shape).map((key) => `policies.${key}`),
22399
+ ...PolicyTarget.options.flatMap((member) => "shape" in member ? Object.keys(member.shape) : []).map((key) => `policies.target.${key}`),
22400
+ ...Object.keys(ExceptionBundleEntry.shape).map((key) => `exceptions.${key}`)
22401
+ ].sort().join(",");
22402
+ var OBSERVE_ONLY_CATEGORIES = ["config"];
22403
+ var ENFORCEABLE_CATEGORIES = DetectionCategory.options.filter((c) => !OBSERVE_ONLY_CATEGORIES.includes(c));
22404
+ var CATEGORY_PEAK_SEVERITY = {
22405
+ secret: "critical",
22406
+ financial: "critical",
22407
+ // core-financial/credit-card
22408
+ code_flaw: "critical",
22409
+ pii: "high",
22410
+ phi: "high",
22411
+ custom: "high",
22412
+ // user-defined; conservative
22413
+ code_context: "low",
22414
+ config: "low"
22415
+ // observe-only; floors to monitor regardless
22416
+ };
22417
+ function severityFloorPolicy(category) {
22418
+ if (OBSERVE_ONLY_CATEGORIES.includes(category)) return "monitor";
22419
+ const peak = CATEGORY_PEAK_SEVERITY[category];
22420
+ return peak === "critical" || peak === "high" ? "warn" : "monitor";
22421
+ }
22422
+ function severityFloorPosture() {
22423
+ const out = {};
22424
+ for (const c of DetectionCategory.options) out[c] = severityFloorPolicy(c);
22425
+ return out;
22426
+ }
22427
+ var KNOWN_BUILTIN_IDS = ["monitor", "warn", "redact", "vault", "block"];
22428
+ var BuiltinPolicyId = external_exports.enum(KNOWN_BUILTIN_IDS).meta({ id: "BuiltinPolicyId" });
22429
+ var RedactFallback = BuiltinPolicyId.extract(["monitor", "warn", "block"]).meta({
22430
+ id: "RedactFallback"
22431
+ });
22432
+ var BUILTIN_POLICY_SPECS = {
22433
+ monitor: {
22434
+ name: "Monitor",
22435
+ action: "log",
22436
+ reversible: false,
22437
+ description: "Log every match for audit. The request is allowed through untouched."
22438
+ },
22439
+ warn: {
22440
+ name: "Warn",
22441
+ action: "warn",
22442
+ reversible: false,
22443
+ description: "Allow the request, but warn the user inline before it is sent."
22444
+ },
22445
+ redact: {
22446
+ name: "Redact",
22447
+ action: "redact",
22448
+ reversible: false,
22449
+ description: "Strip the matched value from the request and destroy it, then continue. What was removed cannot be recovered."
22450
+ },
22451
+ vault: {
22452
+ name: "Redact & Vault",
22453
+ action: "redact",
22454
+ reversible: true,
22455
+ description: "Strip the matched value from the request and keep an encrypted, recoverable copy in the local vault, leaving a pointer in its place. Needs the vault consent granted under Settings; without it this behaves as Redact."
22456
+ },
22457
+ block: {
22458
+ name: "Block",
22459
+ action: "block",
22460
+ reversible: false,
22461
+ description: "Refuse the request entirely whenever any rule in this detection matches."
22462
+ }
22463
+ };
22464
+ function builtinPolicyToAction(id) {
22465
+ return BUILTIN_POLICY_SPECS[id].action;
22466
+ }
22467
+ var PALETTE_WEAKEST_FIRST = [
22468
+ ...new Set(KNOWN_BUILTIN_IDS.map(builtinPolicyToAction))
22469
+ ];
22470
+ var BELOW_PALETTE = ACTION_TAKEN_KEYS.filter(
22471
+ (action) => !PALETTE_WEAKEST_FIRST.includes(action)
22472
+ );
22473
+ var ACTION_STRENGTH_ORDER = [
22474
+ ...BELOW_PALETTE,
22475
+ ...PALETTE_WEAKEST_FIRST
22476
+ ];
22477
+ var PackPolicyFloor = external_exports.object({
22478
+ /**
22479
+ * The weakest archetype the device may assign. Stated as a BuiltinPolicyId
22480
+ * rather than a raw ActionTaken because that is the vocabulary the user
22481
+ * picks from — a floor a UI cannot name is one it cannot explain.
22482
+ */
22483
+ floor: BuiltinPolicyId,
22484
+ /**
22485
+ * True when the organization AUTHORED a policy governing this pack rather
22486
+ * than stating a minimum: it gave the answer, so the pack is not
22487
+ * re-assignable locally in either direction.
22488
+ */
22489
+ locked: external_exports.boolean()
22490
+ }).describe("PackPolicyFloor");
22491
+ var CATEGORY_EXPRESSIBLE_IDS = KNOWN_BUILTIN_IDS.filter(
22492
+ (id) => !BUILTIN_POLICY_SPECS[id].reversible
22493
+ );
22494
+ var CATEGORY_INEXPRESSIBLE_IDS = KNOWN_BUILTIN_IDS.filter(
22495
+ (id) => BUILTIN_POLICY_SPECS[id].reversible
22496
+ );
22497
+ var CategoryPolicyId = external_exports.enum(CATEGORY_EXPRESSIBLE_IDS).meta({ id: "CategoryPolicyId" });
22498
+ var DEFAULT_ACTIONS = Object.fromEntries(
22499
+ DetectionCategory.options.map((c) => [c, builtinPolicyToAction(severityFloorPolicy(c))])
22500
+ );
22501
+ var BUILTIN_POLICIES = Object.fromEntries(
22502
+ KNOWN_BUILTIN_IDS.map((id) => [id, { id, ...BUILTIN_POLICY_SPECS[id] }])
22503
+ );
22504
+ var UsedByItem = external_exports.object({
22505
+ id: external_exports.string(),
22506
+ name: external_exports.string(),
22507
+ ruleCount: external_exports.number().int().nonnegative(),
22508
+ enabled: external_exports.boolean()
22509
+ }).meta({ id: "UsedByItem" });
22510
+ var PolicyListItem = external_exports.object({
22511
+ id: external_exports.string(),
22512
+ kind: PolicyKind,
22513
+ name: external_exports.string(),
22514
+ enabled: external_exports.boolean(),
22515
+ usedByCount: external_exports.number().int().nonnegative()
22516
+ }).meta({ id: "PolicyListItem" });
22517
+ var ListPoliciesResponse = external_exports.object({ items: external_exports.array(PolicyListItem) }).meta({ id: "ListPoliciesResponse" });
22518
+ var PolicyDetail = external_exports.object({
22519
+ specVersion: external_exports.literal(1),
22520
+ id: external_exports.string(),
22521
+ kind: PolicyKind,
22522
+ name: external_exports.string(),
22523
+ enabled: external_exports.boolean(),
22524
+ description: external_exports.string(),
22525
+ usedBy: external_exports.array(UsedByItem)
22526
+ }).meta({ id: "PolicyDetail" });
22527
+ var PolicyStatsResponse = external_exports.object({
22528
+ policies: external_exports.number().int().nonnegative(),
22529
+ builtin: external_exports.number().int().nonnegative(),
22530
+ custom: external_exports.number().int().nonnegative(),
22531
+ detectionsGoverned: external_exports.number().int().nonnegative()
22532
+ }).meta({ id: "PolicyStatsResponse" });
22533
+
22289
22534
  // ../../packages/schema/src/zod/vault.ts
22290
22535
  var CATEGORY_ALTERNATION = DetectionCategory.options.join("|");
22291
22536
  var POINTER_TOKEN_PATTERN = new RegExp(
@@ -22322,6 +22567,14 @@ var VaultEntry = external_exports.object({
22322
22567
  // How many times this value has been detected on this machine — the reuse
22323
22568
  // signal the vault dashboard reads. Distinct from VaultDeref.pointerCount.
22324
22569
  occurrenceCount: external_exports.number().int().nonnegative(),
22570
+ // True when a PERSON asked for this value to be replaced — the surfaced-
22571
+ // secrets strike — rather than a pack enforcing its assignment. One value is
22572
+ // one row however many paths vault it, so this is what tells a policy sweep
22573
+ // that the row carries somebody's own instruction and not just an assignment
22574
+ // that has since been lowered. STICKY and MONOTONIC: a later automatic
22575
+ // vaulting of the same value must never clear it — what the user said about
22576
+ // the value does not expire.
22577
+ userAuthorized: external_exports.boolean(),
22325
22578
  firstSeen: external_exports.string(),
22326
22579
  lastSeen: external_exports.string()
22327
22580
  });
@@ -22437,7 +22690,7 @@ var VaultConsent = external_exports.object({
22437
22690
  });
22438
22691
 
22439
22692
  // ../../packages/schema/src/zod/local.ts
22440
- var WORKSPACE_SETTINGS_SPEC_VERSION = 6;
22693
+ var WORKSPACE_SETTINGS_SPEC_VERSION = 7;
22441
22694
  var RunMode = external_exports.enum(["standalone", "attached"]);
22442
22695
  var ControlPlaneConnection = external_exports.object({
22443
22696
  endpoint: external_exports.string().min(1),
@@ -22478,6 +22731,19 @@ var WorkspaceSettings = external_exports.object({
22478
22731
  vaultKeyCustody: VaultKeyCustody.default("file"),
22479
22732
  // How a pointer renders in assistant prose on screen (see VaultInlineReveal).
22480
22733
  vaultInlineReveal: VaultInlineReveal.default("masked"),
22734
+ // What a `redact` policy degrades to on a FIELD the host cannot rewrite in
22735
+ // place. Not a handling policy: the policy has already resolved to redact,
22736
+ // and this only says what happens when the host offers no channel to carry it
22737
+ // out — Antigravity's PreToolUse has no updatedInput at all, and Codex and
22738
+ // Claude Code decline to mask a field that EXECUTES because masking would
22739
+ // change what runs. Per FIELD rather than per host, so a host that can
22740
+ // rewrite some inputs keeps true redaction on those.
22741
+ //
22742
+ // Spelled in the built-in policy vocabulary rather than as a fresh enum, so
22743
+ // an attached machine's merge is `strongerAction` over the one action ladder
22744
+ // and no second rank order exists to drift from it. 'deny' is a host wire
22745
+ // word and stays out of the stored value.
22746
+ redactFallback: RedactFallback.default("warn"),
22481
22747
  // Absent until /aka:setup completes; its presence is what "onboarded" means.
22482
22748
  onboardedAt: external_exports.iso.datetime().optional(),
22483
22749
  // Records that the user consented to sending findings to the model API for
@@ -22485,10 +22751,12 @@ var WorkspaceSettings = external_exports.object({
22485
22751
  // Absent until granted; a stale payloadVersion means the consent no longer
22486
22752
  // covers the current payload and must be re-granted.
22487
22753
  modelJudgeConsent: ModelJudgeConsent.optional(),
22488
- // Records that the user consented to sending the activity already recorded on
22489
- // this machine to the deployment it is attached to, along with the payload
22490
- // shape and the endpoint they agreed to. Absent until granted, and a grant for
22491
- // a different endpoint or an older payload no longer counts.
22754
+ // Records that the user consented to the DEFERRED send — the outbox along
22755
+ // with the payload shape and the endpoint they agreed to. Since payload v2
22756
+ // that covers both the pre-attach backlog and undelivered captures (which
22757
+ // carry prompt/reply text in `content`); the key name predates the widening.
22758
+ // Absent until granted, and a grant for a different endpoint or an older
22759
+ // payload no longer counts.
22492
22760
  historySyncConsent: HistorySyncConsent.optional()
22493
22761
  });
22494
22762
 
@@ -22501,7 +22769,8 @@ var ManagedSettingKey = external_exports.enum([
22501
22769
  "vaultKeyCustody",
22502
22770
  "vaultInlineReveal",
22503
22771
  "modelJudgeConsent",
22504
- "dataSharesInPlace"
22772
+ "dataSharesInPlace",
22773
+ "redactFallback"
22505
22774
  ]).meta({ id: "ManagedSettingKey" });
22506
22775
  var ManagedSettingsValues = external_exports.object({
22507
22776
  runMode: external_exports.enum(["standalone", "attached"]).optional(),
@@ -22514,7 +22783,8 @@ var ManagedSettingsValues = external_exports.object({
22514
22783
  vaultKeyCustody: external_exports.enum(["file", "keychain"]).optional(),
22515
22784
  vaultInlineReveal: external_exports.enum(["masked", "full", "off"]).optional(),
22516
22785
  modelJudgeConsent: external_exports.boolean().optional(),
22517
- dataSharesInPlace: external_exports.boolean().optional()
22786
+ dataSharesInPlace: external_exports.boolean().optional(),
22787
+ redactFallback: RedactFallback.optional()
22518
22788
  }).meta({ id: "ManagedSettingsValues" });
22519
22789
  var ManagedSettings = external_exports.object({
22520
22790
  specVersion: external_exports.number().int().positive().default(MANAGED_SETTINGS_SPEC_VERSION),
@@ -22529,176 +22799,6 @@ var ManagedSettings = external_exports.object({
22529
22799
  lockedFields: external_exports.array(ManagedSettingKey).default([])
22530
22800
  }).meta({ id: "ManagedSettings" });
22531
22801
 
22532
- // ../../packages/schema/src/zod/policy.ts
22533
- var PolicyScope = external_exports.enum(["global", "repo", "user"]).meta({ id: "PolicyScope" });
22534
- var PolicyTarget = external_exports.union([external_exports.object({ ruleId: external_exports.string() }), external_exports.object({ category: DetectionCategory })]).meta({ id: "PolicyTarget" });
22535
- var Policy = external_exports.object({
22536
- id: external_exports.guid(),
22537
- scope: PolicyScope,
22538
- target: PolicyTarget,
22539
- action: ActionTaken,
22540
- enabled: external_exports.boolean().default(true),
22541
- customKeywords: external_exports.array(external_exports.string()).optional(),
22542
- // Display name — optional so older policy rows without name still parse.
22543
- // Added for the findings API (policy.name column migration).
22544
- name: external_exports.string().optional()
22545
- }).meta({ id: "Policy" });
22546
- var PolicyBundle = external_exports.object({
22547
- version: external_exports.string(),
22548
- policies: external_exports.array(Policy),
22549
- // Rules from the installed marketplace packs (snapshotted by the
22550
- // control plane). The plugin registers these in addition to its bundled
22551
- // packs. Optional so older backends — and older on-disk caches — that omit
22552
- // the field still parse; consumers read `bundle.rules ?? []`.
22553
- rules: external_exports.array(Rule).optional(),
22554
- // When true, `rules` IS the complete effective ruleset and the runtime must
22555
- // NOT merge its compiled-in bundled packs — the standalone gateway sets this
22556
- // after reading the user's installed snapshot (installed_packs, enabled
22557
- // packs only), which is how detection updates stay manual: new bundled
22558
- // rules run only after the user applies the pack update. Absent/false keeps
22559
- // the historical composition (bundled packs + rules) — older caches.
22560
- rulesComplete: external_exports.boolean().optional(),
22561
- // Active detection exceptions, evaluation subset only (see
22562
- // ExceptionBundleEntry). Optional so older bundle producers — and older
22563
- // on-disk caches — that omit the field still parse; consumers read
22564
- // `bundle.exceptions ?? []`.
22565
- exceptions: external_exports.array(ExceptionBundleEntry).optional(),
22566
- // Rule ids whose pack is assigned a REVERSIBLE archetype (Redact & Vault).
22567
- // A second axis over the same `redact` action, carried beside the policies
22568
- // rather than on them: nothing writes ruleId-targeted policies to disk, so
22569
- // widening Policy itself would change a persisted shape to express something
22570
- // only the in-memory bundle needs. Optional so an older producer — or an
22571
- // older on-disk cache — still parses; consumers read `?? []` and get the
22572
- // pre-existing one-way behaviour, which is the safe direction to default.
22573
- reversibleRuleIds: external_exports.array(external_exports.string()).optional(),
22574
- // Installed pack version, keyed by ruleId, for rules in `rules` that came
22575
- // from a versioned installed pack. Optional so older backends — and older
22576
- // on-disk caches — that omit the field still parse; consumers fall back to
22577
- // the rule's own spec version. NOT the bundle version above — see
22578
- // installedRuleset's ruleVersions for the source of truth.
22579
- ruleVersions: external_exports.record(external_exports.string(), external_exports.string()).optional(),
22580
- // Model ids (the raw `model` string a harness reports, e.g.
22581
- // `claude-opus-4-1`) the tenant has PROHIBITED. The plugin refuses to switch
22582
- // a session onto one (PreModelSwitch) and refuses a turn that would run on
22583
- // one (UserPromptSubmit). Optional so an older backend — and an older
22584
- // on-disk cache — still parses; consumers read `?? []`, which is the
22585
- // unenforced behaviour that predates this field and the safe direction to
22586
- // default.
22587
- //
22588
- // Ids, not display names: the governance decision is keyed on the exact
22589
- // string the harness reports (`model_status_override.versionId` in the
22590
- // control plane), so no name resolution stands between the decision and the
22591
- // comparison.
22592
- prohibitedModels: external_exports.array(external_exports.string()).optional(),
22593
- customKeywords: external_exports.array(external_exports.string()),
22594
- fetchedAt: external_exports.iso.datetime()
22595
- }).meta({ id: "PolicyBundle" });
22596
- var OBSERVE_ONLY_CATEGORIES = ["config"];
22597
- var ENFORCEABLE_CATEGORIES = DetectionCategory.options.filter((c) => !OBSERVE_ONLY_CATEGORIES.includes(c));
22598
- var CATEGORY_PEAK_SEVERITY = {
22599
- secret: "critical",
22600
- financial: "critical",
22601
- // core-financial/credit-card
22602
- code_flaw: "critical",
22603
- pii: "high",
22604
- phi: "high",
22605
- custom: "high",
22606
- // user-defined; conservative
22607
- code_context: "low",
22608
- config: "low"
22609
- // observe-only; floors to monitor regardless
22610
- };
22611
- function severityFloorPolicy(category) {
22612
- if (OBSERVE_ONLY_CATEGORIES.includes(category)) return "monitor";
22613
- const peak = CATEGORY_PEAK_SEVERITY[category];
22614
- return peak === "critical" || peak === "high" ? "warn" : "monitor";
22615
- }
22616
- function severityFloorPosture() {
22617
- const out = {};
22618
- for (const c of DetectionCategory.options) out[c] = severityFloorPolicy(c);
22619
- return out;
22620
- }
22621
- var PolicyKind = external_exports.enum(["builtin", "custom"]).meta({ id: "PolicyKind" });
22622
- var KNOWN_BUILTIN_IDS = ["monitor", "warn", "redact", "vault", "block"];
22623
- var BuiltinPolicyId = external_exports.enum(KNOWN_BUILTIN_IDS).meta({ id: "BuiltinPolicyId" });
22624
- var BUILTIN_POLICY_SPECS = {
22625
- monitor: {
22626
- name: "Monitor",
22627
- action: "log",
22628
- reversible: false,
22629
- description: "Log every match for audit. The request is allowed through untouched."
22630
- },
22631
- warn: {
22632
- name: "Warn",
22633
- action: "warn",
22634
- reversible: false,
22635
- description: "Allow the request, but warn the user inline before it is sent."
22636
- },
22637
- redact: {
22638
- name: "Redact",
22639
- action: "redact",
22640
- reversible: false,
22641
- description: "Strip the matched value from the request and destroy it, then continue. What was removed cannot be recovered."
22642
- },
22643
- vault: {
22644
- name: "Redact & Vault",
22645
- action: "redact",
22646
- reversible: true,
22647
- description: "Strip the matched value from the request and keep an encrypted, recoverable copy in the local vault, leaving a pointer in its place. Needs the vault consent granted under Settings; without it this behaves as Redact."
22648
- },
22649
- block: {
22650
- name: "Block",
22651
- action: "block",
22652
- reversible: false,
22653
- description: "Refuse the request entirely whenever any rule in this detection matches."
22654
- }
22655
- };
22656
- function builtinPolicyToAction(id) {
22657
- return BUILTIN_POLICY_SPECS[id].action;
22658
- }
22659
- var CATEGORY_EXPRESSIBLE_IDS = KNOWN_BUILTIN_IDS.filter(
22660
- (id) => !BUILTIN_POLICY_SPECS[id].reversible
22661
- );
22662
- var CATEGORY_INEXPRESSIBLE_IDS = KNOWN_BUILTIN_IDS.filter(
22663
- (id) => BUILTIN_POLICY_SPECS[id].reversible
22664
- );
22665
- var CategoryPolicyId = external_exports.enum(CATEGORY_EXPRESSIBLE_IDS).meta({ id: "CategoryPolicyId" });
22666
- var DEFAULT_ACTIONS = Object.fromEntries(
22667
- DetectionCategory.options.map((c) => [c, builtinPolicyToAction(severityFloorPolicy(c))])
22668
- );
22669
- var BUILTIN_POLICIES = Object.fromEntries(
22670
- KNOWN_BUILTIN_IDS.map((id) => [id, { id, ...BUILTIN_POLICY_SPECS[id] }])
22671
- );
22672
- var UsedByItem = external_exports.object({
22673
- id: external_exports.string(),
22674
- name: external_exports.string(),
22675
- ruleCount: external_exports.number().int().nonnegative(),
22676
- enabled: external_exports.boolean()
22677
- }).meta({ id: "UsedByItem" });
22678
- var PolicyListItem = external_exports.object({
22679
- id: external_exports.string(),
22680
- kind: PolicyKind,
22681
- name: external_exports.string(),
22682
- enabled: external_exports.boolean(),
22683
- usedByCount: external_exports.number().int().nonnegative()
22684
- }).meta({ id: "PolicyListItem" });
22685
- var ListPoliciesResponse = external_exports.object({ items: external_exports.array(PolicyListItem) }).meta({ id: "ListPoliciesResponse" });
22686
- var PolicyDetail = external_exports.object({
22687
- specVersion: external_exports.literal(1),
22688
- id: external_exports.string(),
22689
- kind: PolicyKind,
22690
- name: external_exports.string(),
22691
- enabled: external_exports.boolean(),
22692
- description: external_exports.string(),
22693
- usedBy: external_exports.array(UsedByItem)
22694
- }).meta({ id: "PolicyDetail" });
22695
- var PolicyStatsResponse = external_exports.object({
22696
- policies: external_exports.number().int().nonnegative(),
22697
- builtin: external_exports.number().int().nonnegative(),
22698
- custom: external_exports.number().int().nonnegative(),
22699
- detectionsGoverned: external_exports.number().int().nonnegative()
22700
- }).meta({ id: "PolicyStatsResponse" });
22701
-
22702
22802
  // ../../packages/schema/src/zod/project-files.ts
22703
22803
  var ProjectFileInput = external_exports.object({
22704
22804
  path: external_exports.string().min(1),
@@ -22938,10 +23038,12 @@ var DismissRecommendedActionResponse = external_exports.object({ id: external_ex
22938
23038
  var RecommendedActionIdParam = external_exports.object({ id: external_exports.string() });
22939
23039
 
22940
23040
  // ../../packages/schema/src/zod/settings-action.ts
23041
+ var HistorySyncConsentChoice = external_exports.enum(["granted", "revoked", "unchanged"]).meta({ id: "HistorySyncConsentChoice" });
23042
+ var ModelJudgeConsentChoice = external_exports.enum(["granted", "revoked", "unchanged"]).meta({ id: "ModelJudgeConsentChoice" });
22941
23043
  var SaveSettingsInput = external_exports.object({
22942
23044
  historicalAccess: external_exports.string(),
22943
- modelJudgeConsent: external_exports.boolean(),
22944
- historySyncConsent: external_exports.boolean(),
23045
+ modelJudgeConsent: ModelJudgeConsentChoice,
23046
+ historySyncConsent: HistorySyncConsentChoice,
22945
23047
  vaultConsent: external_exports.string(),
22946
23048
  vaultInlineReveal: external_exports.string()
22947
23049
  });
@@ -23082,8 +23184,8 @@ import {
23082
23184
  import { threadId } from "worker_threads";
23083
23185
 
23084
23186
  // ../../packages/persistence/src/database.ts
23085
- import { randomUUID as randomUUID10 } from "crypto";
23086
- import { join as join4, sep } from "path";
23187
+ import { randomUUID as randomUUID11 } from "crypto";
23188
+ import { dirname as dirname2, join as join7, sep } from "path";
23087
23189
  import { DatabaseSync } from "node:sqlite";
23088
23190
 
23089
23191
  // ../../packages/persistence/src/ids.ts
@@ -23099,6 +23201,20 @@ var STAGED_NAME_SUFFIX = `.bak${SNAPSHOT_STAGING_SUFFIX}`;
23099
23201
 
23100
23202
  // ../../packages/persistence/src/repositories/activity.ts
23101
23203
  var LIVE_ACTIVITY_WINDOW_MS = 30 * 6e4;
23204
+ var DB_EVENT_TYPE_TO_KIND = {
23205
+ session: "session",
23206
+ prompt: "prompt",
23207
+ response: "response",
23208
+ tool_call: "tool",
23209
+ hook: "hook",
23210
+ detection: "detection",
23211
+ share: "share",
23212
+ permission: "permission",
23213
+ commit: "commit",
23214
+ error: "error",
23215
+ active: "active"
23216
+ };
23217
+ var TIMELINE_EVENT_TYPES = Object.keys(DB_EVENT_TYPE_TO_KIND).map((kind) => `'${kind}'`).join(", ");
23102
23218
  var DEFAULT_HARNESS = HARNESS.ClaudeCode;
23103
23219
 
23104
23220
  // ../../packages/persistence/src/repositories/exceptions.ts
@@ -23115,12 +23231,46 @@ var ACTIVE_REVEAL_GRANT_PREDICATE = `capability = 'reveal_to_model'
23115
23231
  // ../../packages/persistence/src/repositories/history-sync.ts
23116
23232
  var STRUCTURAL_EVENT_TYPES = ["session", "llm_call", "tool_call"];
23117
23233
  var TYPE_LIST = STRUCTURAL_EVENT_TYPES.map((t) => `'${t}'`).join(", ");
23234
+ var OUTBOX_CAPTURE_EVENT_TYPES = ["prompt", "response", "tool_use"];
23235
+ var CAPTURE_TYPE_LIST = OUTBOX_CAPTURE_EVENT_TYPES.map((t) => `'${t}'`).join(", ");
23118
23236
 
23119
23237
  // ../../packages/persistence/src/repositories/installed-packs.ts
23120
- import { createHash as createHash2, randomUUID as randomUUID3 } from "crypto";
23238
+ import { createHash as createHash2, randomUUID as randomUUID4 } from "crypto";
23239
+
23240
+ // ../../packages/persistence/src/policy-floor.ts
23241
+ import { readFileSync as readFileSync5 } from "fs";
23242
+ import { join as join6 } from "path";
23243
+
23244
+ // ../../packages/persistence/src/local-layout.ts
23245
+ import { renameSync as renameSync3 } from "fs";
23246
+ import { mkdir } from "fs/promises";
23247
+ import { homedir } from "os";
23248
+ import { join as join4 } from "path";
23249
+
23250
+ // ../../packages/persistence/src/settings.ts
23251
+ import { readFileSync as readFileSync4 } from "fs";
23252
+ import { join as join5 } from "path";
23253
+
23254
+ // ../../packages/persistence/src/file-lock.ts
23255
+ import { randomUUID as randomUUID3 } from "crypto";
23256
+ import {
23257
+ closeSync,
23258
+ existsSync as existsSync2,
23259
+ openSync,
23260
+ readFileSync as readFileSync2,
23261
+ rmSync as rmSync5,
23262
+ statSync as statSync3,
23263
+ writeFileSync as writeFileSync2
23264
+ } from "fs";
23265
+ import { hostname as hostname3 } from "os";
23266
+ var PARK = new Int32Array(new SharedArrayBuffer(4));
23267
+
23268
+ // ../../packages/persistence/src/managed-settings.ts
23269
+ import { readFileSync as readFileSync3 } from "fs";
23270
+ import { posix, win32 } from "path";
23121
23271
 
23122
23272
  // ../../packages/persistence/src/repositories/inventory-assets.ts
23123
- import { randomUUID as randomUUID4 } from "crypto";
23273
+ import { randomUUID as randomUUID5 } from "crypto";
23124
23274
  var VALID_HARNESS_IDS = new Set(HarnessId.options);
23125
23275
  var HARNESS_LABELS = {
23126
23276
  [HARNESS.ClaudeCode]: "Claude Code",
@@ -23138,16 +23288,16 @@ var TITLE_NEEDLES = {
23138
23288
  };
23139
23289
 
23140
23290
  // ../../packages/persistence/src/repositories/policies.ts
23141
- import { randomUUID as randomUUID5 } from "crypto";
23291
+ import { randomUUID as randomUUID6 } from "crypto";
23142
23292
 
23143
23293
  // ../../packages/persistence/src/repositories/project-files.ts
23144
- import { randomUUID as randomUUID6 } from "crypto";
23294
+ import { randomUUID as randomUUID7 } from "crypto";
23145
23295
 
23146
23296
  // ../../packages/persistence/src/repositories/resolutions.ts
23147
- import { randomUUID as randomUUID7 } from "crypto";
23297
+ import { randomUUID as randomUUID8 } from "crypto";
23148
23298
 
23149
23299
  // ../../packages/persistence/src/repositories/secret-vault.ts
23150
- import { randomUUID as randomUUID8 } from "crypto";
23300
+ import { randomUUID as randomUUID9 } from "crypto";
23151
23301
 
23152
23302
  // ../../packages/persistence/src/repositories/security.ts
23153
23303
  var SCAN_COVERAGE = {
@@ -23162,53 +23312,28 @@ var SCAN_COVERAGE = {
23162
23312
  };
23163
23313
 
23164
23314
  // ../../packages/persistence/src/repositories/shares.ts
23165
- import { randomUUID as randomUUID9 } from "crypto";
23315
+ import { randomUUID as randomUUID10 } from "crypto";
23166
23316
 
23167
- // ../../packages/persistence/src/file-lock.ts
23168
- import { randomUUID as randomUUID11 } from "crypto";
23169
- import {
23170
- closeSync,
23171
- existsSync as existsSync2,
23172
- openSync,
23173
- readFileSync as readFileSync2,
23174
- rmSync as rmSync5,
23175
- statSync as statSync3,
23176
- writeFileSync as writeFileSync2
23177
- } from "fs";
23178
- import { hostname as hostname3 } from "os";
23179
- var PARK = new Int32Array(new SharedArrayBuffer(4));
23317
+ // ../../packages/persistence/src/database.ts
23318
+ var CAPTURE_GRAIN = new Set(EventKind.options);
23180
23319
 
23181
23320
  // ../../packages/persistence/src/finding-key.ts
23182
23321
  import { createHash as createHash3 } from "crypto";
23183
23322
 
23184
23323
  // ../../packages/persistence/src/fingerprint.ts
23185
23324
  import { createHmac, randomBytes } from "crypto";
23186
- import { existsSync as existsSync3, readFileSync as readFileSync3 } from "fs";
23187
- import { join as join5 } from "path";
23325
+ import { existsSync as existsSync3, readFileSync as readFileSync6 } from "fs";
23326
+ import { join as join8 } from "path";
23188
23327
  import { DatabaseSync as DatabaseSync2 } from "node:sqlite";
23189
23328
 
23190
23329
  // ../../packages/persistence/src/history-preview.ts
23191
23330
  import { existsSync as existsSync4 } from "fs";
23192
- import { join as join6 } from "path";
23331
+ import { join as join9 } from "path";
23193
23332
  import { DatabaseSync as DatabaseSync3 } from "node:sqlite";
23194
23333
 
23195
- // ../../packages/persistence/src/local-layout.ts
23196
- import { renameSync as renameSync3 } from "fs";
23197
- import { mkdir } from "fs/promises";
23198
- import { homedir } from "os";
23199
- import { join as join7 } from "path";
23200
-
23201
- // ../../packages/persistence/src/managed-settings.ts
23202
- import { readFileSync as readFileSync4 } from "fs";
23203
- import { posix, win32 } from "path";
23204
-
23205
- // ../../packages/persistence/src/settings.ts
23206
- import { readFileSync as readFileSync5 } from "fs";
23207
- import { join as join8 } from "path";
23208
-
23209
23334
  // ../../packages/persistence/src/store-symlinks.ts
23210
23335
  import { existsSync as existsSync5, lstatSync as lstatSync3, readlinkSync, realpathSync, statSync as statSync4 } from "fs";
23211
- import { dirname as dirname2, join as join9, resolve } from "path";
23336
+ import { dirname as dirname3, join as join10, resolve } from "path";
23212
23337
 
23213
23338
  // ../../packages/persistence/src/vault/crypto.ts
23214
23339
  import {
@@ -23222,15 +23347,15 @@ import {
23222
23347
  // ../../packages/persistence/src/vault/key-provider.ts
23223
23348
  import { execFileSync } from "child_process";
23224
23349
  import { randomBytes as randomBytes2 } from "crypto";
23225
- import { chmodSync as chmodSync3, readFileSync as readFileSync6, renameSync as renameSync4, rmSync as rmSync6, statSync as statSync5, writeFileSync as writeFileSync3 } from "fs";
23226
- import { join as join10 } from "path";
23350
+ import { chmodSync as chmodSync3, readFileSync as readFileSync7, renameSync as renameSync4, rmSync as rmSync6, statSync as statSync5, writeFileSync as writeFileSync3 } from "fs";
23351
+ import { join as join11 } from "path";
23227
23352
 
23228
23353
  // ../../packages/persistence/src/vault/vault.ts
23229
23354
  import { randomBytes as randomBytes3, randomUUID as randomUUID12 } from "crypto";
23230
23355
 
23231
23356
  // ../../packages/persistence/src/warn-era-cap.ts
23232
23357
  import { existsSync as existsSync6, writeFileSync as writeFileSync4 } from "fs";
23233
- import { join as join11 } from "path";
23358
+ import { join as join12 } from "path";
23234
23359
 
23235
23360
  // ../../packages/plugin-sdk/src/provider-env.ts
23236
23361
  var booleanish = external_exports.string().optional().transform((v) => {
@@ -23251,9 +23376,9 @@ var providerEnvShape = {
23251
23376
  var ProviderEnvSchema = external_exports.object(providerEnvShape);
23252
23377
 
23253
23378
  // ../../packages/plugin-sdk/src/config-inventory.ts
23254
- import { readdirSync as readdirSync2, readFileSync as readFileSync8, realpathSync as realpathSync2, statSync as statSync7 } from "fs";
23379
+ import { readdirSync as readdirSync2, readFileSync as readFileSync9, realpathSync as realpathSync2, statSync as statSync7 } from "fs";
23255
23380
  import { homedir as homedir2 } from "os";
23256
- import { basename as basename3, join as join14 } from "path";
23381
+ import { basename as basename3, join as join15 } from "path";
23257
23382
 
23258
23383
  // ../../packages/detections/src/egress/registry.ts
23259
23384
  var EXTRACTOR_VERSION = "1";
@@ -24011,8 +24136,8 @@ var CPU_CORROBORATION_SHARE = 0.2;
24011
24136
  var CORROBORATION_FLOOR_MS = BUDGET_MS * CPU_CORROBORATION_SHARE;
24012
24137
 
24013
24138
  // ../../packages/plugin-sdk/src/repo.ts
24014
- import { existsSync as existsSync8, readFileSync as readFileSync7, statSync as statSync6 } from "fs";
24015
- import { basename as basename2, dirname as dirname3, isAbsolute, join as join13, sep as sep2 } from "path";
24139
+ import { existsSync as existsSync8, readFileSync as readFileSync8, statSync as statSync6 } from "fs";
24140
+ import { basename as basename2, dirname as dirname4, isAbsolute, join as join14, sep as sep2 } from "path";
24016
24141
 
24017
24142
  // ../../packages/plugin-sdk/src/events.ts
24018
24143
  import { createHash as createHash4, randomUUID as randomUUID13 } from "crypto";
@@ -24024,8 +24149,8 @@ import { Worker } from "worker_threads";
24024
24149
 
24025
24150
  // ../../packages/plugin-sdk/src/ignore-layers.ts
24026
24151
  var import_ignore = __toESM(require_ignore(), 1);
24027
- import { readFileSync as readFileSync9 } from "fs";
24028
- import { join as join15 } from "path";
24152
+ import { readFileSync as readFileSync10 } from "fs";
24153
+ import { join as join16 } from "path";
24029
24154
 
24030
24155
  // ../../packages/plugin-sdk/src/inventory-resolver.ts
24031
24156
  import { arch, hostname as hostname4, platform, release } from "os";
@@ -24036,24 +24161,24 @@ import {
24036
24161
  fstatSync,
24037
24162
  mkdirSync as mkdirSync2,
24038
24163
  openSync as openSync2,
24039
- readFileSync as readFileSync10,
24164
+ readFileSync as readFileSync11,
24040
24165
  readSync,
24041
24166
  writeFileSync as writeFileSync5
24042
24167
  } from "fs";
24043
- import { join as join16 } from "path";
24168
+ import { join as join17 } from "path";
24044
24169
  var TAIL_BYTES = 256 * 1024;
24045
24170
 
24046
24171
  // ../../packages/plugin-sdk/src/nudge.ts
24047
- import { mkdirSync as mkdirSync3, readFileSync as readFileSync11, writeFileSync as writeFileSync6 } from "fs";
24048
- import { join as join17 } from "path";
24172
+ import { mkdirSync as mkdirSync3, readFileSync as readFileSync12, writeFileSync as writeFileSync6 } from "fs";
24173
+ import { join as join18 } from "path";
24049
24174
 
24050
24175
  // ../../packages/plugin-sdk/src/paths.ts
24051
24176
  import { readdirSync as readdirSync3, realpathSync as realpathSync3 } from "fs";
24052
- import { basename as basename4, dirname as dirname4, sep as sep3 } from "path";
24177
+ import { basename as basename4, dirname as dirname5, sep as sep3 } from "path";
24053
24178
 
24054
24179
  // ../../packages/plugin-sdk/src/project-files.ts
24055
24180
  import { existsSync as existsSync10, readdirSync as readdirSync4 } from "fs";
24056
- import { basename as basename5, join as join18 } from "path";
24181
+ import { basename as basename5, join as join19 } from "path";
24057
24182
 
24058
24183
  // ../../packages/plugin-sdk/src/provider-env-antigravity.ts
24059
24184
  var optionalBaseUrl2 = external_exports.preprocess((v) => {
@@ -24089,7 +24214,7 @@ var THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1e3;
24089
24214
 
24090
24215
  // ../../packages/plugin-sdk/src/throttle.ts
24091
24216
  import { mkdirSync as mkdirSync4, statSync as statSync8, writeFileSync as writeFileSync7 } from "fs";
24092
- import { join as join19 } from "path";
24217
+ import { join as join20 } from "path";
24093
24218
 
24094
24219
  // ../../packages/setup-wizard/src/onboard-posture.ts
24095
24220
  function parsePosture(json2) {
@@ -24128,7 +24253,7 @@ function parseCurrent(json2) {
24128
24253
 
24129
24254
  // ../../packages/setup-wizard/src/remediation/rotation-checklist.ts
24130
24255
  import { writeFileSync as writeFileSync8 } from "fs";
24131
- import { join as join20 } from "path";
24256
+ import { join as join21 } from "path";
24132
24257
 
24133
24258
  // ../../packages/setup-wizard/src/triage/gate-display.ts
24134
24259
  var ACTION_RANK = {
@@ -24155,9 +24280,9 @@ var RANK = Object.fromEntries(
24155
24280
  );
24156
24281
 
24157
24282
  // ../../packages/setup-wizard/src/triage/plan-file.ts
24158
- import { mkdtempSync, readFileSync as readFileSync12, rmdirSync, rmSync as rmSync7, writeFileSync as writeFileSync9 } from "fs";
24283
+ import { mkdtempSync, readFileSync as readFileSync13, rmdirSync, rmSync as rmSync7, writeFileSync as writeFileSync9 } from "fs";
24159
24284
  import { tmpdir } from "os";
24160
- import { basename as basename6, dirname as dirname5, join as join21 } from "path";
24285
+ import { basename as basename6, dirname as dirname6, join as join22 } from "path";
24161
24286
  var SuppressionEntrySchema = external_exports.object({
24162
24287
  ruleId: external_exports.string(),
24163
24288
  category: DetectionCategory,