homeconsole-cli 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. homeconsole_cli-0.0.1/PKG-INFO +155 -0
  2. homeconsole_cli-0.0.1/README.md +140 -0
  3. homeconsole_cli-0.0.1/hc/__init__.py +6 -0
  4. homeconsole_cli-0.0.1/hc/api.py +59 -0
  5. homeconsole_cli-0.0.1/hc/capabilities.py +41 -0
  6. homeconsole_cli-0.0.1/hc/client.py +631 -0
  7. homeconsole_cli-0.0.1/hc/commands/__init__.py +2 -0
  8. homeconsole_cli-0.0.1/hc/commands/_client_helpers.py +74 -0
  9. homeconsole_cli-0.0.1/hc/commands/_compose_helpers.py +95 -0
  10. homeconsole_cli-0.0.1/hc/commands/auth.py +381 -0
  11. homeconsole_cli-0.0.1/hc/commands/connect.py +55 -0
  12. homeconsole_cli-0.0.1/hc/commands/core.py +277 -0
  13. homeconsole_cli-0.0.1/hc/commands/deploy.py +1466 -0
  14. homeconsole_cli-0.0.1/hc/commands/install.py +74 -0
  15. homeconsole_cli-0.0.1/hc/commands/logs.py +58 -0
  16. homeconsole_cli-0.0.1/hc/commands/marketplace.py +113 -0
  17. homeconsole_cli-0.0.1/hc/commands/module.py +103 -0
  18. homeconsole_cli-0.0.1/hc/commands/ping.py +41 -0
  19. homeconsole_cli-0.0.1/hc/commands/plugin.py +453 -0
  20. homeconsole_cli-0.0.1/hc/commands/recovery/__init__.py +222 -0
  21. homeconsole_cli-0.0.1/hc/commands/recovery/compose.py +385 -0
  22. homeconsole_cli-0.0.1/hc/commands/recovery/config.py +60 -0
  23. homeconsole_cli-0.0.1/hc/commands/recovery/core.py +155 -0
  24. homeconsole_cli-0.0.1/hc/commands/recovery/db.py +222 -0
  25. homeconsole_cli-0.0.1/hc/commands/recovery/mode.py +36 -0
  26. homeconsole_cli-0.0.1/hc/commands/recovery/redis.py +60 -0
  27. homeconsole_cli-0.0.1/hc/commands/recovery/ui.py +63 -0
  28. homeconsole_cli-0.0.1/hc/commands/remove.py +55 -0
  29. homeconsole_cli-0.0.1/hc/commands/reset.py +88 -0
  30. homeconsole_cli-0.0.1/hc/commands/search.py +42 -0
  31. homeconsole_cli-0.0.1/hc/commands/secrets.py +457 -0
  32. homeconsole_cli-0.0.1/hc/commands/setup.py +75 -0
  33. homeconsole_cli-0.0.1/hc/commands/setup_wizard.py +153 -0
  34. homeconsole_cli-0.0.1/hc/commands/status.py +64 -0
  35. homeconsole_cli-0.0.1/hc/commands/update.py +377 -0
  36. homeconsole_cli-0.0.1/hc/config.py +127 -0
  37. homeconsole_cli-0.0.1/hc/constants.py +33 -0
  38. homeconsole_cli-0.0.1/hc/core_ops.py +138 -0
  39. homeconsole_cli-0.0.1/hc/core_source.py +126 -0
  40. homeconsole_cli-0.0.1/hc/env_bootstrap.py +43 -0
  41. homeconsole_cli-0.0.1/hc/errors.py +85 -0
  42. homeconsole_cli-0.0.1/hc/main.py +105 -0
  43. homeconsole_cli-0.0.1/hc/marketplace_operation.py +140 -0
  44. homeconsole_cli-0.0.1/hc/native_core.py +369 -0
  45. homeconsole_cli-0.0.1/hc/repl.py +406 -0
  46. homeconsole_cli-0.0.1/hc/setup_runner.py +72 -0
  47. homeconsole_cli-0.0.1/hc/shell.py +9 -0
  48. homeconsole_cli-0.0.1/homeconsole_cli.egg-info/PKG-INFO +155 -0
  49. homeconsole_cli-0.0.1/homeconsole_cli.egg-info/SOURCES.txt +60 -0
  50. homeconsole_cli-0.0.1/homeconsole_cli.egg-info/dependency_links.txt +1 -0
  51. homeconsole_cli-0.0.1/homeconsole_cli.egg-info/entry_points.txt +2 -0
  52. homeconsole_cli-0.0.1/homeconsole_cli.egg-info/requires.txt +9 -0
  53. homeconsole_cli-0.0.1/homeconsole_cli.egg-info/top_level.txt +1 -0
  54. homeconsole_cli-0.0.1/pyproject.toml +39 -0
  55. homeconsole_cli-0.0.1/setup.cfg +4 -0
  56. homeconsole_cli-0.0.1/tests/test_config_roundtrip.py +68 -0
  57. homeconsole_cli-0.0.1/tests/test_core_ops.py +116 -0
  58. homeconsole_cli-0.0.1/tests/test_env_bootstrap.py +49 -0
  59. homeconsole_cli-0.0.1/tests/test_main_root_callback.py +14 -0
  60. homeconsole_cli-0.0.1/tests/test_marketplace_operation_parse.py +74 -0
  61. homeconsole_cli-0.0.1/tests/test_native_core_helpers.py +39 -0
  62. homeconsole_cli-0.0.1/tests/test_setup_runner.py +64 -0
