torusguard 1.4.0 → 2.1.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 (160) hide show
  1. package/.torusguard/.manifest.json +50 -28
  2. package/.torusguard/auth.json +5 -0
  3. package/.torusguard/rules/container/TG-CONT-001-root-user-execution.md +50 -0
  4. package/.torusguard/rules/container/TG-CONT-002-docker-socket-mount.md +47 -0
  5. package/.torusguard/rules/container/TG-CONT-003-privileged-container-mode.md +53 -0
  6. package/.torusguard/rules/container/TG-CONT-004-build-arg-secret-exposure.md +43 -0
  7. package/.torusguard/rules/git/TG-GIT-001-historical-secret-in-git-commit.md +44 -0
  8. package/.torusguard/rules/git/TG-GIT-002-plaintext-credentials-in-git-config.md +41 -0
  9. package/.torusguard/rules/git/TG-GIT-003-sensitive-tracked-file-gitignore-breach.md +40 -0
  10. package/.torusguard/rules/rag/TG-RAG-001-untrusted-rag-context-injection.md +72 -0
  11. package/.torusguard/rules/rag/TG-RAG-002-autonomous-llm-tool-unsandboxed-call.md +51 -0
  12. package/.torusguard/rules/rag/TG-RAG-003-unpartitioned-vector-tenant-lookup.md +51 -0
  13. package/.torusguard/rules/redos/TG-REDOS-001-catastrophic-exponential-backtracking.md +46 -0
  14. package/.torusguard/rules/redos/TG-REDOS-002-unbounded-nested-quantifier.md +43 -0
  15. package/.torusguard/rules_catalog.json +338 -518
  16. package/.torusguard/scripts/__pycache__/apply_runner.cpython-314.pyc +0 -0
  17. package/.torusguard/scripts/__pycache__/audit_runner.cpython-314.pyc +0 -0
  18. package/.torusguard/scripts/__pycache__/harden_runner.cpython-314.pyc +0 -0
  19. package/.torusguard/scripts/__pycache__/html_reporter.cpython-314.pyc +0 -0
  20. package/.torusguard/scripts/__pycache__/manifest_builder.cpython-314.pyc +0 -0
  21. package/.torusguard/scripts/__pycache__/recipes_runner.cpython-314.pyc +0 -0
  22. package/.torusguard/scripts/__pycache__/report_sync.cpython-314.pyc +0 -0
  23. package/.torusguard/scripts/manifest_builder.py +1 -1
  24. package/.torusguard/skills/torusguard/SKILL.md +69 -24
  25. package/.torusguard/skills/torusguard/bootstrap.py +57 -24
  26. package/.torusguard/skills/torusguard-ai-guard/SKILL.md +95 -0
  27. package/.torusguard/skills/torusguard-apply/SKILL.md +60 -34
  28. package/.torusguard/skills/torusguard-audit/SKILL.md +73 -24
  29. package/.torusguard/skills/torusguard-authorize/SKILL.md +48 -6
  30. package/.torusguard/skills/torusguard-container/SKILL.md +94 -0
  31. package/.torusguard/skills/torusguard-exploit-check/SKILL.md +50 -6
  32. package/.torusguard/skills/torusguard-full/SKILL.md +62 -19
  33. package/.torusguard/skills/torusguard-git-mine/SKILL.md +92 -0
  34. package/.torusguard/skills/torusguard-harden/SKILL.md +81 -50
  35. package/.torusguard/skills/torusguard-init/SKILL.md +61 -14
  36. package/.torusguard/skills/torusguard-ocr-scan/SKILL.md +94 -0
  37. package/.torusguard/skills/torusguard-recheck/SKILL.md +71 -18
  38. package/.torusguard/skills/torusguard-redos/SKILL.md +91 -0
  39. package/.torusguard/skills/torusguard-report/SKILL.md +50 -9
  40. package/.torusguard/skills/torusguard-status/SKILL.md +63 -10
  41. package/.torusguard/skills/torusguard-verify/SKILL.md +52 -10
  42. package/.torusguard/skills/torusguard-web-validate/SKILL.md +53 -8
  43. package/.torusguard/snapshots/20260921-182638/go.mod.bak +11 -0
  44. package/.torusguard/snapshots/20260921-185213/file.go.bak +5 -0
  45. package/.torusguard/workflows/ai-guard.md +31 -0
  46. package/.torusguard/workflows/apply.md +32 -55
  47. package/.torusguard/workflows/audit.md +28 -46
  48. package/.torusguard/workflows/authorize.md +27 -50
  49. package/.torusguard/workflows/container.md +29 -0
  50. package/.torusguard/workflows/exploit-check.md +28 -50
  51. package/.torusguard/workflows/git-mine.md +25 -0
  52. package/.torusguard/workflows/harden.md +29 -48
  53. package/.torusguard/workflows/init.md +27 -50
  54. package/.torusguard/workflows/memory.md +18 -23
  55. package/.torusguard/workflows/ocr-scan.md +25 -0
  56. package/.torusguard/workflows/recheck.md +28 -46
  57. package/.torusguard/workflows/redos.md +27 -0
  58. package/.torusguard/workflows/report.md +33 -52
  59. package/.torusguard/workflows/status.md +31 -52
  60. package/.torusguard/workflows/verify.md +29 -49
  61. package/.torusguard/workflows/web-validate.md +22 -45
  62. package/README.md +336 -386
  63. package/package.json +1 -1
  64. package/skills/torusguard/SKILL.md +71 -24
  65. package/skills/torusguard/__pycache__/bootstrap.cpython-314.pyc +0 -0
  66. package/skills/torusguard/bootstrap.py +60 -71
  67. package/skills/torusguard/payload/.manifest.json +50 -28
  68. package/skills/torusguard/payload/TORUSGUARD.md +145 -145
  69. package/skills/torusguard/payload/agents/auditor.md +41 -41
  70. package/skills/torusguard/payload/agents/profiler.md +49 -49
  71. package/skills/torusguard/payload/agents/remediator.md +41 -41
  72. package/skills/torusguard/payload/agents/reviewer.md +39 -39
  73. package/skills/torusguard/payload/agents/validator.md +46 -46
  74. package/skills/torusguard/payload/config/scope.json +24 -24
  75. package/skills/torusguard/payload/references/csharp-security.md +41 -41
  76. package/skills/torusguard/payload/references/go-security.md +41 -41
  77. package/skills/torusguard/payload/references/java-security.md +40 -40
  78. package/skills/torusguard/payload/references/polyglot-security-matrix.md +25 -25
  79. package/skills/torusguard/payload/references/rust-security.md +40 -40
  80. package/skills/torusguard/payload/rules/container/TG-CONT-001-root-user-execution.md +50 -0
  81. package/skills/torusguard/payload/rules/container/TG-CONT-002-docker-socket-mount.md +47 -0
  82. package/skills/torusguard/payload/rules/container/TG-CONT-003-privileged-container-mode.md +53 -0
  83. package/skills/torusguard/payload/rules/container/TG-CONT-004-build-arg-secret-exposure.md +43 -0
  84. package/skills/torusguard/payload/rules/custom/.gitkeep +1 -1
  85. package/skills/torusguard/payload/rules/custom/README.md +30 -30
  86. package/skills/torusguard/payload/rules/git/TG-GIT-001-historical-secret-in-git-commit.md +44 -0
  87. package/skills/torusguard/payload/rules/git/TG-GIT-002-plaintext-credentials-in-git-config.md +41 -0
  88. package/skills/torusguard/payload/rules/git/TG-GIT-003-sensitive-tracked-file-gitignore-breach.md +40 -0
  89. package/skills/torusguard/payload/rules/rag/TG-RAG-001-untrusted-rag-context-injection.md +72 -0
  90. package/skills/torusguard/payload/rules/rag/TG-RAG-002-autonomous-llm-tool-unsandboxed-call.md +51 -0
  91. package/skills/torusguard/payload/rules/rag/TG-RAG-003-unpartitioned-vector-tenant-lookup.md +51 -0
  92. package/skills/torusguard/payload/rules/redos/TG-REDOS-001-catastrophic-exponential-backtracking.md +46 -0
  93. package/skills/torusguard/payload/rules/redos/TG-REDOS-002-unbounded-nested-quantifier.md +43 -0
  94. package/skills/torusguard/payload/rules_catalog.json +338 -518
  95. package/skills/torusguard/payload/scripts/__pycache__/term_ui.cpython-314.pyc +0 -0
  96. package/skills/torusguard/payload/scripts/manifest_builder.py +1 -1
  97. package/skills/torusguard/payload/scripts/rules_sync.py +321 -321
  98. package/skills/torusguard/payload/scripts/safety_gate.py +64 -64
  99. package/skills/torusguard/payload/skills/torusguard/SKILL.md +69 -24
  100. package/skills/torusguard/payload/skills/torusguard/bootstrap.py +57 -24
  101. package/skills/torusguard/payload/skills/torusguard-ai-guard/SKILL.md +95 -0
  102. package/skills/torusguard/payload/skills/torusguard-apply/SKILL.md +60 -34
  103. package/skills/torusguard/payload/skills/torusguard-audit/SKILL.md +73 -24
  104. package/skills/torusguard/payload/skills/torusguard-authorize/SKILL.md +48 -6
  105. package/skills/torusguard/payload/skills/torusguard-container/SKILL.md +94 -0
  106. package/skills/torusguard/payload/skills/torusguard-exploit-check/SKILL.md +50 -6
  107. package/skills/torusguard/payload/skills/torusguard-full/SKILL.md +62 -19
  108. package/skills/torusguard/payload/skills/torusguard-git-mine/SKILL.md +92 -0
  109. package/skills/torusguard/payload/skills/torusguard-harden/SKILL.md +81 -50
  110. package/skills/torusguard/payload/skills/torusguard-init/SKILL.md +61 -14
  111. package/skills/torusguard/payload/skills/torusguard-ocr-scan/SKILL.md +94 -0
  112. package/skills/torusguard/payload/skills/torusguard-recheck/SKILL.md +71 -18
  113. package/skills/torusguard/payload/skills/torusguard-redos/SKILL.md +91 -0
  114. package/skills/torusguard/payload/skills/torusguard-report/SKILL.md +50 -9
  115. package/skills/torusguard/payload/skills/torusguard-status/SKILL.md +63 -10
  116. package/skills/torusguard/payload/skills/torusguard-verify/SKILL.md +52 -10
  117. package/skills/torusguard/payload/skills/torusguard-web-validate/SKILL.md +53 -8
  118. package/skills/torusguard/payload/templates/audit-report.template.md +54 -54
  119. package/skills/torusguard/payload/templates/authorization.template.md +34 -34
  120. package/skills/torusguard/payload/templates/finding-card.template.md +32 -32
  121. package/skills/torusguard/payload/templates/remediation-bundle.template.md +35 -35
  122. package/skills/torusguard/payload/workflows/ai-guard.md +31 -0
  123. package/skills/torusguard/payload/workflows/apply.md +31 -62
  124. package/skills/torusguard/payload/workflows/audit.md +27 -51
  125. package/skills/torusguard/payload/workflows/authorize.md +27 -50
  126. package/skills/torusguard/payload/workflows/container.md +29 -0
  127. package/skills/torusguard/payload/workflows/exploit-check.md +28 -50
  128. package/skills/torusguard/payload/workflows/git-mine.md +25 -0
  129. package/skills/torusguard/payload/workflows/harden.md +28 -52
  130. package/skills/torusguard/payload/workflows/init.md +27 -56
  131. package/skills/torusguard/payload/workflows/memory.md +18 -23
  132. package/skills/torusguard/payload/workflows/ocr-scan.md +25 -0
  133. package/skills/torusguard/payload/workflows/recheck.md +28 -46
  134. package/skills/torusguard/payload/workflows/redos.md +27 -0
  135. package/skills/torusguard/payload/workflows/report.md +39 -62
  136. package/skills/torusguard/payload/workflows/status.md +31 -55
  137. package/skills/torusguard/payload/workflows/verify.md +29 -49
  138. package/skills/torusguard/payload/workflows/web-validate.md +22 -45
  139. package/skills/torusguard/references/csharp-security.md +41 -0
  140. package/skills/torusguard/references/go-security.md +41 -0
  141. package/skills/torusguard/references/java-security.md +40 -0
  142. package/skills/torusguard/references/polyglot-security-matrix.md +25 -0
  143. package/skills/torusguard/references/rust-security.md +40 -0
  144. package/skills/torusguard-ai-guard/SKILL.md +95 -0
  145. package/skills/torusguard-apply/SKILL.md +60 -34
  146. package/skills/torusguard-audit/SKILL.md +73 -24
  147. package/skills/torusguard-authorize/SKILL.md +48 -6
  148. package/skills/torusguard-container/SKILL.md +94 -0
  149. package/skills/torusguard-exploit-check/SKILL.md +50 -6
  150. package/skills/torusguard-full/SKILL.md +62 -19
  151. package/skills/torusguard-git-mine/SKILL.md +92 -0
  152. package/skills/torusguard-harden/SKILL.md +81 -50
  153. package/skills/torusguard-init/SKILL.md +61 -14
  154. package/skills/torusguard-ocr-scan/SKILL.md +94 -0
  155. package/skills/torusguard-recheck/SKILL.md +71 -18
  156. package/skills/torusguard-redos/SKILL.md +91 -0
  157. package/skills/torusguard-report/SKILL.md +50 -9
  158. package/skills/torusguard-status/SKILL.md +63 -10
  159. package/skills/torusguard-verify/SKILL.md +52 -10
  160. package/skills/torusguard-web-validate/SKILL.md +53 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "torusguard",
