lightnow-cli 1.2.0__tar.gz → 1.3.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 (46) hide show
  1. lightnow_cli-1.3.0/.release-please-manifest.json +3 -0
  2. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/CHANGELOG.md +20 -0
  3. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/PKG-INFO +42 -1
  4. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/README.md +40 -0
  5. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/__init__.py +1 -1
  6. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/commands/auth.py +3 -1
  7. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/commands/integrations.py +514 -34
  8. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/config.py +139 -1
  9. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/pyproject.toml +2 -1
  10. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/test_cli.py +20 -3
  11. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/test_config.py +117 -0
  12. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/test_integrations.py +467 -10
  13. lightnow_cli-1.2.0/.release-please-manifest.json +0 -3
  14. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/.github/workflows/ci.yml +0 -0
  15. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/.github/workflows/release-please.yml +0 -0
  16. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/.github/workflows/release.yml +0 -0
  17. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/.gitignore +0 -0
  18. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/CONTRIBUTING.md +0 -0
  19. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/LICENSE +0 -0
  20. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/Makefile +0 -0
  21. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/SECURITY.md +0 -0
  22. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/docs/development.md +0 -0
  23. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/docs/release.md +0 -0
  24. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/examples/README.md +0 -0
  25. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/examples/docs.md +0 -0
  26. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/examples/openapi.json +0 -0
  27. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/examples/server.json +0 -0
  28. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/authenticated_http.py +0 -0
  29. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/client.py +0 -0
  30. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/commands/__init__.py +0 -0
  31. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/commands/context.py +0 -0
  32. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/commands/publish.py +0 -0
  33. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/commands/query.py +0 -0
  34. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/commands/runner.py +0 -0
  35. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/commands/validate.py +0 -0
  36. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/main.py +0 -0
  37. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/tls.py +0 -0
  38. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/lightnow_cli/validation.py +0 -0
  39. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/release-please-config.json +0 -0
  40. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/__init__.py +0 -0
  41. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/test_auth_flow.py +0 -0
  42. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/test_authenticated_http.py +0 -0
  43. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/test_client.py +0 -0
  44. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/test_context.py +0 -0
  45. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/test_tls.py +0 -0
  46. {lightnow_cli-1.2.0 → lightnow_cli-1.3.0}/tests/test_validation.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.3.0"
3
+ }
@@ -4,6 +4,26 @@ All notable changes to the LightNow CLI are documented here.
4
4
 
5
5
  This project follows semantic versioning.
6
6
 
