@hasna/economy 0.3.7 → 0.3.9
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/CHANGELOG.md +33 -4
- package/README.md +28 -61
- package/dashboard/README.md +17 -64
- package/docs/README.md +12 -0
- package/docs/cli.md +88 -0
- package/docs/configuration.md +88 -0
- package/docs/ingestion.md +47 -0
- package/docs/mcp.md +65 -0
- package/docs/otel.md +53 -0
- package/docs/rest-api.md +89 -0
- package/package.json +6 -7
- package/dist/cli/brains.d.ts +0 -3
- package/dist/cli/brains.d.ts.map +0 -1
- package/dist/cli/commands/brief.d.ts +0 -11
- package/dist/cli/commands/brief.d.ts.map +0 -1
- package/dist/cli/commands/completion.d.ts +0 -2
- package/dist/cli/commands/completion.d.ts.map +0 -1
- package/dist/cli/commands/extras.d.ts +0 -4
- package/dist/cli/commands/extras.d.ts.map +0 -1
- package/dist/cli/commands/menubar.d.ts +0 -7
- package/dist/cli/commands/menubar.d.ts.map +0 -1
- package/dist/cli/commands/notification.d.ts +0 -8
- package/dist/cli/commands/notification.d.ts.map +0 -1
- package/dist/cli/commands/todos.d.ts +0 -29
- package/dist/cli/commands/todos.d.ts.map +0 -1
- package/dist/cli/commands/tui.d.ts +0 -26
- package/dist/cli/commands/tui.d.ts.map +0 -1
- package/dist/cli/commands/watch.d.ts +0 -10
- package/dist/cli/commands/watch.d.ts.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -12304
- package/dist/db/cloud.d.ts +0 -28
- package/dist/db/cloud.d.ts.map +0 -1
- package/dist/db/database.d.ts +0 -150
- package/dist/db/database.d.ts.map +0 -1
- package/dist/db/pg-migrations.d.ts +0 -7
- package/dist/db/pg-migrations.d.ts.map +0 -1
- package/dist/db/pg-sync-worker.d.ts +0 -2
- package/dist/db/pg-sync-worker.d.ts.map +0 -1
- package/dist/db/sync-pg.d.ts +0 -43
- package/dist/db/sync-pg.d.ts.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3729
- package/dist/ingest/billing.d.ts +0 -27
- package/dist/ingest/billing.d.ts.map +0 -1
- package/dist/ingest/claude-quota.d.ts +0 -5
- package/dist/ingest/claude-quota.d.ts.map +0 -1
- package/dist/ingest/claude.d.ts +0 -18
- package/dist/ingest/claude.d.ts.map +0 -1
- package/dist/ingest/codex-quota.d.ts +0 -5
- package/dist/ingest/codex-quota.d.ts.map +0 -1
- package/dist/ingest/codex.d.ts +0 -8
- package/dist/ingest/codex.d.ts.map +0 -1
- package/dist/ingest/cursor.d.ts +0 -6
- package/dist/ingest/cursor.d.ts.map +0 -1
- package/dist/ingest/gemini.d.ts +0 -6
- package/dist/ingest/gemini.d.ts.map +0 -1
- package/dist/ingest/hermes.d.ts +0 -6
- package/dist/ingest/hermes.d.ts.map +0 -1
- package/dist/ingest/loops.d.ts +0 -6
- package/dist/ingest/loops.d.ts.map +0 -1
- package/dist/ingest/opencode.d.ts +0 -7
- package/dist/ingest/opencode.d.ts.map +0 -1
- package/dist/ingest/otel.d.ts +0 -33
- package/dist/ingest/otel.d.ts.map +0 -1
- package/dist/ingest/pi.d.ts +0 -7
- package/dist/ingest/pi.d.ts.map +0 -1
- package/dist/ingest/plugin.d.ts +0 -17
- package/dist/ingest/plugin.d.ts.map +0 -1
- package/dist/lib/accounts.d.ts +0 -11
- package/dist/lib/accounts.d.ts.map +0 -1
- package/dist/lib/agents.d.ts +0 -11
- package/dist/lib/agents.d.ts.map +0 -1
- package/dist/lib/analytics.d.ts +0 -68
- package/dist/lib/analytics.d.ts.map +0 -1
- package/dist/lib/billing-diff.d.ts +0 -22
- package/dist/lib/billing-diff.d.ts.map +0 -1
- package/dist/lib/brief.d.ts +0 -72
- package/dist/lib/brief.d.ts.map +0 -1
- package/dist/lib/cloud-storage.d.ts +0 -48
- package/dist/lib/cloud-storage.d.ts.map +0 -1
- package/dist/lib/config.d.ts +0 -13
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/contracts-client/index.d.ts +0 -3
- package/dist/lib/contracts-client/index.d.ts.map +0 -1
- package/dist/lib/contracts-client/mode.d.ts +0 -20
- package/dist/lib/contracts-client/mode.d.ts.map +0 -1
- package/dist/lib/contracts-client/storage.d.ts +0 -83
- package/dist/lib/contracts-client/storage.d.ts.map +0 -1
- package/dist/lib/contracts-client/transport.d.ts +0 -148
- package/dist/lib/contracts-client/transport.d.ts.map +0 -1
- package/dist/lib/gatherer.d.ts +0 -21
- package/dist/lib/gatherer.d.ts.map +0 -1
- package/dist/lib/model-config.d.ts +0 -8
- package/dist/lib/model-config.d.ts.map +0 -1
- package/dist/lib/open-projects.d.ts +0 -19
- package/dist/lib/open-projects.d.ts.map +0 -1
- package/dist/lib/package-metadata.d.ts +0 -8
- package/dist/lib/package-metadata.d.ts.map +0 -1
- package/dist/lib/paths.d.ts +0 -20
- package/dist/lib/paths.d.ts.map +0 -1
- package/dist/lib/periods.d.ts +0 -6
- package/dist/lib/periods.d.ts.map +0 -1
- package/dist/lib/pricing.d.ts +0 -13
- package/dist/lib/pricing.d.ts.map +0 -1
- package/dist/lib/savings.d.ts +0 -17
- package/dist/lib/savings.d.ts.map +0 -1
- package/dist/lib/serve-auth.d.ts +0 -4
- package/dist/lib/serve-auth.d.ts.map +0 -1
- package/dist/lib/spikes.d.ts +0 -18
- package/dist/lib/spikes.d.ts.map +0 -1
- package/dist/lib/store/index.d.ts +0 -303
- package/dist/lib/store/index.d.ts.map +0 -1
- package/dist/lib/sync-all.d.ts +0 -28
- package/dist/lib/sync-all.d.ts.map +0 -1
- package/dist/lib/watch-paths.d.ts +0 -3
- package/dist/lib/watch-paths.d.ts.map +0 -1
- package/dist/lib/webhooks.d.ts +0 -3
- package/dist/lib/webhooks.d.ts.map +0 -1
- package/dist/mcp/http.d.ts +0 -14
- package/dist/mcp/http.d.ts.map +0 -1
- package/dist/mcp/index.d.ts +0 -3
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js +0 -6193
- package/dist/mcp/server.d.ts +0 -4
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/openapi.d.ts +0 -3
- package/dist/openapi.d.ts.map +0 -1
- package/dist/otel/index.d.ts +0 -3
- package/dist/otel/index.d.ts.map +0 -1
- package/dist/otel/index.js +0 -1399
- package/dist/server/index.d.ts +0 -3
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -7977
- package/dist/server/pg-sync-worker.js +0 -31
- package/dist/server/serve.d.ts +0 -42
- package/dist/server/serve.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -238
- package/dist/types/index.d.ts.map +0 -1
package/docs/otel.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# OTLP/HTTP sidecar
|
|
2
|
+
|
|
3
|
+
`economy-otel` writes application/service metrics into the local Economy SQLite database:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
economy-otel --port 4318
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
It binds to `127.0.0.1` by default. Override the bind with `ECONOMY_OTEL_BIND` and the port with `ECONOMY_OTEL_PORT` or `--port`.
|
|
10
|
+
|
|
11
|
+
| Method | Path | Behavior |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| `GET` | `/health` | `{ status, service, version }`. |
|
|
14
|
+
| `POST` | `/v1/metrics` | Parse an OTLP JSON `resourceMetrics` payload. |
|
|
15
|
+
| `POST` | `/ingest` | Parse one simplified JSON cost/token event. |
|
|
16
|
+
|
|
17
|
+
Other methods return 405. Invalid JSON returns 400. A valid payload with no recognized positive cost/token metrics returns `{ "ingested": 0, "message": "no matching metrics" }`.
|
|
18
|
+
|
|
19
|
+
## Simplified event
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
curl -X POST http://127.0.0.1:4318/ingest \
|
|
23
|
+
-H 'content-type: application/json' \
|
|
24
|
+
-d '{
|
|
25
|
+
"source": "app",
|
|
26
|
+
"cost_center": "alumia",
|
|
27
|
+
"cost_center_kind": "app",
|
|
28
|
+
"project_path": "/workspace/alumia",
|
|
29
|
+
"model": "gpt-5-mini",
|
|
30
|
+
"cost_usd": 0.12,
|
|
31
|
+
"input_tokens": 1200,
|
|
32
|
+
"output_tokens": 300
|
|
33
|
+
}'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Core fields are `agent`/`source`, `session_id`, `request_id` or `source_request_id`, `model`, `timestamp`, `cost_usd`, `input_tokens`, and `output_tokens`. An event must have positive cost or tokens.
|
|
37
|
+
|
|
38
|
+
Attribution fields include:
|
|
39
|
+
|
|
40
|
+
- `cost_center`, `cost_center_kind`, `cost_center_id`
|
|
41
|
+
- `attribution_tag`, `project_path`, `project_name`, `repo`
|
|
42
|
+
- `account_key`, `account_tool`, `account_name`, `account_email`, `account_source`
|
|
43
|
+
- `cost_basis` (`metered_api`, `subscription_included`, `estimated`, or `unknown`)
|
|
44
|
+
|
|
45
|
+
Cost-center kinds are `loop`, `app`, `repo`, `service`, and `team`. When kind and name are present, the sidecar creates a cost center such as `app:alumia` unless an explicit ID is supplied. Unknown agents normalize to the cost-center kind when it is a supported pseudo-agent (`app`, `service`, `repo`, `loop`), otherwise `service`.
|
|
46
|
+
|
|
47
|
+
## OTLP recognition
|
|
48
|
+
|
|
49
|
+
The OTLP parser reads sum or gauge data points. Metric names containing cost or `.usd` become cost; names containing input+token or `tokens.input` become input tokens; names containing output+token or `tokens.output` become output tokens. Points are joined by agent and request/event ID.
|
|
50
|
+
|
|
51
|
+
Resource and point attributes may use plain names (`model`, `session_id`, `request_id`, `project_path`, and the attribution fields above) or common dotted aliases such as `ai.model`, `session.id`, `event.id`, `service.name`, `economy.cost_center`, and `account.email`.
|
|
52
|
+
|
|
53
|
+
The sidecar always opens the local SQLite database. It does not forward to a cloud API; use the authenticated REST bulk-ingest path for remote ingestion.
|
package/docs/rest-api.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# REST API
|
|
2
|
+
|
|
3
|
+
Start the service with `economy-serve` or `economy serve`. The default local origin is `http://127.0.0.1:3456`; the bind behavior is detailed in [configuration](configuration.md#rest-server).
|
|
4
|
+
|
|
5
|
+
The canonical application prefix is `/v1`. Equivalent `/api` routes remain available for the bundled dashboard and older clients. Successful application responses use:
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{ "data": {}, "meta": {} }
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Errors use `{ "error": "message" }`. Foundation probes return a direct `{ status, version, mode, service }` object instead of the data envelope.
|
|
12
|
+
|
|
13
|
+
## Discovery and probes
|
|
14
|
+
|
|
15
|
+
| Method | Path | Purpose |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| `GET` | `/health`, `/healthz` | Liveness. |
|
|
18
|
+
| `GET` | `/ready`, `/readyz` | Storage readiness; may return 503. |
|
|
19
|
+
| `GET` | `/version`, `/v1/version` | Version and deployment mode. |
|
|
20
|
+
| `GET` | `/openapi.json` | Runtime-versioned OpenAPI document. |
|
|
21
|
+
|
|
22
|
+
These routes are open. The checked-in OpenAPI source is [`openapi/economy.json`](../openapi/economy.json).
|
|
23
|
+
|
|
24
|
+
## Authentication
|
|
25
|
+
|
|
26
|
+
In local mode, set `ECONOMY_API_TOKEN` or `HASNA_ECONOMY_API_TOKEN` and send either:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
Authorization: Bearer <token>
|
|
30
|
+
X-Economy-Token: <token>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
In self-hosted Postgres mode, send a valid Economy API key as `x-api-key` or a bearer token. All non-probe routes require a valid key when the server has an authenticator. Bulk ingest and feedback additionally request the `economy:write` scope.
|
|
34
|
+
|
|
35
|
+
## Read routes
|
|
36
|
+
|
|
37
|
+
| Method | Canonical path | Parameters/behavior |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| `GET` | `/v1/summary` | `period` (default `today`), optional `machine`. |
|
|
40
|
+
| `GET` | `/v1/machines` | Machine rollups and current machine metadata. |
|
|
41
|
+
| `GET` | `/v1/fleet` | `period` (default `month`), optional `machine`; returns summary, machines, registry. |
|
|
42
|
+
| `GET` | `/v1/daily` | `days` (default 30), optional `machine`. |
|
|
43
|
+
| `GET` | `/v1/hourly` | Optional `machine`; `hours` must be 1–48. |
|
|
44
|
+
| `GET` | `/v1/sessions` | `agent`, `project`, `search`, `machine`, `account`, `limit` (50), `offset` (0), `since`, and comma-separated `fields`. |
|
|
45
|
+
| `GET` | `/v1/sessions/{id}/requests` | Full ID or unique prefix; returns 404 when absent. |
|
|
46
|
+
| `GET` | `/v1/top` | `n` (default 10), optional `agent` and `since`. |
|
|
47
|
+
| `GET` | `/v1/models` | Model breakdown. |
|
|
48
|
+
| `GET` | `/v1/projects` | Project breakdown; `period` defaults to `all`, optional `machine`. |
|
|
49
|
+
| `GET` | `/v1/projects/detail` | Detailed project query; `q` is required. |
|
|
50
|
+
| `GET` | `/v1/accounts` | Account breakdown; `period` defaults to `all`, optional `machine`. |
|
|
51
|
+
| `GET` | `/v1/breakdown` | `by=model|project|agent|account|cost-center|loop|app|repo|service|team`, optional `period` and `machine`. |
|
|
52
|
+
| `GET` | `/v1/usage` | `period` (default `month`), optional valid `agent`. |
|
|
53
|
+
| `GET` | `/v1/savings` | `period` (default `month`), optional valid `agent`. |
|
|
54
|
+
| `GET` | `/v1/billing` | `period` (default `month`). |
|
|
55
|
+
| `GET` | `/v1/billing/diff` | `period` (default `month`), `threshold` percentage (default 15). |
|
|
56
|
+
| `GET` | `/v1/budgets` | Budget statuses. |
|
|
57
|
+
| `GET` | `/v1/goals` | Goal statuses. |
|
|
58
|
+
| `GET` | `/v1/pricing` | Model pricing rows. |
|
|
59
|
+
| `GET` | `/v1/subscriptions` | Subscription plans. |
|
|
60
|
+
| `GET` | `/v1/project-registry` | Registered projects. |
|
|
61
|
+
| `GET` | `/v1/brief` | Fleet brief; optional `since` and `machine`. |
|
|
62
|
+
| `GET` | `/v1/export` | `type=sessions|requests`, `period` (default `month`); returns rows in JSON for clients to encode. |
|
|
63
|
+
| `GET` | `/v1/compare` | Required `from` and `to` dates (`YYYY-MM-DD`). |
|
|
64
|
+
| `GET` | `/v1/forecast` | Current-month projection. |
|
|
65
|
+
| `GET` | `/v1/efficiency` | Per-model token efficiency. |
|
|
66
|
+
| `GET` | `/v1/requests` | Requests after required ISO `since`; used by live watch. |
|
|
67
|
+
|
|
68
|
+
Common period values are `today`, `yesterday`, `week`, `month`, `year`, and `all`, but individual routes accept the subset documented above.
|
|
69
|
+
|
|
70
|
+
## Mutation routes
|
|
71
|
+
|
|
72
|
+
| Method | Canonical path | Body/behavior |
|
|
73
|
+
| --- | --- | --- |
|
|
74
|
+
| `POST` | `/v1/budgets` | Positive `limit_usd`; optional `period`, `alert_at_percent`, `project_path`, `agent`, `cost_center_id`. |
|
|
75
|
+
| `DELETE` | `/v1/budgets/{id}` | Delete a budget. |
|
|
76
|
+
| `POST` | `/v1/goals` | Positive `limit_usd`; `period=day|week|month|year`; optional `project_path`, `agent`. |
|
|
77
|
+
| `DELETE` | `/v1/goals/{id}` | Delete a goal. |
|
|
78
|
+
| `POST` | `/v1/pricing` | `model`, non-negative input/output/cache pricing fields. |
|
|
79
|
+
| `DELETE` | `/v1/pricing/{model}` | Delete a URL-encoded model row. |
|
|
80
|
+
| `POST` | `/v1/subscriptions` | Required `provider` and `plan`; optional ID, agent, fee/inclusion, cycle/reset, and active fields. |
|
|
81
|
+
| `DELETE` | `/v1/subscriptions/{id}` | Delete a plan. |
|
|
82
|
+
| `POST` | `/v1/project-registry` | Required `path`; optional `name`, `description`, `tags`. |
|
|
83
|
+
| `DELETE` | `/v1/project-registry/{path}` | Delete a URL-encoded project path. |
|
|
84
|
+
| `POST` | `/v1/sync` | `{ "sources": "all" }` or one of the eight agents/`loops`; triggers server-local ingestion. |
|
|
85
|
+
| `POST` | `/v1/billing/sync` | Optional `days` (1–366) and `providers` from `anthropic`, `openai`, `gemini`. Provider failures are returned per provider. |
|
|
86
|
+
| `POST` | `/v1/ingest` | Idempotently merge arrays named `requests`, `sessions`, `projects`, `budgets`, `goals`, `billing_daily`, `model_pricing`, `subscriptions`, and `usage_snapshots`. |
|
|
87
|
+
| `POST` | `/v1/feedback` | Required `message`; optional `email` and `category=bug|feature|general`. |
|
|
88
|
+
|
|
89
|
+
Agent fields accept `claude`, `takumi`, `codex`, `gemini`, `opencode`, `cursor`, `pi`, or `hermes`.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/economy",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"description": "AI coding cost tracker — CLI + MCP server + REST API + web dashboard for Claude Code, Codex,
|
|
3
|
+
"version": "0.3.9",
|
|
4
|
+
"description": "AI coding cost tracker — CLI + MCP server + REST API + web dashboard for Claude Code, Codex, OpenCode, Cursor, Pi, and Hermes, with legacy Gemini CLI session and Gemini API billing ingestion",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/hasna/economy.git"
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
|
29
29
|
"dist",
|
|
30
|
+
"docs",
|
|
30
31
|
"dashboard/dist",
|
|
31
32
|
"LICENSE",
|
|
32
33
|
"README.md",
|
|
@@ -69,13 +70,12 @@
|
|
|
69
70
|
"access": "public"
|
|
70
71
|
},
|
|
71
72
|
"dependencies": {
|
|
72
|
-
"@hasna/accounts": "0.
|
|
73
|
+
"@hasna/accounts": "0.2.23",
|
|
73
74
|
"@hasna/agent-registry": "^0.1.0",
|
|
74
|
-
"@hasna/
|
|
75
|
-
"@hasna/contracts": "^0.4.2",
|
|
75
|
+
"@hasna/contracts": "^0.9.0",
|
|
76
76
|
"@hasna/events": "^0.1.7",
|
|
77
77
|
"@hasna/mcp-harness": "^0.1.0",
|
|
78
|
-
"@hasna/projects": "0.1.
|
|
78
|
+
"@hasna/projects": "0.1.95",
|
|
79
79
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
80
80
|
"chalk": "^5.4.1",
|
|
81
81
|
"commander": "^13.1.0",
|
|
@@ -89,7 +89,6 @@
|
|
|
89
89
|
"typescript": "^5.7.2"
|
|
90
90
|
},
|
|
91
91
|
"trustedDependencies": [
|
|
92
|
-
"@hasna/cloud",
|
|
93
92
|
"@hasna/projects"
|
|
94
93
|
]
|
|
95
94
|
}
|
package/dist/cli/brains.d.ts
DELETED
package/dist/cli/brains.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"brains.d.ts","sourceRoot":"","sources":["../../src/cli/brains.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoL5D"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { formatAge } from '../../lib/brief.js';
|
|
3
|
-
import type { EconomyBrief } from '../../lib/brief.js';
|
|
4
|
-
export type { EconomyBrief } from '../../lib/brief.js';
|
|
5
|
-
interface BriefCommandDeps {
|
|
6
|
-
beforeRead?: () => void | Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
export declare function renderBriefText(brief: EconomyBrief): string;
|
|
9
|
-
export { formatAge };
|
|
10
|
-
export declare function registerBriefCommand(program: Command, deps?: BriefCommandDeps): void;
|
|
11
|
-
//# sourceMappingURL=brief.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"brief.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/brief.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,EAGV,YAAY,EACb,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACxC;AA4CD,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAyE3D;AAGD,OAAO,EAAE,SAAS,EAAE,CAAA;AAEpB,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,gBAAqB,GAAG,IAAI,CAgCxF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/completion.ts"],"names":[],"mappings":"AA0FA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAenD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extras.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/extras.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAgDnC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyS/D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyC5D"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare function menubarInstall(opts: {
|
|
2
|
-
force?: boolean;
|
|
3
|
-
}): Promise<void>;
|
|
4
|
-
export declare function menubarUninstall(): void;
|
|
5
|
-
export declare function menubarStart(): void;
|
|
6
|
-
export declare function menubarStop(): void;
|
|
7
|
-
//# sourceMappingURL=menubar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menubar.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/menubar.ts"],"names":[],"mappings":"AA0BA,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E7E;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAcvC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAWlC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
type ExecFile = (file: string, args: string[], options: {
|
|
2
|
-
stdio: 'ignore';
|
|
3
|
-
}) => unknown;
|
|
4
|
-
export declare function appleScriptString(value: string): string;
|
|
5
|
-
export declare function notificationScript(title: string, body: string): string;
|
|
6
|
-
export declare function sendNotification(title: string, body: string, execFile?: ExecFile): void;
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=notification.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/notification.ts"],"names":[],"mappings":"AAEA,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,KAAK,OAAO,CAAA;AAEvF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAuB,GAAG,IAAI,CAIrG"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
export type TodoStatus = 'pending' | 'in_progress' | 'done';
|
|
3
|
-
export interface TodoTask {
|
|
4
|
-
id: string;
|
|
5
|
-
title: string;
|
|
6
|
-
status: TodoStatus;
|
|
7
|
-
deps?: string[];
|
|
8
|
-
}
|
|
9
|
-
export interface TodoPhase {
|
|
10
|
-
id: string;
|
|
11
|
-
title: string;
|
|
12
|
-
summary: string;
|
|
13
|
-
tasks: TodoTask[];
|
|
14
|
-
}
|
|
15
|
-
export declare const ROADMAP_VERSION = "2026-05-23-b";
|
|
16
|
-
export declare const ROADMAP_GOAL = "Unified AI spend across 4+ machines: auto-sync local telemetry, track subscription usage & savings, ingest all major coding agents, and expose proactive CLI/MCP intelligence \u2014 not just per-machine API cost estimates.";
|
|
17
|
-
export declare const ROADMAP_PHASES: TodoPhase[];
|
|
18
|
-
export declare function printTodosHelp(): void;
|
|
19
|
-
export declare function printTodosOverview(): void;
|
|
20
|
-
export declare function printTodosList(opts: {
|
|
21
|
-
phase?: string;
|
|
22
|
-
status?: TodoStatus;
|
|
23
|
-
limit?: number;
|
|
24
|
-
verbose?: boolean;
|
|
25
|
-
json?: boolean;
|
|
26
|
-
}): void;
|
|
27
|
-
export declare function printTodoShow(taskId: string): void;
|
|
28
|
-
export declare function registerTodosCommand(program: Command): void;
|
|
29
|
-
//# sourceMappingURL=todos.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"todos.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/todos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAA;AAE3D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,QAAQ,EAAE,CAAA;CAClB;AAED,eAAO,MAAM,eAAe,iBAAiB,CAAA;AAC7C,eAAO,MAAM,YAAY,kOACmM,CAAA;AAE5N,eAAO,MAAM,cAAc,EAAE,SAAS,EAuqBrC,CAAA;AAgDD,wBAAgB,cAAc,IAAI,IAAI,CAoCrC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CA0BzC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA+DrI;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAmBlD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+C3D"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { type EconomyStore } from '../../lib/store/index.js';
|
|
2
|
-
import type { SavingsSummary } from '../../lib/savings.js';
|
|
3
|
-
import type { CostSummary } from '../../types/index.js';
|
|
4
|
-
/** Everything the status surfaces need, gathered through the Store (never sqlite
|
|
5
|
-
* directly) so local and self_hosted/cloud render the same numbers. */
|
|
6
|
-
export interface StatusData {
|
|
7
|
-
today: CostSummary;
|
|
8
|
-
week: CostSummary;
|
|
9
|
-
month: CostSummary;
|
|
10
|
-
savings: SavingsSummary;
|
|
11
|
-
machineCount: number;
|
|
12
|
-
topAgent: string;
|
|
13
|
-
quota: string | null;
|
|
14
|
-
transport: EconomyStore['transport'];
|
|
15
|
-
}
|
|
16
|
-
/** Collect the status snapshot from the active Store transport. */
|
|
17
|
-
export declare function gatherStatusData(store?: EconomyStore): Promise<StatusData>;
|
|
18
|
-
export declare function buildStatusLine(data: StatusData): string;
|
|
19
|
-
export declare function buildWaybarJson(data: StatusData): Record<string, unknown>;
|
|
20
|
-
export declare function printStatusLine(): Promise<void>;
|
|
21
|
-
export declare function printWaybarJson(): Promise<void>;
|
|
22
|
-
export declare function runTui(opts: {
|
|
23
|
-
watch?: boolean;
|
|
24
|
-
interval?: number;
|
|
25
|
-
}): Promise<void>;
|
|
26
|
-
//# sourceMappingURL=tui.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAkB,WAAW,EAAiB,MAAM,sBAAsB,CAAA;AAMtF;uEACuE;AACvE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,WAAW,CAAA;IAClB,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,WAAW,CAAA;IAClB,OAAO,EAAE,cAAc,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;CACrC;AAmBD,mEAAmE;AACnE,wBAAsB,gBAAgB,CAAC,KAAK,GAAE,YAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoB5F;AAQD,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAUxD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BxF"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Agent } from '../../types/index.js';
|
|
2
|
-
interface WatchOptions {
|
|
3
|
-
interval: number;
|
|
4
|
-
agent?: Agent;
|
|
5
|
-
notify?: number;
|
|
6
|
-
daemon?: boolean;
|
|
7
|
-
}
|
|
8
|
-
export declare function watchCosts(opts: WatchOptions): Promise<void>;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAGjD,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AA4BD,wBAAsB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgHlE"}
|
package/dist/cli/index.d.ts
DELETED
package/dist/cli/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|