3
- "version": "1.4.0",
3
+ "version": "2.1.0",
4
4
  "description": "Security guardrails, governed remediation, and authorized runtime validation for AI-built web applications.",
5
5
  "main": "bin/torusguard.js",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: torusguard
3
- description: Universal autonomous security engine: 74 canonical rules across 18 families, polyglot stack detection across 16+ languages, Ponytail remediation bounds (<=35 add, <=25 del), standardized 75-column terminal UI, living security_report.md ground-truth ledger, SARIF v2.1.0 exports, and persistent security memory context.
4
- version: 1.3.6
3
+ description: Universal autonomous security engine: 74 canonical rules across 18 families, polyglot stack detection across 16+ languages, Ponytail remediation bounds (<=35 add, <=25 del), standardized 75-column terminal UI, SARIF v2.1.0 exports, and persistent security memory context.
4
+ version: 2.0.0
5
5
  ---
6
6
 
7
7
  # TorusGuard Master Security Engine & Command Router
@@ -10,39 +10,50 @@ version: 1.3.6
10
10
 
11
11
  ---
12
12
 
13
- ## Command Catalog: Terminal CLI & AI Chat Parity
13
+ ## Tri-Mode Execution & Command Catalog
14
14
 
15
- TorusGuard operates with 100% feature parity across both the terminal CLI and AI chat slash commands:
15
+ TorusGuard operates with 100% feature parity across the compiled terminal CLI, AI chat slash commands, and Model Context Protocol (MCP) tools:
16
16
 
17
- | Capability | Terminal CLI Command | AI Chat Slash Command | Specialist Skill | Purpose |
17
+ | Capability | Terminal CLI Command | AI Chat Slash Command | Specialist Skill | Governed Purpose |
18
18
  | :--- | :--- | :--- | :--- | :--- |
