fere-cli 0.4.0.dev45__tar.gz → 0.4.0.dev49__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 (25) hide show
  1. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/.gitignore +26 -0
  2. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/PKG-INFO +3 -3
  3. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/pyproject.toml +2 -2
  4. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/earn.py +9 -2
  5. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/limit_order.py +5 -1
  6. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/perp.py +25 -6
  7. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/spot_hl.py +17 -4
  8. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/swap.py +5 -2
  9. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/README.md +0 -0
  10. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/install.sh +0 -0
  11. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/__init__.py +0 -0
  12. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/async_util.py +0 -0
  13. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/banner.py +0 -0
  14. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/__init__.py +0 -0
  15. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/auth.py +0 -0
  16. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/chat.py +0 -0
  17. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/hooks.py +0 -0
  18. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/portfolio.py +0 -0
  19. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/commands/utility.py +0 -0
  20. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/config.py +0 -0
  21. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/main.py +0 -0
  22. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/output.py +0 -0
  23. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/src/fere_cli/update.py +0 -0
  24. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/tests/test_install_sh.py +0 -0
  25. {fere_cli-0.4.0.dev45 → fere_cli-0.4.0.dev49}/tests/test_update.py +0 -0
@@ -15,6 +15,14 @@ __pycache__
15
15
  # Bruno gateway collection (GATEWAY_AGENT_ID / GATEWAY_PRIVATE_KEY_B64)
16
16
  bruno_specs/gateway-service/.env
17
17
 
18
+ # Vultr self-hosted provision (API key + SSH ids)
19
+ devops/self-hosted/.env
20
+
21
+ # Box env plaintext (Secret Manager is the remote store). age.key leftover.
22
+ devops/self-hosted/secrets/age.key
23
+ devops/self-hosted/secrets/plaintext/
24
+ devops/self-hosted/inventory/plaintext/
25
+
18
26
  # Gateway k6 load tests (secrets + local output from make setup)
19
27
  devops/loadtests/k6/.env.local
20
28
  devops/loadtests/k6/users.csv
@@ -47,12 +55,25 @@ dev/logs/*
47
55
  # Poetry local venv preference (in-project .venv) — dev-only, per-service
48
56
  **/poetry.toml
49
57
 
58
+ # Ralph Loop plugin runtime state (scratchpad + done flag)
59
+ .cursor/ralph/
60
+
50
61
  # Cursor SEO skill — regenerated report JSON (not source)
51
62
  .cursor/skills/seo-agent/artifacts/
52
63
  .claude/skills/seo-agent/artifacts/
53
64
  .cursor/skills/docker-images-cve-scan/artifacts/
54
65
  docs/plans/artifacts/
55
66
 
