claude-finops 0.11.0 → 0.13.0
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.
- package/README.md +4 -3
- package/finops/api.py +12 -0
- package/package.json +1 -1
- package/web/app.js +357 -167
- package/web/styles.css +127 -8
package/README.md
CHANGED
|
@@ -318,7 +318,7 @@ agents listed under Multi-agent.
|
|
|
318
318
|
server binds to `127.0.0.1` only, but treat the database and any export you
|
|
319
319
|
generate as sensitive.
|
|
320
320
|
|
|
321
|
-
**Hide prompts** in the top bar hides prompt text and session titles as dots,
|
|
321
|
+
**Hide prompts** (the eye icon in the top bar) hides prompt text and session titles as dots,
|
|
322
322
|
for when you share your screen. Session titles fall back to their short id. The
|
|
323
323
|
setting is remembered in that browser. It only changes what the page shows: the
|
|
324
324
|
database and exports still contain the full text.
|
|
@@ -364,7 +364,8 @@ files on Windows.
|
|
|
364
364
|
|
|
365
365
|
## Actions (these change your machine, and only when you click)
|
|
366
366
|
|
|
367
|
-
-
|
|
367
|
+
- **Sync** (top bar, database icon) re-reads `~/.claude` and swaps in fresh data without restarting.
|
|
368
|
+
The circular-arrow **Reload** next to it only redraws the page from the data already loaded.
|
|
368
369
|
- **Free models** adds a launcher such as `claude-qwen` in `~/.local/bin` that runs Claude Code
|
|
369
370
|
on a free model (Ollama locally, or OpenRouter). It lists every step first, and asks before it
|
|
370
371
|
installs Ollama or downloads a model. Your normal `claude` is unchanged. Edit the list in
|
|
@@ -378,7 +379,7 @@ files on Windows.
|
|
|
378
379
|
- **Hand over / split** (Running sessions) writes a brief of the session to
|
|
379
380
|
`~/.claude/finops-handoffs/` and opens fresh session(s) in new terminals, one per sub-task if
|
|
380
381
|
you list them; it can close the old session (resumable).
|
|
381
|
-
-
|
|
382
|
+
- **Recent** (clock icon in the top bar, or press `R`) opens a side panel on any page: running sessions first,
|
|
382
383
|
with Resume, Compact and Stop (Interrupt), then past sessions newest first. Click a session to
|
|
383
384
|
list its prompts, and click a prompt for its full details. Search matches your prompt text.
|
|
384
385
|
It covers all dates but keeps the agent and project filters. Close and Force kill stay on
|
package/finops/api.py
CHANGED
|
@@ -575,6 +575,15 @@ def _notify_update():
|
|
|
575
575
|
notify()
|
|
576
576
|
|
|
577
577
|
|
|
578
|
+
def _open_browser(url):
|
|
579
|
+
# A headless box or SSH session has no browser to open; the printed URL is enough there.
|
|
580
|
+
import webbrowser
|
|
581
|
+
try:
|
|
582
|
+
webbrowser.open(url)
|
|
583
|
+
except Exception:
|
|
584
|
+
pass
|
|
585
|
+
|
|
586
|
+
|
|
578
587
|
def serve(port=8787, db=DB_PATH, background=None):
|
|
579
588
|
global A
|
|
580
589
|
ensure_dirs()
|
|
@@ -602,6 +611,9 @@ def serve(port=8787, db=DB_PATH, background=None):
|
|
|
602
611
|
from .update import disabled
|
|
603
612
|
if not disabled():
|
|
604
613
|
threading.Thread(target=_notify_update, daemon=True).start()
|
|
614
|
+
# The socket is already listening, so the page's first request just waits for
|
|
615
|
+
# serve_forever. Off the main thread: some platforms block while the browser starts.
|
|
616
|
+
threading.Thread(target=_open_browser, args=(f"http://127.0.0.1:{port}",), daemon=True).start()
|
|
605
617
|
with open(PIDFILE, "w") as fh:
|
|
606
618
|
fh.write(str(os.getpid()))
|
|
607
619
|
try:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-finops",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "Local FinOps dashboard for Claude Code: what you used, what it cost, why it cost that much, and what to change. Reads your own transcripts, no API key, no data leaves the machine.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"claude-finops": "bin/claude-finops.js"
|