msdev 0.11.0__tar.gz → 0.12.0__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 (90) hide show
  1. {msdev-0.11.0 → msdev-0.12.0}/PKG-INFO +38 -54
  2. {msdev-0.11.0 → msdev-0.12.0}/README.md +37 -53
  3. {msdev-0.11.0 → msdev-0.12.0}/pyproject.toml +2 -2
  4. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/__init__.py +1 -1
  5. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/cli.py +56 -501
  6. msdev-0.12.0/src/msdev/core/daemon_deploy.py +49 -0
  7. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/resources.py +58 -11
  8. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/services/context.py +1 -1
  9. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/services/environment.py +18 -0
  10. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/services/node.py +43 -3
  11. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/transport.py +282 -156
  12. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/daemon.py +99 -0
  13. msdev-0.12.0/src/msdev/helpers/msdev-file-helper-linux-amd64 +0 -0
  14. msdev-0.12.0/src/msdev/helpers/msdev-file-helper-linux-amd64.sha256 +1 -0
  15. msdev-0.12.0/src/msdev/helpers/msdev-file-helper-linux-arm64 +0 -0
  16. msdev-0.12.0/src/msdev/helpers/msdev-file-helper-linux-arm64.sha256 +1 -0
  17. msdev-0.12.0/src/msdev/helpers/msdevd-linux-amd64 +0 -0
  18. msdev-0.12.0/src/msdev/helpers/msdevd-linux-amd64.sha256 +1 -0
  19. msdev-0.12.0/src/msdev/helpers/msdevd-linux-arm64 +0 -0
  20. msdev-0.12.0/src/msdev/helpers/msdevd-linux-arm64.sha256 +1 -0
  21. {msdev-0.11.0 → msdev-0.12.0}/src/msdev.egg-info/PKG-INFO +38 -54
  22. {msdev-0.11.0 → msdev-0.12.0}/src/msdev.egg-info/SOURCES.txt +12 -0
  23. {msdev-0.11.0 → msdev-0.12.0}/tests/test_cli.py +22 -72
  24. {msdev-0.11.0 → msdev-0.12.0}/tests/test_cli_only_architecture.py +10 -0
  25. {msdev-0.11.0 → msdev-0.12.0}/tests/test_config.py +1 -1
  26. msdev-0.12.0/tests/test_connect_env_scenario.py +146 -0
  27. msdev-0.12.0/tests/test_daemon_deploy.py +143 -0
  28. msdev-0.12.0/tests/test_go_msdevd_scenario.py +209 -0
  29. msdev-0.12.0/tests/test_model_cli.py +19 -0
  30. msdev-0.12.0/tests/test_msdev_cli_skill.py +72 -0
  31. {msdev-0.11.0 → msdev-0.12.0}/tests/test_node_env_config.py +1 -1
  32. {msdev-0.11.0 → msdev-0.12.0}/tests/test_target_exec_services.py +17 -4
  33. {msdev-0.11.0 → msdev-0.12.0}/tests/test_transport.py +53 -18
  34. {msdev-0.11.0 → msdev-0.12.0}/tests/test_windows_local_scenario.py +6 -1
  35. msdev-0.11.0/tests/test_model_cli.py +0 -364
  36. msdev-0.11.0/tests/test_msdev_cli_skill.py +0 -107
  37. {msdev-0.11.0 → msdev-0.12.0}/LICENSE +0 -0
  38. {msdev-0.11.0 → msdev-0.12.0}/setup.cfg +0 -0
  39. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/__init__.py +0 -0
  40. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/compat.py +0 -0
  41. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/config.py +0 -0
  42. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/container_helper.py +0 -0
  43. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/env_transfer.py +0 -0
  44. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/exec_argv.py +0 -0
  45. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/guides.py +0 -0
  46. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/helper_deploy.py +0 -0
  47. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/host_files.py +0 -0
  48. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/host_mutations.py +0 -0
  49. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/inventory.py +0 -0
  50. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/limits.py +0 -0
  51. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/local_rpc.py +0 -0
  52. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/multiplex.py +0 -0
  53. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/request_client.py +0 -0
  54. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/services/__init__.py +0 -0
  55. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/services/capabilities.py +0 -0
  56. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/services/execution.py +0 -0
  57. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/services/model.py +0 -0
  58. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/services/npu.py +0 -0
  59. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/services/results.py +0 -0
  60. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/ssh_auth.py +0 -0
  61. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/ssh_tunnel.py +0 -0
  62. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/stream_limits.py +0 -0
  63. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/stream_server.py +0 -0
  64. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/stream_transport.py +0 -0
  65. {msdev-0.11.0 → msdev-0.12.0}/src/msdev/core/streamproto.py +0 -0
  66. {msdev-0.11.0 → msdev-0.12.0}/src/msdev.egg-info/dependency_links.txt +0 -0
  67. {msdev-0.11.0 → msdev-0.12.0}/src/msdev.egg-info/entry_points.txt +0 -0
  68. {msdev-0.11.0 → msdev-0.12.0}/src/msdev.egg-info/top_level.txt +0 -0
  69. {msdev-0.11.0 → msdev-0.12.0}/tests/test_compat.py +0 -0
  70. {msdev-0.11.0 → msdev-0.12.0}/tests/test_container_helper.py +0 -0
  71. {msdev-0.11.0 → msdev-0.12.0}/tests/test_daemon.py +0 -0
  72. {msdev-0.11.0 → msdev-0.12.0}/tests/test_daemon_container_stream.py +0 -0
  73. {msdev-0.11.0 → msdev-0.12.0}/tests/test_docker_stream_dispatch.py +0 -0
  74. {msdev-0.11.0 → msdev-0.12.0}/tests/test_env_put_get_scenario.py +0 -0
  75. {msdev-0.11.0 → msdev-0.12.0}/tests/test_env_read_write_scenario.py +0 -0
  76. {msdev-0.11.0 → msdev-0.12.0}/tests/test_env_transfer.py +0 -0
  77. {msdev-0.11.0 → msdev-0.12.0}/tests/test_exec_argv.py +0 -0
  78. {msdev-0.11.0 → msdev-0.12.0}/tests/test_exec_default_timeout_scenario.py +0 -0
  79. {msdev-0.11.0 → msdev-0.12.0}/tests/test_helper_deploy.py +0 -0
  80. {msdev-0.11.0 → msdev-0.12.0}/tests/test_inventory.py +0 -0
  81. {msdev-0.11.0 → msdev-0.12.0}/tests/test_model_services.py +0 -0
  82. {msdev-0.11.0 → msdev-0.12.0}/tests/test_multiplex.py +0 -0
  83. {msdev-0.11.0 → msdev-0.12.0}/tests/test_node_env_services.py +0 -0
  84. {msdev-0.11.0 → msdev-0.12.0}/tests/test_request_client.py +0 -0
  85. {msdev-0.11.0 → msdev-0.12.0}/tests/test_ssh_auth.py +0 -0
  86. {msdev-0.11.0 → msdev-0.12.0}/tests/test_ssh_tunnel.py +0 -0
  87. {msdev-0.11.0 → msdev-0.12.0}/tests/test_stream_server.py +0 -0
  88. {msdev-0.11.0 → msdev-0.12.0}/tests/test_stream_transport.py +0 -0
  89. {msdev-0.11.0 → msdev-0.12.0}/tests/test_streamproto.py +0 -0
  90. {msdev-0.11.0 → msdev-0.12.0}/tests/test_target_guides.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: msdev
