@hasna/economy 0.2.19 → 0.2.20

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 (88) hide show
  1. package/dist/cli/commands/menubar.d.ts.map +1 -1
  2. package/dist/cli/commands/watch.d.ts +0 -1
  3. package/dist/cli/commands/watch.d.ts.map +1 -1
  4. package/dist/cli/index.js +707 -5200
  5. package/dist/db/database.d.ts +1 -41
  6. package/dist/db/database.d.ts.map +1 -1
  7. package/dist/db/pg-migrations.d.ts.map +1 -1
  8. package/dist/index.d.ts +0 -2
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +135 -1202
  11. package/dist/ingest/claude.d.ts +2 -13
  12. package/dist/ingest/claude.d.ts.map +1 -1
  13. package/dist/ingest/codex.d.ts +1 -2
  14. package/dist/ingest/codex.d.ts.map +1 -1
  15. package/dist/ingest/gemini.d.ts +1 -2
  16. package/dist/ingest/gemini.d.ts.map +1 -1
  17. package/dist/lib/config.d.ts.map +1 -1
  18. package/dist/lib/gatherer.d.ts.map +1 -1
  19. package/dist/lib/model-config.d.ts.map +1 -1
  20. package/dist/lib/pricing.d.ts +3 -3
  21. package/dist/lib/pricing.d.ts.map +1 -1
  22. package/dist/lib/webhooks.d.ts +1 -1
  23. package/dist/lib/webhooks.d.ts.map +1 -1
  24. package/dist/mcp/index.js +487 -2749
  25. package/dist/server/index.d.ts +0 -1
  26. package/dist/server/index.js +196 -3090
  27. package/dist/server/serve.d.ts +2 -10
  28. package/dist/server/serve.d.ts.map +1 -1
  29. package/dist/types/index.d.ts +6 -59
  30. package/dist/types/index.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/dist/cli/commands/completion.d.ts +0 -2
  33. package/dist/cli/commands/completion.d.ts.map +0 -1
  34. package/dist/cli/commands/extras.d.ts +0 -4
  35. package/dist/cli/commands/extras.d.ts.map +0 -1
  36. package/dist/cli/commands/notification.d.ts +0 -8
  37. package/dist/cli/commands/notification.d.ts.map +0 -1
  38. package/dist/cli/commands/todos.d.ts +0 -26
  39. package/dist/cli/commands/todos.d.ts.map +0 -1
  40. package/dist/cli/commands/tui.d.ts +0 -10
  41. package/dist/cli/commands/tui.d.ts.map +0 -1
  42. package/dist/ingest/billing.d.ts +0 -27
  43. package/dist/ingest/billing.d.ts.map +0 -1
  44. package/dist/ingest/claude-quota.d.ts +0 -5
  45. package/dist/ingest/claude-quota.d.ts.map +0 -1
  46. package/dist/ingest/codex-quota.d.ts +0 -5
  47. package/dist/ingest/codex-quota.d.ts.map +0 -1
  48. package/dist/ingest/cursor.d.ts +0 -6
  49. package/dist/ingest/cursor.d.ts.map +0 -1
  50. package/dist/ingest/hermes.d.ts +0 -6
  51. package/dist/ingest/hermes.d.ts.map +0 -1
  52. package/dist/ingest/opencode.d.ts +0 -7
  53. package/dist/ingest/opencode.d.ts.map +0 -1
  54. package/dist/ingest/otel.d.ts +0 -20
  55. package/dist/ingest/otel.d.ts.map +0 -1
  56. package/dist/ingest/pi.d.ts +0 -7
  57. package/dist/ingest/pi.d.ts.map +0 -1
  58. package/dist/ingest/plugin.d.ts +0 -17
  59. package/dist/ingest/plugin.d.ts.map +0 -1
  60. package/dist/lib/agents.d.ts +0 -11
  61. package/dist/lib/agents.d.ts.map +0 -1
  62. package/dist/lib/billing-diff.d.ts +0 -22
  63. package/dist/lib/billing-diff.d.ts.map +0 -1
  64. package/dist/lib/cloud-sync.d.ts +0 -35
  65. package/dist/lib/cloud-sync.d.ts.map +0 -1
  66. package/dist/lib/open-projects.d.ts +0 -19
  67. package/dist/lib/open-projects.d.ts.map +0 -1
  68. package/dist/lib/package-metadata.d.ts +0 -8
  69. package/dist/lib/package-metadata.d.ts.map +0 -1
  70. package/dist/lib/paths.d.ts +0 -20
  71. package/dist/lib/paths.d.ts.map +0 -1
  72. package/dist/lib/savings.d.ts +0 -17
  73. package/dist/lib/savings.d.ts.map +0 -1
  74. package/dist/lib/serve-auth.d.ts +0 -4
  75. package/dist/lib/serve-auth.d.ts.map +0 -1
  76. package/dist/lib/spikes.d.ts +0 -18
  77. package/dist/lib/spikes.d.ts.map +0 -1
  78. package/dist/lib/sync-all.d.ts +0 -28
  79. package/dist/lib/sync-all.d.ts.map +0 -1
  80. package/dist/lib/watch-paths.d.ts +0 -3
  81. package/dist/lib/watch-paths.d.ts.map +0 -1
  82. package/dist/mcp/http.d.ts +0 -12
  83. package/dist/mcp/http.d.ts.map +0 -1
  84. package/dist/mcp/server.d.ts +0 -4
  85. package/dist/mcp/server.d.ts.map +0 -1
  86. package/dist/otel/index.d.ts +0 -3
  87. package/dist/otel/index.d.ts.map +0 -1
  88. package/dist/otel/index.js +0 -1372
