lilrae 8.0.0__py3-none-any.whl
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.
- aptl/__init__.py +9 -0
- aptl/_asset_manifest.py +91 -0
- aptl/_labdata/.dockerignore +26 -0
- aptl/_labdata/.env.example +84 -0
- aptl/_labdata/.mcp.json.example +53 -0
- aptl/_labdata/README.md +194 -0
- aptl/_labdata/appliance/guest/aptl-appliance-first-boot +50 -0
- aptl/_labdata/appliance/guest/aptl-appliance-first-boot.service +23 -0
- aptl/_labdata/appliance/guest/aptl-launch.mount +12 -0
- aptl/_labdata/appliance/guest/claude/package-lock.json +142 -0
- aptl/_labdata/appliance/guest/claude/package.json +8 -0
- aptl/_labdata/appliance/guest/desktop-compose.yml +57 -0
- aptl/_labdata/appliance/guest/desktop-handoff.py +334 -0
- aptl/_labdata/appliance/guest/desktop-mcp-smoke.py +43 -0
- aptl/_labdata/appliance/guest/desktop-nginx.conf +16 -0
- aptl/_labdata/appliance/guest/desktop-session.sh +20 -0
- aptl/_labdata/appliance/guest/provision-offline.sh +230 -0
- aptl/_labdata/appliance/guest/scan-golden.sh +155 -0
- aptl/_labdata/appliance/guest/seat-desktop.py +136 -0
- aptl/_labdata/appliance/guest/seat-privilege-qualification.py +93 -0
- aptl/_labdata/appliance/guest/seat-privileges.py +198 -0
- aptl/_labdata/appliance/guest/seat-qualification-smoke.service +14 -0
- aptl/_labdata/appliance/guest/seat-qualification-smoke.sh +111 -0
- aptl/_labdata/appliance/guest/system-packages.sha256 +387 -0
- aptl/_labdata/config/certs.yml +16 -0
- aptl/_labdata/config/cortex/analyzers/APTLObservable/APTL_Observable.json +26 -0
- aptl/_labdata/config/cortex/analyzers/APTLObservable/aptl_observable.py +61 -0
- aptl/_labdata/config/cortex/application.conf +50 -0
- aptl/_labdata/config/cortex/index-mapping.json +140 -0
- aptl/_labdata/config/cortex/thehive-cortex.env +7 -0
- aptl/_labdata/config/otel/grafana-datasources.yaml +9 -0
- aptl/_labdata/config/otel/otel-collector-config.yaml +30 -0
- aptl/_labdata/config/otel/tempo-config.yaml +23 -0
- aptl/_labdata/config/suricata/rules/local.rules +46 -0
- aptl/_labdata/config/suricata/rules/misp/misp-iocs.rules +6 -0
- aptl/_labdata/config/suricata/rules/misp/misp-md5.list +2 -0
- aptl/_labdata/config/suricata/rules/misp/misp-sha1.list +2 -0
- aptl/_labdata/config/suricata/rules/misp/misp-sha256.list +2 -0
- aptl/_labdata/config/suricata/suricata.yaml +121 -0
- aptl/_labdata/config/thehive/application.conf +20 -0
- aptl/_labdata/config/wazuh-certs-tool.sh +925 -0
- aptl/_labdata/config/wazuh_cluster/etc/lists/active-response-whitelist +34 -0
- aptl/_labdata/config/wazuh_cluster/filebeat_wazuh_module.yml +35 -0
- aptl/_labdata/config/wazuh_cluster/patch-rule-path.py +40 -0
- aptl/_labdata/config/wazuh_cluster/wazuh_manager.conf +443 -0
- aptl/_labdata/config/wazuh_dashboard/opensearch_dashboards.yml +12 -0
- aptl/_labdata/config/wazuh_dashboard/wazuh.yml +7 -0
- aptl/_labdata/config/wazuh_indexer/wazuh.indexer.yml +30 -0
- aptl/_labdata/containers/_host-identity/aptl-host-identity +17 -0
- aptl/_labdata/containers/_host-identity/aptl-host-identity.service +13 -0
- aptl/_labdata/containers/_host-identity/install.sh +18 -0
- aptl/_labdata/containers/_wazuh-agent/aptl-firewall-drop.sh +179 -0
- aptl/_labdata/containers/_wazuh-agent/install-active-response.sh +34 -0
- aptl/_labdata/containers/_wazuh-agent/install-rhel.sh +21 -0
- aptl/_labdata/containers/_wazuh-agent/install.sh +50 -0
- aptl/_labdata/containers/_wazuh-agent/ossec.conf.template +27 -0
- aptl/_labdata/containers/_wazuh-agent/wazuh-agent.sh +169 -0
- aptl/_labdata/containers/_wazuh-agent/wazuh.repo +7 -0
- aptl/_labdata/containers/appliance-egress-proxy/Dockerfile +13 -0
- aptl/_labdata/containers/appliance-egress-proxy/proxy.py +322 -0
- aptl/_labdata/containers/base/Dockerfile.rocky +86 -0
- aptl/_labdata/containers/base/Dockerfile.ubuntu +86 -0
- aptl/_labdata/containers/base/falco_custom.yaml +25 -0
- aptl/_labdata/containers/base/scripts/entrypoint-base.sh +172 -0
- aptl/_labdata/containers/base/scripts/ossec.conf.template +85 -0
- aptl/_labdata/containers/base/sshd/00-aptl-hardening.conf +13 -0
- aptl/_labdata/containers/generic-samba-ad-base/Dockerfile +30 -0
- aptl/_labdata/containers/generic-samba-ad-base/provider-start.sh +9 -0
- aptl/_labdata/containers/generic-samba-ad-base/provision-domain.sh +40 -0
- aptl/_labdata/containers/generic-samba-ad-wazuh-agent-base/Dockerfile +12 -0
- aptl/_labdata/containers/generic-systemd-base/Dockerfile +46 -0
- aptl/_labdata/containers/generic-systemd-base-debian/Dockerfile +36 -0
- aptl/_labdata/containers/generic-systemd-node22-base/Dockerfile +73 -0
- aptl/_labdata/containers/generic-systemd-wazuh-agent-base/Dockerfile +15 -0
- aptl/_labdata/containers/generic-systemd-wazuh-agent-base-debian/Dockerfile +8 -0
- aptl/_labdata/containers/generic-wazuh-agent-base-debian/Dockerfile +12 -0
- aptl/_labdata/containers/kali/audit/aptl.rules +43 -0
- aptl/_labdata/containers/kali-capture/Dockerfile +24 -0
- aptl/_labdata/containers/kali-capture/broker.py +595 -0
- aptl/_labdata/containers/kali-capture/entrypoint.sh +57 -0
- aptl/_labdata/containers/kali-capture/sshd_config +20 -0
- aptl/_labdata/containers/keys/aptl_lab_key.pub +1 -0
- aptl/_labdata/containers/keys/authorized_keys +1 -0
- aptl/_labdata/containers/mailserver/setup.sh +21 -0
- aptl/_labdata/containers/misp-suricata-sync/Dockerfile +47 -0
- aptl/_labdata/containers/network-boundary-helper/Dockerfile +13 -0
- aptl/_labdata/containers/network-boundary-helper/helper.py +1080 -0
- aptl/_labdata/containers/network-boundary-helper/probe.py +71 -0
- aptl/_labdata/containers/operator-access-proxy/Dockerfile +13 -0
- aptl/_labdata/containers/operator-access-proxy/proxy.py +76 -0
- aptl/_labdata/containers/reverse/Dockerfile +110 -0
- aptl/_labdata/containers/reverse/README.md +152 -0
- aptl/_labdata/containers/reverse/entrypoint.sh +15 -0
- aptl/_labdata/containers/reverse/install-all.sh +39 -0
- aptl/_labdata/containers/reverse/install-falco.sh +42 -0
- aptl/_labdata/containers/reverse/install-wazuh.sh +77 -0
- aptl/_labdata/containers/reverse/rebuild_container.sh +4 -0
- aptl/_labdata/containers/reverse/reverse-tools-install.service +15 -0
- aptl/_labdata/containers/reverse/setup-reverse-tools.sh +95 -0
- aptl/_labdata/containers/suricata-wazuh-agent/Dockerfile +23 -0
- aptl/_labdata/containers/windows-victim/README.md +160 -0
- aptl/_labdata/containers/windows-victim/enable-rdp.ps1 +16 -0
- aptl/_labdata/containers/windows-victim/join-domain.ps1 +27 -0
- aptl/_labdata/containers/windows-victim/setup-ghidra.ps1 +93 -0
- aptl/_labdata/containers/windows-victim/setup-python-re.ps1 +59 -0
- aptl/_labdata/containers/windows-victim/setup-re-tools.ps1 +85 -0
- aptl/_labdata/containers/windows-victim/setup-ssh.ps1 +26 -0
- aptl/_labdata/containers/windows-victim/setup-sysinternals.ps1 +64 -0
- aptl/_labdata/containers/windows-victim/setup-sysmon.ps1 +39 -0
- aptl/_labdata/containers/windows-victim/setup-vs-buildtools.ps1 +58 -0
- aptl/_labdata/containers/windows-victim/setup-wazuh-agent.ps1 +29 -0
- aptl/_labdata/containers/windows-victim/setup-wdk.ps1 +68 -0
- aptl/_labdata/containers/windows-victim/setup-x64dbg.ps1 +81 -0
- aptl/_labdata/docker-compose.capture.yml +46 -0
- aptl/_labdata/docker-compose.observability.yml +95 -0
- aptl/_labdata/docker-compose.yml +1102 -0
- aptl/_labdata/generate-indexer-certs.yml +56 -0
- aptl/_labdata/hatch_build.py +179 -0
- aptl/_labdata/mcp/aptl-mcp-common/package-lock.json +2941 -0
- aptl/_labdata/mcp/aptl-mcp-common/package.json +43 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/captures.ts +276 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/config.ts +326 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/endpoint-url.ts +58 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/http.ts +465 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/index.ts +70 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/redaction.ts +1008 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/runs.ts +285 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/server.ts +248 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/shells.ts +129 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/ssh-contracts.ts +137 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/ssh-manager.ts +468 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/ssh-session.ts +623 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/ssh.ts +19 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/telemetry-export.ts +58 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/telemetry.ts +240 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/tools/api-definitions.ts +92 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/tools/api-handlers.ts +265 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/tools/definitions.ts +187 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/tools/handlers.ts +636 -0
- aptl/_labdata/mcp/aptl-mcp-common/src/utils.ts +17 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/api-tools.test.ts +198 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/captures.test.ts +498 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/config-env-substitution.test.ts +291 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/config-logic.test.ts +122 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/endpoint-url.test.ts +71 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/http-ca.test.ts +173 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/http-endpoint-security.test.ts +90 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/http-insecure.test.ts +236 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/http.test.ts +187 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/redaction.parity.test.ts +51 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/redaction.test.ts +923 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/runs.test.ts +269 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/server-hook.test.ts +265 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/server-logic.test.ts +106 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/shells.test.ts +215 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/ssh-facade.test.ts +42 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/ssh.test.ts +1703 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/telemetry-export.test.ts +38 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/telemetry.test.ts +328 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/tools-definitions.test.ts +81 -0
- aptl/_labdata/mcp/aptl-mcp-common/tests/tools-handlers.test.ts +463 -0
- aptl/_labdata/mcp/aptl-mcp-common/tsconfig.json +15 -0
- aptl/_labdata/mcp/aptl-mcp-common/vitest.config.ts +14 -0
- aptl/_labdata/mcp/build-all-mcps.sh +22 -0
- aptl/_labdata/mcp/mcp-casemgmt/.gitignore +2 -0
- aptl/_labdata/mcp/mcp-casemgmt/docker-lab-config.json +102 -0
- aptl/_labdata/mcp/mcp-casemgmt/package-lock.json +2351 -0
- aptl/_labdata/mcp/mcp-casemgmt/package.json +33 -0
- aptl/_labdata/mcp/mcp-casemgmt/src/index.ts +10 -0
- aptl/_labdata/mcp/mcp-casemgmt/tsconfig.build.json +13 -0
- aptl/_labdata/mcp/mcp-casemgmt/tsconfig.json +17 -0
- aptl/_labdata/mcp/mcp-indexer/.gitignore +2 -0
- aptl/_labdata/mcp/mcp-indexer/docker-lab-config.json +88 -0
- aptl/_labdata/mcp/mcp-indexer/package-lock.json +3546 -0
- aptl/_labdata/mcp/mcp-indexer/package.json +42 -0
- aptl/_labdata/mcp/mcp-indexer/src/index.ts +11 -0
- aptl/_labdata/mcp/mcp-indexer/tsconfig.build.json +9 -0
- aptl/_labdata/mcp/mcp-indexer/tsconfig.json +16 -0
- aptl/_labdata/mcp/mcp-indexer/vitest.config.ts +7 -0
- aptl/_labdata/mcp/mcp-network/.gitignore +2 -0
- aptl/_labdata/mcp/mcp-network/docker-lab-config.json +120 -0
- aptl/_labdata/mcp/mcp-network/package-lock.json +2351 -0
- aptl/_labdata/mcp/mcp-network/package.json +33 -0
- aptl/_labdata/mcp/mcp-network/src/index.ts +10 -0
- aptl/_labdata/mcp/mcp-network/tsconfig.build.json +13 -0
- aptl/_labdata/mcp/mcp-network/tsconfig.json +17 -0
- aptl/_labdata/mcp/mcp-red/.gitignore +4 -0
- aptl/_labdata/mcp/mcp-red/.prettierrc +7 -0
- aptl/_labdata/mcp/mcp-red/docker-lab-config.json +26 -0
- aptl/_labdata/mcp/mcp-red/eslint.config.js +41 -0
- aptl/_labdata/mcp/mcp-red/package-lock.json +3787 -0
- aptl/_labdata/mcp/mcp-red/package.json +43 -0
- aptl/_labdata/mcp/mcp-red/src/capture.ts +207 -0
- aptl/_labdata/mcp/mcp-red/src/classifier.ts +790 -0
- aptl/_labdata/mcp/mcp-red/src/effective-mode.ts +75 -0
- aptl/_labdata/mcp/mcp-red/src/extractor.ts +963 -0
- aptl/_labdata/mcp/mcp-red/src/index.ts +169 -0
- aptl/_labdata/mcp/mcp-red/src/logger.ts +456 -0
- aptl/_labdata/mcp/mcp-red/tests/capture.test.ts +335 -0
- aptl/_labdata/mcp/mcp-red/tests/classifier.test.ts +396 -0
- aptl/_labdata/mcp/mcp-red/tests/effective-mode.test.ts +166 -0
- aptl/_labdata/mcp/mcp-red/tests/extractor.test.ts +646 -0
- aptl/_labdata/mcp/mcp-red/tests/logger.test.ts +595 -0
- aptl/_labdata/mcp/mcp-red/tsconfig.build.json +9 -0
- aptl/_labdata/mcp/mcp-red/tsconfig.json +16 -0
- aptl/_labdata/mcp/mcp-red/vitest.config.ts +15 -0
- aptl/_labdata/mcp/mcp-reverse/.gitignore +4 -0
- aptl/_labdata/mcp/mcp-reverse/.prettierrc +7 -0
- aptl/_labdata/mcp/mcp-reverse/docker-lab-config.json +25 -0
- aptl/_labdata/mcp/mcp-reverse/eslint.config.js +41 -0
- aptl/_labdata/mcp/mcp-reverse/package-lock.json +3547 -0
- aptl/_labdata/mcp/mcp-reverse/package.json +42 -0
- aptl/_labdata/mcp/mcp-reverse/src/index.ts +10 -0
- aptl/_labdata/mcp/mcp-reverse/tsconfig.build.json +9 -0
- aptl/_labdata/mcp/mcp-reverse/tsconfig.json +16 -0
- aptl/_labdata/mcp/mcp-reverse/vitest.config.ts +8 -0
- aptl/_labdata/mcp/mcp-soar/.gitignore +2 -0
- aptl/_labdata/mcp/mcp-soar/docker-lab-config.json +82 -0
- aptl/_labdata/mcp/mcp-soar/package-lock.json +2351 -0
- aptl/_labdata/mcp/mcp-soar/package.json +33 -0
- aptl/_labdata/mcp/mcp-soar/src/index.ts +10 -0
- aptl/_labdata/mcp/mcp-soar/tsconfig.build.json +13 -0
- aptl/_labdata/mcp/mcp-soar/tsconfig.json +17 -0
- aptl/_labdata/mcp/mcp-threatintel/.gitignore +2 -0
- aptl/_labdata/mcp/mcp-threatintel/docker-lab-config.json +85 -0
- aptl/_labdata/mcp/mcp-threatintel/package-lock.json +2351 -0
- aptl/_labdata/mcp/mcp-threatintel/package.json +33 -0
- aptl/_labdata/mcp/mcp-threatintel/src/index.ts +10 -0
- aptl/_labdata/mcp/mcp-threatintel/tsconfig.build.json +13 -0
- aptl/_labdata/mcp/mcp-threatintel/tsconfig.json +17 -0
- aptl/_labdata/mcp/mcp-wazuh/docker-lab-config.json +82 -0
- aptl/_labdata/mcp/mcp-wazuh/package-lock.json +2471 -0
- aptl/_labdata/mcp/mcp-wazuh/package.json +33 -0
- aptl/_labdata/mcp/mcp-wazuh/src/index.ts +10 -0
- aptl/_labdata/mcp/mcp-wazuh/tsconfig.build.json +13 -0
- aptl/_labdata/mcp/mcp-wazuh/tsconfig.json +17 -0
- aptl/_labdata/mcp/package-lock.json +6 -0
- aptl/_labdata/pyproject.toml +229 -0
- aptl/_labdata/requirements/ci.txt +640 -0
- aptl/_labdata/requirements/dev.txt +1279 -0
- aptl/_labdata/requirements/docs.txt +1223 -0
- aptl/_labdata/requirements/runtime.txt +1033 -0
- aptl/_labdata/requirements/web.txt +1053 -0
- aptl/_labdata/scripts/appliance/acquire-guest-system-packages.sh +55 -0
- aptl/_labdata/scripts/appliance/assemble-seat-inputs.py +223 -0
- aptl/_labdata/scripts/appliance/build-local-images.sh +80 -0
- aptl/_labdata/scripts/appliance/build-seat-image.sh +305 -0
- aptl/_labdata/scripts/appliance/publish-images.sh +124 -0
- aptl/_labdata/scripts/appliance/publish-seat-image.sh +158 -0
- aptl/_labdata/scripts/appliance/qualify-seat-image.sh +69 -0
- aptl/_labdata/scripts/appliance/qualify-seat-privileges.sh +110 -0
- aptl/_labdata/scripts/appliance/seat-base-image.env +5 -0
- aptl/_labdata/scripts/appliance/seat-build-record.py +89 -0
- aptl/_labdata/scripts/appliance/write-seat-image-config.py +99 -0
- aptl/_labdata/scripts/aptl-env.sh +62 -0
- aptl/_labdata/scripts/aptl-range.service +25 -0
- aptl/_labdata/scripts/ci/assert_boot_realization.py +729 -0
- aptl/_labdata/scripts/ci/assert_project_teardown.py +193 -0
- aptl/_labdata/scripts/cortex-apikey.sh +274 -0
- aptl/_labdata/scripts/cortex-index-init.sh +35 -0
- aptl/_labdata/scripts/generate-ssh-keys.sh +49 -0
- aptl/_labdata/scripts/launch-ranges.sh +119 -0
- aptl/_labdata/scripts/provision-range.sh +159 -0
- aptl/_labdata/scripts/seed-misp.sh +246 -0
- aptl/_labdata/scripts/seed-prime.sh +304 -0
- aptl/_labdata/scripts/seed-shuffle.sh +267 -0
- aptl/_labdata/scripts/setup-purple-demo.sh +75 -0
- aptl/_labdata/scripts/setup-rdp.sh +96 -0
- aptl/_labdata/scripts/setup-vulnerable-victim.sh +217 -0
- aptl/_labdata/scripts/test-continuity-audit.sh +98 -0
- aptl/_labdata/scripts/test-wazuh-ar-drop.sh +225 -0
- aptl/_labdata/scripts/test-wazuh-ar-whitelist.sh +108 -0
- aptl/_labdata/scripts/thehive-apikey.sh +113 -0
- aptl/_labdata/src/aptl/__init__.py +9 -0
- aptl/_labdata/src/aptl/_asset_manifest.py +91 -0
- aptl/_labdata/src/aptl/api/__init__.py +1 -0
- aptl/_labdata/src/aptl/api/deps.py +243 -0
- aptl/_labdata/src/aptl/api/main.py +177 -0
- aptl/_labdata/src/aptl/api/middleware/__init__.py +1 -0
- aptl/_labdata/src/aptl/api/middleware/bff.py +188 -0
- aptl/_labdata/src/aptl/api/routers/__init__.py +1 -0
- aptl/_labdata/src/aptl/api/routers/config.py +62 -0
- aptl/_labdata/src/aptl/api/routers/kill.py +50 -0
- aptl/_labdata/src/aptl/api/routers/lab.py +203 -0
- aptl/_labdata/src/aptl/api/routers/scenarios.py +96 -0
- aptl/_labdata/src/aptl/api/routers/terminal.py +357 -0
- aptl/_labdata/src/aptl/api/scenario_projection.py +277 -0
- aptl/_labdata/src/aptl/api/schemas.py +338 -0
- aptl/_labdata/src/aptl/api/session.py +166 -0
- aptl/_labdata/src/aptl/appliance/__init__.py +1 -0
- aptl/_labdata/src/aptl/appliance/access_service.py +363 -0
- aptl/_labdata/src/aptl/appliance/access_service_support.py +208 -0
- aptl/_labdata/src/aptl/appliance/download.py +264 -0
- aptl/_labdata/src/aptl/appliance/errors.py +5 -0
- aptl/_labdata/src/aptl/appliance/guest_observation.py +631 -0
- aptl/_labdata/src/aptl/appliance/guest_services.py +27 -0
- aptl/_labdata/src/aptl/appliance/guest_surfaces.py +142 -0
- aptl/_labdata/src/aptl/appliance/input_images.py +185 -0
- aptl/_labdata/src/aptl/appliance/input_profile.py +244 -0
- aptl/_labdata/src/aptl/appliance/loopback_proxy.py +123 -0
- aptl/_labdata/src/aptl/appliance/policy.py +55 -0
- aptl/_labdata/src/aptl/appliance/seat/__init__.py +45 -0
- aptl/_labdata/src/aptl/appliance/seat/_device.py +45 -0
- aptl/_labdata/src/aptl/appliance/seat/access.py +445 -0
- aptl/_labdata/src/aptl/appliance/seat/access_clients.py +87 -0
- aptl/_labdata/src/aptl/appliance/seat/access_state.py +104 -0
- aptl/_labdata/src/aptl/appliance/seat/allocation.py +359 -0
- aptl/_labdata/src/aptl/appliance/seat/aptl-seat.pub +4 -0
- aptl/_labdata/src/aptl/appliance/seat/context.py +71 -0
- aptl/_labdata/src/aptl/appliance/seat/errors.py +12 -0
- aptl/_labdata/src/aptl/appliance/seat/exposure.py +136 -0
- aptl/_labdata/src/aptl/appliance/seat/image.py +492 -0
- aptl/_labdata/src/aptl/appliance/seat/image_config.py +99 -0
- aptl/_labdata/src/aptl/appliance/seat/image_disk_cache.py +149 -0
- aptl/_labdata/src/aptl/appliance/seat/image_selection.py +466 -0
- aptl/_labdata/src/aptl/appliance/seat/image_trust.py +190 -0
- aptl/_labdata/src/aptl/appliance/seat/image_update.py +96 -0
- aptl/_labdata/src/aptl/appliance/seat/kiosk.py +144 -0
- aptl/_labdata/src/aptl/appliance/seat/launch_descriptor.py +104 -0
- aptl/_labdata/src/aptl/appliance/seat/lifecycle.py +1272 -0
- aptl/_labdata/src/aptl/appliance/seat/locking.py +129 -0
- aptl/_labdata/src/aptl/appliance/seat/maintenance.py +66 -0
- aptl/_labdata/src/aptl/appliance/seat/models.py +81 -0
- aptl/_labdata/src/aptl/appliance/seat/namespace.py +48 -0
- aptl/_labdata/src/aptl/appliance/seat/observation.py +403 -0
- aptl/_labdata/src/aptl/appliance/seat/overlay.py +172 -0
- aptl/_labdata/src/aptl/appliance/seat/overlay_cleanup.py +38 -0
- aptl/_labdata/src/aptl/appliance/seat/overlay_identity.py +130 -0
- aptl/_labdata/src/aptl/appliance/seat/paths.py +48 -0
- aptl/_labdata/src/aptl/appliance/seat/persistence.py +96 -0
- aptl/_labdata/src/aptl/appliance/seat/prereqs.py +289 -0
- aptl/_labdata/src/aptl/appliance/seat/private_vm.py +156 -0
- aptl/_labdata/src/aptl/appliance/seat/privileges.py +122 -0
- aptl/_labdata/src/aptl/appliance/seat/readiness.py +247 -0
- aptl/_labdata/src/aptl/appliance/seat/retained_image.py +83 -0
- aptl/_labdata/src/aptl/appliance/seat/vm.py +465 -0
- aptl/_labdata/src/aptl/appliance/versioning.py +35 -0
- aptl/_labdata/src/aptl/backends/__init__.py +6 -0
- aptl/_labdata/src/aptl/backends/_compose_profile_index.py +160 -0
- aptl/_labdata/src/aptl/backends/_raes_admission_helpers.py +86 -0
- aptl/_labdata/src/aptl/backends/_raes_apply_helpers.py +77 -0
- aptl/_labdata/src/aptl/backends/_raes_apply_reporting.py +172 -0
- aptl/_labdata/src/aptl/backends/_raes_artifact_delivery_observation.py +332 -0
- aptl/_labdata/src/aptl/backends/_raes_backend_generated_artifacts.py +204 -0
- aptl/_labdata/src/aptl/backends/_raes_backend_implementation_catalog.py +449 -0
- aptl/_labdata/src/aptl/backends/_raes_backend_implementation_images.py +17 -0
- aptl/_labdata/src/aptl/backends/_raes_backend_implementation_profiles.py +259 -0
- aptl/_labdata/src/aptl/backends/_raes_backend_implementation_types.py +96 -0
- aptl/_labdata/src/aptl/backends/_raes_conformance_probe.py +146 -0
- aptl/_labdata/src/aptl/backends/_raes_content_spec.py +50 -0
- aptl/_labdata/src/aptl/backends/_raes_dataset_content.py +82 -0
- aptl/_labdata/src/aptl/backends/_raes_docker_materializer_observations.py +182 -0
- aptl/_labdata/src/aptl/backends/_raes_docker_observation_values.py +53 -0
- aptl/_labdata/src/aptl/backends/_raes_evaluator_engine.py +333 -0
- aptl/_labdata/src/aptl/backends/_raes_evaluator_progress.py +170 -0
- aptl/_labdata/src/aptl/backends/_raes_evidence_refresh_policy.py +46 -0
- aptl/_labdata/src/aptl/backends/_raes_guest_os_observation.py +63 -0
- aptl/_labdata/src/aptl/backends/_raes_guest_package_observation.py +174 -0
- aptl/_labdata/src/aptl/backends/_raes_guest_process_limits.py +125 -0
- aptl/_labdata/src/aptl/backends/_raes_image_policy.py +154 -0
- aptl/_labdata/src/aptl/backends/_raes_manifest_resources.py +26 -0
- aptl/_labdata/src/aptl/backends/_raes_native_evidence_acquisition.py +181 -0
- aptl/_labdata/src/aptl/backends/_raes_network_observation.py +41 -0
- aptl/_labdata/src/aptl/backends/_raes_node_realization.py +278 -0
- aptl/_labdata/src/aptl/backends/_raes_observation_helpers.py +478 -0
- aptl/_labdata/src/aptl/backends/_raes_observation_index.py +161 -0
- aptl/_labdata/src/aptl/backends/_raes_observation_ordering.py +198 -0
- aptl/_labdata/src/aptl/backends/_raes_operational_observation.py +229 -0
- aptl/_labdata/src/aptl/backends/_raes_participant_crossing.py +215 -0
- aptl/_labdata/src/aptl/backends/_raes_participant_evidence.py +203 -0
- aptl/_labdata/src/aptl/backends/_raes_participant_execution.py +485 -0
- aptl/_labdata/src/aptl/backends/_raes_participant_manifest.py +82 -0
- aptl/_labdata/src/aptl/backends/_raes_participant_models.py +73 -0
- aptl/_labdata/src/aptl/backends/_raes_participant_planning.py +383 -0
- aptl/_labdata/src/aptl/backends/_raes_participant_snapshot.py +37 -0
- aptl/_labdata/src/aptl/backends/_raes_participant_transport.py +352 -0
- aptl/_labdata/src/aptl/backends/_raes_proposition_truth.py +395 -0
- aptl/_labdata/src/aptl/backends/_raes_provisioner_start.py +296 -0
- aptl/_labdata/src/aptl/backends/_raes_provisioning_helpers.py +135 -0
- aptl/_labdata/src/aptl/backends/_raes_realization_diagnostics.py +92 -0
- aptl/_labdata/src/aptl/backends/_raes_runtime_container_observation.py +250 -0
- aptl/_labdata/src/aptl/backends/_raes_runtime_environment_observation.py +93 -0
- aptl/_labdata/src/aptl/backends/_raes_runtime_materialization_admission.py +168 -0
- aptl/_labdata/src/aptl/backends/_raes_runtime_network_observation.py +154 -0
- aptl/_labdata/src/aptl/backends/_raes_runtime_target_options.py +31 -0
- aptl/_labdata/src/aptl/backends/_raes_scenario_queries.py +187 -0
- aptl/_labdata/src/aptl/backends/_raes_scenario_resolution.py +76 -0
- aptl/_labdata/src/aptl/backends/_raes_service_index_placement.py +84 -0
- aptl/_labdata/src/aptl/backends/_raes_shuffle_implementation_catalog.py +103 -0
- aptl/_labdata/src/aptl/backends/_raes_start_failure.py +49 -0
- aptl/_labdata/src/aptl/backends/_raes_stateful_observation.py +264 -0
- aptl/_labdata/src/aptl/backends/_raes_stateful_values.py +39 -0
- aptl/_labdata/src/aptl/backends/_raes_transcript_qualification.py +71 -0
- aptl/_labdata/src/aptl/backends/_runtime_concern_disclosure.py +60 -0
- aptl/_labdata/src/aptl/backends/_runtime_concern_excess.py +248 -0
- aptl/_labdata/src/aptl/backends/_runtime_mount_observation.py +113 -0
- aptl/_labdata/src/aptl/backends/_scenario_environment.py +78 -0
- aptl/_labdata/src/aptl/backends/_scenario_startup_runtime.py +172 -0
- aptl/_labdata/src/aptl/backends/identity.py +28 -0
- aptl/_labdata/src/aptl/backends/pack_interaction.py +110 -0
- aptl/_labdata/src/aptl/backends/pack_interaction_discovery.py +336 -0
- aptl/_labdata/src/aptl/backends/raes.py +495 -0
- aptl/_labdata/src/aptl/backends/raes_account_realization.py +134 -0
- aptl/_labdata/src/aptl/backends/raes_acl_realization.py +228 -0
- aptl/_labdata/src/aptl/backends/raes_artifact_availability.py +495 -0
- aptl/_labdata/src/aptl/backends/raes_artifact_mechanisms.py +460 -0
- aptl/_labdata/src/aptl/backends/raes_artifact_satisfaction.py +425 -0
- aptl/_labdata/src/aptl/backends/raes_backend_implementation.py +410 -0
- aptl/_labdata/src/aptl/backends/raes_base_substrate.py +409 -0
- aptl/_labdata/src/aptl/backends/raes_content_realization.py +480 -0
- aptl/_labdata/src/aptl/backends/raes_content_satisfaction.py +196 -0
- aptl/_labdata/src/aptl/backends/raes_content_source_policy.py +74 -0
- aptl/_labdata/src/aptl/backends/raes_dependency_closure.py +374 -0
- aptl/_labdata/src/aptl/backends/raes_diagnostics.py +314 -0
- aptl/_labdata/src/aptl/backends/raes_docker_materializer.py +474 -0
- aptl/_labdata/src/aptl/backends/raes_evaluator.py +488 -0
- aptl/_labdata/src/aptl/backends/raes_evidence.py +175 -0
- aptl/_labdata/src/aptl/backends/raes_evidence_acquisition.py +466 -0
- aptl/_labdata/src/aptl/backends/raes_execution_helpers.py +46 -0
- aptl/_labdata/src/aptl/backends/raes_image_realization.py +460 -0
- aptl/_labdata/src/aptl/backends/raes_literal_content_realization.py +267 -0
- aptl/_labdata/src/aptl/backends/raes_manifest.py +493 -0
- aptl/_labdata/src/aptl/backends/raes_materializer.py +466 -0
- aptl/_labdata/src/aptl/backends/raes_materializer_engine.py +415 -0
- aptl/_labdata/src/aptl/backends/raes_node_materialization.py +232 -0
- aptl/_labdata/src/aptl/backends/raes_observability_scope.py +112 -0
- aptl/_labdata/src/aptl/backends/raes_observation.py +492 -0
- aptl/_labdata/src/aptl/backends/raes_operating_systems.py +151 -0
- aptl/_labdata/src/aptl/backends/raes_operator_access.py +52 -0
- aptl/_labdata/src/aptl/backends/raes_orchestrator.py +309 -0
- aptl/_labdata/src/aptl/backends/raes_pack_interaction.py +73 -0
- aptl/_labdata/src/aptl/backends/raes_package_managers.py +247 -0
- aptl/_labdata/src/aptl/backends/raes_participant_actions.py +480 -0
- aptl/_labdata/src/aptl/backends/raes_participant_apparatus.py +278 -0
- aptl/_labdata/src/aptl/backends/raes_participant_apparatus_models.py +44 -0
- aptl/_labdata/src/aptl/backends/raes_participant_bindings.py +490 -0
- aptl/_labdata/src/aptl/backends/raes_participant_candidates.py +171 -0
- aptl/_labdata/src/aptl/backends/raes_participant_control_evidence.py +155 -0
- aptl/_labdata/src/aptl/backends/raes_participant_delivery.py +33 -0
- aptl/_labdata/src/aptl/backends/raes_participant_driver.py +495 -0
- aptl/_labdata/src/aptl/backends/raes_participant_evidence_publication.py +127 -0
- aptl/_labdata/src/aptl/backends/raes_participant_execution_support.py +69 -0
- aptl/_labdata/src/aptl/backends/raes_participant_exposure.py +159 -0
- aptl/_labdata/src/aptl/backends/raes_participant_fixture.py +72 -0
- aptl/_labdata/src/aptl/backends/raes_participant_fixture_blue.py +311 -0
- aptl/_labdata/src/aptl/backends/raes_participant_fixture_core.py +456 -0
- aptl/_labdata/src/aptl/backends/raes_participant_fixture_green.py +339 -0
- aptl/_labdata/src/aptl/backends/raes_participant_fixture_red.py +285 -0
- aptl/_labdata/src/aptl/backends/raes_participant_projection.py +415 -0
- aptl/_labdata/src/aptl/backends/raes_participant_provider.py +285 -0
- aptl/_labdata/src/aptl/backends/raes_participant_realization_execution.py +485 -0
- aptl/_labdata/src/aptl/backends/raes_participant_realizations.py +482 -0
- aptl/_labdata/src/aptl/backends/raes_participant_runtime.py +484 -0
- aptl/_labdata/src/aptl/backends/raes_participant_support.py +101 -0
- aptl/_labdata/src/aptl/backends/raes_placement_realization.py +223 -0
- aptl/_labdata/src/aptl/backends/raes_planning_compat.py +499 -0
- aptl/_labdata/src/aptl/backends/raes_profiles.py +412 -0
- aptl/_labdata/src/aptl/backends/raes_provisioner.py +364 -0
- aptl/_labdata/src/aptl/backends/raes_realization.py +404 -0
- aptl/_labdata/src/aptl/backends/raes_realization_envelope.py +145 -0
- aptl/_labdata/src/aptl/backends/raes_realization_model.py +394 -0
- aptl/_labdata/src/aptl/backends/raes_realization_networks.py +285 -0
- aptl/_labdata/src/aptl/backends/raes_realization_values.py +378 -0
- aptl/_labdata/src/aptl/backends/raes_repro.py +201 -0
- aptl/_labdata/src/aptl/backends/raes_runtime_attestation.py +391 -0
- aptl/_labdata/src/aptl/backends/raes_runtime_guest_observation.py +437 -0
- aptl/_labdata/src/aptl/backends/raes_runtime_model_artifact.py +66 -0
- aptl/_labdata/src/aptl/backends/raes_runtime_observation.py +478 -0
- aptl/_labdata/src/aptl/backends/raes_runtime_orchestration.py +318 -0
- aptl/_labdata/src/aptl/backends/raes_service_index_schema.py +192 -0
- aptl/_labdata/src/aptl/backends/raes_start_model.py +73 -0
- aptl/_labdata/src/aptl/backends/raes_stateful_realization.py +479 -0
- aptl/_labdata/src/aptl/backends/raes_substrate.py +172 -0
- aptl/_labdata/src/aptl/backends/scenario_capture.py +80 -0
- aptl/_labdata/src/aptl/backends/scenario_capture_discovery.py +159 -0
- aptl/_labdata/src/aptl/backends/scenario_planning_compatibility.py +130 -0
- aptl/_labdata/src/aptl/backends/scenario_planning_compatibility_discovery.py +182 -0
- aptl/_labdata/src/aptl/backends/scenario_runtime_hooks.py +65 -0
- aptl/_labdata/src/aptl/backends/scenario_runtime_parameters.py +118 -0
- aptl/_labdata/src/aptl/backends/scenario_runtime_selection.py +52 -0
- aptl/_labdata/src/aptl/backends/scenario_service_policy.py +303 -0
- aptl/_labdata/src/aptl/backends/scenario_startup.py +496 -0
- aptl/_labdata/src/aptl/backends/scenario_startup_policy.py +211 -0
- aptl/_labdata/src/aptl/cli/__init__.py +0 -0
- aptl/_labdata/src/aptl/cli/_common.py +148 -0
- aptl/_labdata/src/aptl/cli/_start_residue.py +70 -0
- aptl/_labdata/src/aptl/cli/config.py +88 -0
- aptl/_labdata/src/aptl/cli/container.py +126 -0
- aptl/_labdata/src/aptl/cli/continuity.py +363 -0
- aptl/_labdata/src/aptl/cli/doctor.py +92 -0
- aptl/_labdata/src/aptl/cli/experiment.py +143 -0
- aptl/_labdata/src/aptl/cli/kill.py +66 -0
- aptl/_labdata/src/aptl/cli/lab.py +735 -0
- aptl/_labdata/src/aptl/cli/lab_init.py +66 -0
- aptl/_labdata/src/aptl/cli/lab_render.py +466 -0
- aptl/_labdata/src/aptl/cli/lifecycle.py +155 -0
- aptl/_labdata/src/aptl/cli/main.py +57 -0
- aptl/_labdata/src/aptl/cli/mcp_access.py +179 -0
- aptl/_labdata/src/aptl/cli/participant_profile.py +88 -0
- aptl/_labdata/src/aptl/cli/runs.py +344 -0
- aptl/_labdata/src/aptl/cli/seat.py +489 -0
- aptl/_labdata/src/aptl/cli/seat_inputs.py +119 -0
- aptl/_labdata/src/aptl/cli/web.py +164 -0
- aptl/_labdata/src/aptl/core/__init__.py +0 -0
- aptl/_labdata/src/aptl/core/_credential_sources.py +122 -0
- aptl/_labdata/src/aptl/core/_doctor_common.py +59 -0
- aptl/_labdata/src/aptl/core/_doctor_runtime.py +405 -0
- aptl/_labdata/src/aptl/core/_pack_staging.py +76 -0
- aptl/_labdata/src/aptl/core/_port_bindings.py +119 -0
- aptl/_labdata/src/aptl/core/_soc_ca_builders.py +136 -0
- aptl/_labdata/src/aptl/core/_soc_ca_chain.py +405 -0
- aptl/_labdata/src/aptl/core/_soc_ca_generation.py +205 -0
- aptl/_labdata/src/aptl/core/_soc_ca_io.py +182 -0
- aptl/_labdata/src/aptl/core/appliance_boundary.py +300 -0
- aptl/_labdata/src/aptl/core/appliance_boundary_gate.py +62 -0
- aptl/_labdata/src/aptl/core/appliance_boundary_inventory.py +422 -0
- aptl/_labdata/src/aptl/core/archival/__init__.py +58 -0
- aptl/_labdata/src/aptl/core/archival/context.py +111 -0
- aptl/_labdata/src/aptl/core/archival/coordinator.py +230 -0
- aptl/_labdata/src/aptl/core/archival/discovery_index.py +432 -0
- aptl/_labdata/src/aptl/core/archival/layout.py +62 -0
- aptl/_labdata/src/aptl/core/archival/legacy_manifest.py +153 -0
- aptl/_labdata/src/aptl/core/archival/run_record.py +144 -0
- aptl/_labdata/src/aptl/core/archival/seal.py +233 -0
- aptl/_labdata/src/aptl/core/archival/status.py +128 -0
- aptl/_labdata/src/aptl/core/archival/verify.py +149 -0
- aptl/_labdata/src/aptl/core/assets.py +289 -0
- aptl/_labdata/src/aptl/core/attacks.py +91 -0
- aptl/_labdata/src/aptl/core/certs.py +394 -0
- aptl/_labdata/src/aptl/core/collectors.py +384 -0
- aptl/_labdata/src/aptl/core/config.py +461 -0
- aptl/_labdata/src/aptl/core/content_seed.py +196 -0
- aptl/_labdata/src/aptl/core/continuity.py +651 -0
- aptl/_labdata/src/aptl/core/contracts.py +79 -0
- aptl/_labdata/src/aptl/core/correlation/__init__.py +10 -0
- aptl/_labdata/src/aptl/core/correlation/_assemble.py +362 -0
- aptl/_labdata/src/aptl/core/correlation/_extract.py +268 -0
- aptl/_labdata/src/aptl/core/correlation/builder.py +131 -0
- aptl/_labdata/src/aptl/core/correlation/clock.py +131 -0
- aptl/_labdata/src/aptl/core/correlation/identity.py +93 -0
- aptl/_labdata/src/aptl/core/correlation/models.py +412 -0
- aptl/_labdata/src/aptl/core/correlation/persistence.py +240 -0
- aptl/_labdata/src/aptl/core/correlation/rules.py +98 -0
- aptl/_labdata/src/aptl/core/credentials.py +464 -0
- aptl/_labdata/src/aptl/core/deployment/__init__.py +122 -0
- aptl/_labdata/src/aptl/core/deployment/_account_credentials.py +174 -0
- aptl/_labdata/src/aptl/core/deployment/_account_provider.py +442 -0
- aptl/_labdata/src/aptl/core/deployment/_application_provider_realization.py +91 -0
- aptl/_labdata/src/aptl/core/deployment/_authored_service_hosts.py +61 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_account_realization.py +479 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_account_verification.py +197 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_autoremove.py +165 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_base_container_realization.py +353 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_base_substrate.py +489 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_boundary.py +211 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_boundary_realization.py +346 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_build_dedupe.py +98 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_capture_apparatus.py +404 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_capture_config.py +196 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_content_mounts.py +260 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_content_realization.py +211 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_direct_network.py +130 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_environment.py +316 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_generic_base_images.py +190 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_image_fetch.py +81 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_image_realization.py +491 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_lifecycle.py +177 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_mixed_realization.py +275 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_model_realization.py +289 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_network_conflicts.py +124 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_network_realization.py +497 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_node_generation.py +229 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_node_topology.py +165 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_observability.py +263 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_owned_start.py +345 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_owner_labels.py +31 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_ownership_override.py +250 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_port_readback.py +57 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_port_realization.py +166 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_post_start.py +172 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_project_cleanup.py +127 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_project_inventory.py +174 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_queries.py +468 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_realization.py +463 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_realization_networks.py +299 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_receipt_capture.py +482 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_resource_ownership.py +357 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_resource_resolution.py +487 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_runtime_config.py +386 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_runtime_inventory.py +99 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_runtime_materialization.py +102 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_runtime_observation.py +164 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_runtime_observation_helpers.py +105 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_runtime_orchestration.py +360 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_seed_attribution.py +202 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_seed_execution.py +147 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_seed_safety.py +30 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_service_health.py +262 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_service_index_realization.py +210 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_spawn_image_realization.py +352 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stateful_artifact_helpers.py +232 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stateful_constants.py +86 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stateful_graph.py +265 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stateful_model.py +492 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stateful_override.py +47 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stateful_readiness.py +435 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stateful_realization.py +459 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stateful_services.py +49 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stateful_volumes.py +93 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_stop.py +181 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_substrate_attestation.py +309 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_substrate_gate.py +337 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_traffic_mirror.py +266 -0
- aptl/_labdata/src/aptl/core/deployment/_compose_volume_cleanup.py +80 -0
- aptl/_labdata/src/aptl/core/deployment/_cortex_service_credentials.py +102 -0
- aptl/_labdata/src/aptl/core/deployment/_declared_listener_readiness.py +125 -0
- aptl/_labdata/src/aptl/core/deployment/_docker_endpoint_binding.py +205 -0
- aptl/_labdata/src/aptl/core/deployment/_docker_image_identity.py +211 -0
- aptl/_labdata/src/aptl/core/deployment/_environment_bindings.py +460 -0
- aptl/_labdata/src/aptl/core/deployment/_flag_signing_keys.py +102 -0
- aptl/_labdata/src/aptl/core/deployment/_forwarding_agent_realization.py +321 -0
- aptl/_labdata/src/aptl/core/deployment/_misp_cache_credential.py +178 -0
- aptl/_labdata/src/aptl/core/deployment/_misp_server_tls.py +119 -0
- aptl/_labdata/src/aptl/core/deployment/_operator_access.py +411 -0
- aptl/_labdata/src/aptl/core/deployment/_operator_access_endpoints.py +90 -0
- aptl/_labdata/src/aptl/core/deployment/_operator_access_proof.py +251 -0
- aptl/_labdata/src/aptl/core/deployment/_proc_net_listeners.py +232 -0
- aptl/_labdata/src/aptl/core/deployment/_realization_primitives.py +222 -0
- aptl/_labdata/src/aptl/core/deployment/_runtime_materialization_effective.py +327 -0
- aptl/_labdata/src/aptl/core/deployment/_runtime_materialization_qualification.py +392 -0
- aptl/_labdata/src/aptl/core/deployment/_runtime_materialization_types.py +50 -0
- aptl/_labdata/src/aptl/core/deployment/_service_index_materialization.py +453 -0
- aptl/_labdata/src/aptl/core/deployment/_ssh_key_bundle.py +217 -0
- aptl/_labdata/src/aptl/core/deployment/_stateful_certificates.py +352 -0
- aptl/_labdata/src/aptl/core/deployment/_wazuh_agent_configuration.py +201 -0
- aptl/_labdata/src/aptl/core/deployment/_wazuh_agent_realization.py +406 -0
- aptl/_labdata/src/aptl/core/deployment/_wazuh_attestation.py +377 -0
- aptl/_labdata/src/aptl/core/deployment/_wazuh_identity.py +129 -0
- aptl/_labdata/src/aptl/core/deployment/backend.py +441 -0
- aptl/_labdata/src/aptl/core/deployment/backend_container_ops.py +183 -0
- aptl/_labdata/src/aptl/core/deployment/backend_host_inventory.py +92 -0
- aptl/_labdata/src/aptl/core/deployment/boundary.py +395 -0
- aptl/_labdata/src/aptl/core/deployment/boundary_compiler.py +311 -0
- aptl/_labdata/src/aptl/core/deployment/docker_compose.py +437 -0
- aptl/_labdata/src/aptl/core/deployment/errors.py +40 -0
- aptl/_labdata/src/aptl/core/deployment/observation.py +86 -0
- aptl/_labdata/src/aptl/core/deployment/realization.py +472 -0
- aptl/_labdata/src/aptl/core/deployment/runtime_materialization.py +21 -0
- aptl/_labdata/src/aptl/core/deployment/ssh_compose.py +143 -0
- aptl/_labdata/src/aptl/core/detection.py +248 -0
- aptl/_labdata/src/aptl/core/doctor.py +247 -0
- aptl/_labdata/src/aptl/core/endpoints.py +350 -0
- aptl/_labdata/src/aptl/core/env.py +424 -0
- aptl/_labdata/src/aptl/core/ephemeral_containers.py +175 -0
- aptl/_labdata/src/aptl/core/evidence/__init__.py +6 -0
- aptl/_labdata/src/aptl/core/evidence/_persist.py +373 -0
- aptl/_labdata/src/aptl/core/evidence/adapters/__init__.py +6 -0
- aptl/_labdata/src/aptl/core/evidence/adapters/builtins.py +129 -0
- aptl/_labdata/src/aptl/core/evidence/adapters/sources.py +154 -0
- aptl/_labdata/src/aptl/core/evidence/adapters/wiring.py +49 -0
- aptl/_labdata/src/aptl/core/evidence/content_store.py +123 -0
- aptl/_labdata/src/aptl/core/evidence/coordinator.py +465 -0
- aptl/_labdata/src/aptl/core/evidence/outcomes.py +110 -0
- aptl/_labdata/src/aptl/core/evidence/protocol.py +119 -0
- aptl/_labdata/src/aptl/core/evidence/records.py +172 -0
- aptl/_labdata/src/aptl/core/evidence/visibility.py +39 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/__init__.py +31 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/_collect.py +430 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/_io.py +78 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/archive.py +247 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/build.py +259 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/closure.py +148 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/codes.py +43 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/envelope.py +158 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/errors.py +24 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/inventory.py +175 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/limits.py +48 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/models.py +92 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/projections/__init__.py +31 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/projections/jsonl.py +109 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/projections/ocsf.py +105 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/projections/parquet.py +267 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/projections/registry.py +120 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/schemas.py +111 -0
- aptl/_labdata/src/aptl/core/evidence_bundle/verify.py +366 -0
- aptl/_labdata/src/aptl/core/execution/__init__.py +31 -0
- aptl/_labdata/src/aptl/core/execution/apparatus.py +173 -0
- aptl/_labdata/src/aptl/core/execution/assembly.py +417 -0
- aptl/_labdata/src/aptl/core/execution/bridges.py +177 -0
- aptl/_labdata/src/aptl/core/execution/executor.py +272 -0
- aptl/_labdata/src/aptl/core/execution_boundary.py +454 -0
- aptl/_labdata/src/aptl/core/experiment/__init__.py +10 -0
- aptl/_labdata/src/aptl/core/experiment/_capture_matching.py +89 -0
- aptl/_labdata/src/aptl/core/experiment/admission.py +412 -0
- aptl/_labdata/src/aptl/core/experiment/admission_artifacts.py +273 -0
- aptl/_labdata/src/aptl/core/experiment/admission_steps.py +375 -0
- aptl/_labdata/src/aptl/core/experiment/apparatus.py +452 -0
- aptl/_labdata/src/aptl/core/experiment/bindings.py +434 -0
- aptl/_labdata/src/aptl/core/experiment/capture_mapping.py +122 -0
- aptl/_labdata/src/aptl/core/experiment/capture_plan.py +207 -0
- aptl/_labdata/src/aptl/core/experiment/capture_registry.py +462 -0
- aptl/_labdata/src/aptl/core/experiment/controller.py +142 -0
- aptl/_labdata/src/aptl/core/experiment/errors.py +227 -0
- aptl/_labdata/src/aptl/core/experiment/policy.py +182 -0
- aptl/_labdata/src/aptl/core/experiment/resolver.py +367 -0
- aptl/_labdata/src/aptl/core/experiment/spec_loading.py +311 -0
- aptl/_labdata/src/aptl/core/experiment/trial_plan.py +483 -0
- aptl/_labdata/src/aptl/core/experiment/trial_plan_models.py +111 -0
- aptl/_labdata/src/aptl/core/exporter.py +200 -0
- aptl/_labdata/src/aptl/core/flags.py +176 -0
- aptl/_labdata/src/aptl/core/health.py +139 -0
- aptl/_labdata/src/aptl/core/host_keys.py +242 -0
- aptl/_labdata/src/aptl/core/host_ports.py +422 -0
- aptl/_labdata/src/aptl/core/hostenv.py +141 -0
- aptl/_labdata/src/aptl/core/kill.py +497 -0
- aptl/_labdata/src/aptl/core/lab.py +4888 -0
- aptl/_labdata/src/aptl/core/lab_types.py +221 -0
- aptl/_labdata/src/aptl/core/lifecycle_cleanup.py +248 -0
- aptl/_labdata/src/aptl/core/lifecycle_enforce.py +346 -0
- aptl/_labdata/src/aptl/core/lifecycle_guard.py +454 -0
- aptl/_labdata/src/aptl/core/lifecycle_policy.py +257 -0
- aptl/_labdata/src/aptl/core/mcp_ingress.py +56 -0
- aptl/_labdata/src/aptl/core/objectives.py +161 -0
- aptl/_labdata/src/aptl/core/operator_group_state.py +100 -0
- aptl/_labdata/src/aptl/core/provenance/__init__.py +27 -0
- aptl/_labdata/src/aptl/core/provenance/coordinator.py +370 -0
- aptl/_labdata/src/aptl/core/provenance/identity.py +150 -0
- aptl/_labdata/src/aptl/core/provenance/outcomes.py +172 -0
- aptl/_labdata/src/aptl/core/provenance/protocol.py +97 -0
- aptl/_labdata/src/aptl/core/provenance/providers/__init__.py +13 -0
- aptl/_labdata/src/aptl/core/provenance/providers/_degraded.py +93 -0
- aptl/_labdata/src/aptl/core/provenance/providers/apparatus.py +111 -0
- aptl/_labdata/src/aptl/core/provenance/providers/artifacts.py +156 -0
- aptl/_labdata/src/aptl/core/provenance/providers/config_identity.py +173 -0
- aptl/_labdata/src/aptl/core/provenance/providers/detection.py +284 -0
- aptl/_labdata/src/aptl/core/provenance/providers/experiment.py +166 -0
- aptl/_labdata/src/aptl/core/provenance/providers/participant.py +103 -0
- aptl/_labdata/src/aptl/core/provenance/providers/runtime_facts.py +269 -0
- aptl/_labdata/src/aptl/core/provenance/record.py +133 -0
- aptl/_labdata/src/aptl/core/provenance/registrations.py +222 -0
- aptl/_labdata/src/aptl/core/provenance/registry.py +219 -0
- aptl/_labdata/src/aptl/core/runstore.py +487 -0
- aptl/_labdata/src/aptl/core/runstore_internals.py +234 -0
- aptl/_labdata/src/aptl/core/runtime/__init__.py +13 -0
- aptl/_labdata/src/aptl/core/runtime/workflow_engine.py +436 -0
- aptl/_labdata/src/aptl/core/scenario_bundle.py +317 -0
- aptl/_labdata/src/aptl/core/scenario_catalog.py +285 -0
- aptl/_labdata/src/aptl/core/scenarios.py +39 -0
- aptl/_labdata/src/aptl/core/seed_spec.py +59 -0
- aptl/_labdata/src/aptl/core/services.py +320 -0
- aptl/_labdata/src/aptl/core/session.py +408 -0
- aptl/_labdata/src/aptl/core/snapshot.py +469 -0
- aptl/_labdata/src/aptl/core/snapshot_models.py +127 -0
- aptl/_labdata/src/aptl/core/soc_ca.py +365 -0
- aptl/_labdata/src/aptl/core/ssh.py +362 -0
- aptl/_labdata/src/aptl/core/startup_reset_state.py +407 -0
- aptl/_labdata/src/aptl/core/suricata_seed.py +377 -0
- aptl/_labdata/src/aptl/core/sysreqs.py +266 -0
- aptl/_labdata/src/aptl/core/telemetry.py +277 -0
- aptl/_labdata/src/aptl/core/telemetry_export.py +87 -0
- aptl/_labdata/src/aptl/runtime_authority.py +123 -0
- aptl/_labdata/src/aptl/services/__init__.py +1 -0
- aptl/_labdata/src/aptl/services/misp_suricata_sync/__init__.py +10 -0
- aptl/_labdata/src/aptl/services/misp_suricata_sync/config.py +174 -0
- aptl/_labdata/src/aptl/services/misp_suricata_sync/main.py +191 -0
- aptl/_labdata/src/aptl/services/misp_suricata_sync/misp_client.py +108 -0
- aptl/_labdata/src/aptl/services/misp_suricata_sync/models.py +48 -0
- aptl/_labdata/src/aptl/services/misp_suricata_sync/rule_writer.py +46 -0
- aptl/_labdata/src/aptl/services/misp_suricata_sync/suricata_reloader.py +95 -0
- aptl/_labdata/src/aptl/services/misp_suricata_sync/translator.py +357 -0
- aptl/_labdata/src/aptl/utils/__init__.py +0 -0
- aptl/_labdata/src/aptl/utils/_pathsafe_core.py +231 -0
- aptl/_labdata/src/aptl/utils/_pathsafe_read.py +188 -0
- aptl/_labdata/src/aptl/utils/curl_safe.py +286 -0
- aptl/_labdata/src/aptl/utils/deterministic_archive.py +82 -0
- aptl/_labdata/src/aptl/utils/logging.py +44 -0
- aptl/_labdata/src/aptl/utils/mcp_packaging.py +262 -0
- aptl/_labdata/src/aptl/utils/pathsafe.py +409 -0
- aptl/_labdata/src/aptl/utils/placeholders.py +32 -0
- aptl/_labdata/src/aptl/utils/redaction.py +1094 -0
- aptl/_labdata/src/aptl/utils/shell.py +134 -0
- aptl/_labdata/src/aptl/utils/strict_json.py +47 -0
- aptl/_labdata/src/aptl/validation/__init__.py +1 -0
- aptl/_labdata/src/aptl/validation/_account_parity.py +126 -0
- aptl/_labdata/src/aptl/validation/_gate_checks.py +430 -0
- aptl/_labdata/src/aptl/validation/_gate_no_start_backend.py +295 -0
- aptl/_labdata/src/aptl/validation/_gate_raes_cli.py +100 -0
- aptl/_labdata/src/aptl/validation/_live_gate_alerts.py +25 -0
- aptl/_labdata/src/aptl/validation/_live_gate_checks.py +414 -0
- aptl/_labdata/src/aptl/validation/_live_gate_models.py +198 -0
- aptl/_labdata/src/aptl/validation/_live_gate_operations.py +260 -0
- aptl/_labdata/src/aptl/validation/_live_gate_probes.py +437 -0
- aptl/_labdata/src/aptl/validation/_live_gate_readiness.py +192 -0
- aptl/_labdata/src/aptl/validation/_live_gate_telemetry.py +110 -0
- aptl/_labdata/src/aptl/validation/_live_gate_variation.py +92 -0
- aptl/_labdata/src/aptl/validation/_scenario_verification_contract.py +323 -0
- aptl/_labdata/src/aptl/validation/curated_live_proof.py +325 -0
- aptl/_labdata/src/aptl/validation/mcp_protocol.py +271 -0
- aptl/_labdata/src/aptl/validation/participant_live_proof.py +452 -0
- aptl/_labdata/src/aptl/validation/participant_mcp_smoke.py +223 -0
- aptl/_labdata/src/aptl/validation/participant_profile.py +369 -0
- aptl/_labdata/src/aptl/validation/participant_profile_models.py +366 -0
- aptl/_labdata/src/aptl/validation/participant_proof_redaction.py +107 -0
- aptl/_labdata/src/aptl/validation/participant_qualification.py +320 -0
- aptl/_labdata/src/aptl/validation/participant_qualification_evidence.py +333 -0
- aptl/_labdata/src/aptl/validation/range_snapshot_summary.py +51 -0
- aptl/_labdata/src/aptl/validation/realization_declaration_gate.py +112 -0
- aptl/_labdata/src/aptl/validation/research_scenario_catalog.py +45 -0
- aptl/_labdata/src/aptl/validation/scenario_verification.py +343 -0
- aptl/_labdata/src/aptl/validation/scenario_verification_discovery.py +395 -0
- aptl/_labdata/src/aptl/validation/techvault_gate.py +152 -0
- aptl/_labdata/src/aptl/validation/techvault_live_gate.py +475 -0
- aptl/_labdata/src/aptl/workbench/__init__.py +57 -0
- aptl/_labdata/src/aptl/workbench/_pipe_exchange.py +186 -0
- aptl/_labdata/src/aptl/workbench/access.py +154 -0
- aptl/_labdata/src/aptl/workbench/access_clients.py +183 -0
- aptl/_labdata/src/aptl/workbench/agent.py +493 -0
- aptl/_labdata/src/aptl/workbench/app.py +326 -0
- aptl/_labdata/src/aptl/workbench/bootstrap.py +299 -0
- aptl/_labdata/src/aptl/workbench/browser_gateway.py +372 -0
- aptl/_labdata/src/aptl/workbench/browser_mcp.py +190 -0
- aptl/_labdata/src/aptl/workbench/client_files.py +163 -0
- aptl/_labdata/src/aptl/workbench/codex_agent.py +313 -0
- aptl/_labdata/src/aptl/workbench/credentials.py +81 -0
- aptl/_labdata/src/aptl/workbench/decision_schema.py +63 -0
- aptl/_labdata/src/aptl/workbench/dispatch.py +224 -0
- aptl/_labdata/src/aptl/workbench/guest_binding.py +464 -0
- aptl/_labdata/src/aptl/workbench/mcp_results.py +76 -0
- aptl/_labdata/src/aptl/workbench/participant_source_binding.py +156 -0
- aptl/_labdata/src/aptl/workbench/preparation.py +262 -0
- aptl/_labdata/src/aptl/workbench/process.py +385 -0
- aptl/_labdata/src/aptl/workbench/profiles.py +334 -0
- aptl/_labdata/src/aptl/workbench/relay.py +295 -0
- aptl/_labdata/src/aptl/workbench/runtime.py +363 -0
- aptl/_labdata/src/aptl_techvault/README.md +102 -0
- aptl/_labdata/src/aptl_techvault/__init__.py +30 -0
- aptl/_labdata/src/aptl_techvault/build_cache.py +113 -0
- aptl/_labdata/src/aptl_techvault/capture.py +123 -0
- aptl/_labdata/src/aptl_techvault/capture_registrations.py +478 -0
- aptl/_labdata/src/aptl_techvault/database.py +312 -0
- aptl/_labdata/src/aptl_techvault/database_access.py +287 -0
- aptl/_labdata/src/aptl_techvault/database_support.py +99 -0
- aptl/_labdata/src/aptl_techvault/evidence/__init__.py +1 -0
- aptl/_labdata/src/aptl_techvault/evidence/_techvault_native_cortex.py +183 -0
- aptl/_labdata/src/aptl_techvault/evidence/proposition_truth.py +211 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault.py +441 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_enrollment_baseline.py +99 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_manager_alerts.py +98 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_misp_readiness.py +179 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_native.py +457 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_native_readiness.py +465 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_native_support.py +209 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_readiness.py +164 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_readiness_probes.py +446 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_telemetry_stimulus.py +215 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_transcript.py +384 -0
- aptl/_labdata/src/aptl_techvault/evidence/techvault_wazuh_agent_readiness.py +180 -0
- aptl/_labdata/src/aptl_techvault/evidence/transcript_parsing.py +303 -0
- aptl/_labdata/src/aptl_techvault/log_source_support.py +407 -0
- aptl/_labdata/src/aptl_techvault/log_sources.py +445 -0
- aptl/_labdata/src/aptl_techvault/participant_smoke.py +202 -0
- aptl/_labdata/src/aptl_techvault/planning_compatibility.py +68 -0
- aptl/_labdata/src/aptl_techvault/redis_acl_observation.py +149 -0
- aptl/_labdata/src/aptl_techvault/runtime_parameters.py +77 -0
- aptl/_labdata/src/aptl_techvault/serving.py +89 -0
- aptl/_labdata/src/aptl_techvault/startup.py +493 -0
- aptl/_labdata/src/aptl_techvault/study.py +105 -0
- aptl/_labdata/src/aptl_techvault/study_capture_registrations.py +62 -0
- aptl/_labdata/src/aptl_techvault/verification.py +255 -0
- aptl/_labdata/src/aptl_techvault/wazuh_credentials.py +62 -0
- aptl/_labdata/uv.lock +2928 -0
- aptl/_labdata/web/.dockerignore +6 -0
- aptl/_labdata/web/Caddyfile +33 -0
- aptl/_labdata/web/Dockerfile +39 -0
- aptl/_labdata/web/Dockerfile.api +57 -0
- aptl/_labdata/web/caddy-build/go.mod +171 -0
- aptl/_labdata/web/caddy-build/go.sum +587 -0
- aptl/_labdata/web/caddy-build/main.go +12 -0
- aptl/_labdata/web/package-lock.json +3749 -0
- aptl/_labdata/web/package.json +41 -0
- aptl/_labdata/web/src/app.css +225 -0
- aptl/_labdata/web/src/app.html +16 -0
- aptl/_labdata/web/src/lib/api.ts +182 -0
- aptl/_labdata/web/src/lib/bff.ts +138 -0
- aptl/_labdata/web/src/lib/components/ConfigSummaryList.svelte +84 -0
- aptl/_labdata/web/src/lib/components/ContainerCard.svelte +96 -0
- aptl/_labdata/web/src/lib/components/ContainerGrid.svelte +22 -0
- aptl/_labdata/web/src/lib/components/KillConfirmDialog.svelte +70 -0
- aptl/_labdata/web/src/lib/components/LabStartNotice.svelte +111 -0
- aptl/_labdata/web/src/lib/components/LabStatusBadge.svelte +20 -0
- aptl/_labdata/web/src/lib/components/LocalUseNoticeDialog.svelte +45 -0
- aptl/_labdata/web/src/lib/components/NavBar.svelte +32 -0
- aptl/_labdata/web/src/lib/components/PrivacyDetailsPanel.svelte +61 -0
- aptl/_labdata/web/src/lib/components/ScenarioCard.svelte +72 -0
- aptl/_labdata/web/src/lib/components/SettingsDialog.svelte +169 -0
- aptl/_labdata/web/src/lib/components/Terminal.svelte +217 -0
- aptl/_labdata/web/src/lib/components/kit/Badge.svelte +37 -0
- aptl/_labdata/web/src/lib/components/kit/Button.svelte +57 -0
- aptl/_labdata/web/src/lib/components/kit/Dialog.svelte +96 -0
- aptl/_labdata/web/src/lib/components/kit/Field.svelte +60 -0
- aptl/_labdata/web/src/lib/components/kit/Menu.svelte +153 -0
- aptl/_labdata/web/src/lib/components/kit/Select.svelte +62 -0
- aptl/_labdata/web/src/lib/components/kit/StatusBadge.svelte +17 -0
- aptl/_labdata/web/src/lib/components/kit/Table.svelte +48 -0
- aptl/_labdata/web/src/lib/components/kit/TextInput.svelte +56 -0
- aptl/_labdata/web/src/lib/components/kit/field-context.ts +16 -0
- aptl/_labdata/web/src/lib/components/kit/focus-trap.ts +70 -0
- aptl/_labdata/web/src/lib/components/kit/id.ts +13 -0
- aptl/_labdata/web/src/lib/components/kit/index.ts +28 -0
- aptl/_labdata/web/src/lib/components/kit/tone.ts +64 -0
- aptl/_labdata/web/src/lib/components/workbench/ContainerStatusBlock.svelte +35 -0
- aptl/_labdata/web/src/lib/components/workbench/NarrativeBlock.svelte +15 -0
- aptl/_labdata/web/src/lib/components/workbench/ObjectiveBlock.svelte +33 -0
- aptl/_labdata/web/src/lib/components/workbench/SectionDivider.svelte +13 -0
- aptl/_labdata/web/src/lib/components/workbench/SiemQueryBlock.svelte +31 -0
- aptl/_labdata/web/src/lib/components/workbench/StepBlock.svelte +32 -0
- aptl/_labdata/web/src/lib/components/workbench/TerminalBlock.svelte +41 -0
- aptl/_labdata/web/src/lib/components/workbench/WorkbenchStatusBar.svelte +92 -0
- aptl/_labdata/web/src/lib/container-state.ts +6 -0
- aptl/_labdata/web/src/lib/markdown.ts +12 -0
- aptl/_labdata/web/src/lib/session.ts +75 -0
- aptl/_labdata/web/src/lib/stores/lab.ts +91 -0
- aptl/_labdata/web/src/lib/stores/preferences.ts +259 -0
- aptl/_labdata/web/src/lib/stores/ui.ts +60 -0
- aptl/_labdata/web/src/lib/time.ts +44 -0
- aptl/_labdata/web/src/lib/types.ts +221 -0
- aptl/_labdata/web/src/routes/+error.svelte +16 -0
- aptl/_labdata/web/src/routes/+layout.svelte +53 -0
- aptl/_labdata/web/src/routes/+layout.ts +16 -0
- aptl/_labdata/web/src/routes/+page.svelte +245 -0
- aptl/_labdata/web/src/routes/+page.ts +24 -0
- aptl/_labdata/web/src/routes/config/+page.svelte +26 -0
- aptl/_labdata/web/src/routes/config/+page.ts +21 -0
- aptl/_labdata/web/src/routes/scenarios/[id]/+page.svelte +52 -0
- aptl/_labdata/web/src/routes/scenarios/[id]/+page.ts +27 -0
- aptl/_labdata/web/src/routes/terminal/[container]/+page.svelte +95 -0
- aptl/_labdata/web/svelte.config.js +36 -0
- aptl/_labdata/web/tests/components/ConfigSummaryList.test.ts +76 -0
- aptl/_labdata/web/tests/components/KillConfirmDialog.test.ts +81 -0
- aptl/_labdata/web/tests/components/LabStartNotice.test.ts +147 -0
- aptl/_labdata/web/tests/components/LabStatusBadge.test.ts +17 -0
- aptl/_labdata/web/tests/components/LocalUseNoticeDialog.test.ts +55 -0
- aptl/_labdata/web/tests/components/NavBar.test.ts +31 -0
- aptl/_labdata/web/tests/components/PrivacyDetailsPanel.test.ts +40 -0
- aptl/_labdata/web/tests/components/ScenarioCard.test.ts +76 -0
- aptl/_labdata/web/tests/components/SettingsDialog.test.ts +60 -0
- aptl/_labdata/web/tests/components/Terminal.test.ts +231 -0
- aptl/_labdata/web/tests/components/kit/Badge.test.ts +42 -0
- aptl/_labdata/web/tests/components/kit/Button.test.ts +51 -0
- aptl/_labdata/web/tests/components/kit/Dialog.test.ts +64 -0
- aptl/_labdata/web/tests/components/kit/Field.test.ts +37 -0
- aptl/_labdata/web/tests/components/kit/Menu.test.ts +74 -0
- aptl/_labdata/web/tests/components/kit/Select.test.ts +35 -0
- aptl/_labdata/web/tests/components/kit/StatusBadge.test.ts +17 -0
- aptl/_labdata/web/tests/components/kit/Table.test.ts +28 -0
- aptl/_labdata/web/tests/components/kit/TextInput.test.ts +28 -0
- aptl/_labdata/web/tests/components/kit/fixtures/DialogHarness.svelte +22 -0
- aptl/_labdata/web/tests/components/kit/fixtures/FieldHarness.svelte +17 -0
- aptl/_labdata/web/tests/components/kit/fixtures/SelectHarness.svelte +23 -0
- aptl/_labdata/web/tests/components/kit/fixtures/TableHarness.svelte +20 -0
- aptl/_labdata/web/tests/components/kit/fixtures/TextInputHarness.svelte +16 -0
- aptl/_labdata/web/tests/components/kit/focus-trap.test.ts +78 -0
- aptl/_labdata/web/tests/components/kit/helpers.ts +15 -0
- aptl/_labdata/web/tests/components/kit/tone.test.ts +48 -0
- aptl/_labdata/web/tests/components/workbench/blocks.test.ts +99 -0
- aptl/_labdata/web/tests/lib/api.test.ts +331 -0
- aptl/_labdata/web/tests/lib/bff.test.ts +185 -0
- aptl/_labdata/web/tests/lib/container-state.test.ts +23 -0
- aptl/_labdata/web/tests/lib/markdown.test.ts +48 -0
- aptl/_labdata/web/tests/lib/preferences.test.ts +158 -0
- aptl/_labdata/web/tests/lib/routes.test.ts +130 -0
- aptl/_labdata/web/tests/lib/session.test.ts +79 -0
- aptl/_labdata/web/tests/lib/stores.test.ts +220 -0
- aptl/_labdata/web/tests/lib/time.test.ts +30 -0
- aptl/_labdata/web/tests/lib/ui.test.ts +84 -0
- aptl/_labdata/web/tests/routes/config-page.test.ts +64 -0
- aptl/_labdata/web/tests/routes/fixtures/LayoutHarness.svelte +7 -0
- aptl/_labdata/web/tests/routes/layout.test.ts +32 -0
- aptl/_labdata/web/tests/routes/page.test.ts +193 -0
- aptl/_labdata/web/tests/routes/scenario-workbench.test.ts +139 -0
- aptl/_labdata/web/tests/routes/terminal-page.test.ts +97 -0
- aptl/_labdata/web/tests/setup.ts +1 -0
- aptl/_labdata/web/tsconfig.json +14 -0
- aptl/_labdata/web/vite.config.ts +20 -0
- aptl/_labdata/web/vitest.config.ts +22 -0
- aptl/api/__init__.py +1 -0
- aptl/api/deps.py +243 -0
- aptl/api/main.py +177 -0
- aptl/api/middleware/__init__.py +1 -0
- aptl/api/middleware/bff.py +188 -0
- aptl/api/routers/__init__.py +1 -0
- aptl/api/routers/config.py +62 -0
- aptl/api/routers/kill.py +50 -0
- aptl/api/routers/lab.py +203 -0
- aptl/api/routers/scenarios.py +96 -0
- aptl/api/routers/terminal.py +357 -0
- aptl/api/scenario_projection.py +277 -0
- aptl/api/schemas.py +338 -0
- aptl/api/session.py +166 -0
- aptl/appliance/__init__.py +1 -0
- aptl/appliance/access_service.py +363 -0
- aptl/appliance/access_service_support.py +208 -0
- aptl/appliance/download.py +264 -0
- aptl/appliance/errors.py +5 -0
- aptl/appliance/guest_observation.py +631 -0
- aptl/appliance/guest_services.py +27 -0
- aptl/appliance/guest_surfaces.py +142 -0
- aptl/appliance/input_images.py +185 -0
- aptl/appliance/input_profile.py +244 -0
- aptl/appliance/loopback_proxy.py +123 -0
- aptl/appliance/policy.py +55 -0
- aptl/appliance/seat/__init__.py +45 -0
- aptl/appliance/seat/_device.py +45 -0
- aptl/appliance/seat/access.py +445 -0
- aptl/appliance/seat/access_clients.py +87 -0
- aptl/appliance/seat/access_state.py +104 -0
- aptl/appliance/seat/allocation.py +359 -0
- aptl/appliance/seat/aptl-seat.pub +4 -0
- aptl/appliance/seat/context.py +71 -0
- aptl/appliance/seat/errors.py +12 -0
- aptl/appliance/seat/exposure.py +136 -0
- aptl/appliance/seat/image.py +492 -0
- aptl/appliance/seat/image_config.py +99 -0
- aptl/appliance/seat/image_disk_cache.py +149 -0
- aptl/appliance/seat/image_selection.py +466 -0
- aptl/appliance/seat/image_trust.py +190 -0
- aptl/appliance/seat/image_update.py +96 -0
- aptl/appliance/seat/kiosk.py +144 -0
- aptl/appliance/seat/launch_descriptor.py +104 -0
- aptl/appliance/seat/lifecycle.py +1272 -0
- aptl/appliance/seat/locking.py +129 -0
- aptl/appliance/seat/maintenance.py +66 -0
- aptl/appliance/seat/models.py +81 -0
- aptl/appliance/seat/namespace.py +48 -0
- aptl/appliance/seat/observation.py +403 -0
- aptl/appliance/seat/overlay.py +172 -0
- aptl/appliance/seat/overlay_cleanup.py +38 -0
- aptl/appliance/seat/overlay_identity.py +130 -0
- aptl/appliance/seat/paths.py +48 -0
- aptl/appliance/seat/persistence.py +96 -0
- aptl/appliance/seat/prereqs.py +289 -0
- aptl/appliance/seat/private_vm.py +156 -0
- aptl/appliance/seat/privileges.py +122 -0
- aptl/appliance/seat/readiness.py +247 -0
- aptl/appliance/seat/retained_image.py +83 -0
- aptl/appliance/seat/vm.py +465 -0
- aptl/appliance/versioning.py +35 -0
- aptl/backends/__init__.py +6 -0
- aptl/backends/_compose_profile_index.py +160 -0
- aptl/backends/_raes_admission_helpers.py +86 -0
- aptl/backends/_raes_apply_helpers.py +77 -0
- aptl/backends/_raes_apply_reporting.py +172 -0
- aptl/backends/_raes_artifact_delivery_observation.py +332 -0
- aptl/backends/_raes_backend_generated_artifacts.py +204 -0
- aptl/backends/_raes_backend_implementation_catalog.py +449 -0
- aptl/backends/_raes_backend_implementation_images.py +17 -0
- aptl/backends/_raes_backend_implementation_profiles.py +259 -0
- aptl/backends/_raes_backend_implementation_types.py +96 -0
- aptl/backends/_raes_conformance_probe.py +146 -0
- aptl/backends/_raes_content_spec.py +50 -0
- aptl/backends/_raes_dataset_content.py +82 -0
- aptl/backends/_raes_docker_materializer_observations.py +182 -0
- aptl/backends/_raes_docker_observation_values.py +53 -0
- aptl/backends/_raes_evaluator_engine.py +333 -0
- aptl/backends/_raes_evaluator_progress.py +170 -0
- aptl/backends/_raes_evidence_refresh_policy.py +46 -0
- aptl/backends/_raes_guest_os_observation.py +63 -0
- aptl/backends/_raes_guest_package_observation.py +174 -0
- aptl/backends/_raes_guest_process_limits.py +125 -0
- aptl/backends/_raes_image_policy.py +154 -0
- aptl/backends/_raes_manifest_resources.py +26 -0
- aptl/backends/_raes_native_evidence_acquisition.py +181 -0
- aptl/backends/_raes_network_observation.py +41 -0
- aptl/backends/_raes_node_realization.py +278 -0
- aptl/backends/_raes_observation_helpers.py +478 -0
- aptl/backends/_raes_observation_index.py +161 -0
- aptl/backends/_raes_observation_ordering.py +198 -0
- aptl/backends/_raes_operational_observation.py +229 -0
- aptl/backends/_raes_participant_crossing.py +215 -0
- aptl/backends/_raes_participant_evidence.py +203 -0
- aptl/backends/_raes_participant_execution.py +485 -0
- aptl/backends/_raes_participant_manifest.py +82 -0
- aptl/backends/_raes_participant_models.py +73 -0
- aptl/backends/_raes_participant_planning.py +383 -0
- aptl/backends/_raes_participant_snapshot.py +37 -0
- aptl/backends/_raes_participant_transport.py +352 -0
- aptl/backends/_raes_proposition_truth.py +395 -0
- aptl/backends/_raes_provisioner_start.py +296 -0
- aptl/backends/_raes_provisioning_helpers.py +135 -0
- aptl/backends/_raes_realization_diagnostics.py +92 -0
- aptl/backends/_raes_runtime_container_observation.py +250 -0
- aptl/backends/_raes_runtime_environment_observation.py +93 -0
- aptl/backends/_raes_runtime_materialization_admission.py +168 -0
- aptl/backends/_raes_runtime_network_observation.py +154 -0
- aptl/backends/_raes_runtime_target_options.py +31 -0
- aptl/backends/_raes_scenario_queries.py +187 -0
- aptl/backends/_raes_scenario_resolution.py +76 -0
- aptl/backends/_raes_service_index_placement.py +84 -0
- aptl/backends/_raes_shuffle_implementation_catalog.py +103 -0
- aptl/backends/_raes_start_failure.py +49 -0
- aptl/backends/_raes_stateful_observation.py +264 -0
- aptl/backends/_raes_stateful_values.py +39 -0
- aptl/backends/_raes_transcript_qualification.py +71 -0
- aptl/backends/_runtime_concern_disclosure.py +60 -0
- aptl/backends/_runtime_concern_excess.py +248 -0
- aptl/backends/_runtime_mount_observation.py +113 -0
- aptl/backends/_scenario_environment.py +78 -0
- aptl/backends/_scenario_startup_runtime.py +172 -0
- aptl/backends/identity.py +28 -0
- aptl/backends/pack_interaction.py +110 -0
- aptl/backends/pack_interaction_discovery.py +336 -0
- aptl/backends/raes.py +495 -0
- aptl/backends/raes_account_realization.py +134 -0
- aptl/backends/raes_acl_realization.py +228 -0
- aptl/backends/raes_artifact_availability.py +495 -0
- aptl/backends/raes_artifact_mechanisms.py +460 -0
- aptl/backends/raes_artifact_satisfaction.py +425 -0
- aptl/backends/raes_backend_implementation.py +410 -0
- aptl/backends/raes_base_substrate.py +409 -0
- aptl/backends/raes_content_realization.py +480 -0
- aptl/backends/raes_content_satisfaction.py +196 -0
- aptl/backends/raes_content_source_policy.py +74 -0
- aptl/backends/raes_dependency_closure.py +374 -0
- aptl/backends/raes_diagnostics.py +314 -0
- aptl/backends/raes_docker_materializer.py +474 -0
- aptl/backends/raes_evaluator.py +488 -0
- aptl/backends/raes_evidence.py +175 -0
- aptl/backends/raes_evidence_acquisition.py +466 -0
- aptl/backends/raes_execution_helpers.py +46 -0
- aptl/backends/raes_image_realization.py +460 -0
- aptl/backends/raes_literal_content_realization.py +267 -0
- aptl/backends/raes_manifest.py +493 -0
- aptl/backends/raes_materializer.py +466 -0
- aptl/backends/raes_materializer_engine.py +415 -0
- aptl/backends/raes_node_materialization.py +232 -0
- aptl/backends/raes_observability_scope.py +112 -0
- aptl/backends/raes_observation.py +492 -0
- aptl/backends/raes_operating_systems.py +151 -0
- aptl/backends/raes_operator_access.py +52 -0
- aptl/backends/raes_orchestrator.py +309 -0
- aptl/backends/raes_pack_interaction.py +73 -0
- aptl/backends/raes_package_managers.py +247 -0
- aptl/backends/raes_participant_actions.py +480 -0
- aptl/backends/raes_participant_apparatus.py +278 -0
- aptl/backends/raes_participant_apparatus_models.py +44 -0
- aptl/backends/raes_participant_bindings.py +490 -0
- aptl/backends/raes_participant_candidates.py +171 -0
- aptl/backends/raes_participant_control_evidence.py +155 -0
- aptl/backends/raes_participant_delivery.py +33 -0
- aptl/backends/raes_participant_driver.py +495 -0
- aptl/backends/raes_participant_evidence_publication.py +127 -0
- aptl/backends/raes_participant_execution_support.py +69 -0
- aptl/backends/raes_participant_exposure.py +159 -0
- aptl/backends/raes_participant_fixture.py +72 -0
- aptl/backends/raes_participant_fixture_blue.py +311 -0
- aptl/backends/raes_participant_fixture_core.py +456 -0
- aptl/backends/raes_participant_fixture_green.py +339 -0
- aptl/backends/raes_participant_fixture_red.py +285 -0
- aptl/backends/raes_participant_projection.py +415 -0
- aptl/backends/raes_participant_provider.py +285 -0
- aptl/backends/raes_participant_realization_execution.py +485 -0
- aptl/backends/raes_participant_realizations.py +482 -0
- aptl/backends/raes_participant_runtime.py +484 -0
- aptl/backends/raes_participant_support.py +101 -0
- aptl/backends/raes_placement_realization.py +223 -0
- aptl/backends/raes_planning_compat.py +499 -0
- aptl/backends/raes_profiles.py +412 -0
- aptl/backends/raes_provisioner.py +364 -0
- aptl/backends/raes_realization.py +404 -0
- aptl/backends/raes_realization_envelope.py +145 -0
- aptl/backends/raes_realization_model.py +394 -0
- aptl/backends/raes_realization_networks.py +285 -0
- aptl/backends/raes_realization_values.py +378 -0
- aptl/backends/raes_repro.py +201 -0
- aptl/backends/raes_runtime_attestation.py +391 -0
- aptl/backends/raes_runtime_guest_observation.py +437 -0
- aptl/backends/raes_runtime_model_artifact.py +66 -0
- aptl/backends/raes_runtime_observation.py +478 -0
- aptl/backends/raes_runtime_orchestration.py +318 -0
- aptl/backends/raes_service_index_schema.py +192 -0
- aptl/backends/raes_start_model.py +73 -0
- aptl/backends/raes_stateful_realization.py +479 -0
- aptl/backends/raes_substrate.py +172 -0
- aptl/backends/scenario_capture.py +80 -0
- aptl/backends/scenario_capture_discovery.py +159 -0
- aptl/backends/scenario_planning_compatibility.py +130 -0
- aptl/backends/scenario_planning_compatibility_discovery.py +182 -0
- aptl/backends/scenario_runtime_hooks.py +65 -0
- aptl/backends/scenario_runtime_parameters.py +118 -0
- aptl/backends/scenario_runtime_selection.py +52 -0
- aptl/backends/scenario_service_policy.py +303 -0
- aptl/backends/scenario_startup.py +496 -0
- aptl/backends/scenario_startup_policy.py +211 -0
- aptl/cli/__init__.py +0 -0
- aptl/cli/_common.py +148 -0
- aptl/cli/_start_residue.py +70 -0
- aptl/cli/config.py +88 -0
- aptl/cli/container.py +126 -0
- aptl/cli/continuity.py +363 -0
- aptl/cli/doctor.py +92 -0
- aptl/cli/experiment.py +143 -0
- aptl/cli/kill.py +66 -0
- aptl/cli/lab.py +735 -0
- aptl/cli/lab_init.py +66 -0
- aptl/cli/lab_render.py +466 -0
- aptl/cli/lifecycle.py +155 -0
- aptl/cli/main.py +57 -0
- aptl/cli/mcp_access.py +179 -0
- aptl/cli/participant_profile.py +88 -0
- aptl/cli/runs.py +344 -0
- aptl/cli/seat.py +489 -0
- aptl/cli/seat_inputs.py +119 -0
- aptl/cli/web.py +164 -0
- aptl/core/__init__.py +0 -0
- aptl/core/_credential_sources.py +122 -0
- aptl/core/_doctor_common.py +59 -0
- aptl/core/_doctor_runtime.py +405 -0
- aptl/core/_pack_staging.py +76 -0
- aptl/core/_port_bindings.py +119 -0
- aptl/core/_soc_ca_builders.py +136 -0
- aptl/core/_soc_ca_chain.py +405 -0
- aptl/core/_soc_ca_generation.py +205 -0
- aptl/core/_soc_ca_io.py +182 -0
- aptl/core/appliance_boundary.py +300 -0
- aptl/core/appliance_boundary_gate.py +62 -0
- aptl/core/appliance_boundary_inventory.py +422 -0
- aptl/core/archival/__init__.py +58 -0
- aptl/core/archival/context.py +111 -0
- aptl/core/archival/coordinator.py +230 -0
- aptl/core/archival/discovery_index.py +432 -0
- aptl/core/archival/layout.py +62 -0
- aptl/core/archival/legacy_manifest.py +153 -0
- aptl/core/archival/run_record.py +144 -0
- aptl/core/archival/seal.py +233 -0
- aptl/core/archival/status.py +128 -0
- aptl/core/archival/verify.py +149 -0
- aptl/core/assets.py +289 -0
- aptl/core/attacks.py +91 -0
- aptl/core/certs.py +394 -0
- aptl/core/collectors.py +384 -0
- aptl/core/config.py +461 -0
- aptl/core/content_seed.py +196 -0
- aptl/core/continuity.py +651 -0
- aptl/core/contracts.py +79 -0
- aptl/core/correlation/__init__.py +10 -0
- aptl/core/correlation/_assemble.py +362 -0
- aptl/core/correlation/_extract.py +268 -0
- aptl/core/correlation/builder.py +131 -0
- aptl/core/correlation/clock.py +131 -0
- aptl/core/correlation/identity.py +93 -0
- aptl/core/correlation/models.py +412 -0
- aptl/core/correlation/persistence.py +240 -0
- aptl/core/correlation/rules.py +98 -0
- aptl/core/credentials.py +464 -0
- aptl/core/deployment/__init__.py +122 -0
- aptl/core/deployment/_account_credentials.py +174 -0
- aptl/core/deployment/_account_provider.py +442 -0
- aptl/core/deployment/_application_provider_realization.py +91 -0
- aptl/core/deployment/_authored_service_hosts.py +61 -0
- aptl/core/deployment/_compose_account_realization.py +479 -0
- aptl/core/deployment/_compose_account_verification.py +197 -0
- aptl/core/deployment/_compose_autoremove.py +165 -0
- aptl/core/deployment/_compose_base_container_realization.py +353 -0
- aptl/core/deployment/_compose_base_substrate.py +489 -0
- aptl/core/deployment/_compose_boundary.py +211 -0
- aptl/core/deployment/_compose_boundary_realization.py +346 -0
- aptl/core/deployment/_compose_build_dedupe.py +98 -0
- aptl/core/deployment/_compose_capture_apparatus.py +404 -0
- aptl/core/deployment/_compose_capture_config.py +196 -0
- aptl/core/deployment/_compose_content_mounts.py +260 -0
- aptl/core/deployment/_compose_content_realization.py +211 -0
- aptl/core/deployment/_compose_direct_network.py +130 -0
- aptl/core/deployment/_compose_environment.py +316 -0
- aptl/core/deployment/_compose_generic_base_images.py +190 -0
- aptl/core/deployment/_compose_image_fetch.py +81 -0
- aptl/core/deployment/_compose_image_realization.py +491 -0
- aptl/core/deployment/_compose_lifecycle.py +177 -0
- aptl/core/deployment/_compose_mixed_realization.py +275 -0
- aptl/core/deployment/_compose_model_realization.py +289 -0
- aptl/core/deployment/_compose_network_conflicts.py +124 -0
- aptl/core/deployment/_compose_network_realization.py +497 -0
- aptl/core/deployment/_compose_node_generation.py +229 -0
- aptl/core/deployment/_compose_node_topology.py +165 -0
- aptl/core/deployment/_compose_observability.py +263 -0
- aptl/core/deployment/_compose_owned_start.py +345 -0
- aptl/core/deployment/_compose_owner_labels.py +31 -0
- aptl/core/deployment/_compose_ownership_override.py +250 -0
- aptl/core/deployment/_compose_port_readback.py +57 -0
- aptl/core/deployment/_compose_port_realization.py +166 -0
- aptl/core/deployment/_compose_post_start.py +172 -0
- aptl/core/deployment/_compose_project_cleanup.py +127 -0
- aptl/core/deployment/_compose_project_inventory.py +174 -0
- aptl/core/deployment/_compose_queries.py +468 -0
- aptl/core/deployment/_compose_realization.py +463 -0
- aptl/core/deployment/_compose_realization_networks.py +299 -0
- aptl/core/deployment/_compose_receipt_capture.py +482 -0
- aptl/core/deployment/_compose_resource_ownership.py +357 -0
- aptl/core/deployment/_compose_resource_resolution.py +487 -0
- aptl/core/deployment/_compose_runtime_config.py +386 -0
- aptl/core/deployment/_compose_runtime_inventory.py +99 -0
- aptl/core/deployment/_compose_runtime_materialization.py +102 -0
- aptl/core/deployment/_compose_runtime_observation.py +164 -0
- aptl/core/deployment/_compose_runtime_observation_helpers.py +105 -0
- aptl/core/deployment/_compose_runtime_orchestration.py +360 -0
- aptl/core/deployment/_compose_seed_attribution.py +202 -0
- aptl/core/deployment/_compose_seed_execution.py +147 -0
- aptl/core/deployment/_compose_seed_safety.py +30 -0
- aptl/core/deployment/_compose_service_health.py +262 -0
- aptl/core/deployment/_compose_service_index_realization.py +210 -0
- aptl/core/deployment/_compose_spawn_image_realization.py +352 -0
- aptl/core/deployment/_compose_stateful_artifact_helpers.py +232 -0
- aptl/core/deployment/_compose_stateful_constants.py +86 -0
- aptl/core/deployment/_compose_stateful_graph.py +265 -0
- aptl/core/deployment/_compose_stateful_model.py +492 -0
- aptl/core/deployment/_compose_stateful_override.py +47 -0
- aptl/core/deployment/_compose_stateful_readiness.py +435 -0
- aptl/core/deployment/_compose_stateful_realization.py +459 -0
- aptl/core/deployment/_compose_stateful_services.py +49 -0
- aptl/core/deployment/_compose_stateful_volumes.py +93 -0
- aptl/core/deployment/_compose_stop.py +181 -0
- aptl/core/deployment/_compose_substrate_attestation.py +309 -0
- aptl/core/deployment/_compose_substrate_gate.py +337 -0
- aptl/core/deployment/_compose_traffic_mirror.py +266 -0
- aptl/core/deployment/_compose_volume_cleanup.py +80 -0
- aptl/core/deployment/_cortex_service_credentials.py +102 -0
- aptl/core/deployment/_declared_listener_readiness.py +125 -0
- aptl/core/deployment/_docker_endpoint_binding.py +205 -0
- aptl/core/deployment/_docker_image_identity.py +211 -0
- aptl/core/deployment/_environment_bindings.py +460 -0
- aptl/core/deployment/_flag_signing_keys.py +102 -0
- aptl/core/deployment/_forwarding_agent_realization.py +321 -0
- aptl/core/deployment/_misp_cache_credential.py +178 -0
- aptl/core/deployment/_misp_server_tls.py +119 -0
- aptl/core/deployment/_operator_access.py +411 -0
- aptl/core/deployment/_operator_access_endpoints.py +90 -0
- aptl/core/deployment/_operator_access_proof.py +251 -0
- aptl/core/deployment/_proc_net_listeners.py +232 -0
- aptl/core/deployment/_realization_primitives.py +222 -0
- aptl/core/deployment/_runtime_materialization_effective.py +327 -0
- aptl/core/deployment/_runtime_materialization_qualification.py +392 -0
- aptl/core/deployment/_runtime_materialization_types.py +50 -0
- aptl/core/deployment/_service_index_materialization.py +453 -0
- aptl/core/deployment/_ssh_key_bundle.py +217 -0
- aptl/core/deployment/_stateful_certificates.py +352 -0
- aptl/core/deployment/_wazuh_agent_configuration.py +201 -0
- aptl/core/deployment/_wazuh_agent_realization.py +406 -0
- aptl/core/deployment/_wazuh_attestation.py +377 -0
- aptl/core/deployment/_wazuh_identity.py +129 -0
- aptl/core/deployment/backend.py +441 -0
- aptl/core/deployment/backend_container_ops.py +183 -0
- aptl/core/deployment/backend_host_inventory.py +92 -0
- aptl/core/deployment/boundary.py +395 -0
- aptl/core/deployment/boundary_compiler.py +311 -0
- aptl/core/deployment/docker_compose.py +437 -0
- aptl/core/deployment/errors.py +40 -0
- aptl/core/deployment/observation.py +86 -0
- aptl/core/deployment/realization.py +472 -0
- aptl/core/deployment/runtime_materialization.py +21 -0
- aptl/core/deployment/ssh_compose.py +143 -0
- aptl/core/detection.py +248 -0
- aptl/core/doctor.py +247 -0
- aptl/core/endpoints.py +350 -0
- aptl/core/env.py +424 -0
- aptl/core/ephemeral_containers.py +175 -0
- aptl/core/evidence/__init__.py +6 -0
- aptl/core/evidence/_persist.py +373 -0
- aptl/core/evidence/adapters/__init__.py +6 -0
- aptl/core/evidence/adapters/builtins.py +129 -0
- aptl/core/evidence/adapters/sources.py +154 -0
- aptl/core/evidence/adapters/wiring.py +49 -0
- aptl/core/evidence/content_store.py +123 -0
- aptl/core/evidence/coordinator.py +465 -0
- aptl/core/evidence/outcomes.py +110 -0
- aptl/core/evidence/protocol.py +119 -0
- aptl/core/evidence/records.py +172 -0
- aptl/core/evidence/visibility.py +39 -0
- aptl/core/evidence_bundle/__init__.py +31 -0
- aptl/core/evidence_bundle/_collect.py +430 -0
- aptl/core/evidence_bundle/_io.py +78 -0
- aptl/core/evidence_bundle/archive.py +247 -0
- aptl/core/evidence_bundle/build.py +259 -0
- aptl/core/evidence_bundle/closure.py +148 -0
- aptl/core/evidence_bundle/codes.py +43 -0
- aptl/core/evidence_bundle/envelope.py +158 -0
- aptl/core/evidence_bundle/errors.py +24 -0
- aptl/core/evidence_bundle/inventory.py +175 -0
- aptl/core/evidence_bundle/limits.py +48 -0
- aptl/core/evidence_bundle/models.py +92 -0
- aptl/core/evidence_bundle/projections/__init__.py +31 -0
- aptl/core/evidence_bundle/projections/jsonl.py +109 -0
- aptl/core/evidence_bundle/projections/ocsf.py +105 -0
- aptl/core/evidence_bundle/projections/parquet.py +267 -0
- aptl/core/evidence_bundle/projections/registry.py +120 -0
- aptl/core/evidence_bundle/schemas.py +111 -0
- aptl/core/evidence_bundle/verify.py +366 -0
- aptl/core/execution/__init__.py +31 -0
- aptl/core/execution/apparatus.py +173 -0
- aptl/core/execution/assembly.py +417 -0
- aptl/core/execution/bridges.py +177 -0
- aptl/core/execution/executor.py +272 -0
- aptl/core/execution_boundary.py +454 -0
- aptl/core/experiment/__init__.py +10 -0
- aptl/core/experiment/_capture_matching.py +89 -0
- aptl/core/experiment/admission.py +412 -0
- aptl/core/experiment/admission_artifacts.py +273 -0
- aptl/core/experiment/admission_steps.py +375 -0
- aptl/core/experiment/apparatus.py +452 -0
- aptl/core/experiment/bindings.py +434 -0
- aptl/core/experiment/capture_mapping.py +122 -0
- aptl/core/experiment/capture_plan.py +207 -0
- aptl/core/experiment/capture_registry.py +462 -0
- aptl/core/experiment/controller.py +142 -0
- aptl/core/experiment/errors.py +227 -0
- aptl/core/experiment/policy.py +182 -0
- aptl/core/experiment/resolver.py +367 -0
- aptl/core/experiment/spec_loading.py +311 -0
- aptl/core/experiment/trial_plan.py +483 -0
- aptl/core/experiment/trial_plan_models.py +111 -0
- aptl/core/exporter.py +200 -0
- aptl/core/flags.py +176 -0
- aptl/core/health.py +139 -0
- aptl/core/host_keys.py +242 -0
- aptl/core/host_ports.py +422 -0
- aptl/core/hostenv.py +141 -0
- aptl/core/kill.py +497 -0
- aptl/core/lab.py +4888 -0
- aptl/core/lab_types.py +221 -0
- aptl/core/lifecycle_cleanup.py +248 -0
- aptl/core/lifecycle_enforce.py +346 -0
- aptl/core/lifecycle_guard.py +454 -0
- aptl/core/lifecycle_policy.py +257 -0
- aptl/core/mcp_ingress.py +56 -0
- aptl/core/objectives.py +161 -0
- aptl/core/operator_group_state.py +100 -0
- aptl/core/provenance/__init__.py +27 -0
- aptl/core/provenance/coordinator.py +370 -0
- aptl/core/provenance/identity.py +150 -0
- aptl/core/provenance/outcomes.py +172 -0
- aptl/core/provenance/protocol.py +97 -0
- aptl/core/provenance/providers/__init__.py +13 -0
- aptl/core/provenance/providers/_degraded.py +93 -0
- aptl/core/provenance/providers/apparatus.py +111 -0
- aptl/core/provenance/providers/artifacts.py +156 -0
- aptl/core/provenance/providers/config_identity.py +173 -0
- aptl/core/provenance/providers/detection.py +284 -0
- aptl/core/provenance/providers/experiment.py +166 -0
- aptl/core/provenance/providers/participant.py +103 -0
- aptl/core/provenance/providers/runtime_facts.py +269 -0
- aptl/core/provenance/record.py +133 -0
- aptl/core/provenance/registrations.py +222 -0
- aptl/core/provenance/registry.py +219 -0
- aptl/core/runstore.py +487 -0
- aptl/core/runstore_internals.py +234 -0
- aptl/core/runtime/__init__.py +13 -0
- aptl/core/runtime/workflow_engine.py +436 -0
- aptl/core/scenario_bundle.py +317 -0
- aptl/core/scenario_catalog.py +285 -0
- aptl/core/scenarios.py +39 -0
- aptl/core/seed_spec.py +59 -0
- aptl/core/services.py +320 -0
- aptl/core/session.py +408 -0
- aptl/core/snapshot.py +469 -0
- aptl/core/snapshot_models.py +127 -0
- aptl/core/soc_ca.py +365 -0
- aptl/core/ssh.py +362 -0
- aptl/core/startup_reset_state.py +407 -0
- aptl/core/suricata_seed.py +377 -0
- aptl/core/sysreqs.py +266 -0
- aptl/core/telemetry.py +277 -0
- aptl/core/telemetry_export.py +87 -0
- aptl/runtime_authority.py +123 -0
- aptl/services/__init__.py +1 -0
- aptl/services/misp_suricata_sync/__init__.py +10 -0
- aptl/services/misp_suricata_sync/config.py +174 -0
- aptl/services/misp_suricata_sync/main.py +191 -0
- aptl/services/misp_suricata_sync/misp_client.py +108 -0
- aptl/services/misp_suricata_sync/models.py +48 -0
- aptl/services/misp_suricata_sync/rule_writer.py +46 -0
- aptl/services/misp_suricata_sync/suricata_reloader.py +95 -0
- aptl/services/misp_suricata_sync/translator.py +357 -0
- aptl/utils/__init__.py +0 -0
- aptl/utils/_pathsafe_core.py +231 -0
- aptl/utils/_pathsafe_read.py +188 -0
- aptl/utils/curl_safe.py +286 -0
- aptl/utils/deterministic_archive.py +82 -0
- aptl/utils/logging.py +44 -0
- aptl/utils/mcp_packaging.py +262 -0
- aptl/utils/pathsafe.py +409 -0
- aptl/utils/placeholders.py +32 -0
- aptl/utils/redaction.py +1094 -0
- aptl/utils/shell.py +134 -0
- aptl/utils/strict_json.py +47 -0
- aptl/validation/__init__.py +1 -0
- aptl/validation/_account_parity.py +126 -0
- aptl/validation/_gate_checks.py +430 -0
- aptl/validation/_gate_no_start_backend.py +295 -0
- aptl/validation/_gate_raes_cli.py +100 -0
- aptl/validation/_live_gate_alerts.py +25 -0
- aptl/validation/_live_gate_checks.py +414 -0
- aptl/validation/_live_gate_models.py +198 -0
- aptl/validation/_live_gate_operations.py +260 -0
- aptl/validation/_live_gate_probes.py +437 -0
- aptl/validation/_live_gate_readiness.py +192 -0
- aptl/validation/_live_gate_telemetry.py +110 -0
- aptl/validation/_live_gate_variation.py +92 -0
- aptl/validation/_scenario_verification_contract.py +323 -0
- aptl/validation/curated_live_proof.py +325 -0
- aptl/validation/mcp_protocol.py +271 -0
- aptl/validation/participant_live_proof.py +452 -0
- aptl/validation/participant_mcp_smoke.py +223 -0
- aptl/validation/participant_profile.py +369 -0
- aptl/validation/participant_profile_models.py +366 -0
- aptl/validation/participant_proof_redaction.py +107 -0
- aptl/validation/participant_qualification.py +320 -0
- aptl/validation/participant_qualification_evidence.py +333 -0
- aptl/validation/range_snapshot_summary.py +51 -0
- aptl/validation/realization_declaration_gate.py +112 -0
- aptl/validation/research_scenario_catalog.py +45 -0
- aptl/validation/scenario_verification.py +343 -0
- aptl/validation/scenario_verification_discovery.py +395 -0
- aptl/validation/techvault_gate.py +152 -0
- aptl/validation/techvault_live_gate.py +475 -0
- aptl/workbench/__init__.py +57 -0
- aptl/workbench/_pipe_exchange.py +186 -0
- aptl/workbench/access.py +154 -0
- aptl/workbench/access_clients.py +183 -0
- aptl/workbench/agent.py +493 -0
- aptl/workbench/app.py +326 -0
- aptl/workbench/bootstrap.py +299 -0
- aptl/workbench/browser_gateway.py +372 -0
- aptl/workbench/browser_mcp.py +190 -0
- aptl/workbench/client_files.py +163 -0
- aptl/workbench/codex_agent.py +313 -0
- aptl/workbench/credentials.py +81 -0
- aptl/workbench/decision_schema.py +63 -0
- aptl/workbench/dispatch.py +224 -0
- aptl/workbench/guest_binding.py +464 -0
- aptl/workbench/mcp_results.py +76 -0
- aptl/workbench/participant_source_binding.py +156 -0
- aptl/workbench/preparation.py +262 -0
- aptl/workbench/process.py +385 -0
- aptl/workbench/profiles.py +334 -0
- aptl/workbench/relay.py +295 -0
- aptl/workbench/runtime.py +363 -0
- aptl_techvault/README.md +102 -0
- aptl_techvault/__init__.py +30 -0
- aptl_techvault/build_cache.py +113 -0
- aptl_techvault/capture.py +123 -0
- aptl_techvault/capture_registrations.py +478 -0
- aptl_techvault/database.py +312 -0
- aptl_techvault/database_access.py +287 -0
- aptl_techvault/database_support.py +99 -0
- aptl_techvault/evidence/__init__.py +1 -0
- aptl_techvault/evidence/_techvault_native_cortex.py +183 -0
- aptl_techvault/evidence/proposition_truth.py +211 -0
- aptl_techvault/evidence/techvault.py +441 -0
- aptl_techvault/evidence/techvault_enrollment_baseline.py +99 -0
- aptl_techvault/evidence/techvault_manager_alerts.py +98 -0
- aptl_techvault/evidence/techvault_misp_readiness.py +179 -0
- aptl_techvault/evidence/techvault_native.py +457 -0
- aptl_techvault/evidence/techvault_native_readiness.py +465 -0
- aptl_techvault/evidence/techvault_native_support.py +209 -0
- aptl_techvault/evidence/techvault_readiness.py +164 -0
- aptl_techvault/evidence/techvault_readiness_probes.py +446 -0
- aptl_techvault/evidence/techvault_telemetry_stimulus.py +215 -0
- aptl_techvault/evidence/techvault_transcript.py +384 -0
- aptl_techvault/evidence/techvault_wazuh_agent_readiness.py +180 -0
- aptl_techvault/evidence/transcript_parsing.py +303 -0
- aptl_techvault/log_source_support.py +407 -0
- aptl_techvault/log_sources.py +445 -0
- aptl_techvault/participant_smoke.py +202 -0
- aptl_techvault/planning_compatibility.py +68 -0
- aptl_techvault/redis_acl_observation.py +149 -0
- aptl_techvault/runtime_parameters.py +77 -0
- aptl_techvault/serving.py +89 -0
- aptl_techvault/startup.py +493 -0
- aptl_techvault/study.py +105 -0
- aptl_techvault/study_capture_registrations.py +62 -0
- aptl_techvault/verification.py +255 -0
- aptl_techvault/wazuh_credentials.py +62 -0
- lilrae-8.0.0.dist-info/METADATA +252 -0
- lilrae-8.0.0.dist-info/RECORD +1585 -0
- lilrae-8.0.0.dist-info/WHEEL +4 -0
- lilrae-8.0.0.dist-info/entry_points.txt +34 -0
- lilrae-8.0.0.dist-info/licenses/LICENSE +21 -0
aptl/__init__.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"""Advanced Purple Team Lab CLI."""
|
|
2
|
+
|
|
3
|
+
# Version is bumped by release-please in lockstep with pyproject.toml on every
|
|
4
|
+
# release, via the `extra-files` entry in release-please-config.json plus the
|
|
5
|
+
# `x-release-please-version` annotation below (the python updater only rewrites
|
|
6
|
+
# pyproject.toml, not this src-layout __init__.py). Keep the annotation comment
|
|
7
|
+
# on the same line as the literal, and keep the literal equal to pyproject's
|
|
8
|
+
# `version` — test_version_consistency.py enforces the latter.
|
|
9
|
+
__version__ = "8.0.0" # x-release-please-version
|
aptl/_asset_manifest.py
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""Single source of truth for the bundled lab-asset manifest (DEP-008).
|
|
2
|
+
|
|
3
|
+
This module is imported by *two* consumers that run in different
|
|
4
|
+
environments, so it must stay dependency-free (standard library only):
|
|
5
|
+
|
|
6
|
+
* ``aptl.core.assets`` (runtime) — decides what a source checkout
|
|
7
|
+
materializes into a lab project directory.
|
|
8
|
+
* ``hatch_build.py`` (build time) — decides what the wheel ships under
|
|
9
|
+
``aptl/_labdata/``. The build environment only has build backend
|
|
10
|
+
dependencies, so this module must not import pydantic, typer, or any
|
|
11
|
+
other runtime dependency.
|
|
12
|
+
|
|
13
|
+
Keeping the manifest here means the wheel's bundled asset set and a
|
|
14
|
+
checkout's materialized set can never drift.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
# Top-level asset roots bundled into the wheel and materialized by
|
|
20
|
+
# ``aptl lab init``. Each tracked file maps to the same relative path.
|
|
21
|
+
# Derived from docker-compose.yml build contexts and bind mounts plus the
|
|
22
|
+
# host-side steps in ``aptl lab start`` (issue #659):
|
|
23
|
+
# - several services build with ``context: .`` and
|
|
24
|
+
# ``COPY pyproject.toml README.md src`` + ``pip install .``
|
|
25
|
+
# (misp-suricata-sync, web API), so those + ``hatch_build.py`` (a declared
|
|
26
|
+
# wheel build hook) are needed;
|
|
27
|
+
# - ``web/`` is its own build context and ``scripts/`` is bind-mounted;
|
|
28
|
+
# - ``mcp/`` holds ``build-all-mcps.sh`` and the MCP server sources that the
|
|
29
|
+
# ``build_mcps`` start step compiles (needs node/npm on the host);
|
|
30
|
+
# - ``.mcp.json.example`` seeds MCP client config; ``.dockerignore`` keeps
|
|
31
|
+
# build contexts lean.
|
|
32
|
+
# ``keys/`` and ``.aptl/`` are generated at lab start (zero tracked files) and
|
|
33
|
+
# are intentionally absent.
|
|
34
|
+
ASSET_ROOTS: tuple[str, ...] = (
|
|
35
|
+
"docker-compose.yml",
|
|
36
|
+
"docker-compose.observability.yml",
|
|
37
|
+
"docker-compose.capture.yml",
|
|
38
|
+
".dockerignore",
|
|
39
|
+
"generate-indexer-certs.yml",
|
|
40
|
+
".env.example",
|
|
41
|
+
".mcp.json.example",
|
|
42
|
+
"pyproject.toml",
|
|
43
|
+
"uv.lock",
|
|
44
|
+
"requirements",
|
|
45
|
+
"README.md",
|
|
46
|
+
"hatch_build.py",
|
|
47
|
+
"src",
|
|
48
|
+
"participant-profiles/techvault-full-v1",
|
|
49
|
+
"appliance",
|
|
50
|
+
"config",
|
|
51
|
+
"containers",
|
|
52
|
+
"web",
|
|
53
|
+
"scripts",
|
|
54
|
+
"mcp",
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Presence of this file marks a full lab-distribution build context. Minimal
|
|
58
|
+
# package build contexts — e.g. the service container images that
|
|
59
|
+
# ``COPY pyproject.toml README.md src`` then ``pip install .`` — do not carry
|
|
60
|
+
# it, so the build hook skips asset bundling there (issue #659 review): those
|
|
61
|
+
# images must still load the declared hook (hatch_build.py is copied in), but
|
|
62
|
+
# must not pull the multi-megabyte lab bundle into a service wheel.
|
|
63
|
+
DISTRIBUTION_MARKER = "docker-compose.yml"
|
|
64
|
+
|
|
65
|
+
# Directory names never bundled even beneath a tracked root. Only consulted
|
|
66
|
+
# by the no-git walk fallback; ``git ls-files`` already omits every one.
|
|
67
|
+
# Mirrors the gitignored secret/state and dev-artifact directories so a
|
|
68
|
+
# fallback selection cannot ship them.
|
|
69
|
+
EXCLUDED_DIR_NAMES: frozenset[str] = frozenset(
|
|
70
|
+
{
|
|
71
|
+
"__pycache__",
|
|
72
|
+
"node_modules",
|
|
73
|
+
".venv",
|
|
74
|
+
"dist",
|
|
75
|
+
"build",
|
|
76
|
+
".mypy_cache",
|
|
77
|
+
".ruff_cache",
|
|
78
|
+
".pytest_cache",
|
|
79
|
+
".hypothesis",
|
|
80
|
+
".git",
|
|
81
|
+
"soc_certs",
|
|
82
|
+
"lab-ssh",
|
|
83
|
+
"wazuh_indexer_ssl_certs",
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
EXCLUDED_SUFFIXES: tuple[str, ...] = (".pyc", ".pyo")
|
|
88
|
+
|
|
89
|
+
# Where the bundle lives inside the wheel / installed package.
|
|
90
|
+
LABDATA_DIRNAME = "_labdata"
|
|
91
|
+
LABDATA_PREFIX = f"aptl/{LABDATA_DIRNAME}"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.git
|
|
2
|
+
.github
|
|
3
|
+
.venv
|
|
4
|
+
.pytest_cache
|
|
5
|
+
.mypy_cache
|
|
6
|
+
__pycache__
|
|
7
|
+
*.pyc
|
|
8
|
+
node_modules
|
|
9
|
+
**/node_modules
|
|
10
|
+
# `containers/` is intentionally NOT excluded: the in-process target
|
|
11
|
+
# images (ad / dns / fileshare / webapp; issue #248) and the remaining
|
|
12
|
+
# `wazuh-sidecar` image build from the repo root and need access to the
|
|
13
|
+
# shared `containers/_wazuh-agent/` files plus their own per-container
|
|
14
|
+
# subdirectory. Per-container build contexts (victim, workstation, kali,
|
|
15
|
+
# etc.) read their own `.dockerignore` so they're unaffected.
|
|
16
|
+
docs/
|
|
17
|
+
notes/
|
|
18
|
+
coverage.xml
|
|
19
|
+
.coverage
|
|
20
|
+
*.egg-info
|
|
21
|
+
dist/
|
|
22
|
+
build/
|
|
23
|
+
.svelte-kit
|
|
24
|
+
web/node_modules
|
|
25
|
+
web/.svelte-kit
|
|
26
|
+
web/tests
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# APTL Lab Credentials
|
|
2
|
+
# Copy this file to .env; `aptl lab start` hydrates it, filling every
|
|
3
|
+
# CHANGE_ME placeholder with a runnable value (randomizing real secrets). You
|
|
4
|
+
# only need to supply values you specifically want to pin.
|
|
5
|
+
# The .env file is gitignored and will not be committed.
|
|
6
|
+
#
|
|
7
|
+
# NOTE: INDEXER_* and DASHBOARD_* below are NOT user-selectable. They must match
|
|
8
|
+
# the OpenSearch demo-user hashes baked into the checked-in
|
|
9
|
+
# config/wazuh_indexer/internal_users.yml (admin=SecretPassword,
|
|
10
|
+
# kibanaserver=kibanaserver); the indexer never recomputes those hashes from
|
|
11
|
+
# .env. Leave the placeholders (hydration fills the correct fixtures) or set the
|
|
12
|
+
# exact fixture values. Any other value is reconciled back at start with a
|
|
13
|
+
# warning, because the indexer would otherwise reject it.
|
|
14
|
+
|
|
15
|
+
# Wazuh Indexer / OpenSearch admin credentials (auto-managed fixture)
|
|
16
|
+
INDEXER_USERNAME=admin
|
|
17
|
+
INDEXER_PASSWORD=CHANGE_ME_indexer_password
|
|
18
|
+
|
|
19
|
+
# Wazuh Dashboard internal user (auto-managed fixture)
|
|
20
|
+
DASHBOARD_USERNAME=kibanaserver
|
|
21
|
+
DASHBOARD_PASSWORD=CHANGE_ME_dashboard_password
|
|
22
|
+
|
|
23
|
+
# Wazuh API credentials
|
|
24
|
+
API_USERNAME=wazuh-wui
|
|
25
|
+
API_PASSWORD=CHANGE_ME_api_password
|
|
26
|
+
|
|
27
|
+
# Wazuh cluster key
|
|
28
|
+
WAZUH_CLUSTER_KEY=CHANGE_ME_cluster_key
|
|
29
|
+
|
|
30
|
+
# Web control-plane API token (ADR-039). Required when running the optional
|
|
31
|
+
# aptl-web-api and aptl-web-ui services. The API rejects missing, empty, or
|
|
32
|
+
# placeholder values at runtime. Generate a real token with:
|
|
33
|
+
# python3 -c 'import secrets; print(secrets.token_hex(32))'
|
|
34
|
+
APTL_API_TOKEN=CHANGE_ME_api_token
|
|
35
|
+
|
|
36
|
+
# Identity of the aptl-web-api container (issue #1193). It never runs as root:
|
|
37
|
+
# it runs as the user that owns this project (the one who runs `aptl lab
|
|
38
|
+
# start`), so it can read the owner-only lab state under .aptl/, and joins only
|
|
39
|
+
# the Docker socket's group. Set both from the project owner's shell:
|
|
40
|
+
# echo "APTL_WEB_API_USER=$(id -u):$(id -g)"
|
|
41
|
+
# echo "APTL_DOCKER_SOCKET_GID=$(stat -c %g /var/run/docker.sock)"
|
|
42
|
+
# Left unset, the web API container refuses to start.
|
|
43
|
+
APTL_WEB_API_USER=CHANGE_ME_uid:gid
|
|
44
|
+
APTL_DOCKER_SOCKET_GID=CHANGE_ME_docker_socket_gid
|
|
45
|
+
|
|
46
|
+
# Enterprise services
|
|
47
|
+
DB_PASSWORD=techvault_db_pass
|
|
48
|
+
AD_ADMIN_PASSWORD=Admin123!
|
|
49
|
+
|
|
50
|
+
# SOC tools
|
|
51
|
+
MISP_ADMIN_PASSWORD=MispAdmin2024!
|
|
52
|
+
# MISP REST API auth key. Used by both the MISP server (as ADMIN_KEY) and
|
|
53
|
+
# every downstream consumer (aptl-misp-suricata-sync, mcp-threatintel, etc.).
|
|
54
|
+
# Generate a fresh 40-character alphanumeric value with:
|
|
55
|
+
# tr -dc A-Za-z0-9 </dev/urandom | head -c 40 ; echo
|
|
56
|
+
# The placeholder below is rejected by aptl-misp-suricata-sync at startup
|
|
57
|
+
# so the lab fails loudly if you forget to replace it.
|
|
58
|
+
MISP_API_KEY=PLEASEREPLACEMEPLEASEREPLACEMEPLEASEREPLACE
|
|
59
|
+
# TLS verification for SOC stack consumers connecting to MISP.
|
|
60
|
+
# SEC-006 / ADR-034 (issue #258) made the lab-managed CA the default
|
|
61
|
+
# trust anchor: ServiceConfig defaults MISP_VERIFY_SSL to true, and the
|
|
62
|
+
# misp-suricata-sync container mounts the CA bundle at
|
|
63
|
+
# /etc/lab-ca/lab-ca.pem. Leaving these lines commented out (or unset)
|
|
64
|
+
# lets the in-code defaults win. Override only for local debugging, e.g.
|
|
65
|
+
# while iterating on a self-signed MISP fork:
|
|
66
|
+
# MISP_VERIFY_SSL=false
|
|
67
|
+
# MISP_CA_CERT_PATH=
|
|
68
|
+
# MISP_VERIFY_SSL=true
|
|
69
|
+
# MISP_CA_CERT_PATH=/etc/lab-ca/lab-ca.pem
|
|
70
|
+
THEHIVE_SECRET=aptl-thehive-lab-secret-key-2024-purple
|
|
71
|
+
SHUFFLE_ADMIN_PASSWORD=ShuffleAdmin2024!
|
|
72
|
+
SHUFFLE_API_KEY=31a211c4-ea5c-4a49-b022-5e2434e758a7
|
|
73
|
+
|
|
74
|
+
# Grafana (OTel observability stack)
|
|
75
|
+
GRAFANA_ADMIN_USER=admin
|
|
76
|
+
GRAFANA_ADMIN_PASSWORD=CHANGE_ME_grafana_password
|
|
77
|
+
|
|
78
|
+
# Host-port publishing. Every service's published host port has a
|
|
79
|
+
# `${APTL_HP_<SERVICE>_<PORT>:-default}` override. `aptl lab start` probes
|
|
80
|
+
# each default and, if it is already in use on this host (e.g. an editor's
|
|
81
|
+
# port-forwarding, another app), automatically publishes that service on a
|
|
82
|
+
# free port instead and reports the real port in the start summary. Set any of
|
|
83
|
+
# these to pin a specific port; a value you set here is always honored as-is.
|
|
84
|
+
# APTL_HP_WAZUH_DASHBOARD_5601=443
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"aptl-red": {
|
|
4
|
+
"command": "node",
|
|
5
|
+
"args": ["./mcp/mcp-red/build/index.js"],
|
|
6
|
+
"env": {
|
|
7
|
+
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4318"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
"aptl-indexer": {
|
|
11
|
+
"command": "node",
|
|
12
|
+
"args": ["./mcp/mcp-indexer/build/index.js"],
|
|
13
|
+
"env": {
|
|
14
|
+
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4318"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"aptl-wazuh": {
|
|
18
|
+
"command": "node",
|
|
19
|
+
"args": ["./mcp/mcp-wazuh/build/index.js"],
|
|
20
|
+
"env": {
|
|
21
|
+
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4318"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"aptl-network": {
|
|
25
|
+
"command": "node",
|
|
26
|
+
"args": ["./mcp/mcp-network/build/index.js"],
|
|
27
|
+
"env": {
|
|
28
|
+
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4318"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"aptl-threatintel": {
|
|
32
|
+
"command": "node",
|
|
33
|
+
"args": ["./mcp/mcp-threatintel/build/index.js"],
|
|
34
|
+
"env": {
|
|
35
|
+
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4318"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"aptl-casemgmt": {
|
|
39
|
+
"command": "node",
|
|
40
|
+
"args": ["./mcp/mcp-casemgmt/build/index.js"],
|
|
41
|
+
"env": {
|
|
42
|
+
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4318"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"aptl-soar": {
|
|
46
|
+
"command": "node",
|
|
47
|
+
"args": ["./mcp/mcp-soar/build/index.js"],
|
|
48
|
+
"env": {
|
|
49
|
+
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4318"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
aptl/_labdata/README.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
[](https://sonarcloud.io/summary/new_code?id=Brad-Edwards_aptl)
|
|
2
|
+
[](https://scorecard.dev/viewer/?uri=github.com/OpenRAE/lilrae)
|
|
3
|
+
|
|
4
|
+
🎤 **Accepted to [Black Hat USA Arsenal 2026](https://blackhat.com/us-26/arsenal/schedule/#aptl-advanced-purple-team-labs-52322), [SecTor Arsenal 2026](https://blackhat.com/sector/arsenal/schedule/index.html#aptl-advanced-purple-team-labs-54785), and SecTor 2026 Briefings.**
|
|
5
|
+
|
|
6
|
+
# LilRAE (formerly APTL)
|
|
7
|
+
|
|
8
|
+
> **APTL is now LilRAE, and the package is now `lilrae`.** The Advanced Purple
|
|
9
|
+
> Team Lab (APTL) repository moved to
|
|
10
|
+
> [github.com/OpenRAE/lilrae](https://github.com/OpenRAE/lilrae) and was
|
|
11
|
+
> renamed. It is the same project, with the same source, history, features,
|
|
12
|
+
> and issue tracker. Releases publish to PyPI as
|
|
13
|
+
> [`lilrae`](https://pypi.org/project/lilrae/) from version 8.0.0.
|
|
14
|
+
> `aptl-labs` 7.0.0 was the last `aptl-labs` release. The import package is
|
|
15
|
+
> still `aptl`, the command is still `aptl`, and existing configuration, state
|
|
16
|
+
> directories, and runtime identifiers keep their `aptl` names. Where current
|
|
17
|
+
> pages still say APTL, they mean LilRAE. See
|
|
18
|
+
> [ADR-062](https://github.com/OpenRAE/lilrae/blob/main/docs/adrs/adr-062-lilrae-name-and-naming-convention.md).
|
|
19
|
+
>
|
|
20
|
+
> The two distributions install the same `aptl` package and commands. Do not
|
|
21
|
+
> install `lilrae` over `aptl-labs`, because one installation overwrites the
|
|
22
|
+
> files of the other. Remove `aptl-labs` first, then install `lilrae` with the
|
|
23
|
+
> same extras.
|
|
24
|
+
>
|
|
25
|
+
> With pipx:
|
|
26
|
+
>
|
|
27
|
+
> ```shell
|
|
28
|
+
> pipx uninstall aptl-labs
|
|
29
|
+
> pipx install lilrae
|
|
30
|
+
> aptl --version
|
|
31
|
+
> ```
|
|
32
|
+
>
|
|
33
|
+
> With pip in a virtual environment, for example with the `[s3]` extra:
|
|
34
|
+
>
|
|
35
|
+
> ```shell
|
|
36
|
+
> python -m pip uninstall aptl-labs
|
|
37
|
+
> python -m pip install "lilrae[s3]"
|
|
38
|
+
> ```
|
|
39
|
+
>
|
|
40
|
+
> To roll back, remove `lilrae`, then install the last legacy release:
|
|
41
|
+
>
|
|
42
|
+
> ```shell
|
|
43
|
+
> pipx uninstall lilrae
|
|
44
|
+
> pipx install "aptl-labs==7.0.0"
|
|
45
|
+
> ```
|
|
46
|
+
>
|
|
47
|
+
> The [installation guide](https://github.com/OpenRAE/lilrae/blob/main/docs/getting-started/installation.md#move-from-aptl-labs-to-lilrae)
|
|
48
|
+
> has the full procedure. All earlier `aptl-labs` releases stay on PyPI.
|
|
49
|
+
|
|
50
|
+
LilRAE is a local purple-team lab where human operators and AI agents exercise
|
|
51
|
+
red- and blue-team workflows against an intentionally vulnerable enterprise
|
|
52
|
+
range. Scenario documents select and realize the target, attacker, and SOC
|
|
53
|
+
topology; the CLI owns validation, startup, readiness, access discovery,
|
|
54
|
+
teardown, and run records.
|
|
55
|
+
|
|
56
|
+
Use cases include autonomous cyber-operations research, purple-team training,
|
|
57
|
+
and AI threat-actor assessment.
|
|
58
|
+
|
|
59
|
+
## Status And Safety
|
|
60
|
+
|
|
61
|
+
**Active development. Not for production. Not hardened.** LilRAE gives AI agents
|
|
62
|
+
penetration-testing tools and starts intentionally vulnerable services. Use a
|
|
63
|
+
dedicated, rebuildable host, keep unrelated credentials and workloads
|
|
64
|
+
elsewhere, control the surrounding network, and operate only on systems you are
|
|
65
|
+
authorized to test.
|
|
66
|
+
|
|
67
|
+
Ordinary `aptl lab start` uses the selected Docker daemon. On native Linux that
|
|
68
|
+
can give the lab and its control components authority over the physical host's
|
|
69
|
+
Docker engine; Docker Desktop or another Docker VM changes that placement but
|
|
70
|
+
is not, by its name alone, a qualified containment boundary. `aptl lab start`
|
|
71
|
+
and `aptl lab info` report the observed transport and boundary, or `unknown`
|
|
72
|
+
when they cannot establish one. See [tested profiles, host exposure and
|
|
73
|
+
limits](docs/getting-started/prerequisites.md#tested-execution-profiles-and-limits).
|
|
74
|
+
|
|
75
|
+
For stronger host and cross-seat isolation on Linux/KVM, use a disposable
|
|
76
|
+
[`aptl seat`](docs/reference/appliance-seat-launcher.md). A VM boundary reduces
|
|
77
|
+
risk but does not eliminate it; keep the host kernel and hypervisor current. A
|
|
78
|
+
seat needs KVM, QEMU, OVMF, adequate per-seat resources and a verified image;
|
|
79
|
+
it does not make the workloads inside its guest mutually isolated.
|
|
80
|
+
**Seats have no default outbound network controls.** The guest can initiate
|
|
81
|
+
ordinary internet and LAN connections through user-mode NAT, subject to the
|
|
82
|
+
host network and any rules defined by the selected scenario. Event-specific
|
|
83
|
+
outbound restrictions are the operator's responsibility.
|
|
84
|
+
|
|
85
|
+
## Quick Start
|
|
86
|
+
|
|
87
|
+
Install the released CLI and materialize its bundled lab assets. No source
|
|
88
|
+
checkout is required:
|
|
89
|
+
|
|
90
|
+
```shell
|
|
91
|
+
pipx install lilrae
|
|
92
|
+
aptl lab init my-lab
|
|
93
|
+
cd my-lab
|
|
94
|
+
aptl lab start --scenario techvault
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Startup validates the selected scenario, creates private project state,
|
|
98
|
+
realizes the topology, waits for required readiness checks, and reports a
|
|
99
|
+
structured outcome with the observed execution boundary. Inspect the fresh
|
|
100
|
+
runtime-derived state, boundary and access information:
|
|
101
|
+
|
|
102
|
+
```shell
|
|
103
|
+
aptl lab status
|
|
104
|
+
aptl lab info
|
|
105
|
+
aptl container list
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
URLs, host ports, available containers, usernames, and credential locations
|
|
109
|
+
belong to the realized project. Use `aptl lab info`; do not rely on static
|
|
110
|
+
values copied from documentation.
|
|
111
|
+
|
|
112
|
+
At the end of the session:
|
|
113
|
+
|
|
114
|
+
```shell
|
|
115
|
+
aptl lab stop # preserve project volumes
|
|
116
|
+
aptl lab stop -v # confirm and destroy project volume data
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Read the [first-lab guide](docs/getting-started/quick-start.md) for scenario
|
|
120
|
+
selection, safe activity, result inspection, troubleshooting, and teardown.
|
|
121
|
+
|
|
122
|
+
## Requirements
|
|
123
|
+
|
|
124
|
+
- Python 3.12 or newer and [pipx](https://pipx.pypa.io/)
|
|
125
|
+
- Docker Engine 28.0 or newer (native, or inside Docker Desktop or Colima)
|
|
126
|
+
with Compose and Buildx, on a cgroup v2 host
|
|
127
|
+
- OpenSSH client with `ssh-keygen` on `PATH`
|
|
128
|
+
- Node.js 20 or newer and npm for MCP artifact builds
|
|
129
|
+
- 20GB or more of free disk space
|
|
130
|
+
- Sufficient Docker memory for the selected scenario; the full acquired
|
|
131
|
+
TechVault stack needs more than 20GB
|
|
132
|
+
|
|
133
|
+
See [Prerequisites](docs/getting-started/prerequisites.md) for platform-specific
|
|
134
|
+
setup and verification.
|
|
135
|
+
|
|
136
|
+
## Supported Interfaces
|
|
137
|
+
|
|
138
|
+
- [CLI](docs/reference/cli.md) is the primary lab control plane.
|
|
139
|
+
- [MCP servers](docs/reference/mcp.md) give authorized agents scenario-aware
|
|
140
|
+
red- and blue-team tools through generated private client configuration.
|
|
141
|
+
- [Web interface](docs/reference/web.md) provides a loopback-first local
|
|
142
|
+
operator UI and typed API.
|
|
143
|
+
|
|
144
|
+
The APTL operator UI, vulnerable target applications, and third-party SOC
|
|
145
|
+
interfaces are separate surfaces. The selected scenario determines which ones
|
|
146
|
+
exist.
|
|
147
|
+
|
|
148
|
+
## Scenarios
|
|
149
|
+
|
|
150
|
+
The APTL startup catalog exposes the scenario selections supported by the
|
|
151
|
+
installed release. Reusable environment-pack definitions and authoring support
|
|
152
|
+
live in the companion [OpenRAE/env-packs](https://github.com/OpenRAE/env-packs)
|
|
153
|
+
repository; APTL owns admission, realization, readiness, and operation of the
|
|
154
|
+
selected scenario in the local lab.
|
|
155
|
+
|
|
156
|
+
## Documentation
|
|
157
|
+
|
|
158
|
+
The published site is the canonical user manual:
|
|
159
|
+
|
|
160
|
+
- [Documentation home](https://openrae.github.io/lilrae/)
|
|
161
|
+
- [Installation](docs/getting-started/installation.md)
|
|
162
|
+
- [Run your first lab](docs/getting-started/quick-start.md)
|
|
163
|
+
- [Troubleshooting](docs/troubleshooting/index.md)
|
|
164
|
+
- [Architecture and historical records](docs/architecture/index.md)
|
|
165
|
+
- [OpenSSF Best Practices assessment](docs/security/openssf-best-practices.md)
|
|
166
|
+
|
|
167
|
+
The README is the GitHub and package-index gateway, not a second copy of the
|
|
168
|
+
manual.
|
|
169
|
+
|
|
170
|
+
## Project Links
|
|
171
|
+
|
|
172
|
+
- [Get support](https://github.com/OpenRAE/lilrae/blob/dev/SUPPORT.md)
|
|
173
|
+
- [Contribute](https://github.com/OpenRAE/lilrae/blob/dev/CONTRIBUTING.md)
|
|
174
|
+
- [Report a vulnerability privately](https://github.com/OpenRAE/lilrae/security/advisories/new)
|
|
175
|
+
- [Review the OpenSSF Best Practices assessment](docs/security/openssf-best-practices.md)
|
|
176
|
+
|
|
177
|
+
Do not report suspected vulnerabilities through a public issue. The
|
|
178
|
+
[security policy](SECURITY.md) describes scope and the private fallback contact
|
|
179
|
+
path.
|
|
180
|
+
|
|
181
|
+
## Ethics And Disclaimer
|
|
182
|
+
|
|
183
|
+
APTL uses commodity services and standard security tooling. AI agents get Kali
|
|
184
|
+
access; this public repository does not add red-team enhancements to their
|
|
185
|
+
latent capabilities. You are responsible for following all applicable laws and
|
|
186
|
+
for obtaining authorization before testing a system.
|
|
187
|
+
|
|
188
|
+
The repository contains intentional test credentials used only by lab
|
|
189
|
+
fixtures. They are not production secrets. Runtime control-plane credentials
|
|
190
|
+
are generated into private project files and must not be committed or shared.
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
MIT
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Start the already-provisioned seat inside its disposable overlay.
|
|
3
|
+
set -eu
|
|
4
|
+
umask 077
|
|
5
|
+
|
|
6
|
+
# shellcheck disable=SC1091
|
|
7
|
+
. /etc/aptl/appliance-release.env
|
|
8
|
+
: "${APTL_SEAT_COMMIT:?missing baked seat identity}"
|
|
9
|
+
test -r /run/aptl-launch/appliance-launch.json
|
|
10
|
+
test -r /run/aptl-launch/boundary-policy.json
|
|
11
|
+
test -r /opt/aptl/offline/oci-images.tar
|
|
12
|
+
guest_python=/usr/bin/python3
|
|
13
|
+
guest_path=/opt/aptl/app:/opt/aptl/python
|
|
14
|
+
|
|
15
|
+
# Apply the descriptor-bound account choice before xrdp or the browser desktop
|
|
16
|
+
# can accept a participant login. The root lab service retains Docker access.
|
|
17
|
+
PYTHONPATH="$guest_path" "$guest_python" /opt/aptl/desktop/seat-privileges.py
|
|
18
|
+
|
|
19
|
+
install -d -m 0700 /var/lib/aptl/overlay
|
|
20
|
+
images_loaded=/var/lib/aptl/overlay/images-loaded
|
|
21
|
+
if test ! -f "$images_loaded"; then
|
|
22
|
+
docker load --input /opt/aptl/offline/oci-images.tar
|
|
23
|
+
marker=$(mktemp /var/lib/aptl/overlay/.images-loaded.XXXXXX)
|
|
24
|
+
sha256sum /opt/aptl/offline/oci-images.tar >"$marker"
|
|
25
|
+
chmod 0600 "$marker"
|
|
26
|
+
mv "$marker" "$images_loaded"
|
|
27
|
+
else
|
|
28
|
+
/usr/local/bin/aptl kill --containers --project-dir /opt/aptl/project
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# The desktop account and Guacamole connection are configured in this overlay.
|
|
32
|
+
# Only the gateway's loopback HTTP port is forwarded to the physical host.
|
|
33
|
+
rm -f /home/aptl/.config/aptl/run-ready
|
|
34
|
+
/usr/local/bin/start-seat-desktop
|
|
35
|
+
|
|
36
|
+
PYTHONPATH="$guest_path" "$guest_python" -m aptl.appliance.guest_services proxy &
|
|
37
|
+
proxy_pid=$!
|
|
38
|
+
cleanup() {
|
|
39
|
+
kill "$proxy_pid" 2>/dev/null || true
|
|
40
|
+
}
|
|
41
|
+
trap cleanup EXIT INT TERM
|
|
42
|
+
|
|
43
|
+
/usr/local/bin/aptl lab start \
|
|
44
|
+
--project-dir /opt/aptl/project \
|
|
45
|
+
--offline-staged \
|
|
46
|
+
--appliance-launch-descriptor /run/aptl-launch/appliance-launch.json \
|
|
47
|
+
--appliance-readiness-challenge /run/aptl-launch/readiness-challenge.json \
|
|
48
|
+
--appliance-readiness-device /dev/virtio-ports/org.aptl.readiness
|
|
49
|
+
|
|
50
|
+
wait "$proxy_pid"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
[Unit]
|
|
2
|
+
Description=APTL disposable appliance first-boot readiness
|
|
3
|
+
After=docker.service network-online.target
|
|
4
|
+
After=run-aptl\x2dlaunch.mount
|
|
5
|
+
Requires=docker.service
|
|
6
|
+
Requires=run-aptl\x2dlaunch.mount
|
|
7
|
+
Wants=network-online.target
|
|
8
|
+
|
|
9
|
+
[Service]
|
|
10
|
+
Type=exec
|
|
11
|
+
ExecStart=/usr/local/libexec/aptl-appliance-first-boot
|
|
12
|
+
Environment=HOME=/var/lib/aptl
|
|
13
|
+
Environment=APTL_SEAT_DESKTOP_HANDOFF=1
|
|
14
|
+
Environment=APTL_SEAT_DESKTOP_MCP_SMOKE=1
|
|
15
|
+
UMask=0077
|
|
16
|
+
NoNewPrivileges=true
|
|
17
|
+
PrivateTmp=true
|
|
18
|
+
ProtectHome=false
|
|
19
|
+
ProtectSystem=strict
|
|
20
|
+
ReadWritePaths=/var/lib/aptl /opt/aptl/project /home/aptl /etc /usr/local/share/ca-certificates
|
|
21
|
+
|
|
22
|
+
[Install]
|
|
23
|
+
WantedBy=multi-user.target
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
[Unit]
|
|
2
|
+
Description=APTL read-only appliance launch inputs
|
|
3
|
+
Before=aptl-appliance-first-boot.service
|
|
4
|
+
|
|
5
|
+
[Mount]
|
|
6
|
+
What=aptl-launch
|
|
7
|
+
Where=/run/aptl-launch
|
|
8
|
+
Type=9p
|
|
9
|
+
Options=trans=virtio,version=9p2000.L,ro
|
|
10
|
+
|
|
11
|
+
[Install]
|
|
12
|
+
WantedBy=multi-user.target
|