3
- Version: 0.11.0
3
+ Version: 0.12.0
4
4
  Summary: Portable nodes and execution environments for msModelSlim development
5
5
  Author: msModelSlim Agent Contributors
6
6
  License-Expression: MulanPSL-2.0
@@ -25,16 +25,15 @@ Dynamic: license-file
25
25
 
26
26
  # msdev
27
27
 
28
- `msdev` manages connection Nodes and execution Envs. A Node owns SSH and its
29
- per-user `msdevd`; an Env references a Node and adds a host/Docker runtime plus
30
- optional conda/venv/uv layers.
28
+ `msdev` exposes three capabilities: **`node`** (connect + host agent),
29
+ **`env`** (shared execution context, shell, files), and **`exec`** (commands).
31
30
 
32
- The CLI is intentionally stateless:
31
+ A Node owns SSH reachability and `msdevd` deployment. An Env owns the full
32
+ execution context: host or Docker runtime, conda/venv/uv layers, optional
33
+ `setup` script (root switch, proxy, etc.), command `wrap`, and static env vars.
33
34
 
34
- - Node-scoped NPU/model operations name `--node` or use `--all`;
35
- - execution names `--env`;
36
- - no harness conversation binding or implicit current Env exists;
37
- - MCP is not part of the architecture.
35
+ The CLI is intentionally stateless: execution always names `--env` explicitly.
36
+ MCP is not part of the architecture.
38
37
 
