@westbayberry/dg 2.2.0 → 2.3.0

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 (48) hide show
  1. package/dist/agents/claude-code.js +10 -0
  2. package/dist/agents/codex.js +1 -1
  3. package/dist/agents/cursor.js +6 -1
  4. package/dist/agents/gate-posture.js +21 -0
  5. package/dist/agents/persistence.js +68 -2
  6. package/dist/agents/registry.js +4 -3
  7. package/dist/agents/routing.js +118 -0
  8. package/dist/agents/windsurf.js +1 -1
  9. package/dist/audit/rules.js +6 -2
  10. package/dist/auth/store.js +9 -2
  11. package/dist/commands/agents.js +45 -1
  12. package/dist/commands/audit.js +6 -0
  13. package/dist/commands/setup.js +1 -2
  14. package/dist/commands/uninstall.js +2 -1
  15. package/dist/config/settings.js +35 -4
  16. package/dist/install-ui/LiveInstall.js +3 -2
  17. package/dist/install-ui/block-render.js +17 -13
  18. package/dist/launcher/agent-check.js +455 -25
  19. package/dist/launcher/agent-hook-exec.js +1 -1
  20. package/dist/launcher/agent-hook-io.js +12 -4
  21. package/dist/launcher/classify.js +27 -1
  22. package/dist/launcher/env.js +39 -7
  23. package/dist/launcher/install-preflight.js +15 -6
  24. package/dist/launcher/live-install.js +4 -3
  25. package/dist/launcher/manifest-screen.js +171 -0
  26. package/dist/launcher/output-redaction.js +4 -1
  27. package/dist/launcher/preflight-prompt.js +4 -3
  28. package/dist/launcher/run.js +90 -18
  29. package/dist/project/dgfile.js +2 -1
  30. package/dist/project/override-trust.js +0 -0
  31. package/dist/proxy/metadata-map.js +29 -13
  32. package/dist/proxy/server.js +130 -14
  33. package/dist/runtime/first-run.js +2 -1
  34. package/dist/sbom-ui/inventory.js +5 -1
  35. package/dist/scan/staged.js +31 -8
  36. package/dist/scan-ui/hooks/useScan.js +4 -1
  37. package/dist/security/sanitize.js +8 -4
  38. package/dist/service/state.js +1 -1
  39. package/dist/service/trust-store.js +5 -9
  40. package/dist/service/worker.js +3 -3
  41. package/dist/setup/plan.js +156 -12
  42. package/dist/setup/uninstall-standalone.js +25 -0
  43. package/dist/setup-ui/wizard.js +9 -1
  44. package/dist/standalone/uninstall.mjs +2123 -0
  45. package/dist/verify/local.js +2 -2
  46. package/dist/verify/package-check.js +3 -1
  47. package/npm-shrinkwrap.json +2 -2
  48. package/package.json +2 -1
@@ -1,4 +1,5 @@
1
1
  import { formatCooldownDuration, formatPackageAge } from "../policy/cooldown.js";
2
+ import { sanitizeLine } from "../security/sanitize.js";
2
3
  const VERIFIED_BAD = new Set([
3
4
  "malware",
4
5
  "policy",
@@ -53,9 +54,9 @@ export function describeBlockedInstall(decision) {
53
54
  : "Re-check later with 'dg verify', or override if you accept the risk.";
54
55
  return {
55
56
  kind: verifiedBad ? "blocked" : "unverified",
56
- packageName: decision.packageName,
57
+ packageName: sanitizeLine(decision.packageName),
57
58
  headline: HEADLINES[decision.cause],
58
- reason: decision.reason,
59
+ reason: sanitizeLine(decision.reason),
59
60
  cause: decision.cause,
60
61
  ...(decision.resetsAt ? { resetsAt: decision.resetsAt } : {}),
61
62
  ...(nextStep ? { nextStep } : {}),
@@ -63,27 +64,30 @@ export function describeBlockedInstall(decision) {
63
64
  };
64
65
  }
65
66
  export function describeFlaggedWarn(decision) {
67
+ const packageName = sanitizeLine(decision.packageName);
66
68
  if (decision.cause === "quota-exceeded") {
67
- return { packageName: decision.packageName, reason: "installed unverified (over quota)" };
69
+ return { packageName, reason: "installed unverified (over quota)" };
68
70
  }
69
71
  if (decision.forceOverride?.allowed) {
70
- return { packageName: decision.packageName, reason: "installed despite block (--dg-force-install)" };
72
+ return { packageName, reason: "installed despite block (--dg-force-install)" };
71
73
  }
72
- return { packageName: decision.packageName, reason: decision.reason };
74
+ return { packageName, reason: sanitizeLine(decision.reason) };
73
75
  }
74
76
  export function renderInstallDecision(decision) {
77
+ const packageName = sanitizeLine(decision.packageName);
78
+ const reason = sanitizeLine(decision.reason);
75
79
  if (decision.action === "pass") {
76
- return `✓ DG verified ${decision.packageName} — clean\n`;
80
+ return `✓ DG verified ${packageName} — clean\n`;
77
81
  }
78
82
  if (decision.action === "warn") {
79
83
  if (decision.cause === "quota-exceeded") {
80
84
  const reset = formatResetDate(decision.resetsAt);
81
- return `⚠ Over quota — installed ${decision.packageName} unverified${reset ? ` (resets ${reset})` : ""}\n`;
85
+ return `⚠ Over quota — installed ${packageName} unverified${reset ? ` (resets ${reset})` : ""}\n`;
82
86
  }
83
87
  if (decision.forceOverride?.allowed) {
84
- return `⚠ DG override — installing ${decision.packageName} despite block (--dg-force-install)\n`;
88
+ return `⚠ DG override — installing ${packageName} despite block (--dg-force-install)\n`;
85
89
  }
86
- return `⚠ DG flagged ${decision.packageName} (warn) — ${decision.reason}\n`;
90
+ return `⚠ DG flagged ${packageName} (warn) — ${reason}\n`;
87
91
  }
88
92
  if (decision.cause === "quota-exceeded") {
89
93
  const reset = formatResetDate(decision.resetsAt);
@@ -98,15 +102,15 @@ export function renderInstallDecision(decision) {
98
102
  verifiedBad
99
103
  ? `✘ DG blocked install — ${headline}`
100
104
  : decision.cause === "cooldown"
101
- ? `? DG quarantined ${decision.packageName} — ${headline}`
102
- : `? DG could not verify ${decision.packageName} — ${headline}`,
103
- ` ${decision.packageName} ${decision.reason}`
105
+ ? `? DG quarantined ${packageName} — ${headline}`
106
+ : `? DG could not verify ${packageName} — ${headline}`,
107
+ ` ${packageName} ${reason}`
104
108
  ];
105
109
  if (decision.cause === "cooldown" && decision.cooldown) {
106
110
  lines.push(` ${cooldownDetailLine(decision.cooldown)}`);
107
111
  }
108
112
  if (decision.dashboardUrl) {
109
- lines.push(` Evidence: ${decision.dashboardUrl}`);
113
+ lines.push(` Evidence: ${sanitizeLine(decision.dashboardUrl)}`);
110
114
  }
111
115
  if (decision.unauthenticated && decision.cause !== "needs-login") {
112
116
  lines.push(" Auth: local policy only (run 'dg login' for full coverage)");