67
+ # Impeccable local consent / detector cache (shared hook-off config is committed)
68
+ .impeccable/config.local.json
69
+ .impeccable/*.cache
70
+ .impeccable/cache/
71
+ # Session output: critiques, browser evidence and mock renders. Matches the
72
+ # rule above — shared config is tracked, per-run artifacts are not.
73
+ .impeccable/critique/
74
+ .impeccable/critique-evidence/
75
+ webapp/.impeccable/
76
+
56
77
  # Skills installed locally by the skills package manager (see skills-lock.json)
57
78
  .claude/skills/stripe-best-practices
58
79
  .claude/skills/stripe-projects
@@ -63,6 +84,11 @@ docs/plans/artifacts/
63
84
  .agentmemory/data/
64
85
  .devcontainer/agentmemory-mcp/node_modules/
65
86
 
87
+ # Local GLASS mock / design reference (not in git). Tokens: webapp/DESIGN.md + app/globals.css
88
+ Fere Glass Design System (Space Grotesk).html
89
+ fere-onboarding-zero-states/
90
+ fereonboardingzerostates.zip
91
+
66
92
  # Local GEO upstream reference (optional clone; not part of the product tree)
67
93
  geo-seo/
68
94
 
@@ -1,12 +1,12 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: fere-cli
3
- Version: 0.4.0.dev45
3
+ Version: 0.4.0.dev49
4
4
  Summary: Terminal CLI for FereAI crypto trading and research
5
5
  Author-email: Fere AI <hello@fereai.xyz>
6
6
  License-Expression: MIT
7
7
  Requires-Python: >=3.10
8
8
  Requires-Dist: click>=8.1
9
- Requires-Dist: fere-sdk>=0.4.0.dev45
9
+ Requires-Dist: fere-sdk>=0.4.0.dev49
10
10
  Requires-Dist: httpx>=0.27
11
11
  Requires-Dist: rich>=13.0
12
12
  Provides-Extra: dev
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "fere-cli"
3
- version = "0.4.0.dev45"
3
+ version = "0.4.0.dev49"
4
4
  description = "Terminal CLI for FereAI crypto trading and research"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
7
7
  license = "MIT"
8
8
  authors = [{ name = "Fere AI", email = "hello@fereai.xyz" }]
9
9
  dependencies = [
10
- "fere-sdk>=0.4.0.dev45",
10
+ "fere-sdk>=0.4.0.dev49",
11
11
  "httpx>=0.27",
12
12
  "click>=8.1",
13
13
  "rich>=13.0",
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import click
6
+ from fere_sdk.timeouts import DEFAULT_TIMEOUT
6
7
  from rich.console import Console
7
8
 
8
9
  from ..async_util import async_command, get_client, is_tty
@@ -48,7 +49,10 @@ async def info(ctx):
48
49
  help="Existing position ID to add to.",
49
50
  )
50
51
  @click.option(
51
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
52
+ "--timeout",
53
+ default=DEFAULT_TIMEOUT,
54
+ type=int,
55
+ help="Wait timeout (seconds).",
52
56
  )
53
57
  @click.option("-y", "--yes", is_flag=True, help="Skip confirmation.")
54
58
  @click.pass_context
@@ -92,7 +96,10 @@ async def deposit(ctx, amount, position_id, timeout, yes):
92
96
  help="USDC amount to withdraw.",
93
97
  )
94
98
  @click.option(
95
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
99
+ "--timeout",
100
+ default=DEFAULT_TIMEOUT,
101
+ type=int,
102
+ help="Wait timeout (seconds).",
96
103
  )
97
104
  @click.option("-y", "--yes", is_flag=True, help="Skip confirmation.")
98
105
  @click.pass_context
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import click
6
+ from fere_sdk.timeouts import DEFAULT_TIMEOUT
6
7
  from rich.console import Console
7
8
 
8
9
  from ..async_util import async_command, get_client, is_tty
@@ -57,7 +58,10 @@ def limit_order():
57
58
  )
58
59
  @click.option("--slippage-bps", default=50, type=int, help="Slippage (bps).")
59
60
  @click.option(
60
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
61
+ "--timeout",
62
+ default=DEFAULT_TIMEOUT,
63
+ type=int,
64
+ help="Wait timeout (seconds).",
61
65
  )
62
66
  @click.option("-y", "--yes", is_flag=True, help="Skip confirmation.")
63
67
  @click.pass_context
@@ -7,6 +7,7 @@ Venue-neutral perpetual futures. ``size`` is in contracts.
7
7
  from __future__ import annotations
8
8
 
9
9
  import click
10
+ from fere_sdk.timeouts import DEFAULT_TIMEOUT
10
11
  from rich.console import Console
11
12
 
12
13
  from ..async_util import async_command, get_client, is_tty
@@ -59,7 +60,10 @@ async def status(ctx):
59
60
  @perp.command()
60
61
  @click.option("--force", is_flag=True, help="Re-run setup even if complete.")
61
62
  @click.option(
62
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
63
+ "--timeout",
64
+ default=DEFAULT_TIMEOUT,
65
+ type=int,
66
+ help="Wait timeout (seconds).",
63
67
  )
64
68
  @click.pass_context
65
69
  @async_command
@@ -115,7 +119,10 @@ async def orders(ctx):
115
119
  @click.option("--tp-price", default=None, type=float, help="Take-profit.")
116
120
  @click.option("--sl-price", default=None, type=float, help="Stop-loss.")
117
121
  @click.option(
118
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
122
+ "--timeout",
123
+ default=DEFAULT_TIMEOUT,
124
+ type=int,
125
+ help="Wait timeout (seconds).",
119
126
  )
120
127
  @click.option("-y", "--yes", is_flag=True, help="Skip confirmation.")
121
128
  @click.pass_context
@@ -173,7 +180,10 @@ async def open(
173
180
  )
174
181
  @click.option("--slippage-pct", default=0.5, type=float)
175
182
  @click.option(
176
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
183
+ "--timeout",
184
+ default=DEFAULT_TIMEOUT,
185
+ type=int,
186
+ help="Wait timeout (seconds).",
177
187
  )
178
188
  @click.option("-y", "--yes", is_flag=True, help="Skip confirmation.")
179
189
  @click.pass_context
@@ -209,7 +219,10 @@ async def close(ctx, asset, size, slippage_pct, timeout, yes):
209
219
  "--order-id", required=True, type=int, help="Venue order id (oid)."
210
220
  )
211
221
  @click.option(
212
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
222
+ "--timeout",
223
+ default=DEFAULT_TIMEOUT,
224
+ type=int,
225
+ help="Wait timeout (seconds).",
213
226
  )
214
227
  @click.pass_context
215
228
  @async_command
@@ -252,7 +265,10 @@ async def cancel(ctx, asset, order_id, timeout):
252
265
  help="USD amount the user entered.",
253
266
  )
254
267
  @click.option(
255
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
268
+ "--timeout",
269
+ default=DEFAULT_TIMEOUT,
270
+ type=int,
271
+ help="Wait timeout (seconds).",
256
272
  )
257
273
  @click.option("-y", "--yes", is_flag=True, help="Skip confirmation.")
258
274
  @click.pass_context
@@ -306,7 +322,10 @@ async def fund(
306
322
  help="ERC-20/mint; omit for native token.",
307
323
  )
308
324
  @click.option(
309
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
325
+ "--timeout",
326
+ default=DEFAULT_TIMEOUT,
327
+ type=int,
328
+ help="Wait timeout (seconds).",
310
329
  )
311
330
  @click.option("-y", "--yes", is_flag=True, help="Skip confirmation.")
312
331
  @click.pass_context
@@ -7,6 +7,7 @@ USDC-quoted); ``size`` is the base-token amount.
7
7
  from __future__ import annotations
8
8
 
9
9
  import click
10
+ from fere_sdk.timeouts import DEFAULT_TIMEOUT
10
11
  from rich.console import Console
11
12
 
12
13
  from ..async_util import async_command, get_client, is_tty
@@ -69,7 +70,10 @@ async def orders(ctx):
69
70
  @click.option("--tp-price", default=None, type=float, help="Take-profit.")
70
71
  @click.option("--sl-price", default=None, type=float, help="Stop-loss.")
71
72
  @click.option(
72
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
73
+ "--timeout",
74
+ default=DEFAULT_TIMEOUT,
75
+ type=int,
76
+ help="Wait timeout (seconds).",
73
77
  )
74
78
  @click.option("-y", "--yes", is_flag=True, help="Skip confirmation.")
75
79
  @click.pass_context
@@ -129,7 +133,10 @@ async def buy(
129
133
  @click.option("--limit-price", default=None, type=float)
130
134
  @click.option("--slippage-pct", default=0.5, type=float)
131
135
  @click.option(
132
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
136
+ "--timeout",
137
+ default=DEFAULT_TIMEOUT,
138
+ type=int,
139
+ help="Wait timeout (seconds).",
133
140
  )
134
141
  @click.option("-y", "--yes", is_flag=True, help="Skip confirmation.")
135
142
  @click.pass_context
@@ -174,7 +181,10 @@ async def sell(
174
181
  help="Base amount; omit for the full held balance.",
175
182
  )
176
183
  @click.option(
177
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
184
+ "--timeout",
185
+ default=DEFAULT_TIMEOUT,
186
+ type=int,
187
+ help="Wait timeout (seconds).",
178
188
  )
179
189
  @click.pass_context
180
190
  @async_command
@@ -208,7 +218,10 @@ async def tp_sl(ctx, asset, tp_price, sl_price, size, timeout):
208
218
  "--order-id", required=True, type=int, help="Venue order id (oid)."
209
219
  )
210
220
  @click.option(
211
- "--timeout", default=100, type=int, help="Wait timeout (seconds)."
221
+ "--timeout",
222
+ default=DEFAULT_TIMEOUT,
223
+ type=int,
224
+ help="Wait timeout (seconds).",
212
225
  )
213
226
  @click.pass_context
214
227
  @async_command
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import click
6
+ from fere_sdk.timeouts import DEFAULT_TIMEOUT
6
7
  from rich.console import Console
7
8
 
8
9
  from ..async_util import async_command, get_client, is_tty
@@ -53,9 +54,11 @@ console = Console()
53
54
  )
54
55
  @click.option(
55
56
  "--timeout",
56
- default=120,
57
+ default=DEFAULT_TIMEOUT,
57
58
  type=int,
58
- help="Max seconds to wait for completion (default: 120).",
59
+ help=(
60
+ f"Max seconds to wait for completion (default: {DEFAULT_TIMEOUT})."
61
+ ),
59
62
  )
60
63
  @click.option(
61
64
  "-y",
File without changes