39
38
  ## Install
40
39
 
@@ -91,13 +90,27 @@ msdev node list
91
90
  msdev node status dev-122
92
91
  ```
93
92
 
94
- Adding a Node atomically creates a same-named host Env. Bootstrap or refresh
95
- the remote user daemon:
93
+ Adding a Node atomically creates a same-named host Env. Connect deploys and
94
+ starts the remote `msdevd` when needed:
96
95
 
97
96
  ```bash
98
- msdev node bootstrap dev-122
97
+ msdev node connect dev-122
99
98
  ```
100
99
 
100
+ Connect uploads a **static Go msdevd** binary matching the node architecture
101
+ (`linux-amd64` / `linux-arm64`) when the agent is missing or stale. No Python
102
+ is required on the node.
103
+
104
+ Build the static daemons before release or local testing:
105
+
106
+ ```bash
107
+ bash msdevd/build-static.sh
108
+ bash file-helper/build-static.sh
109
+ ```
110
+
111
+ Packaged artifacts live under `src/msdev/helpers/` (gitignored until built).
112
+ The Go source is in `msdev/`.
113
+
101
114
  Persistent OpenSSH masters are optional. All SSH from msdev is
102
115
  non-interactive: host keys use `accept-new`, and password/passphrase prompts
103
116
  are disabled. Supply a password via environment or file (never a prompt);
@@ -128,8 +141,17 @@ msdev env guide dev-122 --write ./host-env-guide.md
128
141
  ```
129
142
 
130
143
  Guides are stored under `~/.config/msdev/guides/nodes/` and
131
- `~/.config/msdev/guides/environments/`, with private permissions and a 256 KiB
132
- limit. Agents read the applicable guides once before first use in a session.
144
+ `~/.config/msdev/guides/environments/`. **Node guides** document how to
145
+ connect; **Env guides** document how to initialize shared context (`setup`).
146
+
147
+ ```bash
148
+ msdev env add dev-122-root \
149
+ --node dev-122 \
150
+ --setup-file ./setup-root.sh \
151
+ --wrap sudo --wrap -n --wrap --
152
+
153
+ msdev env open dev-122-root
154
+ ```
133
155
 
134
156
  Open a human-operated interactive shell in an Env:
135
157
 
@@ -138,21 +160,7 @@ msdev env shell dev-122
138
160
  msdev env shell dev-122 --cwd /srv/project
139
161
  ```
140
162
 
141
- The command allocates an OpenSSH PTY and enters the Env's Docker runtime and
142
- conda/venv/uv layers. Exiting returns
143
- to the local shell. Only the shell session start and final status are visible
144
- to msdev; commands typed inside it are not individually logged. Agent
145
- automation should continue using `msdev exec`.
146
-
147
- Create another Env on the same Node for Docker and Python layers:
148
-
149
- ```bash
150
- msdev env add dev-122-vllm \
151
- --node dev-122 \
152
- --docker-container vllm-ascend \
153
- --layer conda:base \
154
- --layer venv:/srv/project/.venv
155
- ```
163
+ Agent automation should use `msdev exec`, not `env shell`.
156
164
 
157
165
  ## File put, get, read, and write
158
166
 
@@ -181,13 +189,6 @@ msdev env write dev-122 /srv/project/note.md --file /tmp/note.md \
181
189
  Read before replacing an existing file. `--expected-sha256` is compare-and-swap
182
190
  replacement that refuses to overwrite a changed remote file.
183
191
 
184
- ## NPU inventory
185
-
186
- ```bash
187
- msdev npu list --node dev-122 --json
188
- msdev npu list --all --json
189
- ```
190
-
191
192
  ## Command execution
192
193
 
193
194
  Commands execute synchronously and stream stdout and stderr to the terminal as
@@ -221,30 +222,13 @@ serialization.
221
222
  `--result-json` selects captured, non-streaming execution and prints one
222
223
  structured JSON result containing stdout and stderr.
223
224
 
224
- ## Model inventory
225
-
226
- Examples:
227
-
228
- ```bash
229
- msdev model discover --node dev-122 --root /data/models
230
- msdev model list --node dev-122 --json
231
- msdev model list --all --json
232
- msdev model inspect model://qwen/Qwen3-32B@main --node dev-122
233
- msdev model validate model://qwen/Qwen3-32B@main --node dev-122
234
- msdev model audit --node dev-122
235
- ```
236
-
237
- Use `msdev model --help` and the individual subcommand help for register,
238
- update, replicas, refresh, verify, export, import, and rebind.
239
-
240
225
  ## Architecture
241
226
 
242
227
  ```text
