k1s-core 1.0.0a3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- k1s_core-1.0.0a3/LICENSE +201 -0
- k1s_core-1.0.0a3/PKG-INFO +465 -0
- k1s_core-1.0.0a3/README.md +414 -0
- k1s_core-1.0.0a3/pyproject.toml +113 -0
- k1s_core-1.0.0a3/requirements.in +10 -0
- k1s_core-1.0.0a3/setup.cfg +4 -0
- k1s_core-1.0.0a3/src/ae/__init__.py +14 -0
- k1s_core-1.0.0a3/src/ae/__main__.py +6 -0
- k1s_core-1.0.0a3/src/ae/accelerators.py +685 -0
- k1s_core-1.0.0a3/src/ae/apishim/__init__.py +9 -0
- k1s_core-1.0.0a3/src/ae/apishim/__main__.py +142 -0
- k1s_core-1.0.0a3/src/ae/apishim/adapter.py +2006 -0
- k1s_core-1.0.0a3/src/ae/apishim/env.py +234 -0
- k1s_core-1.0.0a3/src/ae/apishim/ha_store.py +1584 -0
- k1s_core-1.0.0a3/src/ae/apishim/server.py +12996 -0
- k1s_core-1.0.0a3/src/ae/apishim/store.py +756 -0
- k1s_core-1.0.0a3/src/ae/cli/__init__.py +1 -0
- k1s_core-1.0.0a3/src/ae/cli/__main__.py +7742 -0
- k1s_core-1.0.0a3/src/ae/cli/rotate_certs.py +40 -0
- k1s_core-1.0.0a3/src/ae/config/manager.py +43 -0
- k1s_core-1.0.0a3/src/ae/config/transport.py +153 -0
- k1s_core-1.0.0a3/src/ae/controller/__init__.py +1 -0
- k1s_core-1.0.0a3/src/ae/controller/__main__.py +3387 -0
- k1s_core-1.0.0a3/src/ae/controller/agent_api.py +782 -0
- k1s_core-1.0.0a3/src/ae/controller/app_ingress.py +325 -0
- k1s_core-1.0.0a3/src/ae/controller/authority.py +612 -0
- k1s_core-1.0.0a3/src/ae/controller/cronjob_authority.py +313 -0
- k1s_core-1.0.0a3/src/ae/controller/etcd_lease_client.py +320 -0
- k1s_core-1.0.0a3/src/ae/controller/etcd_state.py +4186 -0
- k1s_core-1.0.0a3/src/ae/controller/health.py +703 -0
- k1s_core-1.0.0a3/src/ae/controller/hpa_authority.py +702 -0
- k1s_core-1.0.0a3/src/ae/controller/inference_api.py +129 -0
- k1s_core-1.0.0a3/src/ae/controller/inference_cell.py +2025 -0
- k1s_core-1.0.0a3/src/ae/controller/node_identity.py +125 -0
- k1s_core-1.0.0a3/src/ae/controller/quantities.py +186 -0
- k1s_core-1.0.0a3/src/ae/controller/reconciler.py +2524 -0
- k1s_core-1.0.0a3/src/ae/controller/rollout.py +37 -0
- k1s_core-1.0.0a3/src/ae/controller/scheduler.py +584 -0
- k1s_core-1.0.0a3/src/ae/controller/spec.py +2177 -0
- k1s_core-1.0.0a3/src/ae/controller/state.py +6526 -0
- k1s_core-1.0.0a3/src/ae/controller/storage_authority.py +134 -0
- k1s_core-1.0.0a3/src/ae/controller/work_watchdog.py +86 -0
- k1s_core-1.0.0a3/src/ae/fabric/__init__.py +53 -0
- k1s_core-1.0.0a3/src/ae/fabric/ai_runtime_profile.py +428 -0
- k1s_core-1.0.0a3/src/ae/fabric/locality.py +982 -0
- k1s_core-1.0.0a3/src/ae/fabric/phase_assurance.py +645 -0
- k1s_core-1.0.0a3/src/ae/fabric/symbolic.py +58 -0
- k1s_core-1.0.0a3/src/ae/gateway/__init__.py +5 -0
- k1s_core-1.0.0a3/src/ae/gateway/__main__.py +92 -0
- k1s_core-1.0.0a3/src/ae/gateway/service.py +1277 -0
- k1s_core-1.0.0a3/src/ae/gateway/spool.py +463 -0
- k1s_core-1.0.0a3/src/ae/ha/__init__.py +39 -0
- k1s_core-1.0.0a3/src/ae/ha/dashboard.py +320 -0
- k1s_core-1.0.0a3/src/ae/ha/fencing.py +317 -0
- k1s_core-1.0.0a3/src/ae/ha/ops.py +1252 -0
- k1s_core-1.0.0a3/src/ae/ingress/__init__.py +14 -0
- k1s_core-1.0.0a3/src/ae/ingress/_atomic.py +36 -0
- k1s_core-1.0.0a3/src/ae/ingress/caddy.py +392 -0
- k1s_core-1.0.0a3/src/ae/ingress/edge_core_proxy.py +1367 -0
- k1s_core-1.0.0a3/src/ae/ingress/edge_docs.py +61 -0
- k1s_core-1.0.0a3/src/ae/ingress/edge_local.py +441 -0
- k1s_core-1.0.0a3/src/ae/ingress/envoy_control_plane.py +510 -0
- k1s_core-1.0.0a3/src/ae/ingress/envoy_core_proxy.py +419 -0
- k1s_core-1.0.0a3/src/ae/ingress/rathole.py +88 -0
- k1s_core-1.0.0a3/src/ae/ingress/service.py +274 -0
- k1s_core-1.0.0a3/src/ae/ingress/tls_sync.py +76 -0
- k1s_core-1.0.0a3/src/ae/k8s/__init__.py +1 -0
- k1s_core-1.0.0a3/src/ae/k8s/check.py +370 -0
- k1s_core-1.0.0a3/src/ae/k8s/convert.py +521 -0
- k1s_core-1.0.0a3/src/ae/k8s/exporter.py +1810 -0
- k1s_core-1.0.0a3/src/ae/k8s/presets.py +112 -0
- k1s_core-1.0.0a3/src/ae/k8s/validate.py +73 -0
- k1s_core-1.0.0a3/src/ae/kctl/__init__.py +9 -0
- k1s_core-1.0.0a3/src/ae/kctl/__main__.py +1182 -0
- k1s_core-1.0.0a3/src/ae/kctl/lifecycle.py +319 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_adapter.py +1418 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_backend.py +1439 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_bootstrap.py +800 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_component_runner.py +197 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_engine.py +274 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_host_helper.py +736 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_host_plan.py +1089 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_host_transaction.py +1380 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_migration.py +1725 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_node_adapter.py +229 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_paths.py +323 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_state.py +2473 -0
- k1s_core-1.0.0a3/src/ae/kctl/profile_supervisor.py +654 -0
- k1s_core-1.0.0a3/src/ae/kctl/profiles.py +720 -0
- k1s_core-1.0.0a3/src/ae/network/__init__.py +23 -0
- k1s_core-1.0.0a3/src/ae/network/overlay_health.py +82 -0
- k1s_core-1.0.0a3/src/ae/network/pod_cidr.py +74 -0
- k1s_core-1.0.0a3/src/ae/network/provider.py +44 -0
- k1s_core-1.0.0a3/src/ae/network/provider_docker.py +231 -0
- k1s_core-1.0.0a3/src/ae/network/provider_iptables.py +270 -0
- k1s_core-1.0.0a3/src/ae/network/provider_overlay.py +240 -0
- k1s_core-1.0.0a3/src/ae/network/service_controller.py +206 -0
- k1s_core-1.0.0a3/src/ae/node/__init__.py +1 -0
- k1s_core-1.0.0a3/src/ae/node/__main__.py +7 -0
- k1s_core-1.0.0a3/src/ae/node/net_helper.py +216 -0
- k1s_core-1.0.0a3/src/ae/node/rosenpass.py +1034 -0
- k1s_core-1.0.0a3/src/ae/node/server.py +1433 -0
- k1s_core-1.0.0a3/src/ae/observability/__init__.py +5 -0
- k1s_core-1.0.0a3/src/ae/observability/http_api.py +7681 -0
- k1s_core-1.0.0a3/src/ae/observability/logging.py +30 -0
- k1s_core-1.0.0a3/src/ae/observability/metrics.py +262 -0
- k1s_core-1.0.0a3/src/ae/observability/static/vendor/xterm-addon-fit.js +2 -0
- k1s_core-1.0.0a3/src/ae/observability/static/vendor/xterm.css +209 -0
- k1s_core-1.0.0a3/src/ae/observability/static/vendor/xterm.js +2 -0
- k1s_core-1.0.0a3/src/ae/resources/__init__.py +1 -0
- k1s_core-1.0.0a3/src/ae/resources/ingress/caddy_site.txt +10 -0
- k1s_core-1.0.0a3/src/ae/resources/loader.py +39 -0
- k1s_core-1.0.0a3/src/ae/resources/observability/dashboard.html +7091 -0
- k1s_core-1.0.0a3/src/ae/resources/observability/docs.html +32 -0
- k1s_core-1.0.0a3/src/ae/resources/observability/redoc.html +27 -0
- k1s_core-1.0.0a3/src/ae/resources/observability/swagger.html +26 -0
- k1s_core-1.0.0a3/src/ae/resources/profiles/profile-catalog-v1.json +123 -0
- k1s_core-1.0.0a3/src/ae/resources/profiles/workerbee-adapter-v1.json +88 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/create_objects_pg.sql +16 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/create_objects_sqlite.sql +16 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/create_watch_events_pg.sql +15 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/insert_watch_events_pg.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/select_object_pg.sql +1 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/select_object_sqlite.sql +1 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/select_objects_all_pg.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/select_objects_all_sqlite.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/select_objects_by_ns_pg.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/select_objects_by_ns_sqlite.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/select_watch_events_since_pg.sql +5 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/upsert_object_pg.sql +5 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/apishim/upsert_object_sqlite.sql +5 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/count_volume_attachments.sql +1 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_app_events.sql +8 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_app_registry.sql +9 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_app_revisions.sql +10 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_app_status.sql +22 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_edge_ingress_policies.sql +9 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_edge_ingress_routes.sql +14 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_node_heartbeats.sql +6 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_node_leases.sql +17 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_nodes.sql +17 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_pod_nodes.sql +7 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_pod_status.sql +16 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_probe_history.sql +10 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_rollout_canary.sql +8 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_service_endpoints.sql +8 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_services.sql +6 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_site_ingress_endpoints.sql +12 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_storage_bindings.sql +8 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_volume_attachments.sql +8 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_work_ledger.sql +19 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_work_outbox.sql +18 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/create_work_queue.sql +18 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/delete_probe_history_limit.sql +7 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_app_events.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_app_registry_upsert.sql +9 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_app_revisions.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_edge_ingress_policies_upsert.sql +7 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_edge_ingress_routes_upsert.sql +10 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_pod_nodes.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_pod_nodes_upsert.sql +5 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_pod_status.sql +24 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_probe_history.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_service_endpoints.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/insert_volume_attachments_ignore.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_app_events_by_app.sql +5 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_app_events_paginated.sql +5 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_app_registry_all.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_app_registry_by_name.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_app_status_all.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_app_status_by_name.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_edge_ingress_policies_all.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_edge_ingress_policy_by_key.sql +4 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_edge_ingress_routes_all.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_edge_ingress_routes_by_site.sql +4 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_latest_revision.sql +5 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_node_by_id.sql +7 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_nodes_with_heartbeat.sql +7 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_pod_nodes_with_status.sql +10 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_pod_status_by_app.sql +4 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_probe_history_by_app.sql +5 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_revision_spec_json.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_revisions_by_app.sql +5 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_rollout_canary.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_service_endpoints_by_app.sql +4 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_storage_bindings_all.sql +2 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_storage_bindings_by_app.sql +4 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/select_volume_attachments_by_app.sql +4 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/update_app_revisions_status.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/upsert_app_status.sql +22 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/upsert_node_heartbeats.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/upsert_nodes.sql +16 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/upsert_rollout_canary.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/upsert_services.sql +3 -0
- k1s_core-1.0.0a3/src/ae/resources/sql/controller/upsert_volume_attachments.sql +6 -0
- k1s_core-1.0.0a3/src/ae/runtime/__init__.py +35 -0
- k1s_core-1.0.0a3/src/ae/runtime/base.py +213 -0
- k1s_core-1.0.0a3/src/ae/runtime/command_args.py +36 -0
- k1s_core-1.0.0a3/src/ae/runtime/containerd_runtime.py +1043 -0
- k1s_core-1.0.0a3/src/ae/runtime/cri/__init__.py +1 -0
- k1s_core-1.0.0a3/src/ae/runtime/cri/api/__init__.py +1 -0
- k1s_core-1.0.0a3/src/ae/runtime/cri/api/runtime/__init__.py +1 -0
- k1s_core-1.0.0a3/src/ae/runtime/cri/api/runtime/v1/__init__.py +1 -0
- k1s_core-1.0.0a3/src/ae/runtime/cri/api/runtime/v1/api_pb2.py +472 -0
- k1s_core-1.0.0a3/src/ae/runtime/cri/api/runtime/v1/api_pb2_grpc.py +1577 -0
- k1s_core-1.0.0a3/src/ae/runtime/cri/api/runtime/v1/gogo_pb2.py +50 -0
- k1s_core-1.0.0a3/src/ae/runtime/cri_runtime.py +3699 -0
- k1s_core-1.0.0a3/src/ae/runtime/docker_runtime.py +2050 -0
- k1s_core-1.0.0a3/src/ae/runtime/docker_stub.py +155 -0
- k1s_core-1.0.0a3/src/ae/runtime/podman_runtime.py +2738 -0
- k1s_core-1.0.0a3/src/ae/runtime/ports.py +82 -0
- k1s_core-1.0.0a3/src/ae/runtime/projections.py +177 -0
- k1s_core-1.0.0a3/src/ae/runtime/registry.py +95 -0
- k1s_core-1.0.0a3/src/ae/runtime/remote_runtime.py +514 -0
- k1s_core-1.0.0a3/src/ae/secrets/__init__.py +5 -0
- k1s_core-1.0.0a3/src/ae/secrets/manager.py +125 -0
- k1s_core-1.0.0a3/src/ae/security/__init__.py +23 -0
- k1s_core-1.0.0a3/src/ae/security/ca.py +231 -0
- k1s_core-1.0.0a3/src/ae/security/tokens.py +57 -0
- k1s_core-1.0.0a3/src/ae/storage/__init__.py +41 -0
- k1s_core-1.0.0a3/src/ae/storage/config.py +407 -0
- k1s_core-1.0.0a3/src/ae/storage/controller.py +2986 -0
- k1s_core-1.0.0a3/src/ae/storage/csi/__init__.py +19 -0
- k1s_core-1.0.0a3/src/ae/storage/csi/api/__init__.py +10 -0
- k1s_core-1.0.0a3/src/ae/storage/csi/api/csi_pb2.py +510 -0
- k1s_core-1.0.0a3/src/ae/storage/csi/api/csi_pb2_grpc.py +1168 -0
- k1s_core-1.0.0a3/src/ae/storage/csi/client.py +244 -0
- k1s_core-1.0.0a3/src/ae/storage/netfs.py +890 -0
- k1s_core-1.0.0a3/src/ae/storage/node_manager.py +136 -0
- k1s_core-1.0.0a3/src/ae/storage/state.py +438 -0
- k1s_core-1.0.0a3/src/ae/storage/types.py +40 -0
- k1s_core-1.0.0a3/src/ae/transport/__init__.py +41 -0
- k1s_core-1.0.0a3/src/ae/transport/controller_ingress.py +696 -0
- k1s_core-1.0.0a3/src/ae/transport/jetstream_monitor.py +119 -0
- k1s_core-1.0.0a3/src/ae/transport/nats_client.py +740 -0
- k1s_core-1.0.0a3/src/ae/transport/outbox_publisher.py +132 -0
- k1s_core-1.0.0a3/src/ae/transport/route_bundle_publisher.py +524 -0
- k1s_core-1.0.0a3/src/ae/transport/subjects.py +71 -0
- k1s_core-1.0.0a3/src/ae/transport/telemetry_ingress.py +105 -0
- k1s_core-1.0.0a3/src/ae/worker_stub/__init__.py +14 -0
- k1s_core-1.0.0a3/src/ae/worker_stub/__main__.py +203 -0
- k1s_core-1.0.0a3/src/k1s_core.egg-info/PKG-INFO +465 -0
- k1s_core-1.0.0a3/src/k1s_core.egg-info/SOURCES.txt +246 -0
- k1s_core-1.0.0a3/src/k1s_core.egg-info/dependency_links.txt +1 -0
- k1s_core-1.0.0a3/src/k1s_core.egg-info/entry_points.txt +7 -0
- k1s_core-1.0.0a3/src/k1s_core.egg-info/requires.txt +24 -0
- k1s_core-1.0.0a3/src/k1s_core.egg-info/top_level.txt +1 -0
- k1s_core-1.0.0a3/tests/test_apishim_env.py +25 -0
k1s_core-1.0.0a3/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright 2026 k1s contributors
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
+
See the License for the specific language governing permissions and
|
|
201
|
+
limitations under the License.
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: k1s-core
|
|
3
|
+
Version: 1.0.0a3
|
|
4
|
+
Summary: Core Python runtime and compatibility CLIs for k1s
|
|
5
|
+
Author: k1s contributors
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/the-cm-collective/k1s
|
|
8
|
+
Project-URL: Repository, https://github.com/the-cm-collective/k1s
|
|
9
|
+
Project-URL: Documentation, https://github.com/the-cm-collective/k1s/tree/main/docs
|
|
10
|
+
Project-URL: Issues, https://github.com/the-cm-collective/k1s/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/the-cm-collective/k1s/blob/main/CHANGELOG.md
|
|
12
|
+
Keywords: containers,distributed-systems,orchestration
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
+
Classifier: Programming Language :: Python
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
23
|
+
Classifier: Topic :: Software Development
|
|
24
|
+
Classifier: Topic :: System :: Distributed Computing
|
|
25
|
+
Requires-Python: >=3.11
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Requires-Dist: pydantic>=2.9
|
|
29
|
+
Requires-Dist: PyYAML>=6.0
|
|
30
|
+
Requires-Dist: docker>=7.1
|
|
31
|
+
Requires-Dist: requests>=2.32
|
|
32
|
+
Requires-Dist: psycopg[binary]>=3.1
|
|
33
|
+
Requires-Dist: croniter>=2.0
|
|
34
|
+
Requires-Dist: grpcio>=1.60
|
|
35
|
+
Requires-Dist: protobuf>=4.25
|
|
36
|
+
Requires-Dist: nats-py>=2.7
|
|
37
|
+
Requires-Dist: nkeys>=0.1.0
|
|
38
|
+
Provides-Extra: dev
|
|
39
|
+
Requires-Dist: pytest>=8.2; extra == "dev"
|
|
40
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
41
|
+
Requires-Dist: mypy>=1.11; extra == "dev"
|
|
42
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
43
|
+
Requires-Dist: matplotlib>=3.9; extra == "dev"
|
|
44
|
+
Requires-Dist: Pillow>=10.4; extra == "dev"
|
|
45
|
+
Requires-Dist: pre-commit>=3.8; extra == "dev"
|
|
46
|
+
Requires-Dist: jsonschema>=4.22; extra == "dev"
|
|
47
|
+
Requires-Dist: huggingface_hub>=0.30; extra == "dev"
|
|
48
|
+
Provides-Extra: watch
|
|
49
|
+
Requires-Dist: watchdog>=3.0; extra == "watch"
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
|
|
52
|
+
<p align="center">
|
|
53
|
+
<img src="media/style/web-logos/k1s-killa-bee-refresh-0526.png" alt="k1s logo" width="260" />
|
|
54
|
+
</p>
|
|
55
|
+
|
|
56
|
+
# k1s Minimal Application Engine
|
|
57
|
+
|
|
58
|
+
k1s is a small, readable, Kubernetes-like orchestration engine built for distributed compute across messy reality: NAT/CGNAT, roaming nodes, intermittent links, heterogeneous sites, and federated clouds.
|
|
59
|
+
|
|
60
|
+
The goal is to make private, self-hosted, federated compute feasible without surrendering control to a single vendor or central authority. k1s is privacy-first, consent-first, and secure-by-default while staying understandable end-to-end (`spec -> reconcile -> runtime -> networking`).
|
|
61
|
+
|
|
62
|
+
k1s borrows Kubernetes mental models and API shapes where useful, but it is not a full Kubernetes clone. The focus is a compact surface area with a lightweight control plane and lower resource requirements.
|
|
63
|
+
|
|
64
|
+
Project principles and non-goals: `TENETS.md`. Cognitive-substrate philosophy and safeguards: `docs/design/project-philosophy.md`, `docs/design/cognitive-welfare-and-continuity.md`.
|
|
65
|
+
|
|
66
|
+
## Status & Production Use
|
|
67
|
+
|
|
68
|
+
k1s is entering its 1.0 alpha line and remains actively evolving. The current
|
|
69
|
+
candidate establishes a tested compatibility boundary for the distribution,
|
|
70
|
+
imports, commands, and core installed contracts while runtime and fabric
|
|
71
|
+
surfaces continue through explicit qualification gates.
|
|
72
|
+
|
|
73
|
+
Production guidance:
|
|
74
|
+
- Recommended now: labs, staging, and controlled production pilots with explicit operator ownership.
|
|
75
|
+
- Not yet recommended: broad multi-tenant or compliance-critical environments that require full Kubernetes semantics.
|
|
76
|
+
- Always run environment-specific security review, failure drills, and rollout validation before promotion.
|
|
77
|
+
|
|
78
|
+
## Current Release-Line Highlights
|
|
79
|
+
|
|
80
|
+
- High-availability control-plane support across controller authority, shared mutation fencing/CAS, and HA-safe API-shim reads: `docs/roadmap/high-availability-control-plane.md`, `docs/ops/ha-cluster-bring-up.md`
|
|
81
|
+
- HA operator tooling and validation automation for retained, live-helper, and drill lanes: `docs/ops/validated-procedures.md`, `docs/ops/ha-closeout.md`
|
|
82
|
+
- Hardened benchmark reruns and retained publishing for rootless, rootful, k1nd, k3d, and CRI lanes: `docs/benchmarks/memory.md`, `docs/ops/validated-procedures.md`
|
|
83
|
+
- Stronger local environment/bootstrap helpers, including `env-doctor`, controller env export helpers, and repo-local Nix shells: `scripts/dev/env_doctor.sh`, `scripts/ae-env.sh`, `flake.nix`
|
|
84
|
+
|
|
85
|
+
## Documentation
|
|
86
|
+
|
|
87
|
+
- Start here onboarding: `docs/getting-started/start-here.md`
|
|
88
|
+
- High-level overview and getting started: `docs/getting-started/overview.md`
|
|
89
|
+
- Technical architecture and reference: `docs/reference/architecture.md`
|
|
90
|
+
- Project philosophy and cognitive safeguards: `docs/design/project-philosophy.md`, `docs/design/cognitive-welfare-and-continuity.md`
|
|
91
|
+
- Current inference-fabric behavior: `docs/reference/inference-fabric.md`
|
|
92
|
+
- Distributed compute fabric roadmap: `docs/roadmap/distributed-compute-fabric.md`, `docs/roadmap/status.md`
|
|
93
|
+
- Fabric deployment and control-plane design: `docs/design/fabric-deployment-topology.md`, `docs/design/fabric-control-plane.md`
|
|
94
|
+
- Multi-node architecture and lab: `docs/adr/0007-multinode-architecture-scope.md`, `docs/guides/multinode-lab.md`
|
|
95
|
+
- Runtime profile targets (including strict CRI aliases): `docs/guides/runtime-profiles.md`
|
|
96
|
+
- CRI/containerd workflows and registry-first image prep: `docs/reference/cri-containerd.md`
|
|
97
|
+
- API compatibility and shim status: `docs/reference/apishim-compatibility-matrix.md`, `docs/reference/apishim-roadmap.md`
|
|
98
|
+
- HTTP API reference and UI docs: `docs/reference/http-api.md`
|
|
99
|
+
- Configs & Secrets: `docs/reference/configs-secrets.md`
|
|
100
|
+
- Ingress and TLS reference: `docs/reference/ingress.md`
|
|
101
|
+
- Ingress deep validation lanes: `docs/guides/ingress-capability-test-sequence.md`
|
|
102
|
+
- Operations runbook: `docs/ops/runbook.md`
|
|
103
|
+
- Benchmarks and validated procedures: `docs/benchmarks/memory.md`, `docs/ops/validated-procedures.md`
|
|
104
|
+
- Demo modes and examples: `docs/guides/demos-examples.md`
|
|
105
|
+
- End-to-end walkthrough: `docs/guides/e2e.md`
|
|
106
|
+
- CI examples: `docs/ops/ci-gh-actions.md`
|
|
107
|
+
- Python distribution identity and release compatibility:
|
|
108
|
+
`docs/reference/python-distribution.md`
|
|
109
|
+
- Stable and experimental public contracts: `docs/reference/public-contracts.md`
|
|
110
|
+
- Experimental metadata-safe WorkerBee profile evidence contract:
|
|
111
|
+
`docs/reference/workerbee-profile-adapter.md`
|
|
112
|
+
|
|
113
|
+
## Integrated Dashboard & Interactive Playground
|
|
114
|
+
|
|
115
|
+
Dashboard:
|
|
116
|
+