7
+ ## [1.3.0](https://github.com/lightnow-ai/lightnow-cli/compare/v1.2.0...v1.3.0) (2026-07-15)
8
+
9
+
10
+ ### Features
11
+
12
+ * **#7:** support account-bound proxy connections ([11b2f5a](https://github.com/lightnow-ai/lightnow-cli/commit/11b2f5a3806e2b9f67637e231783692aacdb78de))
13
+ * **#9:** device control plane ([0d1db03](https://github.com/lightnow-ai/lightnow-cli/commit/0d1db033be28b23e45d9ae38bc0c4754a0cd7380))
14
+ * **devices:** register local proxy client inventory ([ebcbe95](https://github.com/lightnow-ai/lightnow-cli/commit/ebcbe95a099d7b203a89c5886a5d90b300a47e38))
15
+ * support account-bound proxy connections ([6d9f3ad](https://github.com/lightnow-ai/lightnow-cli/commit/6d9f3ad8f633182e57ca8291a9eb297a6330fd72))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * address account-bound session review ([6e41fd8](https://github.com/lightnow-ai/lightnow-cli/commit/6e41fd881789a0f4ac287fd4abece0c69a964093))
21
+
22
+
23
+ ### Documentation
24
+
25
+ * **devices:** explain control plane registration ([f4329f5](https://github.com/lightnow-ai/lightnow-cli/commit/f4329f559ff43f4b501b500b19c3b40f57ad94bf))
26
+
7
27
  ## [1.2.0](https://github.com/lightnow-ai/lightnow-cli/compare/v1.1.0...v1.2.0) (2026-07-12)
8
28
 
9
29
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lightnow-cli
3
- Version: 1.2.0
3
+ Version: 1.3.0
4
4
  Summary: Official LightNow CLI for MCP registry discovery, client config sync, and local MCP runner workflows
5
5
  Project-URL: Homepage, https://github.com/lightnow-ai/lightnow-cli
6
6
  Project-URL: Repository, https://github.com/lightnow-ai/lightnow-cli
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Topic :: Software Development :: Build Tools
19
19
  Classifier: Topic :: Utilities
20
20
  Requires-Python: >=3.11
21
+ Requires-Dist: filelock>=3.16.1
21
22
  Requires-Dist: httpx>=0.24.0
22
23
  Requires-Dist: jsonschema>=4.17.0
23
24
  Requires-Dist: pydantic>=2.0.0
@@ -159,6 +160,40 @@ Then sync your client:
159
160
  lightnow sync --client codex --local-proxy
160
161
  ```
161
162
 
163
+ ### Multiple accounts and organizations
164
+
165
+ Each Local Proxy connection can have its own client alias, LightNow login,
166
+ profile and personal or tenant scope. The sync command binds the connection to
167
+ the account that is signed in at that moment; signing in with another account
168
+ later does not silently move an existing connection.
169
+ Connection aliases are either `lightnow` or start with `lightnow-` or
170
+ `lightnow_`, so they remain TOML-safe and distinguishable from unmanaged local
171
+ MCP servers.
172
+
173
+ For example, configure personal and organization connections side by side:
174
+
175
+ ```bash
176
+ lightnow login
177
+ lightnow sync --client codex --local-proxy \
178
+ --connection lightnow-personal --profile default
179
+
180
+ # Sign in with the organization account before creating this connection.
181
+ lightnow login
182
+ lightnow sync --client codex --local-proxy \
183
+ --connection lightnow-acme --tenant <tenant-id> --profile engineering
184
+ ```
185
+
186
+ Codex then exposes both `lightnow-personal` and `lightnow-acme`. Re-run sync
187
+ with the same `--connection` value to update that connection. Account-bound
188
+ sessions are stored separately under `~/.lightnow/sessions/`; proxy YAML files
189
+ contain only their path and expected identity, never access or refresh tokens.
190
+
191
+ Use `lightnow config-status --client codex --json` to inspect all connections,
192
+ including their non-secret account, scope, profile and session-binding status.
193
+ Signing in to another account preserves existing bound sessions. An explicit
194
+ `lightnow logout` removes the active account's named session, so proxies bound
195
+ to that account stop authenticating until it is signed in and synced again.
196
+
162
197
  Other common clients:
163
198
 
164
199
  ```bash
@@ -187,6 +222,12 @@ lightnow config-status --client cursor --json
187
222
  lightnow config-status --client vscode --json
188
223
  ```
189
224
 
225
+ With metadata telemetry enabled, each Local Proxy sync also registers the
226
+ machine and its client-specific Runtime Profile in the LightNow Control Plane.
227
+ The CLI stores a stable installation UUID in its protected configuration and a
228
+ separate stable client-instance UUID in each generated proxy configuration. It
229
+ does not report IP or MAC addresses, serial numbers, local paths, or secrets.
230
+
190
231
  For details, examples, diagrams and troubleshooting, see
191
232
  [Connect MCP clients](https://docs.lightnow.ai/getting-started/sync-mcp-clients).
192
233
 
@@ -113,6 +113,40 @@ Then sync your client:
113
113
  lightnow sync --client codex --local-proxy
114
114
  ```
115
115
 
116
+ ### Multiple accounts and organizations
117
+
118
+ Each Local Proxy connection can have its own client alias, LightNow login,
119
+ profile and personal or tenant scope. The sync command binds the connection to
120
+ the account that is signed in at that moment; signing in with another account
121
+ later does not silently move an existing connection.
122
+ Connection aliases are either `lightnow` or start with `lightnow-` or
123
+ `lightnow_`, so they remain TOML-safe and distinguishable from unmanaged local
124
+ MCP servers.
125
+
126
+ For example, configure personal and organization connections side by side:
127
+
128
+ ```bash
129
+ lightnow login
130
+ lightnow sync --client codex --local-proxy \
131
+ --connection lightnow-personal --profile default
132
+
133
+ # Sign in with the organization account before creating this connection.
134
+ lightnow login
135
+ lightnow sync --client codex --local-proxy \
136
+ --connection lightnow-acme --tenant <tenant-id> --profile engineering
137
+ ```
138
+
139
+ Codex then exposes both `lightnow-personal` and `lightnow-acme`. Re-run sync
140
+ with the same `--connection` value to update that connection. Account-bound
141
+ sessions are stored separately under `~/.lightnow/sessions/`; proxy YAML files
142
+ contain only their path and expected identity, never access or refresh tokens.
143
+
144
+ Use `lightnow config-status --client codex --json` to inspect all connections,
145
+ including their non-secret account, scope, profile and session-binding status.
146
+ Signing in to another account preserves existing bound sessions. An explicit
147
+ `lightnow logout` removes the active account's named session, so proxies bound
148
+ to that account stop authenticating until it is signed in and synced again.
149
+
116
150
  Other common clients:
117
151
 
118
152
  ```bash
@@ -141,6 +175,12 @@ lightnow config-status --client cursor --json
141
175
  lightnow config-status --client vscode --json
142
176
  ```
143
177
 
178
+ With metadata telemetry enabled, each Local Proxy sync also registers the
179
+ machine and its client-specific Runtime Profile in the LightNow Control Plane.
180
+ The CLI stores a stable installation UUID in its protected configuration and a
181
+ separate stable client-instance UUID in each generated proxy configuration. It
182
+ does not report IP or MAC addresses, serial numbers, local paths, or secrets.
183
+
144
184
  For details, examples, diagrams and troubleshooting, see
145
185
  [Connect MCP clients](https://docs.lightnow.ai/getting-started/sync-mcp-clients).
146
186
 
@@ -1,3 +1,3 @@
1
1
  """LightNow CLI - A command-line tool for managing MCP servers."""
2
2
 
3
- __version__ = "1.2.0" # x-release-please-version
3
+ __version__ = "1.3.0" # x-release-please-version
@@ -412,8 +412,10 @@ def login(
412
412
  config_manager.set_token(
413
413
  token,
414
414
  refresh_token if isinstance(refresh_token, str) else None,
415
- None,
415
+ user_info,
416
+ update_active_session=False,
416
417
  )
418
+ config_manager.persist_current_session(user_info)
417
419
 
418
420
  console.print("[bold green]✓ Authentication successful![/bold green]")
419
421
  if user_info: