@hasna/economy 0.2.18 → 0.2.19

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 (95) hide show
  1. package/LICENSE +2 -1
  2. package/README.md +13 -0
  3. package/dist/cli/commands/completion.d.ts +2 -0
  4. package/dist/cli/commands/completion.d.ts.map +1 -0
  5. package/dist/cli/commands/extras.d.ts +4 -0
  6. package/dist/cli/commands/extras.d.ts.map +1 -0
  7. package/dist/cli/commands/menubar.d.ts.map +1 -1
  8. package/dist/cli/commands/notification.d.ts +8 -0
  9. package/dist/cli/commands/notification.d.ts.map +1 -0
  10. package/dist/cli/commands/todos.d.ts +26 -0
  11. package/dist/cli/commands/todos.d.ts.map +1 -0
  12. package/dist/cli/commands/tui.d.ts +10 -0
  13. package/dist/cli/commands/tui.d.ts.map +1 -0
  14. package/dist/cli/commands/watch.d.ts +1 -0
  15. package/dist/cli/commands/watch.d.ts.map +1 -1
  16. package/dist/cli/index.js +5134 -641
  17. package/dist/db/database.d.ts +41 -1
  18. package/dist/db/database.d.ts.map +1 -1
  19. package/dist/db/pg-migrations.d.ts.map +1 -1
  20. package/dist/index.d.ts +2 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1202 -135
  23. package/dist/ingest/billing.d.ts +27 -0
  24. package/dist/ingest/billing.d.ts.map +1 -0
  25. package/dist/ingest/claude-quota.d.ts +5 -0
  26. package/dist/ingest/claude-quota.d.ts.map +1 -0
  27. package/dist/ingest/claude.d.ts +13 -2
  28. package/dist/ingest/claude.d.ts.map +1 -1
  29. package/dist/ingest/codex-quota.d.ts +5 -0
  30. package/dist/ingest/codex-quota.d.ts.map +1 -0
  31. package/dist/ingest/codex.d.ts +2 -1
  32. package/dist/ingest/codex.d.ts.map +1 -1
  33. package/dist/ingest/cursor.d.ts +6 -0
  34. package/dist/ingest/cursor.d.ts.map +1 -0
  35. package/dist/ingest/gemini.d.ts +2 -1
  36. package/dist/ingest/gemini.d.ts.map +1 -1
  37. package/dist/ingest/hermes.d.ts +6 -0
  38. package/dist/ingest/hermes.d.ts.map +1 -0
  39. package/dist/ingest/opencode.d.ts +7 -0
  40. package/dist/ingest/opencode.d.ts.map +1 -0
  41. package/dist/ingest/otel.d.ts +20 -0
  42. package/dist/ingest/otel.d.ts.map +1 -0
  43. package/dist/ingest/pi.d.ts +7 -0
  44. package/dist/ingest/pi.d.ts.map +1 -0
  45. package/dist/ingest/plugin.d.ts +17 -0
  46. package/dist/ingest/plugin.d.ts.map +1 -0
  47. package/dist/lib/agents.d.ts +11 -0
  48. package/dist/lib/agents.d.ts.map +1 -0
  49. package/dist/lib/billing-diff.d.ts +22 -0
  50. package/dist/lib/billing-diff.d.ts.map +1 -0
  51. package/dist/lib/cloud-sync.d.ts +35 -0
  52. package/dist/lib/cloud-sync.d.ts.map +1 -0
  53. package/dist/lib/config.d.ts.map +1 -1
  54. package/dist/lib/gatherer.d.ts.map +1 -1
  55. package/dist/lib/model-config.d.ts.map +1 -1
  56. package/dist/lib/open-projects.d.ts +19 -0
  57. package/dist/lib/open-projects.d.ts.map +1 -0
  58. package/dist/lib/package-metadata.d.ts +8 -0
  59. package/dist/lib/package-metadata.d.ts.map +1 -0
  60. package/dist/lib/paths.d.ts +20 -0
  61. package/dist/lib/paths.d.ts.map +1 -0
  62. package/dist/lib/pricing.d.ts +3 -3
  63. package/dist/lib/pricing.d.ts.map +1 -1
  64. package/dist/lib/savings.d.ts +17 -0
  65. package/dist/lib/savings.d.ts.map +1 -0
  66. package/dist/lib/serve-auth.d.ts +4 -0
  67. package/dist/lib/serve-auth.d.ts.map +1 -0
  68. package/dist/lib/spikes.d.ts +18 -0
  69. package/dist/lib/spikes.d.ts.map +1 -0
  70. package/dist/lib/sync-all.d.ts +28 -0
  71. package/dist/lib/sync-all.d.ts.map +1 -0
  72. package/dist/lib/watch-paths.d.ts +3 -0
  73. package/dist/lib/watch-paths.d.ts.map +1 -0
  74. package/dist/lib/webhooks.d.ts +1 -1
  75. package/dist/lib/webhooks.d.ts.map +1 -1
  76. package/dist/mcp/http.d.ts +12 -0
  77. package/dist/mcp/http.d.ts.map +1 -0
  78. package/dist/mcp/index.js +2752 -490
  79. package/dist/mcp/server.d.ts +4 -0
  80. package/dist/mcp/server.d.ts.map +1 -0
  81. package/dist/otel/index.d.ts +3 -0
  82. package/dist/otel/index.d.ts.map +1 -0
  83. package/dist/otel/index.js +1372 -0
  84. package/dist/server/index.d.ts +1 -0
  85. package/dist/server/index.js +3095 -201
  86. package/dist/server/serve.d.ts +10 -2
  87. package/dist/server/serve.d.ts.map +1 -1
  88. package/dist/types/index.d.ts +59 -6
  89. package/dist/types/index.d.ts.map +1 -1
  90. package/package.json +1 -1
  91. package/dashboard/dist/assets/index-5mUN0CPj.css +0 -1
  92. package/dashboard/dist/assets/index-L1FgNQ4t.js +0 -93
  93. package/dashboard/dist/index.html +0 -14
  94. package/dashboard/dist/logo.jpg +0 -0
  95. package/dashboard/dist/vite.svg +0 -1
