@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.
- package/dist/cli/brains.d.ts +3 -0
- package/dist/cli/brains.d.ts.map +1 -0
- package/dist/cli/commands/menubar.d.ts +7 -0
- package/dist/cli/commands/menubar.d.ts.map +1 -0
- package/dist/cli/commands/watch.d.ts +9 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/db/database.d.ts +68 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/pg-migrations.d.ts +7 -0
- package/dist/db/pg-migrations.d.ts.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/ingest/claude.d.ts +7 -0
- package/dist/ingest/claude.d.ts.map +1 -0
- package/dist/ingest/codex.d.ts +7 -0
- package/dist/ingest/codex.d.ts.map +1 -0
- package/dist/ingest/gemini.d.ts +5 -0
- package/dist/ingest/gemini.d.ts.map +1 -0
- package/dist/lib/config.d.ts +13 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/gatherer.d.ts +21 -0
- package/dist/lib/gatherer.d.ts.map +1 -0
- package/dist/lib/model-config.d.ts +8 -0
- package/dist/lib/model-config.d.ts.map +1 -0
- package/dist/lib/pricing.d.ts +10 -0
- package/dist/lib/pricing.d.ts.map +1 -0
- package/dist/lib/webhooks.d.ts +3 -0
- package/dist/lib/webhooks.d.ts.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +7 -2
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/serve.d.ts +4 -0
- package/dist/server/serve.d.ts.map +1 -0
- package/dist/types/index.d.ts +101 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +5 -4
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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.
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":""}
|
|
@@ -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.
|
|
4
|
-
"description": "AI coding cost tracker
|
|
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
|
+
}
|