243
228
  msdev CLI
244
229
  -> typed core service
245
230
  -> UnixRpcTransport or SshRpcTransport
246
- -> per-user msdevd
247
- -> host/container command, env file transfer, NPU, or inventory
231
+ -> per-user msdevd (env session + job runner + files)
248
232
  ```
249
233
 
250
234
  Remote RPC responses and command output are bounded. Node/Env registries use
@@ -1,15 +1,14 @@
1
1
  # msdev
2
2
 
3
- `msdev` manages connection Nodes and execution Envs. A Node owns SSH and its
4
- per-user `msdevd`; an Env references a Node and adds a host/Docker runtime plus
5
- optional conda/venv/uv layers.
3
+ `msdev` exposes three capabilities: **`node`** (connect + host agent),
4
+ **`env`** (shared execution context, shell, files), and **`exec`** (commands).
6
5
 
7
- The CLI is intentionally stateless:
6
+ A Node owns SSH reachability and `msdevd` deployment. An Env owns the full
7
+ execution context: host or Docker runtime, conda/venv/uv layers, optional
8
+ `setup` script (root switch, proxy, etc.), command `wrap`, and static env vars.
8
9
 
9
- - Node-scoped NPU/model operations name `--node` or use `--all`;
10
- - execution names `--env`;
11
- - no harness conversation binding or implicit current Env exists;
12
- - MCP is not part of the architecture.
10
+ The CLI is intentionally stateless: execution always names `--env` explicitly.
11
+ MCP is not part of the architecture.
13
12
 
14
13
  ## Install
15
14
 
@@ -66,13 +65,27 @@ msdev node list
66
65
  msdev node status dev-122
67
66
  ```
68
67
 
69
- Adding a Node atomically creates a same-named host Env. Bootstrap or refresh
70
- the remote user daemon:
68
+ Adding a Node atomically creates a same-named host Env. Connect deploys and
69
+ starts the remote `msdevd` when needed:
71
70
 
72
71
  ```bash
73
- msdev node bootstrap dev-122
72
+ msdev node connect dev-122
74
73
  ```
75
74
 
75
+ Connect uploads a **static Go msdevd** binary matching the node architecture
76
+ (`linux-amd64` / `linux-arm64`) when the agent is missing or stale. No Python
77
+ is required on the node.
78
+
79
+ Build the static daemons before release or local testing:
80
+
81
+ ```bash
82
+ bash msdevd/build-static.sh
83
+ bash file-helper/build-static.sh
84
+ ```
85
+
86
+ Packaged artifacts live under `src/msdev/helpers/` (gitignored until built).
87
+ The Go source is in `msdev/`.
88
+
76
89
  Persistent OpenSSH masters are optional. All SSH from msdev is
77
90
  non-interactive: host keys use `accept-new`, and password/passphrase prompts
78
91
  are disabled. Supply a password via environment or file (never a prompt);
