sibyl-memory-cli 0.3.3__tar.gz → 0.3.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.
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/PKG-INFO +16 -12
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/README.md +15 -11
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/pyproject.toml +1 -1
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli/cli.py +32 -5
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/PKG-INFO +16 -12
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/setup.cfg +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli/__init__.py +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli/_aesthetic.py +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli/_banner.py +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli/setup.py +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/SOURCES.txt +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/dependency_links.txt +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/entry_points.txt +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/requires.txt +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/top_level.txt +0 -0
- {sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/tests/test_setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sibyl-memory-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.5
|
|
4
4
|
Summary: Command-line interface for the Sibyl Memory Plugin. `sibyl init` activates, `sibyl upgrade` runs the staker / subscription flow, `sibyl status` shows current tier and DB stats, `sibyl whoami` gives a one-line account summary, `sibyl devices` lists active devices and supports per-device revoke.
|
|
5
5
|
Author-email: "SIBYL, Sibyl Labs LLC" <sibyl@sibyllabs.org>
|
|
6
6
|
License: MIT
|
|
@@ -48,32 +48,34 @@ sibyl health Run the SibylMemoryProvider self-check (schema versi
|
|
|
48
48
|
```bash
|
|
49
49
|
$ sibyl init
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
activation · three paths · pick whichever fits your device
|
|
52
52
|
|
|
53
|
-
Session
|
|
54
|
-
|
|
53
|
+
Session a1b2c3d4…e5f6
|
|
54
|
+
Code 1 2 3 4 5 6 (use this in the email panel)
|
|
55
|
+
Opening https://auth.sibyllabs.org/a1b2c3d4-…
|
|
55
56
|
|
|
56
|
-
|
|
57
|
+
desktop wallet · email + code · or send USDC from any mobile wallet
|
|
58
|
+
this terminal will pick up automatically when you bind.
|
|
57
59
|
|
|
58
|
-
⠹
|
|
60
|
+
⠹ watching the network for your bind … 9:42 left
|
|
59
61
|
```
|
|
60
62
|
|
|
61
|
-
The browser opens.
|
|
63
|
+
The browser opens to a dedicated short-URL auth subdomain (`auth.sibyllabs.org/<session-uuid>`). Pick a wallet from the EIP-6963 picker (Rabby / MetaMask / Coinbase Wallet / Frame / Brave / Rainbow), enter email + 6-digit code, or send a unique sub-cent USDC amount from any mobile wallet on Base. The terminal picks up the moment any of the three paths binds. Credentials are written to `~/.sibyl-memory/credentials.json` at mode 0600.
|
|
62
64
|
|
|
63
65
|
## Upgrade
|
|
64
66
|
|
|
65
67
|
```bash
|
|
66
68
|
$ sibyl upgrade
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
upgrade · lift the 2 MB free-tier cap
|
|
69
71
|
|
|
70
72
|
Account a1b2c3d4…e5f6
|
|
71
73
|
Current tier FREE
|
|
72
74
|
Opening https://sibyllabs.org/plugin/upgrade?session=…
|
|
73
75
|
|
|
74
|
-
|
|
75
|
-
1.
|
|
76
|
-
2.
|
|
76
|
+
two paths in the browser:
|
|
77
|
+
1. stake $SIBYL on Base (free unlimited if you qualify)
|
|
78
|
+
2. subscribe in USDC (monthly / quarterly / annual)
|
|
77
79
|
```
|
|
78
80
|
|
|
79
81
|
In the browser:
|
|
@@ -113,10 +115,12 @@ For internal testing only:
|
|
|
113
115
|
|
|
114
116
|
```bash
|
|
115
117
|
SIBYL_API_BASE=https://staging.api.sibyllabs.org sibyl init
|
|
116
|
-
SIBYL_ACTIVATE_BASE=https://staging.sibyllabs.org
|
|
118
|
+
SIBYL_ACTIVATE_BASE=https://staging.auth.sibyllabs.org sibyl init
|
|
117
119
|
SIBYL_UPGRADE_BASE=https://staging.sibyllabs.org/plugin/upgrade sibyl upgrade
|
|
118
120
|
```
|
|
119
121
|
|
|
122
|
+
`SIBYL_ACTIVATE_BASE` accepts both subdomain form (`https://auth.example.org` → path-based session URL: `https://auth.example.org/<uuid>`) and legacy path form (`https://example.org/plugin/activate` → query-based: `?session=<uuid>`). The CLI auto-detects from the hostname.
|
|
123
|
+
|
|
120
124
|
## Security
|
|
121
125
|
|
|
122
126
|
- `credentials.json` is written atomically at mode 0600.
|
|
@@ -22,32 +22,34 @@ sibyl health Run the SibylMemoryProvider self-check (schema versi
|
|
|
22
22
|
```bash
|
|
23
23
|
$ sibyl init
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
activation · three paths · pick whichever fits your device
|
|
26
26
|
|
|
27
|
-
Session
|
|
28
|
-
|
|
27
|
+
Session a1b2c3d4…e5f6
|
|
28
|
+
Code 1 2 3 4 5 6 (use this in the email panel)
|
|
29
|
+
Opening https://auth.sibyllabs.org/a1b2c3d4-…
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
desktop wallet · email + code · or send USDC from any mobile wallet
|
|
32
|
+
this terminal will pick up automatically when you bind.
|
|
31
33
|
|
|
32
|
-
⠹
|
|
34
|
+
⠹ watching the network for your bind … 9:42 left
|
|
33
35
|
```
|
|
34
36
|
|
|
35
|
-
The browser opens.
|
|
37
|
+
The browser opens to a dedicated short-URL auth subdomain (`auth.sibyllabs.org/<session-uuid>`). Pick a wallet from the EIP-6963 picker (Rabby / MetaMask / Coinbase Wallet / Frame / Brave / Rainbow), enter email + 6-digit code, or send a unique sub-cent USDC amount from any mobile wallet on Base. The terminal picks up the moment any of the three paths binds. Credentials are written to `~/.sibyl-memory/credentials.json` at mode 0600.
|
|
36
38
|
|
|
37
39
|
## Upgrade
|
|
38
40
|
|
|
39
41
|
```bash
|
|
40
42
|
$ sibyl upgrade
|
|
41
43
|
|
|
42
|
-
|
|
44
|
+
upgrade · lift the 2 MB free-tier cap
|
|
43
45
|
|
|
44
46
|
Account a1b2c3d4…e5f6
|
|
45
47
|
Current tier FREE
|
|
46
48
|
Opening https://sibyllabs.org/plugin/upgrade?session=…
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
1.
|
|
50
|
-
2.
|
|
50
|
+
two paths in the browser:
|
|
51
|
+
1. stake $SIBYL on Base (free unlimited if you qualify)
|
|
52
|
+
2. subscribe in USDC (monthly / quarterly / annual)
|
|
51
53
|
```
|
|
52
54
|
|
|
53
55
|
In the browser:
|
|
@@ -87,10 +89,12 @@ For internal testing only:
|
|
|
87
89
|
|
|
88
90
|
```bash
|
|
89
91
|
SIBYL_API_BASE=https://staging.api.sibyllabs.org sibyl init
|
|
90
|
-
SIBYL_ACTIVATE_BASE=https://staging.sibyllabs.org
|
|
92
|
+
SIBYL_ACTIVATE_BASE=https://staging.auth.sibyllabs.org sibyl init
|
|
91
93
|
SIBYL_UPGRADE_BASE=https://staging.sibyllabs.org/plugin/upgrade sibyl upgrade
|
|
92
94
|
```
|
|
93
95
|
|
|
96
|
+
`SIBYL_ACTIVATE_BASE` accepts both subdomain form (`https://auth.example.org` → path-based session URL: `https://auth.example.org/<uuid>`) and legacy path form (`https://example.org/plugin/activate` → query-based: `?session=<uuid>`). The CLI auto-detects from the hostname.
|
|
97
|
+
|
|
94
98
|
## Security
|
|
95
99
|
|
|
96
100
|
- `credentials.json` is written atomically at mode 0600.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sibyl-memory-cli"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.5"
|
|
8
8
|
description = "Command-line interface for the Sibyl Memory Plugin. `sibyl init` activates, `sibyl upgrade` runs the staker / subscription flow, `sibyl status` shows current tier and DB stats, `sibyl whoami` gives a one-line account summary, `sibyl devices` lists active devices and supports per-device revoke."
|
|
9
9
|
authors = [{ name = "SIBYL, Sibyl Labs LLC", email = "sibyl@sibyllabs.org" }]
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -58,8 +58,16 @@ DEFAULT_DB_PATH = Path("~/.sibyl-memory/memory.db").expanduser()
|
|
|
58
58
|
DEFAULT_TIER_CACHE_PATH = Path("~/.sibyl-memory/tier_cache.json").expanduser()
|
|
59
59
|
|
|
60
60
|
POLL_INTERVAL_SEC = 3
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
# v0.3.5 fix: the CLI no longer carries its own activation deadline. The
|
|
62
|
+
# server's /session-init response includes pairing_ttl_seconds — the CLI
|
|
63
|
+
# polls until that timestamp, deferring to the server as the single source
|
|
64
|
+
# of truth. The constants below are fallbacks only, used when session-init
|
|
65
|
+
# fails to return a value (network error, schema drift). Drift between CLI
|
|
66
|
+
# and server is now impossible by construction; the prior 10min/15min
|
|
67
|
+
# silent-success gap can't recur because there is no CLI-side number to
|
|
68
|
+
# diverge from the server's.
|
|
69
|
+
INIT_TIMEOUT_FALLBACK_SEC = 30 * 60 # used only if session-init returns no TTL
|
|
70
|
+
UPGRADE_TIMEOUT_SEC = 30 * 60 # upgrade flow uses local constant — no server handshake to defer to
|
|
63
71
|
|
|
64
72
|
# ---- Color / output ----------------------------------------------------
|
|
65
73
|
|
|
@@ -254,8 +262,16 @@ def cmd_init(args: argparse.Namespace) -> int:
|
|
|
254
262
|
# Pre-register the session + pairing code hash with the server.
|
|
255
263
|
# The code itself never leaves the user's machine until they type it
|
|
256
264
|
# into the browser.
|
|
265
|
+
#
|
|
266
|
+
# v0.3.5: capture pairing_ttl_seconds from the response and use it as
|
|
267
|
+
# the activation deadline. Server is the single source of truth — if
|
|
268
|
+
# the server-side TTL ever changes, the CLI adopts the new value
|
|
269
|
+
# automatically without a re-publish. INIT_TIMEOUT_FALLBACK_SEC only
|
|
270
|
+
# applies when the call fails entirely (network error) or the response
|
|
271
|
+
# is missing the field (schema drift).
|
|
272
|
+
pairing_ttl_seconds = None
|
|
257
273
|
try:
|
|
258
|
-
http_request(
|
|
274
|
+
init_resp = http_request(
|
|
259
275
|
"POST",
|
|
260
276
|
"/api/plugin/session-init",
|
|
261
277
|
body={
|
|
@@ -269,11 +285,17 @@ def cmd_init(args: argparse.Namespace) -> int:
|
|
|
269
285
|
},
|
|
270
286
|
timeout=10.0,
|
|
271
287
|
)
|
|
288
|
+
if isinstance(init_resp, dict):
|
|
289
|
+
v = init_resp.get("pairing_ttl_seconds")
|
|
290
|
+
if isinstance(v, (int, float)) and v > 0:
|
|
291
|
+
pairing_ttl_seconds = int(v)
|
|
272
292
|
except HttpError as e:
|
|
273
293
|
# Non-fatal: SIWE path doesn't need the pairing code. If session-init
|
|
274
294
|
# fails the user can still complete SIWE. Surface the warning.
|
|
275
295
|
print(yellow(f"Warning: session-init failed ({e.status}). Wallet path still works; email path may not."))
|
|
276
296
|
|
|
297
|
+
activation_window_sec = pairing_ttl_seconds if pairing_ttl_seconds else INIT_TIMEOUT_FALLBACK_SEC
|
|
298
|
+
|
|
277
299
|
print()
|
|
278
300
|
print(a.section_header("activation", subtitle="three paths · pick whichever fits your device"))
|
|
279
301
|
print()
|
|
@@ -293,7 +315,7 @@ def cmd_init(args: argparse.Namespace) -> int:
|
|
|
293
315
|
pass
|
|
294
316
|
|
|
295
317
|
# Poll /api/plugin/check
|
|
296
|
-
deadline = time.time() +
|
|
318
|
+
deadline = time.time() + activation_window_sec
|
|
297
319
|
last_status = ""
|
|
298
320
|
spinner = "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏"
|
|
299
321
|
spin_i = 0
|
|
@@ -370,7 +392,12 @@ def cmd_init(args: argparse.Namespace) -> int:
|
|
|
370
392
|
|
|
371
393
|
print()
|
|
372
394
|
print(a.err_line("Activation timed out."))
|
|
373
|
-
print(a.dim(" Re-run `sibyl init` to try again."))
|
|
395
|
+
print(a.dim(" Re-run `sibyl init --force` to try again."))
|
|
396
|
+
print()
|
|
397
|
+
print(a.dim(" If your browser already showed 'Activation successful',"))
|
|
398
|
+
print(a.dim(" your bind landed server-side but didn't reach this terminal."))
|
|
399
|
+
print(a.dim(" Running `sibyl init --force` again will start a fresh handshake;"))
|
|
400
|
+
print(a.dim(" bind through the same browser to write credentials locally."))
|
|
374
401
|
return 1
|
|
375
402
|
|
|
376
403
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sibyl-memory-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.5
|
|
4
4
|
Summary: Command-line interface for the Sibyl Memory Plugin. `sibyl init` activates, `sibyl upgrade` runs the staker / subscription flow, `sibyl status` shows current tier and DB stats, `sibyl whoami` gives a one-line account summary, `sibyl devices` lists active devices and supports per-device revoke.
|
|
5
5
|
Author-email: "SIBYL, Sibyl Labs LLC" <sibyl@sibyllabs.org>
|
|
6
6
|
License: MIT
|
|
@@ -48,32 +48,34 @@ sibyl health Run the SibylMemoryProvider self-check (schema versi
|
|
|
48
48
|
```bash
|
|
49
49
|
$ sibyl init
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
activation · three paths · pick whichever fits your device
|
|
52
52
|
|
|
53
|
-
Session
|
|
54
|
-
|
|
53
|
+
Session a1b2c3d4…e5f6
|
|
54
|
+
Code 1 2 3 4 5 6 (use this in the email panel)
|
|
55
|
+
Opening https://auth.sibyllabs.org/a1b2c3d4-…
|
|
55
56
|
|
|
56
|
-
|
|
57
|
+
desktop wallet · email + code · or send USDC from any mobile wallet
|
|
58
|
+
this terminal will pick up automatically when you bind.
|
|
57
59
|
|
|
58
|
-
⠹
|
|
60
|
+
⠹ watching the network for your bind … 9:42 left
|
|
59
61
|
```
|
|
60
62
|
|
|
61
|
-
The browser opens.
|
|
63
|
+
The browser opens to a dedicated short-URL auth subdomain (`auth.sibyllabs.org/<session-uuid>`). Pick a wallet from the EIP-6963 picker (Rabby / MetaMask / Coinbase Wallet / Frame / Brave / Rainbow), enter email + 6-digit code, or send a unique sub-cent USDC amount from any mobile wallet on Base. The terminal picks up the moment any of the three paths binds. Credentials are written to `~/.sibyl-memory/credentials.json` at mode 0600.
|
|
62
64
|
|
|
63
65
|
## Upgrade
|
|
64
66
|
|
|
65
67
|
```bash
|
|
66
68
|
$ sibyl upgrade
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
upgrade · lift the 2 MB free-tier cap
|
|
69
71
|
|
|
70
72
|
Account a1b2c3d4…e5f6
|
|
71
73
|
Current tier FREE
|
|
72
74
|
Opening https://sibyllabs.org/plugin/upgrade?session=…
|
|
73
75
|
|
|
74
|
-
|
|
75
|
-
1.
|
|
76
|
-
2.
|
|
76
|
+
two paths in the browser:
|
|
77
|
+
1. stake $SIBYL on Base (free unlimited if you qualify)
|
|
78
|
+
2. subscribe in USDC (monthly / quarterly / annual)
|
|
77
79
|
```
|
|
78
80
|
|
|
79
81
|
In the browser:
|
|
@@ -113,10 +115,12 @@ For internal testing only:
|
|
|
113
115
|
|
|
114
116
|
```bash
|
|
115
117
|
SIBYL_API_BASE=https://staging.api.sibyllabs.org sibyl init
|
|
116
|
-
SIBYL_ACTIVATE_BASE=https://staging.sibyllabs.org
|
|
118
|
+
SIBYL_ACTIVATE_BASE=https://staging.auth.sibyllabs.org sibyl init
|
|
117
119
|
SIBYL_UPGRADE_BASE=https://staging.sibyllabs.org/plugin/upgrade sibyl upgrade
|
|
118
120
|
```
|
|
119
121
|
|
|
122
|
+
`SIBYL_ACTIVATE_BASE` accepts both subdomain form (`https://auth.example.org` → path-based session URL: `https://auth.example.org/<uuid>`) and legacy path form (`https://example.org/plugin/activate` → query-based: `?session=<uuid>`). The CLI auto-detects from the hostname.
|
|
123
|
+
|
|
120
124
|
## Security
|
|
121
125
|
|
|
122
126
|
- `credentials.json` is written atomically at mode 0600.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/requires.txt
RENAMED
|
File without changes
|
{sibyl_memory_cli-0.3.3 → sibyl_memory_cli-0.3.5}/src/sibyl_memory_cli.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|