|
|
117
|
+
|
|
118
|
+
Playground:
|
|
119
|
+

|
|
120
|
+
|
|
121
|
+
## Quickstart
|
|
122
|
+
|
|
123
|
+
1) Install (editable for dev):
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
python -m pip install -e .[dev]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Published Python artifacts use the distribution name `k1s-core`. The runtime
|
|
130
|
+
package remains importable as `ae`, and the `k1s` and historical `ae*` command
|
|
131
|
+
entry points remain available. See `docs/reference/python-distribution.md` and
|
|
132
|
+
`docs/reference/public-contracts.md` for the 1.0-alpha compatibility policy.
|
|
133
|
+
|
|
134
|
+
Optional: add file-watching support for instant reconciles on spec changes:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
python -m pip install -e .[watch]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Optional NixOS/dev-shell path (additive; Debian/Ubuntu flow above is unchanged):
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
direnv allow
|
|
144
|
+
# or:
|
|
145
|
+
nix develop
|
|
146
|
+
|
|
147
|
+
python -m venv .venv
|
|
148
|
+
. .venv/bin/activate
|
|
149
|
+
python -m pip install -e .[dev]
|
|
150
|
+
make env-doctor
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Use `nix develop .#cri` when you want the CRI/containerd-oriented shell. The flake
|
|
154
|
+
fills in userland tooling such as `podman-compose`. Host runtimes still remain
|
|
155
|
+
host-managed (`podman`/`docker`, `containerd`), but `make dev-local` can now
|
|
156
|
+
manage local demo DNS/TLS state directly on Debian/RHEL and through the NixOS
|
|
157
|
+
bridge helper on NixOS. Run `make env-doctor` to check whether the bridge is
|
|
158
|
+
installed/imported and whether `docs/api/dash/blue/green.home.arpa` resolve
|
|
159
|
+
where the demo expects.
|
|
160
|
+
|
|
161
|
+
One-time NixOS bridge bootstrap:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
sudo install -D -m 0644 ops/nixos/k1s-local-dev-bridge.nix /etc/nixos/nixos/modules/k1s-local-dev-bridge.nix
|
|
165
|
+
# import ./nixos/modules/k1s-local-dev-bridge.nix from your host config
|
|
166
|
+
sudo nixos-rebuild switch --impure --flake /etc/nixos#$(hostname -s)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
2) Run dev fixtures (optional):
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
docker compose -f ops/dev/docker-compose.yaml up -d
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Podman registry cache note (demo helpers): if you use Podman with the local pull‑through cache, add an insecure registry entry for `localhost:5001`/`localhost:5002` (or set `AE_USE_REGISTRY_CACHE=0`) to avoid HTTPS pull errors and Docker Hub rate‑limit stalls.
|
|
176
|
+
|
|
177
|
+
3) Start the controller loop:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
python -m ae.controller --loop --specs specs/ --metrics-port 9108 --watch
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Strict CRI quickstart (recommended for containerd lanes):
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
make k1s-core-cri
|
|
187
|
+
# optional pairings:
|
|
188
|
+
make k1s-edge-cri
|
|
189
|
+
make k1s-edge-core-cri
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
4) Apply a sample app and inspect:
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
python -m ae.cli apply -f specs/examples/echo.yaml
|
|
196
|
+
python -m ae.cli status echo --wide --events
|
|
197
|
+
python -m ae.cli logs echo --tail 50
|
|
198
|
+
python -m ae.cli shell echo
|
|
199
|
+
python -m ae.cli exec echo -- -- sh -c 'echo hello from main'
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Namespace targeting:
|
|
203
|
+
```
|
|
204
|
+
ae apply -n demo -f specs/examples/echo.yaml
|
|
205
|
+
ae apply -n demo --force-namespace -f specs/examples/echo.yaml
|
|
206
|
+
AE_NAMESPACE=demo ae status echo
|
|
207
|
+
ae shell demo/echo
|
|
208
|
+
```
|
|
209
|
+
Note: `ae shell` defaults to `sh`; use `-- bash` only when the image includes it.
|
|
210
|
+
|
|
211
|
+
Kubectl-like aliases via `k1s`:
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
k1s get apps
|
|
215
|
+
k1s describe app/echo
|
|
216
|
+
k1s logs app/echo --follow --tail 100
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Installed profile inspection is deterministic and non-mutating. It lists the
|
|
220
|
+
public role catalog, checks static installation facts, and produces a
|
|
221
|
+
declarative plan without starting a runtime or preparing the host.
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
k1s profile list
|
|
225
|
+
k1s profile doctor core
|
|
226
|
+
k1s profile plan edge-gateway --output json
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
The production `edge-gateway` role never includes the development worker stub.
|
|
230
|
+
Legacy `edge` and `edge-core` aliases remain development-only. Existing
|
|
231
|
+
`profile start|status|stop|restart` actions retain their checkout-local
|
|
232
|
+
compatibility behavior pending later stateful lifecycle work. See
|
|
233
|
+
`docs/reference/profile-lifecycle.md` for the exact role, alias, schema, and
|
|
234
|
+
exit-code contracts.
|
|
235
|
+
|
|
236
|
+
The installed `k1s-core` package also contains a versioned, metadata-safe
|
|
237
|
+
WorkerBee profile evidence adapter. It projects already selected JSON results;
|
|
238
|
+
it adds no command, starts nothing, emits no raw log or connection value, and
|
|
239
|
+
remains `source-validated/unqualified`. Exact WorkerBee rebind and combined
|
|
240
|
+
disposable-guest qualification remain required before RC promotion. See
|
|
241
|
+
`docs/reference/workerbee-profile-adapter.md`.
|
|
242
|
+
|
|
243
|
+
API endpoints (when started with `--metrics-port`): see `docs/reference/http-api.md`.
|
|
244
|
+
|
|
245
|
+
Multi-container tips:
|
|
246
|
+
- Add sidecars under `spec.containers` and init containers under `spec.initContainers`.
|
|
247
|
+
- Use `ae logs <app> --container <name>` and `ae exec <app> --container <name> -- <cmd>` to target a specific container.
|
|
248
|
+
- Config/Secret file projections are mounted at `/var/run/ae/config/<app>`; sidecars can add custom `projectionMounts` to bind specific subpaths to custom mount points.
|
|
249
|
+
- Namespace targeting: add `-n <ns>`/`--namespace` or use `ns/app` (or `ns--app`) when apps live outside `default`.
|
|
250
|
+
|
|
251
|
+
Multi-node lab (controller + agents + overlay Service VIPs):
|
|
252
|
+
- Controller: `AE_ENABLE_SERVICE_PROXY=1 AE_SERVICE_PROVIDER=overlay AE_AGENT_API_TOKEN=changeme python -m ae.controller --loop --specs specs/ --metrics-port 9108`
|
|
253
|
+
- Worker agent on another host: `AE_CONTROLLER_URL=http://<controller>:9110 AE_AGENT_TOKEN=$AE_AGENT_API_TOKEN python -m ae.node --runtime-backend podman --port 9109 --ensure-pod-net`
|
|
254
|
+
- Apply the multi-node sample: `python -m ae.cli apply -f specs/examples/echo-multinode.yaml`
|
|
255
|
+
- Inspect nodes/placement: `ae nodes list`, `ae status echo-mn --wide --events`
|
|
256
|
+
- Full walkthrough: `docs/guides/multinode-lab.md`
|
|
257
|
+
|
|
258
|
+
Kubernetes API shim (kubectl/helm):
|
|
259
|
+
- Start shim (Postgres or SQLite): `AE_APISHIM_TOKEN=devtoken python -m ae.apishim serve --host 127.0.0.1 --port 8445`
|
|
260
|
+
- Point kubectl: `kubectl --server=http://127.0.0.1:8445 --token $AE_APISHIM_TOKEN get pods`
|
|
261
|
+
- Port-forward and apply work for Deployments/Services/Ingress/HPA/StatefulSet/DaemonSet/Job/CronJob.
|
|
262
|
+
- Compatibility matrix and open gaps: `docs/reference/apishim-compatibility-matrix.md`, `docs/reference/apishim-roadmap.md`.
|
|
263
|
+
|
|
264
|
+
Inference fabric (experimental):
|
|
265
|
+
- Apply a cell manifest: `ae cell apply -f specs/examples/inference/cell-bc-pp2-ray.yaml`
|
|
266
|
+
- Inspect cell state: `ae cell status cell-bc-pp2-ray --json`
|
|
267
|
+
- Inspect fabric sessions: `ae fabric sessions --json`
|
|
268
|
+
- Current behavior and limits: `docs/reference/inference-fabric.md`
|
|
269
|
+
- Hardware baseline and cluster prep: `docs/reference/ai-max-395-hardware-baseline.md`, `docs/ops/ai-max-395-cluster-prep.md`
|
|
270
|
+
- Formal design and roadmap: `docs/design/fabric-deployment-topology.md`, `docs/design/fabric-control-plane.md`, `docs/roadmap/distributed-compute-fabric.md`
|
|
271
|
+
- Formal target shape: AI Max+ 395-first execution cells behind a provider-facing HA edge, with an exact public node baseline today and Hyperon entering later as an advisory planning layer
|
|
272
|
+
|
|
273
|
+
## Kubernetes Alignment Matrix (Operator View)
|
|
274
|
+
|
|
275
|
+
Legend: Green = aligned/supported; Yellow = partial/best-effort; Red = out-of-scope; N/A = not applicable.
|
|
276
|
+
|
|
277
|
+
Columns: Runtime = k1s engine behavior; Shim = Kubernetes API shim (kubectl/helm); Export = `ae export-k8s` YAML.
|
|
278
|
+
|
|
279
|
+
Matrix source: `docs/site/k8s_status.json`.
|
|
280
|
+
|
|
281
|
+
| Area | Capability | Runtime | Shim | Export | Operator notes |
|
|
282
|
+
| --- | --- | --- | --- | --- | --- |
|
|
283
|
+
| API & tooling | kubectl get/apply/watch | N/A | Green | N/A | CI smoke gates cover apply/watch and OpenAPI drift. |
|
|
284
|
+
| API & tooling | SSA + JSON Merge Patch | N/A | Green | N/A | `managedFields` + conflict detection supported. |
|
|
285
|
+
| API & tooling | OpenAPI v2/v3 | N/A | Green | N/A | v3 mirrors v2; schemas validated in CI. |
|
|
286
|
+
| Workloads | Deployment/ReplicaSet/Pod semantics | Green | Green | Green | status/conditions + logs/exec/port-forward. |
|
|
287
|
+
| Workloads | StatefulSet/DaemonSet/Job/CronJob semantics | Yellow | Yellow | Green | stored + best-effort status; emulated as Deployment-like apps. |
|
|
288
|
+
| Workloads | HPA v2 | Green | Green | Green | backed by k1s autoscaling with status/currentMetrics. |
|
|
289
|
+
| Networking | Service (ClusterIP/NodePort/LB status) | Green | Green | Green | VIP/overlay-aware; EndpointSlice projection. |
|
|
290
|
+
| Networking | Ingress v1 (basic) | Green | Green | Green | no regex/canary/advanced annotations. |
|
|
291
|
+
| Networking | NetworkPolicy enforcement | Red | Red | Yellow | export emits NP; enforcement depends on CNI (k3s default flannel doesn't enforce). |
|
|
292
|
+
| Security/Auth | Tokens + RBAC | N/A | Green | Green | RBAC enforced in shim; export emits Role/RoleBinding presets. |
|
|
293
|
+
| Security/Auth | ServiceAccount tokens | N/A | Green | Green | shim issues SA tokens; exporter emits SA + bindings. |
|
|
294
|
+
| Security/Auth | PodSecurity admission/webhooks | Red | Red | Yellow | exporter can emit PSA namespace labels only. |
|
|
295
|
+
| Storage | PV/PVC/StorageClass/CSI semantics | Red | Red | Yellow | exporter can emit PVCs/volumeClaimTemplates only. |
|
|
296
|
+
| Observability | Logs/exec/port-forward | Green | Green | N/A | pod + service port-forward supported in shim. |
|
|
297
|
+
| Observability | Events API | Green | Green | N/A | controller/agent events surfaced to `/api/v1/events`. |
|
|
298
|
+
| Observability | metrics.k8s.io / aggregated APIs | Red | Red | N/A | out-of-scope. |
|
|
299
|
+
| Scheduling | nodeSelector/taints/tolerations/topology spread | Green | Green | Green | honored by scheduler; passed through on export. |
|
|
300
|
+
| Nodes | Inventory/cordon/drain | Green | Yellow | N/A | `ae nodes` supports cordon/drain; shim projects Nodes but no kubelet. |
|
|
301
|
+
| Operator workflow | Helm install/upgrade/uninstall (stateless charts) | N/A | Yellow | N/A | good for Deploy/Service/Ingress + RBAC/HPA/PDB; operators/controllers out-of-scope. |
|
|
302
|
+
| Operator workflow | Rollout control (pause/resume/canary ramp) | Green | N/A | N/A | k1s-native rollout policy with canary weights. |
|
|
303
|
+
|
|
304
|
+
### k1s-specific operator features (not part of upstream Kubernetes; not available in k3s by default)
|
|
305
|
+
|
|
306
|
+
- `ae k8s-check` portability checks and `ae k8s-report` compliance JSON embedded in docs.
|
|
307
|
+
- `ae export-k8s` presets (`web-hardened`, `web-strict`) + strict validation for portable YAML.
|
|
308
|
+
- Caddy site-fragment ingress with `ae tls` helpers for k8s-style TLS secrets.
|
|
309
|
+
- `ae plan` placement hints and `ae nodes` inventory/cordon/drain workflows.
|
|
310
|
+
- Rollout policy with canary weights + auto-ramp persisted in state.
|
|
311
|
+
- Built-in `/dashboard`, `/nodes`, and enriched `/metrics` endpoints.
|
|
312
|
+
|
|
313
|
+
### Quick token generation with expiration
|
|
314
|
+
- Generate API tokens that expire in 24 hours and write them to a file of exports you can `source`:
|
|
315
|
+
- `python -m ae.cli api tokens --generate --ttl-hours 24 -o .env.api`
|
|
316
|
+
|
|
317
|
+
## Makefile Helper Commands
|
|
318
|
+
|
|
319
|
+
Run with `make <target>`. You can override defaults via `VAR=value make <target>`.
|
|
320
|
+
|
|
321
|
+
Setup and quality:
|
|
322
|
+
- `make install`: install dev dependencies (`pip -e .[dev]`).
|
|
323
|
+
- `make watch`: install file-watching extras (`pip -e .[watch]`).
|
|
324
|
+
- `make test`: run unit tests (`pytest -q`).
|
|
325
|
+
- `make lint`: run `ruff check` + `mypy src/ae`.
|
|
326
|
+
- `make env-doctor`: report shell-provided tools, compose availability, host sockets/services, and local DNS/TLS bridge status.
|
|
327
|
+
- `make dev-local-clean`: remove helper-managed local DNS/TLS state.
|
|
328
|
+
- `make wheel`: build a wheel into `dist/`.
|
|
329
|
+
|
|
330
|
+
Local dev and samples:
|
|
331
|
+
- `make dev-up` / `make dev-down`: start/stop dev Docker Compose stack.
|
|
332
|
+
- `make down`: stop all dev/demo stacks (best-effort).
|
|
333
|
+
- `make loop`: controller reconcile loop (watch mode).
|
|
334
|
+
- `make run`: single reconcile pass.
|
|
335
|
+
- `make dev-min` / `make dev-etcd` / `make k1s-core` / `make k1s-edge`: runtime profiles with empty specs.
|
|
336
|
+
- `make k1s-core-cri` / `make k1s-edge-cri` / `make k1s-core-edge-cri` / `make k1s-edge-core-cri`: strict CRI profile aliases.
|
|
337
|
+
- `make edge-site-cri SITE_ID=<site> EDGE_PORT=<port> EDGE_HTTP_PORT=<port>`: strict CRI multi-site edge helper.
|
|
338
|
+
- `make apply-sample`: apply `specs/examples/echo.yaml`.
|
|
339
|
+
- `make status-sample`: status for `echo`.
|
|
340
|
+
- `make logs-sample`: logs for `echo`.
|
|
341
|
+
- `make k8s-smoke`: export + validate sample Kubernetes YAML (no cluster required).
|
|
342
|
+
- `make start-here`: build docs and open `docs/site/start-here.html`.
|
|
343
|
+
- `make haproxy-update`: regenerate HAProxy config from controller API.
|
|
344
|
+
- `make haproxy-watch`: watch/reload HAProxy config from controller API.
|
|
345
|
+
- `make install-systemd` / `make uninstall-systemd`: install/remove systemd units.
|
|
346
|
+
- `make install-docs-service` / `make uninstall-docs-service`: install/remove docs service.
|
|
347
|
+
- `make secrets-seal-demo`: run the sealed-secret demo helper.
|
|
348
|
+
|
|
349
|
+
Docs, labs, and playground:
|
|
350
|
+
- `make docs`: combine snapshots (if present), regenerate charts, build docs.
|
|
351
|
+
- `make docs-export`: build non-interactive HTML into `docs/export` (`DOCS_OUT_DIR=` override).
|
|
352
|
+
- `make docs-wiki-export`: export wiki-friendly Markdown into `docs/wiki` (`WIKI_OUT=` override).
|
|
353
|
+
- `make docs-watch`: rebuild docs when `combined/combined.csv` changes.
|
|
354
|
+
- `make docs-local-ignore`: locally hide `docs/site` changes from git status.
|
|
355
|
+
- `make docs-local-track`: re-enable tracking for `docs/site` updates before committing.
|
|
356
|
+
- `make labs-up` / `make labs-down`: dev labs stack (docs + controller via compose).
|
|
357
|
+
- `make labs-aio-up` / `make labs-aio-down`: all-in-one labs stack.
|
|
358
|
+
- `make labs-k3d-up` / `make labs-k3d-down`: bring up/down local k3d cluster for labs.
|
|
359
|
+
- `make labs-apishim-env`: print apishim tokens from `state/profiles/dev-etcd/apishim.env`.
|
|
360
|
+
- `make apishim-smoke`: quick API shim health check on port 8445.
|
|
361
|
+
- `make shim-helm-demo`: run the helm shim demo helper.
|
|
362
|
+
|
|
363
|
+
Demo workflows:
|
|
364
|
+
- `make demo`: run the playground labs demo (`--labs --labs-token`; podman backend, plaintext secrets allowed).
|
|
365
|
+
- `make demo-help`: show demo script help.
|
|
366
|
+
- `make demo-down`: tear down demo stacks.
|
|
367
|
+
- `make reg-cache-reset`: clear local registry cache used by demos.
|
|
368
|
+
- `make demo-hardened`: run hardened demo flow.
|
|
369
|
+
- `make demo-reset`: reset demo/labs state and prune volumes.
|
|
370
|
+
- `make dashboard-reload`: reload controller under the dashboard supervisor.
|
|
371
|
+
- `make dashboard-restart`: restart the supervisor and reload.
|
|
372
|
+
|
|
373
|
+
Integration and e2e:
|
|
374
|
+
- `make integ-test`: integration tests (`pytest -q tests/integration/`).
|
|
375
|
+
- `make e2e` / `make e2e-multiport`: run the multiport e2e script.
|
|
376
|
+
|
|
377
|
+
Benchmarks (memory + runtime tooling):
|
|
378
|
+
- `make bench-mem-k1s`: snapshot k1s memory.
|
|
379
|
+
- `make bench-mem-k3s`: snapshot k3s memory.
|
|
380
|
+
- `make bench-mem-debug`: quick debug benchmark pass.
|
|
381
|
+
- `make bench-mem-agg`: aggregate latest snapshot under a label.
|
|
382
|
+
- `make bench-mem-matrix-k1s`: run k1s replica matrix snapshots.
|
|
383
|
+
- `make bench-mem-combine`: combine snapshots into `combined/*`.
|
|
384
|
+
- `make bench-mem-verify`: verify a snapshot and print per-container split.
|
|
385
|
+
- `make bench-k3s-up` / `make bench-k3s-down`: manage a k3s bench cluster.
|
|
386
|
+
- `make bench-mem-matrix-k3s`: run k3s replica matrix snapshots.
|
|
387
|
+
- `make bench-mem-rollout-k1s`: run k1s rollout snapshots.
|
|
388
|
+
- `make bench-mem-rollout-k3s`: run k3s rollout snapshots.
|
|
389
|
+
- `make bench-mem-plot`: render benchmark charts.
|
|
390
|
+
- `make bench-mem-e2e-k3s-sudo`: full k3s e2e (matrix + rollout + charts) with sudo.
|
|
391
|
+
- `make bench-mem-e2e-k1s`: full k1s e2e (matrix + rollout + charts).
|
|
392
|
+
- `make bench-mem-e2e-k1s-sudo`: k1s e2e with sudo snapshots.
|
|
393
|
+
- `make bench-mem-e2e-k1nd`: k1nd (k1s-in-Docker) e2e.
|
|
394
|
+
- `make bench-mem-e2e-k1nd-sudo`: k1nd e2e with sudo snapshots.
|
|
395
|
+
- `make bench-mem-e2e-k1nd-quick`: fast k1nd profile.
|
|
396
|
+
- `make bench-mem-e2e-k1nd-resume-rollout`: resume only the rollout phase.
|
|
397
|
+
- `make bench-mem-e2e-k1nd-down`: k1nd e2e then tear down compose.
|
|
398
|
+
- `make bench-mem-e2e-all`: run all baseline suites.
|
|
399
|
+
- `make bench-mem-e2e-minimal`: minimal baseline suite.
|
|
400
|
+
- `make bench-watch-runtime`: live runtime debug snapshotter.
|
|
401
|
+
- `make bench-mem-e2e-baselines`: run baseline suite matrix.
|
|
402
|
+
- `make bench-mem-e2e-baselines-sudo`: baseline suite with sudo.
|
|
403
|
+
- `make bench-mem-docs`: combine + plot + rebuild docs.
|
|
404
|
+
- `make bench-retained-rebuild PROFILE=final STAMP=<fresh-stamp> DELETE_DROPPED=1`: rebuild retained benchmark artifacts from one validated rerun stamp plus the frozen legacy reference.
|
|
405
|
+
- `make bench-fix-perms`: normalize artifact permissions.
|
|
406
|
+
- `make bench-mem-backfill`: backfill missing summary.json + rebuild docs.
|
|
407
|
+
- `make bench-engines-clear`: stop/remove all containers (dangerous).
|
|
408
|
+
- `make bench-state-clean`: remove benchmark-only state (`state/bench-*`).
|
|
409
|
+
- `make dev-state-clean`: wipe full `state/` (requires `CONFIRM=1`).
|
|
410
|
+
- `make bench-mem-backfill-oci`: add OCI runtime metadata and recompute charts.
|
|
411
|
+
- `make bench-mem-backfill-oci-latest`: backfill OCI metadata for latest label only.
|
|
412
|
+
- `make bench-mem-finalize-sudo`: legacy finalize helper for mixed-ownership cleanup; retained publishing should use `bench-retained-rebuild`.
|
|
413
|
+
- `make bench-mem-e2e-k3s`: full k3s e2e (matrix + rollout + charts).
|
|
414
|
+
- `make bench-mem-idle-k1s`: idle baseline snapshot for k1s.
|
|
415
|
+
- `make bench-mem-idle-k3s`: idle baseline snapshot for k3s.
|
|
416
|
+
|
|
417
|
+
Images and containers:
|
|
418
|
+
- `make image-docker`: build controller image with Dockerfile.
|
|
419
|
+
- `make image-podman`: build controller image with Containerfile.
|
|
420
|
+
- `make push-docker` / `make push-podman`: push controller image.
|
|
421
|
+
- `make docker-build-controller`: build controller image (ops/images/controller.Dockerfile).
|
|
422
|
+
- `make docker-run-controller`: run controller container with specs/state mounts.
|
|
423
|
+
|
|
424
|
+
## Kubernetes Export Quickstart
|
|
425
|
+
|
|
426
|
+
- Render the echo example to Kubernetes YAML and validate:
|
|
427
|
+
- `python -m ae.cli export-k8s -f specs/examples/echo.yaml --namespace demo --ingress-class traefik --validate > k8s.yaml`
|
|
428
|
+
- Include ConfigMap/Secret objects, envFrom, and file projections (mounted at `/var/run/ae/config`):
|
|
429
|
+
- `python -m ae.cli export-k8s -f specs/examples/envfrom-and-projection.yaml --namespace demo --emit-configs --emit-secrets --validate > k8s.yaml`
|
|
430
|
+
- Harden NetworkPolicy quickly:
|
|
431
|
+
- `python -m ae.cli export-k8s -f specs/examples/echo.yaml --namespace demo --np-preset web --validate > k8s.yaml`
|
|
432
|
+
- `python -m ae.cli export-k8s -f specs/examples/echo.yaml --namespace demo --np-preset backend --validate > k8s.yaml`
|
|
433
|
+
- See `docs/reference/k8s-export.md` for supported fields: startupProbe, image pull options, env/envFrom, projected volumes, PDB/HPA, pod-level security, and more.
|
|
434
|
+
|
|
435
|
+
## Remote CLI (over LAN)
|
|
436
|
+
|
|
437
|
+
You can point the CLI at a controller running on another machine.
|
|
438
|
+
|
|
439
|
+
Controller (on the host):
|
|
440
|
+
|
|
441
|
+
```
|
|
442
|
+
export AE_API_MUTATIONS=1
|
|
443
|
+
export AE_API_READ_TOKEN=readtoken
|
|
444
|
+
export AE_API_SCALER_TOKEN=scaletoken
|
|
445
|
+
export AE_API_ADMIN_TOKEN=admintoken
|
|
446
|
+
python -m ae.controller --loop --specs specs/ --metrics-port 9108 --watch
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
Client (from another machine):
|
|
450
|
+
|
|
451
|
+
```
|
|
452
|
+
# Reads
|
|
453
|
+
ae --server http://<controller-ip>:9108 --token readtoken status
|
|
454
|
+
ae --server http://<controller-ip>:9108 --token readtoken events echo --limit 20
|
|
455
|
+
|
|
456
|
+
# Mutations
|
|
457
|
+
ae --server http://<controller-ip>:9108 --token scaletoken scale echo --replicas 2
|
|
458
|
+
ae --server http://<controller-ip>:9108 --token admintoken delete echo --purge
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
See `docs/ops/runbook.md` → “Remote CLI over LAN” for details and curl examples.
|
|
462
|
+
|
|
463
|
+
## License
|
|
464
|
+
|
|
465
|
+
This project is licensed under the Apache License, Version 2.0. See `LICENSE` for full terms, including the patent grant and redistribution requirements.
|