@@ -0,0 +1,27 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,5 @@
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
@@ -0,0 +1 @@
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 +1,16 @@
1
- import { Database } from 'bun:sqlite';
2
- export declare function ingestClaude(db: Database, verbose?: boolean, _telemetryDir?: string): Promise<{
1
+ import type { SqliteAdapter as Database } from '@hasna/cloud';
2
+ import type { Agent } from '../types/index.js';
3
+ export declare function ingestClaude(db: Database, verbose?: boolean, projectsDir?: string): Promise<{
4
+ files: number;
5
+ requests: number;
6
+ sessions: number;
7
+ }>;
8
+ export declare function ingestTakumi(db: Database, verbose?: boolean, projectsDir?: string): Promise<{
9
+ files: number;
10
+ requests: number;
11
+ sessions: number;
12
+ }>;
13
+ export declare function ingestJsonlProjects(db: Database, projectsDir: string, agentName: Agent, verbose?: boolean): Promise<{
3
14
  files: number;
4
15
  requests: number;
5
16
  sessions: number;
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/ingest/claude.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA2DrC,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,OAAO,UAAQ,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA2HhE"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/ingest/claude.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAW7D,OAAO,KAAK,EAAkB,KAAK,EAAE,MAAM,mBAAmB,CAAA;AA+D9D,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,OAAO,UAAQ,EACf,WAAW,SAAsB,GAChC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAEhE;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,OAAO,UAAQ,EACf,WAAW,SAAsB,GAChC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAEhE;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,QAAQ,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,KAAK,EAChB,OAAO,UAAQ,GACd,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAwIhE"}
@@ -0,0 +1,5 @@
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
@@ -0,0 +1 @@
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,7 +1,8 @@
1
- import { Database } from 'bun:sqlite';
1
+ import type { SqliteAdapter as Database } from '@hasna/cloud';
2
2
  declare function readCodexModel(): string;
3
3
  export declare function ingestCodex(db: Database, verbose?: boolean): Promise<{
4
4
  sessions: number;
5
+ requests: number;
5
6
  }>;
6
7
  export { readCodexModel };
7
8
  //# sourceMappingURL=codex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/ingest/codex.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAkBrC,iBAAS,cAAc,IAAI,MAAM,CAShC;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAyD9F;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/ingest/codex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AA4C7D,iBAAS,cAAc,IAAI,MAAM,CAUhC;AAsDD,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA0FhH;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,6 @@
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
@@ -0,0 +1 @@
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,5 +1,6 @@
1
- import { Database } from 'bun:sqlite';
1
+ import type { SqliteAdapter as Database } from '@hasna/cloud';
2
2
  export declare function ingestGemini(db: Database, verbose?: boolean): Promise<{
3
3
  sessions: number;
4
+ requests: number;
4
5
  }>;
5
6
  //# sourceMappingURL=gemini.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/ingest/gemini.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA0BrC,wBAAsB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA2EjG"}
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/ingest/gemini.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAmG7D,wBAAsB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA+HnH"}
@@ -0,0 +1,6 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,20 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,17 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,11 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,22 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,35 @@
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
@@ -0,0 +1 @@
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 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,OAAO,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAWD,wBAAgB,UAAU,IAAI,aAAa,CAQ1C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAItD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAW/D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,OAAO,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAWD,wBAAgB,UAAU,IAAI,aAAa,CAS1C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAKtD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAW/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"gatherer.d.ts","sourceRoot":"","sources":["../../src/lib/gatherer.ts"],"names":[],"mappings":"AAQA,UAAU,eAAe;IACvB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,KAAK,oBAAoB,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAKhF,eAAO,MAAM,kBAAkB,EAAE,oBAiNhC,CAAA"}
1
+ {"version":3,"file":"gatherer.d.ts","sourceRoot":"","sources":["../../src/lib/gatherer.ts"],"names":[],"mappings":"AAQA,UAAU,eAAe;IACvB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,KAAK,oBAAoB,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAShF,eAAO,MAAM,kBAAkB,EAAE,oBAkNhC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../src/lib/model-config.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa,gBAAgB,CAAA;AA0B1C,4EAA4E;AAC5E,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC"}
1
+ {"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../src/lib/model-config.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa,gBAAgB,CAAA;AA8B1C,4EAA4E;AAC5E,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC"}
@@ -0,0 +1,19 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,8 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,20 @@
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
@@ -0,0 +1 @@
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,10 +1,10 @@
1
- import type { Database } from 'bun:sqlite';
1
+ import type { SqliteAdapter as Database } from '@hasna/cloud';
2
2
  import type { ModelPricing } from '../types/index.js';