@@ -103,8 +116,17 @@ msdev env guide dev-122 --write ./host-env-guide.md
103
116
  ```
104
117
 
105
118
  Guides are stored under `~/.config/msdev/guides/nodes/` and
106
- `~/.config/msdev/guides/environments/`, with private permissions and a 256 KiB
107
- limit. Agents read the applicable guides once before first use in a session.
119
+ `~/.config/msdev/guides/environments/`. **Node guides** document how to
120
+ connect; **Env guides** document how to initialize shared context (`setup`).
121
+
122
+ ```bash
123
+ msdev env add dev-122-root \
124
+ --node dev-122 \
125
+ --setup-file ./setup-root.sh \
126
+ --wrap sudo --wrap -n --wrap --
127
+
128
+ msdev env open dev-122-root
129
+ ```
108
130
 
109
131
  Open a human-operated interactive shell in an Env:
110
132
 
@@ -113,21 +135,7 @@ msdev env shell dev-122
113
135
  msdev env shell dev-122 --cwd /srv/project
114
136
  ```
115
137
 
116
- The command allocates an OpenSSH PTY and enters the Env's Docker runtime and
117
- conda/venv/uv layers. Exiting returns
118
- to the local shell. Only the shell session start and final status are visible
119
- to msdev; commands typed inside it are not individually logged. Agent
120
- automation should continue using `msdev exec`.
121
-
122
- Create another Env on the same Node for Docker and Python layers:
123
-
124
- ```bash
125
- msdev env add dev-122-vllm \
126
- --node dev-122 \
127
- --docker-container vllm-ascend \
128
- --layer conda:base \
129
- --layer venv:/srv/project/.venv
130
- ```
138
+ Agent automation should use `msdev exec`, not `env shell`.
131
139
 
132
140
  ## File put, get, read, and write
133
141
 
@@ -156,13 +164,6 @@ msdev env write dev-122 /srv/project/note.md --file /tmp/note.md \
156
164
  Read before replacing an existing file. `--expected-sha256` is compare-and-swap
157
165
  replacement that refuses to overwrite a changed remote file.
158
166
 
159
- ## NPU inventory
160
-
161
- ```bash
162
- msdev npu list --node dev-122 --json
163
- msdev npu list --all --json
164
- ```
165
-
166
167
  ## Command execution
167
168
 
168
169
  Commands execute synchronously and stream stdout and stderr to the terminal as
@@ -196,30 +197,13 @@ serialization.
196
197
  `--result-json` selects captured, non-streaming execution and prints one
197
198
  structured JSON result containing stdout and stderr.
198
199
 
199
- ## Model inventory
200
-
201
- Examples:
202
-
203
- ```bash
204
- msdev model discover --node dev-122 --root /data/models
205
- msdev model list --node dev-122 --json
206
- msdev model list --all --json
207
- msdev model inspect model://qwen/Qwen3-32B@main --node dev-122
208
- msdev model validate model://qwen/Qwen3-32B@main --node dev-122
209
- msdev model audit --node dev-122
210
- ```
211
-
212
- Use `msdev model --help` and the individual subcommand help for register,
213
- update, replicas, refresh, verify, export, import, and rebind.
214
-
215
200
  ## Architecture
216
201
 
217
202
  ```text
218
203
  msdev CLI
219
204
  -> typed core service
220
205
  -> UnixRpcTransport or SshRpcTransport
221
- -> per-user msdevd
222
- -> host/container command, env file transfer, NPU, or inventory
206
+ -> per-user msdevd (env session + job runner + files)
223
207
  ```
224
208
 
225
209
  Remote RPC responses and command output are bounded. Node/Env registries use
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "msdev"
7
- version = "0.11.0"
7
+ version = "0.12.0"
8
8
  description = "Portable nodes and execution environments for msModelSlim development"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -44,7 +44,7 @@ package-dir = { "" = "src" }
44
44
  where = ["src"]
45
45
 
46
46
  [tool.setuptools.package-data]
47
- msdev = ["helpers/msdev-file-helper-*"]
47
+ msdev = ["helpers/msdev-file-helper-*", "helpers/msdevd-linux-*"]
48
48
 
49
49
  [tool.pytest.ini_options]
50
50
  testpaths = ["tests"]
@@ -1,3 +1,3 @@
1
1
  """Portable node and execution-environment tooling for msModelSlim."""
2
2
 
3
- __version__ = "0.11.0"
3
+ __version__ = "0.12.0"