lightnow-cli 1.0.3__tar.gz → 1.0.5__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.0.3 → lightnow_cli-1.0.5}/.github/workflows/ci.yml +0 -1
  2. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/.github/workflows/release.yml +20 -0
  3. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/PKG-INFO +92 -5
  4. lightnow_cli-1.0.5/README.md +190 -0
  5. lightnow_cli-1.0.5/docs/development.md +77 -0
  6. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/docs/release.md +7 -1
  7. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/__init__.py +1 -1
  8. lightnow_cli-1.0.5/lightnow_cli/commands/integrations.py +1902 -0
  9. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/main.py +2 -0
  10. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/pyproject.toml +1 -1
  11. lightnow_cli-1.0.5/tests/test_authenticated_http.py +41 -0
  12. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_cli.py +4 -1
  13. lightnow_cli-1.0.5/tests/test_integrations.py +3105 -0
  14. lightnow_cli-1.0.3/README.md +0 -103
  15. lightnow_cli-1.0.3/docs/development.md +0 -51
  16. lightnow_cli-1.0.3/lightnow_cli/commands/integrations.py +0 -659
  17. lightnow_cli-1.0.3/tests/test_integrations.py +0 -1346
  18. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/.gitignore +0 -0
  19. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/CHANGELOG.md +0 -0
  20. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/CONTRIBUTING.md +0 -0
  21. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/LICENSE +0 -0
  22. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/Makefile +0 -0
  23. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/SECURITY.md +0 -0
  24. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/examples/README.md +0 -0
  25. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/examples/docs.md +0 -0
  26. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/examples/openapi.json +0 -0
  27. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/examples/server.json +0 -0
  28. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/authenticated_http.py +0 -0
  29. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/client.py +0 -0
  30. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/__init__.py +0 -0
  31. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/auth.py +0 -0
  32. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/context.py +0 -0
  33. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/publish.py +0 -0
  34. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/query.py +0 -0
  35. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/runner.py +0 -0
  36. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/commands/validate.py +0 -0
  37. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/config.py +0 -0
  38. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/tls.py +0 -0
  39. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/lightnow_cli/validation.py +0 -0
  40. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/__init__.py +0 -0
  41. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_auth_flow.py +0 -0
  42. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_client.py +0 -0
  43. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_config.py +0 -0
  44. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_context.py +0 -0
  45. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_tls.py +0 -0
  46. {lightnow_cli-1.0.3 → lightnow_cli-1.0.5}/tests/test_validation.py +0 -0
@@ -4,7 +4,6 @@ on:
4
4
  pull_request:
5
5
  push:
6
6
  branches:
7
- - master
8
7
  - main
9
8
 
10
9
  permissions:
@@ -57,6 +57,26 @@ jobs:
57
57
  path: dist/*
58
58
  if-no-files-found: error
59
59
 
60
+ github-release:
61
+ name: Create GitHub release
62
+ runs-on: ubuntu-latest
63
+ needs: build
64
+ permissions:
65
+ contents: write
66
+
67
+ steps:
68
+ - name: Download distributions
69
+ uses: actions/download-artifact@v4
70
+ with:
71
+ name: python-distributions
72
+ path: dist
73
+
74
+ - name: Publish GitHub release notes
75
+ uses: softprops/action-gh-release@v2
76
+ with:
77
+ generate_release_notes: true
78
+ files: dist/*
79
+
60
80
  publish-pypi:
61
81
  name: Publish to PyPI
62
82
  runs-on: ubuntu-latest
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lightnow-cli
3
- Version: 1.0.3
3
+ Version: 1.0.5
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
@@ -46,23 +46,37 @@ Description-Content-Type: text/markdown
46
46
 
47
47
  The **LightNow CLI** connects your local MCP clients with LightNow.
48
48
 
49
- Use it to discover MCP servers, sync client configurations, and run
50
- MCP servers with LightNow-managed secrets.
49
+ Use it to sign in, discover MCP servers, configure local AI clients such as
50
+ Codex, Claude Desktop, Cursor, VS Code and Google Antigravity, and keep MCP
51
+ server configuration and secrets managed by LightNow.
51
52
 
52
53
  ## Install
53
54
 
54
- Requirements:
55
+ Requirements for Python-based installs:
55
56
 
56
57
  - Python 3.11 or higher
57
58
  - `pipx`
58
59
  - a [LightNow account](https://www.lightnow.ai/)
59
60
 
61
+ Install the CLI with Homebrew:
62
+
63
+ ```bash
64
+ brew tap lightnow-ai/tap
65
+ brew install lightnow-cli
66
+ ```
67
+
60
68
  Install the CLI with `pipx`:
61
69
 
62
70
  ```bash
63
71
  pipx install lightnow-cli
64
72
  ```
65
73
 
74
+ Or install it with `uv`:
75
+
76
+ ```bash
77
+ uv tool install lightnow-cli
78
+ ```
79
+
66
80
  If you prefer installing directly from the public repository:
67
81
 
68
82
  ```bash
@@ -102,7 +116,73 @@ Show your favorites:
102
116
  lightnow favorites
103
117
  ```
104
118
 
105
- ## Sync a Client Configuration
119
+ ## Configure an MCP Client
120
+
121
+ The recommended setup is Local Proxy mode: your MCP client gets one `LightNow`
122
+ entry and the local proxy resolves the configured MCP servers and secrets at
123
+ runtime.
124
+
125
+ Install the Local Proxy executable first with Homebrew:
126
+
127
+ ```bash
128
+ brew tap lightnow-ai/tap
129
+ brew install lightnow-proxy
130
+ ```
131
+
132
+ Or install it with `pipx`:
133
+
134
+ ```bash
135
+ pipx install lightnow-proxy
136
+ ```
137
+
138
+ Or install it with `uv`:
139
+
140
+ ```bash
141
+ uv tool install lightnow-proxy
142
+ ```
143
+
144
+ The proxy package installs the `lightnow-proxy` command used in MCP client configs.
145
+
146
+ For local development from a checkout:
147
+
148
+ ```bash
149
+ uv tool install --from /path/to/lightnow-proxy lightnow-proxy
150
+ ```
151
+
152
+ Then sync your client:
153
+
154
+ ```bash
155
+ lightnow sync --client codex --local-proxy
156
+ ```
157
+
158
+ Other common clients:
159
+
160
+ ```bash
161
+ lightnow sync --client claude-desktop --local-proxy
162
+ lightnow sync --client antigravity --local-proxy
163
+ lightnow sync --client cursor --local-proxy
164
+ lightnow sync --client vscode --local-proxy
165
+ ```
166
+
167
+ Let LightNow choose the configured organization policy for a client:
168
+
169
+ ```bash
170
+ lightnow sync --client codex --from-settings
171
+ ```
172
+
173
+ Check whether a client is configured as expected:
174
+
175
+ ```bash
176
+ lightnow config-status --client codex
177
+ lightnow config-status --client claude-desktop --json
178
+ lightnow config-status --client cursor --json
179
+ lightnow config-status --client vscode --json
180
+ ```
181
+
182
+ For details, examples, diagrams and troubleshooting, see
183
+ [Connect MCP clients](https://docs.lightnow.ai/getting-started/sync-mcp-clients).
184
+
185
+ ### Direct Sync
106
186
 
107
187
  Sync your default LightNow runtime profile into Codex:
108
188
 
@@ -123,6 +203,13 @@ files:
123
203
  lightnow sync --client codex --runner
124
204
  ```
125
205
 
206
+ For daemon-style local testing, `--local-proxy-transport http` writes a
207
+ localhost Streamable HTTP entry instead of a stdio auto-start entry.
208
+
209
+ Note: Google has moved individual Gemini CLI users to Antigravity. LightNow
210
+ keeps `gemini-cli` support for Enterprise/API-key environments, but
211
+ `antigravity` is the recommended Google local client target for individuals.
212
+
126
213
  ## Run One Server
127
214
 
128
215
  Run a configured MCP server through LightNow:
@@ -0,0 +1,190 @@
1
+ # LightNow CLI
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/lightnow-cli.svg)](https://pypi.org/project/lightnow-cli/)
4
+
5
+ The **LightNow CLI** connects your local MCP clients with LightNow.
6
+
7
+ Use it to sign in, discover MCP servers, configure local AI clients such as
8
+ Codex, Claude Desktop, Cursor, VS Code and Google Antigravity, and keep MCP
9
+ server configuration and secrets managed by LightNow.
10
+
11
+ ## Install
12
+
13
+ Requirements for Python-based installs:
14
+
15
+ - Python 3.11 or higher
16
+ - `pipx`
17
+ - a [LightNow account](https://www.lightnow.ai/)
18
+
19
+ Install the CLI with Homebrew:
20
+
21
+ ```bash
22
+ brew tap lightnow-ai/tap
23
+ brew install lightnow-cli
24
+ ```
25
+
26
+ Install the CLI with `pipx`:
27
+
28
+ ```bash
29
+ pipx install lightnow-cli
30
+ ```
31
+
32
+ Or install it with `uv`:
33
+
34
+ ```bash
35
+ uv tool install lightnow-cli
36
+ ```
37
+
38
+ If you prefer installing directly from the public repository:
39
+
40
+ ```bash
41
+ pipx install git+https://github.com/lightnow-ai/lightnow-cli.git
42
+ ```
43
+
44
+ ## Sign In
45
+
46
+ ```bash
47
+ lightnow login
48
+ ```
49
+
50
+ The CLI opens a browser window for LightNow authentication. After sign-in, check
51
+ your session with:
52
+
53
+ ```bash
54
+ lightnow status
55
+ ```
56
+
57
+ ## Find MCP Servers
58
+
59
+ Search the LightNow Registry:
60
+
61
+ ```bash
62
+ lightnow search sonarqube
63
+ ```
64
+
65
+ Show details for one server:
66
+
67
+ ```bash
68
+ lightnow info io.github.SonarSource/sonarqube-mcp-server
69
+ ```
70
+
71
+ Show your favorites:
72
+
73
+ ```bash
74
+ lightnow favorites
75
+ ```
76
+
77
+ ## Configure an MCP Client
78
+
79
+ The recommended setup is Local Proxy mode: your MCP client gets one `LightNow`
80
+ entry and the local proxy resolves the configured MCP servers and secrets at
81
+ runtime.
82
+
83
+ Install the Local Proxy executable first with Homebrew:
84
+
85
+ ```bash
86
+ brew tap lightnow-ai/tap
87
+ brew install lightnow-proxy
88
+ ```
89
+
90
+ Or install it with `pipx`:
91
+
92
+ ```bash
93
+ pipx install lightnow-proxy
94
+ ```
95
+
96
+ Or install it with `uv`:
97
+
98
+ ```bash
99
+ uv tool install lightnow-proxy
100
+ ```
101
+
102
+ The proxy package installs the `lightnow-proxy` command used in MCP client configs.
103
+
104
+ For local development from a checkout:
105
+
106
+ ```bash
107
+ uv tool install --from /path/to/lightnow-proxy lightnow-proxy
108
+ ```
109
+
110
+ Then sync your client:
111
+
112
+ ```bash
113
+ lightnow sync --client codex --local-proxy
114
+ ```
115
+
116
+ Other common clients:
117
+
118
+ ```bash
119
+ lightnow sync --client claude-desktop --local-proxy
120
+ lightnow sync --client antigravity --local-proxy
121
+ lightnow sync --client cursor --local-proxy
122
+ lightnow sync --client vscode --local-proxy
123
+ ```
124
+
125
+ Let LightNow choose the configured organization policy for a client:
126
+
127
+ ```bash
128
+ lightnow sync --client codex --from-settings
129
+ ```
130
+
131
+ Check whether a client is configured as expected:
132
+
133
+ ```bash
134
+ lightnow config-status --client codex
135
+ lightnow config-status --client claude-desktop --json
136
+ lightnow config-status --client cursor --json
137
+ lightnow config-status --client vscode --json
138
+ ```
139
+
140
+ For details, examples, diagrams and troubleshooting, see
141
+ [Connect MCP clients](https://docs.lightnow.ai/getting-started/sync-mcp-clients).
142
+
143
+ ### Direct Sync
144
+
145
+ Sync your default LightNow runtime profile into Codex:
146
+
147
+ ```bash
148
+ lightnow sync --client codex
149
+ ```
150
+
151
+ Preview changes before writing:
152
+
153
+ ```bash
154
+ lightnow sync --client codex --dry-run
155
+ ```
156
+
157
+ Use runner mode when you do not want secrets written into client configuration
158
+ files:
159
+
160
+ ```bash
161
+ lightnow sync --client codex --runner
162
+ ```
163
+
164
+ For daemon-style local testing, `--local-proxy-transport http` writes a
165
+ localhost Streamable HTTP entry instead of a stdio auto-start entry.
166
+
167
+ Note: Google has moved individual Gemini CLI users to Antigravity. LightNow
168
+ keeps `gemini-cli` support for Enterprise/API-key environments, but
169
+ `antigravity` is the recommended Google local client target for individuals.
170
+
171
+ ## Run One Server
172
+
173
+ Run a configured MCP server through LightNow:
174
+
175
+ ```bash
176
+ lightnow run --profile default --server sonarqube
177
+ ```
178
+
179
+ ## More Documentation
180
+
181
+ - [CLI usage guide](https://docs.lightnow.ai/getting-started/sync-mcp-clients)
182
+ - [CLI reference](https://docs.lightnow.ai/reference/cli)
183
+ - [Local development](docs/development.md)
184
+ - [Release process](docs/release.md)
185
+ - [Security policy](SECURITY.md)
186
+ - [Contributing](CONTRIBUTING.md)
187
+
188
+ ## License
189
+
190
+ Apache-2.0. See [LICENSE](LICENSE).
@@ -0,0 +1,77 @@
1
+ # Local Development
2
+
3
+ ## Setup
4
+
5
+ ```bash
6
+ python3 -m venv .venv
7
+ source .venv/bin/activate
8
+ pip install -e ".[dev]"
9
+ lightnow --help
10
+ ```
11
+
12
+ For local editable installs through `pipx`:
13
+
14
+ ```bash
15
+ pipx install --force --editable .
16
+ ```
17
+
18
+ ## Checks
19
+
20
+ Run all checks:
21
+
22
+ ```bash
23
+ make all
24
+ ```
25
+
26
+ Run targeted checks:
27
+
28
+ ```bash
29
+ make lint
30
+ make format-check
31
+ make isort-check
32
+ make type-check
33
+ make test
34
+ make cli-check
35
+ make integration
36
+ make package
37
+ ```
38
+
39
+ The tests cover command parsing, validation logic, token refresh, registry
40
+ queries, sync patching, local runner behavior, and secret redaction.
41
+
42
+ ## Local Proxy Config Posture
43
+
44
+ `lightnow sync --client <client> --local-proxy` should leave the target MCP
45
+ client with one LightNow entry and no unmanaged MCP servers unless the customer
46
+ explicitly keeps a mixed setup.
47
+
48
+ Use the redacted status command while testing client integrations:
49
+
50
+ ```bash
51
+ lightnow config-status --client codex
52
+ lightnow config-status --client claude-desktop
53
+ lightnow config-status --client antigravity --json
54
+ ```
55
+
56
+ Expected states:
57
+
58
+ - `managed`: only the LightNow Local Proxy entry is configured.
59
+ - `mixed`: LightNow Local Proxy exists, but unmanaged MCP entries are also
60
+ present.
61
+ - `unmanaged`: MCP entries exist, but none point at the LightNow Local Proxy.
62
+ - `legacy_runner`: older per-server `lightnow run` wrappers are still present.
63
+ - `missing`, `invalid` or `unreadable`: the client config cannot be used as-is.
64
+
65
+ The command must not print secrets, headers or payloads. It is the local building
66
+ block for future UI-led enablement and enterprise posture reporting.
67
+
68
+ ## Local LightNow Environment
69
+
70
+ Use the local profile when working against the LightNow local stack:
71
+
72
+ ```bash
73
+ lightnow login --local
74
+ ```
75
+
76
+ Local HTTPS verification depends on the workspace local CA. Run the LightNow
77
+ local stack certificate setup before using `*.lightnow.local` endpoints.
@@ -22,7 +22,7 @@ Before publishing a release:
22
22
  ```bash
23
23
  make all
24
24
  ```
25
- 4. Verify the GitHub Actions `CI` workflow is green on `master`.
25
+ 4. Verify the GitHub Actions `CI` workflow is green on `main`.
26
26
  5. Configure PyPI Trusted Publishing before the first PyPI release:
27
27
  - PyPI project name: `lightnow-cli`
28
28
  - Owner: `lightnow-ai`
@@ -38,7 +38,13 @@ Before publishing a release:
38
38
  - tests pass,
39
39
  - source distribution and wheel are built,
40
40
  - `twine check` passes,
41
+ - a GitHub Release is created with generated release notes and distribution artifacts,
41
42
  - PyPI publish succeeds through Trusted Publishing.
43
+ 8. Update the Homebrew tap after the release artifact is available:
44
+ - repository: `lightnow-ai/homebrew-tap`
45
+ - formula: `Formula/lightnow-cli.rb`
46
+ - replace the formula template URL, version and SHA256 with the released artifact,
47
+ - run `brew audit`, `brew install --build-from-source`, and `brew test`.
42
48
 
43
49
  Do not publish with long-lived local PyPI tokens.
44
50
 
@@ -1,3 +1,3 @@
1
1
  """LightNow CLI - A command-line tool for managing MCP servers."""
2
2
 
3
- __version__ = "1.0.3"
3
+ __version__ = "1.0.5"