estela 0.1.26 → 0.1.31
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 +57 -4
- package/dist/billing/invoice.d.ts.map +1 -1
- package/dist/billing/invoice.js +2 -1
- package/dist/billing/invoice.js.map +1 -1
- package/dist/billing/localize.d.ts +37 -0
- package/dist/billing/localize.d.ts.map +1 -0
- package/dist/billing/localize.js +72 -0
- package/dist/billing/localize.js.map +1 -0
- package/dist/billing/localize.test.d.ts +2 -0
- package/dist/billing/localize.test.d.ts.map +1 -0
- package/dist/billing/localize.test.js +144 -0
- package/dist/billing/localize.test.js.map +1 -0
- package/dist/billing/sessionize.d.ts.map +1 -1
- package/dist/billing/sessionize.js +4 -7
- package/dist/billing/sessionize.js.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/bin.js.map +1 -1
- package/dist/cli-idioma.test.d.ts +2 -0
- package/dist/cli-idioma.test.d.ts.map +1 -0
- package/dist/cli-idioma.test.js +190 -0
- package/dist/cli-idioma.test.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +137 -49
- package/dist/cli.js.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +19 -2
- package/dist/db/schema.js.map +1 -1
- package/dist/db/schema.test.js +68 -4
- package/dist/db/schema.test.js.map +1 -1
- package/dist/db/store.d.ts.map +1 -1
- package/dist/db/store.js +7 -4
- package/dist/db/store.js.map +1 -1
- package/dist/export/csv.d.ts.map +1 -1
- package/dist/export/csv.js +49 -18
- package/dist/export/csv.js.map +1 -1
- package/dist/export/dates.d.ts +13 -0
- package/dist/export/dates.d.ts.map +1 -0
- package/dist/export/dates.js +29 -0
- package/dist/export/dates.js.map +1 -0
- package/dist/export/idioma.test.d.ts +2 -0
- package/dist/export/idioma.test.d.ts.map +1 -0
- package/dist/export/idioma.test.js +251 -0
- package/dist/export/idioma.test.js.map +1 -0
- package/dist/export/invoice-pdf.d.ts.map +1 -1
- package/dist/export/invoice-pdf.js +26 -22
- package/dist/export/invoice-pdf.js.map +1 -1
- package/dist/export/panel.d.ts.map +1 -1
- package/dist/export/panel.js +165 -94
- package/dist/export/panel.js.map +1 -1
- package/dist/export/panel.test.js +15 -8
- package/dist/export/panel.test.js.map +1 -1
- package/dist/export/share.d.ts.map +1 -1
- package/dist/export/share.js +6 -28
- package/dist/export/share.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +87 -11
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/i18n.test.js +25 -0
- package/dist/i18n/i18n.test.js.map +1 -1
- package/dist/i18n/index.d.ts +15 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +20 -0
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/labels.d.ts +12 -0
- package/dist/i18n/labels.d.ts.map +1 -0
- package/dist/i18n/labels.js +25 -0
- package/dist/i18n/labels.js.map +1 -0
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +3 -1
- package/dist/metrics/index.js.map +1 -1
- package/dist/node-version.d.ts +12 -0
- package/dist/node-version.d.ts.map +1 -1
- package/dist/node-version.js +17 -0
- package/dist/node-version.js.map +1 -1
- package/dist/node-version.test.js +18 -0
- package/dist/node-version.test.js.map +1 -1
- package/dist/pricing/catalog.d.ts.map +1 -1
- package/dist/pricing/catalog.js +23 -0
- package/dist/pricing/catalog.js.map +1 -1
- package/dist/pricing/cost.test.js +26 -0
- package/dist/pricing/cost.test.js.map +1 -1
- package/dist/publish.d.ts +6 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +5 -2
- package/dist/publish.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +35 -16
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +57 -0
- package/dist/server.test.js.map +1 -1
- package/dist/watchers/agents.d.ts +37 -0
- package/dist/watchers/agents.d.ts.map +1 -0
- package/dist/watchers/agents.js +30 -0
- package/dist/watchers/agents.js.map +1 -0
- package/dist/watchers/agents.test.d.ts +2 -0
- package/dist/watchers/agents.test.d.ts.map +1 -0
- package/dist/watchers/agents.test.js +94 -0
- package/dist/watchers/agents.test.js.map +1 -0
- package/dist/watchers/codex.d.ts +3 -0
- package/dist/watchers/codex.d.ts.map +1 -0
- package/dist/watchers/codex.js +263 -0
- package/dist/watchers/codex.js.map +1 -0
- package/dist/watchers/codex.test.d.ts +2 -0
- package/dist/watchers/codex.test.d.ts.map +1 -0
- package/dist/watchers/codex.test.js +207 -0
- package/dist/watchers/codex.test.js.map +1 -0
- package/node_modules/@estela/shared/dist/types.d.ts +8 -0
- package/node_modules/@estela/shared/dist/types.d.ts.map +1 -1
- package/node_modules/@estela/shared/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,8 +22,14 @@ isn't measured in keystrokes anymore: it goes into writing the prompt, reading
|
|
|
22
22
|
what comes back, and trying it out.
|
|
23
23
|
|
|
24
24
|
But that work **leaves a trail**. Claude Code saves every session in
|
|
25
|
-
`~/.claude/projects/`
|
|
26
|
-
|
|
25
|
+
`~/.claude/projects/` and Codex in `~/.codex/sessions/`, both with their exact
|
|
26
|
+
model and tokens. Git records when you committed and what. Estela reads all
|
|
27
|
+
three and lines them up.
|
|
28
|
+
|
|
29
|
+
Codex gives you **measured** hours and real AI cost, same as Claude Code. A
|
|
30
|
+
model that isn't in the price catalog gets an empty cost rather than an
|
|
31
|
+
invented one, and `estela doctor` tells you how many turns are in that
|
|
32
|
+
state.
|
|
27
33
|
|
|
28
34
|
What it doesn't do:
|
|
29
35
|
|
|
@@ -47,8 +53,26 @@ npx estela doctor # checks your data and flags anything wrong
|
|
|
47
53
|
npx estela --version
|
|
48
54
|
```
|
|
49
55
|
|
|
50
|
-
|
|
51
|
-
|
|
56
|
+
### From inside Claude Code
|
|
57
|
+
|
|
58
|
+
If that's where you already are, Estela installs without leaving it:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
/plugin marketplace add jdleonruiz/estela-cli
|
|
62
|
+
/plugin install estela@estela-cli
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Then ask in plain words — *"how many hours have I put into this?"*, *"what can
|
|
66
|
+
I bill for this month?"*, *"show me an example first"* — and Claude Code reaches
|
|
67
|
+
for the right command on its own. The explicit forms are `/estela:setup`,
|
|
68
|
+
`/estela:status` and `/estela:demo`.
|
|
69
|
+
|
|
70
|
+
The demo fills a whole dashboard with made-up data and touches nothing of
|
|
71
|
+
yours, which is the honest way to look at a program that wants to read your
|
|
72
|
+
transcripts: see what it does before you let it near your own history.
|
|
73
|
+
|
|
74
|
+
No Claude Code or Codex? It still works: without transcripts, Estela rebuilds
|
|
75
|
+
your time from your commits alone, and marks it as estimated.
|
|
52
76
|
|
|
53
77
|
`npm` doesn't update global installs on its own. If you installed with
|
|
54
78
|
`npm install -g estela`, Estela tells you when there's a newer version (it asks
|
|
@@ -61,6 +85,21 @@ you can run it again.
|
|
|
61
85
|
Estela speaks English and Spanish, following your system's language. Force one
|
|
62
86
|
with `--lang en` on any command, or `ESTELA_LANG=en` for good.
|
|
63
87
|
|
|
88
|
+
### Windows
|
|
89
|
+
|
|
90
|
+
Estela runs on Windows. It's tested by hand on a real machine, not in CI, so if
|
|
91
|
+
something looks off, [open an issue](https://github.com/jdleonruiz/estela-cli/issues).
|
|
92
|
+
Two things trip people up before Estela even starts:
|
|
93
|
+
|
|
94
|
+
- **`npm : ... cannot be loaded because running scripts is disabled`** —
|
|
95
|
+
PowerShell blocks npm's own scripts by default. Once, and only for your user:
|
|
96
|
+
`Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`.
|
|
97
|
+
- **`npm error Class extends value undefined is not a constructor or null`** —
|
|
98
|
+
you have two Node installs fighting over the same folder, usually
|
|
99
|
+
`nvm-windows` plus a Node from the installer or `winget`. Keep one: uninstall
|
|
100
|
+
the standalone Node, then `nvm install lts` and `nvm use lts` from an
|
|
101
|
+
administrator terminal. `where.exe npm` should list a single path.
|
|
102
|
+
|
|
64
103
|
## Reporting to a client
|
|
65
104
|
|
|
66
105
|
Projects are created as internal and without a rate, because making one up
|
|
@@ -80,6 +119,20 @@ estela report --project acme-web --cutoff 2026-08-31 --dry-run
|
|
|
80
119
|
almost never commit with your global email, and without telling Estela it
|
|
81
120
|
captures three commits out of seventeen hundred.
|
|
82
121
|
|
|
122
|
+
**The language is the client's, not your terminal's.** What your client receives
|
|
123
|
+
(the PDF, the CSV, the report and the published panel) comes out in the language
|
|
124
|
+
you set for that client, so you can use Estela in Spanish and bill a company in
|
|
125
|
+
English:
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
estela client add --id acme --name "ACME" --currency EUR --language en
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Without it Estela uses your terminal's language, and tells you when it does.
|
|
132
|
+
Running `client add` again keeps the language you set (`--language auto` removes
|
|
133
|
+
it), and `--lang en` on a single command overrides everything. A published panel
|
|
134
|
+
is a static file, so to change its language you republish it.
|
|
135
|
+
|
|
83
136
|
The report backs up your work with hours and commits. It isn't an invoice:
|
|
84
137
|
Estela doesn't issue tax documents, so attach it to your own.
|
|
85
138
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../../src/billing/invoice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACF,MAAM,EAAE,OAAO,EAAe,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAC5E,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../../src/billing/invoice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACF,MAAM,EAAE,OAAO,EAAe,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAC5E,MAAM,gBAAgB,CAAC;AAQxB;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,YAAa,SAAQ,KAAK;CAAG;AAE1C,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAwF9D;AAED,8EAA8E;AAC9E,wBAAgB,MAAM,CACpB,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,IAAI,GACP,KAAK,GAAG,IAAI,CAOd;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAgDxF;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG;IAC7D,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CACjE,CAUA"}
|
package/dist/billing/invoice.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.renderInvoice = renderInvoice;
|
|
|
7
7
|
exports.marginOf = marginOf;
|
|
8
8
|
const shared_1 = require("@estela/shared");
|
|
9
9
|
const index_js_1 = require("../i18n/index.js");
|
|
10
|
+
const localize_js_1 = require("./localize.js");
|
|
10
11
|
class InvoiceError extends Error {
|
|
11
12
|
}
|
|
12
13
|
exports.InvoiceError = InvoiceError;
|
|
@@ -38,7 +39,7 @@ function issueInvoice(input) {
|
|
|
38
39
|
continue;
|
|
39
40
|
totalSeconds += seconds;
|
|
40
41
|
lines.push({
|
|
41
|
-
description: entry
|
|
42
|
+
description: (0, localize_js_1.localizeDescription)(entry),
|
|
42
43
|
seconds,
|
|
43
44
|
hourlyRate: rate,
|
|
44
45
|
amount: (0, shared_1.billableAmount)(seconds, rate),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../src/billing/invoice.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../src/billing/invoice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { TimeEntry } from "@estela/shared";
|
|
2
|
+
/**
|
|
3
|
+
* Las frases que Estela misma escribe en la descripción de un bloque, y cómo
|
|
4
|
+
* volver a decirlas en otro idioma.
|
|
5
|
+
*
|
|
6
|
+
* La descripción se guarda al importar, en el idioma de la terminal de ese
|
|
7
|
+
* momento. Pero el documento lo lee un cliente, en SU idioma: sin esto, un panel
|
|
8
|
+
* en inglés traía "(+3 commits más)" en más de la mitad de los bloques, porque
|
|
9
|
+
* cualquier bloque con dos commits o más lleva esa cola.
|
|
10
|
+
*
|
|
11
|
+
* Lo que NO se toca nunca es texto tuyo: el asunto de un commit y lo que
|
|
12
|
+
* escribes con `estela log --what`. Por eso cada plantilla solo se reconoce
|
|
13
|
+
* cuando el bloque tiene la forma que la produjo (ver `localizeDescription`).
|
|
14
|
+
*/
|
|
15
|
+
/** "Asunto (+2 commits más)". `extra` son los asuntos que no se nombran. */
|
|
16
|
+
export declare function moreCommits(first: string, extra: number): string;
|
|
17
|
+
/** "Desarrollo en la-rama": lo que se escribe cuando el bloque no tiene commits. */
|
|
18
|
+
export declare function developmentOn(branch: string | null): string;
|
|
19
|
+
type Describable = Pick<TimeEntry, "description" | "source" | "kind" | "commitHashes">;
|
|
20
|
+
/**
|
|
21
|
+
* La descripción de un bloque, en el idioma en curso (`getLang()`).
|
|
22
|
+
*
|
|
23
|
+
* Solo se reescribe lo que se sabe que escribió Estela, y solo si el bloque
|
|
24
|
+
* tiene la forma que lo produjo:
|
|
25
|
+
*
|
|
26
|
+
* - "(+N commits más)": el bloque tiene dos commits o más. Un solo commit cuyo
|
|
27
|
+
* asunto acabe casualmente así es texto tuyo.
|
|
28
|
+
* - "Desarrollo [en rama]": el bloque no tiene commits, que es cuando Estela
|
|
29
|
+
* cae a la rama. Con commits, "Desarrollo en curso" es el asunto de uno.
|
|
30
|
+
* - Una hora anotada a mano solo cambia si su texto es EXACTAMENTE la etiqueta
|
|
31
|
+
* de su tipo, que es lo que se guarda cuando no escribes `--what`.
|
|
32
|
+
*/
|
|
33
|
+
export declare function localizeDescription(entry: Describable): string;
|
|
34
|
+
/** El mismo bloque con su descripción en el idioma en curso. */
|
|
35
|
+
export declare function withLocalizedDescription<T extends Describable>(entry: T): T;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=localize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localize.d.ts","sourceRoot":"","sources":["../../src/billing/localize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKhD;;;;;;;;;;;;GAYG;AAEH,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE3D;AAQD,KAAK,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,cAAc,CAAC,CAAC;AAEvF;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAqB9D;AAED,gEAAgE;AAChE,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAG3E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.moreCommits = moreCommits;
|
|
4
|
+
exports.developmentOn = developmentOn;
|
|
5
|
+
exports.localizeDescription = localizeDescription;
|
|
6
|
+
exports.withLocalizedDescription = withLocalizedDescription;
|
|
7
|
+
const index_js_1 = require("../i18n/index.js");
|
|
8
|
+
const labels_js_1 = require("../i18n/labels.js");
|
|
9
|
+
/**
|
|
10
|
+
* Las frases que Estela misma escribe en la descripción de un bloque, y cómo
|
|
11
|
+
* volver a decirlas en otro idioma.
|
|
12
|
+
*
|
|
13
|
+
* La descripción se guarda al importar, en el idioma de la terminal de ese
|
|
14
|
+
* momento. Pero el documento lo lee un cliente, en SU idioma: sin esto, un panel
|
|
15
|
+
* en inglés traía "(+3 commits más)" en más de la mitad de los bloques, porque
|
|
16
|
+
* cualquier bloque con dos commits o más lleva esa cola.
|
|
17
|
+
*
|
|
18
|
+
* Lo que NO se toca nunca es texto tuyo: el asunto de un commit y lo que
|
|
19
|
+
* escribes con `estela log --what`. Por eso cada plantilla solo se reconoce
|
|
20
|
+
* cuando el bloque tiene la forma que la produjo (ver `localizeDescription`).
|
|
21
|
+
*/
|
|
22
|
+
/** "Asunto (+2 commits más)". `extra` son los asuntos que no se nombran. */
|
|
23
|
+
function moreCommits(first, extra) {
|
|
24
|
+
return extra === 1 ? (0, index_js_1.tr) `${first} (+1 commit más)` : (0, index_js_1.tr) `${first} (+${extra} commits más)`;
|
|
25
|
+
}
|
|
26
|
+
/** "Desarrollo en la-rama": lo que se escribe cuando el bloque no tiene commits. */
|
|
27
|
+
function developmentOn(branch) {
|
|
28
|
+
return branch ? (0, index_js_1.tr) `Desarrollo en ${branch}` : (0, index_js_1.tr) `Desarrollo`;
|
|
29
|
+
}
|
|
30
|
+
// Las frases de arriba, tal como se guardaron en cada idioma. Son históricas:
|
|
31
|
+
// lo guardado no cambia si algún día se retoca la traducción, así que estos
|
|
32
|
+
// patrones NO se derivan del catálogo — se quedan como están.
|
|
33
|
+
const MORE = /^([\s\S]*) \(\+(\d+) (?:commits? más|more commits?)\)$/;
|
|
34
|
+
const DEVELOPMENT = /^(?:Desarrollo|Development)(?: (?:en|on) ([\s\S]+))?$/;
|
|
35
|
+
/**
|
|
36
|
+
* La descripción de un bloque, en el idioma en curso (`getLang()`).
|
|
37
|
+
*
|
|
38
|
+
* Solo se reescribe lo que se sabe que escribió Estela, y solo si el bloque
|
|
39
|
+
* tiene la forma que lo produjo:
|
|
40
|
+
*
|
|
41
|
+
* - "(+N commits más)": el bloque tiene dos commits o más. Un solo commit cuyo
|
|
42
|
+
* asunto acabe casualmente así es texto tuyo.
|
|
43
|
+
* - "Desarrollo [en rama]": el bloque no tiene commits, que es cuando Estela
|
|
44
|
+
* cae a la rama. Con commits, "Desarrollo en curso" es el asunto de uno.
|
|
45
|
+
* - Una hora anotada a mano solo cambia si su texto es EXACTAMENTE la etiqueta
|
|
46
|
+
* de su tipo, que es lo que se guarda cuando no escribes `--what`.
|
|
47
|
+
*/
|
|
48
|
+
function localizeDescription(entry) {
|
|
49
|
+
const text = entry.description;
|
|
50
|
+
if (entry.source === "manual") {
|
|
51
|
+
const eraLaEtiqueta = ["es", "en"].some((lang) => (0, index_js_1.withLang)(lang, () => (0, labels_js_1.kindLabel)(entry.kind)) === text);
|
|
52
|
+
return eraLaEtiqueta ? (0, labels_js_1.kindLabel)(entry.kind) : text;
|
|
53
|
+
}
|
|
54
|
+
if (entry.commitHashes.length >= 2) {
|
|
55
|
+
const m = MORE.exec(text);
|
|
56
|
+
if (m)
|
|
57
|
+
return moreCommits(m[1], Number(m[2]));
|
|
58
|
+
return text;
|
|
59
|
+
}
|
|
60
|
+
if (entry.commitHashes.length === 0) {
|
|
61
|
+
const m = DEVELOPMENT.exec(text);
|
|
62
|
+
if (m)
|
|
63
|
+
return developmentOn(m[1] ?? null);
|
|
64
|
+
}
|
|
65
|
+
return text;
|
|
66
|
+
}
|
|
67
|
+
/** El mismo bloque con su descripción en el idioma en curso. */
|
|
68
|
+
function withLocalizedDescription(entry) {
|
|
69
|
+
const description = localizeDescription(entry);
|
|
70
|
+
return description === entry.description ? entry : { ...entry, description };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=localize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../../src/billing/localize.ts"],"names":[],"mappings":";;AAoBA,kCAEC;AAGD,sCAEC;AAuBD,kDAqBC;AAGD,4DAGC;AA3ED,+CAAgD;AAChD,iDAA8C;AAE9C;;;;;;;;;;;;GAYG;AAEH,4EAA4E;AAC5E,SAAgB,WAAW,CAAC,KAAa,EAAE,KAAa;IACtD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAA,aAAE,EAAA,GAAG,KAAK,kBAAkB,CAAC,CAAC,CAAC,IAAA,aAAE,EAAA,GAAG,KAAK,MAAM,KAAK,eAAe,CAAC;AAC3F,CAAC;AAED,oFAAoF;AACpF,SAAgB,aAAa,CAAC,MAAqB;IACjD,OAAO,MAAM,CAAC,CAAC,CAAC,IAAA,aAAE,EAAA,iBAAiB,MAAM,EAAE,CAAC,CAAC,CAAC,IAAA,aAAE,EAAA,YAAY,CAAC;AAC/D,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,8DAA8D;AAC9D,MAAM,IAAI,GAAG,wDAAwD,CAAC;AACtE,MAAM,WAAW,GAAG,uDAAuD,CAAC;AAI5E;;;;;;;;;;;;GAYG;AACH,SAAgB,mBAAmB,CAAC,KAAkB;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,aAAa,GAAI,CAAC,IAAI,EAAE,IAAI,CAAW,CAAC,IAAI,CAChD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAA,qBAAS,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAClE,OAAO,aAAa,CAAC,CAAC,CAAC,IAAA,qBAAS,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC;YAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gEAAgE;AAChE,SAAgB,wBAAwB,CAAwB,KAAQ;IACtE,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localize.test.d.ts","sourceRoot":"","sources":["../../src/billing/localize.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
|
+
const shared_1 = require("@estela/shared");
|
|
9
|
+
const csv_js_1 = require("../export/csv.js");
|
|
10
|
+
const panel_js_1 = require("../export/panel.js");
|
|
11
|
+
const share_js_1 = require("../export/share.js");
|
|
12
|
+
const index_js_1 = require("../i18n/index.js");
|
|
13
|
+
const invoice_js_1 = require("./invoice.js");
|
|
14
|
+
const localize_js_1 = require("./localize.js");
|
|
15
|
+
const sessionize_js_1 = require("./sessionize.js");
|
|
16
|
+
/**
|
|
17
|
+
* Las frases que Estela escribe en la descripción de un bloque se guardan en el
|
|
18
|
+
* idioma de la terminal de aquel momento, y las lee un cliente en el suyo.
|
|
19
|
+
*
|
|
20
|
+
* Dos cosas que no pueden fallar: que en un panel en inglés no cuele
|
|
21
|
+
* "(+3 commits más)", y — más importante aún — que NUNCA se reescriba texto
|
|
22
|
+
* tuyo: un asunto de commit o lo que escribes con `estela log --what` es lo que
|
|
23
|
+
* el cliente paga, y traducírselo por error sería alterar su factura.
|
|
24
|
+
*/
|
|
25
|
+
function commit(subject, i) {
|
|
26
|
+
return {
|
|
27
|
+
repoPath: "/repo", hash: `abc${i}`.padEnd(10, "0"), at: new Date("2026-08-10T10:00:00Z"),
|
|
28
|
+
authorEmail: "yo@ejemplo.com", authorName: "Yo", branch: "main", subject,
|
|
29
|
+
linesAdded: 1, linesDeleted: 0, files: [],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function bloque(subjects, branch) {
|
|
33
|
+
return {
|
|
34
|
+
startedAt: new Date("2026-08-10T09:00:00Z"), endedAt: new Date("2026-08-10T11:00:00Z"),
|
|
35
|
+
seconds: 7200, repoPath: "/repo", branch, turnCount: 3,
|
|
36
|
+
aiCost: { microUsd: 0 }, models: [], sessionIds: [], unpricedModels: [],
|
|
37
|
+
commits: subjects.map(commit),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function entrada(over) {
|
|
41
|
+
return {
|
|
42
|
+
id: "e", projectId: "p", startedAt: new Date("2026-08-10T09:00:00Z"),
|
|
43
|
+
endedAt: new Date("2026-08-10T10:00:00Z"), seconds: 3600, description: "x",
|
|
44
|
+
billable: true, invoiceId: null, aiCost: { microUsd: 0 }, agentSeconds: 3600,
|
|
45
|
+
commitHashes: [], agents: ["claude-code"], source: "agent", kind: "development",
|
|
46
|
+
branch: "main", ...over,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const HASHES = (n) => Array.from({ length: n }, (_, i) => `h${i}`);
|
|
50
|
+
// ── Que los reconocedores no se desincronicen del generador ─────────────
|
|
51
|
+
(0, node_test_1.test)("lo que describeBlock escribió en un idioma, localizeDescription lo dice igual que si lo hubiera escrito en el otro", () => {
|
|
52
|
+
// Es la prueba que evita la deriva: si alguien cambia la frase de describeBlock
|
|
53
|
+
// sin tocar el reconocedor, o al revés, esto falla en vez de dejar un panel a
|
|
54
|
+
// medias en producción.
|
|
55
|
+
const casos = [
|
|
56
|
+
[[], null], // "Desarrollo"
|
|
57
|
+
[[], "feature/informes"], // "Desarrollo en informes"
|
|
58
|
+
[["fix: login"], "main"], // un solo asunto: tal cual
|
|
59
|
+
[["fix: login", "feat: pagos"], "main"], // (+1 commit más)
|
|
60
|
+
[["a", "b", "c", "d", "e"], "main"], // (+4 commits más)
|
|
61
|
+
];
|
|
62
|
+
for (const [asuntos, rama] of casos) {
|
|
63
|
+
const b = bloque(asuntos, rama);
|
|
64
|
+
for (const [de, a] of [["es", "en"], ["en", "es"]]) {
|
|
65
|
+
const guardada = (0, index_js_1.withLang)(de, () => (0, sessionize_js_1.describeBlock)(b));
|
|
66
|
+
const esperada = (0, index_js_1.withLang)(a, () => (0, sessionize_js_1.describeBlock)(b));
|
|
67
|
+
const obtenida = (0, index_js_1.withLang)(a, () => (0, localize_js_1.localizeDescription)(entrada({ description: guardada, commitHashes: HASHES(asuntos.length) })));
|
|
68
|
+
strict_1.default.equal(obtenida, esperada, `${de}→${a} con ${JSON.stringify(asuntos)} / ${rama}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
// ── Lo que NO se toca ───────────────────────────────────────────────────
|
|
73
|
+
(0, node_test_1.test)("el asunto de un commit no se reescribe aunque se parezca a una plantilla", () => {
|
|
74
|
+
// Un bloque de un solo commit: su descripción ES el asunto, y no hay plantilla.
|
|
75
|
+
for (const asunto of ["Desarrollo en curso", "Desarrollo", "Fix (+3 commits más)", "Development on hold"]) {
|
|
76
|
+
const e = entrada({ description: asunto, commitHashes: HASHES(1) });
|
|
77
|
+
strict_1.default.equal((0, index_js_1.withLang)("en", () => (0, localize_js_1.localizeDescription)(e)), asunto, asunto);
|
|
78
|
+
strict_1.default.equal((0, index_js_1.withLang)("es", () => (0, localize_js_1.localizeDescription)(e)), asunto, asunto);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
(0, node_test_1.test)("una hora anotada a mano solo cambia si es exactamente la etiqueta de su tipo", () => {
|
|
82
|
+
const es = (description, kind = "development") => (0, index_js_1.withLang)("en", () => (0, localize_js_1.localizeDescription)(entrada({ source: "manual", kind, description })));
|
|
83
|
+
// Lo que se guarda cuando no se escribe --what: la etiqueta del tipo.
|
|
84
|
+
strict_1.default.equal(es("Reunión", "meeting"), "Meeting");
|
|
85
|
+
strict_1.default.equal(es("Investigación", "research"), "Research");
|
|
86
|
+
// Texto escrito por la persona: intocable, aunque empiece igual.
|
|
87
|
+
strict_1.default.equal(es("Reunión con el equipo de Northwind", "meeting"), "Reunión con el equipo de Northwind");
|
|
88
|
+
strict_1.default.equal(es("Desarrollo en curso"), "Desarrollo en curso");
|
|
89
|
+
// La etiqueta de OTRO tipo no cuenta: "Reunión" en un bloque de investigación es texto suyo.
|
|
90
|
+
strict_1.default.equal(es("Reunión", "research"), "Reunión");
|
|
91
|
+
});
|
|
92
|
+
(0, node_test_1.test)("un bloque con commits no cae en la plantilla 'Desarrollo en': eso solo pasa sin commits", () => {
|
|
93
|
+
const e = entrada({ description: "Desarrollo en curso del módulo", commitHashes: HASHES(2) });
|
|
94
|
+
strict_1.default.equal((0, index_js_1.withLang)("en", () => (0, localize_js_1.localizeDescription)(e)), "Desarrollo en curso del módulo");
|
|
95
|
+
});
|
|
96
|
+
// ── Que llega a cada documento ──────────────────────────────────────────
|
|
97
|
+
const CLIENT = { id: "nebula", name: "Nebula", currency: "EUR" };
|
|
98
|
+
const PROJECT = {
|
|
99
|
+
id: "p", clientId: "nebula", name: "Portal", repoPaths: [], billable: true,
|
|
100
|
+
roundingMinutes: 0, aiCostPolicy: "absorbed", kind: "client", closedAt: null,
|
|
101
|
+
};
|
|
102
|
+
const RATE = {
|
|
103
|
+
projectId: "p", hourlyRate: (0, shared_1.money)(1300, "EUR"),
|
|
104
|
+
effectiveFrom: new Date("2025-01-01T00:00:00Z"), effectiveTo: null,
|
|
105
|
+
};
|
|
106
|
+
/** Guardado con la terminal en español, como lo guardaría un usuario español. */
|
|
107
|
+
const GUARDADA = entrada({
|
|
108
|
+
description: "feat: pagos (+3 commits más)", commitHashes: HASHES(4),
|
|
109
|
+
});
|
|
110
|
+
const SIN_COMMITS = entrada({
|
|
111
|
+
id: "e2", description: "Desarrollo en informes", commitHashes: [],
|
|
112
|
+
startedAt: new Date("2026-08-11T09:00:00Z"), endedAt: new Date("2026-08-11T10:00:00Z"),
|
|
113
|
+
});
|
|
114
|
+
(0, node_test_1.test)("un panel en inglés no trae la plantilla en español", () => {
|
|
115
|
+
const html = (0, index_js_1.withLang)("en", () => (0, panel_js_1.buildPanel)({
|
|
116
|
+
project: PROJECT, client: CLIENT, entries: [GUARDADA, SIN_COMMITS],
|
|
117
|
+
generatedAt: new Date("2026-09-20T09:00:00Z"),
|
|
118
|
+
}));
|
|
119
|
+
strict_1.default.ok(html.includes("feat: pagos (+3 more commits)"), "cola traducida");
|
|
120
|
+
strict_1.default.ok(html.includes("Development on informes"), "rama traducida");
|
|
121
|
+
strict_1.default.ok(!html.includes("commits más") && !html.includes("Desarrollo en"));
|
|
122
|
+
const es = (0, index_js_1.withLang)("es", () => (0, panel_js_1.buildPanel)({
|
|
123
|
+
project: PROJECT, client: CLIENT, entries: [GUARDADA, SIN_COMMITS],
|
|
124
|
+
generatedAt: new Date("2026-09-20T09:00:00Z"),
|
|
125
|
+
}));
|
|
126
|
+
strict_1.default.ok(es.includes("feat: pagos (+3 commits más)"), "en español queda como estaba");
|
|
127
|
+
});
|
|
128
|
+
(0, node_test_1.test)("el informe, el CSV y las líneas de factura también salen traducidos", () => {
|
|
129
|
+
const informe = (0, index_js_1.withLang)("en", () => (0, share_js_1.buildShareReport)({
|
|
130
|
+
project: PROJECT, client: CLIENT, entries: [GUARDADA], from: "2026-08-01", to: "2026-08-31",
|
|
131
|
+
}));
|
|
132
|
+
strict_1.default.ok(informe.includes("feat: pagos (+3 more commits)"));
|
|
133
|
+
const csv = (0, index_js_1.withLang)("en", () => (0, csv_js_1.timeEntriesToCsv)([GUARDADA], PROJECT, CLIENT, () => null));
|
|
134
|
+
strict_1.default.ok(csv.includes("feat: pagos (+3 more commits)"));
|
|
135
|
+
const factura = (0, index_js_1.withLang)("en", () => (0, invoice_js_1.issueInvoice)({
|
|
136
|
+
client: CLIENT, project: PROJECT, rates: [RATE], entries: [GUARDADA, SIN_COMMITS],
|
|
137
|
+
cutoffAt: new Date("2026-08-31T23:59:59Z"), number: "F-1",
|
|
138
|
+
}));
|
|
139
|
+
const conceptos = factura.lines.map((l) => l.description);
|
|
140
|
+
strict_1.default.ok(conceptos.includes("feat: pagos (+3 more commits)"), conceptos.join(" | "));
|
|
141
|
+
strict_1.default.ok(conceptos.includes("Development on informes"), conceptos.join(" | "));
|
|
142
|
+
strict_1.default.ok((0, csv_js_1.invoiceToCsv)(factura, CLIENT, PROJECT).includes("feat: pagos (+3 more commits)"));
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=localize.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localize.test.js","sourceRoot":"","sources":["../../src/billing/localize.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionize.d.ts","sourceRoot":"","sources":["../../src/billing/sessionize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKtE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,gFAAgF;IAChF,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAKD,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,OAAO,GAAE,iBAAsB,GAC9B,SAAS,EAAE,CAkCb;AAqCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,MAAM,GAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAgC,GAC7D,SAAS,EAAE,CAiEb;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"sessionize.d.ts","sourceRoot":"","sources":["../../src/billing/sessionize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKtE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,gFAAgF;IAChF,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAKD,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,OAAO,GAAE,iBAAsB,GAC9B,SAAS,EAAE,CAkCb;AAqCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,MAAM,GAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAgC,GAC7D,SAAS,EAAE,CAiEb;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAStD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,YAAY,SAAK,GAChB,SAAS,EAAE,CAcb;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5D,SAAS,EAAE,CAgDb;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,SAAS,SAAS,EAAE,EAClC,WAAW,EAAE,SAAS,SAAS,EAAE,GAChC,SAAS,EAAE,CAKb"}
|
|
@@ -8,7 +8,7 @@ exports.sessionizeCommits = sessionizeCommits;
|
|
|
8
8
|
exports.withoutOverlap = withoutOverlap;
|
|
9
9
|
const shared_1 = require("@estela/shared");
|
|
10
10
|
const cost_js_1 = require("../pricing/cost.js");
|
|
11
|
-
const
|
|
11
|
+
const localize_js_1 = require("./localize.js");
|
|
12
12
|
const DEFAULT_GAP_MINUTES = 30;
|
|
13
13
|
const DEFAULT_TAIL_MINUTES = 2;
|
|
14
14
|
function sessionize(turns, options = {}) {
|
|
@@ -172,13 +172,10 @@ function describeBlock(block) {
|
|
|
172
172
|
if (subjects.length === 1)
|
|
173
173
|
return subjects[0];
|
|
174
174
|
// "+1 commits más" salía en la descripción de cualquier bloque con dos asuntos.
|
|
175
|
-
if (subjects.length
|
|
176
|
-
return (0,
|
|
177
|
-
if (subjects.length > 2) {
|
|
178
|
-
return (0, index_js_1.tr) `${subjects[0]} (+${subjects.length - 1} commits más)`;
|
|
179
|
-
}
|
|
175
|
+
if (subjects.length >= 2)
|
|
176
|
+
return (0, localize_js_1.moreCommits)(subjects[0], subjects.length - 1);
|
|
180
177
|
const branch = block.branch?.replace(/^(feature|feat|fix|chore)\//, "") ?? null;
|
|
181
|
-
return
|
|
178
|
+
return (0, localize_js_1.developmentOn)(branch);
|
|
182
179
|
}
|
|
183
180
|
/**
|
|
184
181
|
* Asocia commits a bloques por solapamiento temporal.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionize.js","sourceRoot":"","sources":["../../src/billing/sessionize.ts"],"names":[],"mappings":";;AAgDA,gCAqCC;AAyDD,kDAoEC;AAQD,
|
|
1
|
+
{"version":3,"file":"sessionize.js","sourceRoot":"","sources":["../../src/billing/sessionize.ts"],"names":[],"mappings":"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"}
|
package/dist/bin.js
CHANGED
|
@@ -25,7 +25,7 @@ if ((0, node_version_js_1.tooOld)(process.version, MIN_NODE)) {
|
|
|
25
25
|
const i = process.argv.indexOf("--lang");
|
|
26
26
|
(0, index_js_1.setLang)((0, index_js_1.detectLang)({ flag: i >= 0 ? process.argv[i + 1] : undefined, env: process.env, platform: process.platform }));
|
|
27
27
|
console.error((0, index_js_1.tr) `\nEstela necesita Node ${MIN_NODE} o superior — tienes ${process.version} instalado.\n` +
|
|
28
|
-
(0, index_js_1.tr) `Actualiza con
|
|
28
|
+
(0, index_js_1.tr) `Actualiza con "${(0, node_version_js_1.upgradeCommand)(process.platform, process.env)}" o desde https://nodejs.org, y vuelve a intentarlo en una terminal nueva.\n`);
|
|
29
29
|
process.exit(1);
|
|
30
30
|
}
|
|
31
31
|
else {
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;GAeG;;AAEH,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;GAeG;;AAEH,uDAA2D;AAC3D,8CAA0D;AAE1D,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAE1B,IAAI,IAAA,wBAAM,EAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;IACtC,sEAAsE;IACtE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAA,kBAAO,EAAC,IAAA,qBAAU,EAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtH,OAAO,CAAC,KAAK,CACX,IAAA,aAAE,EAAA,0BAA0B,QAAQ,wBAAwB,OAAO,CAAC,OAAO,eAAe;QAC1F,IAAA,aAAE,EAAA,kBAAkB,IAAA,gCAAc,EAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;IACnJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;KAAM,CAAC;IACN,6EAA6E;IAC7E,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-idioma.test.d.ts","sourceRoot":"","sources":["../src/cli-idioma.test.ts"],"names":[],"mappings":""}
|