@@ -1,12 +1,4 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- interface StartServerOptions {
3
- db?: Database;
4
- dashboardDir?: string;
5
- hostname?: string;
6
- log?: (message: string) => void;
7
- }
8
- export declare function createServerFetch(apiHandler: (req: Request) => Promise<Response>, dashboardDir?: string): (req: Request) => Promise<Response>;
1
+ import type { Database } from 'bun:sqlite';
9
2
  export declare function createHandler(db: Database): (req: Request) => Promise<Response>;
10
- export declare function startServer(port?: number, options?: StartServerOptions): ReturnType<typeof Bun.serve>;
11
- export {};
3
+ export declare function startServer(port?: number): void;
12
4
  //# sourceMappingURL=serve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAoC7D,UAAU,kBAAkB;IAC1B,EAAE,CAAC,EAAE,QAAQ,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC;AAqED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,SAAwB,IACzF,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CAwB7D;AAQD,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,IACV,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CA2S/D;AAED,wBAAgB,WAAW,CAAC,IAAI,SAAO,EAAE,OAAO,GAAE,kBAAuB,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAcvG"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA2C1C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,IACV,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CA+K/D;AAED,wBAAgB,WAAW,CAAC,IAAI,SAAO,GAAG,IAAI,CAuC7C"}
@@ -1,30 +1,22 @@
1
- export type { Agent, CostBasis } from '../lib/agents.js';
2
- export { AGENTS, COST_BASIS, isAgent } from '../lib/agents.js';
1
+ export type Agent = 'claude' | 'codex' | 'gemini';
3
2
  export type Period = 'today' | 'yesterday' | 'week' | 'month' | 'year' | 'all';
4
3
  export interface EconomyRequest {
5
4
  id: string;
6
- agent: import('../lib/agents.js').Agent;
5
+ agent: Agent;
7
6
  session_id: string;
8
7
  model: string;
9
8
  input_tokens: number;
10
9
  output_tokens: number;
11
10
  cache_read_tokens: number;
12
11
  cache_create_tokens: number;
13
- cache_create_5m_tokens?: number;
14
- cache_create_1h_tokens?: number;
15
12
  cost_usd: number;
16
- cost_basis?: import('../lib/agents.js').CostBasis;
17
13
  duration_ms: number;
18
14
  timestamp: string;
19
15
  source_request_id: string;
20
- machine_id?: string;
21
- attribution_tag?: string;
22
- updated_at?: string;
23
- synced_at?: string;
24
16
  }
