@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.
Files changed (36) hide show
  1. package/dist/chat/server.d.ts.map +1 -1
  2. package/dist/chat/server.js +108 -27
  3. package/dist/chat/server.js.map +1 -1
  4. package/dist/core/error_catalog.d.ts +27 -0
  5. package/dist/core/error_catalog.d.ts.map +1 -1
  6. package/dist/core/error_catalog.js +55 -0
  7. package/dist/core/error_catalog.js.map +1 -1
  8. package/dist/core/error_formatter.d.ts +12 -0
  9. package/dist/core/error_formatter.d.ts.map +1 -1
  10. package/dist/core/error_formatter.js +19 -0
  11. package/dist/core/error_formatter.js.map +1 -1
  12. package/dist/relay/command_consumer.d.ts +10 -0
  13. package/dist/relay/command_consumer.d.ts.map +1 -1
  14. package/dist/relay/command_consumer.js +10 -1
  15. package/dist/relay/command_consumer.js.map +1 -1
  16. package/dist/relay/in_flight_turn.d.ts +52 -11
  17. package/dist/relay/in_flight_turn.d.ts.map +1 -1
  18. package/dist/relay/in_flight_turn.js +98 -30
  19. package/dist/relay/in_flight_turn.js.map +1 -1
  20. package/dist/relay/loopback_turn.d.ts +82 -0
  21. package/dist/relay/loopback_turn.d.ts.map +1 -0
  22. package/dist/relay/loopback_turn.js +171 -0
  23. package/dist/relay/loopback_turn.js.map +1 -0
  24. package/dist/version.d.ts +1 -1
  25. package/dist/version.js +1 -1
  26. package/package.json +1 -1
  27. package/src/i18n/catalogs/ar.json +7 -0
  28. package/src/i18n/catalogs/de.json +7 -0
  29. package/src/i18n/catalogs/en.json +7 -0
  30. package/src/i18n/catalogs/es.json +7 -0
  31. package/src/i18n/catalogs/fr.json +7 -0
  32. package/src/i18n/catalogs/hi.json +7 -0
  33. package/src/i18n/catalogs/it.json +7 -0
  34. package/src/i18n/catalogs/ja.json +7 -0
  35. package/src/i18n/catalogs/pt.json +7 -0
  36. 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;AA2EnE;;;;;;;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;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"}
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;AAkBnE,MAAM,OAAO,GAAiC;IAC5C,CAAC,wBAAwB,CAAC,EAAE;QAC1B,UAAU,EAAE,8BAA8B;QAC1C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;QAChC,SAAS,EAAE,2CAA2C;KACvD;IACD,CAAC,mBAAmB,CAAC,EAAE;QACrB,UAAU,EAAE,yBAAyB;QACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;QAChC,SAAS,EAAE,sCAAsC;KAClD;IACD,CAAC,kBAAkB,CAAC,EAAE;QACpB,UAAU,EAAE,wBAAwB;QACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;QAChC,SAAS,EAAE,qCAAqC;KACjD;IACD,CAAC,oBAAoB,CAAC,EAAE;QACtB,UAAU,EAAE,0BAA0B;QACtC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS;QAClC,SAAS,EAAE,uCAAuC;KACnD;IACD,CAAC,mBAAmB,CAAC,EAAE;QACrB,UAAU,EAAE,yBAAyB;QACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS;QAClC,SAAS,EAAE,sCAAsC;KAClD;IACD,CAAC,kBAAkB,CAAC,EAAE;QACpB,UAAU,EAAE,wBAAwB;QACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;QAChC,SAAS,EAAE,qCAAqC;KACjD;IACD,CAAC,oBAAoB,CAAC,EAAE;QACtB,UAAU,EAAE,0BAA0B;QACtC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;QAChC,SAAS,EAAE,uCAAuC;KACnD;IACD,CAAC,sBAAsB,CAAC,EAAE;QACxB,UAAU,EAAE,4BAA4B;QACxC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;QAChC,SAAS,EAAE,yCAAyC;KACrD;IACD,CAAC,qBAAqB,CAAC,EAAE;QACvB,UAAU,EAAE,2BAA2B;QACvC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM;QAChC,SAAS,EAAE,wCAAwC;KACpD;IACD,CAAC,wBAAwB,CAAC,EAAE;QAC1B,UAAU,EAAE,8BAA8B;QAC1C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;QAChC,SAAS,EAAE,2CAA2C;KACvD;CACF,CAAC;AAEF;;sEAEsE;AAEtE;;;;;;;4DAO4D;AAC5D,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,UAAqD,EAAE,EACvD,IAAwB;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX;wCACgC;QAChC,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,CAAC;YAClH,GAAG,EAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,EAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,EAAG,EAAE,IAAI,EAAE,CAAC;YAClH,GAAG,EAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,EAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,EAAG,EAAE,IAAI,EAAE,CAAC;YAClH,QAAQ,EAAE,OAAO;YACjB,OAAO;SACR,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,CAAC,MAAc,EAAU,EAAE,CAC5C,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,GAAG,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC;QACzD,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAC,UAAU,GAAG,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;IAClE,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QACxB,GAAG,EAAG,UAAU,CAAC,KAAK,CAAC;QACvB,GAAG,EAAG,UAAU,CAAC,KAAK,CAAC;QACvB,GAAG,EAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QACnD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;kCAEkC;AAClC,SAAS,WAAW,CAAC,OAAkD;IACrE,MAAM,GAAG,GAAoC,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;;YACrD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;WAC1B,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;WAC1B,OAAO,CAAC,CAAC,GAAG,KAAM,QAAQ;WAC1B,OAAO,CAAC,CAAC,GAAG,KAAM,QAAQ,CAAC;AACpC,CAAC;AAED;2CAC2C;AAC3C,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAC1F,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,CA4ErF"}
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
- deps.reply(cmd.id, 'No pude completar tu pedido: ' + errMsg(e), true);
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":"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"}
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 del turno en curso. La llama el latido de actividad del
68
- * servidor, que corre solo mientras hay turno.
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 hay turno registrado, no hace nada. Asi un latido
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 si coincide: dos turnos encadenados
76
- * pueden cerrar fuera de orden, y un cierre tardio del viejo no tiene que
77
- * borrar el anuncio del que recien arranco.
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 en vuelo, o null si no hay o si se quedo CALLADO.
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 que sigue
84
- * latiendo es un turno vivo y se anuncia. Lo que lo saca es el silencio.
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;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;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;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,QAA4B,CAAC;AASzD,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,GAAE,MAAmB,GAAG,IAAI,CAQ/E;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAmB,GAAG,IAAI,CAGhE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAmB,GAAG,YAAY,GAAG,IAAI,CAU1E;AAED,uBAAuB;AACvB,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
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
- let current = null;
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
- current = {
64
- id: String(t.id),
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 del turno en curso. La llama el latido de actividad del
72
- * servidor, que corre solo mientras hay turno.
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 hay turno registrado, no hace nada. Asi un latido
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 (!current)
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
- current.visto = now;
117
+ r.visto = now;
81
118
  }
