@akasecurity/ai-tc-claude-code 0.9.2 → 0.9.4

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.
@@ -492,11 +492,11 @@ var require_ignore = __commonJS({
492
492
  });
493
493
 
494
494
  // ../../packages/plugin-sdk/src/config.ts
495
- import { existsSync as existsSync3 } from "fs";
496
- import { join as join6 } from "path";
495
+ import { existsSync as existsSync4 } from "fs";
496
+ import { join as join7 } from "path";
497
497
 
498
498
  // ../../packages/persistence/src/database.ts
499
- import { randomUUID as randomUUID8 } from "crypto";
499
+ import { randomUUID as randomUUID9 } from "crypto";
500
500
  import { existsSync, renameSync as renameSync2, rmSync as rmSync2 } from "fs";
501
501
  import { join, sep } from "path";
502
502
  import { DatabaseSync } from "node:sqlite";
@@ -16001,6 +16001,7 @@ var ExceptionConditions = external_exports.object({
16001
16001
  sourceTool: external_exports.string().optional(),
16002
16002
  provider: external_exports.string().optional()
16003
16003
  }).strict();
16004
+ var ExceptionCapability = external_exports.enum(["suppress", "reveal_to_model"]);
16004
16005
  var DetectionException = external_exports.object({
16005
16006
  id: external_exports.guid(),
16006
16007
  ruleId: external_exports.string(),
@@ -16017,6 +16018,7 @@ var DetectionException = external_exports.object({
16017
16018
  keyVersion: external_exports.number().int().positive(),
16018
16019
  // maskMatch() preview of the approved value — never the raw value.
16019
16020
  maskedValue: external_exports.string(),
16021
+ capability: ExceptionCapability.default("suppress"),
16020
16022
  scope: ExceptionScope,
16021
16023
  expiresAt: external_exports.iso.datetime().nullable(),
16022
16024
  maxUses: external_exports.number().int().positive().nullable(),
@@ -16040,6 +16042,7 @@ var ExceptionBundleEntry = DetectionException.pick({
16040
16042
  ruleId: true,
16041
16043
  valueFingerprint: true,
16042
16044
  keyVersion: true,
16045
+ capability: true,
16043
16046
  expiresAt: true,
16044
16047
  maxUses: true,
16045
16048
  useCount: true,
@@ -16806,8 +16809,116 @@ var PatchInstalledPackRequest = external_exports.object({
16806
16809
  message: "At least one field must be provided"
16807
16810
  }).meta({ id: "PatchInstalledPackRequest" });
16808
16811
 
16812
+ // ../../packages/schema/src/zod/vault.ts
16813
+ var CATEGORY_ALTERNATION = DetectionCategory.options.join("|");
16814
+ var POINTER_TOKEN_PATTERN = new RegExp(
16815
+ `\\[\\[aka:(?:${CATEGORY_ALTERNATION}):[A-Z2-7]{2,7}\\.[A-Z2-7]{26}\\.[A-Z2-7]{16}\\]\\]`
16816
+ );
16817
+ var POINTER_TOKEN_ANCHORED = new RegExp(`^${POINTER_TOKEN_PATTERN.source}$`);
16818
+ var PointerToken = external_exports.string().regex(POINTER_TOKEN_ANCHORED);
16819
+ var ParsedPointer = external_exports.object({
16820
+ category: DetectionCategory,
16821
+ keyVersion: external_exports.number().int().positive(),
16822
+ pointerId: external_exports.string(),
16823
+ tag: external_exports.string()
16824
+ });
16825
+ var VaultEntry = external_exports.object({
16826
+ pointerId: external_exports.string(),
16827
+ // The keyed HMAC of the raw value under `exception.key`, and the epoch it was
16828
+ // derived under. This is what a reveal-to-model grant matches on, and it rotates
16829
+ // independently of the vault encryption key below.
16830
+ valueFingerprint: external_exports.string().regex(/^[0-9a-f]{64}$/),
16831
+ fingerprintKeyVersion: external_exports.number().int().positive(),
16832
+ // The vault-key epoch this row's ciphertext was sealed under.
16833
+ keyVersion: external_exports.number().int().positive(),
16834
+ // Fixed at first mint and never updated: the same value detected later under a
16835
+ // different rule's category keeps the category it was minted with, so one
16836
+ // value always produces exactly one wire token.
16837
+ category: DetectionCategory,
16838
+ ruleId: external_exports.string(),
16839
+ // Partial-reveal preview for badges and listings. Never the raw value.
16840
+ maskedMatch: external_exports.string(),
16841
+ provider: external_exports.string().optional(),
16842
+ ciphertext: external_exports.string(),
16843
+ nonce: external_exports.string(),
16844
+ authTag: external_exports.string(),
16845
+ // How many times this value has been detected on this machine — the reuse
16846
+ // signal the vault dashboard reads. Distinct from VaultDeref.pointerCount.
16847
+ occurrenceCount: external_exports.number().int().nonnegative(),
16848
+ firstSeen: external_exports.string(),
16849
+ lastSeen: external_exports.string()
16850
+ });
16851
+ var PointerDescriptor = external_exports.object({
16852
+ category: DetectionCategory,
16853
+ provider: external_exports.string().optional(),
16854
+ maskedMatch: external_exports.string(),
16855
+ occurrences: external_exports.number().int().nonnegative(),
16856
+ firstSeen: external_exports.string(),
16857
+ lastSeen: external_exports.string()
16858
+ });
16859
+ var PointerIdentity = external_exports.object({
16860
+ ruleId: external_exports.string(),
16861
+ valueFingerprint: external_exports.string().regex(/^[0-9a-f]{64}$/),
16862
+ fingerprintKeyVersion: external_exports.number().int().positive()
16863
+ });
16864
+ var DetokenizeTarget = external_exports.enum(["human", "model"]);
16865
+ var VaultDerefReason = external_exports.enum([
16866
+ "display",
16867
+ "explicit-reveal",
16868
+ "view-render",
16869
+ "model-input",
16870
+ "remediation",
16871
+ "purge"
16872
+ ]);
16873
+ var VaultDerefOutcome = external_exports.enum(["revealed", "refused", "unavailable"]);
16874
+ var VaultDeref = external_exports.object({
16875
+ id: external_exports.guid(),
16876
+ pointerId: external_exports.string(),
16877
+ at: external_exports.string(),
16878
+ target: DetokenizeTarget,
16879
+ reason: VaultDerefReason,
16880
+ outcome: VaultDerefOutcome,
16881
+ // Present only on a model-target crossing that a reveal grant authorized.
16882
+ grantId: external_exports.string().optional(),
16883
+ // How many pointers ONE batched render resolved. 1 for unbatched rows. Named
16884
+ // apart from VaultEntry.occurrenceCount, which counts detections of a value.
16885
+ pointerCount: external_exports.number().int().positive().default(1)
16886
+ });
16887
+ var VaultSightingKind = external_exports.enum([
16888
+ "prompt",
16889
+ "tool-input",
16890
+ "tool-output",
16891
+ "file",
16892
+ "transcript"
16893
+ ]);
16894
+ var VaultSighting = external_exports.object({
16895
+ location: external_exports.string(),
16896
+ kind: VaultSightingKind,
16897
+ firstSeen: external_exports.string(),
16898
+ lastSeen: external_exports.string()
16899
+ });
16900
+ var VaultInventoryEntry = external_exports.object({
16901
+ pointerId: external_exports.string(),
16902
+ category: DetectionCategory,
16903
+ provider: external_exports.string().optional(),
16904
+ maskedMatch: external_exports.string(),
16905
+ occurrences: external_exports.number().int().nonnegative(),
16906
+ firstSeen: external_exports.string(),
16907
+ lastSeen: external_exports.string(),
16908
+ // The active reveal-to-model grant covering this value, when one exists —
16909
+ // the inventory badges it, the row links to revocation.
16910
+ revealGrantId: external_exports.string().nullable(),
16911
+ sightings: external_exports.array(VaultSighting)
16912
+ });
16913
+ var VaultKeyCustody = external_exports.string();
16914
+ var VaultInlineReveal = external_exports.enum(["masked", "full", "off"]);
16915
+ var VaultConsent = external_exports.object({
16916
+ acknowledgedAt: external_exports.iso.datetime(),
16917
+ version: external_exports.number().int().positive()
16918
+ });
16919
+
16809
16920
  // ../../packages/schema/src/zod/local.ts
16810
- var WORKSPACE_SETTINGS_SPEC_VERSION = 4;
16921
+ var WORKSPACE_SETTINGS_SPEC_VERSION = 5;
16811
16922
  var RunMode = external_exports.enum(["standalone"]);
16812
16923
  var SimpleDetectionPolicy = external_exports.enum(["redact", "warn"]);
16813
16924
  var HistoricalAccess = external_exports.enum(["full", "session-only"]);
@@ -16829,6 +16940,16 @@ var WorkspaceSettings = external_exports.object({
16829
16940
  // In-place egress extraction on the scan paths; disable to stop all Data
16830
16941
  // Shares writes.
16831
16942
  dataSharesInPlace: external_exports.boolean().default(true),
16943
+ // Consent to keep a RECOVERABLE encrypted copy of detected values in the local
16944
+ // vault, instead of destroying them. Absent by default: this is a custody
16945
+ // change from one-way redaction, so it is never an assumed grant on upgrade.
16946
+ // Revoking stops future vaulting; it does not erase what is already stored —
16947
+ // purging the vault is the eraser.
16948
+ vaultConsent: VaultConsent.optional(),
16949
+ // Where the vault master key lives.
16950
+ vaultKeyCustody: VaultKeyCustody.default("file"),
16951
+ // How a pointer renders in assistant prose on screen (see VaultInlineReveal).
16952
+ vaultInlineReveal: VaultInlineReveal.default("masked"),
16832
16953
  // Absent until /aka:setup completes; its presence is what "onboarded" means.
16833
16954
  onboardedAt: external_exports.iso.datetime().optional(),
16834
16955
  // Records that the user consented to sending findings to the model API for
@@ -17223,6 +17344,12 @@ var LIVE_ACTIVITY_WINDOW_MS = 30 * 6e4;
17223
17344
  import { randomUUID } from "crypto";
17224
17345
  var BLOCKED_DETECTIONS_TTL_MS = 30 * 60 * 1e3;
17225
17346
  var BLOCKED_DETECTIONS_RETENTION_MS = 24 * 60 * 60 * 1e3;
17347
+ var ACTIVE_PREDICATE = `revoked_at IS NULL
17348
+ AND (expires_at IS NULL OR expires_at > :now)
17349
+ AND (max_uses IS NULL OR use_count < max_uses)`;
17350
+ var ACTIVE_REVEAL_GRANT_PREDICATE = `capability = 'reveal_to_model'
17351
+ AND conditions IS NULL
17352
+ AND ${ACTIVE_PREDICATE}`;
17226
17353
 
17227
17354
  // ../../packages/persistence/src/repositories/installed-packs.ts
17228
17355
  import { createHash as createHash2, randomUUID as randomUUID2 } from "crypto";
@@ -17241,16 +17368,20 @@ import { randomUUID as randomUUID5 } from "crypto";
17241
17368
  // ../../packages/persistence/src/repositories/resolutions.ts
17242
17369
  import { randomUUID as randomUUID6 } from "crypto";
17243
17370
 
17244
- // ../../packages/persistence/src/repositories/shares.ts
17371
+ // ../../packages/persistence/src/repositories/secret-vault.ts
17245
17372
  import { randomUUID as randomUUID7 } from "crypto";
17246
17373
 
17374
+ // ../../packages/persistence/src/repositories/shares.ts
17375
+ import { randomUUID as randomUUID8 } from "crypto";
17376
+
17247
17377
  // ../../packages/persistence/src/finding-key.ts
17248
17378
  import { createHash as createHash3 } from "crypto";
17249
17379
 
17250
17380
  // ../../packages/persistence/src/fingerprint.ts
17251
17381
  import { createHmac, randomBytes } from "crypto";
17252
- import { readFileSync } from "fs";
17382
+ import { existsSync as existsSync2, readFileSync } from "fs";
17253
17383
  import { join as join2 } from "path";
17384
+ import { DatabaseSync as DatabaseSync2 } from "node:sqlite";
17254
17385
 
17255
17386
  // ../../packages/persistence/src/local-layout.ts
17256
17387
  import { renameSync as renameSync3 } from "fs";
@@ -17262,10 +17393,36 @@ import { join as join3 } from "path";
17262
17393
  import { readFileSync as readFileSync2 } from "fs";
17263
17394
  import { join as join4 } from "path";
17264
17395
 
17265
- // ../../packages/persistence/src/warn-era-cap.ts
17266
- import { existsSync as existsSync2, writeFileSync as writeFileSync2 } from "fs";
17396
+ // ../../packages/persistence/src/vault/crypto.ts
17397
+ import {
17398
+ createCipheriv,
17399
+ createDecipheriv,
17400
+ createHmac as createHmac2,
17401
+ hkdfSync,
17402
+ timingSafeEqual
17403
+ } from "crypto";
17404
+
17405
+ // ../../packages/persistence/src/vault/key-provider.ts
17406
+ import { execFileSync } from "child_process";
17407
+ import { randomBytes as randomBytes2 } from "crypto";
17408
+ import {
17409
+ chmodSync as chmodSync2,
17410
+ mkdirSync as mkdirSync2,
17411
+ readFileSync as readFileSync3,
17412
+ renameSync as renameSync4,
17413
+ rmSync as rmSync3,
17414
+ statSync,
17415
+ writeFileSync as writeFileSync2
17416
+ } from "fs";
17267
17417
  import { join as join5 } from "path";
17268
17418
 
17419
+ // ../../packages/persistence/src/vault/vault.ts
17420
+ import { randomBytes as randomBytes3, randomUUID as randomUUID10 } from "crypto";
17421
+
17422
+ // ../../packages/persistence/src/warn-era-cap.ts
17423
+ import { existsSync as existsSync3, writeFileSync as writeFileSync3 } from "fs";
17424
+ import { join as join6 } from "path";
17425
+
17269
17426
  // ../../packages/plugin-sdk/src/provider-env.ts
17270
17427
  var booleanish = external_exports.string().optional().transform((v) => {
17271
17428
  if (v === void 0) return void 0;
@@ -17285,9 +17442,9 @@ var providerEnvShape = {
17285
17442
  var ProviderEnvSchema = external_exports.object(providerEnvShape);
17286
17443
 
17287
17444
  // ../../packages/plugin-sdk/src/config-inventory.ts
17288
- import { readdirSync, readFileSync as readFileSync4, realpathSync, statSync as statSync2 } from "fs";
17445
+ import { readdirSync, readFileSync as readFileSync5, realpathSync, statSync as statSync3 } from "fs";
17289
17446
  import { homedir as homedir2 } from "os";
17290
- import { basename as basename2, join as join8 } from "path";
17447
+ import { basename as basename2, join as join9 } from "path";
17291
17448
 
17292
17449
  // ../../packages/detections/src/egress/registry.ts
17293
17450
  var EXTRACTOR_VERSION = "1";
@@ -17998,18 +18155,18 @@ var POLYNOMIAL_PROBES = ["abc-", "a.", "a ", "a=", "x", "0", "a@", "a/", "ab"].m
17998
18155
  );
17999
18156
 
18000
18157
  // ../../packages/plugin-sdk/src/repo.ts
18001
- import { existsSync as existsSync4, readFileSync as readFileSync3, statSync } from "fs";
18002
- import { basename, dirname, isAbsolute, join as join7, sep as sep2 } from "path";
18158
+ import { existsSync as existsSync5, readFileSync as readFileSync4, statSync as statSync2 } from "fs";
18159
+ import { basename, dirname, isAbsolute, join as join8, sep as sep2 } from "path";
18003
18160
 
18004
18161
  // ../../packages/plugin-sdk/src/events.ts
18005
- import { createHash as createHash4, randomUUID as randomUUID9 } from "crypto";
18162
+ import { createHash as createHash4, randomUUID as randomUUID11 } from "crypto";
18006
18163
 
18007
18164
  // ../../packages/plugin-sdk/src/inventory-resolver.ts
18008
18165
  import { arch, hostname as hostname3, platform, release } from "os";
18009
18166
 
18010
18167
  // ../../packages/plugin-sdk/src/nudge.ts
18011
- import { mkdirSync as mkdirSync2, readFileSync as readFileSync5, writeFileSync as writeFileSync3 } from "fs";
18012
- import { join as join9 } from "path";
18168
+ import { mkdirSync as mkdirSync3, readFileSync as readFileSync6, writeFileSync as writeFileSync4 } from "fs";
18169
+ import { join as join10 } from "path";
18013
18170
 
18014
18171
  // ../../packages/plugin-sdk/src/paths.ts
18015
18172
  import { readdirSync as readdirSync2, realpathSync as realpathSync2 } from "fs";
@@ -18017,18 +18174,18 @@ import { basename as basename3, dirname as dirname2, sep as sep3 } from "path";
18017
18174
 
18018
18175
  // ../../packages/plugin-sdk/src/project-files.ts
18019
18176
  var import_ignore = __toESM(require_ignore(), 1);
18020
- import { existsSync as existsSync5, readdirSync as readdirSync3, readFileSync as readFileSync6 } from "fs";
18021
- import { basename as basename4, join as join10, relative, sep as sep4 } from "path";
18177
+ import { existsSync as existsSync6, readdirSync as readdirSync3, readFileSync as readFileSync7 } from "fs";
18178
+ import { basename as basename4, join as join11, relative, sep as sep4 } from "path";
18022
18179
 
18023
18180
  // ../../packages/plugin-sdk/src/runtime.ts
18024
- import { randomUUID as randomUUID10 } from "crypto";
18181
+ import { randomUUID as randomUUID12 } from "crypto";
18025
18182
 
18026
18183
  // ../../packages/plugin-sdk/src/suppressions.ts
18027
18184
  var THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1e3;
18028
18185
 
18029
18186
  // ../../packages/plugin-sdk/src/throttle.ts
18030
- import { mkdirSync as mkdirSync3, statSync as statSync3, writeFileSync as writeFileSync4 } from "fs";
18031
- import { join as join11 } from "path";
18187
+ import { mkdirSync as mkdirSync4, statSync as statSync4, writeFileSync as writeFileSync5 } from "fs";
18188
+ import { join as join12 } from "path";
18032
18189
 
18033
18190
  // src/onboard-posture.ts
18034
18191
  function parsePosture(json2) {