25
17
  export interface EconomySession {
26
18
  id: string;
27
- agent: import('../lib/agents.js').Agent;
19
+ agent: Agent;
28
20
  project_path: string;
29
21
  project_name: string;
30
22
  started_at: string;
@@ -32,10 +24,6 @@ export interface EconomySession {
32
24
  total_cost_usd: number;
33
25
  total_tokens: number;
34
26
  request_count: number;
35
- machine_id?: string;
36
- attribution_tag?: string;
37
- updated_at?: string;
38
- synced_at?: string;
39
27
  }
40
28
  export interface EconomyProject {
41
29
  id: string;
@@ -48,7 +36,7 @@ export interface EconomyProject {
48
36
  export interface Budget {
49
37
  id: string;
50
38
  project_path: string | null;
51
- agent: import('../lib/agents.js').Agent | null;
39
+ agent: Agent | null;
52
40
  period: 'daily' | 'weekly' | 'monthly';
53
41
  limit_usd: number;
54
42
  alert_at_percent: number;
@@ -75,7 +63,7 @@ export interface CostSummary {
75
63
  }
76
64
  export interface ModelBreakdown {
77
65
  model: string;
78
- agent: import('../lib/agents.js').Agent;
66
+ agent: Agent;
79
67
  requests: number;
80
68
  input_tokens: number;
81
69
  output_tokens: number;
@@ -96,59 +84,18 @@ export interface ModelPricing {
96
84
  outputPer1M: number;
97
85
  cacheReadPer1M: number;
98
86
  cacheWritePer1M: number;
99
- cacheWrite1hPer1M?: number;
100
- cacheStoragePer1MHour?: number;
101
87
  }
102
88
  export interface SyncOptions {
103
89
  claude?: boolean;
104
- takumi?: boolean;
105
90
  codex?: boolean;
106
- gemini?: boolean;
107
- opencode?: boolean;
108
- cursor?: boolean;
109
- pi?: boolean;
110
- hermes?: boolean;
111
91
  verbose?: boolean;
112
92
  }
113
93
  export interface SessionFilter {
114
- agent?: import('../lib/agents.js').Agent;
94
+ agent?: Agent;
115
95
  project?: string;
116
96
  limit?: number;
117
97
  offset?: number;
118
98
  since?: string;
119
99
  search?: string;
120
- machine?: string;
121
- }
122
- export interface Subscription {
123
- id: string;
124
- agent: import('../lib/agents.js').Agent | null;
125
- provider: string;
126
- plan: string;
127
- monthly_fee_usd: number;
128
- included_usage_usd: number;
129
- billing_cycle_start: string | null;
130
- reset_policy: string;
131
- active: number;
132
- created_at: string;
133
- updated_at: string;
134
- }
135
- export interface UsageSnapshot {
136
- id: string;
137
- agent: import('../lib/agents.js').Agent;
138
- date: string;
139
- metric: string;
140
- value: number;
141
- unit: string;
142
- machine_id: string;
143
- updated_at: string;
144
- }
145
- export interface MachineRegistry {
146
- machine_id: string;
147
- hostname: string;
148
- last_seen_at: string | null;
149
- last_push_at: string | null;
150
- last_pull_at: string | null;
151
- economy_version: string | null;
152
- updated_at: string;
153
100
  }
154
101
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/economy",
3
- "version": "0.2.19",
3
+ "version": "0.2.20",
4
4
  "description": "AI coding cost tracker — CLI + MCP server + REST API + web dashboard for Claude Code, Codex, and Gemini",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,2 +0,0 @@
1
- export declare function printCompletion(shell: string): void;
2
- //# sourceMappingURL=completion.d.ts.map
@@ -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,4 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerExtendedCommands(program: Command): void;
3
- export declare function registerFleetCommands(program: Command): void;
4
- //# sourceMappingURL=extras.d.ts.map
@@ -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;AA+CnC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0R/D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkC5D"}
@@ -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,26 +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
- }): void;
24
- export declare function printTodoShow(taskId: string): void;
25
- export declare function registerTodosCommand(program: Command): void;
26
- //# 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;AAkBD,wBAAgB,cAAc,IAAI,IAAI,CAkCrC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAyBzC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAyBlF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAmBlD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsC3D"}
@@ -1,10 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- export declare function buildStatusLine(db: Database): string;
3
- export declare function buildWaybarJson(db: Database): Record<string, unknown>;
4
- export declare function printStatusLine(): void;
5
- export declare function printWaybarJson(): void;
6
- export declare function runTui(opts: {
7
- watch?: boolean;
8
- interval?: number;
9
- }): Promise<void>;
10
- //# 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,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAkC7D,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAoBpD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWrE;AAED,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCxF"}
@@ -1,27 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- export declare function syncAnthropicBilling(db: Database, opts?: {
3
- days?: number;
4
- fromDate?: string;
5
- toDate?: string;
6
- }): Promise<{
7
- days: number;
8
- totalUsd: number;
9
- }>;
10
- export declare function syncOpenAIBilling(db: Database, opts?: {
11
- days?: number;
12
- fromDate?: string;
13
- toDate?: string;
14
- }): Promise<{
15
- days: number;
16
- totalUsd: number;
17
- }>;
18
- export declare function syncGeminiBilling(db: Database, opts?: {
19
- days?: number;
20
- fromDate?: string;
21
- toDate?: string;
22
- }): Promise<{
23
- days: number;
24
- totalUsd: number;
25
- skipped?: string;
26
- }>;
27
- //# sourceMappingURL=billing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/ingest/billing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AA0G7D,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/D,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAuD7C;AAeD,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/D,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAqD7C;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/D,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwC/D"}
@@ -1,5 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- export declare function ingestClaudeQuota(db: Database, verbose?: boolean): Promise<{
3
- snapshots: number;
4
- }>;
5
- //# sourceMappingURL=claude-quota.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-quota.d.ts","sourceRoot":"","sources":["../../src/ingest/claude-quota.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAqE7D,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA6FrG"}
@@ -1,5 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- export declare function ingestCodexQuota(db: Database, verbose?: boolean): Promise<{
3
- snapshots: number;
4
- }>;
5
- //# sourceMappingURL=codex-quota.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-quota.d.ts","sourceRoot":"","sources":["../../src/ingest/codex-quota.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAmF7D,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAoFpG"}
@@ -1,6 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- export declare function ingestCursor(db: Database, verbose?: boolean): Promise<{
3
- requests: number;
4
- snapshots: number;
5
- }>;
6
- //# sourceMappingURL=cursor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/ingest/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAsC7D,wBAAsB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAoGlH"}
@@ -1,6 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- export declare function ingestHermes(db: Database, verbose?: boolean): Promise<{
3
- sessions: number;
4
- requests: number;
5
- }>;
6
- //# sourceMappingURL=hermes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../src/ingest/hermes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAgC7D,wBAAsB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA0EjH"}
@@ -1,7 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- export declare function ingestOpenCode(db: Database, verbose?: boolean): Promise<{
3
- files: number;
4
- requests: number;
5
- sessions: number;
6
- }>;
7
- //# sourceMappingURL=opencode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/ingest/opencode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AA8C7D,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAkFlI"}
@@ -1,20 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- import type { Agent } from '../lib/agents.js';
3
- export interface OtelIngestRow {
4
- agent: Agent;
5
- session_id: string;
6
- model: string;
7
- cost_usd: number;
8
- input_tokens: number;
9
- output_tokens: number;
10
- timestamp: string;
11
- source_request_id: string;
12
- }
13
- /** Parse OTLP/HTTP JSON metrics into normalized ingest rows. */
14
- export declare function parseOtlpMetrics(body: unknown): OtelIngestRow[];
15
- export declare function parseSimpleIngest(body: unknown): OtelIngestRow | null;
16
- export declare function ingestOtelRows(db: Database, rows: OtelIngestRow[]): Promise<{
17
- requests: number;
18
- sessions: number;
19
- }>;
20
- //# sourceMappingURL=otel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../src/ingest/otel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAG7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAmCD,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,EAAE,CAkF/D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAqBrE;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA6CzH"}
@@ -1,7 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- export declare function ingestPi(db: Database, verbose?: boolean): Promise<{
3
- files: number;
4
- requests: number;
5
- sessions: number;
6
- }>;
7
- //# sourceMappingURL=pi.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../src/ingest/pi.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAuC7D,wBAAsB,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA6E5H"}
@@ -1,17 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- import type { Agent } from '../lib/agents.js';
3
- export interface IngestResult {
4
- requests: number;
5
- sessions: number;
6
- skipped?: number;
7
- }
8
- export interface IngestPlugin {
9
- agent: Agent;
10
- /** Human-readable source label for doctor/status. */
11
- source: string;
12
- ingest(db: Database, verbose?: boolean): Promise<IngestResult>;
13
- }
14
- export declare function registerIngestPlugin(plugin: IngestPlugin): void;
15
- export declare function getIngestPlugin(agent: Agent): IngestPlugin | undefined;
16
- export declare function listIngestPlugins(): IngestPlugin[];
17
- //# sourceMappingURL=plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/ingest/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAA;IACZ,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CAC/D;AAID,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAE/D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS,CAEtE;AAED,wBAAgB,iBAAiB,IAAI,YAAY,EAAE,CAElD"}
@@ -1,11 +0,0 @@
1
- export declare const AGENTS: readonly ["claude", "takumi", "codex", "gemini", "opencode", "cursor", "pi", "hermes"];
2
- export type Agent = (typeof AGENTS)[number];
3
- export declare const INGEST_AGENTS: readonly ["claude", "takumi", "codex", "gemini", "opencode", "cursor", "pi", "hermes"];
4
- export declare const LEGACY_AGENTS: readonly ["claude", "takumi", "codex", "gemini"];
5
- export declare const COST_BASIS: readonly ["metered_api", "subscription_included", "estimated", "unknown"];
6
- export type CostBasis = (typeof COST_BASIS)[number];
7
- export declare function isAgent(value: string): value is Agent;
8
- export declare function parseAgent(value: string | undefined, option: string): Agent | undefined;
9
- export declare function requireAgent(value: string | undefined, option: string, fallback?: Agent): Agent;
10
- export declare function agentColor(agent: string): 'blue' | 'yellow' | 'green' | 'magenta' | 'cyan' | 'white';
11
- //# sourceMappingURL=agents.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/lib/agents.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,wFAST,CAAA;AAEV,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3C,eAAO,MAAM,aAAa,wFAAS,CAAA;AAEnC,eAAO,MAAM,aAAa,kDAA8E,CAAA;AAExG,eAAO,MAAM,UAAU,2EAKb,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,KAAK,CAErD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAIvF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAI/F;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAQpG"}
@@ -1,22 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- import type { Period } from '../types/index.js';
3
- export interface BillingDiffRow {
4
- agent: string;
5
- estimated_usd: number;
6
- actual_usd: number;
7
- delta_usd: number;
8
- delta_pct: number;
9
- }
10
- export interface BillingDiffSummary {
11
- period: Period;
12
- estimated_usd: number;
13
- actual_usd: number;
14
- delta_usd: number;
15
- delta_pct: number;
16
- threshold_pct: number;
17
- is_alert: boolean;
18
- by_agent: BillingDiffRow[];
19
- by_provider: Record<string, number>;
20
- }
21
- export declare function queryBillingDiff(db: Database, period: Period, thresholdPct?: number): BillingDiffSummary;
22
- //# sourceMappingURL=billing-diff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"billing-diff.d.ts","sourceRoot":"","sources":["../../src/lib/billing-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAS/C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM,EACd,YAAY,SAAK,GAChB,kBAAkB,CAsCpB"}
@@ -1,35 +0,0 @@
1
- export declare const CLOUD_TABLES: readonly ["requests", "sessions", "projects", "budgets", "goals", "model_pricing", "billing_daily", "subscriptions", "usage_snapshots", "savings_daily", "machines", "ingest_state"];
2
- export declare function getCloudDatabaseUrl(): string | null;
3
- export declare function isCloudAutoEnabled(): boolean;
4
- export declare function getCloudPullIntervalMinutes(): number;
5
- export declare function getCloudPg(): Promise<import("@hasna/cloud").PgAdapterAsync>;
6
- export declare function runCloudMigrations(cloud: {
7
- run: (sql: string) => Promise<unknown>;
8
- }): Promise<void>;
9
- export declare function isCloudIncrementalEnabled(): boolean;
10
- export declare function cloudPush(opts?: {
11
- tables?: string[];
12
- }): Promise<{
13
- rows: number;
14
- machine: string;
15
- }>;
16
- export declare function cloudPull(opts?: {
17
- tables?: string[];
18
- }): Promise<{
19
- rows: number;
20
- machine: string;
21
- }>;
22
- export declare function cloudSyncFull(): Promise<{
23
- push: number;
24
- pull: number;
25
- machine: string;
26
- }>;
27
- export declare function setLastCloudPull(at?: string): void;
28
- export declare function getLastCloudPull(): string | null;
29
- export declare function shouldPullFromCloud(): boolean;
30
- export declare function maybePullFromCloud(): Promise<boolean>;
31
- export declare function maybePushAfterIngest(): Promise<boolean>;
32
- export declare function registerCloudSchedule(intervalMinutes: number): Promise<void>;
33
- export declare function removeCloudSchedule(): Promise<void>;
34
- export declare function getCloudScheduleStatus(): Promise<import("@hasna/cloud").SyncScheduleStatus>;
35
- //# sourceMappingURL=cloud-sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloud-sync.d.ts","sourceRoot":"","sources":["../../src/lib/cloud-sync.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,sLAaf,CAAA;AAEV,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAInD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAG5C;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAKpD;AAED,wBAAsB,UAAU,mDAO/B;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzG;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAGnD;AAED,wBAAsB,SAAS,CAAC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBxG;AAED,wBAAsB,SAAS,CAAC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAoBxG;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAI9F;AAED,wBAAgB,gBAAgB,CAAC,EAAE,SAA2B,GAAG,IAAI,CAGpE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAIhD;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAM7C;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQ3D;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQ7D;AA4BD,wBAAsB,qBAAqB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlF;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGzD;AAED,wBAAsB,sBAAsB,uDAG3C"}
@@ -1,19 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- interface OpenProject {
3
- id: string;
4
- name: string;
5
- description: string | null;
6
- path: string;
7
- tags: string[];
8
- created_at: string;
9
- }
10
- type ListOpenProjects = (options: {
11
- status: 'active';
12
- limit: number;
13
- }) => OpenProject[];
14
- export declare function syncOpenProjectsRegistry(db: Database, listActiveProjects?: ListOpenProjects): Promise<{
15
- imported: number;
16
- skipped: number;
17
- }>;
18
- export {};
19
- //# sourceMappingURL=open-projects.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open-projects.d.ts","sourceRoot":"","sources":["../../src/lib/open-projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAG7D,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,KAAK,gBAAgB,GAAG,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAK,WAAW,EAAE,CAAA;AAEvF,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,QAAQ,EACZ,kBAAkB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA2BhD"}
@@ -1,8 +0,0 @@
1
- type PackageMetadata = {
2
- name: string;
3
- version: string;
4
- };
5
- export declare function getPackageMetadata(): PackageMetadata;
6
- export declare const packageMetadata: PackageMetadata;
7
- export {};
8
- //# sourceMappingURL=package-metadata.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-metadata.d.ts","sourceRoot":"","sources":["../../src/lib/package-metadata.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAID,wBAAgB,kBAAkB,IAAI,eAAe,CAYpD;AAED,eAAO,MAAM,eAAe,iBAAuB,CAAA"}
@@ -1,20 +0,0 @@
1
- /** Cross-platform home directory (Windows USERPROFILE, Unix HOME). */
2
- export declare function getHomeDir(): string;
3
- export declare function expandHome(path: string): string;
4
- export declare function agentPaths(): {
5
- claudeProjects: string;
6
- claudeCredentials: string;
7
- takumiProjects: string;
8
- codexDir: string;
9
- codexDb: string;
10
- codexAuth: string;
11
- codexConfig: string;
12
- geminiTmp: string;
13
- geminiHistory: string;
14
- opencodeMessages: string;
15
- piSessions: string;
16
- hermesDir: string;
17
- hermesDb: string;
18
- };
19
- export declare function existingAgentPaths(): string[];
20
- //# sourceMappingURL=paths.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAIA,sEAAsE;AACtE,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,wBAAgB,UAAU;;;;;;;;;;;;;;EAiBzB;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C"}
@@ -1,17 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- import type { Agent, CostBasis } from './agents.js';
3
- import type { Period } from '../types/index.js';
4
- export interface SavingsSummary {
5
- period: Period;
6
- api_equivalent_usd: number;
7
- subscription_fee_usd: number;
8
- included_consumed_usd: number;
9
- on_demand_usd: number;
10
- saved_usd: number;
11
- by_agent: Record<string, Partial<SavingsSummary>>;
12
- }
13
- /** saved = max(0, api_equivalent - on_demand - prorated_subscription_fee) */
14
- export declare function computeSavedUsd(apiEquivalent: number, onDemand: number, subscriptionFee: number): number;
15
- export declare function querySavingsSummary(db: Database, period: Period, agent?: Agent): SavingsSummary;
16
- export declare function defaultCostBasisForAgent(agent: Agent): CostBasis;
17
- //# sourceMappingURL=savings.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"savings.d.ts","sourceRoot":"","sources":["../../src/lib/savings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,EAAE,MAAM,CAAA;IAC1B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAA;CAClD;AAgCD,6EAA6E;AAC7E,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK,GACZ,cAAc,CA6DhB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAIhE"}
@@ -1,4 +0,0 @@
1
- export declare function getServeApiToken(): string | undefined;
2
- export declare function getServeBindHost(): string;
3
- export declare function isAuthorizedRequest(req: Request, path: string): boolean;
4
- //# sourceMappingURL=serve-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-auth.d.ts","sourceRoot":"","sources":["../../src/lib/serve-auth.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CASvE"}
@@ -1,18 +0,0 @@
1
- import type { SqliteAdapter as Database } from '@hasna/cloud';
2
- export interface SpikeInfo {
3
- date: string;
4
- cost_usd: number;
5
- average_usd: number;
6
- ratio: number;
7
- }
8
- /** Detect daily cost spikes: today > 2× rolling 7-day mean (min 7 days history). */
9
- export declare function detectCostSpikes(dailyTotals: Array<{
10
- date: string;
11
- cost_usd: number;
12
- }>, opts?: {
13
- windowDays?: number;
14
- multiplier?: number;
15
- }): SpikeInfo[];
16
- export declare function queryRecentSpikes(db: Database, days?: number): SpikeInfo[];
17
- export declare function getTodaySpike(db: Database): SpikeInfo | null;
18
- //# sourceMappingURL=spikes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spikes.d.ts","sourceRoot":"","sources":["../../src/lib/spikes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE7D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EACtD,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD,SAAS,EAAE,CAqBb;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,SAAK,GAAG,SAAS,EAAE,CAUtE;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAI5D"}