19
- | **Init** | `npx torusguard init` | `/torusguard init` | `skills/torusguard-init` | Stack discovery, rule activation, workspace scaffolding |
20
- | **Status** | `npx torusguard status` | `/torusguard status` | `skills/torusguard-status` | Posture score, active rules, run history, scope check |
21
- | **Audit** | `npx torusguard audit` | `/torusguard audit` | `skills/torusguard-audit` | Static AST scan, invariant fingerprinting, confidence scoring |
22
- | **Verify** | `npx torusguard verify` | `/torusguard verify` | `skills/torusguard-verify` | Evidence sufficiency audit & line match calibration |
23
- | **Harden** | `npx torusguard harden` | `/torusguard harden` | `skills/torusguard-harden` | Ponytail patch formulation ($\le 35$ add, $\le 25$ del) |
24
- | **Apply** | `npx torusguard apply [--yes]` | `/torusguard apply` | `skills/torusguard-apply` | Human Gate review, `.bak` snapshots, patch application |
25
- | **Rollback** | `npx torusguard rollback` | `/torusguard rollback` | `skills/torusguard-apply` | Instant 1-step rollback from pre-apply snapshots |
26
- | **Recheck** | `npx torusguard recheck` | `/torusguard recheck` | `skills/torusguard-recheck` | Targeted differential AST scan, fix closure verification |
27
- | **Recipes** | `npx torusguard recipes` | `/torusguard recipes` | `skills/torusguard-harden` | Explore verified Golden Fix Recipes from persistent memory |
28
- | **Report** | `npx torusguard report --html` | `/torusguard report` | `skills/torusguard-report` | Executive posture reporting, SARIF v2.1.0 & visual HTML |
29
- | **Authorize** | `npx torusguard authorize` | `/torusguard authorize` | `skills/torusguard-authorize`| Legal scope definition & safety boundaries |
30
- | **Validate** | `npx torusguard web-validate` | `/torusguard web-validate` | `skills/torusguard-web-validate`| Authorized non-destructive HTTP probing |
31
- | **Exploit** | `npx torusguard exploit-check` | `/torusguard exploit-check`| `skills/torusguard-exploit-check`| Bounded single-step exploitability confirmation |
32
- | **Full** | `npx torusguard full` | `/torusguard full` | `skills/torusguard-full` | End-to-end 7-stage closed-loop execution |
33
- | **Sync** | `npx torusguard rules sync` | `/torusguard rules sync` | `skills/torusguard-init` | Synchronize rules across AI editors (Cursor, Claude, Antigravity) |
19
+ | **Init** | `torusguard init` | `/torusguard init` | `.torusguard/skills/torusguard-init` | Stack discovery, rule activation, workspace scaffolding |
20
+ | **Status** | `torusguard status` | `/torusguard status` | `.torusguard/skills/torusguard-status` | Posture score, active rules, run history, scope check |
21
+ | **Audit** | `torusguard audit` | `/torusguard audit` | `.torusguard/skills/torusguard-audit` | Static AST scan, invariant fingerprinting, confidence scoring |
22
+ | **OCR Vision**| `torusguard ocr-scan <path>` | `/torusguard ocr-scan` | `.torusguard/skills/torusguard-ocr-scan` | Tesseract OCR secret scan on images/diagrams |
23
+ | **Verify** | `torusguard verify` | `/torusguard verify` | `.torusguard/skills/torusguard-verify` | Evidence sufficiency audit & line match calibration |
24
+ | **Harden** | `torusguard harden <patch>` | `/torusguard harden` | `.torusguard/skills/torusguard-harden` | Ponytail patch formulation ($\le 35$ add, $\le 25$ del) & reflection validation |
25
+ | **Apply** | `torusguard apply [--yes]` | `/torusguard apply` | `.torusguard/skills/torusguard-apply` | Human Gate review, `.bak` snapshots, patch application |
26
+ | **Rollback** | `torusguard rollback` | `/torusguard rollback` | `.torusguard/skills/torusguard-apply` | Instant 1-step rollback from pre-apply snapshots |
27
+ | **Recheck** | `torusguard recheck` | `/torusguard recheck` | `.torusguard/skills/torusguard-recheck` | Targeted differential AST scan, fix closure verification |
28
+ | **Recipes** | `torusguard recipes` | `/torusguard recipes` | `.torusguard/skills/torusguard-harden` | Explore verified Golden Fix Recipes from persistent memory |
29
+ | **Report** | `torusguard report --html` | `/torusguard report` | `.torusguard/skills/torusguard-report` | Executive posture reporting, SARIF v2.1.0 & visual HTML |
30
+ | **Authorize** | `torusguard authorize` | `/torusguard authorize` | `.torusguard/skills/torusguard-authorize`| Legal scope definition & safety boundaries |
31
+ | **Validate** | `torusguard web-validate` | `/torusguard web-validate` | `.torusguard/skills/torusguard-web-validate`| Authorized non-destructive HTTP probing |
32
+ | **Exploit** | `torusguard exploit-check` | `/torusguard exploit-check`| `.torusguard/skills/torusguard-exploit-check`| Bounded single-step exploitability confirmation |
33
+ | **Full** | `torusguard full` | `/torusguard full` | `.torusguard/skills/torusguard-full` | End-to-end 7-stage closed-loop execution |
34
+ | **MCP Server**| `torusguard mcp` | — | Native Stdio JSON-RPC 2.0 | Serves native Model Context Protocol tools to AI coding agents |
35
+ | **Update** | `torusguard update` | `/torusguard update` | `.torusguard/skills/torusguard-init` | Self-update TorusGuard engine binary |
36
+ | **Help** | `torusguard help` | `/torusguard help` | — | Interactive command guide |
34
37
 
35
38
  ---
36
39
 
37
40
  ## Non-Negotiable Invariants
38
41
 
39
- 1. **Browser-Code Truth:** If the client receives it, it is public. Zero hardcoded secrets (`SUPABASE_SERVICE_ROLE_KEY`, private tokens, live API keys) in frontend code.
40
- 2. **Multi-Tenant Isolation:** All database lookups must be scoped by organization or user ownership (`tenant_id`, `organization_id`, `where: { tenantId }`).
42
+ 1. **Browser-Code Truth:** If the client receives it, it is public. Zero hardcoded secrets (`SUPABASE_SERVICE_ROLE_KEY`, private tokens, live API keys) in frontend code (`TG-CLIENT-001`).
43
+ 2. **Multi-Tenant Isolation:** All database lookups must be scoped by organization or user ownership (`tenant_id`, `organization_id`, `where: { tenantId }`) (`TG-DB-001`).
41
44
  3. **Ponytail Churn Bounds:** Patches must be minimal and surgical ($\le 35$ additions, $\le 25$ deletions). Never perform full-file rewrites.
42
45
  4. **Standardized 75-Column Terminal:** All CLI terminal output is strictly normalized to 75 visual columns with Unicode emoji width calculation, ANSI escape handling, and visual truncation with ellipsis (`...`).
43
- 5. **Zero Security Bypasses:** Never insert `# nosec`, `verify=False`, `InsecureSkipVerify: true`, `[AllowAnonymous]`, or `csrf().disable()`.
46
+ 5. **Zero Security Bypasses:** Never insert `# nosec`, `verify=False`, `InsecureSkipVerify: true`, `[AllowAnonymous]`, or `csrf().disable()` (`TG-DIFF-001`).
44
47
  6. **Snapshots Before Edits:** Every code modification must capture a byte-for-byte pre-apply backup in `.torusguard/snapshots/<run_id>/` before touching disk code.
45
- 7. **Living Security Report Ground Truth:** All finding discoveries, patch formulations, applications, and recheck verifications must synchronize with `security_report.md` at the workspace root to maintain verifiable finding state and eliminate hallucination.
48
+ 7. **Living Report Ground Truth:** All findings synchronize directly with `security_report.md` at workspace root.
49
+
50
+ ---
51
+
52
+ ## 🏛️ Alibaba OpenCodeReview Hybrid Architecture Integration
53
+ TorusGuard employs the dual-track hybrid architecture battle-tested at Alibaba Group scale:
54
+ 1. **Deterministic Engineering Pipeline (Go CLI Engine):** Mechanical tasks (file traversal, whitespace tolerance, exact AST matching, Ponytail churn bounds calculation, pre-apply snapshot capture, and OCR extraction) are strictly executed by the compiled Go binary.
55
+ 2. **Context Minimization (1/9th Token Strategy):** Agents never dump full files into prompt context. Bounded AST windows ($\pm 3$ lines) are extracted via `ExtractContext` to keep review tokens hyper-dense.
56
+ 3. **Line-Level Reflection:** In remediation, the agent provides semantic intent (`find_snippet` + `replace_snippet`). The Go CLI reflection module pins and verifies line bounds deterministically, preventing line-number drift.
46
57
 
