@nac3/forge-cli 1.23.2 → 1.23.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +108 -27
- package/dist/chat/server.js.map +1 -1
- package/dist/core/error_catalog.d.ts +27 -0
- package/dist/core/error_catalog.d.ts.map +1 -1
- package/dist/core/error_catalog.js +55 -0
- package/dist/core/error_catalog.js.map +1 -1
- package/dist/core/error_formatter.d.ts +12 -0
- package/dist/core/error_formatter.d.ts.map +1 -1
- package/dist/core/error_formatter.js +19 -0
- package/dist/core/error_formatter.js.map +1 -1
- package/dist/relay/command_consumer.d.ts +10 -0
- package/dist/relay/command_consumer.d.ts.map +1 -1
- package/dist/relay/command_consumer.js +10 -1
- package/dist/relay/command_consumer.js.map +1 -1
- package/dist/relay/in_flight_turn.d.ts +52 -11
- package/dist/relay/in_flight_turn.d.ts.map +1 -1
- package/dist/relay/in_flight_turn.js +98 -30
- package/dist/relay/in_flight_turn.js.map +1 -1
- package/dist/relay/loopback_turn.d.ts +82 -0
- package/dist/relay/loopback_turn.d.ts.map +1 -0
- package/dist/relay/loopback_turn.js +171 -0
- package/dist/relay/loopback_turn.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/i18n/catalogs/ar.json +7 -0
- package/src/i18n/catalogs/de.json +7 -0
- package/src/i18n/catalogs/en.json +7 -0
- package/src/i18n/catalogs/es.json +7 -0
- package/src/i18n/catalogs/fr.json +7 -0
- package/src/i18n/catalogs/hi.json +7 -0
- package/src/i18n/catalogs/it.json +7 -0
- package/src/i18n/catalogs/ja.json +7 -0
- package/src/i18n/catalogs/pt.json +7 -0
- package/src/i18n/catalogs/zh.json +7 -0
|
@@ -57,6 +57,13 @@ export declare const E_VAULT_DECRYPT_FAILED = "E_VAULT_DECRYPT_FAILED";
|
|
|
57
57
|
export declare const E_SHELL_EXEC_REJECTED = "E_SHELL_EXEC_REJECTED";
|
|
58
58
|
/** No active project registered + the verb requires a project root. */
|
|
59
59
|
export declare const E_PROJECT_NOT_REGISTERED = "E_PROJECT_NOT_REGISTERED";
|
|
60
|
+
/** El escritorio no devolvio la respuesta dentro del presupuesto. El turno
|
|
61
|
+
* puede seguir vivo: el trabajo probablemente se este haciendo o ya este
|
|
62
|
+
* hecho, y el resultado aparece en el chat del escritorio. */
|
|
63
|
+
export declare const E_MOBILE_TURN_UNANSWERED = "E_MOBILE_TURN_UNANSWERED";
|
|
64
|
+
/** El pedido no llego a entrar al escritorio (su servidor de chat no estaba
|
|
65
|
+
* escuchando). Aca no se hizo NADA, y hay que reintentar. */
|
|
66
|
+
export declare const E_MOBILE_TURN_UNDELIVERED = "E_MOBILE_TURN_UNDELIVERED";
|
|
60
67
|
/** Build a ForgeError from a code + context.
|
|
61
68
|
*
|
|
62
69
|
* @param code Stable error code (E_*).
|
|
@@ -70,6 +77,26 @@ export declare function renderForgeError(code: string, context?: Record<string,
|
|
|
70
77
|
export declare function listErrorCodes(): string[];
|
|
71
78
|
/** Type guard. */
|
|
72
79
|
export declare function isForgeError(x: unknown): x is ForgeError;
|
|
80
|
+
/**
|
|
81
|
+
* Un Error de JavaScript que LLEVA su ForgeError adentro.
|
|
82
|
+
*
|
|
83
|
+
* Existe porque los dos mundos no se tocaban: el catalogo produce objetos y
|
|
84
|
+
* el codigo que falla lanza excepciones, asi que todo `catch` terminaba
|
|
85
|
+
* reducido a `e.message` -- una linea sin codigo, sin causa y sin que hacer.
|
|
86
|
+
* De ahi salia el "fetch failed" que vio el usuario. Un `catch` que recibe
|
|
87
|
+
* esto puede recuperar el error del catalogo entero con `forgeErrorOf`.
|
|
88
|
+
*
|
|
89
|
+
* El `message` se arma con el `what` para que un `catch` que NO sepa de esto
|
|
90
|
+
* siga mostrando algo legible, nunca un texto de libreria.
|
|
91
|
+
*/
|
|
92
|
+
export declare class ForgeFailure extends Error {
|
|
93
|
+
readonly forge: ForgeError;
|
|
94
|
+
constructor(forge: ForgeError, cause?: unknown);
|
|
95
|
+
}
|
|
96
|
+
/** El ForgeError que lleva una excepcion, o null si no lleva ninguno. Es lo
|
|
97
|
+
* que deja a un `catch` generico elegir el mensaje accionable cuando existe
|
|
98
|
+
* y su texto de siempre cuando no. */
|
|
99
|
+
export declare function forgeErrorOf(e: unknown): ForgeError | null;
|
|
73
100
|
/** Get the catalog entry metadata for a code (severity, docs path, etc).
|
|
74
101
|
* Returns null if the code is unknown. */
|
|
75
102
|
export declare function getCatalogEntry(code: string): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error_catalog.d.ts","sourceRoot":"","sources":["../../src/core/error_catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACrD;AAMD,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,uEAAuE;AACvE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"error_catalog.d.ts","sourceRoot":"","sources":["../../src/core/error_catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACrD;AAMD,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,uEAAuE;AACvE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAKnE;;+DAE+D;AAC/D,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE;8DAC8D;AAC9D,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AAwFrE;;;;;;;4DAO4D;AAC5D,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAM,EACvD,IAAI,CAAC,EAAE,iBAAiB,GACvB,UAAU,CA4BZ;AAcD,wEAAwE;AACxE,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,kBAAkB;AAClB,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAOxD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBACf,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO;CAM/C;AAED;;uCAEuC;AACvC,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAI1D;AAED;2CAC2C;AAC3C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAI1H"}
|
|
@@ -39,6 +39,17 @@ export const E_VAULT_DECRYPT_FAILED = 'E_VAULT_DECRYPT_FAILED';
|
|
|
39
39
|
export const E_SHELL_EXEC_REJECTED = 'E_SHELL_EXEC_REJECTED';
|
|
40
40
|
/** No active project registered + the verb requires a project root. */
|
|
41
41
|
export const E_PROJECT_NOT_REGISTERED = 'E_PROJECT_NOT_REGISTERED';
|
|
42
|
+
/* Un turno que PIDIO el telefono. Los dos casos se separan a proposito
|
|
43
|
+
* porque el consejo es OPUESTO: uno de los dos significa que el trabajo
|
|
44
|
+
* probablemente SI se hizo, y decirle al usuario que no se hizo es mentirle
|
|
45
|
+
* sobre el resultado. Ver src/relay/loopback_turn.ts. */
|
|
46
|
+
/** El escritorio no devolvio la respuesta dentro del presupuesto. El turno
|
|
47
|
+
* puede seguir vivo: el trabajo probablemente se este haciendo o ya este
|
|
48
|
+
* hecho, y el resultado aparece en el chat del escritorio. */
|
|
49
|
+
export const E_MOBILE_TURN_UNANSWERED = 'E_MOBILE_TURN_UNANSWERED';
|
|
50
|
+
/** El pedido no llego a entrar al escritorio (su servidor de chat no estaba
|
|
51
|
+
* escuchando). Aca no se hizo NADA, y hay que reintentar. */
|
|
52
|
+
export const E_MOBILE_TURN_UNDELIVERED = 'E_MOBILE_TURN_UNDELIVERED';
|
|
42
53
|
const CATALOG = {
|
|
43
54
|
[E_CAP_FRONTIER_EXHAUSTED]: {
|
|
44
55
|
key_prefix: 'error.cap_frontier_exhausted',
|
|
@@ -90,6 +101,19 @@ const CATALOG = {
|
|
|
90
101
|
has_cmd: true, severity: 'error',
|
|
91
102
|
docs_path: 'docs/errors/E_PROJECT_NOT_REGISTERED.html',
|
|
92
103
|
},
|
|
104
|
+
/* severity 'warning' y no 'error': el pedido no fracaso, lo que fracaso es
|
|
105
|
+
* la espera. Pintarlo como error haria que el usuario descarte un trabajo
|
|
106
|
+
* que probablemente este hecho. */
|
|
107
|
+
[E_MOBILE_TURN_UNANSWERED]: {
|
|
108
|
+
key_prefix: 'error.mobile_turn_unanswered',
|
|
109
|
+
has_cmd: false, severity: 'warning',
|
|
110
|
+
docs_path: 'docs/errors/E_MOBILE_TURN_UNANSWERED.html',
|
|
111
|
+
},
|
|
112
|
+
[E_MOBILE_TURN_UNDELIVERED]: {
|
|
113
|
+
key_prefix: 'error.mobile_turn_undelivered',
|
|
114
|
+
has_cmd: true, severity: 'error',
|
|
115
|
+
docs_path: 'docs/errors/E_MOBILE_TURN_UNDELIVERED.html',
|
|
116
|
+
},
|
|
93
117
|
};
|
|
94
118
|
/* ===================================================================
|
|
95
119
|
* Public API
|
|
@@ -157,6 +181,37 @@ export function isForgeError(x) {
|
|
|
157
181
|
&& typeof e.why === 'string'
|
|
158
182
|
&& typeof e.fix === 'string';
|
|
159
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Un Error de JavaScript que LLEVA su ForgeError adentro.
|
|
186
|
+
*
|
|
187
|
+
* Existe porque los dos mundos no se tocaban: el catalogo produce objetos y
|
|
188
|
+
* el codigo que falla lanza excepciones, asi que todo `catch` terminaba
|
|
189
|
+
* reducido a `e.message` -- una linea sin codigo, sin causa y sin que hacer.
|
|
190
|
+
* De ahi salia el "fetch failed" que vio el usuario. Un `catch` que recibe
|
|
191
|
+
* esto puede recuperar el error del catalogo entero con `forgeErrorOf`.
|
|
192
|
+
*
|
|
193
|
+
* El `message` se arma con el `what` para que un `catch` que NO sepa de esto
|
|
194
|
+
* siga mostrando algo legible, nunca un texto de libreria.
|
|
195
|
+
*/
|
|
196
|
+
export class ForgeFailure extends Error {
|
|
197
|
+
forge;
|
|
198
|
+
constructor(forge, cause) {
|
|
199
|
+
super(forge.what);
|
|
200
|
+
this.name = 'ForgeFailure';
|
|
201
|
+
this.forge = forge;
|
|
202
|
+
if (cause !== undefined)
|
|
203
|
+
this.cause = cause;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/** El ForgeError que lleva una excepcion, o null si no lleva ninguno. Es lo
|
|
207
|
+
* que deja a un `catch` generico elegir el mensaje accionable cuando existe
|
|
208
|
+
* y su texto de siempre cuando no. */
|
|
209
|
+
export function forgeErrorOf(e) {
|
|
210
|
+
if (e instanceof ForgeFailure)
|
|
211
|
+
return e.forge;
|
|
212
|
+
const f = e?.forge;
|
|
213
|
+
return isForgeError(f) ? f : null;
|
|
214
|
+
}
|
|
160
215
|
/** Get the catalog entry metadata for a code (severity, docs path, etc).
|
|
161
216
|
* Returns null if the code is unknown. */
|
|
162
217
|
export function getCatalogEntry(code) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error_catalog.js","sourceRoot":"","sources":["../../src/core/error_catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAA0B,MAAM,kBAAkB,CAAC;AAyBpE;;sEAEsE;AAEtE,oEAAoE;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AACnE,+DAA+D;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AACzD,sDAAsD;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAC3D,iEAAiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AACzD,oDAAoD;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAC3D,qEAAqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAC/D,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAC7D,uEAAuE;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"error_catalog.js","sourceRoot":"","sources":["../../src/core/error_catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,18 @@ import { type SupportedLanguage } from '../i18n/index.js';
|
|
|
16
16
|
* @param err The error.
|
|
17
17
|
* @param lang Optional UI language for the labels. Default 'es'. */
|
|
18
18
|
export declare function formatForgeErrorCli(err: ForgeError, lang?: SupportedLanguage): string;
|
|
19
|
+
/**
|
|
20
|
+
* Format a ForgeError as PLAIN text, for a surface that renders neither
|
|
21
|
+
* ANSI nor HTML -- today that is the chat reply the phone receives over the
|
|
22
|
+
* relay (src/relay/command_consumer.ts).
|
|
23
|
+
*
|
|
24
|
+
* No colours, no rules, no severity banner: a phone bubble is narrow and a
|
|
25
|
+
* row of dashes costs a whole line. What survives is the only part that is
|
|
26
|
+
* load-bearing -- what happened, why, and what to do -- with the labels
|
|
27
|
+
* coming from the same i18n keys the other two renderers use, so a new
|
|
28
|
+
* language lands on all three at once.
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatForgeErrorText(err: ForgeError, lang?: SupportedLanguage): string;
|
|
19
31
|
/** Format a ForgeError as safe HTML for the chat panel. The panel
|
|
20
32
|
* is expected to have CSS for .forge-err / .forge-err--{severity}
|
|
21
33
|
* / .forge-err__copy-btn etc; this returns ONLY the markup.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error_formatter.d.ts","sourceRoot":"","sources":["../../src/core/error_formatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA+BpE;;sEAEsE;AACtE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,GAAE,iBAAwB,GAAG,MAAM,CA4B3F;AAwBD;;;;sEAIsE;AACtE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,GAAE,iBAAwB,GAAG,MAAM,CA4B5F;AAMD,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAa7E;AAMD;6DAC6D;AAC7D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAG5D"}
|
|
1
|
+
{"version":3,"file":"error_formatter.d.ts","sourceRoot":"","sources":["../../src/core/error_formatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA+BpE;;sEAEsE;AACtE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,GAAE,iBAAwB,GAAG,MAAM,CA4B3F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,GAAE,iBAAwB,GAAG,MAAM,CAM5F;AAwBD;;;;sEAIsE;AACtE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,GAAE,iBAAwB,GAAG,MAAM,CA4B5F;AAMD,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAa7E;AAMD;6DAC6D;AAC7D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAG5D"}
|
|
@@ -68,6 +68,25 @@ export function formatForgeErrorCli(err, lang = 'es') {
|
|
|
68
68
|
parts.push('');
|
|
69
69
|
return parts.join('\n');
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Format a ForgeError as PLAIN text, for a surface that renders neither
|
|
73
|
+
* ANSI nor HTML -- today that is the chat reply the phone receives over the
|
|
74
|
+
* relay (src/relay/command_consumer.ts).
|
|
75
|
+
*
|
|
76
|
+
* No colours, no rules, no severity banner: a phone bubble is narrow and a
|
|
77
|
+
* row of dashes costs a whole line. What survives is the only part that is
|
|
78
|
+
* load-bearing -- what happened, why, and what to do -- with the labels
|
|
79
|
+
* coming from the same i18n keys the other two renderers use, so a new
|
|
80
|
+
* language lands on all three at once.
|
|
81
|
+
*/
|
|
82
|
+
export function formatForgeErrorText(err, lang = 'es') {
|
|
83
|
+
const parts = [err.what];
|
|
84
|
+
parts.push(tForLang(lang, 'error_ui.label.why') + ': ' + err.why);
|
|
85
|
+
parts.push(tForLang(lang, 'error_ui.label.fix') + ': ' + err.fix);
|
|
86
|
+
if (err.cmd)
|
|
87
|
+
parts.push(tForLang(lang, 'error_ui.label.cmd') + ': ' + err.cmd);
|
|
88
|
+
return parts.join('\n');
|
|
89
|
+
}
|
|
71
90
|
/* ===================================================================
|
|
72
91
|
* HTML formatter (chat panel, safe)
|
|
73
92
|
* ================================================================ */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error_formatter.js","sourceRoot":"","sources":["../../src/core/error_formatter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"error_formatter.js","sourceRoot":"","sources":["../../src/core/error_formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,16 @@ export interface CommandConsumerDeps {
|
|
|
63
63
|
* resolve the reply text. `projectSlug` binds the turn to the project the
|
|
64
64
|
* phone composed it against (Pablo 2026-06-23). */
|
|
65
65
|
runTurn: (text: string, sessionId?: string, projectSlug?: string) => Promise<string>;
|
|
66
|
+
/** Como contar al usuario un turno que fallo. Devuelve el texto accionable
|
|
67
|
+
* cuando el error trae uno (un ForgeError del catalogo: que paso, por que
|
|
68
|
+
* y que hacer) y null cuando no, para que el loop caiga a su texto de
|
|
69
|
+
* siempre.
|
|
70
|
+
*
|
|
71
|
+
* Se INYECTA en vez de importar el catalogo aca porque este modulo no toca
|
|
72
|
+
* el disco a proposito -- es lo que deja probar el loop entero sin red y
|
|
73
|
+
* sin servidor -- y el catalogo de i18n lee sus diez archivos al cargarse.
|
|
74
|
+
* El que lo arma es el servidor, que ya los tiene cargados. */
|
|
75
|
+
describeError?: (e: unknown) => string | null;
|
|
66
76
|
/** Handle a control command (switch_project, interrupt, ...) and
|
|
67
77
|
* resolve a short status string to send back. Optional: when absent,
|
|
68
78
|
* control commands are reported as unsupported. (tasks #33, #29) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command_consumer.d.ts","sourceRoot":"","sources":["../../src/relay/command_consumer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;4DACwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;wEAEoE;IACpE,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC5D;;2EAEuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;4DAGwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC;iEAC6D;IAC7D,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QACvC,EAAE,EAAE,OAAO,CAAC;QACZ,MAAM,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAAC,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9E,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH;;wDAEoD;IACpD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrF;;yEAEqE;IACrE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,oDAAoD;IACpD,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE;;;;8CAI0C;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,OAAO,CAAC;IACvB;;;+EAG2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;+CAI2C;IAC3C,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC;IAC3C,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;2CAKuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,yCAAyC;IACzC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,IAAI,IAAI,CAAC;IACb,uDAAuD;IACvD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAMD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,GAAG,IAAI,CAwBrF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,qBAAqB,
|
|
1
|
+
{"version":3,"file":"command_consumer.d.ts","sourceRoot":"","sources":["../../src/relay/command_consumer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;4DACwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;wEAEoE;IACpE,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC5D;;2EAEuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;4DAGwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC;iEAC6D;IAC7D,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QACvC,EAAE,EAAE,OAAO,CAAC;QACZ,MAAM,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAAC,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9E,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH;;wDAEoD;IACpD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrF;;;;;;;;oEAQgE;IAChE,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C;;yEAEqE;IACrE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,oDAAoD;IACpD,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE;;;;8CAI0C;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,OAAO,CAAC;IACvB;;;+EAG2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;+CAI2C;IAC3C,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC;IAC3C,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;2CAKuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,yCAAyC;IACzC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,IAAI,IAAI,CAAC;IACb,uDAAuD;IACvD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAMD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,GAAG,IAAI,CAwBrF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,qBAAqB,CAyFrF"}
|
|
@@ -112,7 +112,16 @@ export function startCommandConsumer(deps) {
|
|
|
112
112
|
}
|
|
113
113
|
catch (e) {
|
|
114
114
|
deps.onError?.(e);
|
|
115
|
-
|
|
115
|
+
/* Un error que llega con su ForgeError adentro se reporta CON lo
|
|
116
|
+
* que trae: que paso, por que y que hacer. Antes todo terminaba
|
|
117
|
+
* reducido a `e.message`, y de ahi salia el "No pude completar tu
|
|
118
|
+
* pedido: fetch failed" que vio el usuario -- un texto de libreria
|
|
119
|
+
* que no dice nada y que ademas MENTIA, porque el caso comun era
|
|
120
|
+
* un turno que si se completo y cuya respuesta el telefono nunca
|
|
121
|
+
* recibio (PND-234). El texto de siempre queda para los errores
|
|
122
|
+
* que todavia no pasan por el catalogo. */
|
|
123
|
+
const descrito = deps.describeError ? deps.describeError(e) : null;
|
|
124
|
+
deps.reply(cmd.id, descrito || ('No pude completar tu pedido: ' + errMsg(e)), true);
|
|
116
125
|
}
|
|
117
126
|
}
|
|
118
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command_consumer.js","sourceRoot":"","sources":["../../src/relay/command_consumer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"command_consumer.js","sourceRoot":"","sources":["../../src/relay/command_consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,32 @@
|
|
|
24
24
|
* refresco a mano -- cae sobre un latido reciente y reconstruye que esta
|
|
25
25
|
* corriendo, incluso si el telefono no estaba conectado cuando arranco.
|
|
26
26
|
*
|
|
27
|
+
* POR QUE ES UN REGISTRO Y NO UNA VARIABLE (PND-237, 30-oct-2026).
|
|
28
|
+
*
|
|
29
|
+
* Esto era UN solo slot (`let current`), y un panel corre turnos SOLAPADOS: el
|
|
30
|
+
* dueno manda un pedido mientras el anterior sigue, o entra uno por el puente.
|
|
31
|
+
* Con un solo slot el segundo pisaba al primero, y `clearInFlightTurn(id)` --
|
|
32
|
+
* que NO limpia si el id no coincide, y eso esta bien, porque un cierre tardio
|
|
33
|
+
* no tiene que borrar el anuncio del que recien arranco -- dejaba al pisado
|
|
34
|
+
* SIN NINGUN camino de salida. Peor: `touchInFlightTurn()` refrescaba lo que
|
|
35
|
+
* hubiera en el slot sin mirar el id, asi que el latido de cualquier turno
|
|
36
|
+
* POSTERIOR mantenia vivo al huerfano y el tope de silencio no vencia nunca.
|
|
37
|
+
*
|
|
38
|
+
* Medido en produccion (D1, 30-oct-2026 13:25 UTC): el panel de adip-kikan
|
|
39
|
+
* venia anunciando `dt-mvuyvonj` -- arrancado 12:47:13 -- durante 152 latidos
|
|
40
|
+
* y 38 minutos, mientras el MISMO panel ya habia publicado los remote_turn
|
|
41
|
+
* completos de dos turnos que arrancaron a su lado (12:46:39 y 12:47:40: los
|
|
42
|
+
* tres se solapan en 61 segundos). El telefono mostraba la burbuja "trabajando"
|
|
43
|
+
* con el texto viejo, y como su guarda es por id, el turno REAL no recibia
|
|
44
|
+
* burbuja: el dueno veia una sesion trabajando sin su pedido a la vista.
|
|
45
|
+
*
|
|
46
|
+
* Las dos reglas que lo cierran, y que son el contrato de este modulo:
|
|
47
|
+
* - un turno es una ENTRADA propia, identificada por su id. Nadie pisa a
|
|
48
|
+
* nadie, y cada uno sale por su propio cierre o por su propio silencio.
|
|
49
|
+
* - la SENAL DE VIDA esta ligada al id que la produce (touchInFlightTurn(id)).
|
|
50
|
+
* Un latido solo puede hablar por SU turno. Eso es lo que le devuelve el
|
|
51
|
+
* poder al tope de silencio: un huerfano deja de ser tocado y vence.
|
|
52
|
+
*
|
|
27
53
|
* ASCII puro.
|
|
28
54
|
*/
|
|
29
55
|
export interface InFlightTurn {
|
|
@@ -60,30 +86,45 @@ export declare const PULSO_DE_PROGRESO_MS: number;
|
|
|
60
86
|
*
|
|
61
87
|
* Diez pulsos de margen: tolera que se pierdan nueve latidos seguidos antes de
|
|
62
88
|
* dar por muerto un turno que esta vivo.
|
|
89
|
+
*
|
|
90
|
+
* PND-237: esta garantia solo existe de verdad desde que la senal de vida va
|
|
91
|
+
* por id. Mientras `touch()` refrescaba el slot entero, el latido de un turno
|
|
92
|
+
* nuevo reseteaba el reloj del huerfano y este tope era letra muerta.
|
|
63
93
|
*/
|
|
64
94
|
export declare const SILENCIO_MAX_MS: number;
|
|
65
95
|
export declare function setInFlightTurn(t: InFlightTurn, now?: number): void;
|
|
66
96
|
/**
|
|
67
|
-
* Senal de vida
|
|
68
|
-
*
|
|
97
|
+
* Senal de vida de UN turno. La llama el latido de actividad de ese turno,
|
|
98
|
+
* que corre solo mientras el turno vive.
|
|
69
99
|
*
|
|
70
|
-
* No crea nada: si no
|
|
71
|
-
* rezagado no puede resucitar un turno ya cerrado
|
|
100
|
+
* No crea nada: si ese id no esta registrado, no hace nada. Asi un latido
|
|
101
|
+
* rezagado no puede resucitar un turno ya cerrado -- y, desde PND-237, no
|
|
102
|
+
* puede tampoco mantener vivo el anuncio de OTRO turno, que era el agujero
|
|
103
|
+
* por el que un huerfano se anunciaba para siempre.
|
|
72
104
|
*/
|
|
73
|
-
export declare function touchInFlightTurn(now?: number): void;
|
|
105
|
+
export declare function touchInFlightTurn(id: string, now?: number): void;
|
|
74
106
|
/**
|
|
75
|
-
* Limpia el turno en vuelo. Con `id`, SOLO
|
|
76
|
-
*
|
|
77
|
-
*
|
|
107
|
+
* Limpia el turno en vuelo. Con `id`, SOLO ese: dos turnos encadenados pueden
|
|
108
|
+
* cerrar fuera de orden, y un cierre tardio del viejo no tiene que borrar el
|
|
109
|
+
* anuncio del que recien arranco. Sin `id`, TODOS (apagado del servidor).
|
|
78
110
|
*/
|
|
79
111
|
export declare function clearInFlightTurn(id?: string): void;
|
|
80
112
|
/**
|
|
81
|
-
* El turno
|
|
113
|
+
* El turno que se ANUNCIA, o null si no hay ninguno vivo.
|
|
114
|
+
*
|
|
115
|
+
* El latido de presencia lleva UN turno (contrato del relay), asi que entre
|
|
116
|
+
* varios solapados hay que elegir, y se elige el que arranco ULTIMO: es el
|
|
117
|
+
* pedido que el dueno acaba de hacer y que esta esperando ver. Era justo el
|
|
118
|
+
* que se perdia -- con el slot unico, el que quedaba anunciado podia ser
|
|
119
|
+
* cualquiera, y si era un huerfano la guarda por id del telefono dejaba al
|
|
120
|
+
* pedido nuevo sin burbuja (PND-237, sintoma 6).
|
|
82
121
|
*
|
|
83
|
-
* La edad del turno no entra en la decision: un turno de tres horas
|
|
84
|
-
* latiendo es un turno vivo
|
|
122
|
+
* La edad del turno no entra en la decision de VIDA: un turno de tres horas
|
|
123
|
+
* que sigue latiendo es un turno vivo. Lo que lo saca es el silencio.
|
|
85
124
|
*/
|
|
86
125
|
export declare function inFlightTurn(now?: number): InFlightTurn | null;
|
|
126
|
+
/** Cuantos turnos vivos declara este panel (diagnostico / tests). */
|
|
127
|
+
export declare function inFlightCount(now?: number): number;
|
|
87
128
|
/** Solo para tests. */
|
|
88
129
|
export declare function _resetInFlightTurn(): void;
|
|
89
130
|
//# sourceMappingURL=in_flight_turn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in_flight_turn.d.ts","sourceRoot":"","sources":["../../src/relay/in_flight_turn.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"in_flight_turn.d.ts","sourceRoot":"","sources":["../../src/relay/in_flight_turn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,eAAe,QAA4B,CAAC;AAUzD,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,GAAE,MAAmB,GAAG,IAAI,CAS/E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,IAAI,CAK5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAGnD;AAWD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAmB,GAAG,YAAY,GAAG,IAAI,CAiB1E;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM,CAG9D;AAED,uBAAuB;AACvB,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -24,6 +24,32 @@
|
|
|
24
24
|
* refresco a mano -- cae sobre un latido reciente y reconstruye que esta
|
|
25
25
|
* corriendo, incluso si el telefono no estaba conectado cuando arranco.
|
|
26
26
|
*
|
|
27
|
+
* POR QUE ES UN REGISTRO Y NO UNA VARIABLE (PND-237, 30-oct-2026).
|
|
28
|
+
*
|
|
29
|
+
* Esto era UN solo slot (`let current`), y un panel corre turnos SOLAPADOS: el
|
|
30
|
+
* dueno manda un pedido mientras el anterior sigue, o entra uno por el puente.
|
|
31
|
+
* Con un solo slot el segundo pisaba al primero, y `clearInFlightTurn(id)` --
|
|
32
|
+
* que NO limpia si el id no coincide, y eso esta bien, porque un cierre tardio
|
|
33
|
+
* no tiene que borrar el anuncio del que recien arranco -- dejaba al pisado
|
|
34
|
+
* SIN NINGUN camino de salida. Peor: `touchInFlightTurn()` refrescaba lo que
|
|
35
|
+
* hubiera en el slot sin mirar el id, asi que el latido de cualquier turno
|
|
36
|
+
* POSTERIOR mantenia vivo al huerfano y el tope de silencio no vencia nunca.
|
|
37
|
+
*
|
|
38
|
+
* Medido en produccion (D1, 30-oct-2026 13:25 UTC): el panel de adip-kikan
|
|
39
|
+
* venia anunciando `dt-mvuyvonj` -- arrancado 12:47:13 -- durante 152 latidos
|
|
40
|
+
* y 38 minutos, mientras el MISMO panel ya habia publicado los remote_turn
|
|
41
|
+
* completos de dos turnos que arrancaron a su lado (12:46:39 y 12:47:40: los
|
|
42
|
+
* tres se solapan en 61 segundos). El telefono mostraba la burbuja "trabajando"
|
|
43
|
+
* con el texto viejo, y como su guarda es por id, el turno REAL no recibia
|
|
44
|
+
* burbuja: el dueno veia una sesion trabajando sin su pedido a la vista.
|
|
45
|
+
*
|
|
46
|
+
* Las dos reglas que lo cierran, y que son el contrato de este modulo:
|
|
47
|
+
* - un turno es una ENTRADA propia, identificada por su id. Nadie pisa a
|
|
48
|
+
* nadie, y cada uno sale por su propio cierre o por su propio silencio.
|
|
49
|
+
* - la SENAL DE VIDA esta ligada al id que la produce (touchInFlightTurn(id)).
|
|
50
|
+
* Un latido solo puede hablar por SU turno. Eso es lo que le devuelve el
|
|
51
|
+
* poder al tope de silencio: un huerfano deja de ser tocado y vence.
|
|
52
|
+
*
|
|
27
53
|
* ASCII puro.
|
|
28
54
|
*/
|
|
29
55
|
/**
|
|
@@ -54,63 +80,105 @@ export const PULSO_DE_PROGRESO_MS = 60 * 1000;
|
|
|
54
80
|
*
|
|
55
81
|
* Diez pulsos de margen: tolera que se pierdan nueve latidos seguidos antes de
|
|
56
82
|
* dar por muerto un turno que esta vivo.
|
|
83
|
+
*
|
|
84
|
+
* PND-237: esta garantia solo existe de verdad desde que la senal de vida va
|
|
85
|
+
* por id. Mientras `touch()` refrescaba el slot entero, el latido de un turno
|
|
86
|
+
* nuevo reseteaba el reloj del huerfano y este tope era letra muerta.
|
|
57
87
|
*/
|
|
58
88
|
export const SILENCIO_MAX_MS = PULSO_DE_PROGRESO_MS * 10;
|
|
59
|
-
|
|
89
|
+
/** Los turnos vivos de ESTE panel, por id. Varios a la vez es lo normal. */
|
|
90
|
+
const vivos = new Map();
|
|
60
91
|
export function setInFlightTurn(t, now = Date.now()) {
|
|
61
92
|
if (!t || !t.id)
|
|
62
93
|
return;
|
|
63
|
-
|
|
64
|
-
|
|
94
|
+
const id = String(t.id);
|
|
95
|
+
vivos.set(id, {
|
|
96
|
+
id,
|
|
65
97
|
user: String(t.user || ''),
|
|
66
98
|
started_at: String(t.started_at || new Date(now).toISOString()),
|
|
67
99
|
visto: now,
|
|
68
|
-
};
|
|
100
|
+
});
|
|
69
101
|
}
|
|
70
102
|
/**
|
|
71
|
-
* Senal de vida
|
|
72
|
-
*
|
|
103
|
+
* Senal de vida de UN turno. La llama el latido de actividad de ese turno,
|
|
104
|
+
* que corre solo mientras el turno vive.
|
|
73
105
|
*
|
|
74
|
-
* No crea nada: si no
|
|
75
|
-
* rezagado no puede resucitar un turno ya cerrado
|
|
106
|
+
* No crea nada: si ese id no esta registrado, no hace nada. Asi un latido
|
|
107
|
+
* rezagado no puede resucitar un turno ya cerrado -- y, desde PND-237, no
|
|
108
|
+
* puede tampoco mantener vivo el anuncio de OTRO turno, que era el agujero
|
|
109
|
+
* por el que un huerfano se anunciaba para siempre.
|
|
76
110
|
*/
|
|
77
|
-
export function touchInFlightTurn(now = Date.now()) {
|
|
78
|
-
if (!
|
|
111
|
+
export function touchInFlightTurn(id, now = Date.now()) {
|
|
112
|
+
if (!id)
|
|
113
|
+
return;
|
|
114
|
+
const r = vivos.get(String(id));
|
|
115
|
+
if (!r)
|
|
79
116
|
return;
|
|
80
|
-
|
|
117
|
+
r.visto = now;
|
|
81
118
|
}
|
|
82
119
|
/**
|
|
83
|
-
* Limpia el turno en vuelo. Con `id`, SOLO
|
|
84
|
-
*
|
|
85
|
-
*
|
|
120
|
+
* Limpia el turno en vuelo. Con `id`, SOLO ese: dos turnos encadenados pueden
|
|
121
|
+
* cerrar fuera de orden, y un cierre tardio del viejo no tiene que borrar el
|
|
122
|
+
* anuncio del que recien arranco. Sin `id`, TODOS (apagado del servidor).
|
|
86
123
|
*/
|
|
87
124
|
export function clearInFlightTurn(id) {
|
|
88
|
-
if (!
|
|
125
|
+
if (!id) {
|
|
126
|
+
vivos.clear();
|
|
89
127
|
return;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
128
|
+
}
|
|
129
|
+
vivos.delete(String(id));
|
|
130
|
+
}
|
|
131
|
+
/** Poda las entradas que se quedaron CALLADAS. */
|
|
132
|
+
function podar(now) {
|
|
133
|
+
for (const [id, r] of vivos) {
|
|
134
|
+
/* Un reloj que salta hacia atras da silencio negativo: no vence. Preferible
|
|
135
|
+
* anunciar un turno de mas que descartar uno vivo por un salto de NTP. */
|
|
136
|
+
if (now - r.visto > SILENCIO_MAX_MS)
|
|
137
|
+
vivos.delete(id);
|
|
138
|
+
}
|
|
93
139
|
}
|
|
94
140
|
/**
|
|
95
|
-
* El turno
|
|
141
|
+
* El turno que se ANUNCIA, o null si no hay ninguno vivo.
|
|
96
142
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
143
|
+
* El latido de presencia lleva UN turno (contrato del relay), asi que entre
|
|
144
|
+
* varios solapados hay que elegir, y se elige el que arranco ULTIMO: es el
|
|
145
|
+
* pedido que el dueno acaba de hacer y que esta esperando ver. Era justo el
|
|
146
|
+
* que se perdia -- con el slot unico, el que quedaba anunciado podia ser
|
|
147
|
+
* cualquiera, y si era un huerfano la guarda por id del telefono dejaba al
|
|
148
|
+
* pedido nuevo sin burbuja (PND-237, sintoma 6).
|
|
149
|
+
*
|
|
150
|
+
* La edad del turno no entra en la decision de VIDA: un turno de tres horas
|
|
151
|
+
* que sigue latiendo es un turno vivo. Lo que lo saca es el silencio.
|
|
99
152
|
*/
|
|
100
153
|
export function inFlightTurn(now = Date.now()) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
154
|
+
podar(now);
|
|
155
|
+
let elegido = null;
|
|
156
|
+
let mejor = -Infinity;
|
|
157
|
+
for (const r of vivos.values()) {
|
|
158
|
+
/* Un started_at ilegible NO puede ganar la eleccion. Date.parse devuelve
|
|
159
|
+
* NaN y toda comparacion con NaN es false, asi que comparando en crudo el
|
|
160
|
+
* primero de la iteracion se quedaba con el anuncio para siempre -- el
|
|
161
|
+
* mismo sintoma que estamos arreglando, por otra puerta. Vale -Infinity:
|
|
162
|
+
* se anuncia solo si es el unico que hay. */
|
|
163
|
+
const t = Date.parse(r.started_at);
|
|
164
|
+
const orden = Number.isFinite(t) ? t : -Infinity;
|
|
165
|
+
if (!elegido || orden > mejor) {
|
|
166
|
+
elegido = r;
|
|
167
|
+
mejor = orden;
|
|
168
|
+
}
|
|
108
169
|
}
|
|
109
|
-
|
|
170
|
+
if (!elegido)
|
|
171
|
+
return null;
|
|
172
|
+
const { id, user, started_at } = elegido;
|
|
110
173
|
return { id, user, started_at };
|
|
111
174
|
}
|
|
175
|
+
/** Cuantos turnos vivos declara este panel (diagnostico / tests). */
|
|
176
|
+
export function inFlightCount(now = Date.now()) {
|
|
177
|
+
podar(now);
|
|
178
|
+
return vivos.size;
|
|
179
|
+
}
|
|
112
180
|
/** Solo para tests. */
|
|
113
181
|
export function _resetInFlightTurn() {
|
|
114
|
-
|
|
182
|
+
vivos.clear();
|
|
115
183
|
}
|
|
116
184
|
//# sourceMappingURL=in_flight_turn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in_flight_turn.js","sourceRoot":"","sources":["../../src/relay/in_flight_turn.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"in_flight_turn.js","sourceRoot":"","sources":["../../src/relay/in_flight_turn.ts"],"names":[],"mappings":"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"}
|