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.
- fixplesk-0.6.1/.dockerignore +17 -0
- fixplesk-0.6.1/.github/workflows/docker.yml +38 -0
- fixplesk-0.6.1/.github/workflows/offline.yml +16 -0
- fixplesk-0.6.1/.github/workflows/tests.yml +25 -0
- fixplesk-0.6.1/CHANGELOG.md +100 -0
- fixplesk-0.6.1/LICENSE +25 -0
- fixplesk-0.6.1/MANIFEST.in +12 -0
- fixplesk-0.6.1/PKG-INFO +321 -0
- fixplesk-0.6.1/README.md +279 -0
- fixplesk-0.6.1/docker/Dockerfile.demo +9 -0
- fixplesk-0.6.1/docker/Dockerfile.guard +11 -0
- fixplesk-0.6.1/docker/Dockerfile.offline +9 -0
- fixplesk-0.6.1/docker/Dockerfile.security +10 -0
- fixplesk-0.6.1/docker/Dockerfile.tests +10 -0
- fixplesk-0.6.1/docker/Dockerfile.twin +7 -0
- fixplesk-0.6.1/docker/Dockerfile.wordpress +12 -0
- fixplesk-0.6.1/docker/compose.demo.yml +48 -0
- fixplesk-0.6.1/docker/compose.guard.yml +15 -0
- fixplesk-0.6.1/docker/compose.offline.yml +15 -0
- fixplesk-0.6.1/docker/compose.security.yml +15 -0
- fixplesk-0.6.1/docker/compose.twin.yml +41 -0
- fixplesk-0.6.1/docker/compose.wordpress.yml +47 -0
- fixplesk-0.6.1/docs/ARCHITECTURE.md +88 -0
- fixplesk-0.6.1/docs/DEEPSEEK.md +165 -0
- fixplesk-0.6.1/docs/DIGITAL_TWIN.md +146 -0
- fixplesk-0.6.1/docs/DOCROOT.md +156 -0
- fixplesk-0.6.1/docs/DSL.md +106 -0
- fixplesk-0.6.1/docs/INTEGRATIONS.md +132 -0
- fixplesk-0.6.1/docs/MIGRATION.md +43 -0
- fixplesk-0.6.1/docs/NON_LLM_LIBRARIES.md +226 -0
- fixplesk-0.6.1/docs/OFFLINE.md +128 -0
- fixplesk-0.6.1/docs/PRIVACY.md +87 -0
- fixplesk-0.6.1/docs/README.md +14 -0
- fixplesk-0.6.1/docs/RECOVERY.md +138 -0
- fixplesk-0.6.1/docs/REQUIREMENTS_MATRIX.md +56 -0
- fixplesk-0.6.1/docs/RUNBOOK_CATALOGUE.md +2252 -0
- fixplesk-0.6.1/docs/SECURITY.md +132 -0
- fixplesk-0.6.1/docs/SOURCES.md +295 -0
- fixplesk-0.6.1/docs/TESTING-0.2.0.md +77 -0
- fixplesk-0.6.1/docs/TESTING.md +125 -0
- fixplesk-0.6.1/docs/TESTING_0.6.0.md +74 -0
- fixplesk-0.6.1/docs/TOOLS.json +2366 -0
- fixplesk-0.6.1/docs/TOOLS.md +68 -0
- fixplesk-0.6.1/docs/ZAI.md +34 -0
- fixplesk-0.6.1/docs/analysis/llm-benchmark.md +129 -0
- fixplesk-0.6.1/docs/guard/ARCHITECTURE.md +116 -0
- fixplesk-0.6.1/docs/guard/BREACHES.md +41 -0
- fixplesk-0.6.1/docs/guard/EXAMPLE_REPORT.md +50 -0
- fixplesk-0.6.1/docs/guard/ROADMAP.md +57 -0
- fixplesk-0.6.1/docs/guard/SOURCES.md +24 -0
- fixplesk-0.6.1/docs/guard/TESTING_0.5.0.md +45 -0
- fixplesk-0.6.1/docs/guard/feed-live-smoke.json +17 -0
- fixplesk-0.6.1/docs/guard/schemas/hash-indicator.schema.json +37 -0
- fixplesk-0.6.1/docs/guard/schemas/permission-plan.schema.json +234 -0
- fixplesk-0.6.1/docs/guard/schemas/policy.schema.json +79 -0
- fixplesk-0.6.1/docs/guard/schemas/scan-limits.schema.json +48 -0
- fixplesk-0.6.1/docs/guard/schemas/script.schema.json +61 -0
- fixplesk-0.6.1/docs/guard/schemas/wp-data.schema.json +133 -0
- fixplesk-0.6.1/docs/history/README_0.4.0.md +327 -0
- fixplesk-0.6.1/docs/information/llm-dsl-prompt-pattern.md +116 -0
- fixplesk-0.6.1/docs/schemas/backup.schema.json +78 -0
- fixplesk-0.6.1/docs/schemas/capability.schema.json +44 -0
- fixplesk-0.6.1/docs/schemas/config.schema.json +652 -0
- fixplesk-0.6.1/docs/schemas/docroot.schema.json +287 -0
- fixplesk-0.6.1/docs/schemas/evidence.schema.json +107 -0
- fixplesk-0.6.1/docs/schemas/execution.schema.json +147 -0
- fixplesk-0.6.1/docs/schemas/plan.schema.json +348 -0
- fixplesk-0.6.1/docs/schemas/report.schema.json +591 -0
- fixplesk-0.6.1/docs/schemas/rules.schema.json +300 -0
- fixplesk-0.6.1/docs/schemas/runbooks.schema.json +250 -0
- fixplesk-0.6.1/docs/schemas/snapshot.schema.json +186 -0
- fixplesk-0.6.1/docs/security-research/REPORT_PL.md +100 -0
- fixplesk-0.6.1/docs/security-research/REUSE.json +211 -0
- fixplesk-0.6.1/docs/security-research/REUSE.md +26 -0
- fixplesk-0.6.1/docs/security-research/RUNBOOKS.md +762 -0
- fixplesk-0.6.1/docs/security-research/SOURCES.md +219 -0
- fixplesk-0.6.1/docs/security-research/TESTING_0.4.0.md +64 -0
- fixplesk-0.6.1/docs/security-research/previous-design/AUDYT_0.3.0.md +27 -0
- fixplesk-0.6.1/docs/security-research/previous-design/README.md +7 -0
- fixplesk-0.6.1/docs/specification/01-architecture-original.md +195 -0
- fixplesk-0.6.1/docs/specification/02-assistant-original.md +196 -0
- fixplesk-0.6.1/docs/specification/03-sources-original.md +56 -0
- fixplesk-0.6.1/docs/validation/build-first-pass-0.5.0.txt +593 -0
- fixplesk-0.6.1/docs/validation/coverage.json +1 -0
- fixplesk-0.6.1/docs/validation/coverage.txt +55 -0
- fixplesk-0.6.1/docs/validation/coverage.xml +6221 -0
- fixplesk-0.6.1/docs/validation/junit-core.xml +1 -0
- fixplesk-0.6.1/docs/validation/junit-guard.xml +1 -0
- fixplesk-0.6.1/docs/validation/junit-offline.xml +1 -0
- fixplesk-0.6.1/docs/validation/junit-transport.xml +1 -0
- fixplesk-0.6.1/docs/validation/junit-twin.xml +1 -0
- fixplesk-0.6.1/docs/validation/pytest-core.txt +19 -0
- fixplesk-0.6.1/docs/validation/pytest-guard.txt +23 -0
- fixplesk-0.6.1/docs/validation/pytest-offline.txt +27 -0
- fixplesk-0.6.1/docs/validation/pytest-transport.txt +12 -0
- fixplesk-0.6.1/docs/validation/pytest-twin.txt +11 -0
- fixplesk-0.6.1/docs/validation/pytest.xml +2 -0
- fixplesk-0.6.1/docs/validation/static-checks.json +32 -0
- fixplesk-0.6.1/docs/validation/summary.json +30 -0
- fixplesk-0.6.1/docs/validation/wheel-smoke.json +117 -0
- fixplesk-0.6.1/docs/validation-v0.2.0/coverage.json +1 -0
- fixplesk-0.6.1/docs/validation-v0.2.0/pytest-output.txt +49 -0
- fixplesk-0.6.1/docs/validation-v0.2.0/pytest.xml +1 -0
- fixplesk-0.6.1/docs/validation-v0.2.0/static-checks.json +85 -0
- fixplesk-0.6.1/docs/validation-v0.2.0/summary.json +187 -0
- fixplesk-0.6.1/docs/validation-v0.2.0/twin-execution-examples.json +856 -0
- fixplesk-0.6.1/docs/validation-v0.2.0/wheel-smoke.json +135 -0
- fixplesk-0.6.1/docs/validation-v0.4.0/build-first-pass.txt +401 -0
- fixplesk-0.6.1/docs/validation-v0.4.0/coverage.json +1 -0
- fixplesk-0.6.1/docs/validation-v0.4.0/pytest.txt +57 -0
- fixplesk-0.6.1/docs/validation-v0.4.0/pytest.xml +1 -0
- fixplesk-0.6.1/docs/validation-v0.4.0/static-checks.json +51 -0
- fixplesk-0.6.1/docs/validation-v0.4.0/wheel-smoke.json +120 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/coverage.json +1 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/junit.xml +1 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/migration-check.json +27 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/pytest.txt +86 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/rules.json +4 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/runbooks.json +6 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/source-changes.txt +754 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/summary.json +21 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/wheel-install.txt +4 -0
- fixplesk-0.6.1/docs/validation-v0.6.0/wheel-smoke.json +14 -0
- fixplesk-0.6.1/examples/config.toml +79 -0
- fixplesk-0.6.1/examples/correlation-graph.dot +61 -0
- fixplesk-0.6.1/examples/custom-rules.yml +24 -0
- fixplesk-0.6.1/examples/deepseek/config.toml +44 -0
- fixplesk-0.6.1/examples/deepseek/llm-section.toml +26 -0
- fixplesk-0.6.1/examples/deepseek/preview.json +60 -0
- fixplesk-0.6.1/examples/deepseek/provider-info.json +25 -0
- fixplesk-0.6.1/examples/deepseek/snapshot.json +20 -0
- fixplesk-0.6.1/examples/diagnostic-plan.json +487 -0
- fixplesk-0.6.1/examples/guard/README.md +7 -0
- fixplesk-0.6.1/examples/guard/breach-fixture-results.json +28 -0
- fixplesk-0.6.1/examples/guard/checks.json +13 -0
- fixplesk-0.6.1/examples/guard/components.json +11 -0
- fixplesk-0.6.1/examples/guard/failure-scenarios.json +245 -0
- fixplesk-0.6.1/examples/guard/files-after.json +223 -0
- fixplesk-0.6.1/examples/guard/files-before.json +245 -0
- fixplesk-0.6.1/examples/guard/files-diff.json +27 -0
- fixplesk-0.6.1/examples/guard/indicators.csv +2 -0
- fixplesk-0.6.1/examples/guard/permission-dry-run.json +67 -0
- fixplesk-0.6.1/examples/guard/permission-plan.json +41 -0
- fixplesk-0.6.1/examples/guard/permission-result.json +71 -0
- fixplesk-0.6.1/examples/guard/reviewable-session/results/read-dd287e89458b18a946e0-dfa44a5b277f4f0dad5d201a461e8ad8.json +19 -0
- fixplesk-0.6.1/examples/guard/reviewable-session/rollbacks/read-dd287e89458b18a946e0.py +2 -0
- fixplesk-0.6.1/examples/guard/reviewable-session/scripts/read-dd287e89458b18a946e0.py +43 -0
- fixplesk-0.6.1/examples/guard/reviewable-session/session.json +38 -0
- fixplesk-0.6.1/examples/guard/script-execution.json +19 -0
- fixplesk-0.6.1/examples/guard/script-spec.json +9 -0
- fixplesk-0.6.1/examples/guard/staged-script.json +20 -0
- fixplesk-0.6.1/examples/guard/summary.json +34 -0
- fixplesk-0.6.1/examples/guard/vulnerability-fixture-result.json +101 -0
- fixplesk-0.6.1/examples/guard/wp-data-findings.json +32 -0
- fixplesk-0.6.1/examples/guard/wp-export.json +24 -0
- fixplesk-0.6.1/examples/offline/advisory-plan.json +204 -0
- fixplesk-0.6.1/examples/offline/docroot-input.json +46 -0
- fixplesk-0.6.1/examples/offline/docroot-proposal.json +145 -0
- fixplesk-0.6.1/examples/offline/docroot-proposal.md +89 -0
- fixplesk-0.6.1/examples/offline/docroot-twin-scenarios.json +301 -0
- fixplesk-0.6.1/examples/offline/evidence.json +80 -0
- fixplesk-0.6.1/examples/offline/help-capture.json +7 -0
- fixplesk-0.6.1/examples/offline/metrics.json +21 -0
- fixplesk-0.6.1/examples/offline/report.html +202 -0
- fixplesk-0.6.1/examples/offline/snapshot.json +21 -0
- fixplesk-0.6.1/examples/offline/triage-no-evidence.json +581 -0
- fixplesk-0.6.1/examples/offline/triage-no-evidence.md +174 -0
- fixplesk-0.6.1/examples/offline/triage-with-evidence.json +507 -0
- fixplesk-0.6.1/examples/offline/triage-with-evidence.md +138 -0
- fixplesk-0.6.1/examples/offline-README.md +21 -0
- fixplesk-0.6.1/examples/report.html +59 -0
- fixplesk-0.6.1/examples/report.json +989 -0
- fixplesk-0.6.1/examples/report.md +77 -0
- fixplesk-0.6.1/examples/safe-run/config.toml +20 -0
- fixplesk-0.6.1/examples/safe-run/dry-run.json +146 -0
- fixplesk-0.6.1/examples/safe-run/dry-run.md +49 -0
- fixplesk-0.6.1/examples/safe-run/llm-preview.json +62 -0
- fixplesk-0.6.1/examples/safe-run/plan.json +101 -0
- fixplesk-0.6.1/examples/safe-run/snapshot-synthetic.json +40 -0
- fixplesk-0.6.1/examples/safe-run-README.md +17 -0
- fixplesk-0.6.1/examples/security/README.md +20 -0
- fixplesk-0.6.1/examples/security/bundle.schema.json +500 -0
- fixplesk-0.6.1/examples/security/import-context.schema.json +61 -0
- fixplesk-0.6.1/examples/security/report.json +292 -0
- fixplesk-0.6.1/examples/security/report.md +178 -0
- fixplesk-0.6.1/examples/security/safe-summary.json +22 -0
- fixplesk-0.6.1/examples/security/selected-mail-plan.json +72 -0
- fixplesk-0.6.1/examples/security/synthetic-bundle.json +175 -0
- fixplesk-0.6.1/examples/security/synthetic-grype.json +27 -0
- fixplesk-0.6.1/examples/security/synthetic-import-context.json +9 -0
- fixplesk-0.6.1/examples/security/synthetic-queue.ndjson +1 -0
- fixplesk-0.6.1/examples/snapshot.json +129 -0
- fixplesk-0.6.1/examples/zai/config.toml +44 -0
- fixplesk-0.6.1/examples/zai/llm-section.toml +26 -0
- fixplesk-0.6.1/examples/zai/preview.json +60 -0
- fixplesk-0.6.1/examples/zai/snapshot.json +20 -0
- fixplesk-0.6.1/history/0.4.0/SHA256SUMS-original.txt +12 -0
- fixplesk-0.6.1/history/0.5.0/README.md +1 -0
- fixplesk-0.6.1/history/README.md +8 -0
- fixplesk-0.6.1/integrations/plesk/CHANGES.md +3 -0
- fixplesk-0.6.1/integrations/plesk/DESCRIPTION.md +14 -0
- fixplesk-0.6.1/integrations/plesk/LICENSE +25 -0
- fixplesk-0.6.1/integrations/plesk/htdocs/index.php +3 -0
- fixplesk-0.6.1/integrations/plesk/meta.xml +13 -0
- fixplesk-0.6.1/integrations/plesk/plib/controllers/IndexController.php +71 -0
- fixplesk-0.6.1/integrations/plesk/plib/views/scripts/index/index.phtml +27 -0
- fixplesk-0.6.1/integrations/plesk/var/reports/README.txt +4 -0
- fixplesk-0.6.1/integrations/systemd/README.md +7 -0
- fixplesk-0.6.1/integrations/systemd/fixplesk-feed-refresh.service +24 -0
- fixplesk-0.6.1/integrations/systemd/fixplesk-feed-refresh.timer +12 -0
- fixplesk-0.6.1/integrations/wordpress/fixplesk-agent/LICENSE +338 -0
- fixplesk-0.6.1/integrations/wordpress/fixplesk-agent/README.md +19 -0
- fixplesk-0.6.1/integrations/wordpress/fixplesk-agent/fixplesk-agent.php +102 -0
- fixplesk-0.6.1/lab/__init__.py +1 -0
- fixplesk-0.6.1/lab/client.py +31 -0
- fixplesk-0.6.1/lab/docroot_twin.py +125 -0
- fixplesk-0.6.1/lab/twin_server.py +214 -0
- fixplesk-0.6.1/lab/wordpress/bootstrap.sh +40 -0
- fixplesk-0.6.1/lab/wordpress/http_probe.py +15 -0
- fixplesk-0.6.1/pyproject.toml +76 -0
- fixplesk-0.6.1/scripts/benchmark_llm.py +260 -0
- fixplesk-0.6.1/scripts/build_release.py +47 -0
- fixplesk-0.6.1/scripts/demo_guard.py +154 -0
- fixplesk-0.6.1/scripts/demo_llm_twin.py +102 -0
- fixplesk-0.6.1/scripts/demo_twin.sh +9 -0
- fixplesk-0.6.1/scripts/generate_reference.py +64 -0
- fixplesk-0.6.1/scripts/generate_runbook_reference.py +37 -0
- fixplesk-0.6.1/scripts/llm_providers.py +93 -0
- fixplesk-0.6.1/scripts/make_data.py +151 -0
- fixplesk-0.6.1/scripts/make_offline_examples.py +96 -0
- fixplesk-0.6.1/scripts/make_safe_example.py +75 -0
- fixplesk-0.6.1/scripts/make_security_examples.py +47 -0
- fixplesk-0.6.1/scripts/run_twin_showcase.py +74 -0
- fixplesk-0.6.1/scripts/test_guard_docker.sh +6 -0
- fixplesk-0.6.1/scripts/test_offline_docker.sh +9 -0
- fixplesk-0.6.1/scripts/test_security_docker.sh +9 -0
- fixplesk-0.6.1/scripts/test_twin_docker.sh +13 -0
- fixplesk-0.6.1/scripts/test_wordpress_docker.sh +19 -0
- fixplesk-0.6.1/scripts/verify_uri_twin.mjs +14 -0
- fixplesk-0.6.1/scripts/verify_uri_twin.sh +16 -0
- fixplesk-0.6.1/scripts/write_validation_summary.py +115 -0
- fixplesk-0.6.1/setup.cfg +4 -0
- fixplesk-0.6.1/src/fixplesk/__init__.py +5 -0
- fixplesk-0.6.1/src/fixplesk/__main__.py +3 -0
- fixplesk-0.6.1/src/fixplesk/assurance/__init__.py +1 -0
- fixplesk-0.6.1/src/fixplesk/assurance/breaches.py +149 -0
- fixplesk-0.6.1/src/fixplesk/assurance/cli.py +293 -0
- fixplesk-0.6.1/src/fixplesk/assurance/common.py +212 -0
- fixplesk-0.6.1/src/fixplesk/assurance/feeds.py +328 -0
- fixplesk-0.6.1/src/fixplesk/assurance/filesystem.py +233 -0
- fixplesk-0.6.1/src/fixplesk/assurance/indicators.py +55 -0
- fixplesk-0.6.1/src/fixplesk/assurance/observe.py +190 -0
- fixplesk-0.6.1/src/fixplesk/assurance/permissions.py +307 -0
- fixplesk-0.6.1/src/fixplesk/assurance/runtime.py +238 -0
- fixplesk-0.6.1/src/fixplesk/assurance/wpdata.py +73 -0
- fixplesk-0.6.1/src/fixplesk/backup.py +72 -0
- fixplesk-0.6.1/src/fixplesk/cli.py +547 -0
- fixplesk-0.6.1/src/fixplesk/collector.py +143 -0
- fixplesk-0.6.1/src/fixplesk/config.py +351 -0
- fixplesk-0.6.1/src/fixplesk/data/demo.json +50 -0
- fixplesk-0.6.1/src/fixplesk/data/rules.yml +543 -0
- fixplesk-0.6.1/src/fixplesk/data/runbooks.yml +1751 -0
- fixplesk-0.6.1/src/fixplesk/data/security_catalog.json +1409 -0
- fixplesk-0.6.1/src/fixplesk/data/sources.yml +301 -0
- fixplesk-0.6.1/src/fixplesk/deepseek.py +103 -0
- fixplesk-0.6.1/src/fixplesk/diagnostics.py +22 -0
- fixplesk-0.6.1/src/fixplesk/docroot.py +286 -0
- fixplesk-0.6.1/src/fixplesk/dsl.py +269 -0
- fixplesk-0.6.1/src/fixplesk/errors.py +28 -0
- fixplesk-0.6.1/src/fixplesk/executor.py +342 -0
- fixplesk-0.6.1/src/fixplesk/explain.py +134 -0
- fixplesk-0.6.1/src/fixplesk/graph.py +58 -0
- fixplesk-0.6.1/src/fixplesk/llm.py +194 -0
- fixplesk-0.6.1/src/fixplesk/local_analysis.py +135 -0
- fixplesk-0.6.1/src/fixplesk/models.py +212 -0
- fixplesk-0.6.1/src/fixplesk/normalizer.py +111 -0
- fixplesk-0.6.1/src/fixplesk/offline.py +263 -0
- fixplesk-0.6.1/src/fixplesk/operations.py +56 -0
- fixplesk-0.6.1/src/fixplesk/plugins.py +20 -0
- fixplesk-0.6.1/src/fixplesk/privacy.py +212 -0
- fixplesk-0.6.1/src/fixplesk/providers/__init__.py +0 -0
- fixplesk-0.6.1/src/fixplesk/providers/files.py +114 -0
- fixplesk-0.6.1/src/fixplesk/providers/plesk.py +220 -0
- fixplesk-0.6.1/src/fixplesk/providers/wordpress.py +134 -0
- fixplesk-0.6.1/src/fixplesk/py.typed +0 -0
- fixplesk-0.6.1/src/fixplesk/recovery.py +82 -0
- fixplesk-0.6.1/src/fixplesk/reports.py +95 -0
- fixplesk-0.6.1/src/fixplesk/secops/__init__.py +5 -0
- fixplesk-0.6.1/src/fixplesk/secops/cli.py +85 -0
- fixplesk-0.6.1/src/fixplesk/secops/demo.py +33 -0
- fixplesk-0.6.1/src/fixplesk/secops/engine.py +266 -0
- fixplesk-0.6.1/src/fixplesk/secops/importers.py +183 -0
- fixplesk-0.6.1/src/fixplesk/secops/models.py +181 -0
- fixplesk-0.6.1/src/fixplesk/security.py +180 -0
- fixplesk-0.6.1/src/fixplesk/sources.py +169 -0
- fixplesk-0.6.1/src/fixplesk/store.py +192 -0
- fixplesk-0.6.1/src/fixplesk/tools.py +307 -0
- fixplesk-0.6.1/src/fixplesk/transport.py +203 -0
- fixplesk-0.6.1/src/fixplesk/twin.py +76 -0
- fixplesk-0.6.1/src/fixplesk/workflow.py +77 -0
- fixplesk-0.6.1/src/fixplesk/zai.py +104 -0
- fixplesk-0.6.1/src/fixplesk.egg-info/PKG-INFO +321 -0
- fixplesk-0.6.1/src/fixplesk.egg-info/SOURCES.txt +335 -0
- fixplesk-0.6.1/src/fixplesk.egg-info/dependency_links.txt +1 -0
- fixplesk-0.6.1/src/fixplesk.egg-info/entry_points.txt +2 -0
- fixplesk-0.6.1/src/fixplesk.egg-info/requires.txt +30 -0
- fixplesk-0.6.1/src/fixplesk.egg-info/top_level.txt +1 -0
- fixplesk-0.6.1/tests/assurance/test_cli_wpdata.py +113 -0
- fixplesk-0.6.1/tests/assurance/test_feeds_breaches.py +175 -0
- fixplesk-0.6.1/tests/assurance/test_files.py +120 -0
- fixplesk-0.6.1/tests/assurance/test_runtime_permissions.py +326 -0
- fixplesk-0.6.1/tests/conftest.py +96 -0
- fixplesk-0.6.1/tests/e2e/test_real_wordpress.py +109 -0
- fixplesk-0.6.1/tests/offline/__init__.py +0 -0
- fixplesk-0.6.1/tests/offline/conftest.py +38 -0
- fixplesk-0.6.1/tests/offline/test_backends.py +122 -0
- fixplesk-0.6.1/tests/offline/test_cli_offline.py +100 -0
- fixplesk-0.6.1/tests/offline/test_docroot.py +182 -0
- fixplesk-0.6.1/tests/offline/test_docroot_twin.py +74 -0
- fixplesk-0.6.1/tests/offline/test_evidence.py +137 -0
- fixplesk-0.6.1/tests/secops/test_security_engine.py +331 -0
- fixplesk-0.6.1/tests/test_cli_reports.py +74 -0
- fixplesk-0.6.1/tests/test_deepseek.py +370 -0
- fixplesk-0.6.1/tests/test_dsl.py +97 -0
- fixplesk-0.6.1/tests/test_executor.py +167 -0
- fixplesk-0.6.1/tests/test_llm_providers.py +90 -0
- fixplesk-0.6.1/tests/test_models_security.py +140 -0
- fixplesk-0.6.1/tests/test_more_integration_contracts.py +131 -0
- fixplesk-0.6.1/tests/test_new_contracts.py +247 -0
- fixplesk-0.6.1/tests/test_normalizer_files.py +145 -0
- fixplesk-0.6.1/tests/test_php_integrations.py +79 -0
- fixplesk-0.6.1/tests/test_privacy_boundary.py +180 -0
- fixplesk-0.6.1/tests/test_providers_llm_sources.py +146 -0
- fixplesk-0.6.1/tests/test_store_transport.py +108 -0
- fixplesk-0.6.1/tests/test_zai.py +230 -0
- fixplesk-0.6.1/tests/twin/conftest.py +66 -0
- fixplesk-0.6.1/tests/twin/test_scenarios.py +242 -0
|
@@ -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
|
fixplesk-0.6.1/PKG-INFO
ADDED
|
@@ -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
|
+
   
|
|
50
|
+
  
|
|
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.
|