@hasna/economy 0.2.27 → 0.2.29
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/LICENSE +2 -1
- package/README.md +16 -1
- package/dist/cli/index.js +417 -189
- package/dist/db/database.d.ts +10 -5
- package/dist/db/database.d.ts.map +1 -1
- package/dist/index.js +268 -162
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/mcp/http.d.ts +13 -0
- package/dist/mcp/http.d.ts.map +1 -0
- package/dist/mcp/index.js +846 -670
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/otel/index.js +35 -43
- package/dist/server/index.js +284 -170
- package/dist/server/serve.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,QAAQ,YAAY,CAAA;AACjC,eAAO,MAAM,qBAAqB,OAAO,CAAA;AAEzC,wBAAgB,WAAW,IAAI,GAAG,CAssBjC"}
|
package/dist/otel/index.js
CHANGED
|
@@ -566,6 +566,26 @@ function openDatabase(dbPath, skipSeed = false) {
|
|
|
566
566
|
}
|
|
567
567
|
return db;
|
|
568
568
|
}
|
|
569
|
+
function quoteSqlIdent(identifier) {
|
|
570
|
+
return `"${identifier.replace(/"/g, '""')}"`;
|
|
571
|
+
}
|
|
572
|
+
function hasColumn(db, table, column) {
|
|
573
|
+
const columns = db.prepare(`PRAGMA table_info(${quoteSqlIdent(table)})`).all();
|
|
574
|
+
return columns.some((c) => c.name === column);
|
|
575
|
+
}
|
|
576
|
+
function addColumnIfMissing(db, table, column, definition) {
|
|
577
|
+
if (hasColumn(db, table, column))
|
|
578
|
+
return false;
|
|
579
|
+
try {
|
|
580
|
+
db.exec(`ALTER TABLE ${quoteSqlIdent(table)} ADD COLUMN ${quoteSqlIdent(column)} ${definition}`);
|
|
581
|
+
return true;
|
|
582
|
+
} catch (error) {
|
|
583
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
584
|
+
if (/duplicate column name/i.test(message))
|
|
585
|
+
return true;
|
|
586
|
+
throw error;
|
|
587
|
+
}
|
|
588
|
+
}
|
|
569
589
|
function initSchema(db) {
|
|
570
590
|
db.exec(`
|
|
571
591
|
CREATE TABLE IF NOT EXISTS requests (
|
|
@@ -736,59 +756,31 @@ function initSchema(db) {
|
|
|
736
756
|
CREATE INDEX IF NOT EXISTS idx_usage_agent_date ON usage_snapshots(agent, date);
|
|
737
757
|
CREATE INDEX IF NOT EXISTS idx_savings_date ON savings_daily(date);
|
|
738
758
|
`);
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
db.exec(`ALTER TABLE sessions ADD COLUMN machine_id TEXT DEFAULT ''`);
|
|
743
|
-
}
|
|
744
|
-
if (!cols.some((c) => c.name === "cache_create_5m_tokens")) {
|
|
745
|
-
db.exec(`ALTER TABLE requests ADD COLUMN cache_create_5m_tokens INTEGER DEFAULT 0`);
|
|
759
|
+
addColumnIfMissing(db, "requests", "machine_id", `TEXT DEFAULT ''`);
|
|
760
|
+
addColumnIfMissing(db, "sessions", "machine_id", `TEXT DEFAULT ''`);
|
|
761
|
+
if (addColumnIfMissing(db, "requests", "cache_create_5m_tokens", "INTEGER DEFAULT 0")) {
|
|
746
762
|
db.exec(`UPDATE requests SET cache_create_5m_tokens = cache_create_tokens WHERE cache_create_5m_tokens = 0`);
|
|
747
763
|
}
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
if (
|
|
752
|
-
db.exec(`ALTER TABLE requests ADD COLUMN cost_basis TEXT DEFAULT 'estimated'`);
|
|
753
|
-
}
|
|
754
|
-
if (!cols.some((c) => c.name === "attribution_tag")) {
|
|
755
|
-
db.exec(`ALTER TABLE requests ADD COLUMN attribution_tag TEXT DEFAULT ''`);
|
|
756
|
-
}
|
|
757
|
-
if (!cols.some((c) => c.name === "updated_at")) {
|
|
758
|
-
db.exec(`ALTER TABLE requests ADD COLUMN updated_at TEXT DEFAULT ''`);
|
|
764
|
+
addColumnIfMissing(db, "requests", "cache_create_1h_tokens", "INTEGER DEFAULT 0");
|
|
765
|
+
addColumnIfMissing(db, "requests", "cost_basis", `TEXT DEFAULT 'estimated'`);
|
|
766
|
+
addColumnIfMissing(db, "requests", "attribution_tag", `TEXT DEFAULT ''`);
|
|
767
|
+
if (addColumnIfMissing(db, "requests", "updated_at", `TEXT DEFAULT ''`)) {
|
|
759
768
|
db.exec(`UPDATE requests SET updated_at = timestamp WHERE updated_at = '' OR updated_at IS NULL`);
|
|
760
769
|
}
|
|
761
|
-
|
|
762
|
-
db.exec(`ALTER TABLE requests ADD COLUMN synced_at TEXT DEFAULT ''`);
|
|
763
|
-
}
|
|
770
|
+
addColumnIfMissing(db, "requests", "synced_at", `TEXT DEFAULT ''`);
|
|
764
771
|
for (const column of ["account_key", "account_tool", "account_name", "account_email", "account_source"]) {
|
|
765
|
-
|
|
766
|
-
db.exec(`ALTER TABLE requests ADD COLUMN ${column} TEXT DEFAULT ''`);
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
const sessionCols = db.prepare(`PRAGMA table_info(sessions)`).all();
|
|
770
|
-
if (!sessionCols.some((c) => c.name === "attribution_tag")) {
|
|
771
|
-
db.exec(`ALTER TABLE sessions ADD COLUMN attribution_tag TEXT DEFAULT ''`);
|
|
772
|
+
addColumnIfMissing(db, "requests", column, `TEXT DEFAULT ''`);
|
|
772
773
|
}
|
|
773
|
-
|
|
774
|
-
|
|
774
|
+
addColumnIfMissing(db, "sessions", "attribution_tag", `TEXT DEFAULT ''`);
|
|
775
|
+
if (addColumnIfMissing(db, "sessions", "updated_at", `TEXT DEFAULT ''`)) {
|
|
775
776
|
db.exec(`UPDATE sessions SET updated_at = started_at WHERE updated_at = '' OR updated_at IS NULL`);
|
|
776
777
|
}
|
|
777
|
-
|
|
778
|
-
db.exec(`ALTER TABLE sessions ADD COLUMN synced_at TEXT DEFAULT ''`);
|
|
779
|
-
}
|
|
778
|
+
addColumnIfMissing(db, "sessions", "synced_at", `TEXT DEFAULT ''`);
|
|
780
779
|
for (const column of ["account_key", "account_tool", "account_name", "account_email", "account_source"]) {
|
|
781
|
-
|
|
782
|
-
db.exec(`ALTER TABLE sessions ADD COLUMN ${column} TEXT DEFAULT ''`);
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
const pricingCols = db.prepare(`PRAGMA table_info(model_pricing)`).all();
|
|
786
|
-
if (!pricingCols.some((c) => c.name === "cache_write_1h_per_1m")) {
|
|
787
|
-
db.exec(`ALTER TABLE model_pricing ADD COLUMN cache_write_1h_per_1m REAL NOT NULL DEFAULT 0`);
|
|
788
|
-
}
|
|
789
|
-
if (!pricingCols.some((c) => c.name === "cache_storage_per_1m_hour")) {
|
|
790
|
-
db.exec(`ALTER TABLE model_pricing ADD COLUMN cache_storage_per_1m_hour REAL NOT NULL DEFAULT 0`);
|
|
780
|
+
addColumnIfMissing(db, "sessions", column, `TEXT DEFAULT ''`);
|
|
791
781
|
}
|
|
782
|
+
addColumnIfMissing(db, "model_pricing", "cache_write_1h_per_1m", "REAL NOT NULL DEFAULT 0");
|
|
783
|
+
addColumnIfMissing(db, "model_pricing", "cache_storage_per_1m_hour", "REAL NOT NULL DEFAULT 0");
|
|
792
784
|
db.exec(`
|
|
793
785
|
CREATE INDEX IF NOT EXISTS idx_requests_machine ON requests(machine_id);
|
|
794
786
|
CREATE INDEX IF NOT EXISTS idx_sessions_machine ON sessions(machine_id);
|