fixplesk 0.6.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 (337) hide show
  1. fixplesk-0.6.1/.dockerignore +17 -0
  2. fixplesk-0.6.1/.github/workflows/docker.yml +38 -0
  3. fixplesk-0.6.1/.github/workflows/offline.yml +16 -0
  4. fixplesk-0.6.1/.github/workflows/tests.yml +25 -0
  5. fixplesk-0.6.1/CHANGELOG.md +100 -0
  6. fixplesk-0.6.1/LICENSE +25 -0
  7. fixplesk-0.6.1/MANIFEST.in +12 -0
  8. fixplesk-0.6.1/PKG-INFO +321 -0
  9. fixplesk-0.6.1/README.md +279 -0
  10. fixplesk-0.6.1/docker/Dockerfile.demo +9 -0
  11. fixplesk-0.6.1/docker/Dockerfile.guard +11 -0
  12. fixplesk-0.6.1/docker/Dockerfile.offline +9 -0
  13. fixplesk-0.6.1/docker/Dockerfile.security +10 -0
  14. fixplesk-0.6.1/docker/Dockerfile.tests +10 -0
  15. fixplesk-0.6.1/docker/Dockerfile.twin +7 -0
  16. fixplesk-0.6.1/docker/Dockerfile.wordpress +12 -0
  17. fixplesk-0.6.1/docker/compose.demo.yml +48 -0
  18. fixplesk-0.6.1/docker/compose.guard.yml +15 -0
  19. fixplesk-0.6.1/docker/compose.offline.yml +15 -0
  20. fixplesk-0.6.1/docker/compose.security.yml +15 -0
  21. fixplesk-0.6.1/docker/compose.twin.yml +41 -0
  22. fixplesk-0.6.1/docker/compose.wordpress.yml +47 -0
  23. fixplesk-0.6.1/docs/ARCHITECTURE.md +88 -0
  24. fixplesk-0.6.1/docs/DEEPSEEK.md +165 -0
  25. fixplesk-0.6.1/docs/DIGITAL_TWIN.md +146 -0
  26. fixplesk-0.6.1/docs/DOCROOT.md +156 -0
  27. fixplesk-0.6.1/docs/DSL.md +106 -0
  28. fixplesk-0.6.1/docs/INTEGRATIONS.md +132 -0
  29. fixplesk-0.6.1/docs/MIGRATION.md +43 -0
  30. fixplesk-0.6.1/docs/NON_LLM_LIBRARIES.md +226 -0
  31. fixplesk-0.6.1/docs/OFFLINE.md +128 -0
  32. fixplesk-0.6.1/docs/PRIVACY.md +87 -0
  33. fixplesk-0.6.1/docs/README.md +14 -0
  34. fixplesk-0.6.1/docs/RECOVERY.md +138 -0
  35. fixplesk-0.6.1/docs/REQUIREMENTS_MATRIX.md +56 -0
  36. fixplesk-0.6.1/docs/RUNBOOK_CATALOGUE.md +2252 -0
  37. fixplesk-0.6.1/docs/SECURITY.md +132 -0
  38. fixplesk-0.6.1/docs/SOURCES.md +295 -0
  39. fixplesk-0.6.1/docs/TESTING-0.2.0.md +77 -0
  40. fixplesk-0.6.1/docs/TESTING.md +125 -0
  41. fixplesk-0.6.1/docs/TESTING_0.6.0.md +74 -0
  42. fixplesk-0.6.1/docs/TOOLS.json +2366 -0
  43. fixplesk-0.6.1/docs/TOOLS.md +68 -0
  44. fixplesk-0.6.1/docs/ZAI.md +34 -0
  45. fixplesk-0.6.1/docs/analysis/llm-benchmark.md +129 -0
  46. fixplesk-0.6.1/docs/guard/ARCHITECTURE.md +116 -0
  47. fixplesk-0.6.1/docs/guard/BREACHES.md +41 -0
  48. fixplesk-0.6.1/docs/guard/EXAMPLE_REPORT.md +50 -0
  49. fixplesk-0.6.1/docs/guard/ROADMAP.md +57 -0
  50. fixplesk-0.6.1/docs/guard/SOURCES.md +24 -0
  51. fixplesk-0.6.1/docs/guard/TESTING_0.5.0.md +45 -0
  52. fixplesk-0.6.1/docs/guard/feed-live-smoke.json +17 -0
  53. fixplesk-0.6.1/docs/guard/schemas/hash-indicator.schema.json +37 -0
  54. fixplesk-0.6.1/docs/guard/schemas/permission-plan.schema.json +234 -0
  55. fixplesk-0.6.1/docs/guard/schemas/policy.schema.json +79 -0
  56. fixplesk-0.6.1/docs/guard/schemas/scan-limits.schema.json +48 -0
  57. fixplesk-0.6.1/docs/guard/schemas/script.schema.json +61 -0
  58. fixplesk-0.6.1/docs/guard/schemas/wp-data.schema.json +133 -0
  59. fixplesk-0.6.1/docs/history/README_0.4.0.md +327 -0
  60. fixplesk-0.6.1/docs/information/llm-dsl-prompt-pattern.md +116 -0
  61. fixplesk-0.6.1/docs/schemas/backup.schema.json +78 -0
  62. fixplesk-0.6.1/docs/schemas/capability.schema.json +44 -0
  63. fixplesk-0.6.1/docs/schemas/config.schema.json +652 -0
  64. fixplesk-0.6.1/docs/schemas/docroot.schema.json +287 -0
  65. fixplesk-0.6.1/docs/schemas/evidence.schema.json +107 -0
  66. fixplesk-0.6.1/docs/schemas/execution.schema.json +147 -0
  67. fixplesk-0.6.1/docs/schemas/plan.schema.json +348 -0
  68. fixplesk-0.6.1/docs/schemas/report.schema.json +591 -0
  69. fixplesk-0.6.1/docs/schemas/rules.schema.json +300 -0
  70. fixplesk-0.6.1/docs/schemas/runbooks.schema.json +250 -0
  71. fixplesk-0.6.1/docs/schemas/snapshot.schema.json +186 -0
  72. fixplesk-0.6.1/docs/security-research/REPORT_PL.md +100 -0
  73. fixplesk-0.6.1/docs/security-research/REUSE.json +211 -0
  74. fixplesk-0.6.1/docs/security-research/REUSE.md +26 -0
  75. fixplesk-0.6.1/docs/security-research/RUNBOOKS.md +762 -0
  76. fixplesk-0.6.1/docs/security-research/SOURCES.md +219 -0
  77. fixplesk-0.6.1/docs/security-research/TESTING_0.4.0.md +64 -0
  78. fixplesk-0.6.1/docs/security-research/previous-design/AUDYT_0.3.0.md +27 -0
  79. fixplesk-0.6.1/docs/security-research/previous-design/README.md +7 -0
  80. fixplesk-0.6.1/docs/specification/01-architecture-original.md +195 -0
  81. fixplesk-0.6.1/docs/specification/02-assistant-original.md +196 -0
  82. fixplesk-0.6.1/docs/specification/03-sources-original.md +56 -0
  83. fixplesk-0.6.1/docs/validation/build-first-pass-0.5.0.txt +593 -0
  84. fixplesk-0.6.1/docs/validation/coverage.json +1 -0
  85. fixplesk-0.6.1/docs/validation/coverage.txt +55 -0
  86. fixplesk-0.6.1/docs/validation/coverage.xml +6221 -0
  87. fixplesk-0.6.1/docs/validation/junit-core.xml +1 -0
  88. fixplesk-0.6.1/docs/validation/junit-guard.xml +1 -0
  89. fixplesk-0.6.1/docs/validation/junit-offline.xml +1 -0
  90. fixplesk-0.6.1/docs/validation/junit-transport.xml +1 -0
  91. fixplesk-0.6.1/docs/validation/junit-twin.xml +1 -0
  92. fixplesk-0.6.1/docs/validation/pytest-core.txt +19 -0
  93. fixplesk-0.6.1/docs/validation/pytest-guard.txt +23 -0
  94. fixplesk-0.6.1/docs/validation/pytest-offline.txt +27 -0
  95. fixplesk-0.6.1/docs/validation/pytest-transport.txt +12 -0
  96. fixplesk-0.6.1/docs/validation/pytest-twin.txt +11 -0
  97. fixplesk-0.6.1/docs/validation/pytest.xml +2 -0
  98. fixplesk-0.6.1/docs/validation/static-checks.json +32 -0
  99. fixplesk-0.6.1/docs/validation/summary.json +30 -0
  100. fixplesk-0.6.1/docs/validation/wheel-smoke.json +117 -0
  101. fixplesk-0.6.1/docs/validation-v0.2.0/coverage.json +1 -0
  102. fixplesk-0.6.1/docs/validation-v0.2.0/pytest-output.txt +49 -0
  103. fixplesk-0.6.1/docs/validation-v0.2.0/pytest.xml +1 -0
  104. fixplesk-0.6.1/docs/validation-v0.2.0/static-checks.json +85 -0
  105. fixplesk-0.6.1/docs/validation-v0.2.0/summary.json +187 -0
  106. fixplesk-0.6.1/docs/validation-v0.2.0/twin-execution-examples.json +856 -0
  107. fixplesk-0.6.1/docs/validation-v0.2.0/wheel-smoke.json +135 -0
  108. fixplesk-0.6.1/docs/validation-v0.4.0/build-first-pass.txt +401 -0
  109. fixplesk-0.6.1/docs/validation-v0.4.0/coverage.json +1 -0
  110. fixplesk-0.6.1/docs/validation-v0.4.0/pytest.txt +57 -0
  111. fixplesk-0.6.1/docs/validation-v0.4.0/pytest.xml +1 -0
  112. fixplesk-0.6.1/docs/validation-v0.4.0/static-checks.json +51 -0
  113. fixplesk-0.6.1/docs/validation-v0.4.0/wheel-smoke.json +120 -0
  114. fixplesk-0.6.1/docs/validation-v0.6.0/coverage.json +1 -0
  115. fixplesk-0.6.1/docs/validation-v0.6.0/junit.xml +1 -0
  116. fixplesk-0.6.1/docs/validation-v0.6.0/migration-check.json +27 -0
  117. fixplesk-0.6.1/docs/validation-v0.6.0/pytest.txt +86 -0
  118. fixplesk-0.6.1/docs/validation-v0.6.0/rules.json +4 -0
  119. fixplesk-0.6.1/docs/validation-v0.6.0/runbooks.json +6 -0
  120. fixplesk-0.6.1/docs/validation-v0.6.0/source-changes.txt +754 -0
  121. fixplesk-0.6.1/docs/validation-v0.6.0/summary.json +21 -0
  122. fixplesk-0.6.1/docs/validation-v0.6.0/wheel-install.txt +4 -0
  123. fixplesk-0.6.1/docs/validation-v0.6.0/wheel-smoke.json +14 -0
  124. fixplesk-0.6.1/examples/config.toml +79 -0
  125. fixplesk-0.6.1/examples/correlation-graph.dot +61 -0
  126. fixplesk-0.6.1/examples/custom-rules.yml +24 -0
  127. fixplesk-0.6.1/examples/deepseek/config.toml +44 -0
  128. fixplesk-0.6.1/examples/deepseek/llm-section.toml +26 -0
  129. fixplesk-0.6.1/examples/deepseek/preview.json +60 -0
  130. fixplesk-0.6.1/examples/deepseek/provider-info.json +25 -0
  131. fixplesk-0.6.1/examples/deepseek/snapshot.json +20 -0
  132. fixplesk-0.6.1/examples/diagnostic-plan.json +487 -0
  133. fixplesk-0.6.1/examples/guard/README.md +7 -0
  134. fixplesk-0.6.1/examples/guard/breach-fixture-results.json +28 -0
  135. fixplesk-0.6.1/examples/guard/checks.json +13 -0
  136. fixplesk-0.6.1/examples/guard/components.json +11 -0
  137. fixplesk-0.6.1/examples/guard/failure-scenarios.json +245 -0
  138. fixplesk-0.6.1/examples/guard/files-after.json +223 -0
  139. fixplesk-0.6.1/examples/guard/files-before.json +245 -0
  140. fixplesk-0.6.1/examples/guard/files-diff.json +27 -0
  141. fixplesk-0.6.1/examples/guard/indicators.csv +2 -0
  142. fixplesk-0.6.1/examples/guard/permission-dry-run.json +67 -0
  143. fixplesk-0.6.1/examples/guard/permission-plan.json +41 -0
  144. fixplesk-0.6.1/examples/guard/permission-result.json +71 -0
  145. fixplesk-0.6.1/examples/guard/reviewable-session/results/read-dd287e89458b18a946e0-dfa44a5b277f4f0dad5d201a461e8ad8.json +19 -0
  146. fixplesk-0.6.1/examples/guard/reviewable-session/rollbacks/read-dd287e89458b18a946e0.py +2 -0
  147. fixplesk-0.6.1/examples/guard/reviewable-session/scripts/read-dd287e89458b18a946e0.py +43 -0
  148. fixplesk-0.6.1/examples/guard/reviewable-session/session.json +38 -0
  149. fixplesk-0.6.1/examples/guard/script-execution.json +19 -0
  150. fixplesk-0.6.1/examples/guard/script-spec.json +9 -0
  151. fixplesk-0.6.1/examples/guard/staged-script.json +20 -0
  152. fixplesk-0.6.1/examples/guard/summary.json +34 -0
  153. fixplesk-0.6.1/examples/guard/vulnerability-fixture-result.json +101 -0
  154. fixplesk-0.6.1/examples/guard/wp-data-findings.json +32 -0
  155. fixplesk-0.6.1/examples/guard/wp-export.json +24 -0
  156. fixplesk-0.6.1/examples/offline/advisory-plan.json +204 -0
  157. fixplesk-0.6.1/examples/offline/docroot-input.json +46 -0
  158. fixplesk-0.6.1/examples/offline/docroot-proposal.json +145 -0
  159. fixplesk-0.6.1/examples/offline/docroot-proposal.md +89 -0
  160. fixplesk-0.6.1/examples/offline/docroot-twin-scenarios.json +301 -0
  161. fixplesk-0.6.1/examples/offline/evidence.json +80 -0
  162. fixplesk-0.6.1/examples/offline/help-capture.json +7 -0
  163. fixplesk-0.6.1/examples/offline/metrics.json +21 -0
  164. fixplesk-0.6.1/examples/offline/report.html +202 -0
  165. fixplesk-0.6.1/examples/offline/snapshot.json +21 -0
  166. fixplesk-0.6.1/examples/offline/triage-no-evidence.json +581 -0
  167. fixplesk-0.6.1/examples/offline/triage-no-evidence.md +174 -0
  168. fixplesk-0.6.1/examples/offline/triage-with-evidence.json +507 -0
  169. fixplesk-0.6.1/examples/offline/triage-with-evidence.md +138 -0
  170. fixplesk-0.6.1/examples/offline-README.md +21 -0
  171. fixplesk-0.6.1/examples/report.html +59 -0
  172. fixplesk-0.6.1/examples/report.json +989 -0
  173. fixplesk-0.6.1/examples/report.md +77 -0
  174. fixplesk-0.6.1/examples/safe-run/config.toml +20 -0
  175. fixplesk-0.6.1/examples/safe-run/dry-run.json +146 -0
  176. fixplesk-0.6.1/examples/safe-run/dry-run.md +49 -0
  177. fixplesk-0.6.1/examples/safe-run/llm-preview.json +62 -0
  178. fixplesk-0.6.1/examples/safe-run/plan.json +101 -0
  179. fixplesk-0.6.1/examples/safe-run/snapshot-synthetic.json +40 -0
  180. fixplesk-0.6.1/examples/safe-run-README.md +17 -0
  181. fixplesk-0.6.1/examples/security/README.md +20 -0
  182. fixplesk-0.6.1/examples/security/bundle.schema.json +500 -0
  183. fixplesk-0.6.1/examples/security/import-context.schema.json +61 -0
  184. fixplesk-0.6.1/examples/security/report.json +292 -0
  185. fixplesk-0.6.1/examples/security/report.md +178 -0
  186. fixplesk-0.6.1/examples/security/safe-summary.json +22 -0
  187. fixplesk-0.6.1/examples/security/selected-mail-plan.json +72 -0
  188. fixplesk-0.6.1/examples/security/synthetic-bundle.json +175 -0
  189. fixplesk-0.6.1/examples/security/synthetic-grype.json +27 -0
  190. fixplesk-0.6.1/examples/security/synthetic-import-context.json +9 -0
  191. fixplesk-0.6.1/examples/security/synthetic-queue.ndjson +1 -0
  192. fixplesk-0.6.1/examples/snapshot.json +129 -0
  193. fixplesk-0.6.1/examples/zai/config.toml +44 -0
  194. fixplesk-0.6.1/examples/zai/llm-section.toml +26 -0
  195. fixplesk-0.6.1/examples/zai/preview.json +60 -0
  196. fixplesk-0.6.1/examples/zai/snapshot.json +20 -0
  197. fixplesk-0.6.1/history/0.4.0/SHA256SUMS-original.txt +12 -0
  198. fixplesk-0.6.1/history/0.5.0/README.md +1 -0
  199. fixplesk-0.6.1/history/README.md +8 -0
  200. fixplesk-0.6.1/integrations/plesk/CHANGES.md +3 -0
  201. fixplesk-0.6.1/integrations/plesk/DESCRIPTION.md +14 -0
  202. fixplesk-0.6.1/integrations/plesk/LICENSE +25 -0
  203. fixplesk-0.6.1/integrations/plesk/htdocs/index.php +3 -0
  204. fixplesk-0.6.1/integrations/plesk/meta.xml +13 -0
  205. fixplesk-0.6.1/integrations/plesk/plib/controllers/IndexController.php +71 -0
  206. fixplesk-0.6.1/integrations/plesk/plib/views/scripts/index/index.phtml +27 -0
  207. fixplesk-0.6.1/integrations/plesk/var/reports/README.txt +4 -0
  208. fixplesk-0.6.1/integrations/systemd/README.md +7 -0
  209. fixplesk-0.6.1/integrations/systemd/fixplesk-feed-refresh.service +24 -0
  210. fixplesk-0.6.1/integrations/systemd/fixplesk-feed-refresh.timer +12 -0
  211. fixplesk-0.6.1/integrations/wordpress/fixplesk-agent/LICENSE +338 -0
  212. fixplesk-0.6.1/integrations/wordpress/fixplesk-agent/README.md +19 -0
  213. fixplesk-0.6.1/integrations/wordpress/fixplesk-agent/fixplesk-agent.php +102 -0
  214. fixplesk-0.6.1/lab/__init__.py +1 -0
  215. fixplesk-0.6.1/lab/client.py +31 -0
  216. fixplesk-0.6.1/lab/docroot_twin.py +125 -0
  217. fixplesk-0.6.1/lab/twin_server.py +214 -0
  218. fixplesk-0.6.1/lab/wordpress/bootstrap.sh +40 -0
  219. fixplesk-0.6.1/lab/wordpress/http_probe.py +15 -0
  220. fixplesk-0.6.1/pyproject.toml +76 -0
  221. fixplesk-0.6.1/scripts/benchmark_llm.py +260 -0
  222. fixplesk-0.6.1/scripts/build_release.py +47 -0
  223. fixplesk-0.6.1/scripts/demo_guard.py +154 -0
  224. fixplesk-0.6.1/scripts/demo_llm_twin.py +102 -0
  225. fixplesk-0.6.1/scripts/demo_twin.sh +9 -0
  226. fixplesk-0.6.1/scripts/generate_reference.py +64 -0
  227. fixplesk-0.6.1/scripts/generate_runbook_reference.py +37 -0
  228. fixplesk-0.6.1/scripts/llm_providers.py +93 -0
  229. fixplesk-0.6.1/scripts/make_data.py +151 -0
  230. fixplesk-0.6.1/scripts/make_offline_examples.py +96 -0
  231. fixplesk-0.6.1/scripts/make_safe_example.py +75 -0
  232. fixplesk-0.6.1/scripts/make_security_examples.py +47 -0
  233. fixplesk-0.6.1/scripts/run_twin_showcase.py +74 -0
  234. fixplesk-0.6.1/scripts/test_guard_docker.sh +6 -0
  235. fixplesk-0.6.1/scripts/test_offline_docker.sh +9 -0
  236. fixplesk-0.6.1/scripts/test_security_docker.sh +9 -0
  237. fixplesk-0.6.1/scripts/test_twin_docker.sh +13 -0
  238. fixplesk-0.6.1/scripts/test_wordpress_docker.sh +19 -0
  239. fixplesk-0.6.1/scripts/verify_uri_twin.mjs +14 -0
  240. fixplesk-0.6.1/scripts/verify_uri_twin.sh +16 -0
  241. fixplesk-0.6.1/scripts/write_validation_summary.py +115 -0
  242. fixplesk-0.6.1/setup.cfg +4 -0
  243. fixplesk-0.6.1/src/fixplesk/__init__.py +5 -0
  244. fixplesk-0.6.1/src/fixplesk/__main__.py +3 -0
  245. fixplesk-0.6.1/src/fixplesk/assurance/__init__.py +1 -0
  246. fixplesk-0.6.1/src/fixplesk/assurance/breaches.py +149 -0
  247. fixplesk-0.6.1/src/fixplesk/assurance/cli.py +293 -0
  248. fixplesk-0.6.1/src/fixplesk/assurance/common.py +212 -0
  249. fixplesk-0.6.1/src/fixplesk/assurance/feeds.py +328 -0
  250. fixplesk-0.6.1/src/fixplesk/assurance/filesystem.py +233 -0
  251. fixplesk-0.6.1/src/fixplesk/assurance/indicators.py +55 -0
  252. fixplesk-0.6.1/src/fixplesk/assurance/observe.py +190 -0
  253. fixplesk-0.6.1/src/fixplesk/assurance/permissions.py +307 -0
  254. fixplesk-0.6.1/src/fixplesk/assurance/runtime.py +238 -0
  255. fixplesk-0.6.1/src/fixplesk/assurance/wpdata.py +73 -0
  256. fixplesk-0.6.1/src/fixplesk/backup.py +72 -0
  257. fixplesk-0.6.1/src/fixplesk/cli.py +547 -0
  258. fixplesk-0.6.1/src/fixplesk/collector.py +143 -0
  259. fixplesk-0.6.1/src/fixplesk/config.py +351 -0
  260. fixplesk-0.6.1/src/fixplesk/data/demo.json +50 -0
  261. fixplesk-0.6.1/src/fixplesk/data/rules.yml +543 -0
  262. fixplesk-0.6.1/src/fixplesk/data/runbooks.yml +1751 -0
  263. fixplesk-0.6.1/src/fixplesk/data/security_catalog.json +1409 -0
  264. fixplesk-0.6.1/src/fixplesk/data/sources.yml +301 -0
  265. fixplesk-0.6.1/src/fixplesk/deepseek.py +103 -0
  266. fixplesk-0.6.1/src/fixplesk/diagnostics.py +22 -0
  267. fixplesk-0.6.1/src/fixplesk/docroot.py +286 -0
  268. fixplesk-0.6.1/src/fixplesk/dsl.py +269 -0
  269. fixplesk-0.6.1/src/fixplesk/errors.py +28 -0
  270. fixplesk-0.6.1/src/fixplesk/executor.py +342 -0
  271. fixplesk-0.6.1/src/fixplesk/explain.py +134 -0
  272. fixplesk-0.6.1/src/fixplesk/graph.py +58 -0
  273. fixplesk-0.6.1/src/fixplesk/llm.py +194 -0
  274. fixplesk-0.6.1/src/fixplesk/local_analysis.py +135 -0
  275. fixplesk-0.6.1/src/fixplesk/models.py +212 -0
  276. fixplesk-0.6.1/src/fixplesk/normalizer.py +111 -0
  277. fixplesk-0.6.1/src/fixplesk/offline.py +263 -0
  278. fixplesk-0.6.1/src/fixplesk/operations.py +56 -0
  279. fixplesk-0.6.1/src/fixplesk/plugins.py +20 -0
  280. fixplesk-0.6.1/src/fixplesk/privacy.py +212 -0
  281. fixplesk-0.6.1/src/fixplesk/providers/__init__.py +0 -0
  282. fixplesk-0.6.1/src/fixplesk/providers/files.py +114 -0
  283. fixplesk-0.6.1/src/fixplesk/providers/plesk.py +220 -0
  284. fixplesk-0.6.1/src/fixplesk/providers/wordpress.py +134 -0
  285. fixplesk-0.6.1/src/fixplesk/py.typed +0 -0
  286. fixplesk-0.6.1/src/fixplesk/recovery.py +82 -0
  287. fixplesk-0.6.1/src/fixplesk/reports.py +95 -0
  288. fixplesk-0.6.1/src/fixplesk/secops/__init__.py +5 -0
  289. fixplesk-0.6.1/src/fixplesk/secops/cli.py +85 -0
  290. fixplesk-0.6.1/src/fixplesk/secops/demo.py +33 -0
  291. fixplesk-0.6.1/src/fixplesk/secops/engine.py +266 -0
  292. fixplesk-0.6.1/src/fixplesk/secops/importers.py +183 -0
  293. fixplesk-0.6.1/src/fixplesk/secops/models.py +181 -0
  294. fixplesk-0.6.1/src/fixplesk/security.py +180 -0
  295. fixplesk-0.6.1/src/fixplesk/sources.py +169 -0
  296. fixplesk-0.6.1/src/fixplesk/store.py +192 -0
  297. fixplesk-0.6.1/src/fixplesk/tools.py +307 -0
  298. fixplesk-0.6.1/src/fixplesk/transport.py +203 -0
  299. fixplesk-0.6.1/src/fixplesk/twin.py +76 -0
  300. fixplesk-0.6.1/src/fixplesk/workflow.py +77 -0
  301. fixplesk-0.6.1/src/fixplesk/zai.py +104 -0
  302. fixplesk-0.6.1/src/fixplesk.egg-info/PKG-INFO +321 -0
  303. fixplesk-0.6.1/src/fixplesk.egg-info/SOURCES.txt +335 -0
  304. fixplesk-0.6.1/src/fixplesk.egg-info/dependency_links.txt +1 -0
  305. fixplesk-0.6.1/src/fixplesk.egg-info/entry_points.txt +2 -0
  306. fixplesk-0.6.1/src/fixplesk.egg-info/requires.txt +30 -0
  307. fixplesk-0.6.1/src/fixplesk.egg-info/top_level.txt +1 -0
  308. fixplesk-0.6.1/tests/assurance/test_cli_wpdata.py +113 -0
  309. fixplesk-0.6.1/tests/assurance/test_feeds_breaches.py +175 -0
  310. fixplesk-0.6.1/tests/assurance/test_files.py +120 -0
  311. fixplesk-0.6.1/tests/assurance/test_runtime_permissions.py +326 -0
  312. fixplesk-0.6.1/tests/conftest.py +96 -0
  313. fixplesk-0.6.1/tests/e2e/test_real_wordpress.py +109 -0
  314. fixplesk-0.6.1/tests/offline/__init__.py +0 -0
  315. fixplesk-0.6.1/tests/offline/conftest.py +38 -0
  316. fixplesk-0.6.1/tests/offline/test_backends.py +122 -0
  317. fixplesk-0.6.1/tests/offline/test_cli_offline.py +100 -0
  318. fixplesk-0.6.1/tests/offline/test_docroot.py +182 -0
  319. fixplesk-0.6.1/tests/offline/test_docroot_twin.py +74 -0
  320. fixplesk-0.6.1/tests/offline/test_evidence.py +137 -0
  321. fixplesk-0.6.1/tests/secops/test_security_engine.py +331 -0
  322. fixplesk-0.6.1/tests/test_cli_reports.py +74 -0
  323. fixplesk-0.6.1/tests/test_deepseek.py +370 -0
  324. fixplesk-0.6.1/tests/test_dsl.py +97 -0
  325. fixplesk-0.6.1/tests/test_executor.py +167 -0
  326. fixplesk-0.6.1/tests/test_llm_providers.py +90 -0
  327. fixplesk-0.6.1/tests/test_models_security.py +140 -0
  328. fixplesk-0.6.1/tests/test_more_integration_contracts.py +131 -0
  329. fixplesk-0.6.1/tests/test_new_contracts.py +247 -0
  330. fixplesk-0.6.1/tests/test_normalizer_files.py +145 -0
  331. fixplesk-0.6.1/tests/test_php_integrations.py +79 -0
  332. fixplesk-0.6.1/tests/test_privacy_boundary.py +180 -0
  333. fixplesk-0.6.1/tests/test_providers_llm_sources.py +146 -0
  334. fixplesk-0.6.1/tests/test_store_transport.py +108 -0
  335. fixplesk-0.6.1/tests/test_zai.py +230 -0
  336. fixplesk-0.6.1/tests/twin/conftest.py +66 -0
  337. fixplesk-0.6.1/tests/twin/test_scenarios.py +242 -0
