cockpit-cli 0.1.2__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.
- cockpit_cli-0.1.2/.gitignore +21 -0
- cockpit_cli-0.1.2/LICENSE +21 -0
- cockpit_cli-0.1.2/PKG-INFO +467 -0
- cockpit_cli-0.1.2/README.md +403 -0
- cockpit_cli-0.1.2/pyproject.toml +109 -0
- cockpit_cli-0.1.2/src/cockpit/__init__.py +6 -0
- cockpit_cli-0.1.2/src/cockpit/__main__.py +25 -0
- cockpit_cli-0.1.2/src/cockpit/app.py +198 -0
- cockpit_cli-0.1.2/src/cockpit/application/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/application/dispatch/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/application/dispatch/command_dispatcher.py +114 -0
- cockpit_cli-0.1.2/src/cockpit/application/dispatch/command_parser.py +63 -0
- cockpit_cli-0.1.2/src/cockpit/application/dispatch/event_bus.py +49 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/base.py +38 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/cron_handlers.py +92 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/curl_handlers.py +133 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/db_handlers.py +229 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/docker_handlers.py +174 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/layout_handlers.py +126 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/layout_payload.py +48 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/session_handlers.py +96 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/tab_handlers.py +33 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/terminal_handlers.py +204 -0
- cockpit_cli-0.1.2/src/cockpit/application/handlers/workspace_handlers.py +152 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/activity_log_service.py +293 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/connection_service.py +74 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/datasource_service.py +305 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/layout_service.py +517 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/navigation_controller.py +145 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/plugin_service.py +752 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/secret_service.py +896 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/session_service.py +158 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/web_admin_service.py +396 -0
- cockpit_cli-0.1.2/src/cockpit/application/services/workspace_service.py +94 -0
- cockpit_cli-0.1.2/src/cockpit/bootstrap.py +469 -0
- cockpit_cli-0.1.2/src/cockpit/domain/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/domain/commands/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/domain/commands/command.py +50 -0
- cockpit_cli-0.1.2/src/cockpit/domain/events/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/domain/events/base.py +38 -0
- cockpit_cli-0.1.2/src/cockpit/domain/events/domain_events.py +50 -0
- cockpit_cli-0.1.2/src/cockpit/domain/events/runtime_events.py +61 -0
- cockpit_cli-0.1.2/src/cockpit/domain/models/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/domain/models/datasource.py +47 -0
- cockpit_cli-0.1.2/src/cockpit/domain/models/layout.py +38 -0
- cockpit_cli-0.1.2/src/cockpit/domain/models/panel_state.py +20 -0
- cockpit_cli-0.1.2/src/cockpit/domain/models/plugin.py +42 -0
- cockpit_cli-0.1.2/src/cockpit/domain/models/secret.py +81 -0
- cockpit_cli-0.1.2/src/cockpit/domain/models/session.py +26 -0
- cockpit_cli-0.1.2/src/cockpit/domain/models/workspace.py +31 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/config/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/config/config_loader.py +50 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/cron/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/cron/cron_adapter.py +353 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/datasources/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/datasources/base.py +40 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/datasources/chroma_adapter.py +147 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/datasources/mongodb_adapter.py +127 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/datasources/redis_adapter.py +94 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/datasources/sqlalchemy_adapter.py +147 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/datasources/url_tools.py +36 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/db/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/db/database_adapter.py +349 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/docker/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/docker/docker_adapter.py +310 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/filesystem/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/filesystem/remote_filesystem_adapter.py +123 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/git/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/git/git_adapter.py +202 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/http/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/http/http_adapter.py +86 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/persistence/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/persistence/migrations.py +58 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/persistence/repositories.py +735 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/persistence/schema.py +151 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/persistence/snapshot_codec.py +101 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/persistence/sqlite_store.py +76 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/secrets/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/secrets/cache_cipher.py +49 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/secrets/secret_resolver.py +326 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/secrets/vault_client.py +407 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/shell/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/shell/base.py +28 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/shell/local_shell_adapter.py +56 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/shell/shell_adapter_router.py +36 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/ssh/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/ssh/command_runner.py +80 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/ssh/ssh_shell_adapter.py +54 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/ssh/tunnel_manager.py +161 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/system/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/system/clipboard.py +69 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/web/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/web/admin_server.py +893 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/web/layout_editor/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/web/layout_editor/assets.py +30 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/web/layout_editor/static/assets/index-B7icxjs9.js +9 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/web/layout_editor/static/assets/index-DOF49nFj.css +1 -0
- cockpit_cli-0.1.2/src/cockpit/infrastructure/web/layout_editor/static/index.html +14 -0
- cockpit_cli-0.1.2/src/cockpit/plugins/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/plugins/loader.py +116 -0
- cockpit_cli-0.1.2/src/cockpit/plugins/notes_plugin.py +104 -0
- cockpit_cli-0.1.2/src/cockpit/plugins/runtime/__init__.py +13 -0
- cockpit_cli-0.1.2/src/cockpit/plugins/runtime/contracts.py +94 -0
- cockpit_cli-0.1.2/src/cockpit/plugins/runtime/host_client.py +265 -0
- cockpit_cli-0.1.2/src/cockpit/plugins/runtime/host_main.py +342 -0
- cockpit_cli-0.1.2/src/cockpit/plugins/runtime/remote_handler.py +34 -0
- cockpit_cli-0.1.2/src/cockpit/plugins/runtime/remote_panel.py +122 -0
- cockpit_cli-0.1.2/src/cockpit/runtime/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/runtime/pty_manager.py +272 -0
- cockpit_cli-0.1.2/src/cockpit/runtime/stream_router.py +28 -0
- cockpit_cli-0.1.2/src/cockpit/runtime/task_supervisor.py +54 -0
- cockpit_cli-0.1.2/src/cockpit/shared/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/shared/config.py +37 -0
- cockpit_cli-0.1.2/src/cockpit/shared/enums.py +51 -0
- cockpit_cli-0.1.2/src/cockpit/shared/risk.py +47 -0
- cockpit_cli-0.1.2/src/cockpit/shared/types.py +12 -0
- cockpit_cli-0.1.2/src/cockpit/shared/utils.py +46 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/bindings/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/bindings/libvterm_build.py +104 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/bindings/libvterm_ffi.py +23 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/engine/__init__.py +22 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/engine/base.py +20 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/engine/factory.py +16 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/engine/fallback.py +221 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/engine/libvterm_engine.py +180 -0
- cockpit_cli-0.1.2/src/cockpit/terminal/engine/models.py +92 -0
- cockpit_cli-0.1.2/src/cockpit/tooling/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/tooling/release.py +168 -0
- cockpit_cli-0.1.2/src/cockpit/ui/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/__init__.py +1 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/base_panel.py +38 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/cron_panel.py +196 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/curl_panel.py +173 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/db_panel.py +422 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/docker_panel.py +210 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/git_panel.py +200 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/logs_panel.py +219 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/panel_host.py +385 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/registry.py +82 -0
- cockpit_cli-0.1.2/src/cockpit/ui/panels/work_panel.py +685 -0
- cockpit_cli-0.1.2/src/cockpit/ui/screens/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/ui/screens/app_shell.py +820 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/__init__.py +2 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/command_palette.py +88 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/confirmation_bar.py +25 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/embedded_terminal.py +590 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/file_context.py +40 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/file_explorer.py +177 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/header.py +8 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/slash_input.py +16 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/status_bar.py +39 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/tab_bar.py +74 -0
- cockpit_cli-0.1.2/src/cockpit/ui/widgets/terminal_buffer.py +27 -0
- cockpit_cli-0.1.2/tests/__init__.py +1 -0
- cockpit_cli-0.1.2/tests/e2e/__init__.py +1 -0
- cockpit_cli-0.1.2/tests/e2e/test_app_resume_flow.py +904 -0
- cockpit_cli-0.1.2/tests/e2e/test_embedded_terminal_widget.py +221 -0
- cockpit_cli-0.1.2/tests/integration/__init__.py +1 -0
- cockpit_cli-0.1.2/tests/integration/test_activity_log_service.py +141 -0
- cockpit_cli-0.1.2/tests/integration/test_datasource_live_backends.py +191 -0
- cockpit_cli-0.1.2/tests/integration/test_git_adapter.py +60 -0
- cockpit_cli-0.1.2/tests/integration/test_navigation_controller.py +347 -0
- cockpit_cli-0.1.2/tests/integration/test_pty_manager.py +246 -0
- cockpit_cli-0.1.2/tests/integration/test_sqlite_repositories.py +274 -0
- cockpit_cli-0.1.2/tests/integration/test_web_admin_server.py +546 -0
- cockpit_cli-0.1.2/tests/unit/__init__.py +1 -0
- cockpit_cli-0.1.2/tests/unit/test_app_cli.py +55 -0
- cockpit_cli-0.1.2/tests/unit/test_clipboard_service.py +51 -0
- cockpit_cli-0.1.2/tests/unit/test_command_parser.py +42 -0
- cockpit_cli-0.1.2/tests/unit/test_config_loader.py +58 -0
- cockpit_cli-0.1.2/tests/unit/test_connection_service.py +41 -0
- cockpit_cli-0.1.2/tests/unit/test_cron_adapter.py +133 -0
- cockpit_cli-0.1.2/tests/unit/test_cron_handler.py +70 -0
- cockpit_cli-0.1.2/tests/unit/test_curl_handler.py +81 -0
- cockpit_cli-0.1.2/tests/unit/test_database_adapter.py +98 -0
- cockpit_cli-0.1.2/tests/unit/test_datasource_service.py +200 -0
- cockpit_cli-0.1.2/tests/unit/test_db_handler.py +173 -0
- cockpit_cli-0.1.2/tests/unit/test_dispatcher.py +98 -0
- cockpit_cli-0.1.2/tests/unit/test_docker_adapter.py +202 -0
- cockpit_cli-0.1.2/tests/unit/test_docker_handler.py +144 -0
- cockpit_cli-0.1.2/tests/unit/test_event_bus.py +30 -0
- cockpit_cli-0.1.2/tests/unit/test_git_adapter_remote.py +74 -0
- cockpit_cli-0.1.2/tests/unit/test_http_adapter.py +40 -0
- cockpit_cli-0.1.2/tests/unit/test_layout_handler.py +136 -0
- cockpit_cli-0.1.2/tests/unit/test_layout_service.py +129 -0
- cockpit_cli-0.1.2/tests/unit/test_models.py +137 -0
- cockpit_cli-0.1.2/tests/unit/test_plugin_loader.py +104 -0
- cockpit_cli-0.1.2/tests/unit/test_plugin_service.py +492 -0
- cockpit_cli-0.1.2/tests/unit/test_release_tooling.py +81 -0
- cockpit_cli-0.1.2/tests/unit/test_remote_filesystem_adapter.py +82 -0
- cockpit_cli-0.1.2/tests/unit/test_secret_resolver.py +100 -0
- cockpit_cli-0.1.2/tests/unit/test_secret_service.py +303 -0
- cockpit_cli-0.1.2/tests/unit/test_snapshot_codec.py +49 -0
- cockpit_cli-0.1.2/tests/unit/test_ssh_shell_adapter.py +23 -0
- cockpit_cli-0.1.2/tests/unit/test_target_risk.py +41 -0
- cockpit_cli-0.1.2/tests/unit/test_terminal_engine.py +74 -0
- cockpit_cli-0.1.2/tests/unit/test_tunnel_manager.py +124 -0
- cockpit_cli-0.1.2/tests/unit/test_vault_client.py +83 -0
- cockpit_cli-0.1.2/tests/unit/test_workspace_handler.py +34 -0
- cockpit_cli-0.1.2/third_party/libvterm/.bzrignore +13 -0
- cockpit_cli-0.1.2/third_party/libvterm/.github/dependabot.yml +8 -0
- cockpit_cli-0.1.2/third_party/libvterm/.github/workflows/sync.yml +44 -0
- cockpit_cli-0.1.2/third_party/libvterm/CODE-MAP +81 -0
- cockpit_cli-0.1.2/third_party/libvterm/CONTRIBUTING +22 -0
- cockpit_cli-0.1.2/third_party/libvterm/LICENSE +23 -0
- cockpit_cli-0.1.2/third_party/libvterm/Makefile +142 -0
- cockpit_cli-0.1.2/third_party/libvterm/README.md +9 -0
- cockpit_cli-0.1.2/third_party/libvterm/bin/unterm.c +280 -0
- cockpit_cli-0.1.2/third_party/libvterm/bin/vterm-ctrl.c +354 -0
- cockpit_cli-0.1.2/third_party/libvterm/bin/vterm-dump.c +245 -0
- cockpit_cli-0.1.2/third_party/libvterm/doc/URLs +14 -0
- cockpit_cli-0.1.2/third_party/libvterm/doc/seqs.txt +283 -0
- cockpit_cli-0.1.2/third_party/libvterm/find-wide-chars.pl +30 -0
- cockpit_cli-0.1.2/third_party/libvterm/include/vterm.h +645 -0
- cockpit_cli-0.1.2/third_party/libvterm/include/vterm_keycodes.h +61 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/encoding/DECdrawing.inc +36 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/encoding/DECdrawing.tbl +31 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/encoding/uk.inc +6 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/encoding/uk.tbl +1 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/encoding.c +230 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/fullwidth.inc +111 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/keyboard.c +226 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/mouse.c +99 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/parser.c +402 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/pen.c +607 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/rect.h +56 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/screen.c +1214 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/state.c +2380 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/unicode.c +313 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/utf8.h +39 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/vterm.c +430 -0
- cockpit_cli-0.1.2/third_party/libvterm/src/vterm_internal.h +298 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/02parser.test +266 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/03encoding_utf8.test +122 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/10state_putglyph.test +74 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/11state_movecursor.test +224 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/12state_scroll.test +160 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/13state_edit.test +308 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/14state_encoding.test +105 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/15state_mode.test +86 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/16state_resize.test +48 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/17state_mouse.test +191 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/18state_termprops.test +42 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/20state_wrapping.test +69 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/21state_tabstops.test +60 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/22state_save.test +64 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/25state_input.test +157 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/26state_query.test +63 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/27state_reset.test +32 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/28state_dbl_wh.test +61 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/29state_fallback.test +31 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/30state_pen.test +133 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/31state_rep.test +128 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/32state_flow.test +28 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/40state_selection.test +89 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/60screen_ascii.test +69 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/61screen_unicode.test +47 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/62screen_damage.test +155 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/63screen_resize.test +117 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/64screen_pen.test +71 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/65screen_protect.test +16 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/66screen_extent.test +11 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/67screen_dbl_wh.test +38 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/68screen_termprops.test +17 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/69screen_pushline.test +17 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/69screen_reflow.test +88 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/90vttest_01-movement-1.test +87 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/90vttest_01-movement-2.test +40 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/90vttest_01-movement-3.test +21 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/90vttest_01-movement-4.test +36 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/90vttest_02-screen-1.test +18 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/90vttest_02-screen-2.test +29 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/90vttest_02-screen-3.test +16 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/90vttest_02-screen-4.test +17 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/92lp1640917.test +13 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/harness.c +1253 -0
- cockpit_cli-0.1.2/third_party/libvterm/t/run-test.pl +234 -0
- cockpit_cli-0.1.2/third_party/libvterm/tbl2inc_c.pl +30 -0
- cockpit_cli-0.1.2/third_party/libvterm/vterm.pc.in +8 -0
- cockpit_cli-0.1.2/web/layout-editor/index.html +13 -0
- cockpit_cli-0.1.2/web/layout-editor/package-lock.json +4573 -0
- cockpit_cli-0.1.2/web/layout-editor/package.json +26 -0
- cockpit_cli-0.1.2/web/layout-editor/src/App.tsx +318 -0
- cockpit_cli-0.1.2/web/layout-editor/src/api/layoutEditor.ts +63 -0
- cockpit_cli-0.1.2/web/layout-editor/src/components/Inspector.tsx +132 -0
- cockpit_cli-0.1.2/web/layout-editor/src/components/LayoutCanvas.tsx +194 -0
- cockpit_cli-0.1.2/web/layout-editor/src/components/PanelLibrary.tsx +51 -0
- cockpit_cli-0.1.2/web/layout-editor/src/main.tsx +12 -0
- cockpit_cli-0.1.2/web/layout-editor/src/state/editor.test.ts +72 -0
- cockpit_cli-0.1.2/web/layout-editor/src/state/editor.ts +352 -0
- cockpit_cli-0.1.2/web/layout-editor/src/styles.css +456 -0
- cockpit_cli-0.1.2/web/layout-editor/src/types.ts +44 -0
- cockpit_cli-0.1.2/web/layout-editor/tsconfig.json +22 -0
- cockpit_cli-0.1.2/web/layout-editor/tsconfig.node.json +10 -0
- cockpit_cli-0.1.2/web/layout-editor/vite.config.ts +12 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
|
|
4
|
+
.cockpit/
|
|
5
|
+
.superpowers/
|
|
6
|
+
|
|
7
|
+
.pytest_cache/
|
|
8
|
+
.mypy_cache/
|
|
9
|
+
.ruff_cache/
|
|
10
|
+
.venv/
|
|
11
|
+
.sbom-venv/
|
|
12
|
+
build/
|
|
13
|
+
dist/
|
|
14
|
+
release-assets/
|
|
15
|
+
vendor/
|
|
16
|
+
/cockpit/
|
|
17
|
+
/home/
|
|
18
|
+
/src/cockpit/terminal/bindings/_libvterm.so
|
|
19
|
+
/src/cockpit/terminal/bindings/cockpit/
|
|
20
|
+
/src/cockpit/terminal/bindings/home/
|
|
21
|
+
/web/layout-editor/node_modules/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 DamienDrash
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cockpit-cli
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: Keyboard-first TUI platform for developer workspaces.
|
|
5
|
+
License-File: LICENSE
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Requires-Dist: cffi>=1.17
|
|
8
|
+
Requires-Dist: packaging>=24.0
|
|
9
|
+
Requires-Dist: pyyaml>=6.0
|
|
10
|
+
Requires-Dist: sqlalchemy>=2.0
|
|
11
|
+
Requires-Dist: textual>=0.58.0
|
|
12
|
+
Provides-Extra: all-datasources
|
|
13
|
+
Requires-Dist: chromadb>=0.5; extra == 'all-datasources'
|
|
14
|
+
Requires-Dist: duckdb-engine>=0.13; extra == 'all-datasources'
|
|
15
|
+
Requires-Dist: duckdb>=1.1; extra == 'all-datasources'
|
|
16
|
+
Requires-Dist: google-cloud-bigquery>=3.30; extra == 'all-datasources'
|
|
17
|
+
Requires-Dist: ibis-framework>=10.0; extra == 'all-datasources'
|
|
18
|
+
Requires-Dist: mariadb>=1.1; extra == 'all-datasources'
|
|
19
|
+
Requires-Dist: psycopg[binary]>=3.2; extra == 'all-datasources'
|
|
20
|
+
Requires-Dist: pybigquery>=0.10; extra == 'all-datasources'
|
|
21
|
+
Requires-Dist: pymongo>=4.10; extra == 'all-datasources'
|
|
22
|
+
Requires-Dist: pymysql>=1.1; extra == 'all-datasources'
|
|
23
|
+
Requires-Dist: pyodbc>=5.1; extra == 'all-datasources'
|
|
24
|
+
Requires-Dist: redis>=5.0; extra == 'all-datasources'
|
|
25
|
+
Requires-Dist: snowflake-sqlalchemy>=1.6; extra == 'all-datasources'
|
|
26
|
+
Provides-Extra: analytics
|
|
27
|
+
Requires-Dist: ibis-framework>=10.0; extra == 'analytics'
|
|
28
|
+
Provides-Extra: bigquery
|
|
29
|
+
Requires-Dist: google-cloud-bigquery>=3.30; extra == 'bigquery'
|
|
30
|
+
Requires-Dist: pybigquery>=0.10; extra == 'bigquery'
|
|
31
|
+
Provides-Extra: chroma
|
|
32
|
+
Requires-Dist: chromadb>=0.5; extra == 'chroma'
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
35
|
+
Requires-Dist: textual>=0.58.0; extra == 'dev'
|
|
36
|
+
Provides-Extra: duckdb
|
|
37
|
+
Requires-Dist: duckdb-engine>=0.13; extra == 'duckdb'
|
|
38
|
+
Requires-Dist: duckdb>=1.1; extra == 'duckdb'
|
|
39
|
+
Provides-Extra: mariadb
|
|
40
|
+
Requires-Dist: mariadb>=1.1; extra == 'mariadb'
|
|
41
|
+
Provides-Extra: mongo
|
|
42
|
+
Requires-Dist: pymongo>=4.10; extra == 'mongo'
|
|
43
|
+
Provides-Extra: mssql
|
|
44
|
+
Requires-Dist: pyodbc>=5.1; extra == 'mssql'
|
|
45
|
+
Provides-Extra: mysql
|
|
46
|
+
Requires-Dist: pymysql>=1.1; extra == 'mysql'
|
|
47
|
+
Provides-Extra: postgres
|
|
48
|
+
Requires-Dist: psycopg[binary]>=3.2; extra == 'postgres'
|
|
49
|
+
Provides-Extra: redis
|
|
50
|
+
Requires-Dist: redis>=5.0; extra == 'redis'
|
|
51
|
+
Provides-Extra: release
|
|
52
|
+
Requires-Dist: build>=1.2; extra == 'release'
|
|
53
|
+
Requires-Dist: cyclonedx-bom>=4.2; extra == 'release'
|
|
54
|
+
Requires-Dist: sigstore>=3.6; extra == 'release'
|
|
55
|
+
Provides-Extra: secrets
|
|
56
|
+
Requires-Dist: cryptography>=44.0; extra == 'secrets'
|
|
57
|
+
Requires-Dist: keyring>=25.6; extra == 'secrets'
|
|
58
|
+
Provides-Extra: snowflake
|
|
59
|
+
Requires-Dist: snowflake-sqlalchemy>=1.6; extra == 'snowflake'
|
|
60
|
+
Provides-Extra: vault
|
|
61
|
+
Requires-Dist: cryptography>=44.0; extra == 'vault'
|
|
62
|
+
Requires-Dist: keyring>=25.6; extra == 'vault'
|
|
63
|
+
Description-Content-Type: text/markdown
|
|
64
|
+
|
|
65
|
+
# cockpit-cli
|
|
66
|
+
|
|
67
|
+
Keyboard-first developer workspace cockpit for Linux.
|
|
68
|
+
|
|
69
|
+
`cockpit-cli` combines a Textual TUI, a local web admin plane, persisted sessions,
|
|
70
|
+
guarded mutating actions, and a plugin-capable datasource platform. The app is
|
|
71
|
+
Linux-first and optimized for local development, SSH-backed environments, and
|
|
72
|
+
operator workflows that need one command/event model across terminal, Git,
|
|
73
|
+
Docker, Cron, DB, HTTP, and layout management.
|
|
74
|
+
|
|
75
|
+
## Core Capabilities
|
|
76
|
+
|
|
77
|
+
- persisted workspaces and sessions backed by SQLite
|
|
78
|
+
- local and SSH-backed workspaces with resume across restarts
|
|
79
|
+
- Textual TUI with `Work`, `Git`, `Docker`, `Cron`, `DB`, `Curl`, and `Logs`
|
|
80
|
+
- editable split layouts with persisted variants
|
|
81
|
+
- command palette, slash commands, and keybindings through one dispatcher
|
|
82
|
+
- guarded mutating flows for Docker, Cron, DB, and HTTP actions
|
|
83
|
+
- local web admin for datasource profiles, plugin installs, layouts, and diagnostics
|
|
84
|
+
- Vault-first secret registry with compatibility providers for env, file, and keyring
|
|
85
|
+
- plugin install/update/pin/remove with repo or package requirements
|
|
86
|
+
- plugin compatibility, permission allowlists, and on-disk integrity verification before runtime activation
|
|
87
|
+
- broad datasource support through SQLAlchemy dialects plus non-SQL adapters
|
|
88
|
+
- terminal scrollback, search, keyboard or mouse-assisted selection, export, and clipboard copy
|
|
89
|
+
|
|
90
|
+
## Supported Datasource Families
|
|
91
|
+
|
|
92
|
+
Built-in datasource profiles support these backends:
|
|
93
|
+
|
|
94
|
+
- `sqlite`
|
|
95
|
+
- `postgres` / `postgresql`
|
|
96
|
+
- `mysql`
|
|
97
|
+
- `mariadb`
|
|
98
|
+
- `mssql`
|
|
99
|
+
- `duckdb`
|
|
100
|
+
- `bigquery`
|
|
101
|
+
- `snowflake`
|
|
102
|
+
- `mongodb`
|
|
103
|
+
- `redis`
|
|
104
|
+
- `chromadb`
|
|
105
|
+
|
|
106
|
+
Relational and analytics backends run through SQLAlchemy with external dialects
|
|
107
|
+
where appropriate. Non-SQL backends use dedicated adapters. Additional
|
|
108
|
+
datasources can be supplied by plugins.
|
|
109
|
+
|
|
110
|
+
## Tech Stack
|
|
111
|
+
|
|
112
|
+
- Python 3.11+
|
|
113
|
+
- Textual
|
|
114
|
+
- SQLite
|
|
115
|
+
- YAML + TCSS
|
|
116
|
+
- SQLAlchemy
|
|
117
|
+
- optional Ibis and backend-specific drivers
|
|
118
|
+
|
|
119
|
+
## Repository Layout
|
|
120
|
+
|
|
121
|
+
```text
|
|
122
|
+
config/
|
|
123
|
+
commands.yaml
|
|
124
|
+
connections.example.yaml
|
|
125
|
+
datasources.example.yaml
|
|
126
|
+
keybindings.yaml
|
|
127
|
+
layouts/
|
|
128
|
+
plugins.example.yaml
|
|
129
|
+
themes/
|
|
130
|
+
docs/
|
|
131
|
+
superpowers/
|
|
132
|
+
packaging/
|
|
133
|
+
arch/
|
|
134
|
+
src/cockpit/
|
|
135
|
+
tests/
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Installation
|
|
139
|
+
|
|
140
|
+
### Core install
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
git clone git@github.com:DamienDrash/cockpit_cli.git
|
|
144
|
+
cd cockpit_cli
|
|
145
|
+
python -m venv .venv
|
|
146
|
+
source .venv/bin/activate
|
|
147
|
+
pip install -e .
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Full datasource install
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
pip install -e '.[all-datasources]'
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Or install only the extras you need, for example:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
pip install -e '.[postgres,mysql,duckdb,mongo,redis]'
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Enable Vault, encrypted local cache support, and keyring compatibility:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
pip install -e '.[vault,secrets]'
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Install release and verification tooling:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
pip install -e '.[release]'
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Quick Start
|
|
175
|
+
|
|
176
|
+
Open the current directory:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
cockpit-cli open .
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Resume the last session:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
cockpit-cli resume
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
List connection aliases:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
cockpit-cli connections
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
List configured datasource profiles:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
cockpit-cli datasources
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Run the local web admin:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
cockpit-cli admin --open-browser
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## TUI Commands
|
|
207
|
+
|
|
208
|
+
Common commands:
|
|
209
|
+
|
|
210
|
+
```text
|
|
211
|
+
/workspace open .
|
|
212
|
+
/workspace open @prod:/srv/app
|
|
213
|
+
/workspace reopen_last
|
|
214
|
+
/session restore
|
|
215
|
+
/tab focus db
|
|
216
|
+
/layout apply_default
|
|
217
|
+
/layout toggle_orientation
|
|
218
|
+
/layout grow
|
|
219
|
+
/layout shrink
|
|
220
|
+
/terminal focus
|
|
221
|
+
/terminal restart
|
|
222
|
+
/terminal search "error"
|
|
223
|
+
/terminal search_next
|
|
224
|
+
/terminal search_prev
|
|
225
|
+
/terminal export .cockpit/terminal-buffer.txt
|
|
226
|
+
/terminal copy
|
|
227
|
+
/docker restart
|
|
228
|
+
/docker stop
|
|
229
|
+
/docker remove
|
|
230
|
+
/cron enable
|
|
231
|
+
/cron disable
|
|
232
|
+
/db run_query "SELECT 1"
|
|
233
|
+
/curl send GET https://example.com
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Web Admin
|
|
237
|
+
|
|
238
|
+
The local web admin exposes:
|
|
239
|
+
|
|
240
|
+
- datasource profile creation and deletion
|
|
241
|
+
- datasource execution for quick operator queries and mutations
|
|
242
|
+
- Vault profile management, login, lease diagnostics, transit actions, and managed secret references
|
|
243
|
+
- plugin install/update/pin/enable/remove
|
|
244
|
+
- layout cloning and split edits
|
|
245
|
+
- diagnostics for commands, panels, datasources, secrets, plugins, tunnels, and tool availability
|
|
246
|
+
|
|
247
|
+
It runs locally only and reuses the same application services as the TUI.
|
|
248
|
+
|
|
249
|
+
## Connection Profiles
|
|
250
|
+
|
|
251
|
+
Connection aliases live in `config/connections.yaml`. Start from
|
|
252
|
+
[connections.example.yaml](/home/damien/Dokumente/cockpit/config/connections.example.yaml).
|
|
253
|
+
|
|
254
|
+
Example:
|
|
255
|
+
|
|
256
|
+
```yaml
|
|
257
|
+
connections:
|
|
258
|
+
prod:
|
|
259
|
+
target: deploy@example.com
|
|
260
|
+
default_path: /srv/app
|
|
261
|
+
description: Production target
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Then open through either form:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
cockpit-cli open --connection prod /srv/app
|
|
268
|
+
cockpit-cli open @prod:/srv/app/current
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Datasource Profiles
|
|
272
|
+
|
|
273
|
+
Datasource profiles can be managed in the web admin or through
|
|
274
|
+
`config/datasources.yaml`. Start from
|
|
275
|
+
[datasources.example.yaml](/home/damien/Dokumente/cockpit/config/datasources.example.yaml).
|
|
276
|
+
|
|
277
|
+
Each profile captures:
|
|
278
|
+
|
|
279
|
+
- backend
|
|
280
|
+
- connection URL
|
|
281
|
+
- optional secret reference mappings for `${PLACEHOLDER}` interpolation
|
|
282
|
+
- optional driver
|
|
283
|
+
- risk level
|
|
284
|
+
- local or SSH target
|
|
285
|
+
- SSH tunneling for tunnel-safe remote SQL and NoSQL backends
|
|
286
|
+
- database name
|
|
287
|
+
- capabilities
|
|
288
|
+
|
|
289
|
+
Example secret-backed datasource snippet:
|
|
290
|
+
|
|
291
|
+
```yaml
|
|
292
|
+
profiles:
|
|
293
|
+
- id: analytics-postgres
|
|
294
|
+
name: Analytics Postgres
|
|
295
|
+
backend: postgres
|
|
296
|
+
connection_url: postgresql+psycopg://${DB_USER}:${DB_PASS}@db.internal:5432/analytics
|
|
297
|
+
target_kind: ssh
|
|
298
|
+
target_ref: deploy@example.com
|
|
299
|
+
secret_refs:
|
|
300
|
+
DB_USER: env:ANALYTICS_DB_USER
|
|
301
|
+
DB_PASS:
|
|
302
|
+
provider: keyring
|
|
303
|
+
service: cockpit
|
|
304
|
+
username: analytics-password
|
|
305
|
+
|
|
306
|
+
Vault-backed references are also supported directly, for example:
|
|
307
|
+
|
|
308
|
+
```yaml
|
|
309
|
+
profiles:
|
|
310
|
+
- id: app-postgres
|
|
311
|
+
name: App Postgres
|
|
312
|
+
backend: postgres
|
|
313
|
+
connection_url: postgresql://${DB_USER}:${DB_PASS}@db.internal:5432/app
|
|
314
|
+
secret_refs:
|
|
315
|
+
DB_USER: vault+dynamic://ops-vault/database/app#username
|
|
316
|
+
DB_PASS: vault+dynamic://ops-vault/database/app#password
|
|
317
|
+
```
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
## Plugin System
|
|
321
|
+
|
|
322
|
+
Two plugin paths exist:
|
|
323
|
+
|
|
324
|
+
1. Static config loading from `config/plugins.yaml`
|
|
325
|
+
2. Managed installs through the web admin using pip-compatible requirements
|
|
326
|
+
|
|
327
|
+
Managed plugin installs support:
|
|
328
|
+
|
|
329
|
+
- package names
|
|
330
|
+
- pinned versions
|
|
331
|
+
- local paths
|
|
332
|
+
- git requirements
|
|
333
|
+
- trusted source prefix enforcement
|
|
334
|
+
- permission allowlists before runtime activation
|
|
335
|
+
- compatibility checks against the running cockpit version
|
|
336
|
+
- install-time and runtime integrity hashes
|
|
337
|
+
|
|
338
|
+
Plugins can contribute:
|
|
339
|
+
|
|
340
|
+
- panels
|
|
341
|
+
- commands
|
|
342
|
+
- datasource families
|
|
343
|
+
- admin pages
|
|
344
|
+
|
|
345
|
+
See [plugins.example.yaml](/home/damien/Dokumente/cockpit/config/plugins.example.yaml)
|
|
346
|
+
and [notes_plugin.py](/home/damien/Dokumente/cockpit/src/cockpit/plugins/notes_plugin.py).
|
|
347
|
+
|
|
348
|
+
## Packaging
|
|
349
|
+
|
|
350
|
+
Release artifacts included in the repo:
|
|
351
|
+
|
|
352
|
+
- `sdist`
|
|
353
|
+
- `wheel`
|
|
354
|
+
- Arch/CachyOS `PKGBUILD` in [packaging/arch/PKGBUILD](/home/damien/Dokumente/cockpit/packaging/arch/PKGBUILD)
|
|
355
|
+
- tag-driven GitHub release workflow in [.github/workflows/release.yml](/home/damien/Dokumente/cockpit/.github/workflows/release.yml)
|
|
356
|
+
- release checksum manifest generation (`SHA256SUMS.txt`)
|
|
357
|
+
- CycloneDX SBOM generation for Python and frontend dependencies
|
|
358
|
+
- Sigstore keyless bundles for published release assets
|
|
359
|
+
- GitHub provenance attestation generation
|
|
360
|
+
- PyPI Trusted Publishing from the same canonical package artifacts
|
|
361
|
+
|
|
362
|
+
## Development
|
|
363
|
+
|
|
364
|
+
Run tests:
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
PYTHONPATH=src python -m unittest discover -s tests -p 'test_*.py' -v
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
Run UI/E2E tests with the dependency environment:
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
PYTHONPATH=src:/tmp/cockpit-deps python -m unittest \
|
|
374
|
+
tests.e2e.test_embedded_terminal_widget \
|
|
375
|
+
tests.e2e.test_app_resume_flow -v
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
CI lives in [.github/workflows/ci.yml](/home/damien/Dokumente/cockpit/.github/workflows/ci.yml).
|
|
379
|
+
It compiles the code, runs the unittest suite, builds `sdist` plus `wheel`, and runs a live service matrix against PostgreSQL, MySQL, Redis, and MongoDB.
|
|
380
|
+
It also exercises a release dry-run path that builds the frontend bundle, assembles Python artifacts, and emits SBOM plus checksum metadata without publishing.
|
|
381
|
+
Tagged pushes additionally publish release artifacts through [.github/workflows/release.yml](/home/damien/Dokumente/cockpit/.github/workflows/release.yml).
|
|
382
|
+
|
|
383
|
+
## Release Verification
|
|
384
|
+
|
|
385
|
+
Published GitHub releases include:
|
|
386
|
+
|
|
387
|
+
- `sdist`
|
|
388
|
+
- `wheel`
|
|
389
|
+
- `SHA256SUMS.txt`
|
|
390
|
+
- `release-manifest.json`
|
|
391
|
+
- Python and frontend CycloneDX SBOM files
|
|
392
|
+
- Sigstore bundle files for release assets
|
|
393
|
+
- GitHub build provenance bundle output
|
|
394
|
+
|
|
395
|
+
Verify checksums:
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
sha256sum -c SHA256SUMS.txt
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Verify a signed artifact:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
python -m pip install sigstore
|
|
405
|
+
python -m sigstore verify github cockpit_cli-<version>-py3-none-any.whl \
|
|
406
|
+
--bundle cockpit_cli-<version>-py3-none-any.whl.sigstore.json \
|
|
407
|
+
--repository DamienDrash/cockpit_cli \
|
|
408
|
+
--ref refs/tags/v<version> \
|
|
409
|
+
--trigger push
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
Verify provenance:
|
|
413
|
+
|
|
414
|
+
```bash
|
|
415
|
+
gh attestation verify cockpit_cli-<version>-py3-none-any.whl \
|
|
416
|
+
--repo DamienDrash/cockpit_cli
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
Maintainer release steps are documented in
|
|
420
|
+
[docs/releasing.md](/home/damien/Dokumente/cockpit/docs/releasing.md).
|
|
421
|
+
|
|
422
|
+
## Operator Notes
|
|
423
|
+
|
|
424
|
+
Terminal selection flow:
|
|
425
|
+
|
|
426
|
+
- `Ctrl+Space` starts or clears a terminal line selection
|
|
427
|
+
- `Shift+Up` and `Shift+Down` expand the active selection
|
|
428
|
+
- `Ctrl+Shift+C` copies the selection
|
|
429
|
+
- `Ctrl+Alt+C` copies the full terminal buffer
|
|
430
|
+
- mouse wheel scrolls through scrollback
|
|
431
|
+
- clicking and dragging inside the embedded terminal expands the current line selection
|
|
432
|
+
|
|
433
|
+
Managed secrets:
|
|
434
|
+
|
|
435
|
+
- create them in the web admin under `Secrets`
|
|
436
|
+
- reference them inside datasource `secret_refs` as `stored:secret-name`
|
|
437
|
+
- Vault profiles support `token`, `AppRole`, and `OIDC/JWT` login modes
|
|
438
|
+
- Vault-managed entries support `kv` and dynamic secret references
|
|
439
|
+
- Vault transit operations are available from the web admin for encrypt/decrypt/sign/verify
|
|
440
|
+
- Vault sessions can use encrypted local cache where enabled
|
|
441
|
+
- compatibility `env`, `file`, and `keyring` providers remain supported for migration and bootstrap flows
|
|
442
|
+
|
|
443
|
+
Plugin trust policy:
|
|
444
|
+
|
|
445
|
+
- `config/plugins.yaml` can define `trusted_sources` and `allowed_permissions`
|
|
446
|
+
- plugins requesting permissions outside the configured allowlist stay installed but do not activate at runtime
|
|
447
|
+
|
|
448
|
+
Tunnel operations:
|
|
449
|
+
|
|
450
|
+
- remote datasource tunnels show reconnect counts and last-failure diagnostics in the web admin
|
|
451
|
+
- dead tunnels can be reconnected directly from the diagnostics page
|
|
452
|
+
|
|
453
|
+
Contribution and release notes:
|
|
454
|
+
|
|
455
|
+
- [CONTRIBUTING.md](/home/damien/Dokumente/cockpit/CONTRIBUTING.md)
|
|
456
|
+
- [CHANGELOG.md](/home/damien/Dokumente/cockpit/CHANGELOG.md)
|
|
457
|
+
- [SECURITY.md](/home/damien/Dokumente/cockpit/SECURITY.md)
|
|
458
|
+
- [docs/releasing.md](/home/damien/Dokumente/cockpit/docs/releasing.md)
|
|
459
|
+
|
|
460
|
+
## Linux Scope
|
|
461
|
+
|
|
462
|
+
This project is currently Linux-first. The repository includes first-class
|
|
463
|
+
packaging for Arch-like systems, including CachyOS.
|
|
464
|
+
|
|
465
|
+
## License
|
|
466
|
+
|
|
467
|
+
MIT. See [LICENSE](/home/damien/Dokumente/cockpit/LICENSE).
|