@hasna/economy 0.2.9 → 0.2.10

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 (40) hide show
  1. package/dist/cli/brains.d.ts +3 -0
  2. package/dist/cli/brains.d.ts.map +1 -0
  3. package/dist/cli/commands/menubar.d.ts +7 -0
  4. package/dist/cli/commands/menubar.d.ts.map +1 -0
  5. package/dist/cli/commands/watch.d.ts +9 -0
  6. package/dist/cli/commands/watch.d.ts.map +1 -0
  7. package/dist/cli/index.d.ts +3 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/db/database.d.ts +68 -0
  10. package/dist/db/database.d.ts.map +1 -0
  11. package/dist/db/pg-migrations.d.ts +7 -0
  12. package/dist/db/pg-migrations.d.ts.map +1 -0
  13. package/dist/index.d.ts +8 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/ingest/claude.d.ts +7 -0
  16. package/dist/ingest/claude.d.ts.map +1 -0
  17. package/dist/ingest/codex.d.ts +7 -0
  18. package/dist/ingest/codex.d.ts.map +1 -0
  19. package/dist/ingest/gemini.d.ts +5 -0
  20. package/dist/ingest/gemini.d.ts.map +1 -0
  21. package/dist/lib/config.d.ts +13 -0
  22. package/dist/lib/config.d.ts.map +1 -0
  23. package/dist/lib/gatherer.d.ts +21 -0
  24. package/dist/lib/gatherer.d.ts.map +1 -0
  25. package/dist/lib/model-config.d.ts +8 -0
  26. package/dist/lib/model-config.d.ts.map +1 -0
  27. package/dist/lib/pricing.d.ts +10 -0
  28. package/dist/lib/pricing.d.ts.map +1 -0
  29. package/dist/lib/webhooks.d.ts +3 -0
  30. package/dist/lib/webhooks.d.ts.map +1 -0
  31. package/dist/mcp/index.d.ts +3 -0
  32. package/dist/mcp/index.d.ts.map +1 -0
  33. package/dist/mcp/index.js +7 -2
  34. package/dist/server/index.d.ts +2 -0
  35. package/dist/server/index.d.ts.map +1 -0
  36. package/dist/server/serve.d.ts +4 -0
  37. package/dist/server/serve.d.ts.map +1 -0
  38. package/dist/types/index.d.ts +101 -0
  39. package/dist/types/index.d.ts.map +1 -0
  40. package/package.json +5 -4
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerBrainsCommand(program: Command): void;
3
+ //# sourceMappingURL=brains.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
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,CAsE7E;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAcvC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAWlC"}
@@ -0,0 +1,9 @@
1
+ import type { Agent } from '../../types/index.js';
2
+ interface WatchOptions {
3
+ interval: number;
4
+ agent?: Agent;
5
+ notify?: number;
6
+ }
7
+ export declare function watchCosts(opts: WatchOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAEjD,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAuBD,wBAAsB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFlE"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { SqliteAdapter as Database } from '@hasna/cloud';
2
+ import type { EconomyRequest, EconomySession, EconomyProject, Budget, BudgetStatus, CostSummary, ModelBreakdown, ProjectBreakdown, Period, SessionFilter } from '../types/index.js';
3
+ export declare function getDataDir(): string;
4
+ export declare function getDbPath(): string;
5
+ export declare function openDatabase(dbPath?: string, skipSeed?: boolean): Database;
6
+ export declare function upsertRequest(db: Database, req: EconomyRequest): void;
7
+ export declare function upsertSession(db: Database, session: EconomySession): void;
8
+ export declare function rollupSession(db: Database, sessionId: string): void;
9
+ export declare function querySessions(db: Database, filter?: SessionFilter): EconomySession[];
10
+ export declare function queryTopSessions(db: Database, n?: number, agent?: string): EconomySession[];
11
+ export declare function querySummary(db: Database, period: Period): CostSummary;
12
+ export declare function queryModelBreakdown(db: Database): ModelBreakdown[];
13
+ export declare function queryProjectBreakdown(db: Database): ProjectBreakdown[];
14
+ export declare function queryDailyBreakdown(db: Database, days?: number): Array<{
15
+ date: string;
16
+ cost_usd: number;
17
+ agent: string;
18
+ }>;
19
+ export declare function upsertProject(db: Database, project: EconomyProject): void;
20
+ export declare function getProject(db: Database, path: string): EconomyProject | null;
21
+ export declare function listProjects(db: Database): EconomyProject[];
22
+ export declare function deleteProject(db: Database, path: string): void;
23
+ export declare function upsertBudget(db: Database, budget: Budget): void;
24
+ export declare function listBudgets(db: Database): Budget[];
25
+ export declare function deleteBudget(db: Database, id: string): void;
26
+ export declare function getBudgetStatuses(db: Database): BudgetStatus[];
27
+ export interface Goal {
28
+ id: string;
29
+ period: 'day' | 'week' | 'month' | 'year';
30
+ project_path: string | null;
31
+ agent: string | null;
32
+ limit_usd: number;
33
+ created_at: string;
34
+ updated_at: string;
35
+ }
36
+ export interface GoalStatus extends Goal {
37
+ current_spend_usd: number;
38
+ percent_used: number;
39
+ is_on_track: boolean;
40
+ is_at_risk: boolean;
41
+ is_over: boolean;
42
+ }
43
+ export declare function upsertGoal(db: Database, goal: Goal): void;
44
+ export declare function deleteGoal(db: Database, id: string): void;
45
+ export declare function listGoals(db: Database): Goal[];
46
+ export declare function getGoalStatuses(db: Database): GoalStatus[];
47
+ export declare function getIngestState(db: Database, source: string, key: string): string | null;
48
+ export declare function setIngestState(db: Database, source: string, key: string, value: string): void;
49
+ export declare function queryRequestsSince(db: Database, since: string): EconomyRequest[];
50
+ export interface DbModelPricing {
51
+ model: string;
52
+ input_per_1m: number;
53
+ output_per_1m: number;
54
+ cache_read_per_1m: number;
55
+ cache_write_per_1m: number;
56
+ updated_at: string;
57
+ }
58
+ export declare function upsertModelPricing(db: Database, p: DbModelPricing): void;
59
+ export declare function getModelPricing(db: Database, model: string): DbModelPricing | null;
60
+ export declare function listModelPricing(db: Database): DbModelPricing[];
61
+ export declare function deleteModelPricing(db: Database, model: string): void;
62
+ export declare function seedModelPricing(db: Database, defaults: Record<string, {
63
+ inputPer1M: number;
64
+ outputPer1M: number;
65
+ cacheReadPer1M: number;
66
+ cacheWritePer1M: number;
67
+ }>): void;
68
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * PostgreSQL migrations for open-economy cloud sync.
3
+ *
4
+ * Equivalent to the SQLite schema in database.ts, translated for PostgreSQL.
5
+ */
6
+ export declare const PG_MIGRATIONS: string[];
7
+ //# sourceMappingURL=pg-migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-migrations.d.ts","sourceRoot":"","sources":["../../src/db/pg-migrations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,aAAa,EAAE,MAAM,EAmGjC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './types/index.js';
2
+ export * from './db/database.js';
3
+ export * from './lib/pricing.js';
4
+ export * from './lib/gatherer.js';
5
+ export * from './lib/model-config.js';
6
+ export * from './ingest/claude.js';
7
+ export * from './ingest/codex.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { Database } from 'bun:sqlite';
2
+ export declare function ingestClaude(db: Database, verbose?: boolean, _telemetryDir?: string): Promise<{
3
+ files: number;
4
+ requests: number;
5
+ sessions: number;
6
+ }>;
7
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ import { Database } from 'bun:sqlite';
2
+ declare function readCodexModel(): string;
3
+ export declare function ingestCodex(db: Database, verbose?: boolean): Promise<{
4
+ sessions: number;
5
+ }>;
6
+ export { readCodexModel };
7
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,5 @@
1
+ import { Database } from 'bun:sqlite';
2
+ export declare function ingestGemini(db: Database, verbose?: boolean): Promise<{
3
+ sessions: number;
4
+ }>;
5
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,13 @@
1
+ export interface EconomyConfig {
2
+ port: number;
3
+ 'default-period': string;
4
+ 'auto-sync': boolean;
5
+ 'sync-interval': number;
6
+ 'alert-thresholds': number[];
7
+ 'webhook-url': string | null;
8
+ }
9
+ export declare function loadConfig(): EconomyConfig;
10
+ export declare function saveConfig(config: EconomyConfig): void;
11
+ export declare function getConfigValue(key: string): unknown;
12
+ export declare function setConfigValue(key: string, value: string): void;
13
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,21 @@
1
+ interface TrainingMessage {
2
+ role: 'system' | 'user' | 'assistant';
3
+ content: string;
4
+ }
5
+ interface TrainingExample {
6
+ messages: TrainingMessage[];
7
+ }
8
+ interface GatherResult {
9
+ source: string;
10
+ examples: TrainingExample[];
11
+ count: number;
12
+ }
13
+ interface GathererOptions {
14
+ limit?: number;
15
+ since?: Date;
16
+ outputDir?: string;
17
+ }
18
+ type GatherTrainingDataFn = (options?: GathererOptions) => Promise<GatherResult>;
19
+ export declare const gatherTrainingData: GatherTrainingDataFn;
20
+ export {};
21
+ //# sourceMappingURL=gatherer.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,8 @@
1
+ export declare const DEFAULT_MODEL = "gpt-4o-mini";
2
+ /** Returns the active fine-tuned model ID, or DEFAULT_MODEL if none set. */
3
+ export declare function getActiveModel(): string;
4
+ /** Persists the active fine-tuned model ID to ~/.hasna/economy/config.json. */
5
+ export declare function setActiveModel(id: string): void;
6
+ /** Clears the active model, falling back to DEFAULT_MODEL. */
7
+ export declare function clearActiveModel(): void;
8
+ //# sourceMappingURL=model-config.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,10 @@
1
+ import type { Database } from 'bun:sqlite';
2
+ import type { ModelPricing } from '../types/index.js';
3
+ export declare const DEFAULT_PRICING: Record<string, ModelPricing>;
4
+ export declare function normalizeModelName(raw: string): string;
5
+ export declare function ensurePricingSeeded(db: Database): void;
6
+ export declare function getPricingFromDb(db: Database, model: string): ModelPricing | null;
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;
10
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ import type { Database } from 'bun:sqlite';
2
+ export declare function checkAndFireWebhooks(db: Database): Promise<void>;
3
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":""}
package/dist/mcp/index.js CHANGED
@@ -511,7 +511,7 @@ var init_database = () => {};
511
511
  var require_package = __commonJS((exports, module) => {
512
512
  module.exports = {
513
513
  name: "@hasna/economy",
514
- version: "0.2.8",
514
+ version: "0.2.10",
515
515
  description: "AI coding cost tracker \u2014 CLI + MCP server + REST API + web dashboard for Claude Code, Codex, and Gemini",
516
516
  type: "module",
517
517
  main: "dist/index.js",
@@ -542,7 +542,8 @@ var require_package = __commonJS((exports, module) => {
542
542
  test: "bun test",
543
543
  "dev:cli": "bun run src/cli/index.ts",
544
544
  "dev:mcp": "bun run src/mcp/index.ts",
545
- "dev:serve": "bun run src/server/index.ts"
545
+ "dev:serve": "bun run src/server/index.ts",
546
+ postinstall: "mkdir -p $HOME/.hasna/economy/training 2>/dev/null || true"
546
547
  },
547
548
  keywords: [
548
549
  "economy",
@@ -882,6 +883,7 @@ var TOOLS = [
882
883
  { name: "register_agent", description: "Register agent session.", inputSchema: { type: "object", properties: { name: { type: "string" }, session_id: { type: "string" } }, required: ["name"] } },
883
884
  { name: "heartbeat", description: "Update last_seen_at.", inputSchema: { type: "object", properties: { agent_id: { type: "string" } }, required: ["agent_id"] } },
884
885
  { name: "set_focus", description: "Set active project context.", inputSchema: { type: "object", properties: { agent_id: { type: "string" }, project_id: { type: "string" } }, required: ["agent_id"] } },
886
+ { name: "list_agents", description: "List all registered agents.", inputSchema: { type: "object", properties: {} } },
885
887
  { name: "send_feedback", description: "Send feedback about this service.", inputSchema: { type: "object", properties: { message: { type: "string" }, email: { type: "string" }, category: { type: "string", enum: ["bug", "feature", "general"] } }, required: ["message"] } }
886
888
  ];
887
889
  var TOOL_DESCRIPTIONS = {
@@ -1100,6 +1102,9 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
1100
1102
  ag["project_id"] = args["project_id"];
1101
1103
  return { content: [{ type: "text", text: String(args["project_id"] ? `Focus: ${args["project_id"]}` : "Focus cleared") }] };
1102
1104
  }
1105
+ case "list_agents": {
1106
+ return { content: [{ type: "text", text: JSON.stringify([..._econAgents.values()]) }] };
1107
+ }
1103
1108
  case "send_feedback": {
1104
1109
  try {
1105
1110
  const pkg = require_package();
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { Database } from 'bun:sqlite';
2
+ export declare function createHandler(db: Database): (req: Request) => Promise<Response>;
3
+ export declare function startServer(port?: number): void;
4
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,101 @@
1
+ export type Agent = 'claude' | 'codex' | 'gemini';
2
+ export type Period = 'today' | 'yesterday' | 'week' | 'month' | 'year' | 'all';
3
+ export interface EconomyRequest {
4
+ id: string;
5
+ agent: Agent;
6
+ session_id: string;
7
+ model: string;
8
+ input_tokens: number;
9
+ output_tokens: number;
10
+ cache_read_tokens: number;
11
+ cache_create_tokens: number;
12
+ cost_usd: number;
13
+ duration_ms: number;
14
+ timestamp: string;
15
+ source_request_id: string;
16
+ }
17
+ export interface EconomySession {
18
+ id: string;
19
+ agent: Agent;
20
+ project_path: string;
21
+ project_name: string;
22
+ started_at: string;
23
+ ended_at: string | null;
24
+ total_cost_usd: number;
25
+ total_tokens: number;
26
+ request_count: number;
27
+ }
28
+ export interface EconomyProject {
29
+ id: string;
30
+ path: string;
31
+ name: string;
32
+ description: string | null;
33
+ tags: string[];
34
+ created_at: string;
35
+ }
36
+ export interface Budget {
37
+ id: string;
38
+ project_path: string | null;
39
+ agent: Agent | null;
40
+ period: 'daily' | 'weekly' | 'monthly';
41
+ limit_usd: number;
42
+ alert_at_percent: number;
43
+ created_at: string;
44
+ updated_at: string;
45
+ }
46
+ export interface BudgetStatus extends Budget {
47
+ current_spend_usd: number;
48
+ percent_used: number;
49
+ is_over_limit: boolean;
50
+ is_over_alert: boolean;
51
+ }
52
+ export interface IngestState {
53
+ source: string;
54
+ key: string;
55
+ value: string;
56
+ }
57
+ export interface CostSummary {
58
+ total_usd: number;
59
+ sessions: number;
60
+ requests: number;
61
+ tokens: number;
62
+ period: Period;
63
+ }
64
+ export interface ModelBreakdown {
65
+ model: string;
66
+ agent: Agent;
67
+ requests: number;
68
+ input_tokens: number;
69
+ output_tokens: number;
70
+ total_tokens: number;
71
+ cost_usd: number;
72
+ }
73
+ export interface ProjectBreakdown {
74
+ project_path: string;
75
+ project_name: string;
76
+ sessions: number;
77
+ requests: number;
78
+ total_tokens: number;
79
+ cost_usd: number;
80
+ last_active: string;
81
+ }
82
+ export interface ModelPricing {
83
+ inputPer1M: number;
84
+ outputPer1M: number;
85
+ cacheReadPer1M: number;
86
+ cacheWritePer1M: number;
87
+ }
88
+ export interface SyncOptions {
89
+ claude?: boolean;
90
+ codex?: boolean;
91
+ verbose?: boolean;
92
+ }
93
+ export interface SessionFilter {
94
+ agent?: Agent;
95
+ project?: string;
96
+ limit?: number;
97
+ offset?: number;
98
+ since?: string;
99
+ search?: string;
100
+ }
101
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hasna/economy",
3
- "version": "0.2.9",
4
- "description": "AI coding cost tracker CLI + MCP server + REST API + web dashboard for Claude Code, Codex, and Gemini",
3
+ "version": "0.2.10",
4
+ "description": "AI coding cost tracker \u2014 CLI + MCP server + REST API + web dashboard for Claude Code, Codex, and Gemini",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -31,7 +31,8 @@
31
31
  "test": "bun test",
32
32
  "dev:cli": "bun run src/cli/index.ts",
33
33
  "dev:mcp": "bun run src/mcp/index.ts",
34
- "dev:serve": "bun run src/server/index.ts"
34
+ "dev:serve": "bun run src/server/index.ts",
35
+ "postinstall": "mkdir -p $HOME/.hasna/economy/training 2>/dev/null || true"
35
36
  },
36
37
  "keywords": [
37
38
  "economy",
@@ -62,4 +63,4 @@
62
63
  "bun-types": "latest",
63
64
  "typescript": "^5.7.2"
64
65
  }
65
- }
66
+ }