@hasna/economy 0.5.7 → 0.5.9
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/CHANGELOG.md +15 -0
- package/dist/chunks/{billing-22az60hy.js → billing-7twygmtj.js} +2 -2
- package/dist/chunks/{config-hsp7ndhj.js → config-mjgbekxj.js} +2 -2
- package/dist/chunks/{index-9wa1f2kv.js → index-7ek4r0ww.js} +1 -1
- package/dist/chunks/{index-z2n5y111.js → index-92x56q4h.js} +5 -4
- package/dist/chunks/{index-wq7c4wqs.js → index-970htsxe.js} +2 -2
- package/dist/chunks/{index-vajzfzgv.js → index-ep1pkyr3.js} +1 -1
- package/dist/chunks/{index-dk5rq1rq.js → index-gtjqy0kd.js} +1 -1
- package/dist/chunks/{index-b6c649mq.js → index-spwpgdbb.js} +82 -7
- package/dist/chunks/{index-c7h2rxx1.js → index-t0n32g8r.js} +1 -1
- package/dist/chunks/{index-6yr4hb72.js → index-twkdyrw4.js} +2 -2
- package/dist/chunks/{index-f5jv6q5q.js → index-zgvmrqyc.js} +1 -1
- package/dist/chunks/{open-projects-8qm46m3d.js → open-projects-bj561k5j.js} +1 -1
- package/dist/chunks/{pricing-k9wsjwbz.js → pricing-bkgvzpe9.js} +1 -1
- package/dist/chunks/{pricing-462f8xkm.js → pricing-bn88mhqk.js} +1 -1
- package/dist/chunks/{pricing-vxejj1qa.js → pricing-nt31hf53.js} +1 -1
- package/dist/chunks/{serve-ms8dvf7e.js → serve-tmv8zgvh.js} +14 -8
- package/dist/chunks/{sqlite-store-ht6frztj.js → sqlite-store-8t4anw98.js} +2 -2
- package/dist/chunks/{sqlite-store-13nhr1z0.js → sqlite-store-jfy0e8b6.js} +2 -2
- package/dist/chunks/{sqlite-store-gamn65xp.js → sqlite-store-r219qrjt.js} +2 -2
- package/dist/chunks/{tui-9t7340wd.js → tui-j8brj3wf.js} +4 -4
- package/dist/chunks/{watch-t6ssnx30.js → watch-ksn2mezm.js} +5 -5
- package/dist/chunks/{webhooks-nw4daw9y.js → webhooks-td46p6gk.js} +2 -2
- package/dist/cli/index.js +38 -32
- package/dist/cost-imports/contract.d.ts +84 -0
- package/dist/cost-imports/contract.d.ts.map +1 -0
- package/dist/cost-imports/decimal.d.ts +6 -0
- package/dist/cost-imports/decimal.d.ts.map +1 -0
- package/dist/cost-imports/providers.d.ts +4 -0
- package/dist/cost-imports/providers.d.ts.map +1 -0
- package/dist/index.js +72 -12
- package/dist/lib/analytics.d.ts +3 -0
- package/dist/lib/analytics.d.ts.map +1 -1
- package/dist/lib/comparison-contract.d.ts +8 -0
- package/dist/lib/comparison-contract.d.ts.map +1 -0
- package/dist/lib/comparison-test-contract.d.ts +3 -0
- package/dist/lib/comparison-test-contract.d.ts.map +1 -0
- package/dist/lib/ingest-journal-maintenance.d.ts.map +1 -1
- package/dist/lib/store/index.d.ts.map +1 -1
- package/dist/mcp/index.js +75 -15
- package/dist/otel/index.js +7 -5
- package/dist/server/index.js +40 -6
- package/dist/server/service-operations.d.ts.map +1 -1
- package/dist/server/service-worker.js +40 -6
- package/docs/comparison-coverage.md +30 -0
- package/docs/ingest-journal.md +5 -1
- package/native/README.md +48 -0
- package/native/Tools/pair-qr.py +6 -1
- package/native/Tools/pair-qr.swift +19 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/store/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/store/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
MAX_INGEST_BYTES,
|
|
6
6
|
MAX_INGEST_ROWS,
|
|
7
7
|
assessCostFromDb,
|
|
8
|
+
buildCostSummary,
|
|
8
9
|
cacheDir,
|
|
9
10
|
calendarPeriodBounds,
|
|
10
11
|
calendarPeriodWhere,
|
|
@@ -75,7 +76,7 @@ import {
|
|
|
75
76
|
upsertUsageSnapshot,
|
|
76
77
|
usageSnapshotFilterForPeriod,
|
|
77
78
|
validateIngest
|
|
78
|
-
} from "../chunks/index-
|
|
79
|
+
} from "../chunks/index-ep1pkyr3.js";
|
|
79
80
|
import {
|
|
80
81
|
__require
|
|
81
82
|
} from "../chunks/index-p35cyhc4.js";
|
|
@@ -85,7 +86,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
85
86
|
// package.json
|
|
86
87
|
var package_default = {
|
|
87
88
|
name: "@hasna/economy",
|
|
88
|
-
version: "0.5.
|
|
89
|
+
version: "0.5.9",
|
|
89
90
|
description: "AI coding cost tracker \u2014 CLI + MCP server + REST API for Claude Code, Codex, OpenCode, Cursor, Pi, and Hermes, with legacy Gemini CLI session and Gemini API billing ingestion",
|
|
90
91
|
repository: {
|
|
91
92
|
type: "git",
|
|
@@ -1342,18 +1343,19 @@ class IngestJournalMaintenance {
|
|
|
1342
1343
|
throw new Error("Journal maintenance limit must be 1\u201332");
|
|
1343
1344
|
await this.recover();
|
|
1344
1345
|
await verifyJournalAuthority(this.journal, this.cloud);
|
|
1345
|
-
const
|
|
1346
|
+
const sweepDeadline = Date.now() + 30000;
|
|
1346
1347
|
let retired = 0, bytes = 0;
|
|
1347
1348
|
let backend;
|
|
1348
1349
|
try {
|
|
1349
1350
|
const names = this.journal.names();
|
|
1350
1351
|
for (const name of names.filter((n) => n.endsWith(".intent.json"))) {
|
|
1351
|
-
if (retired >= limit || Date.now() >=
|
|
1352
|
+
if (retired >= limit || Date.now() >= sweepDeadline || retired > 0 && bytes >= 1048576)
|
|
1352
1353
|
break;
|
|
1353
1354
|
if (!names.includes(name.replace(".intent.", ".receipt.")))
|
|
1354
1355
|
continue;
|
|
1355
1356
|
const intent = this.journal.intent(name), receipt = this.journal.receipt(intent.command);
|
|
1356
|
-
|
|
1357
|
+
const deadline = Date.now() + 30000;
|
|
1358
|
+
backend = await this.backend(deadline);
|
|
1357
1359
|
const m = {
|
|
1358
1360
|
version: 1,
|
|
1359
1361
|
target: this.journal.target,
|
|
@@ -1389,7 +1391,8 @@ class IngestJournalMaintenance {
|
|
|
1389
1391
|
try {
|
|
1390
1392
|
await this.maintain();
|
|
1391
1393
|
} catch (error) {
|
|
1392
|
-
|
|
1394
|
+
const deferrable = error instanceof JournalMaintenanceError && ["recovery_not_configured", "self_host_trash_authority_required", "trash_version_mismatch", "recovery_authority_unavailable"].includes(error.reason);
|
|
1395
|
+
if (!deferrable || exists(this.control) || !this.journal.canStage(command))
|
|
1393
1396
|
throw error;
|
|
1394
1397
|
}
|
|
1395
1398
|
if (!this.journal.canStage(command))
|
|
@@ -3705,7 +3708,7 @@ function backfillMachineId(db) {
|
|
|
3705
3708
|
return { requests: Number(reqCount.changes), sessions: Number(sessCount.changes) };
|
|
3706
3709
|
}
|
|
3707
3710
|
async function recalculateZeroCostRequests(db) {
|
|
3708
|
-
const { assessCostFromDb: assessCostFromDb2 } = await import("../chunks/pricing-
|
|
3711
|
+
const { assessCostFromDb: assessCostFromDb2 } = await import("../chunks/pricing-nt31hf53.js");
|
|
3709
3712
|
const zeroRows = db.prepare(`SELECT id, model, input_tokens, output_tokens, cache_read_tokens, cache_create_tokens, cache_create_5m_tokens, cache_create_1h_tokens
|
|
3710
3713
|
FROM requests
|
|
3711
3714
|
WHERE cost_usd = 0
|
|
@@ -3914,7 +3917,7 @@ async function postIngest(cloud, body) {
|
|
|
3914
3917
|
}
|
|
3915
3918
|
async function syncAllToCloud(cloud, opts = {}) {
|
|
3916
3919
|
await runIngestJournalOperation(cloud, { action: "reconcile" });
|
|
3917
|
-
const { openDatabase } = await import("../chunks/sqlite-store-
|
|
3920
|
+
const { openDatabase } = await import("../chunks/sqlite-store-jfy0e8b6.js");
|
|
3918
3921
|
const scratch = openDatabase(":memory:", true);
|
|
3919
3922
|
ensurePricingSeeded(scratch);
|
|
3920
3923
|
const cachePath = opts.cachePath ?? getIngestCachePath();
|
|
@@ -3948,6 +3951,54 @@ function syncOutcomeLines(result) {
|
|
|
3948
3951
|
return (result.collections ?? []).map((row) => `${row.source}: ${row.status}${row.error_code ? ` (${row.error_code})` : ""}`);
|
|
3949
3952
|
}
|
|
3950
3953
|
|
|
3954
|
+
// src/lib/comparison-contract.ts
|
|
3955
|
+
function comparisonDateBounds(from, to) {
|
|
3956
|
+
const valid = (value) => /^\d{4}-\d{2}-\d{2}$/.test(value) && Number.isFinite(Date.parse(value + "T00:00:00Z")) && new Date(value + "T00:00:00Z").toISOString().slice(0, 10) === value;
|
|
3957
|
+
if (!valid(from) || !valid(to) || from > to) {
|
|
3958
|
+
throw new RangeError("from and to must be real YYYY-MM-DD UTC dates with from <= to");
|
|
3959
|
+
}
|
|
3960
|
+
const end = new Date(to + "T00:00:00Z");
|
|
3961
|
+
end.setUTCDate(end.getUTCDate() + 1);
|
|
3962
|
+
const exclusive = end.toISOString().slice(0, 10);
|
|
3963
|
+
if (!valid(exclusive))
|
|
3964
|
+
throw new RangeError("to exceeds the supported UTC date range");
|
|
3965
|
+
return { time_zone: "UTC", start_date: from, end_date_exclusive: exclusive };
|
|
3966
|
+
}
|
|
3967
|
+
function requireCurrentRangeStats(value, from, to) {
|
|
3968
|
+
if (!value || typeof value !== "object")
|
|
3969
|
+
throw new Error("COMPARISON_REPORT_UNAVAILABLE: Invalid response");
|
|
3970
|
+
const report = value;
|
|
3971
|
+
let money;
|
|
3972
|
+
try {
|
|
3973
|
+
money = requireCurrentCostSummary(report.money);
|
|
3974
|
+
} catch {
|
|
3975
|
+
throw new Error("COMPARISON_REPORT_UNAVAILABLE: The service must support comparison coverage");
|
|
3976
|
+
}
|
|
3977
|
+
for (const key of ["sessions", "requests", "tokens"]) {
|
|
3978
|
+
if (!Number.isSafeInteger(report[key]) || report[key] < 0)
|
|
3979
|
+
throw new Error("COMPARISON_REPORT_UNAVAILABLE: Invalid " + key);
|
|
3980
|
+
}
|
|
3981
|
+
if (report.cost !== money.total_usd || report.requests !== money.request_rows || report.tokens !== money.tokens || money.session_only_sessions !== 0 || money.session_only_value_usd !== 0 || money.requests !== money.request_rows) {
|
|
3982
|
+
throw new Error("COMPARISON_REPORT_UNAVAILABLE: Inconsistent monetary coverage");
|
|
3983
|
+
}
|
|
3984
|
+
const knownRows = money.request_rows - money.unknown_price_requests;
|
|
3985
|
+
const completeness = money.request_rows === 0 ? "no_records" : money.unknown_price_requests === 0 ? "complete" : knownRows > 0 ? "partial" : "unavailable";
|
|
3986
|
+
if (money.completeness !== completeness || knownRows === 0 && money.total_usd !== 0 || money.sessions > money.request_rows || money.request_rows === 0 && money.tokens !== 0) {
|
|
3987
|
+
throw new Error("COMPARISON_REPORT_UNAVAILABLE: Inconsistent request coverage");
|
|
3988
|
+
}
|
|
3989
|
+
const bounds = money.period_bounds;
|
|
3990
|
+
if (!bounds.start_date || !bounds.end_date_exclusive || bounds.start_date >= bounds.end_date_exclusive) {
|
|
3991
|
+
throw new Error("COMPARISON_REPORT_UNAVAILABLE: Missing comparison dates");
|
|
3992
|
+
}
|
|
3993
|
+
if (from !== undefined || to !== undefined) {
|
|
3994
|
+
const expected = comparisonDateBounds(from, to);
|
|
3995
|
+
if (bounds.start_date !== expected.start_date || bounds.end_date_exclusive !== expected.end_date_exclusive) {
|
|
3996
|
+
throw new Error("COMPARISON_REPORT_UNAVAILABLE: Response dates do not match the requested range");
|
|
3997
|
+
}
|
|
3998
|
+
}
|
|
3999
|
+
return report;
|
|
4000
|
+
}
|
|
4001
|
+
|
|
3951
4002
|
// src/lib/store/index.ts
|
|
3952
4003
|
import { randomUUID } from "crypto";
|
|
3953
4004
|
|
|
@@ -4888,11 +4939,20 @@ function queryExportRows(db, type, period) {
|
|
|
4888
4939
|
return db.prepare(`SELECT * FROM economy_effective_sessions WHERE ${where} ORDER BY started_at DESC`).all();
|
|
4889
4940
|
}
|
|
4890
4941
|
function queryRangeStats(db, from, to) {
|
|
4891
|
-
const
|
|
4892
|
-
|
|
4893
|
-
|
|
4942
|
+
const bounds = comparisonDateBounds(from, to);
|
|
4943
|
+
const groups = db.prepare(`
|
|
4944
|
+
SELECT cost_basis, model, CASE WHEN cost_usd = 0 THEN 1 WHEN cost_usd < 0 THEN 2 ELSE 0 END AS zero_cost,
|
|
4945
|
+
SUM(cost_usd) AS cost_usd, COUNT(*) AS requests,
|
|
4946
|
+
COALESCE(SUM(input_tokens),0) AS input_tokens, COALESCE(SUM(output_tokens),0) AS output_tokens,
|
|
4947
|
+
COALESCE(SUM(cache_read_tokens),0) AS cache_read_tokens, COALESCE(SUM(cache_create_tokens),0) AS cache_create_tokens,
|
|
4948
|
+
COALESCE(SUM(cache_create_1h_tokens),0) AS cache_create_1h_tokens
|
|
4949
|
+
FROM economy_effective_requests WHERE DATE(timestamp) BETWEEN ? AND ?
|
|
4950
|
+
GROUP BY cost_basis, model, CASE WHEN cost_usd = 0 THEN 1 WHEN cost_usd < 0 THEN 2 ELSE 0 END
|
|
4951
|
+
`).all(from, to);
|
|
4952
|
+
const requestSessions = db.prepare("SELECT COUNT(DISTINCT session_id) AS sessions FROM economy_effective_requests WHERE DATE(timestamp) BETWEEN ? AND ?").get(from, to);
|
|
4953
|
+
const money = buildCostSummary("all", bounds, groups, { sessions: 0, requests: 0, tokens: 0, cost_usd: 0 }, requestSessions.sessions, listModelPricing(db));
|
|
4894
4954
|
const s = db.prepare(`SELECT COUNT(*) as sessions FROM economy_effective_sessions WHERE DATE(started_at) BETWEEN ? AND ?`).get(from, to);
|
|
4895
|
-
return { cost:
|
|
4955
|
+
return { cost: money.total_usd, money, requests: money.request_rows, tokens: money.tokens, sessions: s.sessions };
|
|
4896
4956
|
}
|
|
4897
4957
|
function queryForecast(db, now2 = new Date) {
|
|
4898
4958
|
const month = resolveReportingInterval({ kind: "calendar", period: "month" }, now2);
|
|
@@ -4956,7 +5016,7 @@ class LocalStore2 {
|
|
|
4956
5016
|
_db;
|
|
4957
5017
|
async db() {
|
|
4958
5018
|
if (!this._db) {
|
|
4959
|
-
const { openDatabase } = await import("../chunks/sqlite-store-
|
|
5019
|
+
const { openDatabase } = await import("../chunks/sqlite-store-jfy0e8b6.js");
|
|
4960
5020
|
this._db = openDatabase();
|
|
4961
5021
|
ensurePricingSeeded(this._db);
|
|
4962
5022
|
}
|
|
@@ -5233,7 +5293,7 @@ class ApiStore2 {
|
|
|
5233
5293
|
return cloudListItems(this.cloud, "export", q({ type, period }));
|
|
5234
5294
|
}
|
|
5235
5295
|
async rangeStats(from, to) {
|
|
5236
|
-
return cloudObject(this.cloud, "/compare", q({ from, to }));
|
|
5296
|
+
return requireCurrentRangeStats(await cloudObject(this.cloud, "/compare", q({ from, to })), from, to);
|
|
5237
5297
|
}
|
|
5238
5298
|
async forecast() {
|
|
5239
5299
|
return cloudObject(this.cloud, "/forecast");
|
|
@@ -5319,7 +5379,7 @@ function buildServer() {
|
|
|
5319
5379
|
let _db;
|
|
5320
5380
|
const localDb = async () => {
|
|
5321
5381
|
if (!_db) {
|
|
5322
|
-
const { openDatabase } = await import("../chunks/sqlite-store-
|
|
5382
|
+
const { openDatabase } = await import("../chunks/sqlite-store-jfy0e8b6.js");
|
|
5323
5383
|
_db = openDatabase();
|
|
5324
5384
|
ensurePricingSeeded(_db);
|
|
5325
5385
|
}
|
package/dist/otel/index.js
CHANGED
|
@@ -3281,18 +3281,19 @@ class IngestJournalMaintenance {
|
|
|
3281
3281
|
throw new Error("Journal maintenance limit must be 1\u201332");
|
|
3282
3282
|
await this.recover();
|
|
3283
3283
|
await verifyJournalAuthority(this.journal, this.cloud);
|
|
3284
|
-
const
|
|
3284
|
+
const sweepDeadline = Date.now() + 30000;
|
|
3285
3285
|
let retired = 0, bytes = 0;
|
|
3286
3286
|
let backend;
|
|
3287
3287
|
try {
|
|
3288
3288
|
const names = this.journal.names();
|
|
3289
3289
|
for (const name of names.filter((n) => n.endsWith(".intent.json"))) {
|
|
3290
|
-
if (retired >= limit || Date.now() >=
|
|
3290
|
+
if (retired >= limit || Date.now() >= sweepDeadline || retired > 0 && bytes >= 1048576)
|
|
3291
3291
|
break;
|
|
3292
3292
|
if (!names.includes(name.replace(".intent.", ".receipt.")))
|
|
3293
3293
|
continue;
|
|
3294
3294
|
const intent = this.journal.intent(name), receipt = this.journal.receipt(intent.command);
|
|
3295
|
-
|
|
3295
|
+
const deadline = Date.now() + 30000;
|
|
3296
|
+
backend = await this.backend(deadline);
|
|
3296
3297
|
const m = {
|
|
3297
3298
|
version: 1,
|
|
3298
3299
|
target: this.journal.target,
|
|
@@ -3328,7 +3329,8 @@ class IngestJournalMaintenance {
|
|
|
3328
3329
|
try {
|
|
3329
3330
|
await this.maintain();
|
|
3330
3331
|
} catch (error) {
|
|
3331
|
-
|
|
3332
|
+
const deferrable = error instanceof JournalMaintenanceError && ["recovery_not_configured", "self_host_trash_authority_required", "trash_version_mismatch", "recovery_authority_unavailable"].includes(error.reason);
|
|
3333
|
+
if (!deferrable || exists(this.control) || !this.journal.canStage(command))
|
|
3332
3334
|
throw error;
|
|
3333
3335
|
}
|
|
3334
3336
|
if (!this.journal.canStage(command))
|
|
@@ -3480,7 +3482,7 @@ async function pushIngestRows(cloud, scratch) {
|
|
|
3480
3482
|
// package.json
|
|
3481
3483
|
var package_default = {
|
|
3482
3484
|
name: "@hasna/economy",
|
|
3483
|
-
version: "0.5.
|
|
3485
|
+
version: "0.5.9",
|
|
3484
3486
|
description: "AI coding cost tracker \u2014 CLI + MCP server + REST API for Claude Code, Codex, OpenCode, Cursor, Pi, and Hermes, with legacy Gemini CLI session and Gemini API billing ingestion",
|
|
3485
3487
|
repository: {
|
|
3486
3488
|
type: "git",
|
package/dist/server/index.js
CHANGED
|
@@ -5578,7 +5578,7 @@ function isAuthorizedRequest(req, path) {
|
|
|
5578
5578
|
// package.json
|
|
5579
5579
|
var package_default = {
|
|
5580
5580
|
name: "@hasna/economy",
|
|
5581
|
-
version: "0.5.
|
|
5581
|
+
version: "0.5.9",
|
|
5582
5582
|
description: "AI coding cost tracker \u2014 CLI + MCP server + REST API for Claude Code, Codex, OpenCode, Cursor, Pi, and Hermes, with legacy Gemini CLI session and Gemini API billing ingestion",
|
|
5583
5583
|
repository: {
|
|
5584
5584
|
type: "git",
|
|
@@ -11839,6 +11839,25 @@ function buildBrief(db, opts = {}) {
|
|
|
11839
11839
|
};
|
|
11840
11840
|
}
|
|
11841
11841
|
|
|
11842
|
+
// src/lib/analytics.ts
|
|
11843
|
+
init_database();
|
|
11844
|
+
init_summary_contract();
|
|
11845
|
+
|
|
11846
|
+
// src/lib/comparison-contract.ts
|
|
11847
|
+
init_summary_contract();
|
|
11848
|
+
function comparisonDateBounds(from, to) {
|
|
11849
|
+
const valid = (value) => /^\d{4}-\d{2}-\d{2}$/.test(value) && Number.isFinite(Date.parse(value + "T00:00:00Z")) && new Date(value + "T00:00:00Z").toISOString().slice(0, 10) === value;
|
|
11850
|
+
if (!valid(from) || !valid(to) || from > to) {
|
|
11851
|
+
throw new RangeError("from and to must be real YYYY-MM-DD UTC dates with from <= to");
|
|
11852
|
+
}
|
|
11853
|
+
const end = new Date(to + "T00:00:00Z");
|
|
11854
|
+
end.setUTCDate(end.getUTCDate() + 1);
|
|
11855
|
+
const exclusive = end.toISOString().slice(0, 10);
|
|
11856
|
+
if (!valid(exclusive))
|
|
11857
|
+
throw new RangeError("to exceeds the supported UTC date range");
|
|
11858
|
+
return { time_zone: "UTC", start_date: from, end_date_exclusive: exclusive };
|
|
11859
|
+
}
|
|
11860
|
+
|
|
11842
11861
|
// src/lib/analytics.ts
|
|
11843
11862
|
function queryProjectDetail(db, nameOrPath, now = new Date) {
|
|
11844
11863
|
const dailyBounds = resolveReportingInterval({ kind: "rolling", unit: "day", count: 14 }, now);
|
|
@@ -11888,11 +11907,20 @@ function queryExportRows(db, type, period) {
|
|
|
11888
11907
|
return db.prepare(`SELECT * FROM economy_effective_sessions WHERE ${where} ORDER BY started_at DESC`).all();
|
|
11889
11908
|
}
|
|
11890
11909
|
function queryRangeStats(db, from, to) {
|
|
11891
|
-
const
|
|
11892
|
-
|
|
11893
|
-
|
|
11910
|
+
const bounds = comparisonDateBounds(from, to);
|
|
11911
|
+
const groups = db.prepare(`
|
|
11912
|
+
SELECT cost_basis, model, CASE WHEN cost_usd = 0 THEN 1 WHEN cost_usd < 0 THEN 2 ELSE 0 END AS zero_cost,
|
|
11913
|
+
SUM(cost_usd) AS cost_usd, COUNT(*) AS requests,
|
|
11914
|
+
COALESCE(SUM(input_tokens),0) AS input_tokens, COALESCE(SUM(output_tokens),0) AS output_tokens,
|
|
11915
|
+
COALESCE(SUM(cache_read_tokens),0) AS cache_read_tokens, COALESCE(SUM(cache_create_tokens),0) AS cache_create_tokens,
|
|
11916
|
+
COALESCE(SUM(cache_create_1h_tokens),0) AS cache_create_1h_tokens
|
|
11917
|
+
FROM economy_effective_requests WHERE DATE(timestamp) BETWEEN ? AND ?
|
|
11918
|
+
GROUP BY cost_basis, model, CASE WHEN cost_usd = 0 THEN 1 WHEN cost_usd < 0 THEN 2 ELSE 0 END
|
|
11919
|
+
`).all(from, to);
|
|
11920
|
+
const requestSessions = db.prepare("SELECT COUNT(DISTINCT session_id) AS sessions FROM economy_effective_requests WHERE DATE(timestamp) BETWEEN ? AND ?").get(from, to);
|
|
11921
|
+
const money = buildCostSummary("all", bounds, groups, { sessions: 0, requests: 0, tokens: 0, cost_usd: 0 }, requestSessions.sessions, listModelPricing(db));
|
|
11894
11922
|
const s = db.prepare(`SELECT COUNT(*) as sessions FROM economy_effective_sessions WHERE DATE(started_at) BETWEEN ? AND ?`).get(from, to);
|
|
11895
|
-
return { cost:
|
|
11923
|
+
return { cost: money.total_usd, money, requests: money.request_rows, tokens: money.tokens, sessions: s.sessions };
|
|
11896
11924
|
}
|
|
11897
11925
|
function queryForecast(db, now = new Date) {
|
|
11898
11926
|
const month = resolveReportingInterval({ kind: "calendar", period: "month" }, now);
|
|
@@ -12394,7 +12422,13 @@ function createDataHandler(db, actorId) {
|
|
|
12394
12422
|
const to = url.searchParams.get("to")?.trim();
|
|
12395
12423
|
if (!from || !to)
|
|
12396
12424
|
return err("from and to are required (YYYY-MM-DD)");
|
|
12397
|
-
|
|
12425
|
+
try {
|
|
12426
|
+
return ok(queryRangeStats(db, from, to));
|
|
12427
|
+
} catch (error) {
|
|
12428
|
+
if (error instanceof RangeError)
|
|
12429
|
+
return err(error.message);
|
|
12430
|
+
throw error;
|
|
12431
|
+
}
|
|
12398
12432
|
}
|
|
12399
12433
|
if (path === "/api/forecast" && method === "GET") {
|
|
12400
12434
|
return ok(queryForecast(db));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-operations.d.ts","sourceRoot":"","sources":["../../src/server/service-operations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAuCxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"service-operations.d.ts","sourceRoot":"","sources":["../../src/server/service-operations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAuCxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAokB5E,gHAAgH;AAChH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAe/G"}
|
|
@@ -7264,6 +7264,25 @@ function buildBrief(db, opts = {}) {
|
|
|
7264
7264
|
};
|
|
7265
7265
|
}
|
|
7266
7266
|
|
|
7267
|
+
// src/lib/analytics.ts
|
|
7268
|
+
init_database();
|
|
7269
|
+
init_summary_contract();
|
|
7270
|
+
|
|
7271
|
+
// src/lib/comparison-contract.ts
|
|
7272
|
+
init_summary_contract();
|
|
7273
|
+
function comparisonDateBounds(from, to) {
|
|
7274
|
+
const valid = (value) => /^\d{4}-\d{2}-\d{2}$/.test(value) && Number.isFinite(Date.parse(value + "T00:00:00Z")) && new Date(value + "T00:00:00Z").toISOString().slice(0, 10) === value;
|
|
7275
|
+
if (!valid(from) || !valid(to) || from > to) {
|
|
7276
|
+
throw new RangeError("from and to must be real YYYY-MM-DD UTC dates with from <= to");
|
|
7277
|
+
}
|
|
7278
|
+
const end = new Date(to + "T00:00:00Z");
|
|
7279
|
+
end.setUTCDate(end.getUTCDate() + 1);
|
|
7280
|
+
const exclusive = end.toISOString().slice(0, 10);
|
|
7281
|
+
if (!valid(exclusive))
|
|
7282
|
+
throw new RangeError("to exceeds the supported UTC date range");
|
|
7283
|
+
return { time_zone: "UTC", start_date: from, end_date_exclusive: exclusive };
|
|
7284
|
+
}
|
|
7285
|
+
|
|
7267
7286
|
// src/lib/analytics.ts
|
|
7268
7287
|
function queryProjectDetail(db, nameOrPath, now = new Date) {
|
|
7269
7288
|
const dailyBounds = resolveReportingInterval({ kind: "rolling", unit: "day", count: 14 }, now);
|
|
@@ -7313,11 +7332,20 @@ function queryExportRows(db, type, period) {
|
|
|
7313
7332
|
return db.prepare(`SELECT * FROM economy_effective_sessions WHERE ${where} ORDER BY started_at DESC`).all();
|
|
7314
7333
|
}
|
|
7315
7334
|
function queryRangeStats(db, from, to) {
|
|
7316
|
-
const
|
|
7317
|
-
|
|
7318
|
-
|
|
7335
|
+
const bounds = comparisonDateBounds(from, to);
|
|
7336
|
+
const groups = db.prepare(`
|
|
7337
|
+
SELECT cost_basis, model, CASE WHEN cost_usd = 0 THEN 1 WHEN cost_usd < 0 THEN 2 ELSE 0 END AS zero_cost,
|
|
7338
|
+
SUM(cost_usd) AS cost_usd, COUNT(*) AS requests,
|
|
7339
|
+
COALESCE(SUM(input_tokens),0) AS input_tokens, COALESCE(SUM(output_tokens),0) AS output_tokens,
|
|
7340
|
+
COALESCE(SUM(cache_read_tokens),0) AS cache_read_tokens, COALESCE(SUM(cache_create_tokens),0) AS cache_create_tokens,
|
|
7341
|
+
COALESCE(SUM(cache_create_1h_tokens),0) AS cache_create_1h_tokens
|
|
7342
|
+
FROM economy_effective_requests WHERE DATE(timestamp) BETWEEN ? AND ?
|
|
7343
|
+
GROUP BY cost_basis, model, CASE WHEN cost_usd = 0 THEN 1 WHEN cost_usd < 0 THEN 2 ELSE 0 END
|
|
7344
|
+
`).all(from, to);
|
|
7345
|
+
const requestSessions = db.prepare("SELECT COUNT(DISTINCT session_id) AS sessions FROM economy_effective_requests WHERE DATE(timestamp) BETWEEN ? AND ?").get(from, to);
|
|
7346
|
+
const money = buildCostSummary("all", bounds, groups, { sessions: 0, requests: 0, tokens: 0, cost_usd: 0 }, requestSessions.sessions, listModelPricing(db));
|
|
7319
7347
|
const s = db.prepare(`SELECT COUNT(*) as sessions FROM economy_effective_sessions WHERE DATE(started_at) BETWEEN ? AND ?`).get(from, to);
|
|
7320
|
-
return { cost:
|
|
7348
|
+
return { cost: money.total_usd, money, requests: money.request_rows, tokens: money.tokens, sessions: s.sessions };
|
|
7321
7349
|
}
|
|
7322
7350
|
function queryForecast(db, now = new Date) {
|
|
7323
7351
|
const month = resolveReportingInterval({ kind: "calendar", period: "month" }, now);
|
|
@@ -7426,7 +7454,7 @@ import { randomUUID } from "crypto";
|
|
|
7426
7454
|
// package.json
|
|
7427
7455
|
var package_default = {
|
|
7428
7456
|
name: "@hasna/economy",
|
|
7429
|
-
version: "0.5.
|
|
7457
|
+
version: "0.5.9",
|
|
7430
7458
|
description: "AI coding cost tracker \u2014 CLI + MCP server + REST API for Claude Code, Codex, OpenCode, Cursor, Pi, and Hermes, with legacy Gemini CLI session and Gemini API billing ingestion",
|
|
7431
7459
|
repository: {
|
|
7432
7460
|
type: "git",
|
|
@@ -7945,7 +7973,13 @@ function createDataHandler(db, actorId) {
|
|
|
7945
7973
|
const to = url.searchParams.get("to")?.trim();
|
|
7946
7974
|
if (!from || !to)
|
|
7947
7975
|
return err("from and to are required (YYYY-MM-DD)");
|
|
7948
|
-
|
|
7976
|
+
try {
|
|
7977
|
+
return ok(queryRangeStats(db, from, to));
|
|
7978
|
+
} catch (error) {
|
|
7979
|
+
if (error instanceof RangeError)
|
|
7980
|
+
return err(error.message);
|
|
7981
|
+
throw error;
|
|
7982
|
+
}
|
|
7949
7983
|
}
|
|
7950
7984
|
if (path === "/api/forecast" && method === "GET") {
|
|
7951
7985
|
return ok(queryForecast(db));
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Historical comparison coverage
|
|
2
|
+
|
|
3
|
+
The comparison endpoint returns request/token counts and session counts as before.
|
|
4
|
+
Its numeric `cost` field is a **known usage value subtotal**, following the same
|
|
5
|
+
contract as the summary report's `total_usd`. It is not a billed or paid amount.
|
|
6
|
+
|
|
7
|
+
`money` carries the full monetary evidence:
|
|
8
|
+
|
|
9
|
+
- `complete_total_usd` is null for incomplete or empty selected request data.
|
|
10
|
+
- Recorded metered amounts, estimated usage value and subscription-included
|
|
11
|
+
value are separate subtotals.
|
|
12
|
+
- Unknown billing basis and unavailable pricing remain explicit counts.
|
|
13
|
+
- `source_coverage: "not_established"` makes clear that completeness of the
|
|
14
|
+
selected stored records does not establish complete provider collection.
|
|
15
|
+
- UTC bounds identify the selected inclusive date range through an exclusive
|
|
16
|
+
ending date.
|
|
17
|
+
|
|
18
|
+
The CLI displays usage value as unavailable when the complete total is null,
|
|
19
|
+
alongside the known subtotal and coverage. It calculates a monetary percentage
|
|
20
|
+
only when both selected sets are complete and the baseline is nonzero.
|
|
21
|
+
Genuinely recorded free usage can be complete zero; no records cannot.
|
|
22
|
+
|
|
23
|
+
The hosted SDK refuses older responses without coverage and responses for a
|
|
24
|
+
different date range. Deploy the service support before relying on a new
|
|
25
|
+
comparison client. No stored original amount or billing classification is
|
|
26
|
+
rewritten by this read-only reporting correction.
|
|
27
|
+
|
|
28
|
+
Comparison usage values cover request rows. Lifetime-only session amounts are
|
|
29
|
+
not allocated to dates by this endpoint. Session counts retain the existing
|
|
30
|
+
started-within-range definition.
|
package/docs/ingest-journal.md
CHANGED
|
@@ -35,7 +35,11 @@ closed. No operator input can relabel an uncertain intent as rejected.
|
|
|
35
35
|
|
|
36
36
|
A bounded sweep starts at 64 commands, 48 MiB, or insufficient next-command
|
|
37
37
|
headroom. It retires at most 32 pairs or approximately 1 MiB per pass; a single
|
|
38
|
-
large pair is handled individually.
|
|
38
|
+
large pair is handled individually. A sweep admits new transactions for up to
|
|
39
|
+
30 seconds; each admitted transaction has its own 30-second deadline for all
|
|
40
|
+
three captures. The last transaction may finish after admission closes, so this
|
|
41
|
+
phase can take up to 60 seconds. Prerequisite recovery and authority checks have
|
|
42
|
+
their own bounds.
|
|
39
43
|
The active journal remains bounded; Trash's recoverable remote retention and
|
|
40
44
|
unfinished transfer staging are governed by Trash's own policy.
|
|
41
45
|
|
package/native/README.md
CHANGED
|
@@ -149,3 +149,51 @@ fixture checks. Owner-facing screen captures go through Designs.
|
|
|
149
149
|
Apple references: [MenuBarExtra](https://developer.apple.com/documentation/swiftui/menubarextra),
|
|
150
150
|
[native design adoption](https://developer.apple.com/videos/play/wwdc2025/323/),
|
|
151
151
|
[application delegate adaptor](https://developer.apple.com/documentation/swiftui/nsapplicationdelegateadaptor).
|
|
152
|
+
|
|
153
|
+
## Vault-backed Mac release signing
|
|
154
|
+
|
|
155
|
+
When the exact approved Developer ID certificate is not in the login Keychain,
|
|
156
|
+
`Tools/prepare-signing.py` prepares a fresh private release Keychain. It does not
|
|
157
|
+
unlock the login Keychain, sign the application, submit it to Apple or install it.
|
|
158
|
+
Use the supported Secrets consumer to project these inputs directly to this
|
|
159
|
+
process: `ECONOMY_SIGNING_CERTIFICATE_B64` (DER certificate),
|
|
160
|
+
`ECONOMY_SIGNING_PRIVATE_KEY` (PEM), `ECONOMY_NOTARY_PRIVATE_KEY` (PEM),
|
|
161
|
+
`ECONOMY_NOTARY_KEY_ID` and `ECONOMY_NOTARY_ISSUER`. Resolve the approved
|
|
162
|
+
references and existing Apple team before execution. Never put their values in
|
|
163
|
+
arguments, output or repository files.
|
|
164
|
+
|
|
165
|
+
Run `python3 Tools/prepare-signing.py --output FRESH_SCRATCH_PATH --certificate EXACT_SHA1`.
|
|
166
|
+
The output must be a new directory under the session Scratchpad. The helper
|
|
167
|
+
imports credentials in memory, verifies the exact certificate, preserves the
|
|
168
|
+
existing ordered search-list entries and default Keychain, and binds access to codesign. Its
|
|
169
|
+
random password enters Apple's non-echoing prompt through its own terminal,
|
|
170
|
+
never the command arguments. Apple's notarytool requires a regular key file and
|
|
171
|
+
refuses stdin and FIFOs. The consumer writes that one input exclusively at mode
|
|
172
|
+
0600 inside its fresh mode 0700 directory and passes only its path. It stores the
|
|
173
|
+
profile in the encrypted Keychain; credential-consumer output is suppressed.
|
|
174
|
+
The receipt explicitly names the sensitive input awaiting recoverable cleanup.
|
|
175
|
+
If macOS registers the new Keychain, that owned addition is retained and reported
|
|
176
|
+
in the receipt. The helper never replaces the shared search list; concurrent
|
|
177
|
+
additions are retained. An explicit Keychain path also works without registration.
|
|
178
|
+
|
|
179
|
+
Pass the resulting absolute Keychain path with `--keychain` to the existing
|
|
180
|
+
`release.py sign-mac`, `submit-mac` and `check-mac` stages. Their separate
|
|
181
|
+
signature, exact artifact, submission and acceptance checks still apply.
|
|
182
|
+
Omitting the option retains the existing login-Keychain route. Preparation is
|
|
183
|
+
not signing or notarization proof.
|
|
184
|
+
|
|
185
|
+
Keep the preparation receipt and any failed artifact. Do not replay an uncertain
|
|
186
|
+
submission. On failure, timeout, Ctrl-C, HUP or TERM, preparation settles its own
|
|
187
|
+
child, locks the owned Keychain and inspects the original entries and default.
|
|
188
|
+
An incomplete lock or inspection is explicitly recovery-unverified. SIGKILL,
|
|
189
|
+
power loss and a killed parent cannot guarantee cleanup; inspect the retained
|
|
190
|
+
artifact before retrying. After confirmed profile storage, preserve/read back
|
|
191
|
+
the private input and remove that exact owned file through Trash; report pending
|
|
192
|
+
cleanup on failure and retain its restricted permissions. Never treat preparation
|
|
193
|
+
as complete release acceptance while sensitive cleanup remains. After the release,
|
|
194
|
+
lock the exact release Keychain,
|
|
195
|
+
preserve and read back its encrypted bytes through Trash, then retire only its
|
|
196
|
+
owned registration through the supported Keychain operation. Verify other
|
|
197
|
+
entries and the default remain; never replace the complete list during cleanup.
|
|
198
|
+
The Keychain has a 15-minute idle lock; an expired lock requires a fresh
|
|
199
|
+
preparation, not a password copied into a command or a login-Keychain change.
|
package/native/Tools/pair-qr.py
CHANGED
|
@@ -50,7 +50,12 @@ def owner_terminal():
|
|
|
50
50
|
parent, executable = int(fields[0]), fields[1]
|
|
51
51
|
if executable == '/System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal':
|
|
52
52
|
return True
|
|
53
|
-
|
|
53
|
+
process_name = Path(executable).name
|
|
54
|
+
# macOS Terminal reports login shells with a leading hyphen in comm.
|
|
55
|
+
# Normalize only the shell names already allowed by this boundary.
|
|
56
|
+
if process_name in ['-bash', '-zsh']:
|
|
57
|
+
process_name = process_name[1:]
|
|
58
|
+
if process_name not in ['Python', 'python3', 'bash', 'zsh', 'login', 'bun', 'secrets']:
|
|
54
59
|
return False
|
|
55
60
|
if parent <= 1 or parent == pid:
|
|
56
61
|
return False
|
|
@@ -116,8 +116,11 @@ func ownerTerminal(environment: [String: String], tty: Bool, parent: Int32,
|
|
|
116
116
|
for _ in 0..<12 {
|
|
117
117
|
guard let (next, executable) = lookup(pid) else { return false }
|
|
118
118
|
if executable == "/System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal" { return true }
|
|
119
|
+
var processName = URL(fileURLWithPath: executable).lastPathComponent
|
|
120
|
+
// Match the Python launcher: macOS prefixes login-shell names with '-'.
|
|
121
|
+
if ["-bash", "-zsh"].contains(processName) { processName.removeFirst() }
|
|
119
122
|
guard ["Python", "python3", "bash", "zsh", "login", "bun", "secrets", "swift", "swift-frontend"]
|
|
120
|
-
.contains(
|
|
123
|
+
.contains(processName), next > 1, next != pid else { return false }
|
|
121
124
|
pid = next
|
|
122
125
|
}
|
|
123
126
|
return false
|
|
@@ -142,6 +145,21 @@ func parentProcess(_ pid: Int32) -> (Int32, String)? {
|
|
|
142
145
|
|
|
143
146
|
func selfTest() {
|
|
144
147
|
let terminal = "/System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal"
|
|
148
|
+
for shell in ["-zsh", "-/bin/zsh", "-bash"] {
|
|
149
|
+
guard ownerTerminal(environment: [:], tty: true, parent: 100, lookup: { pid in
|
|
150
|
+
switch pid {
|
|
151
|
+
case 100: (200, "/usr/bin/python3")
|
|
152
|
+
case 200: (300, shell)
|
|
153
|
+
case 300: (400, "login")
|
|
154
|
+
default: (1, terminal)
|
|
155
|
+
}
|
|
156
|
+
}) else { fail("pair-qr self-test: FAIL (owner login shell)", 1) }
|
|
157
|
+
}
|
|
158
|
+
for harness in ["-codex", "-claude", "-opencode"] {
|
|
159
|
+
guard !ownerTerminal(environment: [:], tty: true, parent: 100, lookup: { pid in
|
|
160
|
+
pid == 100 ? (200, harness) : (1, terminal)
|
|
161
|
+
}) else { fail("pair-qr self-test: FAIL (captured login process)", 1) }
|
|
162
|
+
}
|
|
145
163
|
guard !ownerTerminal(environment: [:], tty: true, parent: 100, lookup: { _ in (200, "/runtime/codex") }),
|
|
146
164
|
!ownerTerminal(environment: [:], tty: false, parent: 100, lookup: { _ in (200, terminal) }),
|
|
147
165
|
!ownerTerminal(environment: ["CODEX_THREAD_ID": "fixture"], tty: true, parent: 100, lookup: { _ in (200, terminal) }),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/economy",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.9",
|
|
4
4
|
"description": "AI coding cost tracker — CLI + MCP server + REST API for Claude Code, Codex, OpenCode, Cursor, Pi, and Hermes, with legacy Gemini CLI session and Gemini API billing ingestion",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|