shadowcat 2.0.0__tar.gz → 2.2.1__tar.gz

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 (194) hide show
  1. shadowcat-2.2.1/.clineignore +23 -0
  2. {shadowcat-2.0.0 → shadowcat-2.2.1}/.env.example +43 -35
  3. {shadowcat-2.0.0 → shadowcat-2.2.1}/.gitignore +165 -151
  4. shadowcat-2.2.1/.mcp.json +8 -0
  5. {shadowcat-2.0.0 → shadowcat-2.2.1}/CLAUDE.md +170 -161
  6. {shadowcat-2.0.0 → shadowcat-2.2.1}/Dockerfile +101 -101
  7. {shadowcat-2.0.0 → shadowcat-2.2.1}/LICENSE.md +21 -21
  8. {shadowcat-2.0.0 → shadowcat-2.2.1}/Makefile +292 -292
  9. {shadowcat-2.0.0 → shadowcat-2.2.1}/PKG-INFO +35 -7
  10. {shadowcat-2.0.0 → shadowcat-2.2.1}/README.md +350 -322
  11. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/__init__.py +17 -17
  12. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/benchmark/__init__.py +11 -11
  13. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/benchmark/cli.py +179 -179
  14. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/benchmark/config.py +15 -15
  15. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/benchmark/docker.py +192 -192
  16. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/benchmark/registry.py +99 -99
  17. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/agent.py +376 -362
  18. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/backend.py +1667 -1667
  19. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/config.py +106 -106
  20. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/controller.py +638 -638
  21. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/events.py +177 -177
  22. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/langfuse.py +326 -320
  23. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/phantom.py +2327 -2327
  24. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/planner.py +491 -493
  25. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/profiling.py +58 -58
  26. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/sanitizer.py +104 -104
  27. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/session.py +238 -228
  28. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/tracer.py +137 -137
  29. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/interface/components/activity_feed.py +202 -202
  30. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/interface/components/renderers.py +149 -149
  31. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/interface/components/splash.py +112 -112
  32. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/interface/main.py +1091 -1126
  33. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/interface/styles.tcss +421 -421
  34. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/interface/tui.py +508 -508
  35. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/parsing/html_distiller.py +230 -230
  36. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/parsing/tool_parser.py +115 -115
  37. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/prompts/pentesting.py +238 -238
  38. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/rag_module/knowledge_base.py +116 -116
  39. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/tests/benchmark_phantom.py +455 -455
  40. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/tools/__init__.py +14 -14
  41. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/tools/base.py +99 -99
  42. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/tools/executor.py +343 -345
  43. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/tools/registry.py +47 -47
  44. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/README.md +244 -244
  45. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/__init__.py +10 -10
  46. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/api/__init__.py +1 -1
  47. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/api/routes_scan.py +1114 -932
  48. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/authz.py +75 -75
  49. shadowcat-2.2.1/backend/cli.py +243 -0
  50. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/compliance/__init__.py +1 -1
  51. shadowcat-2.2.1/backend/compliance/pdpa_mapping.py +115 -0
  52. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/core/__init__.py +1 -1
  53. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/core/coverage.py +93 -93
  54. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/core/events.py +166 -166
  55. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/core/llm_client.py +632 -614
  56. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/core/orchestrator.py +490 -402
  57. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/core/scan_memory.py +238 -236
  58. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/crawler/__init__.py +1 -1
  59. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/crawler/csrf.py +75 -75
  60. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/crawler/headless.py +232 -232
  61. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/crawler/js_analyzer.py +133 -133
  62. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/crawler/spider.py +555 -550
  63. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/crawler/subdomains.py +279 -279
  64. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/daemon.py +262 -252
  65. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/db/README.md +86 -86
  66. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/db/__init__.py +17 -17
  67. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/db/engine.py +87 -87
  68. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/db/models.py +206 -206
  69. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/db/repository.py +316 -316
  70. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/db/schema.sql +247 -247
  71. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/modes/__init__.py +5 -5
  72. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/modes/base.py +178 -178
  73. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/modes/ctf.py +39 -39
  74. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/modes/enterprise.py +255 -210
  75. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/modes/general.py +345 -226
  76. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/modes/registry.py +37 -34
  77. shadowcat-2.2.1/backend/reporting/generator.py +428 -0
  78. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/schemas/__init__.py +1 -1
  79. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/schemas/api.py +423 -423
  80. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/tools/__init__.py +62 -62
  81. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/tools/dirbrute_tool.py +304 -304
  82. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/tools/general_report_tool.py +178 -135
  83. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/tools/http_tool.py +424 -351
  84. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/tools/nuclei_tool.py +20 -20
  85. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/tools/report_tool.py +162 -145
  86. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/tools/shell_tools.py +23 -23
  87. shadowcat-2.2.1/backend/user_config.py +78 -0
  88. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/verification/__init__.py +1 -1
  89. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/verification/evidence_store.py +197 -125
  90. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/verification/general_oracle.py +515 -369
  91. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/verification/idor_oracle.py +131 -131
  92. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/waf/detector.py +147 -147
  93. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/waf/evasion.py +117 -117
  94. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/workspace.py +182 -182
  95. {shadowcat-2.0.0 → shadowcat-2.2.1}/custom_exploits/example_exploit.py +8 -8
  96. {shadowcat-2.0.0 → shadowcat-2.2.1}/docker-compose.yml +66 -66
  97. shadowcat-2.2.1/docs/CHANGES_SUMMARY_TH.md +211 -0
  98. shadowcat-2.2.1/docs/DASHBOARD_IMPROVEMENTS_TH.md +434 -0
  99. {shadowcat-2.0.0 → shadowcat-2.2.1}/docs/ENTERPRISE_ARCH.md +171 -171
  100. shadowcat-2.2.1/docs/HOW_TO_RUN_TH.md +322 -0
  101. shadowcat-2.2.1/docs/NSC_PREP_TH.md +643 -0
  102. {shadowcat-2.0.0 → shadowcat-2.2.1}/docs/PROGRESS.md +359 -345
  103. {shadowcat-2.0.0 → shadowcat-2.2.1}/docs/ROADMAP.md +1096 -1096
  104. shadowcat-2.2.1/docs/ShadowCat_/340/271/200/340/270/255/340/270/201/340/270/252/340/270/262/340/270/243/340/270/233/340/270/243/340/270/260/340/270/201/340/270/255/340/270/232/340/271/202/340/270/233/340/270/243/340/271/200/340/270/210/340/270/204_NSC2026.pdf +0 -0
  105. shadowcat-2.2.1/docs/TECHNICAL_DEEP_DIVE_TH.md +917 -0
  106. shadowcat-2.2.1/docs/WEBSITE_SPEC.md +226 -0
  107. {shadowcat-2.0.0 → shadowcat-2.2.1}/docs/nsc-shadowcat-pitch.md +134 -134
  108. shadowcat-2.2.1/docs/research/README.md +0 -0
  109. {shadowcat-2.0.0 → shadowcat-2.2.1}/fix-workspace-permissions.sh +39 -39
  110. shadowcat-2.2.1/frontend/next.config.ts +15 -0
  111. shadowcat-2.2.1/frontend/postcss.config.mjs +7 -0
  112. shadowcat-2.2.1/frontend/public/logo-mark.png +0 -0
  113. shadowcat-2.2.1/frontend/public/logo.png +0 -0
  114. shadowcat-2.2.1/frontend/src/app/globals.css +20 -0
  115. shadowcat-2.2.1/frontend/src/app/layout.tsx +17 -0
  116. shadowcat-2.2.1/frontend/src/app/page.tsx +5 -0
  117. shadowcat-2.2.1/frontend/src/components/AppShell.tsx +130 -0
  118. shadowcat-2.2.1/frontend/src/components/EmptyBlock.tsx +18 -0
  119. shadowcat-2.2.1/frontend/src/components/NewScanModal.tsx +152 -0
  120. shadowcat-2.2.1/frontend/src/components/PageHeader.tsx +19 -0
  121. shadowcat-2.2.1/frontend/src/components/ReportButtons.tsx +50 -0
  122. shadowcat-2.2.1/frontend/src/components/Sidebar.tsx +164 -0
  123. shadowcat-2.2.1/frontend/src/components/StatusChip.tsx +26 -0
  124. shadowcat-2.2.1/frontend/src/components/Topbar.tsx +82 -0
  125. shadowcat-2.2.1/frontend/src/components/charts/SeverityBarChart.tsx +66 -0
  126. shadowcat-2.2.1/frontend/src/components/charts/VerdictBar.tsx +55 -0
  127. shadowcat-2.2.1/frontend/src/components/icons.tsx +161 -0
  128. shadowcat-2.2.1/frontend/src/components/views/FindingsView.tsx +83 -0
  129. shadowcat-2.2.1/frontend/src/components/views/LiveFeedView.tsx +374 -0
  130. shadowcat-2.2.1/frontend/src/components/views/MemoryView.tsx +107 -0
  131. shadowcat-2.2.1/frontend/src/components/views/OverviewView.tsx +159 -0
  132. shadowcat-2.2.1/frontend/src/components/views/SessionsView.tsx +71 -0
  133. shadowcat-2.2.1/frontend/src/components/views/SettingsView.tsx +350 -0
  134. shadowcat-2.2.1/frontend/src/lib/api.ts +294 -0
  135. shadowcat-2.2.1/frontend/src/lib/severity.ts +34 -0
  136. shadowcat-2.2.1/frontend/src/lib/useActiveScan.ts +149 -0
  137. shadowcat-2.2.1/frontend/src/lib/useScanDetails.ts +43 -0
  138. shadowcat-2.2.1/frontend/tsconfig.json +41 -0
  139. shadowcat-2.2.1/hatch_build.py +51 -0
  140. {shadowcat-2.0.0 → shadowcat-2.2.1}/pyproject.toml +203 -195
  141. {shadowcat-2.0.0 → shadowcat-2.2.1}/scripts/config.sh +202 -202
  142. {shadowcat-2.0.0 → shadowcat-2.2.1}/scripts/entrypoint.sh +80 -80
  143. {shadowcat-2.0.0 → shadowcat-2.2.1}/scripts/gen_report.js +254 -254
  144. {shadowcat-2.0.0 → shadowcat-2.2.1}/scripts/test_client.py +106 -106
  145. {shadowcat-2.0.0 → shadowcat-2.2.1}/setup.sh +130 -130
  146. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/__init__.py +1 -1
  147. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/conftest.py +137 -123
  148. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/docker/__init__.py +1 -1
  149. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/docker/test_container_health.py +167 -167
  150. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/docker/test_docker_build.py +111 -111
  151. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/integration/__init__.py +1 -1
  152. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/integration/test_benchmark_cli.py +279 -279
  153. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/integration/test_controller.py +174 -174
  154. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_config_cli.py +80 -82
  155. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_coverage_ledger.py +56 -56
  156. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_daemon_cli.py +361 -331
  157. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_db_persistence.py +233 -233
  158. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_enterprise_api.py +562 -422
  159. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_enterprise_engine.py +350 -248
  160. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_executor.py +256 -256
  161. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_general_oracle.py +202 -120
  162. shadowcat-2.2.1/tests/test_general_report_tool.py +174 -0
  163. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_headless.py +84 -84
  164. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_llm_wiring.py +442 -376
  165. shadowcat-2.2.1/tests/test_memory_briefing.py +132 -0
  166. shadowcat-2.2.1/tests/test_pdpa_mapping.py +31 -0
  167. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_scan_memory.py +87 -87
  168. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/test_sse_replay.py +133 -133
  169. shadowcat-2.2.1/tests/test_user_config.py +142 -0
  170. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/__init__.py +1 -1
  171. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/test_backend_interface.py +145 -145
  172. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/test_benchmark_registry.py +91 -91
  173. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/test_config.py +173 -173
  174. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/test_events.py +160 -160
  175. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/test_flag_detection.py +164 -164
  176. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/test_langfuse.py +533 -506
  177. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/test_phantom_two_tier.py +415 -415
  178. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/test_planner_context.py +179 -179
  179. {shadowcat-2.0.0 → shadowcat-2.2.1}/tests/unit/test_session.py +204 -172
  180. shadowcat-2.2.1/uv.lock +2155 -0
  181. shadowcat-2.0.0/LEARNING.md +0 -61
  182. shadowcat-2.0.0/backend/cli.py +0 -261
  183. shadowcat-2.0.0/backend/compliance/pdpa_mapping.py +0 -16
  184. shadowcat-2.0.0/backend/reporting/generator.py +0 -285
  185. shadowcat-2.0.0/backend/webui/index.html +0 -713
  186. shadowcat-2.0.0/uv.lock +0 -2061
  187. {shadowcat-2.0.0 → shadowcat-2.2.1}/.gitmodules +0 -0
  188. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/core/__init__.py +0 -0
  189. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/interface/__init__.py +0 -0
  190. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/interface/components/__init__.py +0 -0
  191. {shadowcat-2.0.0 → shadowcat-2.2.1}/agent/prompts/__init__.py +0 -0
  192. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/reporting/__init__.py +0 -0
  193. {shadowcat-2.0.0 → shadowcat-2.2.1}/backend/waf/__init__.py +0 -0
  194. /shadowcat-2.0.0/docs/research/README.md → /shadowcat-2.2.1/backend/webui/index.html +0 -0