@@ -0,0 +1,155 @@
1
+ Metadata-Version: 2.4
2
+ Name: homeconsole-cli
3
+ Version: 0.0.1
4
+ Summary: HomeConsole CLI (hc) — управление платформой через HTTP API
5
+ Requires-Python: >=3.11
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: typer>=0.12
8
+ Requires-Dist: rich>=13
9
+ Requires-Dist: httpx>=0.27
10
+ Requires-Dist: anyio>=4
11
+ Requires-Dist: prompt_toolkit>=3
12
+ Requires-Dist: tomlkit>=0.12
13
+ Provides-Extra: dev
14
+ Requires-Dist: pytest>=8; extra == "dev"
15
+
16
+ # HomeConsole CLI (`hc`)
17
+
18
+ CLI-утилита для управления платформой HomeConsole **исключительно через HTTP API** CoreRuntime.
19
+
20
+ ## Установка (локально)
21
+
22
+ ```bash
23
+ cd home-console-cli
24
+ python -m venv .venv
25
+ source .venv/bin/activate
26
+ pip install -U pip
27
+ pip install -e .
28
+ ```
29
+
30
+ Проверка:
31
+
32
+ ```bash
33
+ hc --help
34
+ ```
35
+
36
+ ## Конфигурация
37
+
38
+ Файл: `~/.config/hc/config.toml`
39
+
40
+ ```toml
41
+ [core]
42
+ host = "localhost"
43
+ port = 8080
44
+ token = "jwt-token-here"
45
+ verify_ssl = true
46
+
47
+ [display]
48
+ color = true
49
+ emoji = true
50
+ ```
51
+
52
+ Токен берётся по приоритету:
53
+
54
+ - `--token` (если у команды есть такой флаг)
55
+ - переменная окружения `HC_TOKEN`
56
+ - `config.toml`
57
+
58
+ ## Быстрый старт
59
+
60
+ Подключиться и сохранить конфиг:
61
+
62
+ ```bash
63
+ hc connect localhost --port 8080
64
+ ```
65
+
66
+ Статус:
67
+
68
+ ```bash
69
+ hc status
70
+ ```
71
+
72
+ Список плагинов:
73
+
74
+ ```bash
75
+ hc plugin list
76
+ ```
77
+
78
+ ## Команды
79
+
80
+ - `hc connect <host> [--port 8080] [--token TOKEN]`
81
+ - `hc status`
82
+ - `hc install <name> [--version X.Y.Z]`
83
+ - `hc remove <name> [--force]`
84
+ - `hc plugin list|start|stop|info`
85
+ - `hc module list|status`
86
+ - `hc logs [--follow] [--module <name>] [--level debug|info|warning|error]`
87
+ - `hc search <query>`
88
+ - `hc setup`
89
+ - `hc deploy` (по умолчанию: build+push+rollout+wait) и `hc deploy ...` (тонкие подкоманды)
90
+ - `hc deploy platform` (локальный dev flow)
91
+ - `hc deploy platform --mode image --image ghcr.io/home-console/platform-home-console --tag latest` (image-only deploy)
92
+ - `hc update core ...` (обновление core-runtime до нового image:tag)
93
+ - `hc shell`
94
+
95
+ ### Deploy “одной командой”
96
+
97
+ По умолчанию `hc deploy` делает полный жизненный цикл:
98
+
99
+ - **build**: `docker build -t <image>:<tag>`
100
+ - **push**: `docker push <image>:<tag>`
101
+ - **rollout**: `docker compose pull core-runtime && docker compose up -d`
102
+ - **wait**: ждёт **healthy** (проверка `curl` внутри контейнера)
103
+
104
+ Полезные флаги:
105
+
106
+ - `--no-build`, `--no-push`, `--no-rollout`
107
+ - `--wait/--no-wait` (по умолчанию `--wait`)
108
+ - `--timeout 180` (сек), `--interval 1.0` (сек)
109
+ - `--health-url http://localhost:8000/api/v1/monitor/health` (внутри контейнера)
110
+ - `--quiet` (минимальный вывод)
111
+ - `--json` (машинный вывод; удобно для CI/скриптов)
112
+
113
+ Логи core-runtime (для диагностики таймаута):
114
+
115
+ - `hc deploy core logs -f`
116
+
117
+ ### Deploy платформы
118
+
119
+ Локальный dev flow:
120
+
121
+ ```bash
122
+ hc deploy platform
123
+ ```
124
+
125
+ Только подготовить статику, без запуска стека:
126
+
127
+ ```bash
128
+ hc deploy platform --no-start
129
+ ```
130
+
131
+ Image-only deploy через GHCR:
132
+
133
+ ```bash
134
+ hc deploy platform --mode image --image ghcr.io/home-console/platform-home-console --tag latest
135
+ ```
136
+
137
+ Этот вариант использует `platform-home-console/docker-compose.image.yml` и `PLATFORM_IMAGE`.
138
+
139
+ ## Если “нет команды `hc deploy`”
140
+
141
+ Почти всегда это означает, что в окружении стоит **не тот пакет**, который предоставляет команду `hc`.
142
+
143
+ Проверка (в активированном venv):
144
+
145
+ ```bash
146
+ python -c "import hc, inspect; print(hc.__file__)"
147
+ ```
148
+
149
+ Должно указывать на `.../home-console-cli/hc/__init__.py` (или site-packages `homeconsole-cli`).
150
+
151
+ ## Ошибки и UX
152
+
153
+ - Traceback пользователю не показывается.
154
+ - Все ошибки печатаются через Rich: `[red]Ошибка: ...[/red]`.
155
+ - При ошибке утилита завершает выполнение с кодом `1`.
@@ -0,0 +1,140 @@
1
+ # HomeConsole CLI (`hc`)
2
+
3
+ CLI-утилита для управления платформой HomeConsole **исключительно через HTTP API** CoreRuntime.
4
+
5
+ ## Установка (локально)
6
+
7
+ ```bash
8
+ cd home-console-cli
9
+ python -m venv .venv
10
+ source .venv/bin/activate
11
+ pip install -U pip
12
+ pip install -e .
13
+ ```
14
+
15
+ Проверка:
16
+
17
+ ```bash
18
+ hc --help
19
+ ```
20
+
21
+ ## Конфигурация
22
+
23
+ Файл: `~/.config/hc/config.toml`
24
+
25
+ ```toml
26
+ [core]
27
+ host = "localhost"
28
+ port = 8080
29
+ token = "jwt-token-here"
30
+ verify_ssl = true
31
+
32
+ [display]
33
+ color = true
34
+ emoji = true
35
+ ```
36
+
37
+ Токен берётся по приоритету:
38
+
39
+ - `--token` (если у команды есть такой флаг)
40
+ - переменная окружения `HC_TOKEN`
41
+ - `config.toml`
42
+
43
+ ## Быстрый старт
44
+
45
+ Подключиться и сохранить конфиг:
46
+
47
+ ```bash
48
+ hc connect localhost --port 8080
49
+ ```
50
+
51
+ Статус:
52
+
53
+ ```bash
54
+ hc status
55
+ ```
56
+
57
+ Список плагинов:
58
+
59
+ ```bash
60
+ hc plugin list
61
+ ```
62
+
63
+ ## Команды
64
+
65
+ - `hc connect <host> [--port 8080] [--token TOKEN]`
66
+ - `hc status`
67
+ - `hc install <name> [--version X.Y.Z]`
68
+ - `hc remove <name> [--force]`
69
+ - `hc plugin list|start|stop|info`
70
+ - `hc module list|status`
71
+ - `hc logs [--follow] [--module <name>] [--level debug|info|warning|error]`
72
+ - `hc search <query>`
73
+ - `hc setup`
74
+ - `hc deploy` (по умолчанию: build+push+rollout+wait) и `hc deploy ...` (тонкие подкоманды)
75
+ - `hc deploy platform` (локальный dev flow)
76
+ - `hc deploy platform --mode image --image ghcr.io/home-console/platform-home-console --tag latest` (image-only deploy)
77
+ - `hc update core ...` (обновление core-runtime до нового image:tag)
78
+ - `hc shell`
79
+
80
+ ### Deploy “одной командой”
81
+
82
+ По умолчанию `hc deploy` делает полный жизненный цикл:
83
+
84
+ - **build**: `docker build -t <image>:<tag>`
85
+ - **push**: `docker push <image>:<tag>`
86
+ - **rollout**: `docker compose pull core-runtime && docker compose up -d`
87
+ - **wait**: ждёт **healthy** (проверка `curl` внутри контейнера)
88
+
89
+ Полезные флаги:
90
+
91
+ - `--no-build`, `--no-push`, `--no-rollout`
92
+ - `--wait/--no-wait` (по умолчанию `--wait`)
93
+ - `--timeout 180` (сек), `--interval 1.0` (сек)
94
+ - `--health-url http://localhost:8000/api/v1/monitor/health` (внутри контейнера)
95
+ - `--quiet` (минимальный вывод)
96
+ - `--json` (машинный вывод; удобно для CI/скриптов)
97
+
98
+ Логи core-runtime (для диагностики таймаута):
99
+
100
+ - `hc deploy core logs -f`
101
+
102
+ ### Deploy платформы
103
+
104
+ Локальный dev flow:
105
+
106
+ ```bash
107
+ hc deploy platform
108
+ ```
109
+
110
+ Только подготовить статику, без запуска стека:
111
+
112
+ ```bash
113
+ hc deploy platform --no-start
114
+ ```
115
+
116
+ Image-only deploy через GHCR:
117
+
118
+ ```bash
119
+ hc deploy platform --mode image --image ghcr.io/home-console/platform-home-console --tag latest
120
+ ```
121
+
122
+ Этот вариант использует `platform-home-console/docker-compose.image.yml` и `PLATFORM_IMAGE`.
123
+
124
+ ## Если “нет команды `hc deploy`”
125
+
126
+ Почти всегда это означает, что в окружении стоит **не тот пакет**, который предоставляет команду `hc`.
127
+
128
+ Проверка (в активированном venv):
129
+
130
+ ```bash
131
+ python -c "import hc, inspect; print(hc.__file__)"
132
+ ```
133
+
134
+ Должно указывать на `.../home-console-cli/hc/__init__.py` (или site-packages `homeconsole-cli`).
135
+
136
+ ## Ошибки и UX
137
+
138
+ - Traceback пользователю не показывается.
139
+ - Все ошибки печатаются через Rich: `[red]Ошибка: ...[/red]`.
140
+ - При ошибке утилита завершает выполнение с кодом `1`.
@@ -0,0 +1,6 @@
1
+ from __future__ import annotations
2
+
3
+ __all__ = ["__version__"]
4
+
5
+ __version__ = "0.0.1"
6
+
@@ -0,0 +1,59 @@
1
+ from __future__ import annotations
2
+
3
+ # Здесь живут все “контрактные” пути, чтобы не размазывать строки по коду.
4
+ # Если Core переедет на /api/v1 — клиент должен пережить это без правок команд.
5
+
6
+ API_PREFIX_CANDIDATES: tuple[str, ...] = ("/api", "/api/v1")
7
+
8
+ # Core
9
+ HEALTH = "/health"
10
+ # Current health endpoint in core-runtime-service (mounted under /api/v1/monitor).
11
+ MONITOR_HEALTH = "/api/v1/monitor/health"
12
+ # Legacy/compat (older builds).
13
+ MONITOR_HEALTH_LEGACY = "/monitor/health"
14
+
15
+ # Admin (core API contract)
16
+ ADMIN_STATUS = "/api/v1/admin/inspector/runtime"
17
+ ADMIN_INSPECTOR_PLUGINS = "/api/v1/admin/inspector/plugins"
18
+ ADMIN_AUTH_API_KEYS = "/api/v1/admin/auth/api-keys"
19
+ ADMIN_AUTH_API_KEYS_REVOKE = "/api/v1/admin/auth/api-keys/revoke"
20
+ ADMIN_AUTH_API_KEYS_ROTATE = "/api/v1/admin/auth/api-keys/rotate"
21
+ ADMIN_AUTH_USERS = "/api/v1/admin/auth/users"
22
+ ADMIN_AUTH_SESSIONS = "/api/v1/admin/auth/sessions"
23
+ ADMIN_AUTH_SESSIONS_REVOKE = "/api/v1/admin/auth/sessions/revoke"
24
+ ADMIN_AUTH_SESSIONS_REVOKE_ALL = "/api/v1/admin/auth/sessions/revoke-all"
25
+
26
+ # Marketplace admin — archive_path должен быть доступен процессу Core на сервере
27
+ ADMIN_MARKETPLACE_INSTALL = "/api/v1/admin/marketplace/install"
28
+ ADMIN_MARKETPLACE_INSTALL_UPLOAD = "/api/v1/admin/marketplace/install-upload"
29
+
30
+ # Auth v1
31
+ AUTH_BOOTSTRAP = "/api/v1/auth/bootstrap"
32
+ AUTH_INITIALIZE = "/api/v1/auth/initialize"
33
+ AUTH_LOGIN = "/api/v1/auth/login"
34
+ AUTH_LOGOUT = "/api/v1/auth/logout"
35
+ AUTH_REFRESH = "/api/v1/auth/refresh"
36
+ AUTH_ME = "/api/v1/auth/me"
37
+
38
+ # Plugins (пути относительно префикса из API_PREFIX_CANDIDATES: /api или /api/v1)
39
+ PLUGINS = "/plugins"
40
+ PLUGIN = "/plugins/{name}"
41
+ PLUGIN_INSTALL = "/plugins/{name}/install"
42
+ PLUGIN_START = "/plugins/{name}/start"
43
+ PLUGIN_STOP = "/plugins/{name}/stop"
44
+ PLUGIN_RELOAD = "/api/v1/admin/plugins/{name}/reload"
45
+ PLUGIN_RESTART_CONTAINER = "/api/v1/admin/plugins/{name}/restart-container"
46
+
47
+ # Modules (так же относительно префикса)
48
+ MODULES = "/modules"
49
+ MODULE_START = "/modules/{name}/start"
50
+ MODULE_STOP = "/modules/{name}/stop"
51
+ MODULE_RESTART = "/modules/{name}/restart"
52
+
53
+ # Logs
54
+ LOGS = "/logs"
55
+
56
+ # Marketplace
57
+ MARKETPLACE_INDEX = "/marketplace/index"
58
+ MARKETPLACE_SEARCH = "/marketplace/search"
59
+
@@ -0,0 +1,41 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+
5
+ import anyio
6
+
7
+ from hc.config import Config
8
+ from hc.commands._client_helpers import client_from_config
9
+
10
+
11
+ @dataclass(slots=True)
12
+ class Capabilities:
13
+ monitor_health: bool
14
+ auth_bootstrap: bool
15
+ auth_me: bool
16
+ admin_status: bool
17
+ inspector_plugins: bool
18
+ api_keys: bool
19
+
20
+
21
+ def probe(cfg: Config) -> Capabilities:
22
+ silent = client_from_config(cfg, silent=True)
23
+
24
+ async def _run() -> Capabilities:
25
+ mh = await silent.health()
26
+ ab = await silent.auth_bootstrap()
27
+ am = await silent.auth_me()
28
+ st = await silent.admin_status()
29
+ ip = await silent.inspector_plugins()
30
+ ak = await silent.api_keys_list()
31
+ return Capabilities(
32
+ monitor_health=bool(mh),
33
+ auth_bootstrap=bool(ab),
34
+ auth_me=bool(am),
35
+ admin_status=bool(st),
36
+ inspector_plugins=bool(ip),
37
+ api_keys=bool(ak),
38
+ )
39
+
40
+ return anyio.run(_run)
41
+