@astrasyncai/verification-gateway 3.11.0 → 3.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/adapter-interface/interface.d.mts +1 -1
  2. package/dist/adapter-interface/interface.d.ts +1 -1
  3. package/dist/adapters/express.js +1 -1
  4. package/dist/adapters/express.js.map +1 -1
  5. package/dist/adapters/express.mjs +1 -1
  6. package/dist/adapters/express.mjs.map +1 -1
  7. package/dist/adapters/mcp.js +1 -1
  8. package/dist/adapters/mcp.js.map +1 -1
  9. package/dist/adapters/mcp.mjs +1 -1
  10. package/dist/adapters/mcp.mjs.map +1 -1
  11. package/dist/adapters/nextjs.js +1 -1
  12. package/dist/adapters/nextjs.js.map +1 -1
  13. package/dist/adapters/nextjs.mjs +1 -1
  14. package/dist/adapters/nextjs.mjs.map +1 -1
  15. package/dist/adapters/sdk.js +1 -1
  16. package/dist/adapters/sdk.js.map +1 -1
  17. package/dist/adapters/sdk.mjs +1 -1
  18. package/dist/adapters/sdk.mjs.map +1 -1
  19. package/dist/bin/astrasync-claude-hook.js +63 -19
  20. package/dist/bin/astrasync-codex-hook.js +63 -19
  21. package/dist/bin/astrasync-guard.js +63 -19
  22. package/dist/bin/astrasync.js +63 -19
  23. package/dist/browser/background.js +63 -19
  24. package/dist/browser/background.js.map +1 -1
  25. package/dist/browser/background.mjs +63 -19
  26. package/dist/browser/background.mjs.map +1 -1
  27. package/dist/browser/browser-adapter.d.mts +1 -1
  28. package/dist/browser/browser-adapter.d.ts +1 -1
  29. package/dist/claude-code/claude-code-adapter.d.mts +1 -1
  30. package/dist/claude-code/claude-code-adapter.d.ts +1 -1
  31. package/dist/cli/index.d.mts +1 -1
  32. package/dist/cli/index.d.ts +1 -1
  33. package/dist/codex/index.d.mts +1 -1
  34. package/dist/codex/index.d.ts +1 -1
  35. package/dist/codex/index.js +63 -19
  36. package/dist/codex/index.js.map +1 -1
  37. package/dist/codex/index.mjs +63 -19
  38. package/dist/codex/index.mjs.map +1 -1
  39. package/dist/cursor/cursor-adapter.d.mts +1 -1
  40. package/dist/cursor/cursor-adapter.d.ts +1 -1
  41. package/dist/cursor/extension.d.mts +1 -1
  42. package/dist/cursor/extension.d.ts +1 -1
  43. package/dist/cursor/extension.js +63 -19
  44. package/dist/cursor/extension.js.map +1 -1
  45. package/dist/cursor/extension.mjs +63 -19
  46. package/dist/cursor/extension.mjs.map +1 -1
  47. package/dist/gateway/gateway.d.mts +1 -1
  48. package/dist/gateway/gateway.d.ts +1 -1
  49. package/dist/gateway/gateway.js +63 -19
  50. package/dist/gateway/gateway.js.map +1 -1
  51. package/dist/gateway/gateway.mjs +63 -19
  52. package/dist/gateway/gateway.mjs.map +1 -1
  53. package/dist/git-trigger/git-hooks.d.mts +1 -1
  54. package/dist/git-trigger/git-hooks.d.ts +1 -1
  55. package/dist/index.d.mts +1 -1
  56. package/dist/index.d.ts +1 -1
  57. package/dist/index.js +1 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/index.mjs +1 -1
  60. package/dist/index.mjs.map +1 -1
  61. package/dist/local-evaluator/evaluator.d.mts +10 -1
  62. package/dist/local-evaluator/evaluator.d.ts +10 -1
  63. package/dist/local-evaluator/evaluator.js +20 -9
  64. package/dist/local-evaluator/evaluator.js.map +1 -1
  65. package/dist/local-evaluator/evaluator.mjs +20 -9
  66. package/dist/local-evaluator/evaluator.mjs.map +1 -1
  67. package/dist/{types-C23_uaY8.d.ts → types-DhFPiZ3t.d.ts} +6 -1
  68. package/dist/{types-BV6abBnF.d.mts → types-cQVCMeNV.d.mts} +6 -1
  69. package/dist/verify.js +1 -1
  70. package/dist/verify.js.map +1 -1
  71. package/dist/verify.mjs +1 -1
  72. package/dist/verify.mjs.map +1 -1
  73. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-BV6abBnF.mjs';