82
119
  /**
83
- * Limpia el turno en vuelo. Con `id`, SOLO si coincide: dos turnos encadenados
84
- * pueden cerrar fuera de orden, y un cierre tardio del viejo no tiene que
85
- * borrar el anuncio del que recien arranco.
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 (!current)
125
+ if (!id) {
126
+ vivos.clear();
89
127
  return;
90
- if (id && current.id !== id)
91
- return;
92
- current = null;
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 en vuelo, o null si no hay o si se quedo CALLADO.
141
+ * El turno que se ANUNCIA, o null si no hay ninguno vivo.
96
142
  *
97
- * La edad del turno no entra en la decision: un turno de tres horas que sigue
98
- * latiendo es un turno vivo y se anuncia. Lo que lo saca es el silencio.
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
- if (!current)
102
- return null;
103
- /* Un reloj que salta hacia atras da silencio negativo: no vence. Preferible
104
- * anunciar un turno de mas que descartar uno vivo por un salto de NTP. */
105
- if (now - current.visto > SILENCIO_MAX_MS) {
106
- current = null;
107
- return null;
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
- const { id, user, started_at } = current;
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
- current = null;
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;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AASH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,GAAG,EAAE,CAAC;AAOzD,IAAI,OAAO,GAAoB,IAAI,CAAC;AAEpC,MAAM,UAAU,eAAe,CAAC,CAAe,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACvE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO;IACxB,OAAO,GAAG;QACR,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/D,KAAK,EAAE,GAAG;KACX,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,IAAI,CAAC,GAAG,EAAE;IACxD,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAW;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,IAAI,EAAE,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE;QAAE,OAAO;IACpC,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,IAAI,CAAC,GAAG,EAAE;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B;8EAC0E;IAC1E,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,eAAe,EAAE,CAAC;QAC1C,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACzC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,kBAAkB;IAChC,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"in_flight_turn.js","sourceRoot":"","sources":["../../src/relay/in_flight_turn.ts"],"names":[],"mappings":"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"}