3
3
  export declare const DEFAULT_PRICING: Record<string, ModelPricing>;
4
4
  export declare function normalizeModelName(raw: string): string;
5
5
  export declare function ensurePricingSeeded(db: Database): void;
6
6
  export declare function getPricingFromDb(db: Database, model: string): ModelPricing | null;
7
7
  export declare function getPricing(model: string): ModelPricing | null;
8
- export declare function computeCost(model: string, inputTokens: number, outputTokens: number, cacheReadTokens?: number, cacheWriteTokens?: number): number;
9
- export declare function computeCostFromDb(db: Database, model: string, inputTokens: number, outputTokens: number, cacheReadTokens?: number, cacheWriteTokens?: number): number;
8
+ export declare function computeCost(model: string, inputTokens: number, outputTokens: number, cacheReadTokens?: number, cacheWriteTokens?: number, cacheWrite1hTokens?: number, cacheStorageTokenHours?: number): number;
9
+ export declare function computeCostFromDb(db: Database, model: string, inputTokens: number, outputTokens: number, cacheReadTokens?: number, cacheWriteTokens?: number, cacheWrite1hTokens?: number, cacheStorageTokenHours?: number): number;
10
10
  //# sourceMappingURL=pricing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/lib/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKrD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA6BxD,CAAA;AAGD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKtD;AAGD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAEtD;AAGD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAuBjF;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAO7D;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,eAAe,SAAI,EACnB,gBAAgB,SAAI,GACnB,MAAM,CASR;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,eAAe,SAAI,EACnB,gBAAgB,SAAI,GACnB,MAAM,CASR"}
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/lib/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKrD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA8FxD,CAAA;AAqND,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOtD;AA2CD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAMtD;AA+GD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAoBjF;AA4BD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAG7D;AAMD,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,eAAe,SAAI,EACnB,gBAAgB,SAAI,EACpB,kBAAkB,SAAI,EACtB,sBAAsB,SAAI,GACzB,MAAM,CAIR;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,eAAe,SAAI,EACnB,gBAAgB,SAAI,EACpB,kBAAkB,SAAI,EACtB,sBAAsB,SAAI,GACzB,MAAM,CAIR"}
@@ -0,0 +1,17 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,4 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,18 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,28 @@
1
+ import type { SqliteAdapter as Database } from '@hasna/cloud';
2
+ import { ingestClaude, ingestTakumi } from '../ingest/claude.js';
3
+ import { ingestCodex } from '../ingest/codex.js';
4
+ import { ingestGemini } from '../ingest/gemini.js';
5
+ import { ingestOpenCode } from '../ingest/opencode.js';
6
+ import { ingestCursor } from '../ingest/cursor.js';
7
+ import { ingestPi } from '../ingest/pi.js';
8
+ import { ingestHermes } from '../ingest/hermes.js';
9
+ import { ingestClaudeQuota } from '../ingest/claude-quota.js';
10
+ import { ingestCodexQuota } from '../ingest/codex-quota.js';
11
+ import type { SyncOptions } from '../types/index.js';
12
+ export interface SyncAllResult {
13
+ claude?: Awaited<ReturnType<typeof ingestClaude>>;
14
+ takumi?: Awaited<ReturnType<typeof ingestTakumi>>;
15
+ codex?: Awaited<ReturnType<typeof ingestCodex>>;
16
+ gemini?: Awaited<ReturnType<typeof ingestGemini>>;
17
+ opencode?: Awaited<ReturnType<typeof ingestOpenCode>>;
18
+ cursor?: Awaited<ReturnType<typeof ingestCursor>>;
19
+ pi?: Awaited<ReturnType<typeof ingestPi>>;
20
+ hermes?: Awaited<ReturnType<typeof ingestHermes>>;
21
+ claudeQuota?: Awaited<ReturnType<typeof ingestClaudeQuota>>;
22
+ codexQuota?: Awaited<ReturnType<typeof ingestCodexQuota>>;
23
+ deduped: number;
24
+ cloudPulled: boolean;
25
+ cloudPushed: boolean;
26
+ }
27
+ export declare function syncAll(db: Database, opts?: SyncOptions): Promise<SyncAllResult>;
28
+ //# sourceMappingURL=sync-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-all.d.ts","sourceRoot":"","sources":["../../src/lib/sync-all.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAG3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAA;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAA;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAA;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAA;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAA;IACjD,EAAE,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAA;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAA;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAA;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAA;IACzD,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,wBAAsB,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CA8B1F"}
@@ -0,0 +1,3 @@
1
+ /** Directories and files to watch for live ingest triggers. */
2
+ export declare function getWatchPaths(): string[];
3
+ //# sourceMappingURL=watch-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-paths.d.ts","sourceRoot":"","sources":["../../src/lib/watch-paths.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAaxC"}
@@ -1,3 +1,3 @@
1
- import type { Database } from 'bun:sqlite';
1
+ import type { SqliteAdapter as Database } from '@hasna/cloud';
2
2
  export declare function checkAndFireWebhooks(db: Database): Promise<void>;
3
3
  //# sourceMappingURL=webhooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/lib/webhooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBtE"}
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/lib/webhooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE7D,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCtE"}
@@ -0,0 +1,12 @@
1
+ import { DEFAULT_MCP_HTTP_PORT, MCP_NAME } from './server.js';
2
+ export { DEFAULT_MCP_HTTP_PORT, MCP_NAME };
3
+ export declare function isHttpMode(argv?: string[]): boolean;
4
+ export declare function resolveHttpPort(argv?: string[]): number;
5
+ export declare function handleMcpHttpRequest(req: Request): Promise<Response>;
6
+ export interface StartHttpServerOptions {
7
+ port?: number;
8
+ hostname?: string;
9
+ log?: (message: string) => void;
10
+ }
11
+ export declare function startHttpServer(options?: StartHttpServerOptions): ReturnType<typeof Bun.serve>;
12
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/mcp/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,qBAAqB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE1E,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAA;AAE1C,wBAAgB,UAAU,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAE1E;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,MAAM,CAa9E;AAUD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiB1E;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAclG"}