estela 0.2.0 → 0.2.2
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/README.md +5 -2
- package/dist/statusline-cache.d.ts +39 -10
- package/dist/statusline-cache.js +47 -14
- package/dist/statusline-run.js +11 -7
- package/dist/statusline.d.ts +2 -0
- package/dist/statusline.js +35 -21
- package/package.json +3 -1
- package/dist/billing/amortize.d.ts.map +0 -1
- package/dist/billing/amortize.js.map +0 -1
- package/dist/billing/amortize.test.d.ts +0 -2
- package/dist/billing/amortize.test.d.ts.map +0 -1
- package/dist/billing/amortize.test.js +0 -121
- package/dist/billing/amortize.test.js.map +0 -1
- package/dist/billing/assign.d.ts.map +0 -1
- package/dist/billing/assign.js.map +0 -1
- package/dist/billing/assign.test.d.ts +0 -2
- package/dist/billing/assign.test.d.ts.map +0 -1
- package/dist/billing/assign.test.js +0 -153
- package/dist/billing/assign.test.js.map +0 -1
- package/dist/billing/format.test.d.ts +0 -2
- package/dist/billing/format.test.d.ts.map +0 -1
- package/dist/billing/format.test.js +0 -110
- package/dist/billing/format.test.js.map +0 -1
- package/dist/billing/invoice.d.ts.map +0 -1
- package/dist/billing/invoice.js.map +0 -1
- package/dist/billing/invoice.test.d.ts +0 -2
- package/dist/billing/invoice.test.d.ts.map +0 -1
- package/dist/billing/invoice.test.js +0 -200
- package/dist/billing/invoice.test.js.map +0 -1
- package/dist/billing/localize.d.ts.map +0 -1
- package/dist/billing/localize.js.map +0 -1
- package/dist/billing/localize.test.d.ts +0 -2
- package/dist/billing/localize.test.d.ts.map +0 -1
- package/dist/billing/localize.test.js +0 -144
- package/dist/billing/localize.test.js.map +0 -1
- package/dist/billing/sessionize.d.ts.map +0 -1
- package/dist/billing/sessionize.js.map +0 -1
- package/dist/billing/sessionize.test.d.ts +0 -2
- package/dist/billing/sessionize.test.d.ts.map +0 -1
- package/dist/billing/sessionize.test.js +0 -187
- package/dist/billing/sessionize.test.js.map +0 -1
- package/dist/billing.d.ts.map +0 -1
- package/dist/billing.js.map +0 -1
- package/dist/bin.d.ts.map +0 -1
- package/dist/bin.js.map +0 -1
- package/dist/cli-badge.test.d.ts +0 -2
- package/dist/cli-badge.test.d.ts.map +0 -1
- package/dist/cli-badge.test.js +0 -118
- package/dist/cli-badge.test.js.map +0 -1
- package/dist/cli-idioma.test.d.ts +0 -2
- package/dist/cli-idioma.test.d.ts.map +0 -1
- package/dist/cli-idioma.test.js +0 -190
- package/dist/cli-idioma.test.js.map +0 -1
- package/dist/cli-import-recover.test.d.ts +0 -2
- package/dist/cli-import-recover.test.d.ts.map +0 -1
- package/dist/cli-import-recover.test.js +0 -191
- package/dist/cli-import-recover.test.js.map +0 -1
- package/dist/cli-quota.test.d.ts +0 -2
- package/dist/cli-quota.test.d.ts.map +0 -1
- package/dist/cli-quota.test.js +0 -281
- package/dist/cli-quota.test.js.map +0 -1
- package/dist/cli-statusline.test.d.ts +0 -2
- package/dist/cli-statusline.test.d.ts.map +0 -1
- package/dist/cli-statusline.test.js +0 -333
- package/dist/cli-statusline.test.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cloud/auth.d.ts.map +0 -1
- package/dist/cloud/auth.js.map +0 -1
- package/dist/cloud/client.d.ts.map +0 -1
- package/dist/cloud/client.js.map +0 -1
- package/dist/cloud/errors.test.d.ts +0 -2
- package/dist/cloud/errors.test.d.ts.map +0 -1
- package/dist/cloud/errors.test.js +0 -34
- package/dist/cloud/errors.test.js.map +0 -1
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js.map +0 -1
- package/dist/db/schema.test.d.ts +0 -2
- package/dist/db/schema.test.d.ts.map +0 -1
- package/dist/db/schema.test.js +0 -825
- package/dist/db/schema.test.js.map +0 -1
- package/dist/db/store.d.ts.map +0 -1
- package/dist/db/store.js.map +0 -1
- package/dist/demo.d.ts.map +0 -1
- package/dist/demo.js.map +0 -1
- package/dist/demo.test.d.ts +0 -2
- package/dist/demo.test.d.ts.map +0 -1
- package/dist/demo.test.js +0 -148
- package/dist/demo.test.js.map +0 -1
- package/dist/doctor.d.ts.map +0 -1
- package/dist/doctor.js.map +0 -1
- package/dist/doctor.test.d.ts +0 -2
- package/dist/doctor.test.d.ts.map +0 -1
- package/dist/doctor.test.js +0 -167
- package/dist/doctor.test.js.map +0 -1
- package/dist/export/badge.d.ts.map +0 -1
- package/dist/export/badge.js.map +0 -1
- package/dist/export/badge.test.d.ts +0 -2
- package/dist/export/badge.test.d.ts.map +0 -1
- package/dist/export/badge.test.js +0 -32
- package/dist/export/badge.test.js.map +0 -1
- package/dist/export/clockify.d.ts.map +0 -1
- package/dist/export/clockify.js.map +0 -1
- package/dist/export/clockify.test.d.ts +0 -2
- package/dist/export/clockify.test.d.ts.map +0 -1
- package/dist/export/clockify.test.js +0 -51
- package/dist/export/clockify.test.js.map +0 -1
- package/dist/export/csv.d.ts.map +0 -1
- package/dist/export/csv.js.map +0 -1
- package/dist/export/dates.d.ts.map +0 -1
- package/dist/export/dates.js.map +0 -1
- package/dist/export/idioma.test.d.ts +0 -2
- package/dist/export/idioma.test.d.ts.map +0 -1
- package/dist/export/idioma.test.js +0 -255
- package/dist/export/idioma.test.js.map +0 -1
- package/dist/export/invoice-pdf.d.ts.map +0 -1
- package/dist/export/invoice-pdf.js.map +0 -1
- package/dist/export/panel.d.ts.map +0 -1
- package/dist/export/panel.js.map +0 -1
- package/dist/export/panel.test.d.ts +0 -2
- package/dist/export/panel.test.d.ts.map +0 -1
- package/dist/export/panel.test.js +0 -386
- package/dist/export/panel.test.js.map +0 -1
- package/dist/export/pdf.d.ts.map +0 -1
- package/dist/export/pdf.js.map +0 -1
- package/dist/export/pdf.test.d.ts +0 -2
- package/dist/export/pdf.test.d.ts.map +0 -1
- package/dist/export/pdf.test.js +0 -172
- package/dist/export/pdf.test.js.map +0 -1
- package/dist/export/pixelfont.d.ts.map +0 -1
- package/dist/export/pixelfont.js.map +0 -1
- package/dist/export/png.d.ts.map +0 -1
- package/dist/export/png.js.map +0 -1
- package/dist/export/receipt.d.ts.map +0 -1
- package/dist/export/receipt.js.map +0 -1
- package/dist/export/receipt.test.d.ts +0 -2
- package/dist/export/receipt.test.d.ts.map +0 -1
- package/dist/export/receipt.test.js +0 -207
- package/dist/export/receipt.test.js.map +0 -1
- package/dist/export/share.d.ts.map +0 -1
- package/dist/export/share.js.map +0 -1
- package/dist/export/share.test.d.ts +0 -2
- package/dist/export/share.test.d.ts.map +0 -1
- package/dist/export/share.test.js +0 -116
- package/dist/export/share.test.js.map +0 -1
- package/dist/i18n/en.d.ts.map +0 -1
- package/dist/i18n/en.js.map +0 -1
- package/dist/i18n/i18n.test.d.ts +0 -2
- package/dist/i18n/i18n.test.d.ts.map +0 -1
- package/dist/i18n/i18n.test.js +0 -226
- package/dist/i18n/i18n.test.js.map +0 -1
- package/dist/i18n/index.d.ts.map +0 -1
- package/dist/i18n/index.js.map +0 -1
- package/dist/i18n/labels.d.ts.map +0 -1
- package/dist/i18n/labels.js.map +0 -1
- package/dist/metrics/index.d.ts.map +0 -1
- package/dist/metrics/index.js.map +0 -1
- package/dist/metrics/metrics.test.d.ts +0 -2
- package/dist/metrics/metrics.test.d.ts.map +0 -1
- package/dist/metrics/metrics.test.js +0 -162
- package/dist/metrics/metrics.test.js.map +0 -1
- package/dist/metrics/people.d.ts.map +0 -1
- package/dist/metrics/people.js.map +0 -1
- package/dist/metrics/people.test.d.ts +0 -2
- package/dist/metrics/people.test.d.ts.map +0 -1
- package/dist/metrics/people.test.js +0 -92
- package/dist/metrics/people.test.js.map +0 -1
- package/dist/metrics/quota.d.ts.map +0 -1
- package/dist/metrics/quota.js.map +0 -1
- package/dist/metrics/quota.test.d.ts +0 -2
- package/dist/metrics/quota.test.d.ts.map +0 -1
- package/dist/metrics/quota.test.js +0 -325
- package/dist/metrics/quota.test.js.map +0 -1
- package/dist/metrics/team.d.ts.map +0 -1
- package/dist/metrics/team.js.map +0 -1
- package/dist/metrics/team.test.d.ts +0 -2
- package/dist/metrics/team.test.d.ts.map +0 -1
- package/dist/metrics/team.test.js +0 -90
- package/dist/metrics/team.test.js.map +0 -1
- package/dist/node-version.d.ts.map +0 -1
- package/dist/node-version.js.map +0 -1
- package/dist/node-version.test.d.ts +0 -2
- package/dist/node-version.test.d.ts.map +0 -1
- package/dist/node-version.test.js +0 -53
- package/dist/node-version.test.js.map +0 -1
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js.map +0 -1
- package/dist/paths.test.d.ts +0 -2
- package/dist/paths.test.d.ts.map +0 -1
- package/dist/paths.test.js +0 -32
- package/dist/paths.test.js.map +0 -1
- package/dist/pricing/catalog.d.ts.map +0 -1
- package/dist/pricing/catalog.js.map +0 -1
- package/dist/pricing/cost.d.ts.map +0 -1
- package/dist/pricing/cost.js.map +0 -1
- package/dist/pricing/cost.test.d.ts +0 -2
- package/dist/pricing/cost.test.d.ts.map +0 -1
- package/dist/pricing/cost.test.js +0 -100
- package/dist/pricing/cost.test.js.map +0 -1
- package/dist/project-of.d.ts.map +0 -1
- package/dist/project-of.js.map +0 -1
- package/dist/project-of.test.d.ts +0 -2
- package/dist/project-of.test.d.ts.map +0 -1
- package/dist/project-of.test.js +0 -203
- package/dist/project-of.test.js.map +0 -1
- package/dist/publish.d.ts.map +0 -1
- package/dist/publish.js.map +0 -1
- package/dist/publish.test.d.ts +0 -2
- package/dist/publish.test.d.ts.map +0 -1
- package/dist/publish.test.js +0 -113
- package/dist/publish.test.js.map +0 -1
- package/dist/quota.d.ts.map +0 -1
- package/dist/quota.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/server.test.d.ts +0 -2
- package/dist/server.test.d.ts.map +0 -1
- package/dist/server.test.js +0 -402
- package/dist/server.test.js.map +0 -1
- package/dist/setup.d.ts.map +0 -1
- package/dist/setup.js.map +0 -1
- package/dist/setup.test.d.ts +0 -2
- package/dist/setup.test.d.ts.map +0 -1
- package/dist/setup.test.js +0 -144
- package/dist/setup.test.js.map +0 -1
- package/dist/statusline-cache.d.ts.map +0 -1
- package/dist/statusline-cache.js.map +0 -1
- package/dist/statusline-install.d.ts.map +0 -1
- package/dist/statusline-install.js.map +0 -1
- package/dist/statusline-run.d.ts.map +0 -1
- package/dist/statusline-run.js.map +0 -1
- package/dist/statusline.d.ts.map +0 -1
- package/dist/statusline.js.map +0 -1
- package/dist/statusline.test.d.ts +0 -2
- package/dist/statusline.test.d.ts.map +0 -1
- package/dist/statusline.test.js +0 -197
- package/dist/statusline.test.js.map +0 -1
- package/dist/sync/team.d.ts.map +0 -1
- package/dist/sync/team.js.map +0 -1
- package/dist/sync/team.test.d.ts +0 -2
- package/dist/sync/team.test.d.ts.map +0 -1
- package/dist/sync/team.test.js +0 -102
- package/dist/sync/team.test.js.map +0 -1
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js.map +0 -1
- package/dist/sync.test.d.ts +0 -2
- package/dist/sync.test.d.ts.map +0 -1
- package/dist/sync.test.js +0 -151
- package/dist/sync.test.js.map +0 -1
- package/dist/team.d.ts.map +0 -1
- package/dist/team.js.map +0 -1
- package/dist/team.test.d.ts +0 -2
- package/dist/team.test.d.ts.map +0 -1
- package/dist/team.test.js +0 -163
- package/dist/team.test.js.map +0 -1
- package/dist/updateCheck.d.ts.map +0 -1
- package/dist/updateCheck.js.map +0 -1
- package/dist/updateCheck.test.d.ts +0 -2
- package/dist/updateCheck.test.d.ts.map +0 -1
- package/dist/updateCheck.test.js +0 -27
- package/dist/updateCheck.test.js.map +0 -1
- package/dist/watchers/agents.d.ts.map +0 -1
- package/dist/watchers/agents.js.map +0 -1
- package/dist/watchers/agents.test.d.ts +0 -2
- package/dist/watchers/agents.test.d.ts.map +0 -1
- package/dist/watchers/agents.test.js +0 -96
- package/dist/watchers/agents.test.js.map +0 -1
- package/dist/watchers/claude.d.ts.map +0 -1
- package/dist/watchers/claude.js.map +0 -1
- package/dist/watchers/claude.test.d.ts +0 -2
- package/dist/watchers/claude.test.d.ts.map +0 -1
- package/dist/watchers/claude.test.js +0 -180
- package/dist/watchers/claude.test.js.map +0 -1
- package/dist/watchers/codex.d.ts.map +0 -1
- package/dist/watchers/codex.js.map +0 -1
- package/dist/watchers/codex.test.d.ts +0 -2
- package/dist/watchers/codex.test.d.ts.map +0 -1
- package/dist/watchers/codex.test.js +0 -207
- package/dist/watchers/codex.test.js.map +0 -1
- package/dist/watchers/copilot.d.ts.map +0 -1
- package/dist/watchers/copilot.js.map +0 -1
- package/dist/watchers/copilot.test.d.ts +0 -2
- package/dist/watchers/copilot.test.d.ts.map +0 -1
- package/dist/watchers/copilot.test.js +0 -98
- package/dist/watchers/copilot.test.js.map +0 -1
- package/dist/watchers/git.d.ts.map +0 -1
- package/dist/watchers/git.js.map +0 -1
- package/dist/watchers/git.test.d.ts +0 -2
- package/dist/watchers/git.test.d.ts.map +0 -1
- package/dist/watchers/git.test.js +0 -75
- package/dist/watchers/git.test.js.map +0 -1
- package/dist/watchers/identity.d.ts.map +0 -1
- package/dist/watchers/identity.js.map +0 -1
- package/dist/watchers/identity.test.d.ts +0 -2
- package/dist/watchers/identity.test.d.ts.map +0 -1
- package/dist/watchers/identity.test.js +0 -48
- package/dist/watchers/identity.test.js.map +0 -1
- package/dist/web-ui.test.d.ts +0 -2
- package/dist/web-ui.test.d.ts.map +0 -1
- package/dist/web-ui.test.js +0 -414
- package/dist/web-ui.test.js.map +0 -1
- package/dist/workitems.test.d.ts +0 -2
- package/dist/workitems.test.d.ts.map +0 -1
- package/dist/workitems.test.js +0 -59
- package/dist/workitems.test.js.map +0 -1
package/dist/cli-quota.test.js
DELETED
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
40
|
-
const node_child_process_1 = require("node:child_process");
|
|
41
|
-
const node_fs_1 = require("node:fs");
|
|
42
|
-
const node_os_1 = require("node:os");
|
|
43
|
-
const node_path_1 = require("node:path");
|
|
44
|
-
const node_test_1 = require("node:test");
|
|
45
|
-
const schema_js_1 = require("./db/schema.js");
|
|
46
|
-
const store = __importStar(require("./db/store.js"));
|
|
47
|
-
const quota_js_1 = require("./metrics/quota.js");
|
|
48
|
-
/**
|
|
49
|
-
* `estela quota`, ejecutando la CLI de verdad.
|
|
50
|
-
*
|
|
51
|
-
* Cada prueba corre con un HOME temporal: el refresco lee los transcripts de
|
|
52
|
-
* ~/.claude, y un test no puede ni leer los de quien lo ejecuta ni depender de
|
|
53
|
-
* que existan.
|
|
54
|
-
*/
|
|
55
|
-
const BIN = (0, node_path_1.join)(__dirname, "bin.js");
|
|
56
|
-
function estela(home, lang, ...args) {
|
|
57
|
-
const r = (0, node_child_process_1.spawnSync)(process.execPath, [BIN, ...args], {
|
|
58
|
-
encoding: "utf8",
|
|
59
|
-
env: { ...process.env, HOME: home, USERPROFILE: home, ESTELA_LANG: lang, NO_COLOR: "1" },
|
|
60
|
-
});
|
|
61
|
-
return { code: r.status, out: r.stdout, err: r.stderr };
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Datos fijos para la cuota, válidos a cualquier hora de cualquier día.
|
|
65
|
-
*
|
|
66
|
-
* No sirve la demo: pone las sesiones de Codex por la tarde, y un lunes por
|
|
67
|
-
* la mañana la semana aún no tiene ninguna — estos tests fallaban según el
|
|
68
|
-
* momento en que se ejecutaran. Aquí todo cae a mitad de camino entre el
|
|
69
|
-
* lunes a las 00:00 y ahora, que siempre es esta semana.
|
|
70
|
-
*/
|
|
71
|
-
function sembrarCuota(dbPath) {
|
|
72
|
-
const ahora = new Date();
|
|
73
|
-
const lunes = (0, quota_js_1.weekStart)(ahora);
|
|
74
|
-
const enEstaSemana = new Date((lunes.getTime() + ahora.getTime()) / 2);
|
|
75
|
-
const haceSemanas = (n) => new Date(lunes.getTime() - n * 7 * 86_400_000 + 3600_000);
|
|
76
|
-
let n = 0;
|
|
77
|
-
const t = (agent, at, repo, cacheRead) => ({
|
|
78
|
-
agent, turnId: `q${n++}`, sessionId: "s", at, model: agent === "codex" ? "gpt-5.6-sol" : "claude-sonnet-4-6", repoPath: repo, branch: "main",
|
|
79
|
-
tokens: { input: 1, output: 10, cacheRead, cacheWrite5m: 0, cacheWrite1h: 0 }, producerVersion: null,
|
|
80
|
-
});
|
|
81
|
-
const db = (0, schema_js_1.openDatabase)(dbPath);
|
|
82
|
-
try {
|
|
83
|
-
store.upsertClient(db, { id: "c", name: "C", currency: "EUR" });
|
|
84
|
-
for (const id of ["web", "api"]) {
|
|
85
|
-
store.upsertProject(db, { id, clientId: "c", name: id, repoPaths: [`/repos/${id}`], billable: true,
|
|
86
|
-
roundingMinutes: 0, aiCostPolicy: "absorbed", kind: "client" });
|
|
87
|
-
}
|
|
88
|
-
store.saveTurns(db, [
|
|
89
|
-
// Claude Code: seis semanas de historial, así que compara.
|
|
90
|
-
t("claude-code", haceSemanas(6), "/repos/web", 100),
|
|
91
|
-
t("claude-code", enEstaSemana, "/repos/web", 3000),
|
|
92
|
-
t("claude-code", enEstaSemana, "/repos/api", 1000),
|
|
93
|
-
// Uno reciente, para que haya una ventana de 5 h abierta (estimada).
|
|
94
|
-
t("claude-code", new Date(Math.max(lunes.getTime(), ahora.getTime() - 30 * 60_000)), "/repos/web", 10),
|
|
95
|
-
// Codex: empezó esta semana, así que no hay con qué comparar.
|
|
96
|
-
t("codex", enEstaSemana, "/repos/api", 500),
|
|
97
|
-
]);
|
|
98
|
-
}
|
|
99
|
-
finally {
|
|
100
|
-
db.close();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
function entorno() {
|
|
104
|
-
const home = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "estela-quota-"));
|
|
105
|
-
return { home, db: (0, node_path_1.join)(home, "estela.db") };
|
|
106
|
-
}
|
|
107
|
-
/** Un transcript de Claude Code con un turno de hace media hora, en `cwd`. */
|
|
108
|
-
function transcript(home, cwd, id, cacheRead) {
|
|
109
|
-
const dir = (0, node_path_1.join)(home, ".claude", "projects", "-proyecto");
|
|
110
|
-
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
111
|
-
const at = new Date(Date.now() - 30 * 60_000).toISOString();
|
|
112
|
-
const linea = JSON.stringify({
|
|
113
|
-
type: "assistant", timestamp: at, cwd, gitBranch: "main", version: "2.1.238", sessionId: "s1",
|
|
114
|
-
message: { id, model: "claude-sonnet-4-6",
|
|
115
|
-
usage: { input_tokens: 10, output_tokens: 100, cache_read_input_tokens: cacheRead,
|
|
116
|
-
cache_creation_input_tokens: 0 } },
|
|
117
|
-
});
|
|
118
|
-
// Dos veces la misma fila: Claude Code repite el turno en el transcript.
|
|
119
|
-
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, "sesion.jsonl"), `${linea}\n${linea}\n`);
|
|
120
|
-
}
|
|
121
|
-
(0, node_test_1.test)("sin nada guardado, lo dice y sugiere setup en vez de enseñar una tabla vacía", () => {
|
|
122
|
-
const { home, db } = entorno();
|
|
123
|
-
const r = estela(home, "es", "quota", "--db", db, "--no-refresh");
|
|
124
|
-
strict_1.default.equal(r.code, 0, r.err);
|
|
125
|
-
strict_1.default.match(r.out, /Sin turnos de agente guardados\. Empieza con: estela setup/);
|
|
126
|
-
strict_1.default.match(r.out, /no es el límite de tu plan/);
|
|
127
|
-
});
|
|
128
|
-
(0, node_test_1.test)("refresca los transcripts de esta semana antes de calcular, y un turno repetido cuenta una vez", () => {
|
|
129
|
-
const { home, db } = entorno();
|
|
130
|
-
transcript(home, "/repos/web", "msg_cuota_1", 5000);
|
|
131
|
-
const r = estela(home, "es", "quota", "--db", db, "--json");
|
|
132
|
-
strict_1.default.equal(r.code, 0, r.err);
|
|
133
|
-
const j = JSON.parse(r.out);
|
|
134
|
-
strict_1.default.equal(j.agents[0].agent, "claude-code");
|
|
135
|
-
// 10 + 100 + 5000, una sola vez aunque el transcript traiga la fila dos veces.
|
|
136
|
-
strict_1.default.equal(j.agents[0].week.total.total, 5110);
|
|
137
|
-
// Repetirlo no duplica: el turno ya está guardado.
|
|
138
|
-
const otra = JSON.parse(estela(home, "es", "quota", "--db", db, "--json").out);
|
|
139
|
-
strict_1.default.equal(otra.agents[0].week.total.total, 5110);
|
|
140
|
-
});
|
|
141
|
-
(0, node_test_1.test)("--no-refresh no lee transcripts: usa solo lo ya guardado", () => {
|
|
142
|
-
const { home, db } = entorno();
|
|
143
|
-
transcript(home, "/repos/web", "msg_cuota_2", 5000);
|
|
144
|
-
const r = estela(home, "es", "quota", "--db", db, "--no-refresh", "--json");
|
|
145
|
-
strict_1.default.equal(r.code, 0, r.err);
|
|
146
|
-
strict_1.default.deepEqual(JSON.parse(r.out).agents, []);
|
|
147
|
-
});
|
|
148
|
-
(0, node_test_1.test)("sobre la base de la demo nunca lee tus transcripts, aunque no se pase --no-refresh", () => {
|
|
149
|
-
// Mezclaría tu trabajo real con los datos inventados, justo lo que la demo
|
|
150
|
-
// promete no hacer.
|
|
151
|
-
const { home } = entorno();
|
|
152
|
-
const demo = (0, node_path_1.join)(home, "estela-demo.db");
|
|
153
|
-
(0, schema_js_1.openDatabase)(demo).close();
|
|
154
|
-
transcript(home, "/repos/web", "msg_real", 5000);
|
|
155
|
-
const r = estela(home, "es", "quota", "--db", demo, "--json");
|
|
156
|
-
strict_1.default.equal(r.code, 0, r.err);
|
|
157
|
-
const conn = (0, schema_js_1.openDatabase)(demo);
|
|
158
|
-
try {
|
|
159
|
-
strict_1.default.equal(store.firstTurnByAgent(conn).size, 0, "no se guardó ningún turno real en la demo");
|
|
160
|
-
}
|
|
161
|
-
finally {
|
|
162
|
-
conn.close();
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
(0, node_test_1.test)("--json es JSON y nada más: ni avisos ni cabeceras en la salida", () => {
|
|
166
|
-
const { home, db } = entorno();
|
|
167
|
-
sembrarCuota(db);
|
|
168
|
-
const r = estela(home, "es", "quota", "--db", db, "--no-refresh", "--json");
|
|
169
|
-
strict_1.default.equal(r.code, 0, r.err);
|
|
170
|
-
const j = JSON.parse(r.out);
|
|
171
|
-
strict_1.default.equal(j.windowIsEstimate, true);
|
|
172
|
-
strict_1.default.equal(j.windowHours, 5);
|
|
173
|
-
strict_1.default.deepEqual(j.agents.map((a) => a.agent), ["claude-code", "codex"]);
|
|
174
|
-
// Seis semanas de Claude Code y Codex recién empezado: uno compara, el otro no.
|
|
175
|
-
strict_1.default.equal(j.agents[0].comparison.status, "ok");
|
|
176
|
-
strict_1.default.equal(j.agents[1].comparison.status, "insufficient");
|
|
177
|
-
const shares = j.agents[0].week.projects.map((p) => p.share);
|
|
178
|
-
strict_1.default.ok(Math.abs(shares.reduce((s, x) => s + x, 0) - 1) < 0.001, "los porcentajes suman el 100 %");
|
|
179
|
-
});
|
|
180
|
-
(0, node_test_1.test)("la salida en texto, en los dos idiomas, sin promesas sobre lo que queda", () => {
|
|
181
|
-
const { home, db } = entorno();
|
|
182
|
-
sembrarCuota(db);
|
|
183
|
-
const es = estela(home, "es", "quota", "--db", db, "--no-refresh").out;
|
|
184
|
-
strict_1.default.match(es, /Claude Code — esta semana \(lun \d+ \w+ → hoy\)/);
|
|
185
|
-
strict_1.default.match(es, /Proyecto\s+Entrada\s+Salida\s+Lect\. caché\s+Escr\. caché\s+Total\s+%/);
|
|
186
|
-
strict_1.default.match(es, /Sin historial suficiente para comparar: hacen falta 4 semanas completas y hay \d\./);
|
|
187
|
-
strict_1.default.match(es, /La ventana de 5 h es una estimación/);
|
|
188
|
-
const en = estela(home, "en", "quota", "--db", db, "--no-refresh").out;
|
|
189
|
-
strict_1.default.match(en, /Claude Code — this week \(Mon \w+ \d+ → today\)/);
|
|
190
|
-
strict_1.default.match(en, /Project\s+Input\s+Output\s+Cache read\s+Cache write\s+Total\s+%/);
|
|
191
|
-
strict_1.default.match(en, /The 5-hour window is an estimate/);
|
|
192
|
-
// La regla que no se rompe: nada de "te quedan" ni de cuándo se acaba.
|
|
193
|
-
for (const out of [es, en]) {
|
|
194
|
-
strict_1.default.doesNotMatch(out, /te quedan|quedan \d|se te acaba|you have \d|left until|runs out/i);
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
(0, node_test_1.test)("Copilot queda fuera, y se dice en una línea", () => {
|
|
198
|
-
const { home, db } = entorno();
|
|
199
|
-
const conn = (0, schema_js_1.openDatabase)(db);
|
|
200
|
-
try {
|
|
201
|
-
store.saveTurns(conn, [{
|
|
202
|
-
agent: "copilot", turnId: "copilot:1:end", sessionId: "s", at: new Date(Date.now() - 60_000),
|
|
203
|
-
model: "gpt-4o", repoPath: "/repos/web", branch: null,
|
|
204
|
-
tokens: { input: 900, output: 100, cacheRead: 0, cacheWrite5m: 0, cacheWrite1h: 0 },
|
|
205
|
-
producerVersion: null,
|
|
206
|
-
}]);
|
|
207
|
-
}
|
|
208
|
-
finally {
|
|
209
|
-
conn.close();
|
|
210
|
-
}
|
|
211
|
-
const r = estela(home, "es", "quota", "--db", db, "--no-refresh");
|
|
212
|
-
strict_1.default.match(r.out, /Copilot no guarda tokens fiables y queda fuera de este cálculo\./);
|
|
213
|
-
strict_1.default.match(r.out, /Sin consumo de Claude Code ni Codex esta semana\./);
|
|
214
|
-
const j = JSON.parse(estela(home, "es", "quota", "--db", db, "--no-refresh", "--json").out);
|
|
215
|
-
strict_1.default.deepEqual(j.agents, []);
|
|
216
|
-
strict_1.default.deepEqual(j.excluded.map((e) => e.agent), ["copilot"]);
|
|
217
|
-
});
|
|
218
|
-
// ── La ventana que dio Claude Code ──────────────────────────────────────
|
|
219
|
-
/** Lo que haría Claude Code: llamar a la status line con su rate_limits. */
|
|
220
|
-
function statusline(home, db, resetsAt) {
|
|
221
|
-
(0, node_child_process_1.spawnSync)(process.execPath, [BIN, "statusline", "--db", db, "--no-color"], {
|
|
222
|
-
encoding: "utf8",
|
|
223
|
-
input: JSON.stringify({ workspace: { project_dir: "/repos/web" },
|
|
224
|
-
rate_limits: { five_hour: { used_percentage: 40, resets_at: Math.floor(resetsAt.getTime() / 1000) } } }),
|
|
225
|
-
env: { ...process.env, HOME: home, USERPROFILE: home },
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
(0, node_test_1.test)("con el resets_at que guardó la status line, quota dice 'ventana actual' sin 'estimada'", () => {
|
|
229
|
-
const { home, db } = entorno();
|
|
230
|
-
sembrarCuota(db);
|
|
231
|
-
const reinicio = new Date(Date.now() + 2 * 3600_000);
|
|
232
|
-
statusline(home, db, reinicio);
|
|
233
|
-
strict_1.default.ok((0, node_fs_1.existsSync)((0, node_path_1.join)(home, "statusline.json")), "la status line lo guardó junto a la base");
|
|
234
|
-
const es = estela(home, "es", "quota", "--db", db, "--no-refresh").out;
|
|
235
|
-
strict_1.default.match(es, /Claude Code — ventana de 5 h actual: desde las \d\d:\d\d, termina a las \d\d:\d\d/);
|
|
236
|
-
strict_1.default.doesNotMatch(es, /Claude Code — ventana de 5 h actual \(estimada\)/);
|
|
237
|
-
strict_1.default.match(es, /La ventana de 5 h es la que da Claude Code/);
|
|
238
|
-
const j = JSON.parse(estela(home, "es", "quota", "--db", db, "--no-refresh", "--json").out);
|
|
239
|
-
const w = j.agents.find((a) => a.agent === "claude-code").window;
|
|
240
|
-
strict_1.default.equal(w.estimated, false);
|
|
241
|
-
strict_1.default.equal(new Date(w.start).getTime(), Math.floor(reinicio.getTime() / 1000) * 1000 - 5 * 3600_000, "empieza 5 h antes del reinicio");
|
|
242
|
-
});
|
|
243
|
-
(0, node_test_1.test)("un resets_at guardado hace más de 5 h ya no vale: vuelve la estimación", () => {
|
|
244
|
-
const { home, db } = entorno();
|
|
245
|
-
sembrarCuota(db);
|
|
246
|
-
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(home, "statusline.json"), JSON.stringify({ files: {}, fiveHour: {
|
|
247
|
-
resetsAt: new Date(Date.now() + 3600_000).toISOString(),
|
|
248
|
-
seenAt: new Date(Date.now() - 6 * 3600_000).toISOString(),
|
|
249
|
-
} }));
|
|
250
|
-
const es = estela(home, "es", "quota", "--db", db, "--no-refresh").out;
|
|
251
|
-
strict_1.default.match(es, /Claude Code — ventana de 5 h actual \(estimada\)/);
|
|
252
|
-
});
|
|
253
|
-
(0, node_test_1.test)("la status line no enseña nunca el resets_at, aunque lo guarde", () => {
|
|
254
|
-
const { home, db } = entorno();
|
|
255
|
-
sembrarCuota(db);
|
|
256
|
-
const r = (0, node_child_process_1.spawnSync)(process.execPath, [BIN, "statusline", "--db", db, "--no-color"], {
|
|
257
|
-
encoding: "utf8", env: { ...process.env, HOME: home, USERPROFILE: home, ESTELA_LANG: "es" },
|
|
258
|
-
input: JSON.stringify({ workspace: { project_dir: "/repos/web" },
|
|
259
|
-
rate_limits: { five_hour: { used_percentage: 40, resets_at: Math.floor(Date.now() / 1000) + 3600 } } }),
|
|
260
|
-
});
|
|
261
|
-
strict_1.default.match(r.stdout, /5 h 40 %/);
|
|
262
|
-
strict_1.default.doesNotMatch(r.stdout, /\d\d:\d\d|reinicia|resets/);
|
|
263
|
-
});
|
|
264
|
-
// ── --weighted ──────────────────────────────────────────────────────────
|
|
265
|
-
(0, node_test_1.test)("--weighted: % por precio de lista, con su nota; sin la bandera, por tokens", () => {
|
|
266
|
-
const { home, db } = entorno();
|
|
267
|
-
sembrarCuota(db);
|
|
268
|
-
const normal = estela(home, "es", "quota", "--db", db, "--no-refresh");
|
|
269
|
-
strict_1.default.doesNotMatch(normal.out, /Ponderado por precio de lista/);
|
|
270
|
-
const p = estela(home, "es", "quota", "--db", db, "--no-refresh", "--weighted");
|
|
271
|
-
strict_1.default.equal(p.code, 0, p.err);
|
|
272
|
-
strict_1.default.match(p.out, /Ponderado por precio de lista; no es cómo el proveedor cuenta tu límite\./);
|
|
273
|
-
const en = estela(home, "en", "quota", "--db", db, "--no-refresh", "--weighted");
|
|
274
|
-
strict_1.default.match(en.out, /Weighted by list price; this is not how the provider counts your limit\./);
|
|
275
|
-
const base = JSON.parse(estela(home, "es", "quota", "--db", db, "--no-refresh", "--json").out);
|
|
276
|
-
const pond = JSON.parse(estela(home, "es", "quota", "--db", db, "--no-refresh", "--json", "--weighted").out);
|
|
277
|
-
strict_1.default.equal(base.shareBasis, "tokens");
|
|
278
|
-
strict_1.default.equal(pond.shareBasis, "list-price");
|
|
279
|
-
strict_1.default.ok(pond.agents[0].week.projects.every((r) => typeof r.listCostMicroUsd === "number"));
|
|
280
|
-
});
|
|
281
|
-
//# sourceMappingURL=cli-quota.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-quota.test.js","sourceRoot":"","sources":["../src/cli-quota.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-statusline.test.d.ts","sourceRoot":"","sources":["../src/cli-statusline.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
40
|
-
const node_child_process_1 = require("node:child_process");
|
|
41
|
-
const node_fs_1 = require("node:fs");
|
|
42
|
-
const node_os_1 = require("node:os");
|
|
43
|
-
const node_path_1 = require("node:path");
|
|
44
|
-
const node_test_1 = require("node:test");
|
|
45
|
-
const shared_1 = require("@estela/shared");
|
|
46
|
-
const schema_js_1 = require("./db/schema.js");
|
|
47
|
-
const store = __importStar(require("./db/store.js"));
|
|
48
|
-
const statusline_js_1 = require("./statusline.js");
|
|
49
|
-
/**
|
|
50
|
-
* `estela statusline` como la ejecuta Claude Code: el JSON por stdin y la
|
|
51
|
-
* línea por stdout. Cada prueba con su HOME temporal: ni se lee ni se escribe
|
|
52
|
-
* nada de quien corre los tests.
|
|
53
|
-
*/
|
|
54
|
-
const BIN = (0, node_path_1.join)(__dirname, "bin.js");
|
|
55
|
-
function estela(home, args, input, env = {}) {
|
|
56
|
-
const t0 = performance.now();
|
|
57
|
-
const r = (0, node_child_process_1.spawnSync)(process.execPath, [BIN, ...args], {
|
|
58
|
-
encoding: "utf8", input: input ?? "",
|
|
59
|
-
env: { ...process.env, HOME: home, USERPROFILE: home, ESTELA_LANG: "es", COLUMNS: "", NO_COLOR: "",
|
|
60
|
-
CLAUDE_CONFIG_DIR: (0, node_path_1.join)(home, ".claude"), ...env },
|
|
61
|
-
});
|
|
62
|
-
return { code: r.status, out: r.stdout, err: r.stderr, ms: performance.now() - t0 };
|
|
63
|
-
}
|
|
64
|
-
function entorno() {
|
|
65
|
-
const home = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "estela-sl-"));
|
|
66
|
-
const repo = (0, node_path_1.join)(home, "repos", "web");
|
|
67
|
-
(0, node_fs_1.mkdirSync)(repo, { recursive: true });
|
|
68
|
-
return { home, repo, db: (0, node_path_1.join)(home, ".estela", "estela.db") };
|
|
69
|
-
}
|
|
70
|
-
function proyecto(db, repo, kind = "client") {
|
|
71
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(db, ".."), { recursive: true });
|
|
72
|
-
const conn = (0, schema_js_1.openDatabase)(db);
|
|
73
|
-
try {
|
|
74
|
-
store.upsertClient(conn, { id: "acme", name: "ACME", currency: "EUR" });
|
|
75
|
-
store.upsertProject(conn, { id: "web", clientId: "acme", name: "Web", repoPaths: [repo],
|
|
76
|
-
billable: true, roundingMinutes: 0, aiCostPolicy: "absorbed", kind });
|
|
77
|
-
}
|
|
78
|
-
finally {
|
|
79
|
-
conn.close();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/** Una línea de transcript de Claude Code, a `minutos` de ahora (hacia atrás). */
|
|
83
|
-
function linea(id, cwd, minutos, cacheRead = 1000) {
|
|
84
|
-
// Nunca antes de las 00:01 de hoy: el test no puede depender de la hora.
|
|
85
|
-
const hoy = new Date();
|
|
86
|
-
hoy.setHours(0, 1, 0, 0);
|
|
87
|
-
const at = new Date(Math.max(hoy.getTime(), Date.now() - minutos * 60_000));
|
|
88
|
-
return JSON.stringify({
|
|
89
|
-
type: "assistant", timestamp: at.toISOString(), cwd, gitBranch: "main", version: "2.1.238", sessionId: "s1",
|
|
90
|
-
message: { id, model: "claude-sonnet-4-6",
|
|
91
|
-
usage: { input_tokens: 10, output_tokens: 100, cache_read_input_tokens: cacheRead, cache_creation_input_tokens: 0 } },
|
|
92
|
-
}) + "\n";
|
|
93
|
-
}
|
|
94
|
-
function transcript(home) {
|
|
95
|
-
const dir = (0, node_path_1.join)(home, ".claude", "projects", "-repos-web");
|
|
96
|
-
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
97
|
-
return (0, node_path_1.join)(dir, "sesion.jsonl");
|
|
98
|
-
}
|
|
99
|
-
const entrada = (dir, extra = {}) => JSON.stringify({ workspace: { current_dir: dir, project_dir: dir }, ...extra });
|
|
100
|
-
const nc = ["statusline", "--no-color"];
|
|
101
|
-
// ── Lo que se enseña ────────────────────────────────────────────────────
|
|
102
|
-
(0, node_test_1.test)("con rate_limits enseña los dos porcentajes; sin ellos, ninguno", () => {
|
|
103
|
-
const { home, repo, db } = entorno();
|
|
104
|
-
proyecto(db, repo);
|
|
105
|
-
const con = estela(home, nc, entrada(repo, {
|
|
106
|
-
rate_limits: { five_hour: { used_percentage: 62, resets_at: 1 }, seven_day: { used_percentage: 38, resets_at: 2 } },
|
|
107
|
-
}));
|
|
108
|
-
strict_1.default.equal(con.code, 0);
|
|
109
|
-
strict_1.default.match(con.out, /^estela · ACME › Web · hoy 0m · semana 38 % · 5 h 62 %\n$/);
|
|
110
|
-
const sin = estela(home, nc, entrada(repo));
|
|
111
|
-
strict_1.default.equal(sin.out, "estela · ACME › Web · hoy 0m\n");
|
|
112
|
-
});
|
|
113
|
-
(0, node_test_1.test)("un directorio sin proyecto de Estela", () => {
|
|
114
|
-
const { home, repo, db } = entorno();
|
|
115
|
-
proyecto(db, repo);
|
|
116
|
-
// Fuera de git: no hay nada que configurar ahí, así que sin pista.
|
|
117
|
-
const r = estela(home, nc, entrada((0, node_path_1.join)(home, "otro")));
|
|
118
|
-
strict_1.default.equal(r.out, "estela · sin proyecto\n");
|
|
119
|
-
});
|
|
120
|
-
(0, node_test_1.test)("un repo sin proyecto: su raíz, también desde una subcarpeta, con la pista de setup", () => {
|
|
121
|
-
const { home, repo, db } = entorno();
|
|
122
|
-
proyecto(db, repo);
|
|
123
|
-
const otro = (0, node_path_1.join)(home, "repos", "facturas");
|
|
124
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(otro, ".git"), { recursive: true });
|
|
125
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(otro, "src", "api"), { recursive: true });
|
|
126
|
-
strict_1.default.equal(estela(home, nc, entrada((0, node_path_1.join)(otro, "src", "api"))).out, "estela · facturas (sin proyecto) · estela setup\n");
|
|
127
|
-
});
|
|
128
|
-
(0, node_test_1.test)("sin base de Estela todavía: sin proyecto, y no se crea ninguna base", () => {
|
|
129
|
-
const { home, repo, db } = entorno();
|
|
130
|
-
const r = estela(home, nc, entrada(repo));
|
|
131
|
-
strict_1.default.equal(r.code, 0);
|
|
132
|
-
strict_1.default.equal(r.out, "estela · sin proyecto\n");
|
|
133
|
-
strict_1.default.ok(!(0, node_fs_1.existsSync)(db), "la status line no es quien empieza a guardar datos");
|
|
134
|
-
// Sin base pero dentro de un repo, se nombra igualmente.
|
|
135
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(repo, ".git"));
|
|
136
|
-
strict_1.default.equal(estela(home, nc, entrada((0, node_path_1.join)(repo, "src"))).out, "estela · web (sin proyecto) · estela setup\n");
|
|
137
|
-
});
|
|
138
|
-
(0, node_test_1.test)("JSON inválido por stdin: imprime estela y sale con 0, sin trazas", () => {
|
|
139
|
-
const { home } = entorno();
|
|
140
|
-
for (const malo of ["esto no es json", "[1,2]", "{\"workspace\":"]) {
|
|
141
|
-
const r = estela(home, nc, malo);
|
|
142
|
-
strict_1.default.equal(r.code, 0, malo);
|
|
143
|
-
strict_1.default.equal(r.out, "estela\n", malo);
|
|
144
|
-
strict_1.default.equal(r.err, "", "ni por stderr");
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
(0, node_test_1.test)("una base corrupta tampoco rompe la línea", () => {
|
|
148
|
-
const { home, repo, db } = entorno();
|
|
149
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(db, ".."), { recursive: true });
|
|
150
|
-
(0, node_fs_1.writeFileSync)(db, "esto no es una base sqlite");
|
|
151
|
-
const r = estela(home, nc, entrada(repo));
|
|
152
|
-
strict_1.default.equal(r.code, 0);
|
|
153
|
-
strict_1.default.equal(r.out, "estela\n");
|
|
154
|
-
});
|
|
155
|
-
(0, node_test_1.test)("se recorta a COLUMNS", () => {
|
|
156
|
-
const { home, repo, db } = entorno();
|
|
157
|
-
proyecto(db, repo);
|
|
158
|
-
const limites = { rate_limits: { five_hour: { used_percentage: 62 }, seven_day: { used_percentage: 38 } } };
|
|
159
|
-
const ancho = estela(home, nc, entrada(repo, limites), { COLUMNS: "200" }).out.trimEnd();
|
|
160
|
-
const estrecho = estela(home, nc, entrada(repo, limites), { COLUMNS: "30" }).out.trimEnd();
|
|
161
|
-
strict_1.default.match(ancho, /5 h 62 %$/);
|
|
162
|
-
strict_1.default.ok(estrecho.length <= 30, estrecho);
|
|
163
|
-
strict_1.default.ok(estrecho.startsWith("estela · "), estrecho);
|
|
164
|
-
});
|
|
165
|
-
(0, node_test_1.test)("con color: estela en el verde de la marca", () => {
|
|
166
|
-
const { home, repo, db } = entorno();
|
|
167
|
-
proyecto(db, repo);
|
|
168
|
-
const r = estela(home, ["statusline"], entrada(repo));
|
|
169
|
-
strict_1.default.ok(r.out.startsWith("\x1b[38;2;70;192;167mestela"), JSON.stringify(r.out));
|
|
170
|
-
strict_1.default.doesNotMatch(estela(home, ["statusline"], entrada(repo), { NO_COLOR: "1" }).out, /\x1b/);
|
|
171
|
-
});
|
|
172
|
-
// ── Lectura incremental y horas ─────────────────────────────────────────
|
|
173
|
-
(0, node_test_1.test)("las horas de hoy son exactamente las que guarda import para los mismos turnos", () => {
|
|
174
|
-
const { home, repo, db } = entorno();
|
|
175
|
-
proyecto(db, repo);
|
|
176
|
-
const file = transcript(home);
|
|
177
|
-
(0, node_fs_1.writeFileSync)(file, [50, 44, 38, 31, 25, 12, 6].map((m, i) => linea(`msg_${i}`, repo, m)).join(""));
|
|
178
|
-
const linea1 = estela(home, nc, entrada(repo, { transcript_path: file }));
|
|
179
|
-
const hoy = /hoy (\S+)/.exec(linea1.out)?.[1];
|
|
180
|
-
strict_1.default.ok(hoy && hoy !== "0m", linea1.out);
|
|
181
|
-
// Ahora el import de verdad sobre esos mismos transcripts.
|
|
182
|
-
const imp = estela(home, ["import", "--db", db]);
|
|
183
|
-
strict_1.default.equal(imp.code, 0, imp.out + imp.err);
|
|
184
|
-
const conn = (0, schema_js_1.openDatabase)(db);
|
|
185
|
-
try {
|
|
186
|
-
const medidas = store.getTimeEntries(conn, "web")
|
|
187
|
-
.filter((e) => e.source === "agent" && (0, shared_1.localDate)(e.startedAt) === (0, shared_1.localDate)(new Date()))
|
|
188
|
-
.reduce((s, e) => s + e.seconds, 0);
|
|
189
|
-
strict_1.default.equal(hoy, (0, statusline_js_1.compactDuration)(medidas), "la status line y el informe dan la misma cifra");
|
|
190
|
-
}
|
|
191
|
-
finally {
|
|
192
|
-
conn.close();
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
(0, node_test_1.test)("lee solo lo nuevo: una línea a medias no se pierde ni se duplica", () => {
|
|
196
|
-
const { home, repo, db } = entorno();
|
|
197
|
-
proyecto(db, repo);
|
|
198
|
-
const file = transcript(home);
|
|
199
|
-
const a = linea("msg_a", repo, 20, 1000);
|
|
200
|
-
const b = linea("msg_b", repo, 10, 2000);
|
|
201
|
-
// La segunda línea aún se está escribiendo: le falta el final.
|
|
202
|
-
(0, node_fs_1.writeFileSync)(file, a + b.slice(0, 40));
|
|
203
|
-
estela(home, nc, entrada(repo, { transcript_path: file }));
|
|
204
|
-
const contar = () => {
|
|
205
|
-
const c = (0, schema_js_1.openDatabase)(db);
|
|
206
|
-
try {
|
|
207
|
-
return store.turnsBetween(c, new Date(0), new Date(Date.now() + 60_000)).map((t) => t.turnId).sort();
|
|
208
|
-
}
|
|
209
|
-
finally {
|
|
210
|
-
c.close();
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
strict_1.default.deepEqual(contar(), ["msg_a"]);
|
|
214
|
-
(0, node_fs_1.appendFileSync)(file, b.slice(40));
|
|
215
|
-
estela(home, nc, entrada(repo, { transcript_path: file }));
|
|
216
|
-
estela(home, nc, entrada(repo, { transcript_path: file }));
|
|
217
|
-
strict_1.default.deepEqual(contar(), ["msg_a", "msg_b"], "la línea completada entra una vez");
|
|
218
|
-
// El mismo turno repetido en el transcript (Claude Code lo hace) cuenta una vez.
|
|
219
|
-
(0, node_fs_1.appendFileSync)(file, b);
|
|
220
|
-
const r = JSON.parse(estela(home, ["quota", "--db", db, "--no-refresh", "--json"]).out);
|
|
221
|
-
strict_1.default.equal(r.agents[0].week.total.total, 110 + 1000 + 110 + 2000);
|
|
222
|
-
});
|
|
223
|
-
(0, node_test_1.test)("caché vacía y transcript que encoge: se vuelve a leer desde el principio", () => {
|
|
224
|
-
const { home, repo, db } = entorno();
|
|
225
|
-
proyecto(db, repo);
|
|
226
|
-
const file = transcript(home);
|
|
227
|
-
(0, node_fs_1.writeFileSync)(file, linea("msg_1", repo, 20) + linea("msg_2", repo, 15));
|
|
228
|
-
estela(home, nc, entrada(repo, { transcript_path: file }));
|
|
229
|
-
(0, node_fs_1.writeFileSync)(file, linea("msg_3", repo, 5));
|
|
230
|
-
const r = estela(home, nc, entrada(repo, { transcript_path: file }));
|
|
231
|
-
strict_1.default.equal(r.code, 0);
|
|
232
|
-
const c = (0, schema_js_1.openDatabase)(db);
|
|
233
|
-
try {
|
|
234
|
-
strict_1.default.ok(store.turnsBetween(c, new Date(0), new Date(Date.now() + 60_000)).some((t) => t.turnId === "msg_3"));
|
|
235
|
-
}
|
|
236
|
-
finally {
|
|
237
|
-
c.close();
|
|
238
|
-
}
|
|
239
|
-
});
|
|
240
|
-
(0, node_test_1.test)("este proyecto: su parte de los tokens de Claude Code de la semana", () => {
|
|
241
|
-
const { home, repo, db } = entorno();
|
|
242
|
-
proyecto(db, repo);
|
|
243
|
-
const otro = (0, node_path_1.join)(home, "repos", "otro");
|
|
244
|
-
const file = transcript(home);
|
|
245
|
-
(0, node_fs_1.writeFileSync)(file, linea("m1", repo, 30, 2890) + linea("m2", otro, 20, 8890));
|
|
246
|
-
const r = estela(home, nc, entrada(repo, { transcript_path: file }));
|
|
247
|
-
// 3000 de 12000 tokens: el 25 %.
|
|
248
|
-
strict_1.default.match(r.out, /este proyecto 25 %/);
|
|
249
|
-
});
|
|
250
|
-
(0, node_test_1.test)("rápida: por debajo de 100 ms en una máquina normal", () => {
|
|
251
|
-
const { home, repo, db } = entorno();
|
|
252
|
-
proyecto(db, repo);
|
|
253
|
-
const file = transcript(home);
|
|
254
|
-
(0, node_fs_1.writeFileSync)(file, Array.from({ length: 300 }, (_, i) => linea(`p${i}`, repo, 300 - i)).join(""));
|
|
255
|
-
estela(home, nc, entrada(repo, { transcript_path: file })); // la primera lee el fichero entero
|
|
256
|
-
// El mejor de cinco: los tests corren en paralelo y comparten CPU, así que
|
|
257
|
-
// se mide con margen. La medida limpia, a mano, da unos 50 ms.
|
|
258
|
-
const mejor = Math.min(...Array.from({ length: 5 }, () => estela(home, nc, entrada(repo, { transcript_path: file })).ms));
|
|
259
|
-
strict_1.default.ok(mejor < 250, `${mejor.toFixed(0)} ms`);
|
|
260
|
-
});
|
|
261
|
-
// ── install / uninstall de verdad ───────────────────────────────────────
|
|
262
|
-
(0, node_test_1.test)("install fusiona en ~/.claude/settings.json con copia; uninstall lo deja como estaba", () => {
|
|
263
|
-
const { home } = entorno();
|
|
264
|
-
const dir = (0, node_path_1.join)(home, ".claude");
|
|
265
|
-
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
266
|
-
const path = (0, node_path_1.join)(dir, "settings.json");
|
|
267
|
-
const original = JSON.stringify({ model: "opus", permissions: { allow: ["Bash(ls)"] } }, null, 2) + "\n";
|
|
268
|
-
(0, node_fs_1.writeFileSync)(path, original);
|
|
269
|
-
const i = estela(home, ["statusline", "install"]);
|
|
270
|
-
strict_1.default.equal(i.code, 0, i.out + i.err);
|
|
271
|
-
const tras = JSON.parse((0, node_fs_1.readFileSync)(path, "utf8"));
|
|
272
|
-
strict_1.default.deepEqual(tras["statusLine"], { type: "command", command: "estela statusline", padding: 0 });
|
|
273
|
-
strict_1.default.deepEqual(tras["permissions"], { allow: ["Bash(ls)"] });
|
|
274
|
-
const copias = (0, node_fs_1.readdirSync)(dir).filter((n) => n.startsWith("settings.json.bak-"));
|
|
275
|
-
strict_1.default.equal(copias.length, 1);
|
|
276
|
-
strict_1.default.equal((0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, copias[0]), "utf8"), original, "la copia es el original");
|
|
277
|
-
const u = estela(home, ["statusline", "uninstall"]);
|
|
278
|
-
strict_1.default.equal(u.code, 0, u.out + u.err);
|
|
279
|
-
strict_1.default.deepEqual(JSON.parse((0, node_fs_1.readFileSync)(path, "utf8")), JSON.parse(original));
|
|
280
|
-
});
|
|
281
|
-
(0, node_test_1.test)("install con otra status line: la enseña, no escribe nada y sale con 1", () => {
|
|
282
|
-
const { home } = entorno();
|
|
283
|
-
const path = (0, node_path_1.join)(home, ".claude", "settings.json");
|
|
284
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(home, ".claude"), { recursive: true });
|
|
285
|
-
const ajena = JSON.stringify({ statusLine: { type: "command", command: "ccstatusline" } });
|
|
286
|
-
(0, node_fs_1.writeFileSync)(path, ajena);
|
|
287
|
-
const r = estela(home, ["statusline", "install"]);
|
|
288
|
-
strict_1.default.equal(r.code, 1);
|
|
289
|
-
strict_1.default.match(r.out, /ccstatusline/);
|
|
290
|
-
strict_1.default.match(r.out, /--append/);
|
|
291
|
-
strict_1.default.match(r.out, /--force/);
|
|
292
|
-
strict_1.default.equal((0, node_fs_1.readFileSync)(path, "utf8"), ajena, "no se tocó");
|
|
293
|
-
});
|
|
294
|
-
(0, node_test_1.test)("--append ejecuta la otra con el mismo stdin y enseña las dos", () => {
|
|
295
|
-
const { home, repo, db } = entorno();
|
|
296
|
-
proyecto(db, repo);
|
|
297
|
-
const r = estela(home, ["statusline", "--no-color", "--append", "cat >/dev/null; echo otra linea"], entrada(repo));
|
|
298
|
-
strict_1.default.equal(r.out, "estela · ACME › Web · hoy 0m | otra linea\n");
|
|
299
|
-
});
|
|
300
|
-
(0, node_test_1.test)("un turno de scratchpad se devuelve a su repo; si no se puede, no se guarda", () => {
|
|
301
|
-
// Guardarlo con la ruta del scratchpad lo dejaría así para siempre: el
|
|
302
|
-
// `import`, que sí sabría devolverlo, ya no podría reescribirlo (INSERT OR IGNORE).
|
|
303
|
-
const { home, repo, db } = entorno();
|
|
304
|
-
proyecto(db, repo);
|
|
305
|
-
const slug = repo.replace(/[/_.]/g, "-");
|
|
306
|
-
const delRepo = `/private/tmp/claude-502/${slug}/sesion/scratchpad`;
|
|
307
|
-
const ajeno = "/private/tmp/claude-502/-otro-sitio/sesion/scratchpad";
|
|
308
|
-
const file = transcript(home);
|
|
309
|
-
(0, node_fs_1.writeFileSync)(file, linea("sp_ok", delRepo, 20) + linea("sp_no", ajeno, 10));
|
|
310
|
-
estela(home, nc, entrada(repo, { transcript_path: file }));
|
|
311
|
-
const c = (0, schema_js_1.openDatabase)(db);
|
|
312
|
-
try {
|
|
313
|
-
const guardados = store.turnsBetween(c, new Date(0), new Date(Date.now() + 60_000));
|
|
314
|
-
strict_1.default.deepEqual(guardados.map((t) => [t.turnId, t.repoPath]), [["sp_ok", repo]]);
|
|
315
|
-
}
|
|
316
|
-
finally {
|
|
317
|
-
c.close();
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
(0, node_test_1.test)("una sesión en un worktree o en una subcarpeta enseña el proyecto del repo", () => {
|
|
321
|
-
const { home, repo, db } = entorno();
|
|
322
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(repo, ".git", "worktrees", "web-fix"), { recursive: true });
|
|
323
|
-
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(repo, ".git", "worktrees", "web-fix", "commondir"), "../..\n");
|
|
324
|
-
const wt = (0, node_path_1.join)(home, "repos", "web-fix");
|
|
325
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(wt, "src"), { recursive: true });
|
|
326
|
-
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(wt, ".git"), `gitdir: ${(0, node_path_1.join)(repo, ".git", "worktrees", "web-fix")}\n`);
|
|
327
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(repo, "packages", "api"), { recursive: true });
|
|
328
|
-
proyecto(db, repo);
|
|
329
|
-
for (const dir of [(0, node_path_1.join)(wt, "src"), (0, node_path_1.join)(repo, "packages", "api")]) {
|
|
330
|
-
strict_1.default.match(estela(home, nc, entrada(dir)).out, /^estela · ACME › Web · hoy/, dir);
|
|
331
|
-
}
|
|
332
|
-
});
|
|
333
|
-
//# sourceMappingURL=cli-statusline.test.js.map
|