47
58
  ---
48
59
 
@@ -68,6 +79,42 @@ TorusGuard operates with 100% feature parity across both the terminal CLI and AI
68
79
  │ ├── report.html # Single-file visual dark-mode HTML report
69
80
  │ ├── results.sarif # OASIS SARIF v2.1.0 log
70
81
  │ └── bundles/ # Formulated Ponytail remediation bundles
82
+ ├── skills/ # Canonical distribution skills for end-user AI agents
83
+ ├── workflows/ # Operational step-by-step workflow guides
71
84
  └── snapshots/
72
85
  └── run-YYYYMMDD-HHMMSS-audit/ # Pre-apply .bak files for instant rollback
73
86
  ```
87
+
88
+ ---
89
+
90
+ ## 🚨 LLM Trap Table
91
+
92
+ | Pattern | What AI Does Wrong | What Is Actually Correct |
93
+ | :--- | :--- | :--- |
94
+ | **Line-Number Diff Hallucination** | Guesses line numbers in unified diff headers (`@@ -42,5 +42,7 @@`) causing patch rejection. | Use the Line-Level Reflection Module (`SemanticPatch` with `find_snippet` and `replace_snippet`) to let Go resolve exact lines. |
95
+ | **Context Window Bloating** | Dumps entire 1,000-line source files into conversation when diagnosing a single finding. | Use bounded AST context extraction ($\pm 3$ lines) matching OpenCodeReview's 1/9th token efficiency. |
96
+ | **Full-File Rewrites** | Rewrites the entire file or surrounding business logic when fixing a vulnerability. | Strictly conform to Ponytail bounds ($\le 35$ additions, $\le 25$ deletions per bundle). |
97
+ | **Security Bypass Insertion** | Introduces `# nosec`, `verify=False`, or `[AllowAnonymous]` to make tests pass. | Strictly forbidden (`TG-DIFF-001`). Rejections are enforced fail-closed by the Go engine. |
98
+ | **Missing Multi-Tenant Scope** | Modifies queries to filter only by record `id`. | Always scope database lookups by tenant or user ownership (`tenantId: user.tenantId`). |
99
+
100
+ ---
101
+
102
+ ## ✅ Pre-Flight Self-Audit
103
+
104
+ Before producing any security remediation or analysis, verify:
105
+ - [ ] Did I read `security_report.md` at workspace root before proposing changes?
106
+ - [ ] Did I inspect only the bounded AST context window ($\pm 3$ lines) rather than the entire file?
107
+ - [ ] Does my proposed remediation stay strictly within Ponytail bounds ($\le 35$ additions, $\le 25$ deletions)?
108
+ - [ ] Is the fix free of any `# nosec`, `verify=False`, or bypass flags?
109
+ - [ ] Did I verify multi-tenant isolation on all database and model queries?
110
+ - [ ] Can this patch be applied via deterministic reflection (`find_snippet` -> `replace_snippet`)?
111
+
112
+ ---
113
+
114
+ ## 🔁 VBC Protocol (Verify → Build → Confirm)
115
+
116
+ ```
117
+ VERIFY: Inspect living security_report.md and bounded AST context snippet.
118
+ BUILD: Formulate surgical SemanticPatch (find_snippet + replace_snippet within <=35 add / <=25 del).
119
+ CONFIRM: Validate via torusguard harden, apply snapshot, and execute differential torusguard recheck.
120
+ ```
@@ -63,14 +63,15 @@ import unicodedata
63
63
  ANSI_REGEX = re.compile(r'\033\[[0-9;]*m')
64
64
 
65
65
  def get_visual_width(text: str) -> int:
66
- """Calculate the printable display width of a string (ANSI and emoji aware)."""
66
+ """Calculate the printable display width of a string (ANSI, emoji and variation selector aware)."""
67
67
  clean = ANSI_REGEX.sub('', text)
68
68
  width = 0
69
69
  for ch in clean:
70
+ cp = ord(ch)
71
+ if (0xFE00 <= cp <= 0xFE0F) or (0xE0100 <= cp <= 0xE01EF) or cp in (0x200B, 0x200C, 0x200D, 0x00AD):
72
+ continue
70
73
  ea = unicodedata.east_asian_width(ch)
71
- if ea in ('W', 'F'):
72
- width += 2
73
- elif ord(ch) >= 0x1F300:
74
+ if ea in ('W', 'F') or cp >= 0x1F300:
74
75
  width += 2
75
76
  else:
76
77
  width += 1
@@ -82,7 +83,7 @@ def truncate_visual(text: str, max_w: int = 67) -> str:
82
83
  return text
83
84
  out, curr_w, in_ansi, ansi_buf = [], 0, False, ''
84
85
  for ch in text:
85
- if ch == '\033':
86
+ if ch in ('\033', '\x1b'):
86
87
  in_ansi = True
87
88
  ansi_buf = ch
88
89
  continue
@@ -92,13 +93,19 @@ def truncate_visual(text: str, max_w: int = 67) -> str:
92
93
  in_ansi = False
93
94
  out.append(ansi_buf)
94
95
  continue
96
+ cp = ord(ch)
97
+ if (0xFE00 <= cp <= 0xFE0F) or (0xE0100 <= cp <= 0xE01EF) or cp in (0x200B, 0x200C, 0x200D, 0x00AD):
98
+ out.append(ch)
99
+ continue
95
100
  ea = unicodedata.east_asian_width(ch)
96
- cw = 2 if ea in ('W', 'F') or ord(ch) >= 0x1F300 else 1
101
+ cw = 2 if (ea in ('W', 'F') or cp >= 0x1F300) else 1
97
102
  if curr_w + cw > max_w - 3:
98
- out.append('...')
103
+ out.append(RESET + '...')
104
+ curr_w += 3
99
105
  break
100
106
  out.append(ch)
101
107
  curr_w += cw
108
+ out.append(RESET)
102
109
  return ''.join(out)
103
110
 
104
111
  def card_line(content: str, max_w: int = 67, border: str = "│", border_color: str = CYAN) -> str:
@@ -109,37 +116,56 @@ def card_line(content: str, max_w: int = 67, border: str = "│", border_color:
109
116
  return f" {border_color}{border}{RESET} {trunc}{pad} {border_color}{border}{RESET}"
110
117
 
111
118
  def card_border_top(title: str = "", border_color: str = CYAN, double: bool = False) -> str:
119
+ """Generate 75-column top border (single ┌ or double ╔) with optional title."""
112
120
  left = "╔" if double else "┌"
113
121
  right = "╗" if double else "┐"
114
122
  h = "═" if double else "─"
115
123
  if title:
116
124
  vis = get_visual_width(title)
117
- rem = max(0, 71 - 3 - vis - 1)
125
+ rem = max(0, 68 - vis)
118
126
  return f" {border_color}{left}{h} {BOLD}{WHITE}{title}{RESET}{border_color} {h * rem}{right}{RESET}"
119
127
  return f" {border_color}{left}{h * 71}{right}{RESET}"
120
128
 
121
129
  def card_border_bottom(border_color: str = CYAN, double: bool = False) -> str:
130
+ """Generate 75-column bottom border (single └ or double ╚)."""
122
131
  left = "╚" if double else "└"
123
132
  right = "╝" if double else "┘"
124
133
  h = "═" if double else "─"
125
134
  return f" {border_color}{left}{h * 71}{right}{RESET}"
126
135
 
127
- def card_divider(border_color: str = CYAN, double: bool = False) -> str:
136
+ def card_divider(title: str = "", border_color: str = CYAN, double: bool = False) -> str:
137
+ """Generate 75-column divider (single ├ or double ╠) with optional title."""
128
138
  left = "╠" if double else "├"
129
139
  right = "╣" if double else "┤"
130
140
  h = "═" if double else "─"
141
+ if title:
142
+ vis = get_visual_width(title)
143
+ rem = max(0, 68 - vis)
144
+ return f" {border_color}{left}{h} {BOLD}{WHITE}{title}{RESET}{border_color} {h * rem}{right}{RESET}"
131
145
  return f" {border_color}{left}{h * 71}{right}{RESET}"
132
146
 
147
+ def card_header(title: str, subtitle: str = "", version: str = "v2.1.0", border_color: str = CYAN) -> str:
148
+ """Generate standardized 75-column curved header box."""
149
+ top = f" {border_color}╭{'─' * 71}╮{RESET}"
150
+ bottom = f" {border_color}╰{'─' * 71}╯{RESET}"
151
+ empty = f" {border_color}│{' ' * 71}│{RESET}"
152
+
153
+ title_vis = get_visual_width(title)
154
+ ver_vis = get_visual_width(version)
155
+ space_count = max(1, 67 - title_vis - ver_vis)
156
+ title_str = f"{BOLD}{WHITE}{title}{RESET}{' ' * space_count}{GRAY}{version}{RESET}"
157
+
158
+ lines = [top, empty, card_line(title_str, max_w=67, border_color=border_color)]
159
+ if subtitle:
160
+ lines.append(card_line(f"{DIM}{subtitle}{RESET}", max_w=67, border_color=border_color))
161
+ lines.extend([empty, bottom])
162
+ return "\n".join(lines)
163
+
133
164
  def print_header():
134
165
  """Print the branded TorusGuard header card."""
135
- print(f"""
136
- {CYAN}╭─────────────────────────────────────────────────────────────────────────╮{RESET}
137
- {CYAN}│{RESET} {CYAN}│{RESET}
138
- {CYAN}│{RESET} {BOLD}{WHITE}🛡️ T O R U S G U A R D{RESET} {GRAY}v1.4.0{RESET} {CYAN}│{RESET}
139
- {CYAN}│{RESET} {DIM}Autonomous Security Engine for AI-Built Applications{RESET} {CYAN}│{RESET}
140
- {CYAN}│{RESET} {CYAN}│{RESET}
141
- {CYAN}╰─────────────────────────────────────────────────────────────────────────╯{RESET}
142
- """)
166
+ print()
167
+ print(card_header("🛡️ T O R U S G U A R D", "Autonomous Security Engine for AI-Built Applications", version="v2.1.0"))
168
+ print()
143
169
 
144
170
 
145
171
  def print_step_1_assets(file_count):
@@ -213,14 +239,15 @@ def print_success_card():
213
239
 
214
240
  def print_already_initialized(target_root, cfg):
215
241
  """Print the already-initialized status card."""
242
+ print()
243
+ top = f" {CYAN}╭{'─' * 71}╮{RESET}"
244
+ bottom = f" {CYAN}╰{'─' * 71}╯{RESET}"
245
+ title_line = card_line(f"{BOLD}{WHITE}🛡️ TORUSGUARD WORKSPACE{RESET}{' ' * 28}{GREEN}[Active]{RESET}")
246
+ print(f"{top}\n{title_line}\n{bottom}")
216
247
  print(f"""
217
- {CYAN}╭─────────────────────────────────────────────────────────────────────────╮{RESET}
218
- {CYAN}│{RESET} {BOLD}{WHITE}🛡️ TORUSGUARD WORKSPACE{RESET} {GREEN}[Active]{RESET} {CYAN}│{RESET}
219
- {CYAN}╰─────────────────────────────────────────────────────────────────────────╯{RESET}
220
-
221
248
  {BOLD}▸ Project Root:{RESET} {GREEN}{target_root}{RESET}
222
249
  {BOLD}▸ Workspace:{RESET} {GREEN}.torusguard/{RESET} {DIM}(Already Initialized){RESET}
223
- {BOLD}▸ Version:{RESET} {CYAN}{cfg.get('version', '1.4.0')}{RESET}
250
+ {BOLD}▸ Version:{RESET} {CYAN}{cfg.get('version', '2.1.0')}{RESET}
224
251
  {BOLD}▸ Severity Floor:{RESET} {YELLOW}{cfg.get('severity_threshold', 'medium')}{RESET}
225
252
 
226
253
  {DIM}To refresh templates or re-scaffold, run:{RESET}
@@ -228,7 +255,7 @@ def print_already_initialized(target_root, cfg):
228
255
  """)
229
256
 
230
257
 
231
- def scaffold_workspace(target_root=None, force=False, full_commands=False, template=None, run_audit=False):
258
+ def scaffold_workspace(target_root=None, force=False, full_commands=False, template=None, **kwargs):
232
259
  """Scaffold the .torusguard workspace into the target project root."""
233
260
  target_root = Path(target_root or find_project_root()).resolve()
234
261
  torusguard_target = target_root / ".torusguard"
@@ -348,18 +375,13 @@ def scaffold_workspace(target_root=None, force=False, full_commands=False, templ
348
375
  "cards": []
349
376
  }, indent=2), encoding="utf-8")
350
377
 
351
- # Ensure target project root .gitignore excludes .torusguard/memory/ and report.html
378
+ # Ensure target project root .gitignore excludes .torusguard/memory/
352
379
  root_gitignore = target_root / ".gitignore"
353
380
  if root_gitignore.exists():
354
381
  try:
355
382
  gi_content = root_gitignore.read_text(encoding="utf-8")
356
- to_add = []
357
383
  if ".torusguard/memory" not in gi_content:
358
- to_add.append(".torusguard/memory/")
359
- if "report.html" not in gi_content:
360
- to_add.append("report.html")
361
- if to_add:
362
- root_gitignore.write_text(gi_content.rstrip() + "\n\n# TorusGuard local artifacts\n" + "\n".join(to_add) + "\n", encoding="utf-8")
384
+ root_gitignore.write_text(gi_content.rstrip() + "\n\n# TorusGuard security memory (local only)\n.torusguard/memory/\n", encoding="utf-8")
363
385
  except Exception:
364
386
  pass
365
387
 
