lighthouse-cli 0.16.0__tar.gz → 0.17.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.
- {lighthouse_cli-0.16.0/lighthouse_cli.egg-info → lighthouse_cli-0.17.1}/PKG-INFO +1 -3
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/README.md +37 -38
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/__init__.py +2 -2
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/__main__.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/agents.py +14 -14
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/builds.py +5 -5
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/collectors.py +7 -7
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/connect.py +11 -11
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/connections.py +9 -9
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/evals.py +8 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/kb.py +8 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/language.py +3 -3
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/limits.py +3 -3
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/login.py +6 -6
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/models.py +4 -4
- lighthouse_cli-0.17.1/lighthouse/commands/offline.py +235 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/runs.py +50 -6
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/spend.py +6 -6
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/stack.py +4 -4
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/terms.py +3 -3
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/whoami.py +4 -4
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/config.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/credentials.py +2 -2
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/device.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/exits.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/flags.py +2 -2
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/http.py +23 -3
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/i18n.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/ar.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/de.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/en.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/es.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/fr.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/ga.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/it.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/ja.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/nl.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/pt.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/zh-Hans.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/locales/zh-Hant.json +33 -8
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/main.py +22 -6
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/out.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/sealing.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1/lighthouse_cli.egg-info}/PKG-INFO +1 -3
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse_cli.egg-info/SOURCES.txt +2 -0
- lighthouse_cli-0.17.1/lighthouse_cli.egg-info/entry_points.txt +3 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse_cli.egg-info/requires.txt +0 -3
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/pyproject.toml +6 -6
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_collectors.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_commands.py +62 -10
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_connect_finav.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_connect_library.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_dev_surface.py +10 -10
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_golden.py +4 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_i18n.py +1 -1
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_installers.py +21 -0
- lighthouse_cli-0.17.1/tests/test_offline.py +177 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_sealing.py +7 -7
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_stack.py +1 -1
- lighthouse_cli-0.17.1/tests/test_version.py +63 -0
- lighthouse_cli-0.16.0/lighthouse_cli.egg-info/entry_points.txt +0 -2
- lighthouse_cli-0.16.0/tests/test_version.py +0 -19
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/LICENSE +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/NOTICE +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/commands/__init__.py +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse/py.typed +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse_cli.egg-info/dependency_links.txt +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/lighthouse_cli.egg-info/top_level.txt +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/setup.cfg +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_ci_credential.py +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_connect_erp_hr.py +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_fixtures.py +0 -0
- {lighthouse_cli-0.16.0 → lighthouse_cli-0.17.1}/tests/test_plumbing.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lighthouse-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.17.1
|
|
4
4
|
Summary: The LightHouse command line: sign in, connect your estate, deploy agents, watch runs
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -18,6 +18,4 @@ Requires-Dist: ruff==0.16.10; extra == "dev"
|
|
|
18
18
|
Requires-Dist: mypy==2.4.0; extra == "dev"
|
|
19
19
|
Requires-Dist: bandit[toml]==1.9.4; extra == "dev"
|
|
20
20
|
Requires-Dist: jsonschema==4.25.1; extra == "dev"
|
|
21
|
-
Provides-Extra: build
|
|
22
|
-
Requires-Dist: pyinstaller==6.22.3; extra == "build"
|
|
23
21
|
Dynamic: license-file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# The `lighthouse` command line for LightHouse™
|
|
1
|
+
# The `lighthouse-ai` command line for LightHouse™
|
|
2
2
|
|
|
3
3
|
LightHouse from a terminal: sign in through the browser, see what is connected,
|
|
4
4
|
read spend and limits, scaffold an agent, follow the runs. In the manner of the
|
|
@@ -6,10 +6,10 @@ Stripe CLI — one command to install, one to sign in, and everything else
|
|
|
6
6
|
scriptable.
|
|
7
7
|
|
|
8
8
|
```sh
|
|
9
|
-
brew install atlantic-agentic-labs/tap/lighthouse # or npm, pip, curl (below)
|
|
10
|
-
lighthouse login --host t7m2kqx9vbn.atlanticagenticlabs.com
|
|
11
|
-
lighthouse whoami
|
|
12
|
-
lighthouse spend --by model --json | jq '.rows[0]'
|
|
9
|
+
brew install atlantic-agentic-labs/tap/lighthouse-ai # or npm, pip, curl (below)
|
|
10
|
+
lighthouse-ai login --host t7m2kqx9vbn.atlanticagenticlabs.com
|
|
11
|
+
lighthouse-ai whoami
|
|
12
|
+
lighthouse-ai spend --by model --json | jq '.rows[0]'
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## Why Python
|
|
@@ -23,25 +23,20 @@ evidence:
|
|
|
23
23
|
| **The control plane is Python.** The service, its OpenAPI generator and its MCP server are all `aal_control`. The CLI's integration tests therefore run **in process against the very application that is deployed** (`service/tests/test_cli_integration.py`) — the real routes, the real OAuth, the real row-level security, no stack to boot and no stub to drift. No other choice gets us that. | decisive |
|
|
24
24
|
| **No new toolchain in any pipeline.** Every job already runs `python:3.13-slim`; a Go CLI would add a compiler, a cross-build matrix and a second dependency-audit path to all 21 repositories. | heavy |
|
|
25
25
|
| **`keyring` gives the OS keychain on all three platforms** — macOS Keychain, Secret Service, Windows Credential Locker — with no native code to sign or notarise. | heavy |
|
|
26
|
-
| Against:
|
|
26
|
+
| Against: a runtime-free binary. | the cost |
|
|
27
27
|
|
|
28
|
-
That last line is the real cost, and it is paid rather than hidden:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
If the npm and curl routes ever become the main way people install this, the
|
|
35
|
-
decision is worth revisiting — the commands, their output and their tests are
|
|
36
|
-
the valuable part and none of it is language-specific.
|
|
28
|
+
That last line is the real cost, and it is paid rather than hidden: the CLI
|
|
29
|
+
installs from source as a package, so it needs Python (`pipx` brings its own
|
|
30
|
+
isolated environment; Homebrew brings its own virtualenv). There is no
|
|
31
|
+
stand-alone binary: the stand-alone installer was retired on 11 November 2026
|
|
32
|
+
and the CLI ships as packages only.
|
|
37
33
|
|
|
38
34
|
## Install
|
|
39
35
|
|
|
40
|
-
| Route | Command |
|
|
36
|
+
| Route | Command | Platforms |
|
|
41
37
|
|---|---|---|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
| curl | `curl -fsSL https://get.atlanticagenticlabs.com/lighthouse \| sh` | the single-file build (`installers/install.sh`) |
|
|
38
|
+
| pipx or pip | `pipx install lighthouse-cli` (or `pip install lighthouse-cli`) | Linux, macOS, Windows |
|
|
39
|
+
| Homebrew | `brew install atlantic-agentic-labs/tap/lighthouse-ai` | macOS, Linux (`installers/lighthouse-ai.rb`) |
|
|
45
40
|
|
|
46
41
|
**Nothing is published yet.** From a clone:
|
|
47
42
|
|
|
@@ -49,19 +44,19 @@ the valuable part and none of it is language-specific.
|
|
|
49
44
|
cd cli && pip install -e ".[dev]"
|
|
50
45
|
```
|
|
51
46
|
|
|
52
|
-
What has to exist before
|
|
53
|
-
|
|
54
|
-
|
|
47
|
+
What has to exist before either route works is in `installers/README.md`: a
|
|
48
|
+
PyPI project with a trusted publisher and a Homebrew tap. No registry
|
|
49
|
+
credential is stored for PyPI.
|
|
55
50
|
|
|
56
51
|
## Signing in
|
|
57
52
|
|
|
58
53
|
```
|
|
59
|
-
$ lighthouse login --host t7m2kqx9vbn.atlanticagenticlabs.com
|
|
54
|
+
$ lighthouse-ai login --host t7m2kqx9vbn.atlanticagenticlabs.com
|
|
60
55
|
|
|
61
56
|
Your pairing code is: WXKM-7T4P
|
|
62
57
|
Approve it at https://t7m2kqx9vbn.atlanticagenticlabs.com/device
|
|
63
58
|
Press Enter to open the browser, or Ctrl-C to stop…
|
|
64
|
-
Signed in to Example
|
|
59
|
+
Signed in to Example Org as ops@example.test (client_admin).
|
|
65
60
|
```
|
|
66
61
|
|
|
67
62
|
A device code, exactly as `stripe login` does it. The person approves in their
|
|
@@ -73,8 +68,8 @@ the repository, not in a dotfile, not in an environment file. One entry per
|
|
|
73
68
|
host, so you can be signed in to several tenants at once:
|
|
74
69
|
|
|
75
70
|
```sh
|
|
76
|
-
lighthouse whoami --profiles
|
|
77
|
-
lighthouse logout --all # revokes at the service, then forgets
|
|
71
|
+
lighthouse-ai whoami --profiles
|
|
72
|
+
lighthouse-ai logout --all # revokes at the service, then forgets
|
|
78
73
|
```
|
|
79
74
|
|
|
80
75
|
**What the credential can do** is in
|
|
@@ -104,9 +99,9 @@ spend-report:
|
|
|
104
99
|
# LIGHTHOUSE_ACCESS_CLIENT_SECRET are masked CI/CD variables.
|
|
105
100
|
script:
|
|
106
101
|
- pip install -q lighthouse-cli
|
|
107
|
-
- lighthouse whoami --json
|
|
108
|
-
- lighthouse evals list --fail-below 0.8 --json
|
|
109
|
-
- lighthouse spend --json > spend.json
|
|
102
|
+
- lighthouse-ai whoami --json
|
|
103
|
+
- lighthouse-ai evals list --fail-below 0.8 --json
|
|
104
|
+
- lighthouse-ai spend --json > spend.json
|
|
110
105
|
```
|
|
111
106
|
|
|
112
107
|
**Why two credentials.** Every tenant host sits behind Cloudflare Access except
|
|
@@ -120,7 +115,7 @@ service token is missing or wrong and names the two variables.
|
|
|
120
115
|
token (`lhat-...`), but that expires after **eight hours** and is not refreshed
|
|
121
116
|
under the variable: there would be nowhere to put the new one. A machine key
|
|
122
117
|
does not expire by time and has no refresh; revoke it on the Keys page. A
|
|
123
|
-
machine key has no person behind it, so `lighthouse tokens` says so rather than
|
|
118
|
+
machine key has no person behind it, so `lighthouse-ai tokens` says so rather than
|
|
124
119
|
failing, and `whoami` shows the key's kind.
|
|
125
120
|
|
|
126
121
|
When `LIGHTHOUSE_TOKEN` is set, the CLI reads and writes **no** credential
|
|
@@ -130,7 +125,7 @@ store at all.
|
|
|
130
125
|
keychain with the delegated token:
|
|
131
126
|
|
|
132
127
|
```sh
|
|
133
|
-
printf '%s\n' "$ACCESS_SECRET" | lighthouse login --access-client-id "$ACCESS_ID" \
|
|
128
|
+
printf '%s\n' "$ACCESS_SECRET" | lighthouse-ai login --access-client-id "$ACCESS_ID" \
|
|
134
129
|
--access-client-secret-stdin
|
|
135
130
|
```
|
|
136
131
|
|
|
@@ -158,6 +153,10 @@ a terminal, and when `CI`, `NO_COLOR` or `TERM=dumb` is set.
|
|
|
158
153
|
| `evals list`, `evals list --fail-below N` | evaluation results, as a release gate on one named metric (`--metric`, default `f1`); fails closed when a row has no such number |
|
|
159
154
|
| `evals run <pack:card> --cap N [--set S] [--wait] [--fail-below N]` | run the agent's scheduled evaluation once under a spend cap (the `deploy` scope, or a person); with `--wait`, gate on the new results |
|
|
160
155
|
| `runs`, `runs show`, `runs tail` | what ran, and what is running now |
|
|
156
|
+
| `runs export <run> [--format json\|pdf] [-o file]` | one run's content-free export, as JSON or a branded PDF (contract 1.32); audited |
|
|
157
|
+
| `telemetry import <bundle>`, `telemetry status --deployment D` | upload a telemetry bundle from a deployment with no network path, and see the batches held and missing (contract 1.33; client_admin or the `offline` scope) |
|
|
158
|
+
| `commands export --deployment D --out <file>` | the waiting commands as a signed command file for the deployment's `apply-file` (contract 1.33); audited |
|
|
159
|
+
| `commands import-results <answers.json>` | upload the signed answers the deployment's `apply-file --results` wrote; each is verified and matched to an exported command (contract 1.35); audited |
|
|
161
160
|
| `spend` | spend by day, model, pack, agent or connection; the forecast; the estimated savings |
|
|
162
161
|
| `limits` | the limits in force, and whether the engines applied them |
|
|
163
162
|
| `terms` | the commercial terms in force |
|
|
@@ -168,7 +167,7 @@ a terminal, and when `CI`, `NO_COLOR` or `TERM=dumb` is set.
|
|
|
168
167
|
pass, or its metric is below the threshold or missing (it fails closed), so
|
|
169
168
|
a pipeline can evaluate, then deploy only what passed. Deploying and running
|
|
170
169
|
an evaluation need a person's delegated token with the `deploy` scope
|
|
171
|
-
(`lighthouse login --scope "telemetry:read agents:read deploy"`, eight hours,
|
|
170
|
+
(`lighthouse-ai login --scope "telemetry:read agents:read deploy"`, eight hours,
|
|
172
171
|
in `LIGHTHOUSE_TOKEN`); a machine key reads but never deploys or spends.
|
|
173
172
|
|
|
174
173
|
```yaml
|
|
@@ -176,8 +175,8 @@ release:
|
|
|
176
175
|
image: python:3.13-slim
|
|
177
176
|
script:
|
|
178
177
|
- pip install -q lighthouse-cli
|
|
179
|
-
- lighthouse evals run research:summary --cap 5 --wait --fail-below 0.8 --json
|
|
180
|
-
- lighthouse agents deploy research:summary --version "$CI_COMMIT_TAG" --wait --json
|
|
178
|
+
- lighthouse-ai evals run research:summary --cap 5 --wait --fail-below 0.8 --json
|
|
179
|
+
- lighthouse-ai agents deploy research:summary --version "$CI_COMMIT_TAG" --wait --json
|
|
181
180
|
```
|
|
182
181
|
|
|
183
182
|
`agents deploy --wait` exits 0 when the version is current, 1 when the
|
|
@@ -190,15 +189,15 @@ A rate limit (`429`) is waited out and retried by the CLI itself.
|
|
|
190
189
|
**Language.** `--lang <tag>` (or `LIGHTHOUSE_LANG`) picks the language of help,
|
|
191
190
|
prompts, errors and table headers for one run: `en` (British English, the
|
|
192
191
|
default and the source), `fr`, `de`, `es`, `it`, `pt`, `nl`, `ga`, `ja`, `zh-Hans`, `zh-Hant` or `ar`. Without
|
|
193
|
-
either, the CLI uses the language you set in the portal (kept by `lighthouse
|
|
194
|
-
whoami` and `lighthouse language`), then `LANG`. `--json` is never translated: its
|
|
192
|
+
either, the CLI uses the language you set in the portal (kept by `lighthouse-ai
|
|
193
|
+
whoami` and `lighthouse-ai language`), then `LANG`. `--json` is never translated: its
|
|
195
194
|
keys, values and the `error` code are the same in every language. The translations
|
|
196
195
|
are machine-drafted, pending native review; the command-specific notes not yet in a
|
|
197
196
|
catalogue are shown in English.
|
|
198
197
|
|
|
199
198
|
`--json` on every command: one JSON document on standard output and **nothing
|
|
200
199
|
else** — prose, prompts and progress go to standard error, so
|
|
201
|
-
`lighthouse spend --json | jq` works while the command is still talking to you.
|
|
200
|
+
`lighthouse-ai spend --json | jq` works while the command is still talking to you.
|
|
202
201
|
`runs tail --json` writes JSON Lines, one object per change.
|
|
203
202
|
|
|
204
203
|
| Code | Meaning | What a pipeline should do |
|
|
@@ -206,7 +205,7 @@ else** — prose, prompts and progress go to standard error, so
|
|
|
206
205
|
| 0 | it worked | carry on |
|
|
207
206
|
| 1 | the command failed | stop; the message says why |
|
|
208
207
|
| 2 | the command line was wrong | stop; fix the invocation |
|
|
209
|
-
| 3 | not signed in, or the credential expired | `lighthouse login` |
|
|
208
|
+
| 3 | not signed in, or the credential expired | `lighthouse-ai login` |
|
|
210
209
|
| 4 | signed in, but the role or scope does not reach this | ask an administrator |
|
|
211
210
|
| 5 | refused for now: a rate limit, or a retryable 5xx | retry later |
|
|
212
211
|
| 7 | it needed a person and none is there | stop |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""The `lighthouse` command line for LightHouse."""
|
|
3
|
+
"""The `lighthouse-ai` command line for LightHouse."""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
__version__ = "0.
|
|
6
|
+
__version__ = "0.17.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`python -m lighthouse`, the same as the `lighthouse` script."""
|
|
3
|
+
"""`python -m lighthouse`, the same as the `lighthouse-ai` script."""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
from lighthouse.main import run
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse agents`: list, inspect, scaffold, deploy, read logs, roll back.
|
|
3
|
+
"""`lighthouse-ai agents`: list, inspect, scaffold, deploy, read logs, roll back.
|
|
4
4
|
|
|
5
|
-
lighthouse agents # every agent, with its state
|
|
6
|
-
lighthouse agents show research:summary
|
|
7
|
-
lighthouse agents init my-agent # scaffold agent.toml here
|
|
8
|
-
lighthouse agents logs research:summary --limit 20
|
|
9
|
-
lighthouse agents deploy research:summary --version 1.4.0 --wait
|
|
10
|
-
lighthouse agents rollback research:summary --to 1.3.0
|
|
5
|
+
lighthouse-ai agents # every agent, with its state
|
|
6
|
+
lighthouse-ai agents show research:summary
|
|
7
|
+
lighthouse-ai agents init my-agent # scaffold agent.toml here
|
|
8
|
+
lighthouse-ai agents logs research:summary --limit 20
|
|
9
|
+
lighthouse-ai agents deploy research:summary --version 1.4.0 --wait
|
|
10
|
+
lighthouse-ai agents rollback research:summary --to 1.3.0
|
|
11
11
|
|
|
12
12
|
**`init` is local and complete.** It writes an `agent.toml` next to you, with
|
|
13
13
|
every field the pipeline will ask for and a comment on each: instructions, the
|
|
@@ -20,7 +20,7 @@ with `--trace`, one run's spans, which is what anybody actually wants when an
|
|
|
20
20
|
agent misbehaves.
|
|
21
21
|
|
|
22
22
|
**`deploy` and `rollback` make a released version current** (the `deploy`
|
|
23
|
-
scope: sign in with `lighthouse login --scope "telemetry:read agents:read
|
|
23
|
+
scope: sign in with `lighthouse-ai login --scope "telemetry:read agents:read
|
|
24
24
|
deploy"`). Each sends `release.add` for the agent and version; rolling back is
|
|
25
25
|
the same with an earlier version (`--to`, or the last version that passed its
|
|
26
26
|
gate before the current one). The service decides what happens:
|
|
@@ -47,7 +47,7 @@ from lighthouse.flags import inherited
|
|
|
47
47
|
from lighthouse.main import Command, Context
|
|
48
48
|
from lighthouse.out import Out
|
|
49
49
|
|
|
50
|
-
SCAFFOLD = '''# An agent for LightHouse. `lighthouse agents deploy` reads this file.
|
|
50
|
+
SCAFFOLD = '''# An agent for LightHouse. `lighthouse-ai agents deploy` reads this file.
|
|
51
51
|
#
|
|
52
52
|
# Everything here is checked before an agent runs: the model policy against the
|
|
53
53
|
# model library's evidence scores, the knowledge bases against what this tenant
|
|
@@ -63,7 +63,7 @@ instructions = """
|
|
|
63
63
|
You are …
|
|
64
64
|
"""
|
|
65
65
|
|
|
66
|
-
# Knowledge bases this agent may read, by index name (`lighthouse kb`).
|
|
66
|
+
# Knowledge bases this agent may read, by index name (`lighthouse-ai kb`).
|
|
67
67
|
knowledge_bases = []
|
|
68
68
|
|
|
69
69
|
# Tools, by name. Write access is a separate, named tool and sits behind an
|
|
@@ -142,8 +142,8 @@ def _init(ctx: Context) -> dict[str, Any]:
|
|
|
142
142
|
hint="pass --force to overwrite it")
|
|
143
143
|
target.write_text(SCAFFOLD.format(name=ctx.args.name))
|
|
144
144
|
return {"ok": True, "wrote": str(target), "agent": ctx.args.name,
|
|
145
|
-
"next": ["edit it", "lighthouse evals run <pack:card> --cap 5 --wait",
|
|
146
|
-
"lighthouse agents deploy <pack:card> --version <version> --wait"]}
|
|
145
|
+
"next": ["edit it", "lighthouse-ai evals run <pack:card> --cap 5 --wait",
|
|
146
|
+
"lighthouse-ai agents deploy <pack:card> --version <version> --wait"]}
|
|
147
147
|
|
|
148
148
|
|
|
149
149
|
def _logs(ctx: Context) -> dict[str, Any]:
|
|
@@ -165,10 +165,10 @@ def agents(ctx: Context) -> dict[str, Any]:
|
|
|
165
165
|
return _logs(ctx)
|
|
166
166
|
if which == "deploy":
|
|
167
167
|
return _release(ctx, str(ctx.args.version), "deploy",
|
|
168
|
-
ctx.args.reason or "deployed from the lighthouse CLI")
|
|
168
|
+
ctx.args.reason or "deployed from the lighthouse-ai CLI")
|
|
169
169
|
if which == "rollback":
|
|
170
170
|
return _release(ctx, ctx.args.to or _previous(ctx), "rollback",
|
|
171
|
-
ctx.args.reason or "rolled back from the lighthouse CLI")
|
|
171
|
+
ctx.args.reason or "rolled back from the lighthouse-ai CLI")
|
|
172
172
|
if which == "show":
|
|
173
173
|
agent = ctx.args.agent
|
|
174
174
|
if not agent:
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse builds`: agents built with the agent builder, and where each is.
|
|
3
|
+
"""`lighthouse-ai builds`: agents built with the agent builder, and where each is.
|
|
4
4
|
|
|
5
|
-
lighthouse builds
|
|
6
|
-
lighthouse builds --status publish_requested
|
|
7
|
-
lighthouse builds show 5f0c...e1 # one, with its scores and estimated cost
|
|
8
|
-
lighthouse builds --json | jq '.proposals[] | select(.status == "evaluated")'
|
|
5
|
+
lighthouse-ai builds
|
|
6
|
+
lighthouse-ai builds --status publish_requested
|
|
7
|
+
lighthouse-ai builds show 5f0c...e1 # one, with its scores and estimated cost
|
|
8
|
+
lighthouse-ai builds --json | jq '.proposals[] | select(.status == "evaluated")'
|
|
9
9
|
|
|
10
10
|
Reads `GET /api/v1/builder/proposals` (contract 1.24). Read only, on purpose:
|
|
11
11
|
an agent is drafted, sent to your deployment, evaluated and approved in the
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse collectors`: ask Atlantic for a collector, and follow the request.
|
|
3
|
+
"""`lighthouse-ai collectors`: ask Atlantic for a collector, and follow the request.
|
|
4
4
|
|
|
5
|
-
lighthouse collectors requests # your tenant's requests and their stage
|
|
6
|
-
lighthouse collectors request --vendor "Invented CRM" --product "Sales Suite" \\
|
|
5
|
+
lighthouse-ai collectors requests # your tenant's requests and their stage
|
|
6
|
+
lighthouse-ai collectors request --vendor "Invented CRM" --product "Sales Suite" \\
|
|
7
7
|
--reads "Accounts and opportunities" --cloud aws [--kind crm] [--access read] \\
|
|
8
8
|
[--urgency normal] [--docs-url https://...]
|
|
9
9
|
|
|
@@ -15,7 +15,7 @@ client already asked for the same vendor and product, your request joins
|
|
|
15
15
|
that issue instead of opening another.
|
|
16
16
|
|
|
17
17
|
**Asking needs the handler or client_admin role**; reading needs viewer. Both
|
|
18
|
-
use the CLI's own sign-in (`lighthouse login`). At a terminal, a field left
|
|
18
|
+
use the CLI's own sign-in (`lighthouse-ai login`). At a terminal, a field left
|
|
19
19
|
off the command line is asked for; under `--no-input`, or with standard input
|
|
20
20
|
not a terminal, a missing required field is exit 7.
|
|
21
21
|
|
|
@@ -108,10 +108,10 @@ def _ask(ctx: Context) -> dict[str, Any]:
|
|
|
108
108
|
except Refused as e:
|
|
109
109
|
if e.error in ("invalid", "bad_query", "names_your_organisation"):
|
|
110
110
|
raise CliError(e.message, code=USAGE, error=e.error,
|
|
111
|
-
hint="see `lighthouse collectors request --help`") from None
|
|
111
|
+
hint="see `lighthouse-ai collectors request --help`") from None
|
|
112
112
|
if e.error == "conflict":
|
|
113
113
|
raise CliError(e.message, code=e.code, error=e.error,
|
|
114
|
-
hint="`lighthouse collectors requests` shows it") from None
|
|
114
|
+
hint="`lighthouse-ai collectors requests` shows it") from None
|
|
115
115
|
raise
|
|
116
116
|
return {"ok": True, "action": "request", **_row(got), "access": got.get("access"),
|
|
117
117
|
"deployment_cloud": got.get("deployment_cloud"), "urgency": got.get("urgency")}
|
|
@@ -140,7 +140,7 @@ def _show(out: Out, body: dict[str, Any]) -> None:
|
|
|
140
140
|
[[r["id"], f"{r['vendor']} {r['product']}", r["stage"], _issue(r),
|
|
141
141
|
r["request_count"] if r["request_count"] else "-", r["created_at"] or "-"]
|
|
142
142
|
for r in body["requests"]])
|
|
143
|
-
out.note("`lighthouse collectors request --vendor ... --product ...` asks for another")
|
|
143
|
+
out.note("`lighthouse-ai collectors request --vendor ... --product ...` asks for another")
|
|
144
144
|
|
|
145
145
|
|
|
146
146
|
COMMANDS = (Command("collectors", "ask Atlantic for a collector, and follow your requests",
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse connect <provider>`: open the provider's own approval.
|
|
3
|
+
"""`lighthouse-ai connect <provider>`: open the provider's own approval.
|
|
4
4
|
|
|
5
|
-
lighthouse connect # what is connected, and what can be
|
|
6
|
-
lighthouse connect github
|
|
7
|
-
lighthouse connect aws --no-browser
|
|
8
|
-
lighthouse connect gitlab --reuse-local # offers `glab`'s sign-in; asks first
|
|
5
|
+
lighthouse-ai connect # what is connected, and what can be
|
|
6
|
+
lighthouse-ai connect github
|
|
7
|
+
lighthouse-ai connect aws --no-browser
|
|
8
|
+
lighthouse-ai connect gitlab --reuse-local # offers `glab`'s sign-in; asks first
|
|
9
9
|
security find-generic-password -s gh-ci -w | \
|
|
10
|
-
lighthouse connect github --credential-stdin --access read_write \
|
|
11
|
-
--target organisation=example-
|
|
12
|
-
... | lighthouse connect github --credential-stdin \
|
|
10
|
+
lighthouse-ai connect github --credential-stdin --access read_write \
|
|
11
|
+
--target organisation=example-org # an existing token, as you
|
|
12
|
+
... | lighthouse-ai connect github --credential-stdin \
|
|
13
13
|
--deployment-key "$(terraform output -raw deployment_public_key)"
|
|
14
14
|
|
|
15
15
|
**What this command does and does not do.** It opens the portal's Connect page
|
|
@@ -302,7 +302,7 @@ def _read_credential(ctx: Context) -> str:
|
|
|
302
302
|
if len(got.strip()) < 8:
|
|
303
303
|
raise CliError("no credential on standard input", code=USAGE, error="no_credential",
|
|
304
304
|
hint="pipe it in: security find-generic-password -s <name> -w | "
|
|
305
|
-
"lighthouse connect <provider> --credential-stdin")
|
|
305
|
+
"lighthouse-ai connect <provider> --credential-stdin")
|
|
306
306
|
return got
|
|
307
307
|
|
|
308
308
|
|
|
@@ -546,7 +546,7 @@ def _show_listing(out: Out, body: dict[str, Any]) -> None:
|
|
|
546
546
|
p["scopes"]] for p in body["providers"]])
|
|
547
547
|
if not body["providers"]:
|
|
548
548
|
out.note("no connector matches; ask for one from Help, or tell your Atlantic contact")
|
|
549
|
-
out.note("`lighthouse connect <provider>` opens the approval; `--all` lists the coming "
|
|
549
|
+
out.note("`lighthouse-ai connect <provider>` opens the approval; `--all` lists the coming "
|
|
550
550
|
"ones too; `connect list --family F --kind K --search WORDS` narrows the list")
|
|
551
551
|
|
|
552
552
|
|
|
@@ -559,7 +559,7 @@ def connect(ctx: Context) -> dict[str, Any]:
|
|
|
559
559
|
if provider is None:
|
|
560
560
|
raise CliError(f"{name!r} is not a provider LightHouse knows", code=USAGE,
|
|
561
561
|
error="unknown_provider",
|
|
562
|
-
hint="run `lighthouse connect --all` to see every one")
|
|
562
|
+
hint="run `lighthouse-ai connect --all` to see every one")
|
|
563
563
|
if getattr(ctx.args, "credential_stdin", False):
|
|
564
564
|
return _connect_token(ctx, provider)
|
|
565
565
|
url = connect_url(ctx.host)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse connections`: what is connected, how often each syncs, and Sync now.
|
|
3
|
+
"""`lighthouse-ai connections`: what is connected, how often each syncs, and Sync now.
|
|
4
4
|
|
|
5
|
-
lighthouse connections # every connection, its schedule, next sync
|
|
6
|
-
lighthouse connections schedule cx-abcdef123456 --mode hourly
|
|
7
|
-
lighthouse connections schedule cx-abcdef123456 --mode daily --at 06:30 --tz Europe/London
|
|
8
|
-
lighthouse connections schedule cx-abcdef123456 --mode off
|
|
9
|
-
lighthouse connections sync cx-abcdef123456 --reason "a page was fixed this morning"
|
|
5
|
+
lighthouse-ai connections # every connection, its schedule, next sync
|
|
6
|
+
lighthouse-ai connections schedule cx-abcdef123456 --mode hourly
|
|
7
|
+
lighthouse-ai connections schedule cx-abcdef123456 --mode daily --at 06:30 --tz Europe/London
|
|
8
|
+
lighthouse-ai connections schedule cx-abcdef123456 --mode off
|
|
9
|
+
lighthouse-ai connections sync cx-abcdef123456 --reason "a page was fixed this morning"
|
|
10
10
|
|
|
11
11
|
**The listing** reads `GET /api/v1/connectors`, the same connections the
|
|
12
12
|
Connect page shows, with each one's schedule as the deployment reports it
|
|
@@ -124,7 +124,7 @@ def _act(ctx: Context, method: str, suffix: str, body: dict[str, Any]) -> dict[s
|
|
|
124
124
|
except Refused as e:
|
|
125
125
|
if e.error == "invalid":
|
|
126
126
|
raise CliError(e.message, code=USAGE, error="invalid",
|
|
127
|
-
hint="see `lighthouse connections schedule --help`") from None
|
|
127
|
+
hint="see `lighthouse-ai connections schedule --help`") from None
|
|
128
128
|
if e.error == "commands_disabled":
|
|
129
129
|
raise CliError(e.message, code=e.code, error=e.error,
|
|
130
130
|
hint=f"a client administrator switches connector.schedule and "
|
|
@@ -180,8 +180,8 @@ def _show(out: Out, body: dict[str, Any]) -> None:
|
|
|
180
180
|
if c.get("check"):
|
|
181
181
|
out.note(f"{c['id']} ({c['connector']}) is failing: {c['check_words']} "
|
|
182
182
|
f"({c['check']}).{' ' + c['fix'] if c.get('fix') else ''}")
|
|
183
|
-
out.note("`lighthouse connections schedule <id> --mode ...` sets one; "
|
|
184
|
-
"`lighthouse connections sync <id>` syncs one now")
|
|
183
|
+
out.note("`lighthouse-ai connections schedule <id> --mode ...` sets one; "
|
|
184
|
+
"`lighthouse-ai connections sync <id>` syncs one now")
|
|
185
185
|
return
|
|
186
186
|
if body["action"] == "schedule":
|
|
187
187
|
out.pairs([("connection", body["connection"]), ("schedule", body["schedule"]),
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"""`lighthouse evals`: evaluation results, and running a set.
|
|
1
|
+
"""`lighthouse-ai evals`: evaluation results, and running a set.
|
|
2
2
|
|
|
3
|
-
lighthouse evals # the latest results
|
|
4
|
-
lighthouse evals list --pack research --json
|
|
5
|
-
lighthouse evals list --fail-below 0.8 # a release gate on metrics.f1
|
|
6
|
-
lighthouse evals run research:summary --cap 5 --wait --fail-below 0.8
|
|
3
|
+
lighthouse-ai evals # the latest results
|
|
4
|
+
lighthouse-ai evals list --pack research --json
|
|
5
|
+
lighthouse-ai evals list --fail-below 0.8 # a release gate on metrics.f1
|
|
6
|
+
lighthouse-ai evals run research:summary --cap 5 --wait --fail-below 0.8
|
|
7
7
|
|
|
8
8
|
`evals` reads `GET /api/v1/evals`, every page of it: each row is one measurement
|
|
9
9
|
of one suite for one agent version, with `passed` (did it meet its own bar) and
|
|
@@ -30,8 +30,8 @@ new row did not pass, and, with `--fail-below N`, when a new row's metric is
|
|
|
30
30
|
below N or missing (the same closed gate as `evals list --fail-below`). In a
|
|
31
31
|
pipeline:
|
|
32
32
|
|
|
33
|
-
lighthouse evals run research:summary --cap 5 --wait --fail-below 0.8 \
|
|
34
|
-
&& lighthouse agents deploy research:summary --version "$VERSION" --wait
|
|
33
|
+
lighthouse-ai evals run research:summary --cap 5 --wait --fail-below 0.8 \
|
|
34
|
+
&& lighthouse-ai agents deploy research:summary --version "$VERSION" --wait
|
|
35
35
|
"""
|
|
36
36
|
from __future__ import annotations
|
|
37
37
|
|
|
@@ -100,7 +100,7 @@ def _run(ctx: Context) -> dict[str, Any]:
|
|
|
100
100
|
raise CliError("--fail-below gates on the results, so it needs --wait", code=USAGE,
|
|
101
101
|
error="usage")
|
|
102
102
|
body: dict[str, Any] = {"cap_usd": f"{a.cap:.2f}",
|
|
103
|
-
"reason": a.reason or "evaluation run from the lighthouse CLI"}
|
|
103
|
+
"reason": a.reason or "evaluation run from the lighthouse-ai CLI"}
|
|
104
104
|
if a.eval_set:
|
|
105
105
|
body["set"] = a.eval_set
|
|
106
106
|
if a.deployment:
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse kb`: knowledge bases, their freshness, and ingesting into them.
|
|
3
|
+
"""`lighthouse-ai kb`: knowledge bases, their freshness, and ingesting into them.
|
|
4
4
|
|
|
5
|
-
lighthouse kb # every knowledge base, with its freshness
|
|
6
|
-
lighthouse kb show <index>
|
|
7
|
-
lighthouse kb ingest ops --source confluence --wait
|
|
8
|
-
lighthouse kb ingest ops --source cx-abcdef123456
|
|
9
|
-
lighthouse kb upload <file> [--deployment NAME] (contract 1.21)
|
|
5
|
+
lighthouse-ai kb # every knowledge base, with its freshness
|
|
6
|
+
lighthouse-ai kb show <index>
|
|
7
|
+
lighthouse-ai kb ingest ops --source confluence --wait
|
|
8
|
+
lighthouse-ai kb ingest ops --source cx-abcdef123456
|
|
9
|
+
lighthouse-ai kb upload <file> [--deployment NAME] (contract 1.21)
|
|
10
10
|
|
|
11
11
|
`kb` and `kb show` read `GET /api/v1/knowledge-bases` and
|
|
12
12
|
`/api/v1/knowledge-bases/{index}` (contract 1.14): the indexes, what is in
|
|
@@ -143,7 +143,7 @@ def _resolve(ctx: Context, connections: list[dict[str, Any]]) -> dict[str, Any]:
|
|
|
143
143
|
if not hit:
|
|
144
144
|
raise CliError(f"no live connection matches {a.source!r}"
|
|
145
145
|
+ (f" and {a.repo!r}" if a.repo else ""), code=USAGE,
|
|
146
|
-
error="no_connection", hint="`lighthouse connections` lists them")
|
|
146
|
+
error="no_connection", hint="`lighthouse-ai connections` lists them")
|
|
147
147
|
if len(hit) > 1:
|
|
148
148
|
raise CliError(f"{len(hit)} connections match {a.source!r}: name one", code=USAGE,
|
|
149
149
|
error="ambiguous_connection",
|
|
@@ -165,7 +165,7 @@ def _ingest(ctx: Context) -> dict[str, Any]:
|
|
|
165
165
|
try:
|
|
166
166
|
got = person.post(f"/api/v1/connections/{cid}/sync", {k: v for k, v in {
|
|
167
167
|
"deployment": base.get("deployment"),
|
|
168
|
-
"reason": a.reason or f"ingest into {a.index} from the lighthouse CLI"}.items()
|
|
168
|
+
"reason": a.reason or f"ingest into {a.index} from the lighthouse-ai CLI"}.items()
|
|
169
169
|
if v is not None}) or {}
|
|
170
170
|
finally:
|
|
171
171
|
person.close()
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse language`: the language this CLI, the portal, MCP and the
|
|
3
|
+
"""`lighthouse-ai language`: the language this CLI, the portal, MCP and the
|
|
4
4
|
assistant speak to you (contract 1.29).
|
|
5
5
|
|
|
6
|
-
lighthouse language your setting, your organisation's, and what is in use
|
|
7
|
-
lighthouse language --list only the languages on offer
|
|
6
|
+
lighthouse-ai language your setting, your organisation's, and what is in use
|
|
7
|
+
lighthouse-ai language --list only the languages on offer
|
|
8
8
|
|
|
9
9
|
Read only. A person sets their own language in the portal under Preferences
|
|
10
10
|
(and a client administrator the organisation's under Settings): a delegated
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse limits`: the spend limits in force, and whether they reached the engines.
|
|
3
|
+
"""`lighthouse-ai limits`: the spend limits in force, and whether they reached the engines.
|
|
4
4
|
|
|
5
|
-
lighthouse limits
|
|
6
|
-
lighthouse limits --json
|
|
5
|
+
lighthouse-ai limits
|
|
6
|
+
lighthouse-ai limits --json
|
|
7
7
|
|
|
8
8
|
Reads `GET /api/v1/limits`: each limit's scope (`scope_kind` and `scope`),
|
|
9
9
|
its period, its cap (`cap_usd`), what has been spent against it (`spent_usd`,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse login`, `logout` and `tokens`.
|
|
3
|
+
"""`lighthouse-ai login`, `logout` and `tokens`.
|
|
4
4
|
|
|
5
|
-
lighthouse login --host t7m2kqx9vbn.atlanticagenticlabs.com
|
|
6
|
-
lighthouse login --scope "telemetry:read agents:read knowledge:read"
|
|
7
|
-
lighthouse logout [--all]
|
|
8
|
-
lighthouse tokens # every delegated token of mine, and revoke one
|
|
5
|
+
lighthouse-ai login --host t7m2kqx9vbn.atlanticagenticlabs.com
|
|
6
|
+
lighthouse-ai login --scope "telemetry:read agents:read knowledge:read"
|
|
7
|
+
lighthouse-ai logout [--all]
|
|
8
|
+
lighthouse-ai tokens # every delegated token of mine, and revoke one
|
|
9
9
|
|
|
10
10
|
`login` runs the device flow (device.py), stores the token in the OS keychain
|
|
11
11
|
(credentials.py), remembers the host in the profile file (config.py), and then
|
|
@@ -47,7 +47,7 @@ def _configure_login(ap: argparse.ArgumentParser) -> None:
|
|
|
47
47
|
"(default: telemetry:read agents:read)")
|
|
48
48
|
ap.add_argument("--no-browser", action="store_true", dest="no_browser",
|
|
49
49
|
help="print the URL instead of opening a browser")
|
|
50
|
-
ap.add_argument("--name", default="the lighthouse CLI",
|
|
50
|
+
ap.add_argument("--name", default="the lighthouse-ai CLI",
|
|
51
51
|
help="how this sign-in is described in the portal and the audit log")
|
|
52
52
|
ap.add_argument("--access-client-id", dest="access_client_id", metavar="ID",
|
|
53
53
|
help="the tenant's Cloudflare Access service token id, to keep with "
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Copyright 2026 Atlantic Agentic Labs. All Rights Reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
"""`lighthouse models`: the model library, with its evidence scores.
|
|
3
|
+
"""`lighthouse-ai models`: the model library, with its evidence scores.
|
|
4
4
|
|
|
5
|
-
lighthouse models
|
|
6
|
-
lighthouse models --provider bedrock
|
|
7
|
-
lighthouse models --json | jq '.items[] | select(.state == "available") | .model'
|
|
5
|
+
lighthouse-ai models
|
|
6
|
+
lighthouse-ai models --provider bedrock
|
|
7
|
+
lighthouse-ai models --json | jq '.items[] | select(.state == "available") | .model'
|
|
8
8
|
|
|
9
9
|
Reads `GET /api/v1/models`. Price cards are shown to a client administrator and
|
|
10
10
|
to AAL staff only, and the service decides that, not this command: a viewer's
|