@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
@@ -121,8 +121,9 @@ function extractBacktickSubstitutions(text, collect) {
121
121
  return kept.join(" ");
122
122
  }
123
123
  function basename(token) {
124
- const slash = token.lastIndexOf("/");
125
- return slash === -1 ? token : token.slice(slash + 1);
124
+ const slash = Math.max(token.lastIndexOf("/"), token.lastIndexOf("\\"));
125
+ const name = slash === -1 ? token : token.slice(slash + 1);
126
+ return name.replace(/\.(exe|cmd|bat|ps1)$/i, "");
126
127
  }
127
128
  function matchSegment(segment, list) {
128
129
  const tokens = segment.split(/\s+/).filter((t) => /[a-z0-9]/.test(t));
@@ -255,7 +256,9 @@ var LocalEvaluator = class {
255
256
  }
256
257
  return {
257
258
  recommendation: "ALLOW",
258
- reason: "All PDLSS checks passed",
259
+ // "evaluated": dimensions absent from the policy are skipped, not
260
+ // failed — evaluatedDimensions below records which ones ran.
261
+ reason: "All evaluated PDLSS checks passed",
259
262
  evaluatedDimensions: {
260
263
  purpose: true,
261
264
  scope: !!this.policy.scope,
@@ -354,7 +357,7 @@ var LocalEvaluator = class {
354
357
  }
355
358
  }
356
359
  if ((context.purpose === "file.read" || context.purpose === "file.write" || context.purpose === "file.delete") && context.target) {
357
- const targetLower = context.target.toLowerCase();
360
+ const targetLower = context.target.toLowerCase().replace(/\\/g, "/");
358
361
  for (const sensitivePath of SENSITIVE_PATHS) {
359
362
  if (targetLower.includes(sensitivePath.toLowerCase())) {
360
363
  score = Math.max(score, 50);
@@ -383,12 +386,20 @@ var LocalEvaluator = class {
383
386
  matchesAnyPattern(value, patterns) {
384
387
  return patterns.some((pattern) => this.matchGlob(value, pattern));
385
388
  }
386
- /**
387
- * Simple glob pattern matching.
388
- * Supports * (matches any characters including / and spaces) and ? (single char).
389
- * Uses the same approach as the backend's matchGlobPattern.
390
- */
389
+ homePrefix() {
390
+ if (this.cachedHomePrefix !== void 0) return this.cachedHomePrefix;
391
+ const env = typeof process !== "undefined" ? process.env : void 0;
392
+ const home = env?.HOME || env?.USERPROFILE;
393
+ this.cachedHomePrefix = home ? home.replace(/\\/g, "/") : null;
394
+ return this.cachedHomePrefix;
395
+ }
391
396
  matchGlob(value, pattern) {
397
+ value = value.replace(/\\/g, "/");
398
+ pattern = pattern.replace(/\\/g, "/");
399
+ if (pattern === "~" || pattern.startsWith("~/")) {
400
+ const home = this.homePrefix();
401
+ if (home) pattern = home + pattern.slice(1);
402
+ }
392
403
  if (pattern === value) return true;
393
404
  const starCount = (pattern.match(/\*/g) ?? []).length;
394
405
  if (starCount > 8) {
@@ -3661,7 +3672,7 @@ function getTrustLevel(score) {
3661
3672
  }
3662
3673
 
3663
3674
  // src/version.ts
3664
- var SDK_VERSION = "3.11.0";
3675
+ var SDK_VERSION = "3.11.1";
3665
3676
 
3666
3677
  // src/well-known.ts
3667
3678
  var CACHE_TTL_MS = 60 * 60 * 1e3;
@@ -4428,13 +4439,29 @@ var TraceLogger = class {
4428
4439
  */
4429
4440
  logEvaluation(context, decision) {
4430
4441
  if (!this.enabled) return;
4431
- this.write({
4432
- id: this.generateId(),
4433
- timestamp: /* @__PURE__ */ new Date(),
4434
- type: "evaluation",
4435
- context: redactDeep(context),
4436
- decision: redactDeep(decision)
4437
- });
4442
+ let event;
4443
+ try {
4444
+ event = {
4445
+ id: this.generateId(),
4446
+ timestamp: /* @__PURE__ */ new Date(),
4447
+ type: "evaluation",
4448
+ context: redactDeep(context),
4449
+ decision: redactDeep(decision)
4450
+ };
4451
+ } catch (err) {
4452
+ event = {
4453
+ id: this.generateId(),
4454
+ timestamp: /* @__PURE__ */ new Date(),
4455
+ type: "error",
4456
+ metadata: {
4457
+ error: `trace redaction failed: ${err instanceof Error ? err.message : String(err)}`,
4458
+ recommendation: decision.recommendation,
4459
+ purpose: context.purpose,
4460
+ action: context.action
4461
+ }
4462
+ };
4463
+ }
4464
+ this.write(event);
4438
4465
  }
4439
4466
  /**
4440
4467
  * Log a tool call the guard saw but did not govern. One line per skip
@@ -4476,17 +4503,34 @@ var TraceLogger = class {
4476
4503
  });
4477
4504
  }
4478
4505
  write(event) {
4506
+ let line;
4507
+ try {
4508
+ line = JSON.stringify(event) + "\n";
4509
+ } catch {
4510
+ return;
4511
+ }
4479
4512
  try {
4480
4513
  const filePath = this.getCurrentFilePath();
4481
- const line = JSON.stringify(event) + "\n";
4482
4514
  if (existsSync2(filePath)) {
4483
4515
  const stats = statSync(filePath);
4484
4516
  if (stats.size > MAX_FILE_SIZE) {
4485
4517
  this.rotate();
4486
4518
  }
4487
4519
  }
4488
- appendFileSync(filePath, line);
4520
+ for (let attempt = 0; attempt < 3; attempt++) {
4521
+ try {
4522
+ appendFileSync(filePath, line);
4523
+ return;
4524
+ } catch {
4525
+ }
4526
+ }
4527
+ const fallbackPath = filePath.replace(/\.jsonl$/, `-r${process.pid}.jsonl`);
4528
+ appendFileSync(fallbackPath, line);
4489
4529
  } catch {
4530
+ try {
4531
+ console.error(`[AstraSync TraceLogger] failed to persist trace line: ${line.trim()}`);
4532
+ } catch {
4533
+ }
4490
4534
  }
4491
4535
  }
4492
4536
  getCurrentFilePath() {