@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
@@ -364,8 +364,9 @@ function extractBacktickSubstitutions(text, collect) {
364
364
  return kept.join(" ");
365
365
  }
366
366
  function basename(token) {
367
- const slash = token.lastIndexOf("/");
368
- return slash === -1 ? token : token.slice(slash + 1);
367
+ const slash = Math.max(token.lastIndexOf("/"), token.lastIndexOf("\\"));
368
+ const name = slash === -1 ? token : token.slice(slash + 1);
369
+ return name.replace(/\.(exe|cmd|bat|ps1)$/i, "");
369
370
  }
370
371
  function matchSegment(segment, list) {
371
372
  const tokens = segment.split(/\s+/).filter((t) => /[a-z0-9]/.test(t));
@@ -498,7 +499,9 @@ var LocalEvaluator = class {
498
499
  }
499
500
  return {
500
501
  recommendation: "ALLOW",
501
- reason: "All PDLSS checks passed",
502
+ // "evaluated": dimensions absent from the policy are skipped, not
503
+ // failed — evaluatedDimensions below records which ones ran.
504
+ reason: "All evaluated PDLSS checks passed",
502
505
  evaluatedDimensions: {
503
506
  purpose: true,
504
507
  scope: !!this.policy.scope,
@@ -597,7 +600,7 @@ var LocalEvaluator = class {
597
600
  }
598
601
  }
599
602
  if ((context.purpose === "file.read" || context.purpose === "file.write" || context.purpose === "file.delete") && context.target) {
600
- const targetLower = context.target.toLowerCase();
603
+ const targetLower = context.target.toLowerCase().replace(/\\/g, "/");
601
604
  for (const sensitivePath of SENSITIVE_PATHS) {
602
605
  if (targetLower.includes(sensitivePath.toLowerCase())) {
603
606
  score = Math.max(score, 50);
@@ -626,12 +629,20 @@ var LocalEvaluator = class {
626
629
  matchesAnyPattern(value, patterns) {
627
630
  return patterns.some((pattern) => this.matchGlob(value, pattern));
628
631
  }
629
- /**
630
- * Simple glob pattern matching.
631
- * Supports * (matches any characters including / and spaces) and ? (single char).
632
- * Uses the same approach as the backend's matchGlobPattern.
633
- */
632
+ homePrefix() {
633
+ if (this.cachedHomePrefix !== void 0) return this.cachedHomePrefix;
634
+ const env = typeof process !== "undefined" ? process.env : void 0;
635
+ const home = env?.HOME || env?.USERPROFILE;
636
+ this.cachedHomePrefix = home ? home.replace(/\\/g, "/") : null;
637
+ return this.cachedHomePrefix;
638
+ }
634
639
  matchGlob(value, pattern) {
640
+ value = value.replace(/\\/g, "/");
641
+ pattern = pattern.replace(/\\/g, "/");
642
+ if (pattern === "~" || pattern.startsWith("~/")) {
643
+ const home = this.homePrefix();
644
+ if (home) pattern = home + pattern.slice(1);
645
+ }
635
646
  if (pattern === value) return true;
636
647
  const starCount = (pattern.match(/\*/g) ?? []).length;
637
648
  if (starCount > 8) {
@@ -3904,7 +3915,7 @@ function getTrustLevel(score) {
3904
3915
  }
3905
3916
 
3906
3917
  // src/version.ts
3907
- var SDK_VERSION = "3.11.0";
3918
+ var SDK_VERSION = "3.11.1";
3908
3919
 
3909
3920
  // src/well-known.ts
3910
3921
  var CACHE_TTL_MS = 60 * 60 * 1e3;
@@ -4671,13 +4682,29 @@ var TraceLogger = class {
4671
4682
  */
4672
4683
  logEvaluation(context, decision) {
4673
4684
  if (!this.enabled) return;
4674
- this.write({
4675
- id: this.generateId(),
4676
- timestamp: /* @__PURE__ */ new Date(),
4677
- type: "evaluation",
4678
- context: redactDeep(context),
4679
- decision: redactDeep(decision)
4680
- });
4685
+ let event;
4686
+ try {
4687
+ event = {
4688
+ id: this.generateId(),
4689
+ timestamp: /* @__PURE__ */ new Date(),
4690
+ type: "evaluation",
4691
+ context: redactDeep(context),
4692
+ decision: redactDeep(decision)
4693
+ };
4694
+ } catch (err) {
4695
+ event = {
4696
+ id: this.generateId(),
4697
+ timestamp: /* @__PURE__ */ new Date(),
4698
+ type: "error",
4699
+ metadata: {
4700
+ error: `trace redaction failed: ${err instanceof Error ? err.message : String(err)}`,
4701
+ recommendation: decision.recommendation,
4702
+ purpose: context.purpose,
4703
+ action: context.action
4704
+ }
4705
+ };
4706
+ }
4707
+ this.write(event);
4681
4708
  }
4682
4709
  /**
4683
4710
  * Log a tool call the guard saw but did not govern. One line per skip
@@ -4719,17 +4746,34 @@ var TraceLogger = class {
4719
4746
  });
4720
4747
  }
4721
4748
  write(event) {
4749
+ let line;
4750
+ try {
4751
+ line = JSON.stringify(event) + "\n";
4752
+ } catch {
4753
+ return;
4754
+ }
4722
4755
  try {
4723
4756
  const filePath = this.getCurrentFilePath();
4724
- const line = JSON.stringify(event) + "\n";
4725
4757
  if (existsSync2(filePath)) {
4726
4758
  const stats = statSync(filePath);
4727
4759
  if (stats.size > MAX_FILE_SIZE) {
4728
4760
  this.rotate();
4729
4761
  }
4730
4762
  }
4731
- appendFileSync(filePath, line);
4763
+ for (let attempt = 0; attempt < 3; attempt++) {
4764
+ try {
4765
+ appendFileSync(filePath, line);
4766
+ return;
4767
+ } catch {
4768
+ }
4769
+ }
4770
+ const fallbackPath = filePath.replace(/\.jsonl$/, `-r${process.pid}.jsonl`);
4771
+ appendFileSync(fallbackPath, line);
4732
4772
  } catch {
4773
+ try {
4774
+ console.error(`[AstraSync TraceLogger] failed to persist trace line: ${line.trim()}`);
4775
+ } catch {
4776
+ }
4733
4777
  }
4734
4778
  }
4735
4779
  getCurrentFilePath() {