fp-cloud-cli 0.0.1b1__py3-none-any.whl
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.
- fp_cli/__init__.py +10 -0
- fp_cli/__main__.py +4 -0
- fp_cli/_click_compat.py +64 -0
- fp_cli/_context.py +332 -0
- fp_cli/_version.py +1 -0
- fp_cli/analytics.py +432 -0
- fp_cli/analytics_config.py +77 -0
- fp_cli/analytics_registry.py +83 -0
- fp_cli/app.py +492 -0
- fp_cli/auth.py +160 -0
- fp_cli/client.py +1694 -0
- fp_cli/commands/__init__.py +0 -0
- fp_cli/commands/_write.py +214 -0
- fp_cli/commands/agent_cmds.py +407 -0
- fp_cli/commands/alerts_cmds.py +445 -0
- fp_cli/commands/audits_cmds.py +1054 -0
- fp_cli/commands/auth_cmds.py +512 -0
- fp_cli/commands/errors_cmds.py +190 -0
- fp_cli/commands/evals_cmds.py +161 -0
- fp_cli/commands/events_cmds.py +159 -0
- fp_cli/commands/fleet_cmds.py +416 -0
- fp_cli/commands/guardrails_cmds.py +148 -0
- fp_cli/commands/incidents_cmds.py +472 -0
- fp_cli/commands/keys_cmds.py +407 -0
- fp_cli/commands/list_cmds.py +63 -0
- fp_cli/commands/orgs_cmds.py +319 -0
- fp_cli/commands/policies_cmds.py +499 -0
- fp_cli/commands/queries_cmds.py +378 -0
- fp_cli/commands/sessions_cmds.py +151 -0
- fp_cli/commands/settings_cmds.py +150 -0
- fp_cli/commands/usage_cmds.py +35 -0
- fp_cli/commands/users_cmds.py +404 -0
- fp_cli/config.py +330 -0
- fp_cli/dates.py +78 -0
- fp_cli/enforcement.py +345 -0
- fp_cli/errors.py +98 -0
- fp_cli/models.py +891 -0
- fp_cli/orgs.py +30 -0
- fp_cli/output.py +6593 -0
- fp_cli/permissions.py +208 -0
- fp_cli/policy_check.py +290 -0
- fp_cli/py.typed +0 -0
- fp_cli/select.py +322 -0
- fp_cli/theme.py +53 -0
- fp_cloud_cli-0.0.1b1.dist-info/METADATA +335 -0
- fp_cloud_cli-0.0.1b1.dist-info/RECORD +50 -0
- fp_cloud_cli-0.0.1b1.dist-info/WHEEL +5 -0
- fp_cloud_cli-0.0.1b1.dist-info/entry_points.txt +2 -0
- fp_cloud_cli-0.0.1b1.dist-info/licenses/LICENSE +42 -0
- fp_cloud_cli-0.0.1b1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fp-cloud-cli
|
|
3
|
+
Version: 0.0.1b1
|
|
4
|
+
Summary: Command line client for FailproofAI Cloud — sessions, events, evaluations and audits from your terminal
|
|
5
|
+
Author-email: Failproof AI <failproofai@exosphere.host>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2025 ExosphereHost Inc
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Commons Clause License Condition v1.0
|
|
29
|
+
|
|
30
|
+
The Software is provided to you by the Licensor under the License, as defined
|
|
31
|
+
below, subject to the following condition.
|
|
32
|
+
|
|
33
|
+
Without limiting other conditions in the License, the grant of rights under
|
|
34
|
+
the License will not include, and the License does not grant to you, the right
|
|
35
|
+
to Sell the Software.
|
|
36
|
+
|
|
37
|
+
For purposes of the foregoing, "Sell" means practicing any or all of the
|
|
38
|
+
rights granted to you under the License to provide to third parties, for a
|
|
39
|
+
fee or other consideration (including without limitation fees for hosting or
|
|
40
|
+
consulting/support services related to the Software), a product or service
|
|
41
|
+
whose value derives, entirely or substantially, from the functionality of the
|
|
42
|
+
Software. Any license notice or attribution required by the License must also
|
|
43
|
+
include this Commons Clause License Condition notice.
|
|
44
|
+
|
|
45
|
+
Software: failproofai
|
|
46
|
+
License: MIT
|
|
47
|
+
Licensor: ExosphereHost Inc
|
|
48
|
+
|
|
49
|
+
Project-URL: Homepage, https://befailproof.ai
|
|
50
|
+
Project-URL: Documentation, https://docs.befailproof.ai/reference/cloud-cli
|
|
51
|
+
Project-URL: Source, https://github.com/FailproofAI/failproofai
|
|
52
|
+
Project-URL: Changelog, https://github.com/FailproofAI/failproofai/blob/main/fp-cloud-cli/CHANGELOG.md
|
|
53
|
+
Keywords: agents,observability,ai,monitoring,failproofai,cli
|
|
54
|
+
Classifier: Development Status :: 4 - Beta
|
|
55
|
+
Classifier: Environment :: Console
|
|
56
|
+
Classifier: Intended Audience :: Developers
|
|
57
|
+
Classifier: Programming Language :: Python :: 3
|
|
58
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
59
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
60
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
61
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
62
|
+
Classifier: Typing :: Typed
|
|
63
|
+
Requires-Python: >=3.10
|
|
64
|
+
Description-Content-Type: text/markdown
|
|
65
|
+
License-File: LICENSE
|
|
66
|
+
Requires-Dist: httpx>=0.27
|
|
67
|
+
Requires-Dist: typer<0.28,>=0.13
|
|
68
|
+
Requires-Dist: click>=8.1
|
|
69
|
+
Requires-Dist: rich>=13
|
|
70
|
+
Requires-Dist: pygments>=2.13
|
|
71
|
+
Requires-Dist: posthog<8,>=3.5
|
|
72
|
+
Provides-Extra: dev
|
|
73
|
+
Requires-Dist: pytest>=7; extra == "dev"
|
|
74
|
+
Requires-Dist: respx>=0.21; extra == "dev"
|
|
75
|
+
Dynamic: license-file
|
|
76
|
+
|
|
77
|
+
# FailproofAI Cloud CLI (`fp`)
|
|
78
|
+
|
|
79
|
+
A command-line client for the **FailproofAI Cloud** API. It lets a developer —
|
|
80
|
+
or the coding agent working alongside them — authenticate and query agent
|
|
81
|
+
sessions, event logs, and evaluations from the terminal, with a `--json` flag on
|
|
82
|
+
every command for scripting.
|
|
83
|
+
|
|
84
|
+
> **The package is `fp-cloud-cli`; the command is `fp`.** They differ because `fp` was
|
|
85
|
+
> already taken on PyPI. This is also distinct from `failproofai` on npm, which is
|
|
86
|
+
> the Enforcement CLI — that one runs inside the agent loop and decides what an
|
|
87
|
+
> agent may do; this one reads back what it did.
|
|
88
|
+
|
|
89
|
+
## Install
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
pipx install fp-cloud-cli # recommended (isolated)
|
|
93
|
+
# or: uv tool install fp-cloud-cli / pip install fp-cloud-cli
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Then the command is `fp`:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
fp --version
|
|
100
|
+
fp help
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
For development in this repo:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
cd fp-cloud-cli
|
|
107
|
+
uv sync --extra dev
|
|
108
|
+
uv run fp --help
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Authentication
|
|
112
|
+
|
|
113
|
+
The CLI talks to your dashboard (set `--base-url` or `FP_DASHBOARD_URL`) and logs in with
|
|
114
|
+
an emailed one-time code:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
fp login --email you@example.com
|
|
118
|
+
# enter the 6-digit code; the session is stored in
|
|
119
|
+
# ~/.failproofai/fpcli/cli-auth.json (mode 0600)
|
|
120
|
+
fp whoami
|
|
121
|
+
fp logout
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Sessions expire (24h by default); re-run `fp login` when prompted.
|
|
125
|
+
|
|
126
|
+
## Working across orgs (multi-tenant)
|
|
127
|
+
|
|
128
|
+
Your account can belong to more than one org. The active org is chosen **at login** and saved:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
fp login --org acme # pick the tenant at login (saved for later commands)
|
|
132
|
+
fp orgs list # your orgs + your role in each (active one marked)
|
|
133
|
+
fp orgs switch globex # switch the active org (pass a slug…)
|
|
134
|
+
fp orgs switch # …or omit it to pick from a list (in a terminal)
|
|
135
|
+
fp orgs current # which org you're acting as right now (identity card)
|
|
136
|
+
fp orgs perms # your permissions in the active org (grouped by resource)
|
|
137
|
+
fp --org globex sessions # override for a single command
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
If you belong to exactly one org it's selected automatically. If you belong to several, you
|
|
141
|
+
pick at login (or with `orgs switch`); pass `--org` to choose non-interactively. A slug you
|
|
142
|
+
can't access (non-existent, or not yours) is rejected rather than saved. The active org is
|
|
143
|
+
sent as the `X-AgentEye-Org` header on every request, and your permissions are resolved per
|
|
144
|
+
org. (All tenant commands live under one group: `orgs list` / `orgs switch` / `orgs current` /
|
|
145
|
+
`orgs perms`.)
|
|
146
|
+
|
|
147
|
+
## Commands
|
|
148
|
+
|
|
149
|
+
**Query & observability**
|
|
150
|
+
|
|
151
|
+
```text
|
|
152
|
+
fp sessions [--since 24h] [--status error] [--agent-id <id>] [--all] # runs: time/env/agent/session/status
|
|
153
|
+
fp evals [--score helpfulness:..0.5] [--all] # eval results + scores
|
|
154
|
+
fp evals --aggregate [--since 7d] # rolled-up eval health (status mix + per-metric score stats)
|
|
155
|
+
fp events --session-id <id> [--event-type tool_use,tool_result] [--env prod] [--all]
|
|
156
|
+
fp errors [--since 24h] [--error-type TimeoutError] [--all] # list errored events
|
|
157
|
+
fp errors --aggregate [--since 7d] # error summary (count + sessions/agents/last seen)
|
|
158
|
+
fp list <thing> # discover dropdown values to filter on:
|
|
159
|
+
# envs · agents · event_types · score_filters · models · hooks · tools · error_types
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Manage your org** (each gated by the matching permission)
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
fp keys list|show|create|update|disable|regenerate # API keys (secret shown once)
|
|
166
|
+
fp users list|show|create|update|disable|enable
|
|
167
|
+
fp settings list|schema|set
|
|
168
|
+
fp alerts list|show|create|update|delete|test
|
|
169
|
+
fp issues list|count|show|ack|assign|resolve|comment-add|comment-list|comment-delete|subscribe|subscribers|unsubscribe|open
|
|
170
|
+
fp audits list|show|create|edit|delete|run|runs|findings|finding # scheduled audits
|
|
171
|
+
fp audits ack|assign|resolve|dismiss|mute|reopen # triage a finding
|
|
172
|
+
fp audits context-show|context-set|context-refresh # reference context
|
|
173
|
+
fp usage # org usage for the metering window
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Analytics & assistant**
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
fp query list|show|create|update|delete|run|schema # saved SQL + ad-hoc runner
|
|
180
|
+
fp agent health|models|chats|show|rename|delete|ask
|
|
181
|
+
# agent models → models available for --model (with the default marked)
|
|
182
|
+
# agent ask "…" → starts a NEW chat, answers + persists, prints the chat id
|
|
183
|
+
# agent ask --chat <id> "…" → continue that chat (shows in the dashboard; 1st Q auto-titles)
|
|
184
|
+
# agent chats|show <id>|rename <id> --title …|delete <id> → manage saved chats
|
|
185
|
+
fp version | help
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Mutations are non-interactive-safe.** Create/update/delete prompt for confirmation in a
|
|
189
|
+
terminal, but auto-skip the prompt under `--json` or when stdin isn't a TTY (so scripts/agents
|
|
190
|
+
never hang). Pass `--yes`/`-y` to skip it explicitly. Request bodies can be supplied with
|
|
191
|
+
`--file payload.json` (or `--file -` for stdin) on `alerts` and `settings` — mutually
|
|
192
|
+
exclusive with the discrete flags. `users create`/`update` take only the discrete
|
|
193
|
+
flags (`--permission-set`, `--add`, `--remove`). (Saved-query SQL uses `--sql @file.sql`.)
|
|
194
|
+
|
|
195
|
+
Every command and subcommand has `--help` / `-h`; `fp -h` documents auth, exit codes, and
|
|
196
|
+
the global options. **Global options go before the command** (`fp --json events`, not
|
|
197
|
+
`fp events --json`).
|
|
198
|
+
|
|
199
|
+
Add `--json` for machine-readable output, and `--fields` to project just the keys you need:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
fp --json events --session-id run-001 --all | jq '.events[].payload'
|
|
203
|
+
fp --json sessions --since 7d --fields session_id,status,scores
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Cloud-managed policies
|
|
207
|
+
|
|
208
|
+
Three commands for the three jobs the dashboard splits across three pages —
|
|
209
|
+
`fp policies` writes a policy version, `fp fleet` decides which machines run it,
|
|
210
|
+
`fp guardrails summary` reports what it actually blocked.
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
fp policies publish no-force-push ./rule.mjs # path, @path, a pipe, - or a paste
|
|
214
|
+
fp fleet deploy ci-runner-01 --add no-force-push
|
|
215
|
+
fp guardrails summary --since 24h
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**A deploy REPLACES a machine's whole policy set.** The server takes the full
|
|
219
|
+
list and does not merge, so `fleet deploy` reads what the machine currently runs,
|
|
220
|
+
applies your `--add`/`--remove`, prints the complete resulting set, and writes
|
|
221
|
+
that. Use `--set` only when you mean "exactly these, drop the rest".
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
fp fleet deploy ci-runner-01 \
|
|
225
|
+
--add no-force-push \ # keeps its pinned version if already deployed
|
|
226
|
+
--add prod-guard@1:observe \ # id@version:effect
|
|
227
|
+
--remove old-rule
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Three things worth knowing before you script it:
|
|
231
|
+
|
|
232
|
+
* A bare `--add` of a policy the machine already runs keeps its **pinned
|
|
233
|
+
version**. Pass `id@version` to move it — a pin is usually deliberate.
|
|
234
|
+
* The endpoint has no lock. The CLI records the deployment generation it read and
|
|
235
|
+
**refuses** if the write does not land at exactly one higher, because that means
|
|
236
|
+
somebody deployed in between and a replace does not merge.
|
|
237
|
+
* The exit code separates your mistake from the server's answer. A malformed ref,
|
|
238
|
+
`--set` alongside `--add`/`--remove`, or no flags at all is **2**; a ref that
|
|
239
|
+
parses but names a policy that does not exist is **1**; an unknown machine is
|
|
240
|
+
**6**. Branch on those rather than on the message.
|
|
241
|
+
|
|
242
|
+
`fp fleet diff` shows intent versus delivery: a machine can be deployed-to and
|
|
243
|
+
still enforcing an older set until it next polls. It refuses a machine id nobody
|
|
244
|
+
has reported under rather than rendering it as an empty fleet.
|
|
245
|
+
|
|
246
|
+
These commands are **session-only** (`fp login`). They are absent from the
|
|
247
|
+
versioned API an API key authenticates against, so `--api-key` exits 2 with the
|
|
248
|
+
reason rather than failing at the request.
|
|
249
|
+
|
|
250
|
+
## Configuration
|
|
251
|
+
|
|
252
|
+
| Setting | Flag | Env var | Default |
|
|
253
|
+
|---|---|---|---|
|
|
254
|
+
| Dashboard URL | `--base-url` | `FP_DASHBOARD_URL` | `https://app.befailproof.ai` |
|
|
255
|
+
| Active org/tenant | `--org` | `FP_ORG` | chosen at login; saved in `~/.failproofai/fpcli/cli-auth.json` |
|
|
256
|
+
| Session token | `--token` | `FP_TOKEN` | from `~/.failproofai/fpcli/cli-auth.json` |
|
|
257
|
+
| API key (CI) | `--api-key` | `FP_API_KEY` | none; never written to disk |
|
|
258
|
+
| JSON output | `--json` | `FP_JSON` | off |
|
|
259
|
+
| Skip TLS verification | `--insecure` / `--secure` | `FP_INSECURE` | off (saved at login) |
|
|
260
|
+
| Disable usage telemetry | _(none)_ | `FP_ANALYTICS_DISABLED` (or `DO_NOT_TRACK`) | off — [this build sends nothing](#telemetry) |
|
|
261
|
+
|
|
262
|
+
Precedence is **flag > environment variable > config file > built-in default**. A fresh
|
|
263
|
+
install points at the hosted product with no configuration; set `--base-url` or
|
|
264
|
+
`FP_DASHBOARD_URL` for a self-hosted or dev instance and it is saved after `login`.
|
|
265
|
+
|
|
266
|
+
The session lives at `~/.failproofai/fpcli/cli-auth.json` (mode `0600`). The directory
|
|
267
|
+
is resolved as `FP_HOME` > `$FAILPROOFAI_HOME/fpcli` > `~/.failproofai/fpcli` — `FP_HOME`
|
|
268
|
+
names the CLI's own directory and is used as-is, so an existing export keeps addressing
|
|
269
|
+
the same place; `FAILPROOFAI_HOME` names the shared home root, so `fpcli/` is appended.
|
|
270
|
+
|
|
271
|
+
The CLI only ever creates. It will bring `~/.failproofai` into existence on a machine
|
|
272
|
+
that has never run the Enforcement CLI, and leaves a populated one exactly as it found
|
|
273
|
+
it — nothing here removes or rewrites a path it does not own. The file is registered in
|
|
274
|
+
that home's layout (`src/hooks/fp-home.ts`) and classified `user-typed`, which is what
|
|
275
|
+
keeps a layout migration from dropping it.
|
|
276
|
+
|
|
277
|
+
The Python SDK writes its spool under `$FAILPROOFAI_HOME/custom-agents/events`,
|
|
278
|
+
otherwise `~/.failproofai/custom-agents/events` — it moved onto the shared umbrella in
|
|
279
|
+
the same release that renamed this CLI. `FAILPROOFAI_HOME` relocates it the same way it
|
|
280
|
+
relocates this CLI's own directory; what no longer works is `AGENTEYE_HOME`, and nothing
|
|
281
|
+
moves the spool *off* the umbrella except `configure(base_dir=...)` in the application.
|
|
282
|
+
`failproofaid` still drains `~/.agenteye/events` as well, for SDKs old enough to write
|
|
283
|
+
there.
|
|
284
|
+
|
|
285
|
+
> **Upgrading from a version that used `~/.fp/cli.json`?** Nothing to do — the old
|
|
286
|
+
> session is adopted on your next command, so you are not signed out. It is copied, not
|
|
287
|
+
> moved, so rolling back to an older `fp` still works; remove `~/.fp/` yourself once you
|
|
288
|
+
> are happy.
|
|
289
|
+
|
|
290
|
+
For a dashboard with a self-signed or internal TLS certificate, add `--insecure` to skip
|
|
291
|
+
certificate verification (saved at login, so you set it once). This disables protection
|
|
292
|
+
against man-in-the-middle attacks — prefer a valid certificate outside internal/testing use.
|
|
293
|
+
|
|
294
|
+
## Telemetry
|
|
295
|
+
|
|
296
|
+
**Telemetry is currently disabled and this build sends nothing.**
|
|
297
|
+
`TELEMETRY_DISABLED` is `True` in `fp_cli/analytics_config.py`: when the analytics
|
|
298
|
+
host is unreachable the send path stalls every command for ~5s — the shutdown flush
|
|
299
|
+
is bounded, but the client build and first connect attempt are not — so it stays off
|
|
300
|
+
until that path is fully non-blocking. Nothing was removed; re-enabling is one
|
|
301
|
+
constant.
|
|
302
|
+
|
|
303
|
+
The rest of this section describes what it collects **if** it is re-enabled, so you
|
|
304
|
+
can review it in advance rather than discover it in a release note:
|
|
305
|
+
|
|
306
|
+
- which command ran (including its subcommand, e.g. `keys create`), success/exit
|
|
307
|
+
status and duration, the **names** of flags used, and a per-action event for
|
|
308
|
+
mutations (e.g. `api_key_created`, `query_run`) carrying only static names/enums
|
|
309
|
+
and coarse counts;
|
|
310
|
+
- **no data, URLs, tokens, emails, ids, SQL, key secrets, or query values are ever
|
|
311
|
+
sent**, and operators are identified only by an opaque id.
|
|
312
|
+
|
|
313
|
+
`FP_ANALYTICS_DISABLED=1` (or the cross-tool `DO_NOT_TRACK=1`) opts out, and keeps
|
|
314
|
+
working as an opt-out if it is ever switched back on. See
|
|
315
|
+
<https://docs.befailproof.ai/reference/cloud-cli> for the full privacy details.
|
|
316
|
+
|
|
317
|
+
## Exit codes
|
|
318
|
+
|
|
319
|
+
| Code | Meaning |
|
|
320
|
+
|---|---|
|
|
321
|
+
| 0 | Success |
|
|
322
|
+
| 1 | Unexpected error (e.g. an unhandled server status) |
|
|
323
|
+
| 2 | Usage error (bad arguments) |
|
|
324
|
+
| 3 | Cannot reach the dashboard |
|
|
325
|
+
| 4 | Not logged in / session expired |
|
|
326
|
+
| 5 | Authenticated but missing permission |
|
|
327
|
+
| 6 | Resource not found |
|
|
328
|
+
|
|
329
|
+
## Tests
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
cd fp-cloud-cli
|
|
333
|
+
uv run --extra dev pytest
|
|
334
|
+
```
|
|
335
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
fp_cli/__init__.py,sha256=K5aYYvcIMBvDvnuEvqP3uY-BOtdY-HGBsh4cQF2T4KY,379
|
|
2
|
+
fp_cli/__main__.py,sha256=Q-bKegPGwhtbYu3-3UamrLIXElIXZLGxti-fbdV9Xm8,73
|
|
3
|
+
fp_cli/_click_compat.py,sha256=LFlRbK7o7i9HtJrY5rDCMynBHqJAfVneBEP_NH-XUOQ,2953
|
|
4
|
+
fp_cli/_context.py,sha256=V6U_xl__ewZpcH0YE_kvGUgdVfmW6pgQelUU3J9ZPAs,14689
|
|
5
|
+
fp_cli/_version.py,sha256=0-8mspQNDoUUPMQOLfx4DJcIypOkJ6bfWALjmuHWmmw,24
|
|
6
|
+
fp_cli/analytics.py,sha256=Bawlh0FcTywsfKtuEGJ8rifxkSZQeFejBtI5OD3pjao,17804
|
|
7
|
+
fp_cli/analytics_config.py,sha256=ZJP5PxM_TLqW9ZYu4zzLN1u0wUUJ6Tb4E6bStubreMU,3399
|
|
8
|
+
fp_cli/analytics_registry.py,sha256=tliwayRO_Ql8V8DsPER6UWufa_mbkIEBKjasGTsY4is,3090
|
|
9
|
+
fp_cli/app.py,sha256=uF6CjycgYOJ0vSELc10DaogvTme41lrJCbLk815_bEE,22843
|
|
10
|
+
fp_cli/auth.py,sha256=Nd4uBZlM0l8hVdKwnjBuBL4Pidr1r_1B_HscBZMkD6A,5182
|
|
11
|
+
fp_cli/client.py,sha256=p-haAv4-m-nmHTSvQ1UPSGE2bQVpjBNsPplgKBYJZ_8,70825
|
|
12
|
+
fp_cli/config.py,sha256=oTABBfpVj0MNmVAdUZ4BQhiFS2uBLtFYIw9SArfa2t4,14263
|
|
13
|
+
fp_cli/dates.py,sha256=YkYrTEPgT1mNCGIDbIyxrjVlhBcm6VlIaFQFPt5o6iw,2667
|
|
14
|
+
fp_cli/enforcement.py,sha256=YKVZ3Mzltbmy6-G95F0lSO9j4yBEl_iVnLTdg41-8Fs,13316
|
|
15
|
+
fp_cli/errors.py,sha256=T_IxXiQ1lwgowS9r5YtvA3aXkViQCb4-GdiyYE2TZ84,3095
|
|
16
|
+
fp_cli/models.py,sha256=nhmPXKwsaMbaRN2hXJKdoeKYTd9TdojoZwSLgsNBKPg,34118
|
|
17
|
+
fp_cli/orgs.py,sha256=cidpIj30pJ_2W-R40dhF9PMvOXjw_a88B6ZqfgwymkI,1013
|
|
18
|
+
fp_cli/output.py,sha256=frQFuJSLP8XbSjD9EtXQDZTpE1-UgpMizNEN8OGcs3E,306311
|
|
19
|
+
fp_cli/permissions.py,sha256=hlbygG7oSdYZNog39DAp7nelGzJw-KmrPs4TdzQZpTE,9186
|
|
20
|
+
fp_cli/policy_check.py,sha256=umuiKA2DYUKpRLHPJlLTbXMio-_peIGmUlix0vBwIT8,12867
|
|
21
|
+
fp_cli/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
+
fp_cli/select.py,sha256=6t5-M0qDX4ZPNvdxHFWz-XZhTFR7WMi3H16_tG-rkiE,13627
|
|
23
|
+
fp_cli/theme.py,sha256=e4-0bWdGkihogwtCKSfCrLVYEAFxrSvBMnN5EzUsAMo,2991
|
|
24
|
+
fp_cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
fp_cli/commands/_write.py,sha256=ZjqvYD8PwQi-y-2TAAgDNTMbKX6SSCAAVs-pyiMWhqU,8646
|
|
26
|
+
fp_cli/commands/agent_cmds.py,sha256=6q1iTH-5EUqixB28hzUjz9WKgwHV4k8jQVk-x3CziKc,18172
|
|
27
|
+
fp_cli/commands/alerts_cmds.py,sha256=a09or9uZzBv9R5LGymbbmL_ESKbds4XXfzsZ-194klE,22329
|
|
28
|
+
fp_cli/commands/audits_cmds.py,sha256=CCPKpZJRdEU60ptCVWRXtLnQc-aNTRJVlvW1lhq1dg4,50818
|
|
29
|
+
fp_cli/commands/auth_cmds.py,sha256=BGTuG5IAGaUzusvr7Gt65vrAm4udLtOCCHF-6GQweU4,24136
|
|
30
|
+
fp_cli/commands/errors_cmds.py,sha256=tJXZDjnc1rIxU4dnhhi7sJY3isDsQM4xGPsn_0K3rA4,9824
|
|
31
|
+
fp_cli/commands/evals_cmds.py,sha256=7ewR-WK8keyOn-20qqhMmgrbgTvOwuRy6wYffIhIB60,7961
|
|
32
|
+
fp_cli/commands/events_cmds.py,sha256=JboNH1Z-qrC_2dstoYrvTmz7f58CIsqweBw0l6465Tg,8912
|
|
33
|
+
fp_cli/commands/fleet_cmds.py,sha256=pNeymPUrQ3txFnr8DP9C43fzh1WIYlwEQVTLg7NYnow,17294
|
|
34
|
+
fp_cli/commands/guardrails_cmds.py,sha256=T9oK5XHAzUN6A_fR_yuXkNrDtI3ISYM97a6XlFCJcl8,6230
|
|
35
|
+
fp_cli/commands/incidents_cmds.py,sha256=t3u0y8FdxwgO-lVme6_U8QFgFSQ_CZPhlDRUI4LbjE0,20646
|
|
36
|
+
fp_cli/commands/keys_cmds.py,sha256=wTgtK65dDEP-OQlD0DDm6iix7s5u6ypu62lpe6xTFHU,20523
|
|
37
|
+
fp_cli/commands/list_cmds.py,sha256=pPAfpt2Ve9rIQKHhCqYGn8cIhlklM7QpIBWiYMB5u4w,3180
|
|
38
|
+
fp_cli/commands/orgs_cmds.py,sha256=U2akliEEENtKzlw8VpRjTfdf-SJ0bazrg47LoTbrTUI,12820
|
|
39
|
+
fp_cli/commands/policies_cmds.py,sha256=rGoWzB-5JTlxj8RHHSLeqt_1Z7lbpTRErAMlUh3ASBU,21843
|
|
40
|
+
fp_cli/commands/queries_cmds.py,sha256=I6lVppBR7uG07iGEvFQ0s9hmnfUp8WjqLjn6iY3zOE4,16780
|
|
41
|
+
fp_cli/commands/sessions_cmds.py,sha256=EavYaZQNqQQ6JotVxtW8v3vWwOqD9OSPW_C0KjRXHH8,8415
|
|
42
|
+
fp_cli/commands/settings_cmds.py,sha256=FJ4CVM6P_4Mv_ItX1EaZ6MfLRDOnleIJyxOH9AH6pBM,6330
|
|
43
|
+
fp_cli/commands/usage_cmds.py,sha256=GRKmgCDh0RyojPzTJiFJxQzL2klXtIcBKeij7Ord6TE,1038
|
|
44
|
+
fp_cli/commands/users_cmds.py,sha256=uTgm86kgv6NeW0s8SCcERs500xSohsVOeoe4dc4nBrU,21533
|
|
45
|
+
fp_cloud_cli-0.0.1b1.dist-info/licenses/LICENSE,sha256=eEodtk_WJRS8eNNQEHZyKvwyNeG87updUCSCEhb0nXk,1988
|
|
46
|
+
fp_cloud_cli-0.0.1b1.dist-info/METADATA,sha256=qHlcdsdgi2oMYtmSmRI4UQ3-WOPwMsYI1xpTby-iU7U,15697
|
|
47
|
+
fp_cloud_cli-0.0.1b1.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
48
|
+
fp_cloud_cli-0.0.1b1.dist-info/entry_points.txt,sha256=cXpCn0Jmx9GU-aD_VEavbsfrqqcgWumoS79IP10ojOE,45
|
|
49
|
+
fp_cloud_cli-0.0.1b1.dist-info/top_level.txt,sha256=DRY54yG1FBghj_JDK1sjGUK8yVKYsU_RjIxfCsu3SSI,7
|
|
50
|
+
fp_cloud_cli-0.0.1b1.dist-info/RECORD,,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 ExosphereHost Inc
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
Commons Clause License Condition v1.0
|
|
24
|
+
|
|
25
|
+
The Software is provided to you by the Licensor under the License, as defined
|
|
26
|
+
below, subject to the following condition.
|
|
27
|
+
|
|
28
|
+
Without limiting other conditions in the License, the grant of rights under
|
|
29
|
+
the License will not include, and the License does not grant to you, the right
|
|
30
|
+
to Sell the Software.
|
|
31
|
+
|
|
32
|
+
For purposes of the foregoing, "Sell" means practicing any or all of the
|
|
33
|
+
rights granted to you under the License to provide to third parties, for a
|
|
34
|
+
fee or other consideration (including without limitation fees for hosting or
|
|
35
|
+
consulting/support services related to the Software), a product or service
|
|
36
|
+
whose value derives, entirely or substantially, from the functionality of the
|
|
37
|
+
Software. Any license notice or attribution required by the License must also
|
|
38
|
+
include this Commons Clause License Condition notice.
|
|
39
|
+
|
|
40
|
+
Software: failproofai
|
|
41
|
+
License: MIT
|
|
42
|
+
Licensor: ExosphereHost Inc
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
fp_cli
|