@hasna/economy 0.2.31 → 0.2.33

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 (64) hide show
  1. package/README.md +6 -6
  2. package/dist/cli/commands/tui.d.ts +1 -1
  3. package/dist/cli/commands/tui.d.ts.map +1 -1
  4. package/dist/cli/index.js +184 -832
  5. package/dist/db/database.d.ts +1 -3
  6. package/dist/db/database.d.ts.map +1 -1
  7. package/dist/index.d.ts +0 -4
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +50 -1049
  10. package/dist/ingest/billing.d.ts +1 -1
  11. package/dist/ingest/billing.d.ts.map +1 -1
  12. package/dist/ingest/claude-quota.d.ts +1 -1
  13. package/dist/ingest/claude-quota.d.ts.map +1 -1
  14. package/dist/ingest/claude.d.ts +1 -1
  15. package/dist/ingest/claude.d.ts.map +1 -1
  16. package/dist/ingest/codex-quota.d.ts +1 -1
  17. package/dist/ingest/codex-quota.d.ts.map +1 -1
  18. package/dist/ingest/codex.d.ts +1 -1
  19. package/dist/ingest/codex.d.ts.map +1 -1
  20. package/dist/ingest/cursor.d.ts +1 -1
  21. package/dist/ingest/cursor.d.ts.map +1 -1
  22. package/dist/ingest/gemini.d.ts +1 -1
  23. package/dist/ingest/gemini.d.ts.map +1 -1
  24. package/dist/ingest/hermes.d.ts +1 -1
  25. package/dist/ingest/hermes.d.ts.map +1 -1
  26. package/dist/ingest/opencode.d.ts +1 -1
  27. package/dist/ingest/opencode.d.ts.map +1 -1
  28. package/dist/ingest/otel.d.ts +1 -1
  29. package/dist/ingest/otel.d.ts.map +1 -1
  30. package/dist/ingest/pi.d.ts +1 -1
  31. package/dist/ingest/pi.d.ts.map +1 -1
  32. package/dist/ingest/plugin.d.ts +1 -1
  33. package/dist/ingest/plugin.d.ts.map +1 -1
  34. package/dist/lib/billing-diff.d.ts +1 -1
  35. package/dist/lib/billing-diff.d.ts.map +1 -1
  36. package/dist/lib/cloud-sync.d.ts +2 -9
  37. package/dist/lib/cloud-sync.d.ts.map +1 -1
  38. package/dist/lib/open-projects.d.ts +2 -3
  39. package/dist/lib/open-projects.d.ts.map +1 -1
  40. package/dist/lib/peer-sync.d.ts +1 -1
  41. package/dist/lib/peer-sync.d.ts.map +1 -1
  42. package/dist/lib/pricing.d.ts +1 -1
  43. package/dist/lib/pricing.d.ts.map +1 -1
  44. package/dist/lib/savings.d.ts +1 -1
  45. package/dist/lib/savings.d.ts.map +1 -1
  46. package/dist/lib/spikes.d.ts +1 -1
  47. package/dist/lib/spikes.d.ts.map +1 -1
  48. package/dist/lib/sync-all.d.ts +1 -1
  49. package/dist/lib/sync-all.d.ts.map +1 -1
  50. package/dist/lib/webhooks.d.ts +1 -1
  51. package/dist/lib/webhooks.d.ts.map +1 -1
  52. package/dist/mcp/index.js +34 -514
  53. package/dist/mcp/server.d.ts.map +1 -1
  54. package/dist/otel/index.js +15 -442
  55. package/dist/server/index.js +46 -492
  56. package/dist/server/serve.d.ts +1 -1
  57. package/dist/server/serve.d.ts.map +1 -1
  58. package/package.json +6 -5
  59. package/dist/db/storage-adapter.d.ts +0 -34
  60. package/dist/db/storage-adapter.d.ts.map +0 -1
  61. package/dist/lib/remote-storage.d.ts +0 -15
  62. package/dist/lib/remote-storage.d.ts.map +0 -1
  63. package/dist/lib/storage-sync.d.ts +0 -27
  64. package/dist/lib/storage-sync.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/economy",
3
- "version": "0.2.31",
3
+ "version": "0.2.33",
4
4
  "description": "AI coding cost tracker — CLI + MCP server + REST API + web dashboard for Claude Code, Codex, Gemini, OpenCode, Cursor, Pi, and Hermes",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -57,20 +57,21 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "@hasna/accounts": "0.1.6",
60
- "@hasna/projects": "0.1.55",
60
+ "@hasna/cloud": "0.1.24",
61
+ "@hasna/projects": "0.1.51",
61
62
  "@modelcontextprotocol/sdk": "^1.12.1",
62
63
  "chalk": "^5.4.1",
63
64
  "commander": "^13.1.0",
64
- "pg": "^8.20.0",
65
- "zod": "^3.24.2"
65
+ "zod": "^3.24.2",
66
+ "@hasna/events": "^0.1.7"
66
67
  },