1
+ import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-cQVCMeNV.mjs';
2
2
  import '../types-sy3tq8lp.mjs';
3
3
  import '../metadata-capture.mjs';
4
4
 
@@ -1,4 +1,4 @@
1
- import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-C23_uaY8.js';
1
+ import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-DhFPiZ3t.js';
2
2
  import '../types-9tns4wyl.js';
3
3
  import '../metadata-capture.js';
4
4
 
@@ -147,8 +147,9 @@ function extractBacktickSubstitutions(text, collect) {
147
147
  return kept.join(" ");
148
148
  }
149
149
  function basename(token) {
150
- const slash = token.lastIndexOf("/");
151
- return slash === -1 ? token : token.slice(slash + 1);
150
+ const slash = Math.max(token.lastIndexOf("/"), token.lastIndexOf("\\"));
151
+ const name = slash === -1 ? token : token.slice(slash + 1);
152
+ return name.replace(/\.(exe|cmd|bat|ps1)$/i, "");
152
153
  }
153
154
  function matchSegment(segment, list) {
154
155
  const tokens = segment.split(/\s+/).filter((t) => /[a-z0-9]/.test(t));
@@ -281,7 +282,9 @@ var LocalEvaluator = class {
281
282
  }
282
283
  return {
283
284
  recommendation: "ALLOW",
284
- reason: "All PDLSS checks passed",
285
+ // "evaluated": dimensions absent from the policy are skipped, not
286
+ // failed — evaluatedDimensions below records which ones ran.
287
+ reason: "All evaluated PDLSS checks passed",
285
288
  evaluatedDimensions: {
286
289
  purpose: true,
287
290
  scope: !!this.policy.scope,
@@ -380,7 +383,7 @@ var LocalEvaluator = class {
380
383
  }
381
384
  }
382
385
  if ((context.purpose === "file.read" || context.purpose === "file.write" || context.purpose === "file.delete") && context.target) {
383
- const targetLower = context.target.toLowerCase();
386
+ const targetLower = context.target.toLowerCase().replace(/\\/g, "/");
384
387
  for (const sensitivePath of SENSITIVE_PATHS) {
385
388
  if (targetLower.includes(sensitivePath.toLowerCase())) {
386
389
  score = Math.max(score, 50);
@@ -409,12 +412,20 @@ var LocalEvaluator = class {
409
412
  matchesAnyPattern(value, patterns) {
410
413
  return patterns.some((pattern) => this.matchGlob(value, pattern));
411
414
  }
412
- /**
413
- * Simple glob pattern matching.
414
- * Supports * (matches any characters including / and spaces) and ? (single char).
415
- * Uses the same approach as the backend's matchGlobPattern.
416
- */
415
+ homePrefix() {
416
+ if (this.cachedHomePrefix !== void 0) return this.cachedHomePrefix;
417
+ const env = typeof process !== "undefined" ? process.env : void 0;
418
+ const home = env?.HOME || env?.USERPROFILE;
419
+ this.cachedHomePrefix = home ? home.replace(/\\/g, "/") : null;
420
+ return this.cachedHomePrefix;
421
+ }
417
422
  matchGlob(value, pattern) {
423
+ value = value.replace(/\\/g, "/");
424
+ pattern = pattern.replace(/\\/g, "/");
425
+ if (pattern === "~" || pattern.startsWith("~/")) {
426
+ const home = this.homePrefix();
427
+ if (home) pattern = home + pattern.slice(1);
428
+ }
418
429
  if (pattern === value) return true;
419
430
  const starCount = (pattern.match(/\*/g) ?? []).length;
420
431
  if (starCount > 8) {
@@ -3687,7 +3698,7 @@ function getTrustLevel(score) {
3687
3698
  }
3688
3699
 
3689
3700
  // src/version.ts
3690
- var SDK_VERSION = "3.11.0";
3701
+ var SDK_VERSION = "3.11.1";
3691
3702
 
3692
3703
  // src/well-known.ts
3693
3704
  var CACHE_TTL_MS = 60 * 60 * 1e3;
@@ -4451,13 +4462,29 @@ var TraceLogger = class {
4451
4462
  */
4452
4463
  logEvaluation(context, decision) {
4453
4464
  if (!this.enabled) return;
4454
- this.write({
4455
- id: this.generateId(),
4456
- timestamp: /* @__PURE__ */ new Date(),
4457
- type: "evaluation",
4458
- context: redactDeep(context),
4459
- decision: redactDeep(decision)
4460
- });
4465
+ let event;
4466
+ try {
4467
+ event = {
4468
+ id: this.generateId(),
4469
+ timestamp: /* @__PURE__ */ new Date(),
4470
+ type: "evaluation",
4471
+ context: redactDeep(context),
4472
+ decision: redactDeep(decision)
4473
+ };
4474
+ } catch (err) {
4475
+ event = {
4476
+ id: this.generateId(),
4477
+ timestamp: /* @__PURE__ */ new Date(),
4478
+ type: "error",
4479
+ metadata: {
4480
+ error: `trace redaction failed: ${err instanceof Error ? err.message : String(err)}`,
4481
+ recommendation: decision.recommendation,
4482
+ purpose: context.purpose,
4483
+ action: context.action
4484
+ }
4485
+ };
4486
+ }
4487
+ this.write(event);
4461
4488
  }
4462
4489
  /**
4463
4490
  * Log a tool call the guard saw but did not govern. One line per skip
@@ -4499,17 +4526,34 @@ var TraceLogger = class {
4499
4526
  });
4500
4527
  }
4501
4528
  write(event) {
4529
+ let line;
4530
+ try {
4531
+ line = JSON.stringify(event) + "\n";
4532
+ } catch {
4533
+ return;
4534
+ }
4502
4535
  try {
4503
4536
  const filePath = this.getCurrentFilePath();
4504
- const line = JSON.stringify(event) + "\n";
4505
4537
  if ((0, import_fs3.existsSync)(filePath)) {
4506
4538
  const stats = (0, import_fs3.statSync)(filePath);
4507
4539
  if (stats.size > MAX_FILE_SIZE) {
4508
4540
  this.rotate();
4509
4541
  }
4510
4542
  }
4511
- (0, import_fs3.appendFileSync)(filePath, line);
4543
+ for (let attempt = 0; attempt < 3; attempt++) {
4544
+ try {
4545
+ (0, import_fs3.appendFileSync)(filePath, line);
4546
+ return;
4547
+ } catch {
4548
+ }
4549
+ }
4550
+ const fallbackPath = filePath.replace(/\.jsonl$/, `-r${process.pid}.jsonl`);
4551
+ (0, import_fs3.appendFileSync)(fallbackPath, line);
4512
4552
  } catch {
4553
+ try {
4554
+ console.error(`[AstraSync TraceLogger] failed to persist trace line: ${line.trim()}`);
4555
+ } catch {
4556
+ }
4513
4557
  }
4514
4558
  }
4515
4559
  getCurrentFilePath() {