forgexa-cli 1.23.2__tar.gz → 1.24.2__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 (24) hide show
  1. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/PKG-INFO +27 -4
  2. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/README.md +26 -3
  3. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli/__init__.py +1 -1
  4. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli/daemon.py +710 -72
  5. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli/main.py +838 -22
  6. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli.egg-info/PKG-INFO +27 -4
  7. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli.egg-info/SOURCES.txt +3 -0
  8. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/pyproject.toml +1 -1
  9. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/tests/test_auth_and_runtime_commands.py +531 -10
  10. forgexa_cli-1.24.2/tests/test_expiry_warnings_and_revoke.py +373 -0
  11. forgexa_cli-1.24.2/tests/test_runtime_credentials.py +385 -0
  12. forgexa_cli-1.24.2/tests/test_session_credentials.py +314 -0
  13. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli/_build_config.py +0 -0
  14. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli/autoupgrade.py +0 -0
  15. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli/py.typed +0 -0
  16. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli.egg-info/dependency_links.txt +0 -0
  17. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli.egg-info/entry_points.txt +0 -0
  18. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli.egg-info/requires.txt +0 -0
  19. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/forgexa_cli.egg-info/top_level.txt +0 -0
  20. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/setup.cfg +0 -0
  21. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/tests/test_autoupgrade.py +0 -0
  22. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/tests/test_check_command.py +0 -0
  23. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/tests/test_silent_install.py +0 -0
  24. {forgexa_cli-1.23.2 → forgexa_cli-1.24.2}/tests/test_upgrade_observability.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: forgexa-cli
3
- Version: 1.23.2
3
+ Version: 1.24.2
4
4
  Summary: Forgexa CLI — command-line client and AI agent runtime for the Forgexa platform
5
5
  Author-email: Jason Sun <dev.winds@gmail.com>
6
6
  License-Expression: MIT
@@ -69,7 +69,7 @@ pip install -e .
69
69
  # Configure server (default: http://localhost:8000)
70
70
  export FORGEXA_SERVER_URL=https://your-server.example.com
71
71
 
72
- # Login (saves token to ~/.forgexa/token)
72
+ # Login (saves session to ~/.forgexa/credentials.json)
73
73
  forgexa login
74
74
 
75
75
  # List workspaces
@@ -106,8 +106,11 @@ forgexa board --project <project-id>
106
106
  | `forgexa budget --workspace <id>` | Budget overview |
107
107
  | `forgexa daemon start` | Start local daemon (discover agents, run tasks) |
108
108
  | `forgexa daemon start -d` | Start daemon in background |
109
- | `forgexa daemon status` | Show your daemon statuses |
109
+ | `forgexa daemon status` | Show your daemon statuses (credential type, prefix, expiry) |
110
110
  | `forgexa daemon stop` | Stop local daemon |
111
+ | `forgexa daemon enroll` | Issue a dedicated runtime credential for this machine (recommended for long-running daemons) |
112
+ | `forgexa daemon rotate-token` | Rotate this runtime's credential (old one is revoked immediately) |
113
+ | `forgexa daemon revoke-credential` | Revoke this runtime's credential (keeps your login session) |
111
114
  | `forgexa check` | Verify locally-installed agent CLIs are genuinely usable (runs a real task per agent) |
112
115
  | `forgexa check --quick` | Same, but discovery only — no live task, no API calls |
113
116
  | `forgexa check --agent <name>` | Check a single agent (e.g. `claude`, `codex`, `kimi`) |
@@ -239,6 +242,26 @@ forgexa runtimes list
239
242
  forgexa runtimes list --all
240
243
  ```
241
244
 
245
+ ### Runtime Credentials
246
+
247
+ A freshly logged-in daemon authenticates with your interactive login session. For a
248
+ long-running daemon (e.g. a machine that stays on 24/7), issue it a dedicated,
249
+ revocable credential instead so it never depends on your session expiring:
250
+
251
+ ```bash
252
+ # Issue a runtime credential for this machine (default 90-day expiry, max 365)
253
+ forgexa daemon enroll
254
+
255
+ # Rotate it (the old credential is revoked immediately — no overlap window)
256
+ forgexa daemon rotate-token
257
+
258
+ # Revoke it (keeps your login session; run 'forgexa daemon enroll' again to reissue)
259
+ forgexa daemon revoke-credential
260
+ ```
261
+
262
+ `forgexa daemon status` shows which credential type is active, its prefix, and its
263
+ expiry — the raw credential value is only ever printed once, at enroll/rotate time.
264
+
242
265
  ### Agent Health Check
243
266
 
244
267
  Before starting the daemon (or when tasks keep failing on this machine), verify that every
@@ -294,7 +317,7 @@ The daemon automatically discovers these agents if installed on your system:
294
317
  | Variable | Default | Description |
295
318
  |----------|---------|-------------|
296
319
  | `DAEMON_SERVER_URL` | `http://localhost:8000` | Server to connect to |