67
68
  "devDependencies": {
68
69
  "@types/bun": "latest",
69
- "@types/pg": "^8.20.0",
70
70
  "bun-types": "latest",
71
71
  "typescript": "^5.7.2"
72
72
  },
73
73
  "trustedDependencies": [
74
+ "@hasna/cloud",
74
75
  "@hasna/projects"
75
76
  ]
76
77
  }
@@ -1,34 +0,0 @@
1
- import { Database as BunDatabase } from 'bun:sqlite';
2
- export interface RunResult {
3
- changes: number;
4
- lastInsertRowid: number | bigint;
5
- }
6
- export interface PreparedStatement {
7
- run(...params: any[]): RunResult;
8
- get(...params: any[]): unknown;
9
- all(...params: any[]): unknown[];
10
- finalize(): void;
11
- }
12
- export interface DbAdapter {
13
- run(sql: string, ...params: any[]): RunResult;
14
- get(sql: string, ...params: any[]): unknown;
15
- all(sql: string, ...params: any[]): unknown[];
16
- exec(sql: string): void;
17
- prepare(sql: string): PreparedStatement;
18
- close(): void;
19
- transaction<T>(fn: () => T): T;
20
- }
21
- export declare class SqliteAdapter implements DbAdapter {
22
- private readonly db;
23
- constructor(path: string);
24
- run(sql: string, ...params: any[]): RunResult;
25
- get(sql: string, ...params: any[]): unknown;
26
- all(sql: string, ...params: any[]): unknown[];
27
- exec(sql: string): void;
28
- query(sql: string): unknown;
29
- prepare(sql: string): PreparedStatement;
30
- close(): void;
31
- transaction<T>(fn: () => T): T;
32
- get raw(): BunDatabase;
33
- }
34
- //# sourceMappingURL=storage-adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage-adapter.d.ts","sourceRoot":"","sources":["../../src/db/storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,YAAY,CAAA;AAEpD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,GAAG,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IAChC,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;IAC9B,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA;IAChC,QAAQ,IAAI,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;IAC3C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA;IAC7C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;IACvC,KAAK,IAAI,IAAI,CAAA;IACb,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;CAC/B;AAED,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAa;gBAEpB,IAAI,EAAE,MAAM;IAIxB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS;IAK7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO;IAI3C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE;IAI7C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI3B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;IAmBvC,KAAK,IAAI,IAAI;IAIb,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI9B,IAAI,GAAG,IAAI,WAAW,CAErB;CACF"}
@@ -1,15 +0,0 @@
1
- import type { Pool, PoolClient } from 'pg';
2
- import type { RunResult } from '../db/storage-adapter.js';
3
- export declare class PgAdapterAsync {
4
- private readonly pool;
5
- constructor(connectionString: string);
6
- constructor(pool: Pool);
7
- run(sql: string, ...params: unknown[]): Promise<RunResult>;
8
- get(sql: string, ...params: unknown[]): Promise<unknown>;
9
- all(sql: string, ...params: unknown[]): Promise<unknown[]>;
10
- exec(sql: string): Promise<void>;
11
- close(): Promise<void>;
12
- transaction<T>(fn: (client: PoolClient) => Promise<T>): Promise<T>;
13
- get raw(): Pool;
14
- }
15
- //# sourceMappingURL=remote-storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-storage.d.ts","sourceRoot":"","sources":["../../src/lib/remote-storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAkBzD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;gBAEf,gBAAgB,EAAE,MAAM;gBACxB,IAAI,EAAE,IAAI;IAOhB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAK1D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAK1D,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAexE,IAAI,GAAG,IAAI,IAAI,CAEd;CACF"}
@@ -1,27 +0,0 @@
1
- import type { DbAdapter } from '../db/storage-adapter.js';
2
- import { PgAdapterAsync } from './remote-storage.js';
3
- export interface SyncProgress {
4
- table: string;
5
- phase: 'reading' | 'writing' | 'done';
6
- rowsRead: number;
7
- rowsWritten: number;
8
- totalTables: number;
9
- currentTableIndex: number;
10
- }
11
- export interface SyncOptions {
12
- tables: string[];
13
- onProgress?: (progress: SyncProgress) => void;
14
- batchSize?: number;
15
- conflictColumn?: string;
16
- primaryKey?: string | string[];
17
- }
18
- export interface SyncResult {
19
- table: string;
20
- rowsRead: number;
21
- rowsWritten: number;
22
- rowsSkipped: number;
23
- errors: string[];
24
- }
25
- export declare function syncPush(local: DbAdapter, remote: PgAdapterAsync, options: SyncOptions): Promise<SyncResult[]>;
26
- export declare function syncPull(remote: PgAdapterAsync, local: DbAdapter, options: SyncOptions): Promise<SyncResult[]>;
27
- //# sourceMappingURL=storage-sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage-sync.d.ts","sourceRoot":"","sources":["../../src/lib/storage-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAA;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAKD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAGpH;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAGpH"}