@@ -0,0 +1,23 @@
1
+ # Ignore dependency directories
2
+ node_modules/
3
+ **/node_modules/
4
+
5
+ # Ignore build and cache directories
6
+ .next/
7
+ .venv/
8
+ .pytest_cache/
9
+ .ruff_cache/
10
+ dist/
11
+ build/
12
+
13
+ # Ignore lock files if they are too large
14
+ package-lock.json
15
+ uv.lock
16
+
17
+ # Ignore environment files
18
+ .env
19
+ .env.*
20
+ !.env.example
21
+
22
+ # Ignore internal logs or metadata
23
+ *.log
@@ -1,35 +1,43 @@
1
- # ShadowCat Configuration
2
- # Copy this file to .env and fill in your values.
3
-
4
- # =============================================================================
5
- # LLM API Key (required)
6
- #
7
- # Option A — PSU Blue (university gateway, recommended on campus):
8
- # Key format: sk-user-... — auto-routed to https://ai.psu.blue/v1
9
- # Models: qwen/qwen3.6-plus, qwen/qwen3.6-flash, openai/gpt-4o-mini, deepseek/deepseek-chat
10
- #
11
- # Option B — OpenRouter (public gateway):
12
- # Get your key at https://openrouter.ai/keys (format: sk-or-...)
13
- # Models: any slug from https://openrouter.ai/models
14
- #
15
- # Both use the same OPENROUTER_API_KEY variable — the system auto-detects the gateway.
16
- # =============================================================================
17
- OPENROUTER_API_KEY=sk-user-your-psu-key-here
18
-
19
- # Model slug — must be available on whichever gateway your key targets.
20
- # PSU Blue examples: qwen/qwen3.6-plus | openai/gpt-4o-mini | deepseek/deepseek-chat
21
- # OpenRouter examples: anthropic/claude-3-5-sonnet | openai/gpt-4o
22
- MODEL=qwen/qwen3.6-plus
23
-
24
- # Override the API base URL (optional — auto-detected from key prefix).
25
- # Set this only if you need to point at a non-standard endpoint.
26
- # OPENROUTER_BASE_URL=https://ai.psu.blue/v1
27
-
28
- # =============================================================================
29
- # Database (optional) — Enterprise API persistence (app/db)
30
- # When unset, the API runs in-memory and persists nothing. When set, scans,
31
- # HTTP evidence, findings, and verdicts are written to PostgreSQL.
32
- # Standard SQLAlchemy async URL (a plain postgresql:// is upgraded to asyncpg).
33
- # Percent-encode any @ : / ? characters in the password. Never commit a real one.
34
- # =============================================================================
35
- # DATABASE_URL=postgresql+asyncpg://postgres:your-password@127.0.0.1:5432/shadowcat
1
+ # ShadowCat Configuration
2
+ # Copy this file to .env and fill in your values.
3
+
4
+ # =============================================================================
5
+ # LLM API Key (required)
6
+ #
7
+ # Option A — PSU Blue (university gateway, recommended on campus):
8
+ # Key format: sk-user-... — auto-routed to https://ai.psu.blue/v1
9
+ # Models: qwen/qwen3.6-plus, qwen/qwen3.6-flash, openai/gpt-4o-mini, deepseek/deepseek-chat
10
+ #
11
+ # Option B — OpenRouter (public gateway):
12
+ # Get your key at https://openrouter.ai/keys (format: sk-or-...)
13
+ # Models: any slug from https://openrouter.ai/models
14
+ #
15
+ # Both use the same OPENROUTER_API_KEY variable — the system auto-detects the gateway.
16
+ # =============================================================================
17
+ OPENROUTER_API_KEY=sk-user-your-psu-key-here
18
+
19
+ # Model slug — must be available on whichever gateway your key targets.
20
+ # PSU Blue examples: qwen/qwen3.6-plus | openai/gpt-4o-mini | deepseek/deepseek-chat
21
+ # OpenRouter examples: anthropic/claude-3-5-sonnet | openai/gpt-4o
22
+ MODEL=qwen/qwen3.6-plus
23
+
24
+ # Override the API base URL (optional — auto-detected from key prefix).
25
+ # Set this only if you need to point at a non-standard endpoint.
26
+ # OPENROUTER_BASE_URL=https://ai.psu.blue/v1
27
+
28
+ # =============================================================================
29
+ # Database (optional) — Enterprise API persistence (app/db)
30
+ # When unset, the API runs in-memory and persists nothing. When set, scans,
31
+ # HTTP evidence, findings, and verdicts are written to PostgreSQL.
32
+ # Standard SQLAlchemy async URL (a plain postgresql:// is upgraded to asyncpg).
33
+ # Percent-encode any @ : / ? characters in the password. Never commit a real one.
34
+ # =============================================================================
35
+ # DATABASE_URL=postgresql+asyncpg://postgres:your-password@127.0.0.1:5432/shadowcat
36
+
37
+ # =============================================================================
38
+ # Telemetry (optional) — Langfuse observability for the agentic TUI
39
+ # Opt-in: unset by default, so telemetry stays off unless both keys are
40
+ # provided. Never commit real values here. Get keys at https://cloud.langfuse.com
41
+ # =============================================================================
42
+ # LANGFUSE_PUBLIC_KEY=pk-lf-your-key-here
43
+ # LANGFUSE_SECRET_KEY=sk-lf-your-key-here
@@ -1,151 +1,165 @@
1
- # ============================================================================
2
- # Python
3
- # ============================================================================
4
-
5
- # Byte-compiled / optimized / DLL files
6
- __pycache__/
7
- *.py[cod]
8
- *$py.class
9
- *.so
10
-
11
- # Distribution / packaging
12
- .Python
13
- build/
14
- develop-eggs/
15
- dist/
16
- downloads/
17
- eggs/
18
- .eggs/
19
- lib/
20
- lib64/
21
- parts/
22
- sdist/
23
- var/
24
- wheels/
25
- share/python-wheels/
26
- *.egg-info/
27
- .installed.cfg
28
- *.egg
29
- MANIFEST
30
-
31
- # Installer logs
32
- pip-log.txt
33
- pip-delete-this-directory.txt
34
-
35
- # ============================================================================
36
- # Virtual Environments
37
- # ============================================================================
38
-
39
- .venv/
40
- venv/
41
- ENV/
42
- env/
43
- env.bak/
44
- venv.bak/
45
-
46
- # ============================================================================
47
- # Poetry / PDM
48
- # ============================================================================
49
-
50
- poetry.lock
51
- .pdm.toml
52
- .pdm-build/
53
-
54
- # ============================================================================
55
- # Testing
56
- # ============================================================================
57
-
58
- .pytest_cache/
59
- .coverage
60
- .coverage.*
61
- htmlcov/
62
- .tox/
63
- .nox/
64
- .cache
65
- nosetests.xml
66
- coverage.xml
67
- *.cover
68
- *.py,cover
69
- .hypothesis/
70
- cover/
71
-
72
- # ============================================================================
73
- # Type Checking & Linting
74
- # ============================================================================
75
-
76
- .mypy_cache/
77
- .dmypy.json
78
- dmypy.json
79
- .pytype/
80
- .pyre/
81
- .ruff_cache/
82
- cython_debug/
83
-
84
- # ============================================================================
85
- # IDEs & Editors
86
- # ============================================================================
87
-
88
- .idea/
89
- .vscode/
90
- *.swp
91
- *.swo
92
- *~
93
- .aider*
94
-
95
- # ============================================================================
96
- # OS Files
97
- # ============================================================================
98
-
99
- .DS_Store
100
- Thumbs.db
101
-
102
- # ============================================================================
103
- # Project Specific
104
- # ============================================================================
105
-
106
- # Runtime workspace - NEVER commit (contains VPN configs, exploits, sensitive data)
107
- workspace/*
108
- !workspace/.gitkeep
109
-
110
- # VPN configuration files (extra safety - never commit these anywhere)
111
- *.ovpn
112
-
113
- # Logs
114
- *.log
115
- logs/
116
-
117
- # Environment
118
- .env
119
- .env.auth
120
-
121
- # Agent runs
122
- agent_runs/
123
-
124
- # Legacy project files (when running from legacy/)
125
- config/chatgpt_config.py
126
- outputs/
127
- test_history/
128
- archive/
129
-
130
- # ============================================================================
131
- # Local Docker Overrides (for regional mirrors, etc.)
132
- # ============================================================================
133
-
134
- Dockerfile.vpn
135
- docker-compose.override.yml
136
- vpn-mode.sh
137
-
138
- # ============================================================================
139
- # Documentation
140
- # ============================================================================
141
-
142
- docs/_build/
143
- /site
144
-
145
- # ============================================================================
146
- # Jupyter
147
- # ============================================================================
148
-
149
- .ipynb_checkpoints
150
- profile_default/
151
- ipython_config.py
1
+ # ============================================================================
2
+ # Python
3
+ # ============================================================================
4
+
5
+ # Byte-compiled / optimized / DLL files
6
+ __pycache__/
7
+ *.py[cod]
8
+ *$py.class
9
+ *.so
10
+
11
+ # Distribution / packaging
12
+ .Python
13
+ build/
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ /lib/
20
+ /lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ share/python-wheels/
26
+ *.egg-info/
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+
31
+ # Installer logs
32
+ pip-log.txt
33
+ pip-delete-this-directory.txt
34
+
35
+ # ============================================================================
36
+ # Virtual Environments
37
+ # ============================================================================
38
+
39
+ .venv/
40
+ venv/
41
+ ENV/
42
+ env/
43
+ env.bak/
44
+ venv.bak/
45
+
46
+ # ============================================================================
47
+ # Poetry / PDM
48
+ # ============================================================================
49
+
50
+ poetry.lock
51
+ .pdm.toml
52
+ .pdm-build/
53
+
54
+ # ============================================================================
55
+ # Testing
56
+ # ============================================================================
57
+
58
+ .pytest_cache/
59
+ .coverage
60
+ .coverage.*
61
+ htmlcov/
62
+ .tox/
63
+ .nox/
64
+ .cache
65
+ nosetests.xml
66
+ coverage.xml
67
+ *.cover
68
+ *.py,cover
69
+ .hypothesis/
70
+ cover/
71
+
72
+ # ============================================================================
73
+ # Type Checking & Linting
74
+ # ============================================================================
75
+
76
+ .mypy_cache/
77
+ .dmypy.json
78
+ dmypy.json
79
+ .pytype/
80
+ .pyre/
81
+ .ruff_cache/
82
+ cython_debug/
83
+
84
+ # ============================================================================
85
+ # IDEs & Editors
86
+ # ============================================================================
87
+
88
+ .idea/
89
+ .vscode/
90
+ *.swp
91
+ *.swo
92
+ *~
93
+ .aider*
94
+
95
+ # ============================================================================
96
+ # OS Files
97
+ # ============================================================================
98
+
99
+ .DS_Store
100
+ Thumbs.db
101
+
102
+ # ============================================================================
103
+ # Project Specific
104
+ # ============================================================================
105
+
106
+ # Runtime workspace - NEVER commit (contains VPN configs, exploits, sensitive data)
107
+ workspace/*
108
+ !workspace/.gitkeep
109
+
110
+ # VPN configuration files (extra safety - never commit these anywhere)
111
+ *.ovpn
112
+
113
+ # Logs
114
+ *.log
115
+ logs/
116
+
117
+ # Environment
118
+ .env
119
+ .env.auth
120
+
121
+ # Agent runs
122
+ agent_runs/
123
+
124
+ # Legacy project files (when running from legacy/)
125
+ config/chatgpt_config.py
126
+ outputs/
127
+ test_history/
128
+ archive/
129
+
130
+ # ============================================================================
131
+ # Local Docker Overrides (for regional mirrors, etc.)
132
+ # ============================================================================
133
+
134
+ Dockerfile.vpn
135
+ docker-compose.override.yml
136
+ vpn-mode.sh
137
+
138
+ # ============================================================================
139
+ # Documentation
140
+ # ============================================================================
141
+
142
+ docs/_build/
143
+ /site
144
+
145
+ # ============================================================================
146
+ # Jupyter
147
+ # ============================================================================
148
+
149
+ .ipynb_checkpoints
150
+ profile_default/
151
+ ipython_config.py
152
+
153
+ # ============================================================================
154
+ # Node / Frontend
155
+ # ============================================================================
156
+
157
+ node_modules/
158
+ rag_db/
159
+ frontend/.next/
160
+ frontend/out/
161
+ frontend/next-env.d.ts
162
+ frontend/*.tsbuildinfo
163
+
164
+ # Dashboard copy bundled into the wheel by hatch_build.py at build time.
165
+ /backend/_dashboard/
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "AfterEffectsMCP": {
4
+ "command": "node",
5
+ "args": ["E:/after-effects-mcp/build/index.js"]
6
+ }
7
+ }
8
+ }