297
- | `DAEMON_API_TOKEN` | — | Auth token (auto-read from `~/.forgexa/token`) |
320
+ | `DAEMON_API_TOKEN` | — | Explicit override token (not persisted, never auto-refreshed); omit this to let the daemon use your login session or an enrolled runtime credential |
298
321
  | `DAEMON_MAX_CONCURRENT` | `5` | Max parallel tasks |
299
322
  | `DAEMON_POLL_INTERVAL` | `3` | Poll interval (seconds) |
300
323
 
@@ -37,7 +37,7 @@ pip install -e .
37
37
  # Configure server (default: http://localhost:8000)
38
38
  export FORGEXA_SERVER_URL=https://your-server.example.com
39
39
 
40
- # Login (saves token to ~/.forgexa/token)
40
+ # Login (saves session to ~/.forgexa/credentials.json)
41
41
  forgexa login
42
42
 
43
43
  # List workspaces
@@ -74,8 +74,11 @@ forgexa board --project <project-id>
74
74
  | `forgexa budget --workspace <id>` | Budget overview |
75
75
  | `forgexa daemon start` | Start local daemon (discover agents, run tasks) |
76
76
  | `forgexa daemon start -d` | Start daemon in background |
77
- | `forgexa daemon status` | Show your daemon statuses |
77
+ | `forgexa daemon status` | Show your daemon statuses (credential type, prefix, expiry) |
78
78
  | `forgexa daemon stop` | Stop local daemon |
79
+ | `forgexa daemon enroll` | Issue a dedicated runtime credential for this machine (recommended for long-running daemons) |
80
+ | `forgexa daemon rotate-token` | Rotate this runtime's credential (old one is revoked immediately) |
81
+ | `forgexa daemon revoke-credential` | Revoke this runtime's credential (keeps your login session) |
79
82
  | `forgexa check` | Verify locally-installed agent CLIs are genuinely usable (runs a real task per agent) |
80
83
  | `forgexa check --quick` | Same, but discovery only — no live task, no API calls |
81
84
  | `forgexa check --agent <name>` | Check a single agent (e.g. `claude`, `codex`, `kimi`) |
@@ -207,6 +210,26 @@ forgexa runtimes list
207
210
  forgexa runtimes list --all
208
211
  ```
209
212
 
213
+ ### Runtime Credentials
214
+
215
+ A freshly logged-in daemon authenticates with your interactive login session. For a
216
+ long-running daemon (e.g. a machine that stays on 24/7), issue it a dedicated,
217
+ revocable credential instead so it never depends on your session expiring:
218
+
219
+ ```bash
220
+ # Issue a runtime credential for this machine (default 90-day expiry, max 365)
221
+ forgexa daemon enroll
222
+
223
+ # Rotate it (the old credential is revoked immediately — no overlap window)
224
+ forgexa daemon rotate-token
225
+
226
+ # Revoke it (keeps your login session; run 'forgexa daemon enroll' again to reissue)
227
+ forgexa daemon revoke-credential
228
+ ```
229
+
230
+ `forgexa daemon status` shows which credential type is active, its prefix, and its
231
+ expiry — the raw credential value is only ever printed once, at enroll/rotate time.
232
+
210
233
  ### Agent Health Check
211
234
 
212
235
  Before starting the daemon (or when tasks keep failing on this machine), verify that every
@@ -262,7 +285,7 @@ The daemon automatically discovers these agents if installed on your system:
262
285
  | Variable | Default | Description |
263
286
  |----------|---------|-------------|
264
287
  | `DAEMON_SERVER_URL` | `http://localhost:8000` | Server to connect to |
265
- | `DAEMON_API_TOKEN` | — | Auth token (auto-read from `~/.forgexa/token`) |
288
+ | `DAEMON_API_TOKEN` | — | Explicit override token (not persisted, never auto-refreshed); omit this to let the daemon use your login session or an enrolled runtime credential |
266
289
  | `DAEMON_MAX_CONCURRENT` | `5` | Max parallel tasks |
267
290
  | `DAEMON_POLL_INTERVAL` | `3` | Poll interval (seconds) |
268
291
 
@@ -1,2 +1,2 @@
1
1
  """forgexa-cli — Forgexa command-line client."""
2
- __version__ = "1.23.2"
2
+ __version__ = "1.24.2"