@@ -0,0 +1,17 @@
1
+ .git
2
+ .venv
3
+ __pycache__
4
+ *.pyc
5
+ .pytest_cache
6
+ .coverage
7
+ htmlcov
8
+ build
9
+ *.egg-info
10
+ dist
11
+ test-results
12
+
13
+ .env
14
+ .env.*
15
+ secrets
16
+ private
17
+ *-live.json
@@ -0,0 +1,38 @@
1
+ name: isolated-digital-twin
2
+ on: [push, pull_request, workflow_dispatch]
3
+ permissions:
4
+ contents: read
5
+ jobs:
6
+ synthetic-twin:
7
+ runs-on: ubuntu-latest
8
+ timeout-minutes: 20
9
+ steps:
10
+ - uses: actions/checkout@v4
11
+ - run: bash scripts/test_twin_docker.sh
12
+ - uses: actions/upload-artifact@v4
13
+ if: always()
14
+ with:
15
+ name: synthetic-twin-results
16
+ path: test-results/
17
+ real-wordpress:
18
+ runs-on: ubuntu-latest
19
+ timeout-minutes: 25
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - run: bash scripts/test_wordpress_docker.sh
23
+ - uses: actions/upload-artifact@v4
24
+ if: always()
25
+ with:
26
+ name: wordpress-results
27
+ path: test-results/
28
+ twin-demo:
29
+ runs-on: ubuntu-latest
30
+ timeout-minutes: 15
31
+ steps:
32
+ - uses: actions/checkout@v4
33
+ - run: bash scripts/demo_twin.sh
34
+ - uses: actions/upload-artifact@v4
35
+ if: always()
36
+ with:
37
+ name: twin-demo-log
38
+ path: test-results/
@@ -0,0 +1,16 @@
1
+ name: offline decision and docroot twin
2
+ on: [push, pull_request, workflow_dispatch]
3
+ permissions:
4
+ contents: read
5
+ jobs:
6
+ offline-docker:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v4
10
+ - name: Build with dependencies, then test without a network
11
+ run: bash scripts/test_offline_docker.sh
12
+ - uses: actions/upload-artifact@v4
13
+ if: always()
14
+ with:
15
+ name: offline-docker-log
16
+ path: test-results/offline-docker.txt
@@ -0,0 +1,25 @@
1
+ name: tests
2
+ on: [push, pull_request]
3
+ permissions:
4
+ contents: read
5
+ jobs:
6
+ python:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ python: ['3.11', '3.12', '3.13']
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: actions/setup-python@v5
14
+ with:
15
+ python-version: '${{ matrix.python }}'
16
+ - run: python -m pip install -e '.[dev]'
17
+ - run: python -m ruff check .
18
+ - run: python -m compileall -q src tests
19
+ - run: pytest --cov=fixplesk --cov-report=term-missing
20
+ - run: python scripts/build_release.py
21
+ php:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - run: find integrations -type f \( -name '*.php' -o -name '*.phtml' \) -print0 | xargs -0 -n1 php -l
@@ -0,0 +1,100 @@
1
+ # 0.6.0 — 2026-09-16
2
+
3
+ ## [Unreleased]
4
+
5
+ ## [0.6.1] - 2026-09-17
6
+
7
+ ### Docs
8
+ - Update README.md
9
+
10
+ ### Test
11
+ - Update tests/assurance/test_cli_wpdata.py
12
+ - Update tests/assurance/test_feeds_breaches.py
13
+ - Update tests/assurance/test_files.py
14
+ - Update tests/assurance/test_runtime_permissions.py
15
+ - Update tests/conftest.py
16
+ - Update tests/offline/test_backends.py
17
+ - Update tests/offline/test_cli_offline.py
18
+ - Update tests/offline/test_docroot.py
19
+ - Update tests/offline/test_evidence.py
20
+ - Update tests/secops/test_security_engine.py
21
+ - ... and 10 more files
22
+
23
+ ### Other
24
+ - Update lab/client.py
25
+ - Update scripts/benchmark_llm.py
26
+ - Update scripts/demo_guard.py
27
+ - Update scripts/generate_reference.py
28
+ - Update scripts/generate_runbook_reference.py
29
+ - Update scripts/llm_providers.py
30
+ - Update scripts/make_data.py
31
+ - Update scripts/make_offline_examples.py
32
+ - Update scripts/make_security_examples.py
33
+
34
+
35
+ - Natywne DeepSeek Chat Completions: V4.1 Flash i V4 Pro, osobny klucz i stały endpoint.
36
+ - Kontrola thinking/effort, większy ograniczony budżet tokenów, JSON i odrzucanie częściowych wyników.
37
+ - Strict obowiązkowy w DeepSeek, jawna akceptacja braku wymuszenia ZDR po stronie adaptera.
38
+ - Bez zapisu reasoning_content, surowych błędów API i automatycznego fallbacku między operatorami.
39
+ - `llm-info`, metadane dostawcy w `llm-preview`/`doctor` oraz nowe przykłady i testy.
40
+ - Zachowano moduły 0.5.0, nie dodano autonomicznych napraw ani Z.ai direct.
41
+
42
+ # 0.5.0 — evidence cache, local assurance and transparent scripts
43
+
44
+ - Retains prior Python modules, integrations, labs and command groups. Archives the 0.4.0 README, validation and distributions in the full project ZIP.
45
+ - Adds `guard`: scoped no-follow file scanning, content-free anomaly signals, differences, official core checksum comparison and exact SHA-256 indicator CSV/JSON import.
46
+ - Adds explicit data sync/import/status for CISA KEV, EPSS, Wordfence v3 and WordPress core checksums; bounded immutable snapshots with metadata and freshness. SHA-256 is not a publisher signature.
47
+ - Adds constrained Wordfence numeric version-range matching, unknown/conflict handling and exact CVE KEV/EPSS enrichment; no generic package-version or full vulnerability oracle.
48
+ - Adds opt-in HIBP email k-anonymity and separately a prompted-password range/local-corpus check; never verifies account-password association, cracks password hashes or stores plaintext credentials.
49
+ - Adds selected offline WP data export checks without executing SQL/PHP or storing raw matched content.
50
+ - Adds private `/tmp` script sessions, closed read-only DSL, review/approval by digest, sealed memfd execution, permanent artifacts and journal. This is not an arbitrary-code sandbox or automatic new LLM integration.
51
+ - Adds approved single-file restrictive fchmod, no ACL/hardlink/symlink, pre/post HTTP/service/log observation, conflict checks, optional restoration and recovery quarantine. No blanket recursive chmod, malware deletion or host upgrades.
52
+ - New tests exercise filesystem operations, generated scripts, rollback and actual SIGKILL interruptions. Live Plesk/paid API/Docker validation remains separate.
53
+
54
+ # Zmiany 0.4.0 — 2026-09-15
55
+
56
+ - Dodano odrębny moduł `secops`: 23 procedury offline, 20 narzędzi reuse, 36 źródeł.
57
+ - Dodano import wybranych pól zapisanych raportów Grype/Trivy oraz agregację Postfix JSON.
58
+ - Zachowano konflikty, niewiadome, granice tenant/host i TTL; brak automatycznego potwierdzania źródeł.
59
+ - Dodano wybór problemów do dokumentu doradczego i minimalny eksport agregatów.
60
+ - Nie dodano synchronizatora CVE, nowych napraw live ani nowych zależności runtime.
61
+ - Dodano testy secops i profil Docker bez sieci w runtime; profil nieuruchomiony tutaj.
62
+ - Zachowano wcześniejsze funkcje i dodatki PHP 0.3.0 bez rozbudowy ich bezpieczeństwa.
63
+
64
+ ## Historia wcześniejszych wydań
65
+
66
+ # Historia zmian
67
+
68
+ ## 0.3.0 — 2026-09-15
69
+
70
+ Lokalny, wyjaśnialny silnik 22 procedur / 52 hipotez / 61 kontroli. Fakty ze ścisłymi
71
+ wartościami bool, TTL, kontrolą tenant/subskrypcji i stanami UNKNOWN/STALE/CONFLICT.
72
+ Nowe triage, eksport samego advice, raporty JSON/Markdown/HTML i diagnose --offline.
73
+ Propozycja docroot z analizą zapisanej pomocy site/subdomain, -www-root względnym
74
+ do subskrypcji, blokadą niejednoznacznych ścieżek i ręczną kompensacją parametru.
75
+ Bez automatycznego apply docroot. 6 nowych sygnatur, 4 nowe reguły, 10 źródeł.
76
+ Opcjonalne graphlib/NetworkX, lokalne TF-IDF/scikit-learn, opisowy MAD i prosty
77
+ adapter Z3 (runtime tutaj nietestowany). Model protokołu i stanowy twin docroot
78
+ w pamięci, profil Docker bez sieci podczas testów, dodatkowe schematy i przykłady.
79
+ Zachowane prywatność LLM, trwały Executor/Store i jego granice kompensacji.
80
+
81
+ ## 0.2.0 — 2026-09-15
82
+
83
+ Nowa nazwa dystrybucji/modułu/CLI **fixplesk** (wcześniej pleskme).
84
+ Obowiązkowa granica prywatności LLM z strict allowlist, HMAC, leak guard i
85
+ preferencjami ZDR; jawny preview. Awaria LLM zachowuje lokalną diagnozę.
86
+ Wyjaśnienia dry-run, osobny live preflight, pre/postconditions i inventory binding.
87
+ Trwały journal przed dispatch; brak retry mutacji; kwarantanna domen/celu klonu
88
+ oraz operacji współdzielonych, kill switch, jawne uzgodnienie po awarii.
89
+ Kompensacje stanów plugin/maintenance z kontrolą wersji i ponownym odczytem.
90
+ Weryfikacja lokalnego artefaktu backupu; brak ogólnego automatycznego restore.
91
+ Trzy nowe read tools, 52 wpisy rejestru (49 adapterów, 3 unavailable).
92
+ Stanowy HTTP twin, 2 profile Docker, testy utraty odpowiedzi/rollbacku/izolacji
93
+ oraz read-only adapter URI-twin. Dokumentacja granic i migracji.
94
+
95
+ ## 0.1.0 — 2026-09-15 (pleskme)
96
+
97
+ Pierwszy rdzeń: 9 kolektorów, transporty lokalne/SSH/HTTPS, normalizacja,
98
+ 28 reguł, 49 pozycji rejestru (46 adapterów, 3 unavailable), 25 źródeł, LLM,
99
+ raporty, audyt oraz dodatki PHP. Nie miał automatycznej kompensacji ani
100
+ weryfikacji bajtów backupu. Wyniki tego wydania nie są wynikami0.2.0.
fixplesk-0.6.1/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 fixplesk contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ The WordPress agent in integrations/wordpress/fixplesk-agent is separately
24
+ licensed under GPL-2.0-or-later; see its header and LICENSE. The original user
25
+ specifications and linked third-party documentation retain their own rights.
@@ -0,0 +1,12 @@
1
+ include README.md LICENSE CHANGELOG.md .dockerignore
2
+ recursive-include docs *.md *.json *.xml *.txt *.yml
3
+ recursive-include examples *.json *.ndjson *.toml *.yml *.log *.md *.html *.dot *.csv *.txt *.py
4
+ recursive-include integrations *.php *.phtml *.xml *.md *.txt *.service *.timer LICENSE
5
+ recursive-include scripts *.py *.sh *.mjs
6
+ recursive-include tests *.py
7
+ recursive-include lab *.py *.sh *.php
8
+ recursive-include docker *.yml Dockerfile.*
9
+ recursive-include .github/workflows *.yml
10
+ prune **/__pycache__
11
+ global-exclude *.pyc
12
+ recursive-include history *.md *.txt
@@ -0,0 +1,321 @@
1
+ Metadata-Version: 2.4
2
+ Name: fixplesk
3
+ Version: 0.6.1
4
+ Summary: Tenant-scoped Plesk and WordPress diagnostics, declarative playbooks, and guarded remediation
5
+ Author: fixplesk contributors
6
+ Author-email: Tom Sapletta <tom@sapletta.com>
7
+ License-Expression: Apache-2.0
8
+ Keywords: plesk,wordpress,diagnostics,wp-cli,openrouter,litellm,deepseek
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Operating System :: POSIX :: Linux
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Topic :: System :: Systems Administration
17
+ Requires-Python: >=3.11
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Requires-Dist: pydantic<3,>=2.7
21
+ Requires-Dist: httpx<1,>=0.27
22
+ Requires-Dist: PyYAML<7,>=6.0.1
23
+ Requires-Dist: packaging<27,>=24
24
+ Requires-Dist: defusedxml<1,>=0.7.1
25
+ Provides-Extra: llm
26
+ Requires-Dist: litellm<2,>=1.70; extra == "llm"
27
+ Provides-Extra: graphs
28
+ Requires-Dist: networkx<4,>=3.2; extra == "graphs"
29
+ Provides-Extra: analysis
30
+ Requires-Dist: scikit-learn<2,>=1.4; extra == "analysis"
31
+ Provides-Extra: solver
32
+ Requires-Dist: z3-solver<5,>=4.13; extra == "solver"
33
+ Provides-Extra: dev
34
+ Requires-Dist: pytest<10,>=8; extra == "dev"
35
+ Requires-Dist: pytest-cov<8,>=5; extra == "dev"
36
+ Requires-Dist: build<2,>=1.2; extra == "dev"
37
+ Requires-Dist: ruff<1,>=0.11; extra == "dev"
38
+ Requires-Dist: setuptools>=77; extra == "dev"
39
+ Requires-Dist: goal>=2.1.0; python_version >= "3.12" and extra == "dev"
40
+ Requires-Dist: costs>=0.1.53; python_version >= "3.9" and extra == "dev"
41
+ Dynamic: license-file
42
+
43
+ <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-146: feat(dashboard): add --web flag and SSE live log streaming (ticket-146)</title><rect width="128" height="128" rx="12" fill="#f8fafc"/><g stroke-width="1"><polygon points="64,55 72,61 69,71 59,71 56,61" fill="none" stroke="#d7dde5"/><polygon points="64,47 80,59 74,78 54,78 48,59" fill="none" stroke="#d7dde5"/><polygon points="64,38 89,56 79,85 49,85 39,56" fill="none" stroke="#d7dde5"/><polygon points="64,30 97,53 84,92 44,92 31,53" fill="none" stroke="#d7dde5"/><polygon points="64,21 105,51 89,99 39,99 23,51" fill="none" stroke="#d7dde5"/><line x1="64" y1="64" x2="64" y2="21" stroke="#aab4c0"/><line x1="64" y1="64" x2="105" y2="51" stroke="#aab4c0"/><line x1="64" y1="64" x2="89" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="39" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="23" y2="51" stroke="#aab4c0"/></g><polygon points="64,21 105,51 79,85 54,78 39,56" fill="#fb923c" fill-opacity="0.45" stroke="#c2410c" stroke-width="2"/><circle cx="64" cy="64" r="3" fill="#c2410c"/><g font-family="sans-serif" font-size="7" fill="#334155"><text x="64" y="11" text-anchor="middle">SCO</text><text x="114" y="48" text-anchor="middle">COU</text><text x="95" y="107" text-anchor="middle">UNC</text><text x="33" y="107" text-anchor="middle">VAL</text><text x="14" y="48" text-anchor="middle">DEL</text></g><text x="64" y="124" text-anchor="middle" font-family="sans-serif" font-size="8" fill="#0f172a">L · 129m</text></svg>
44
+ # fixplesk 0.6.0
45
+
46
+
47
+ ## AI Cost Tracking
48
+
49
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.6.1-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
50
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$1.67-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-5.8h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
51
+
52
+ - 🤖 **LLM usage:** $1.6723 (10 commits)
53
+ - 👤 **Human dev:** ~$580 (5.8h @ $100/h, 30min dedup)
54
+
55
+ Generated on 2026-09-17 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
56
+
57
+ ---
58
+
59
+
60
+
61
+ Diagnostyka Plesk/WordPress oparta na dowodach, z opcjonalnym LLM i kontrolowanym wykonaniem.
62
+ **Wydanie rozwojowe. Nie jest certyfikowanym skanerem ani autonomicznym administratorem serwera.**
63
+
64
+ Wersja 0.6.0 rozwija poprzedni pakiet 0.5.0 (jego moduł `guard` pozostaje bez zmian). Zachowano wcześniejsze moduły diagnostyki,
65
+ DSL, kolektory, prywatność LLM, Executor, SQLite, security/offline, dokumentację i laboratoria.
66
+ Nowa grupa poleceń `guard` nie zastępuje `security`, `diagnose`, `triage` ani `apply`.
67
+
68
+ ## Nowe w 0.6.0: bezpośrednie DeepSeek API
69
+
70
+ `backend="deepseek"`, własny `DEEPSEEK_API_KEY`, oficjalny endpoint, bez SDK i bez
71
+ pośrednictwa OpenRouter. Profile `deepseek-flash` (V4.1 Flash według dokumentacji
72
+ z 2026-09-10) i `deepseek-v4-pro`. Tryby thinking, poziomy `low/high/max`, JSON,
73
+ ograniczone odpowiedzi, brak zapisu reasoning_content. Dane nadal przechodzą strict.
74
+ Zgoda na bezpośrednie API **nie jest gwarancją ZDR**. Domyślnie nie przełączamy
75
+ istniejących konfiguracji; szczegółowe warunki są w `docs/DEEPSEEK.md`.
76
+
77
+ ## Nowe: bezpośrednie Z.ai API (backend `zai`)
78
+
79
+ `backend="zai"`, własny `ZAI_API_KEY`, stały endpoint `https://api.z.ai/api/paas/v4`,
80
+ bez SDK i bez pośrednictwa OpenRouter. Modele potwierdzone żywą listą `/models`
81
+ (2026-09-16): `glm-5.3`, `glm-5.3-flash` (profile `accurate`/`fast`) oraz starsze
82
+ GLM-5.x. Te same jawne zgody co DeepSeek (`require_zdr=false`,
83
+ `accept_provider_data_policy=true`); szczegóły w `docs/ZAI.md`,
84
+ konfiguracja w `examples/zai/`.
85
+
86
+ ```bash
87
+ fixplesk --config config.toml llm-info
88
+ fixplesk --config config.toml llm-preview --snapshot snapshot.json --output payload.json
89
+ ```
90
+
91
+ ### Domyślne modele per provider i kolejność według dostępności
92
+
93
+ Skrypty (`scripts/demo_llm_twin.py`, `scripts/benchmark_llm.py`) czytają z `.env`:
94
+ `LLM_PROVIDER_ORDER` (kolejność providerów wg dostępności klucza), `LLM_MODEL_DEEPSEEK`/`_ALT`,
95
+ `LLM_MODEL_ZAI`/`_ALT`, `LLM_MODEL_OPENROUTER`/`_ALT`. Przy porażce modelu skrypt jawnie
96
+ przechodzi na alternatywę **tego samego** providera, potem do następnego w kolejności;
97
+ każdy hop jest logowany. Rdzeń silnika fixplesk nadal nie robi cichego fallbacku.
98
+ `LLM_MODEL` pozostaje pojedynczym domyślnym modelem narzędzia `costs`.
99
+
100
+ Konfiguracja: `examples/deepseek/llm-section.toml`; pełne demo:
101
+ `examples/deepseek/config.toml`. Poprzednie artefakty: `history/0.5.0/dist/`.
102
+ Wyniki bieżącej weryfikacji: `docs/TESTING_0.6.0.md`.
103
+
104
+ ## Laboratorium Docker: cyfrowy bliźniak i doradca LLM jedną komendą
105
+
106
+ `bash scripts/demo_twin.sh` uruchamia w izolowanym Dockerze deterministyczny bliźniak
107
+ Plesk/WordPress (sieć wewnętrzna, read-only, `cap_drop: ALL`) i kontener demo, który
108
+ wstrzykuje usterkę, wykonuje offline diagnozę, a po podaniu klucza wysyła jeden
109
+ zminimalizowany payload doradczy do wybranego modelu. Bez kluczy przepływ jest w pełni
110
+ offline i kończy się podglądem kontraktu dostawcy (`llm-preview`).
111
+
112
+ ```bash
113
+ DEEPSEEK_API_KEY=sk-... bash scripts/demo_twin.sh # deepseek-flash (V4.1 Flash, direct)
114
+ ZAI_API_KEY=... bash scripts/demo_twin.sh # glm-5.3 (Z.ai direct)
115
+ OPENROUTER_API_KEY=sk-or-... bash scripts/demo_twin.sh # openrouter/z-ai/glm-5.3 (ZDR)
116
+ bash scripts/demo_twin.sh # offline + preview, bez kluczy
117
+ ```
118
+
119
+ Pozostałe profile izolowane: `scripts/test_offline_docker.sh` (network_mode: none),
120
+ `scripts/test_twin_docker.sh` (pełny pakiet testów wobec bliźniaka),
121
+ `scripts/test_guard_docker.sh`, `scripts/test_security_docker.sh`,
122
+ `scripts/test_wordpress_docker.sh` (prawdziwy WordPress). Szczegóły: `docs/DIGITAL_TWIN.md`.
123
+
124
+ ## Benchmark doradczy LLM: DeepSeek vs z.ai
125
+
126
+ `scripts/benchmark_llm.py` porównuje silniki na tych samych scenariuszach (załączone
127
+ snapshoty + usterki syntetycznego bliźniaka), mierząc skuteczność walidacji `Advice`,
128
+ latencję, zużycie tokenów i koszt. Podczas pomiaru każdy przebieg raportuje na bieżąco
129
+ (czas, tokeny, status), więc długie żądania są zawsze widoczne. Ceny wariantów OpenRouter
130
+ pobierane są na żywo; klucze tylko ze środowiska.
131
+
132
+ ```bash
133
+ python scripts/benchmark_llm.py --selftest # bez sieci i kluczy
134
+ DEEPSEEK_API_KEY=... ZAI_API_KEY=... \
135
+ python scripts/benchmark_llm.py --repeats 2 # właściwy pomiar
136
+ ```
137
+
138
+ Wynik (2026-09-16, kontrakt strict): **deepseek-v4-pro 90%** skutecznych porad (47 s śr.),
139
+ zai-glm-5.3 60% (157 s, plan coding), oba flashe 30%. Pełne tabele: `test-results/`
140
+ i `docs/analysis/llm-benchmark.md`.
141
+
142
+ ## Funkcje zachowane z 0.5.0
143
+
144
+ | Funkcja | Implementacja | Granica |
145
+ |---|---|---|
146
+ | Pliki i katalogi | Lokalny skan document_root widocznych domen, metadane, hash, podejrzane wzorce, porównanie przebiegów | Bez dekodowania/wykonania PHP, usuwania i automatycznej kwarantanny |
147
+ | Integralność WP | Cache oficjalnych sum core dla wybranej wersji i locale oraz lokalne porównanie | Wersję wskazuje operator; brak potwierdzenia inventory i pełnej obsługi sum wtyczek premium |
148
+ | Bazy danych o zagrożeniach | Pobieranie KEV JSON, EPSS CSV.gz, Wordfence v3 JSON, sum WP; walidacja, historia, SHA-256, TTL | Bez podpisów producenta/TUF; import lokalny nie jest uwierzytelniony |
149
+ | Wersje WP | Dopasowanie core/plugin/theme do zakresów Wordfence; dołączenie cached KEV/EPSS po CVE | Komparator celowo obsługuje tylko numeryczne wersje; sufiksy oznaczają niepewność |
150
+ | Wskaźniki plików | Import własnych list SHA-256 CSV/JSON; zgodność i sprzeczności źródeł | Trafienie nie uruchamia usuwania |
151
+ | Wycieki kont | HIBP k-anon e-mail oraz osobna kontrola hasła online/offline | Bez łączenia kont z hasłami, łamania hashy i prób logowania |
152
+ | Dane WP | Odczytowy audyt wybranych wyeksportowanych pól opcji/postów i deklarowanych ról | Bez nowego połączenia SQL, automatycznego eksportu tabel i odczytu user_pass |
153
+ | Skrypty runtime | Prywatne pliki w `/tmp`, zamknięty DSL read-only, SHA-256, akceptacja, wynik, kopia trwała | Tylko `file.stat` i `file.sha256`; dowolny kod LLM nie jest wykonywany |
154
+ | Prawa pliku | Plan ograniczenia praw grupy/other jednego pliku; realny `fchmod` po akceptacji | Bez chown/rekurencji/ACL/dowiązań; tylko lokalny host |
155
+ | Obserwacje zmiany | HTTP GET, wybrane jednostki systemd, przyrost logów, diff i trwały dziennik | To jawnie wybrany zakres; nie test wszystkich usług i transakcji biznesowych |
156
+
157
+ ## Instalacja
158
+
159
+ Wymagania: Python 3.11+, Linux/POSIX. Wykonanie skryptów przez sealed memfd wymaga Linuksa.
160
+ Nie opublikowano paczki w PyPI.
161
+
162
+ ```bash
163
+ python3 -m venv .venv
164
+ source .venv/bin/activate
165
+ python -m pip install ./dist/fixplesk-0.6.0-py3-none-any.whl
166
+ fixplesk --version
167
+ fixplesk guard --help
168
+ ```
169
+
170
+ Instalacja zależności wymaga internetu albo przygotowanego repozytorium lokalnego.
171
+ Analiza zapisanych danych działa bez LLM i bez sieci. Nowe pobrania i sondy wymagają `--allow-network`.
172
+
173
+ ## Skan jednej domeny lub widocznych domen
174
+
175
+ Najpierw utwórz i sprawdź zaufane inventory. Opcja `--config` występuje **przed** podkomendą.
176
+ Nie używaj inventory pochodzącego od niezaufanego klienta HTTP. Uprawnienia deklarowane w pliku nie nadają uprawnień systemowych.
177
+
178
+ ```bash
179
+ fixplesk init
180
+ fixplesk --config config.toml guard files scan --domain example.com --output scan-before.json
181
+ fixplesk --config config.toml guard files scan --all --output scan-all.json
182
+ fixplesk guard files compare --before scan-before.json --after scan-after.json --output diff.json
183
+ ```
184
+
185
+ Zastąp `example.com` własnym celem istniejącym w konfiguracji. `--all` oznacza wyłącznie widoczne
186
+ w inventory cele, nie automatyczne odkrycie wszystkich domen serwera. Nie skanuj całego `/` jako root.
187
+ Nowe lokalne funkcje odmówią działania przy aktywnej konfiguracji SSH, zamiast czytać przypadkowo host lokalny.
188
+
189
+ Skan nie podąża za dowiązaniami; nie czyta hardlinków, urządzeń ani FIFO, nie przechodzi na inny filesystem.
190
+ Ma limity plików, bajtów, głębokości i czasu. Brak dostępu, rotacja czy limit trafia do `gaps`.
191
+ Odczyt nie jest atomowym snapshotem i może zmienić atime. Prawa POSIX nie dowodzą dostępności HTTP.
192
+ Nie jest oceniana pełna semantyka ACL/SELinux/nginx/Apache. Raportów nie zapisuj pod katalogiem witryny.
193
+
194
+ ## Pobieranie i import baz
195
+
196
+ ```bash
197
+ fixplesk guard feeds list
198
+ fixplesk guard feeds sync --source cisa-kev --allow-network
199
+ fixplesk guard feeds sync --source epss --allow-network
200
+ # WORDFENCE_API_KEY ustaw w chronionym środowisku procesu, nie w argv.
201
+ fixplesk guard feeds sync --source wordfence --allow-network
202
+ fixplesk guard feeds status --source wordfence
203
+ fixplesk guard wp-match --inventory components.json --output vulnerabilities.json
204
+ ```
205
+
206
+ `components.json` jest tablicą: `id`, `domain`, `type` (`core`/`plugin`/`theme`), `slug`, `version`,
207
+ `observed_at` (ISO8601 ze strefą), `identity_verified` (bool). Ostatnie pole jest deklaracją operatora,
208
+ nie zdalnym poświadczeniem tożsamości. Nie kopiuj daty z zegara bez rzeczywistego odczytu.
209
+
210
+ Cache zachowuje całe źródło i jego informacje licencyjne. Domyślnie trafia do `~/.cache/fixplesk/feeds`.
211
+ Import lokalny: `guard feeds import --source ... --input ... --obtained-at ...`.
212
+ Nieudany nowy import nie przełącza wskaźnika na niepoprawne dane. Nie ma automatycznej aktualizacji aplikacji ani pakietów serwera.
213
+ Opcjonalny przykład timera odświeżającego **dane** jest w `integrations/systemd`; nie jest instalowany ani włączany.
214
+
215
+ Przykład sum **historycznej, jawnie wybranej** wersji, nie rekomendacja aktualnej wersji WordPressa:
216
+
217
+ ```bash
218
+ fixplesk guard feeds sync --source wp-checksums --version 6.8.1 --locale en_US --allow-network
219
+ fixplesk --config config.toml guard files scan --domain example.com \
220
+ --checksum-version 6.8.1 --checksum-locale en_US --output integrity.json
221
+ ```
222
+
223
+ Nie przypisuj tych samych sum witrynom o różnych wersjach. Niezgodność jest dowodem różnicy,
224
+ a nie automatycznie dowodem malware. Pierwszy własny skan nie stanowi zaufanej czystej bazy.
225
+
226
+ ## Kontrola kont i haseł
227
+
228
+ ```bash
229
+ # HIBP_API_KEY w chronionym środowisku. Ukryty prompt e-mail; bez adresu w argv.
230
+ fixplesk guard breach email --account-ref mail-001 --consent --allow-network
231
+
232
+ # Osobne pytanie o hasło. Wymagany lokalny TTY; bez potoku, pliku ani argumentu z hasłem.
233
+ fixplesk guard breach password --online --consent --allow-network
234
+
235
+ # Offline: legalnie pozyskany korpus SHA1:count i jego rzeczywista data.
236
+ fixplesk guard breach password --offline-hashes /secure/pwned-passwords.txt \
237
+ --corpus-date 2026-09-15T00:00:00Z --consent
238
+ ```
239
+
240
+ Kontrola e-maila używa k-anon z prefiksem 6 znaków; wymaga odpowiedniego planu HIBP.
241
+ Kontrola hasła używa prefiksu 5 znaków i paddingu. Nie ma fallbacku do wysłania całego adresu/hasła.
242
+ Nie są przechowywane surowe odpowiedzi dotyczące innych kont. Szczegóły i granice w `docs/guard/BREACHES.md`.
243
+ Podana data korpusu jest przykładem składni — musi odpowiadać faktycznemu źródłu.
244
+
245
+ ## Jawne skrypty tworzone podczas działania
246
+
247
+ ```bash
248
+ fixplesk --config config.toml guard session create --domain example.com --output session.json
249
+ # Podstaw rzeczywistą ścieżkę zwróconą w session.json.
250
+ fixplesk --config config.toml guard session stage --domain example.com \
251
+ --session /tmp/fixplesk-UID-IDENTYFIKATOR --spec script-spec.json --output staged.json
252
+ fixplesk --config config.toml guard session list --domain example.com \
253
+ --session /tmp/fixplesk-UID-IDENTYFIKATOR
254
+ ```
255
+
256
+ `script-spec.json` może być propozycją LLM lub operatora:
257
+
258
+ ```json
259
+ {"schema_version":1,"origin":"llm","operation":"file.sha256","path":"index.php","purpose":"Sprawdź pełną sumę pliku bez wykonywania PHP"}
260
+ ```
261
+
262
+ `guard session run --script ID --approve SHA256` to podgląd. Dopiero dodanie `--execute` uruchamia
263
+ zamknięty szablon. Skrypt musi pozostać bajt w bajt zgodny z generatorem. Wykonanie używa `python -I`
264
+ i zapieczętowanych bajtów memfd, a nie dowolnej zawartości pod zmienną nazwą w `/tmp`.
265
+ Nie jest to sandbox dla arbitralnego kodu. Nie ma tu nowej automatycznej rozmowy z LLM: przyjmowany jest
266
+ walidowany JSON propozycji. Dotychczasowa integracja LLM paczki nadal istnieje oddzielnie.
267
+
268
+ Kopia skryptów, manifestów, rollbacków i wyników jest pod `state_dir/guard-sessions/ID`.
269
+ Audyt zdarzeń znajduje się we wspólnym SQLite. `guard session export` tworzy prywatny ZIP.
270
+ Nie wysyłaj całego katalogu sesji do LLM ani do publicznego zgłoszenia.
271
+
272
+ ## Ograniczenie praw jednego pliku
273
+
274
+ Zapis wymaga `allow_mutations=true` w zaufanym celu inventory oraz uprawnień OS. Nie rozszerzaj uprawnień procesu tylko po to,
275
+ żeby test przeszedł. Nowa operacja nie próbuje zgadywać docelowego właściciela ani zastępować natywnych napraw konfiguracji Pleska.
276
+
277
+ ```bash
278
+ fixplesk --config config.toml guard permissions plan --domain example.com \
279
+ --path backup.sql --mode 0640 --policy checks.json \
280
+ --why "Usuń zbędny zapis dla innych kont po przeglądzie uprawnień" --output permission-plan.json
281
+ fixplesk guard permissions run --plan permission-plan.json --output dry-run.json
282
+ ```
283
+
284
+ Dobór 0640 jest przykładem, nie uniwersalną polityką. Pole `digest` z dry-run zatwierdza konkretny plan:
285
+
286
+ ```bash
287
+ fixplesk --config config.toml guard permissions run --plan permission-plan.json \
288
+ --approve SHA256_PLANU --execute --allow-network --output execution.json
289
+ ```
290
+
291
+ `checks.json` określa kontrolę, np. `{"http_checks":[{"path":"/","expected_status":200,"required_text":"Nazwa witryny"}],"services":[]}`.
292
+ HTTP200 bez właściwego znacznika nie przechodzi. Zmiana treści blokuje wynik, chyba że jawnie ustawisz
293
+ `allow_content_drift=true`. Dla usług podaj wyłącznie rzeczywiste jednostki z inventory.
294
+ Pełny model: `fixplesk guard schema --kind policy`.
295
+
296
+ Plan ważny jest 15 minut. Zmienia tylko prawa grupy/other jednego zwykłego pliku, bez rozszerzania praw.
297
+ Odmowa przy ACL, hardlinkach, symlinkach, zmianie treści/tożsamości i nierozliczonym wcześniejszym planie.
298
+ Brak sukcesu sondy nie powoduje domyślnie ponownego odsłonięcia starych uprawnień.
299
+ Zgoda `--allow-restore-previous-mode` musi być częścią planu **przed** wykonaniem.
300
+
301
+ Po nieznanym wyniku użyj istniejącego `recovery status` albo nowego `guard permissions reconcile --digest ... --allow-network`.
302
+ `--acknowledge` rozlicza obserwowany stan po kontrolach; nie wznawia i nie powtarza zapisu.
303
+ Inny wynik, zmieniona treść lub nowe inventory wymagają procedury ręcznej.
304
+
305
+ ## Testy, demo i plany rozwoju
306
+
307
+ ```bash
308
+ python scripts/demo_guard.py --output-dir /tmp/fixplesk-guard-demo
309
+ python -m pytest tests/assurance -q
310
+ bash scripts/test_guard_docker.sh
311
+ ```
312
+
313
+ Demo tworzy wyłącznie syntetyczne pliki i lokalne atrapowe odpowiedzi kontroli; nie diagnozuje Pleska.
314
+ Status bieżących testów jest w `docs/TESTING_0.6.0.md`; wcześniejszy pomiar zachowano w `docs/guard/TESTING_0.5.0.md`. Docker pozostaje osobnym profilem.
315
+ Szczegóły: `docs/guard/ARCHITECTURE.md`, `docs/guard/ROADMAP.md`, `docs/guard/SOURCES.md`.
316
+ Poprzednia instrukcja: `docs/history/README_0.4.0.md`.
317
+
318
+
319
+ ## License
320
+
321
+ Licensed under Apache-2.0.