praxis-sec 1.2.1 → 1.2.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.
Files changed (53) hide show
  1. package/README.md +84 -115
  2. package/ai-defense/cost-protection.md +6 -0
  3. package/ai-defense/llm-security-checklist.md +6 -0
  4. package/ai-defense/system-prompt-armor.md +7 -1
  5. package/assets/praxis-architecture.svg +304 -0
  6. package/assets/praxis-logo.svg +38 -0
  7. package/checklists/launch-day.md +6 -7
  8. package/cli/agents/agent-telemetry-agent.js +2 -0
  9. package/cli/agents/api-fuzzer.js +2 -2
  10. package/cli/agents/git-history-scanner.js +14 -15
  11. package/cli/agents/html-reporter.js +9 -8
  12. package/cli/agents/mcp-security-agent.js +600 -594
  13. package/cli/agents/memory-poisoning-agent.js +1 -5
  14. package/cli/agents/orchestrator.js +375 -360
  15. package/cli/commands/agent-fix.js +3 -1
  16. package/cli/commands/audit.js +1272 -1228
  17. package/cli/commands/autofix.js +32 -13
  18. package/cli/commands/baseline.js +4 -2
  19. package/cli/commands/benchmark.js +2 -1
  20. package/cli/commands/ci.js +12 -8
  21. package/cli/commands/diff.js +2 -1
  22. package/cli/commands/env-audit.js +4 -2
  23. package/cli/commands/fix.js +2 -1
  24. package/cli/commands/legal.js +2 -1
  25. package/cli/commands/mcp.js +54 -51
  26. package/cli/commands/openclaw.js +3 -6
  27. package/cli/commands/red-team.js +2 -1
  28. package/cli/commands/remediate.js +2 -1
  29. package/cli/commands/rotate.js +2 -1
  30. package/cli/commands/scan-mcp.js +20 -9
  31. package/cli/commands/scan-standard.js +3 -6
  32. package/cli/commands/scan.js +15 -7
  33. package/cli/commands/score.js +2 -1
  34. package/cli/commands/vibe-check.js +4 -2
  35. package/cli/commands/watch.js +8 -6
  36. package/cli/core/glob.js +7 -5
  37. package/cli/core/output/json.js +56 -48
  38. package/cli/core/paths.js +91 -0
  39. package/cli/core/web/jobs.js +2 -0
  40. package/cli/data/documented-secret-examples.json +14 -0
  41. package/cli/utils/cache-manager.js +2 -1
  42. package/cli/utils/entropy.js +19 -0
  43. package/cli/utils/hermes-tool-registry.js +11 -9
  44. package/configs/firebase/security-checklist.md +3 -3
  45. package/configs/supabase/security-checklist.md +19 -21
  46. package/docs/RELEASE-1.2.4.md +85 -0
  47. package/docs/RELEASING.md +51 -0
  48. package/docs/THIRD_PARTY_NOTICES.md +8 -0
  49. package/docs/THREAT_INTEL.md +4 -2
  50. package/docs/USAGE.md +97 -76
  51. package/package.json +6 -4
  52. package/snippets/README.md +6 -0
  53. package/snippets/auth/jwt-checklist.md +14 -13
@@ -130,6 +130,7 @@ export async function agentFixCommand(targetPath = '.', options = {}) {
130
130
  let scanResult;
131
131
  try {
132
132
  scanResult = await auditCommand(root, { _agenticInner: true, deep: false, deps: false, noAi: true });
133
+ if (!scanResult || scanResult.scanComplete !== true) throw new Error('Initial scan incomplete; refusing to generate fixes');
133
134
  } catch (err) {
134
135
  scanSpinner.fail('Scan failed');
135
136
  output.error(err.message);
@@ -734,7 +735,7 @@ async function rescanForFile(root, filePath, options) {
734
735
  if (!Array.isArray(report.findings)) throw new Error('Sandbox re-scan produced no finding list');
735
736
  return report;
736
737
  }
737
- return auditCommand(root, { _agenticInner: true, deep: false, deps: false, noAi: true });
738
+ return auditCommand(root, { _agenticInner: true, json: true, deep: false, deps: false, noAi: true });
738
739
  }
739
740
 
740
741
  export async function verifyFile(root, filePath, originalFindings, options = {}) {
@@ -799,6 +800,7 @@ export async function verifyFile(root, filePath, originalFindings, options = {})
799
800
 
800
801
  // Tier 3 — re-scan: original findings must be gone from the fixed file
801
802
  const result = await rescanForFile(root, filePath, options);
803
+ if (!result || result.scanComplete !== true) throw new Error('Verification scan incomplete; findings cannot be treated as resolved');
802
804
  const remaining = (result.findings ?? []).filter(f => {
803
805
  const fPath = path.resolve(root, f.file);
804
806
  const targetPath = path.resolve(root, filePath);