@@ -379,25 +401,17 @@ def scaffold_workspace(target_root=None, force=False, full_commands=False, templ
379
401
  except Exception:
380
402
  detected_stack = None
381
403
 
382
- TEMPLATE_MAP = {
383
- "golang": {"language": "Go", "framework": "Gin/Fiber", "data_layer": "database/sql"},
384
- "go": {"language": "Go", "framework": "Gin/Fiber", "data_layer": "database/sql"},
385
- "nextjs": {"language": "TypeScript", "framework": "Next.js", "data_layer": "Prisma ORM"},
386
- "fastapi": {"language": "Python", "framework": "FastAPI", "data_layer": "SQLAlchemy"},
387
- "express": {"language": "JavaScript", "framework": "Express", "data_layer": "Mongoose"},
388
- "django": {"language": "Python", "framework": "Django", "data_layer": "Django ORM"},
389
- "react": {"language": "JavaScript/TypeScript", "framework": "React / Vite", "data_layer": "Supabase"}
390
- }
391
- if template and template.lower() in TEMPLATE_MAP:
392
- detected_stack = TEMPLATE_MAP[template.lower()]
393
-
394
404
  config_file = torusguard_target / "config" / "torusguard.json"
395
405
  if config_file.exists():
396
406
  try:
397
407
  with open(config_file, "r", encoding="utf-8") as f:
398
408
  cfg = json.load(f)
399
- if template and template.lower() in TEMPLATE_MAP:
400
- cfg["detected_stack"] = TEMPLATE_MAP[template.lower()]
409
+ if template and template.lower() in ("golang", "go"):
410
+ cfg["detected_stack"] = {
411
+ "language": "Go",
412
+ "framework": "Gin",
413
+ "data_layer": "None"
414
+ }
401
415
  elif detected_stack and detected_stack.get("framework") != "None":
402
416
  cfg["detected_stack"] = {
403
417
  "language": detected_stack.get("language"),
@@ -530,40 +544,15 @@ Parse the requested action from `$ARGUMENTS` (e.g. `audit`, `verify`, `web-valid
530
544
 
531
545
  # ── Success Card ────────────────────────────────────────────────────────
532
546
  print_success_card()
533
-
534
- # ── Optional Immediate Audit ────────────────────────────────────────────
535
- if run_audit:
536
- audit_script = torusguard_target / "scripts" / "audit_runner.py"
537
- if audit_script.is_file():
538
- print(f"\n {CYAN}▸ Running immediate baseline security audit (--audit)...{RESET}\n")
539
- try:
540
- import importlib.util
541
- spec = importlib.util.spec_from_file_location("audit_runner", str(audit_script))
542
- if spec and spec.loader:
543
- ar_mod = importlib.util.module_from_spec(spec)
544
- spec.loader.exec_module(ar_mod)
545
- if hasattr(ar_mod, "execute_audit"):
546
- ar_mod.execute_audit(target_root)
547
- except Exception as e:
548
- print(f" {YELLOW}⚠ Immediate audit notice: {e}{RESET}")
549
-
550
547
  return True
551
548
 
552
549
 
553
550
  if __name__ == "__main__":
554
551
  parser = argparse.ArgumentParser(description="TorusGuard Autonomous Workspace Bootstrapper")
555
- parser.add_argument("--target", "-t", type=str, help="Target project root directory")
552
+ parser.add_argument("--target", type=str, help="Target project root directory")
556
553
  parser.add_argument("--force", action="store_true", help="Force overwrite existing workspace")
557
554
  parser.add_argument("--full-commands", action="store_true", help="Unlock and register all 11 individual slash commands")
558
- parser.add_argument("--template", choices=["golang", "go", "nextjs", "fastapi", "express", "django", "react"], help="Pre-configure target framework stack template")
559
- parser.add_argument("--audit", action="store_true", help="Execute immediate baseline audit post-initialization")
560
555
  args = parser.parse_args()
561
556
 
562
- success = scaffold_workspace(
563
- target_root=args.target,
564
- force=args.force,
565
- full_commands=args.full_commands,
566
- template=args.template,
567
- run_audit=args.audit
568
- )
557
+ success = scaffold_workspace(target_root=args.target, force=args.force, full_commands=args.full_commands)
569
558
  sys.exit(0 if success else 1)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "ARCHITECTURE.md": "cdc690a856e82574a6574ab6b1ad8a2d8b3b8264c36931c6212321066eed82e4",
3
3
  "TORUSGUARD.md": "c980b0ddd3778d5981f6c16c64015c60dc713b6f151fc531bc5681ecd770fb50",
4
- "rules_catalog.json": "e0b32c1bdde0f19fa390aba26a02b7e5ba1b59b251f9fffd501815b48f2d9af9",
4
+ "rules_catalog.json": "11240a887dbe457ef5fbe621dabc08ea4e3bc273b56fce85f517df7b6ad19f55",
5
5
  "agents/auditor.md": "4ba2c92982823d0886c7ae369126cd5ddd322085a85d3b7e7fa23154f8753314",
6
6
  "agents/profiler.md": "0ee9ebbddf4ebd557d454dda8472fffea471e263abeccf40298163084b7ce9a9",
7
7
  "agents/remediator.md": "f708a0e315760e8d519bd640d22bdf6b7ec61ed7de3da69bd038bd60dc3d5b47",
@@ -100,15 +100,27 @@
100
100
  "rules/cache/TG-CACHE-001-sensitive-response-publicly-cacheable.md": "e84d9d314b1616bdda54345fdf0203732e68e375dc7e144d9e2aa7619f9cafb8",
101
101
  "rules/cache/TG-CACHE-002-missing-user-cache-isolation.md": "4e305be49dd14a34d29c9283b535a72ad6cd84c5bd52afb3f006403f2e5a6850",
102
102
  "rules/cache/TG-CACHE-003-sensitive-data-in-url.md": "235f3eed546b58aa8f04e155aeaef4e0206dd696517a7854983ab9ce8fe61030",
103
+ "rules/container/TG-CONT-001-root-user-execution.md": "8cabae14353f63dffe69067c369f55c3e99d05791ff96139cd7eeff7f7db6d3f",
104
+ "rules/container/TG-CONT-002-docker-socket-mount.md": "e375fa7c7fda1ee026b7df9c1ae2aaf21be34926c18182daf8019479db6295fa",
105
+ "rules/container/TG-CONT-003-privileged-container-mode.md": "0e500f2553b9fb0865396ac8e9f7f18526af576951c72887ee30874b2b543225",
106
+ "rules/container/TG-CONT-004-build-arg-secret-exposure.md": "91d290078698480a1bd09e6f4d2e5930dd40c877344b25c5f1be7ca705ecdbd8",
103
107
  "rules/csrf/TG-CSRF-001-missing-csrf-protection.md": "42fcf19ae244a36b3b64d03200b6d4c1acf1b265fdb2fe6a85de8dd69b3837fe",
104
108
  "rules/csrf/TG-CSRF-002-unsafe-credentialed-cross-origin-request.md": "c01a55e31e4aaaea8c9f630b514c1ad242b513ab99111534939584ae4fe1a58c",
105
109
  "rules/custom/README.md": "f2128661ad3bc4085a69ddfbabbb2211930215fc42a25e2ab2d3e7a4b749a639",
106
110
  "rules/edge/TG-EDGE-001-serverless-global-state-leak.md": "82fe764a67228c71359b340a983cb37dc8bf4521d030846e0cea433de43c52d3",
107
111
  "rules/edge/TG-EDGE-003-aws-lambda-ephemeral-cold-start.md": "2659db7d38b6689d1d3a99ad5f2504ea264b3d3a601ab38186737b12d4d42c17",
112
+ "rules/git/TG-GIT-001-historical-secret-in-git-commit.md": "4a0ad519db2ff6c2311eb872d7b015d3b3a0fef114ae821e24ec640d2ca0e99e",
113
+ "rules/git/TG-GIT-002-plaintext-credentials-in-git-config.md": "5ec5f9e25e73e37b64b8f6861772395a37a41d3c982eb15cd5d0561311a929bc",
114
+ "rules/git/TG-GIT-003-sensitive-tracked-file-gitignore-breach.md": "34f54569af1fcaeb68bc9e88f3a1baf08ab74a9024f63d8059ab22fe30b2ee91",
108
115
  "rules/graphql/TG-GQL-001-missing-query-depth-or-complexity-limits.md": "bfee2cb26c71871cc4b93e224dc56c18de0d0ea692a431f7b27a51e7e408873f",
109
116
  "rules/graphql/TG-GQL-002-resolver-missing-authorization.md": "e6429fdcf130478446a2711eac83bd64cc502aad8baa35c04de26958d23e5b0f",
110
117
  "rules/graphql/TG-GQL-003-unbounded-graphql-pagination-or-batching.md": "c2e2beb37c4d86f4ba564e1a1fd9587626df3793b9c5dc9e13d0cf0ce3bfe09a",
111
118
  "rules/graphql/TG-GQL-004-unnecessary-production-introspection.md": "54311588945abc1d79e99a0001390821ccb4434772297b2395e7081d276d6602",
119
+ "rules/rag/TG-RAG-001-untrusted-rag-context-injection.md": "3cc4c87d373293612210b865d0c936fc5c55dfa5dac2adc8f9822e639dd1102b",
120
+ "rules/rag/TG-RAG-002-autonomous-llm-tool-unsandboxed-call.md": "6935f2c4b1f254148242b6e1ce656024f1cffb5432e432c038abf63094c13ad3",
121
+ "rules/rag/TG-RAG-003-unpartitioned-vector-tenant-lookup.md": "44722ba00bfd40a0b98abb9789b77a786ac8deed017cc6543867a131b21bbe1e",
122
+ "rules/redos/TG-REDOS-001-catastrophic-exponential-backtracking.md": "2cac8e899af177c03dbe01f85ac5f3d485e88ef5a08809e3bc17f676e74d5ae5",
123
+ "rules/redos/TG-REDOS-002-unbounded-nested-quantifier.md": "5b9032ea9268831e3ecf328039083a7dca95feb330347c29f9120db1a30e2278",
112
124
  "rules/secrets/TG-SEC-005-secret-in-git-history.md": "089dbe9653b2a4df652ba049b40147434d6abc70c239ac7db81bdcb9d6579387",
113
125
  "rules/secrets/TG-SEC-006-secret-in-build-artifact.md": "ed20b1c9044149df5257ad8140bd787db7f77063b890dad9ba32efaf4d554fe5",
114
126
  "rules/secrets/TG-SEC-007-secret-in-test-or-example-fixture.md": "b3d4b9f1d0fd9656aa9a586e133209904c1f3b75a2b7e7c1ecb825a125663e6d",
@@ -148,7 +160,7 @@
148
160
  "scripts/finding_scorer.py": "a5315be6ee256c01c4539da3d1905ebc8d0840a356b83c55f9f6f2654a9f0c60",
149
161
  "scripts/harden_runner.py": "5d5a40029c088ccb66790a9b0128bdefcd35883ef1dac78088ceb9531392a8f1",
150
162
  "scripts/html_reporter.py": "655c57be39e13c177db8842ef471664e5853f3e43b9f2a63e590df40ff9c16cb",
151
- "scripts/manifest_builder.py": "18db6979b341a87e9bf38fe06525365d12b07d532c0dbfd2ac3ef0f539dc1f6f",
163
+ "scripts/manifest_builder.py": "f1f9a0d63c55cf5ff45e9fd39d1b251c2bce05e777f8c1e325741d340f0128db",
152
164
  "scripts/memory_engine.py": "b715d0ca030e95eb06ad6eda99027535df8a7e37d64897c023be6a291cf13dc6",
153
165
  "scripts/monorepo_detector.py": "5603674136a5294ebfff89efeca0a546dd4a7deb1d184a2592ff21aff2131f73",
154
166
  "scripts/recheck_runner.py": "89e93fcc6843493d7e5f0bf97065dbdb40106273a00e07f903250665ca25f6fb",
@@ -161,8 +173,8 @@
161
173
  "scripts/stack_detect.py": "c05a1ade4c8692025476bf7ea080a8f07c92e5d8e9a04f94c1654386352ffbdc",
162
174
  "scripts/status_runner.py": "4c358c91950c7874bcc6a5f23f2d3fda62b0752efcf6c6b658adf02ed77c7752",
163
175
  "scripts/term_ui.py": "ca69398f85c86fe89526d6334b3ee866c890273997351113c3cc1765b7bd20c3",
164
- "skills/torusguard/SKILL.md": "4d5b8e43fa3c09e5e1079cbc3e2184654219a2c47b2272db394da749969318f8",
165
- "skills/torusguard/bootstrap.py": "3d946f388cb4befa739c9d3b1404255d9a8ea5770ebbb79e5a1b9839589e9bc7",
176
+ "skills/torusguard/SKILL.md": "4987faed0081cd75d54b9f3c8378a2539e348e8ec814ffdb78415ed7d478a571",
177
+ "skills/torusguard/bootstrap.py": "f7ce48cc310dcdbf86c028f05a8f5ad22677f4cebb1bec5c90d173a9044342c5",
166
178
  "skills/torusguard/references/auth-and-sessions.md": "c3e4b9600cb53fc28c993922dc880accbec5783ac90d5ee98d63b52762d19525",
167
179
  "skills/torusguard/references/business-logic-and-abuse.md": "58e87df2864d468af70c1ff39f5d540c687fa846b671457f85046ab2065fe99c",
168
180
  "skills/torusguard/references/cache-and-sensitive-responses.md": "81b4a7a08e11dafa4ec58d868c4a35f1f891d0dcdcfbcefaef81e1b9ba94f5a1",
@@ -191,33 +203,43 @@
191
203
  "skills/torusguard/references/ssrf-and-outbound-requests.md": "5ce59ebada2f227b3e0a27f612b59a47801c152d24d2d4d533bee435f32b1b05",
192
204
  "skills/torusguard/references/webhook-security.md": "8fd27cce1562a3dfda8d4fae29bef7cfd47a65c1e89c6868cdbcac161ccd2be8",
193
205
  "skills/torusguard/references/websocket-security.md": "b5315e49432184c006664436d689d426b7322fc6fbbba2899a9ea5e5bab74c92",
194
- "skills/torusguard-apply/SKILL.md": "4cdd01d8159fc5f7519a806526a119e6d67e41b8af195de018b05d6af09acb12",
195
- "skills/torusguard-audit/SKILL.md": "0065336b125cfa8ec766dcec585bce4bbac66b3b063c174b7183dffef18e090d",
196
- "skills/torusguard-authorize/SKILL.md": "8694e6cef71cbeb6605fed33dd1f24b74352541069e54de7c3f48c9676e9aa3a",
197
- "skills/torusguard-exploit-check/SKILL.md": "87e0e01f28f3efea8dbe81790abaceb845a1290c75a6a16bbd256251cd0539a9",
198
- "skills/torusguard-full/SKILL.md": "35f8b38b08fef5a09504312ef3e54921b1f8f31f197bbe2af1474bcce2e83e1c",
199
- "skills/torusguard-harden/SKILL.md": "4332761e5454a504176eebbba2d4c585bcf066c8046c014cebc0f5771379c089",
200
- "skills/torusguard-init/SKILL.md": "03e599a5dad4262396e6b1a75859f76739b0b1480d8cc64544296106da903dfc",
201
- "skills/torusguard-recheck/SKILL.md": "72a0a79b29dcc7f7ae054f00c53e005bc92778f2c6bf3ad828f6391e859d9c1c",
202
- "skills/torusguard-report/SKILL.md": "6dc62fb2c9e2986827a802b7cabf41ce41d00a47573524a4bf1642a8d8e2249e",
203
- "skills/torusguard-status/SKILL.md": "2ad72e5d317e1d6fe0606f6926b1721dc01ba98b5daa2bfaa90bdd953a67bdf7",
204
- "skills/torusguard-verify/SKILL.md": "810c31ba9adc1b410b22eb8503f266be2d51e260a9c6828fd2938e2774e5baa7",
205
- "skills/torusguard-web-validate/SKILL.md": "3e02d9734402e8fbc86a0b5c2fdac945ef4fc9d60ba1b992197b1373427ad16e",
206
+ "skills/torusguard-ai-guard/SKILL.md": "130a24d82f1b92fcc3ac2f4edc77d4d999ae629971f2131f66d6fac876f5593f",
207
+ "skills/torusguard-apply/SKILL.md": "edb21eabae4f9ad5be5976b20d217941c87b2a15edfc73383d02460ca3253fca",
208
+ "skills/torusguard-audit/SKILL.md": "527f7fca458efb814ef656626d080adacc8c1dd95f2d56a457bbae688a9bedaa",
209
+ "skills/torusguard-authorize/SKILL.md": "56bcebc718bddadfd66010ebe2d23b4acf429e6230de05dd2300dab6bd383cc2",
210
+ "skills/torusguard-container/SKILL.md": "f9a2dea0b6b1e2de8ce4a189bb32b1010f1b4d6ff7a529450857b6dab20546ff",
211
+ "skills/torusguard-exploit-check/SKILL.md": "c127f1766e98e28dc967e452dff5dfec87689a26cf671ab6e62a135cd4d46e4b",
212
+ "skills/torusguard-full/SKILL.md": "6815ddde9e0e2dec24c174b08e541c80e34569836b1d94fda4ecf9577001e50c",
213
+ "skills/torusguard-git-mine/SKILL.md": "ebfb2f9955bf83b01be353c0a091396e549e5140564ab725d0479914b161e446",
214
+ "skills/torusguard-harden/SKILL.md": "14a09c770aa61e39e0ae862bb32304233975299df7e23c640983fd8551bbb0dd",
215
+ "skills/torusguard-init/SKILL.md": "6f9e9cdc1cc4f98baf2e6047c939b86a6191561c8ddea6c9246651378b00b9a8",
216
+ "skills/torusguard-ocr-scan/SKILL.md": "5b424d19383a93d757af06c4e777cd88c8cbdbcaaf1adc0c7bb38180ebc2bad8",
217
+ "skills/torusguard-recheck/SKILL.md": "a5c4539ec6d091179c8ba53792fba46f26795976f392d2305e357f25a2966c55",
218
+ "skills/torusguard-redos/SKILL.md": "b09b39bd98589613b2107c177e247f6224fb54ab2f028b4339ae01aac9d28c67",
219
+ "skills/torusguard-report/SKILL.md": "509185ea6730601cf9a44e136219cace61cd0523f8e112de03e4ef1c35e60585",
220
+ "skills/torusguard-status/SKILL.md": "e9741a20313a8304bc7565b194949a59ec7cfd4945b197517680164b3197efc0",
221
+ "skills/torusguard-verify/SKILL.md": "aeb4d3c7924253607d130e48491d83bf7b7a21707cd1dac2ba97d64f5e259fd6",
222
+ "skills/torusguard-web-validate/SKILL.md": "f1df00e10abd823d9a8c4daa1a3af7f26c5263c6c8e58e05b61b647d01a25489",
206
223
  "templates/audit-report.template.md": "71149dd05b01a74287a47781fdc71fd2d1b4b70337da303bf78767d0410a6c90",
207
224
  "templates/authorization.template.md": "81ef843d42a19412c369f383b787465ac24173c0b14c1f5f211786eab3d10e8b",
208
225
  "templates/finding-card.template.md": "8f756edbd3e4139d3da2fb96f35bd2d2b267b33b754f187b590a89584265c1e6",
209
226
  "templates/remediation-bundle.template.md": "4d85a540e3a2e74f9b21fc8a2a1072e27ca03e97cd67ca482f529cfe722acc4d",
210
- "workflows/apply.md": "67e1002fc6e9d68e0c7d871c40b6f3c3b9c3919c8e02106a579882729c0f6b9f",
211
- "workflows/audit.md": "eac9102ca88d53f71da474cd55717d431fd9c3b08c66d0760da9b53a659cf89a",
212
- "workflows/authorize.md": "28ca58cfc656e956f7cec8160f2aadc152abcde3eb5ad5588df149007afb0df8",
213
- "workflows/exploit-check.md": "41e77afe912be9266c5bc1e00fd796baff22a67973eb6e86d196d34f4d7bdfa4",
214
- "workflows/harden.md": "7d92132973ff867b99e0425e3aee3c4e91868cb5193ec601069af2e857b6697f",
215
- "workflows/init.md": "611418577ff9d5719df459f56b3fa53b91eb3717b02c4b4e5e86ed483bed3bfa",
216
- "workflows/memory.md": "8ad2ec154176e2540c2859a28eff9f7c2dbca0217aa29d0f4aa88b87c43f8bef",
217
- "workflows/recheck.md": "42eecc3ba194564d48a6a88d8003e86cafe003503e887dc565314d4aa558e8fd",
227
+ "workflows/ai-guard.md": "7d762f4e18f64864b50b64148b972085d2766aeaf13833bc1e6aeb8fddb96999",
228
+ "workflows/apply.md": "0cd0fa84627ff73ffef84aa7eed6d096b57826139c079fa63f1bd745e13b138a",
229
+ "workflows/audit.md": "4fb2bfe345792572f3e164aa38ab1b103868eac2bff0d9dbf91082514ea9b649",
230
+ "workflows/authorize.md": "386779f405c4b7de0282938db4095179ed212fd32296dff158acb3258b41aec1",
231
+ "workflows/container.md": "64936b4873e9dfde6deae8a7d10d572a3bfbbfe9ef2340d0df8a3db5e1d02ad7",
232
+ "workflows/exploit-check.md": "4dc4016b7a22f18d5c32dd6fcfa7a859df07d03300973654aea92fe5251c8a85",
233
+ "workflows/git-mine.md": "3406122bc26c16d6518a77cb5cdd823c3860c3acb2873a0b2accd936040d5ca1",
234
+ "workflows/harden.md": "8a7e0ad3efe336f087fb4ad0205aaca32509145c1c02747d425591c87616c473",
235
+ "workflows/init.md": "c5c5fe6efbe9d37037b7b558ed396a60eec96bca4f3cf8cac072a1c61b334a1d",
236
+ "workflows/memory.md": "e23ce835c4e451a720a75cfc19a70ae81550665bb49a71016a4945fa75be981f",
237
+ "workflows/ocr-scan.md": "e1cee1a4e099df29b776911ac2b4b41a699a40f41286571e85bcb105bd1e6ecb",
238
+ "workflows/recheck.md": "f57194675ed465ee5fd6e8fc731e7102becd2dd0a8f8848517c0e11d3de849cf",
218
239
  "workflows/recipes.md": "300c1fed0167e1a299fcd33c07db05630116b18a71ec2513c385862bba0f179b",
219
- "workflows/report.md": "ecbd67bfa95bde3c0f51e06aac6fad70d5989b0be82245116cd7ba367f378a4c",
220
- "workflows/status.md": "7f07e726bbb0488e48b718c2f36971634b1422bc2ddfbb381eb3e1ea67c1cfbf",
240
+ "workflows/redos.md": "f55a4f510849a5ea7e2ae4b08ecc70dff03c1bf21c7fdc664a4ff3ad0396f904",
241
+ "workflows/report.md": "7c718dfef6da1b66ba0fed300b7dfc90438fc3866af5a9b2aae4b3c3acd638e2",
242
+ "workflows/status.md": "021a962ae4e6fc81383db2ef42d28dcfc1b3e546c9a10a7a15b9910e531cf0c2",
221
243
  "workflows/torusguard-apply.md": "67e1002fc6e9d68e0c7d871c40b6f3c3b9c3919c8e02106a579882729c0f6b9f",
222
244
  "workflows/torusguard-audit.md": "eac9102ca88d53f71da474cd55717d431fd9c3b08c66d0760da9b53a659cf89a",
223
245
  "workflows/torusguard-authorize.md": "28ca58cfc656e956f7cec8160f2aadc152abcde3eb5ad5588df149007afb0df8",
@@ -231,6 +253,6 @@
231
253
  "workflows/torusguard-verify.md": "6412e123a9346240e5ba898a0da73d3409d9a215d6e8f202ab2eb5719b663731",
232
254
  "workflows/torusguard-web-validate.md": "3b2a3d02b69469539b4a48ed3bd355362927cc21470dbcdeccba564a9e68a371",
233
255
  "workflows/torusguard.md": "4b5da6d38dae6be277bd52782121cdb181a75f1400068041310ca69deae89589",
234
- "workflows/verify.md": "6412e123a9346240e5ba898a0da73d3409d9a215d6e8f202ab2eb5719b663731",
235
- "workflows/web-validate.md": "3b2a3d02b69469539b4a48ed3bd355362927cc21470dbcdeccba564a9e68a371"
256
+ "workflows/verify.md": "dd2579fe7d6e31ba47a4094edfbf4ab04be0745da7dc79e104b0547395c715d1",
257
+ "workflows/web-validate.md": "08441b01d15fd16f6697a95244632ea1465193631ecfb0746fe0c58895ff1c2b"
236
258
  }