@nac3/forge-cli 1.23.4 → 1.23.5

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 (61) hide show
  1. package/dist/chat/doctrine_digest.d.ts.map +1 -1
  2. package/dist/chat/doctrine_digest.js +4 -1
  3. package/dist/chat/doctrine_digest.js.map +1 -1
  4. package/dist/chat/tools/evidence.d.ts +34 -2
  5. package/dist/chat/tools/evidence.d.ts.map +1 -1
  6. package/dist/chat/tools/evidence.js +90 -12
  7. package/dist/chat/tools/evidence.js.map +1 -1
  8. package/dist/commands/urazuke.d.ts.map +1 -1
  9. package/dist/commands/urazuke.js +27 -0
  10. package/dist/commands/urazuke.js.map +1 -1
  11. package/dist/core/error_catalog.d.ts +4 -0
  12. package/dist/core/error_catalog.d.ts.map +1 -1
  13. package/dist/core/error_catalog.js +16 -0
  14. package/dist/core/error_catalog.js.map +1 -1
  15. package/dist/core/loopback_post.d.ts +101 -0
  16. package/dist/core/loopback_post.d.ts.map +1 -0
  17. package/dist/core/loopback_post.js +156 -0
  18. package/dist/core/loopback_post.js.map +1 -0
  19. package/dist/docs/doctrine/urazuke.md +50 -38
  20. package/dist/mcp/forge_panel_server.d.ts +1 -26
  21. package/dist/mcp/forge_panel_server.d.ts.map +1 -1
  22. package/dist/mcp/forge_panel_server.js +5 -26
  23. package/dist/mcp/forge_panel_server.js.map +1 -1
  24. package/dist/mcp/forge_verbs_server.d.ts +1 -11
  25. package/dist/mcp/forge_verbs_server.d.ts.map +1 -1
  26. package/dist/mcp/forge_verbs_server.js +7 -23
  27. package/dist/mcp/forge_verbs_server.js.map +1 -1
  28. package/dist/mcp/panel_invoke.d.ts +51 -0
  29. package/dist/mcp/panel_invoke.d.ts.map +1 -0
  30. package/dist/mcp/panel_invoke.js +102 -0
  31. package/dist/mcp/panel_invoke.js.map +1 -0
  32. package/dist/nac3/internal_manifest.d.ts +2 -0
  33. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  34. package/dist/nac3/internal_manifest.js +18 -3
  35. package/dist/nac3/internal_manifest.js.map +1 -1
  36. package/dist/nac3/verb_budget.d.ts +110 -0
  37. package/dist/nac3/verb_budget.d.ts.map +1 -0
  38. package/dist/nac3/verb_budget.js +142 -0
  39. package/dist/nac3/verb_budget.js.map +1 -0
  40. package/dist/relay/loopback_turn.d.ts +15 -42
  41. package/dist/relay/loopback_turn.d.ts.map +1 -1
  42. package/dist/relay/loopback_turn.js +27 -115
  43. package/dist/relay/loopback_turn.js.map +1 -1
  44. package/dist/urazuke/evidence.d.ts +22 -0
  45. package/dist/urazuke/evidence.d.ts.map +1 -1
  46. package/dist/urazuke/evidence.js +42 -3
  47. package/dist/urazuke/evidence.js.map +1 -1
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.js +1 -1
  50. package/docs/doctrine/urazuke.md +50 -38
  51. package/package.json +1 -1
  52. package/src/i18n/catalogs/ar.json +3 -0
  53. package/src/i18n/catalogs/de.json +3 -0
  54. package/src/i18n/catalogs/en.json +3 -0
  55. package/src/i18n/catalogs/es.json +3 -0
  56. package/src/i18n/catalogs/fr.json +3 -0
  57. package/src/i18n/catalogs/hi.json +3 -0
  58. package/src/i18n/catalogs/it.json +3 -0
  59. package/src/i18n/catalogs/ja.json +3 -0
  60. package/src/i18n/catalogs/pt.json +3 -0
  61. package/src/i18n/catalogs/zh.json +3 -0
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Cuanto puede durar la invocacion de un verbo, y quien lo decide.
3
+ *
4
+ * EL DEFECTO (PND-235). Los dos servers MCP reenvian cada invocacion al
5
+ * servidor de chat por loopback y esperan la respuesta. Con `fetch` esa espera
6
+ * heredaba el techo de undici -- 305.677 ms MEDIDOS en Node 22.16 -- y moria
7
+ * ahi. El techo no era una decision de nadie: era el default de una libreria
8
+ * aplicado a un canal para el que no estaba pensado. Y era un techo SECRETO:
9
+ * `yujin.evidence.run` declara en su schema que acepta hasta 30 minutos, el
10
+ * servidor los honra, y la invocacion se caia a los cinco. El verbo que
11
+ * acredita una bateria de siete minutos era justo el que no podia dejar
12
+ * recibo.
13
+ *
14
+ * LA REGLA. El presupuesto del transporte sale de lo que el VERBO declara, no
15
+ * de lo que la libreria trae puesto. Nadie impone por debajo un techo mas bajo
16
+ * que el que el verbo promete.
17
+ *
18
+ * PERO EL PRESUPUESTO NO ES INFINITO, Y EL LIMITE NO ES ARBITRARIO. En modo
19
+ * Plan el verbo corre adentro de un turno de `claude -p`, y ese turno tiene su
20
+ * propia vigilia de SILENCIO (limits.claude_cli_silence_ms, 15 min por
21
+ * default): mientras una tool call esta pendiente el subproceso no emite un
22
+ * solo evento, asi que una invocacion que bloquea mas que esa ventana no falla
23
+ * sola -- se lleva el TURNO ENTERO por colgado. Por eso lo que un verbo puede
24
+ * BLOQUEAR tiene que quedar por debajo de esa ventana, con margen.
25
+ *
26
+ * Y de ahi sale la otra mitad del arreglo: un verbo que legitimamente dura mas
27
+ * que la ventana de bloqueo no se recorta en silencio, se corre EN SEGUNDO
28
+ * PLANO y devuelve un handle (ver chat/tools/evidence.ts). El techo deja de ser
29
+ * secreto: o entra en la ventana, o el verbo te dice que lo lanzo aparte.
30
+ *
31
+ * ASCII puro.
32
+ */
33
+ import { manifest } from './internal_manifest.js';
34
+ /**
35
+ * Lo maximo que una invocacion puede BLOQUEAR el turno.
36
+ *
37
+ * Diez minutos. El numero sale de la vigilia de silencio del subproceso
38
+ * (claude_cli_silence_ms, 15 min por default): bloquear mas que eso no da un
39
+ * error del verbo, mata el turno. Diez mas el margen de abajo deja cuatro
40
+ * minutos de aire. La simetria con ese limite esta cuidada por un test: si
41
+ * alguien baja la vigilia, el test lo avisa antes de que se vuelva un turno
42
+ * muerto en produccion.
43
+ */
44
+ export const VERB_BLOCKING_MAX_MS = 10 * 60_000;
45
+ /**
46
+ * Margen del despachador por encima del tope del propio verbo.
47
+ *
48
+ * El verbo mide SU trabajo; el presupuesto del transporte tiene que cubrir
49
+ * ademas lo que pasa alrededor (resolver el schema, la cola del panel, armar y
50
+ * serializar la respuesta). Sin margen, el transporte se cae un instante antes
51
+ * de que la respuesta salga -- el peor de los dos mundos: el trabajo hecho y
52
+ * el resultado perdido.
53
+ */
54
+ export const VERB_BUDGET_OVERHEAD_MS = 60_000;
55
+ /** Piso: ni la invocacion mas trivial se corta antes de esto. */
56
+ export const VERB_BUDGET_MIN_MS = 30_000;
57
+ /**
58
+ * El presupuesto de un verbo que NO declara cuanto puede durar.
59
+ *
60
+ * Cinco minutos, y si -- es casi el mismo numero que heredaba de undici. Eso
61
+ * es deliberado: para un verbo que no declara nada (leer un archivo, un git
62
+ * status, el grafo) cinco minutos nunca fue el problema. El problema era
63
+ * aplicarle ese mismo techo al verbo que declara TREINTA minutos y despues
64
+ * tratar el corte como un fracaso del trabajo.
65
+ *
66
+ * Elegirlo igual tiene una segunda virtud: el radio de este cambio queda
67
+ * acotado a los verbos que SI declaran un tope. Para todos los demas el
68
+ * comportamiento es el de antes, y un servidor colgado se reporta en cinco
69
+ * minutos y no en once -- que, con la vigilia de silencio en quince, es la
70
+ * diferencia entre un error legible y un turno muerto sin explicacion.
71
+ */
72
+ export const VERB_BUDGET_DEFAULT_MS = 5 * 60_000;
73
+ /** El techo absoluto que puede salir de esta funcion. */
74
+ export const VERB_BUDGET_MAX_MS = VERB_BLOCKING_MAX_MS + VERB_BUDGET_OVERHEAD_MS;
75
+ /**
76
+ * El tope que el VERBO declara para si mismo, leido de su schema.
77
+ *
78
+ * `undefined` cuando el verbo no acepta timeout_ms: no es un verbo pensado
79
+ * para durar, y su presupuesto sale del default.
80
+ */
81
+ export function verbTimeoutCeilingMs(verb) {
82
+ const props = verb?.schema?.properties;
83
+ const t = props?.['timeout_ms'];
84
+ if (!t)
85
+ return undefined;
86
+ const max = typeof t.maximum === 'number' && Number.isFinite(t.maximum) && t.maximum > 0
87
+ ? t.maximum : undefined;
88
+ /* Declara timeout_ms pero sin maximo en el schema: se le cree que puede
89
+ * durar, y el techo lo pone la ventana de bloqueo. */
90
+ return max ?? VERB_BLOCKING_MAX_MS;
91
+ }
92
+ function positivo(v) {
93
+ const n = typeof v === 'number' ? v : typeof v === 'string' ? Number(v) : NaN;
94
+ return Number.isFinite(n) && n > 0 ? n : undefined;
95
+ }
96
+ /**
97
+ * El presupuesto de transporte para UNA invocacion.
98
+ *
99
+ * Orden de preferencia: lo que el llamador pidio en los args, si no el tope
100
+ * que el verbo declara, si no el default. Siempre con el margen del
101
+ * despachador encima y acotado por la ventana de bloqueo.
102
+ */
103
+ export function invokeBudgetMs(verbId, args = {}, verbs = manifest().verbs) {
104
+ const verb = verbs.find((v) => v.id === verbId);
105
+ const ceiling = verbTimeoutCeilingMs(verb);
106
+ /* El verbo no declara cuanto puede durar: techo plano, sin margen que
107
+ * cubrir, y el de siempre. */
108
+ if (ceiling === undefined)
109
+ return VERB_BUDGET_DEFAULT_MS;
110
+ /* El tope del verbo manda sobre lo que pida el llamador: el servidor lo va a
111
+ * recortar igual, asi que esperar mas seria esperar de gusto. */
112
+ const propio = Math.min(positivo(args['timeout_ms']) ?? ceiling, ceiling);
113
+ const conMargen = Math.min(propio, VERB_BLOCKING_MAX_MS) + VERB_BUDGET_OVERHEAD_MS;
114
+ return Math.min(Math.max(conMargen, VERB_BUDGET_MIN_MS), VERB_BUDGET_MAX_MS);
115
+ }
116
+ /**
117
+ * Este trabajo entra en la ventana de bloqueo, o hay que lanzarlo aparte.
118
+ *
119
+ * El llamador que SI conoce la ventana real (el servidor, que lee limits.json)
120
+ * puede pasarla; sin eso se usa el default, que es el caso del subproceso.
121
+ */
122
+ export function fitsInBlockingWindow(timeoutMs, windowMs = VERB_BLOCKING_MAX_MS) {
123
+ return timeoutMs <= windowMs;
124
+ }
125
+ /** Margen que se le deja a la vigilia de silencio: el turno tiene que poder
126
+ * recibir el resultado y contarlo antes de que el vigilante lo mate. */
127
+ export const BLOCKING_WINDOW_MARGIN_MS = 2 * 60_000;
128
+ /**
129
+ * La ventana de bloqueo REAL, para quien puede leer la configuracion viva.
130
+ *
131
+ * El default es una cota superior pensada para la vigilia de silencio por
132
+ * default (15 min). Si el dueno la baja, la ventana baja con ella: si no,
133
+ * un verbo que "entra" por el default se llevaria el turno puesto. Y nunca
134
+ * baja de un minuto, porque una ventana de cero mandaria al fondo hasta la
135
+ * corrida mas corta.
136
+ */
137
+ export function blockingWindowMs(silenceMs) {
138
+ if (!Number.isFinite(silenceMs) || silenceMs <= 0)
139
+ return VERB_BLOCKING_MAX_MS;
140
+ return Math.max(60_000, Math.min(VERB_BLOCKING_MAX_MS, silenceMs - BLOCKING_WINDOW_MARGIN_MS));
141
+ }
142
+ //# sourceMappingURL=verb_budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verb_budget.js","sourceRoot":"","sources":["../../src/nac3/verb_budget.ts"],"names":[],"mappings":"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"}
@@ -9,47 +9,21 @@
9
9
  * sin una segunda implementacion que se desincronice.
10
10
  *
11
11
  * EL DEFECTO QUE ESTE MODULO CIERRA (PND-234. Pablo, 29-oct-2026, desde el
12
- * telefono: "No pude completar tu pedido: fetch failed").
12
+ * telefono: "No pude completar tu pedido: fetch failed"). La respuesta de
13
+ * /api/chat es un JSON que recien se arma cuando el turno entero termino, asi
14
+ * que con `fetch` el POST moria a los cinco minutos y el usuario recibia un
15
+ * fracaso por un trabajo que el escritorio estaba terminando bien.
13
16
  *
14
- * La respuesta de /api/chat es un JSON, no un stream, asi que sus CABECERAS
15
- * recien salen cuando el turno entero termino. Con `fetch` sin opciones ese
16
- * POST hereda el headersTimeout de undici, que es un limite pensado para una
17
- * llamada corta, y pasado ese punto muere el fetch -- no el turno. El
18
- * escritorio seguia trabajando y terminaba el trabajo, pero el telefono ya
19
- * habia recibido "fetch failed" y el usuario quedaba creyendo que no se hizo
20
- * nada.
21
- *
22
- * El limite esta MEDIDO, no estimado: contra un servidor que acepta la
23
- * conexion y nunca responde, el fetch global de Node 22.16 murio a los
24
- * 305.677 ms con name=TypeError, message="fetch failed" y
25
- * cause.code=UND_ERR_HEADERS_TIMEOUT. El turno del reporte habia durado 22
26
- * minutos (turn_routing.jsonl 13:36:33Z; los archivos que escribio tienen
27
- * mtime hasta 10:58 local). O sea: cinco minutos de techo para turnos que
28
- * duran veinte. El defecto es determinista y crece con la utilidad del
29
- * pedido -- cuanto mas trabajo pide el usuario desde el telefono, mas seguro
30
- * es que no vea el resultado.
31
- *
32
- * POR QUE node:http Y NO fetch. Es la unica forma de mandar los tiempos sin
33
- * depender de undici: Node lo trae adentro pero no lo expone como paquete, y
34
- * construir un Agent con otro headersTimeout exigiria declarar una
35
- * dependencia nueva para algo que el stdlib ya hace. La conexion es loopback
36
- * y en claro, asi que no se pierde nada por bajar de capa.
37
- *
38
- * EL PRESUPUESTO NO DESAPARECE, cambia de escala. Sin ningun limite, un
39
- * servidor de chat colgado dejaria al consumidor esperando para siempre -- y
40
- * como atiende un pedido a la vez, ningun pedido POSTERIOR del telefono se
41
- * correria nunca. Lo que no se usa es `req.setTimeout`, que mide INACTIVIDAD
42
- * del socket: un turno que piensa diez minutos no manda un byte, y ese
43
- * temporizador lo mataria sin motivo, que es la forma exacta del bug que esto
44
- * cierra. Lo que se mide es el tiempo TOTAL, con un techo mas alto que
45
- * cualquier turno legitimo.
46
- *
47
- * Y al vencerse, el usuario recibe algo accionable y VERDADERO: que el
48
- * escritorio puede seguir trabajando y donde ver el resultado. El mensaje
49
- * anterior ("no pude completar tu pedido") era falso en el caso mas comun.
17
+ * EL TRANSPORTE YA NO VIVE ACA (PND-235). El mismo techo aparecio identico en
18
+ * el canal de los verbos MCP, asi que el POST con presupuesto se mudo a
19
+ * core/loopback_post.ts y lo comparten los dos caminos. Lo que queda aca es lo
20
+ * que SI es del telefono: el techo de una hora y como se le cuenta el corte al
21
+ * usuario. El detalle de por que node:http y no fetch esta en ese modulo.
50
22
  *
51
23
  * ASCII puro.
52
24
  */
25
+ import { type LoopbackResponse } from '../core/loopback_post.js';
26
+ export type { LoopbackResponse };
53
27
  /**
54
28
  * Techo de tiempo total para un turno pedido desde el telefono.
55
29
  *
@@ -63,15 +37,14 @@
63
37
  export declare const MOBILE_TURN_BUDGET_MS: number;
64
38
  /** El techo efectivo, con el override de operacion. */
65
39
  export declare function mobileTurnBudgetMs(env?: NodeJS.ProcessEnv): number;
66
- export interface LoopbackResponse {
67
- status: number;
68
- body: string;
69
- }
70
40
  /**
71
41
  * POST al /api/chat local, esperando lo que tarde el turno.
72
42
  *
73
43
  * Devuelve el status y el cuerpo crudo; parsear es del llamador, que es el
74
- * que conoce la forma de la respuesta.
44
+ * que conoce la forma de la respuesta. Al cortarse, el usuario recibe algo
45
+ * accionable y VERDADERO: que el escritorio puede seguir trabajando y donde
46
+ * ver el resultado. El mensaje anterior ("no pude completar tu pedido") era
47
+ * falso en el caso mas comun.
75
48
  */
76
49
  export declare function postChatTurn(args: {
77
50
  port: number;
@@ -1 +1 @@
1
- {"version":3,"file":"loopback_turn.d.ts","sourceRoot":"","sources":["../../src/relay/loopback_turn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAQH;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAEjD,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAU/E;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6E5B"}
1
+ {"version":3,"file":"loopback_turn.d.ts","sourceRoot":"","sources":["../../src/relay/loopback_turn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,OAAO,EAAiC,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEhG,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAEjD,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAU/E;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwB5B"}
@@ -9,50 +9,22 @@
9
9
  * sin una segunda implementacion que se desincronice.
10
10
  *
11
11
  * EL DEFECTO QUE ESTE MODULO CIERRA (PND-234. Pablo, 29-oct-2026, desde el
12
- * telefono: "No pude completar tu pedido: fetch failed").
12
+ * telefono: "No pude completar tu pedido: fetch failed"). La respuesta de
13
+ * /api/chat es un JSON que recien se arma cuando el turno entero termino, asi
14
+ * que con `fetch` el POST moria a los cinco minutos y el usuario recibia un
15
+ * fracaso por un trabajo que el escritorio estaba terminando bien.
13
16
  *
14
- * La respuesta de /api/chat es un JSON, no un stream, asi que sus CABECERAS
15
- * recien salen cuando el turno entero termino. Con `fetch` sin opciones ese
16
- * POST hereda el headersTimeout de undici, que es un limite pensado para una
17
- * llamada corta, y pasado ese punto muere el fetch -- no el turno. El
18
- * escritorio seguia trabajando y terminaba el trabajo, pero el telefono ya
19
- * habia recibido "fetch failed" y el usuario quedaba creyendo que no se hizo
20
- * nada.
21
- *
22
- * El limite esta MEDIDO, no estimado: contra un servidor que acepta la
23
- * conexion y nunca responde, el fetch global de Node 22.16 murio a los
24
- * 305.677 ms con name=TypeError, message="fetch failed" y
25
- * cause.code=UND_ERR_HEADERS_TIMEOUT. El turno del reporte habia durado 22
26
- * minutos (turn_routing.jsonl 13:36:33Z; los archivos que escribio tienen
27
- * mtime hasta 10:58 local). O sea: cinco minutos de techo para turnos que
28
- * duran veinte. El defecto es determinista y crece con la utilidad del
29
- * pedido -- cuanto mas trabajo pide el usuario desde el telefono, mas seguro
30
- * es que no vea el resultado.
31
- *
32
- * POR QUE node:http Y NO fetch. Es la unica forma de mandar los tiempos sin
33
- * depender de undici: Node lo trae adentro pero no lo expone como paquete, y
34
- * construir un Agent con otro headersTimeout exigiria declarar una
35
- * dependencia nueva para algo que el stdlib ya hace. La conexion es loopback
36
- * y en claro, asi que no se pierde nada por bajar de capa.
37
- *
38
- * EL PRESUPUESTO NO DESAPARECE, cambia de escala. Sin ningun limite, un
39
- * servidor de chat colgado dejaria al consumidor esperando para siempre -- y
40
- * como atiende un pedido a la vez, ningun pedido POSTERIOR del telefono se
41
- * correria nunca. Lo que no se usa es `req.setTimeout`, que mide INACTIVIDAD
42
- * del socket: un turno que piensa diez minutos no manda un byte, y ese
43
- * temporizador lo mataria sin motivo, que es la forma exacta del bug que esto
44
- * cierra. Lo que se mide es el tiempo TOTAL, con un techo mas alto que
45
- * cualquier turno legitimo.
46
- *
47
- * Y al vencerse, el usuario recibe algo accionable y VERDADERO: que el
48
- * escritorio puede seguir trabajando y donde ver el resultado. El mensaje
49
- * anterior ("no pude completar tu pedido") era falso en el caso mas comun.
17
+ * EL TRANSPORTE YA NO VIVE ACA (PND-235). El mismo techo aparecio identico en
18
+ * el canal de los verbos MCP, asi que el POST con presupuesto se mudo a
19
+ * core/loopback_post.ts y lo comparten los dos caminos. Lo que queda aca es lo
20
+ * que SI es del telefono: el techo de una hora y como se le cuenta el corte al
21
+ * usuario. El detalle de por que node:http y no fetch esta en ese modulo.
50
22
  *
51
23
  * ASCII puro.
52
24
  */
53
- import http from 'node:http';
54
25
  import { renderForgeError, ForgeFailure } from '../core/error_catalog.js';
55
26
  import { E_MOBILE_TURN_UNANSWERED, E_MOBILE_TURN_UNDELIVERED, } from '../core/error_catalog.js';
27
+ import { postLoopbackJson, LoopbackCut } from '../core/loopback_post.js';
56
28
  /**
57
29
  * Techo de tiempo total para un turno pedido desde el telefono.
58
30
  *
@@ -82,90 +54,30 @@ export function mobileTurnBudgetMs(env = process.env) {
82
54
  * POST al /api/chat local, esperando lo que tarde el turno.
83
55
  *
84
56
  * Devuelve el status y el cuerpo crudo; parsear es del llamador, que es el
85
- * que conoce la forma de la respuesta.
57
+ * que conoce la forma de la respuesta. Al cortarse, el usuario recibe algo
58
+ * accionable y VERDADERO: que el escritorio puede seguir trabajando y donde
59
+ * ver el resultado. El mensaje anterior ("no pude completar tu pedido") era
60
+ * falso en el caso mas comun.
86
61
  */
87
62
  export async function postChatTurn(args) {
88
63
  const budget = args.budgetMs ?? mobileTurnBudgetMs();
89
- const body = Buffer.from(JSON.stringify(args.payload), 'utf8');
90
64
  const minutes = Math.max(1, Math.round(budget / 60_000));
91
- return new Promise((resolve, reject) => {
92
- let settled = false;
93
- /* Que se vencio el presupuesto se recuerda aparte del error del socket:
94
- * `req.destroy()` llega al handler de error como un ECONNRESET cualquiera,
95
- * y sin esta marca el usuario recibiria el mensaje de "no se entrego" --
96
- * el que dice que no se ejecuto nada -- justamente en el caso en que si se
97
- * ejecuto. Era el error del que venimos. */
98
- let vencido = false;
99
- const req = http.request({
100
- host: '127.0.0.1',
65
+ try {
66
+ return await postLoopbackJson({
101
67
  port: args.port,
102
68
  path: args.path ?? '/api/chat',
103
- method: 'POST',
104
- headers: {
105
- 'content-type': 'application/json',
106
- 'content-length': String(body.byteLength),
107
- },
108
- }, (res) => {
109
- const chunks = [];
110
- res.on('data', (c) => chunks.push(c));
111
- res.on('end', () => {
112
- if (settled)
113
- return;
114
- settled = true;
115
- clearTimeout(timer);
116
- resolve({
117
- status: res.statusCode ?? 0,
118
- body: Buffer.concat(chunks).toString('utf8'),
119
- });
120
- });
121
- /* Un corte MIENTRAS baja el cuerpo tampoco es "no se entrego": el turno
122
- * ya corrio y el servidor ya estaba contestando. */
123
- res.on('error', (e) => fail(e, true));
69
+ payload: args.payload,
70
+ budgetMs: budget,
124
71
  });
125
- const timer = setTimeout(() => {
126
- vencido = true;
127
- req.destroy(new Error('presupuesto de turno vencido'));
128
- }, budget);
129
- /* Que este temporizador no sea lo que mantiene vivo al proceso. */
130
- if (typeof timer.unref === 'function') {
131
- timer.unref();
72
+ }
73
+ catch (e) {
74
+ /* "No se entrego" se dice SOLO con prueba positiva de que nada corrio, y
75
+ * esa clasificacion la hace el transporte (es conocimiento del socket).
76
+ * Aca se traduce a los codigos del telefono y a su idioma. */
77
+ if (e instanceof LoopbackCut && e.kind === 'undelivered') {
78
+ throw new ForgeFailure(renderForgeError(E_MOBILE_TURN_UNDELIVERED, { port: args.port }), e.cause ?? e);
132
79
  }
133
- const fail = (cause, yaCorrio) => {
134
- if (settled)
135
- return;
136
- settled = true;
137
- clearTimeout(timer);
138
- /* "No se entrego" se dice SOLO con prueba positiva de que nada corrio,
139
- * y la unica prueba positiva es que la conexion no se llego a
140
- * establecer. Cualquier otro corte -- el socket se cayo despues del
141
- * saludo, el servidor murio a mitad del turno -- deja abierta la
142
- * posibilidad de que el turno si haya corrido, y en la duda no se le
143
- * dice al usuario que no se hizo nada: se le dice que no hubo respuesta
144
- * y donde mirar. Es la misma doctrina que decidePick e
145
- * liveBelongsToProject en el lado del telefono: descartar solo con
146
- * prueba de lo contrario. */
147
- const noEntrego = !vencido && !yaCorrio && esRechazoDeConexion(cause);
148
- if (noEntrego) {
149
- reject(new ForgeFailure(renderForgeError(E_MOBILE_TURN_UNDELIVERED, { port: args.port }), cause));
150
- return;
151
- }
152
- reject(new ForgeFailure(renderForgeError(E_MOBILE_TURN_UNANSWERED, { minutes }), cause));
153
- };
154
- req.on('error', (e) => fail(e, false));
155
- req.end(body);
156
- });
157
- }
158
- /**
159
- * El socket nunca llego a conectar: no hay servidor escuchando ahi.
160
- *
161
- * Es la unica evidencia de que el turno NO corrio. Se mira el errno y no el
162
- * texto porque el texto cambia entre versiones de Node y entre sistemas.
163
- */
164
- function esRechazoDeConexion(e) {
165
- const code = e?.code;
166
- if (!code)
167
- return false;
168
- return code === 'ECONNREFUSED' || code === 'ENOTFOUND'
169
- || code === 'EADDRNOTAVAIL' || code === 'EHOSTUNREACH';
80
+ throw new ForgeFailure(renderForgeError(E_MOBILE_TURN_UNANSWERED, { minutes }), e instanceof LoopbackCut ? (e.cause ?? e) : e);
81
+ }
170
82
  }
171
83
  //# sourceMappingURL=loopback_turn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loopback_turn.js","sourceRoot":"","sources":["../../src/relay/loopback_turn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EACL,wBAAwB,EAAE,yBAAyB,GACpD,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,MAAM,CAAC;AAEjD,uDAAuD;AACvD,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,MAAM,GAAG,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC5C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,qBAAqB,CAAC;IAClE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB;;;0CAGsC;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAChE,OAAO,CAAC,CAAC;AACX,CAAC;AAOD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAKlC;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,kBAAkB,EAAE,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAEzD,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACvD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB;;;;oDAI4C;QAC5C,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,WAAW;YAC9B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;aAC1C;SACF,EAAE,CAAC,GAAG,EAAE,EAAE;YACT,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC;oBACN,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC;oBAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;iBAC7C,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH;gEACoD;YACpD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,OAAO,GAAG,IAAI,CAAC;YACf,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzD,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,mEAAmE;QACnE,IAAI,OAAQ,KAAgC,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACjE,KAA+B,CAAC,KAAK,EAAE,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,QAAiB,EAAQ,EAAE;YACvD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB;;;;;;;;yCAQ6B;YAC7B,MAAM,SAAS,GAAG,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,YAAY,CACrB,gBAAgB,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CACxE,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,YAAY,CACrB,gBAAgB,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAC/D,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACvC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,CAAU;IACrC,MAAM,IAAI,GAAI,CAA2B,EAAE,IAAI,CAAC;IAChD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,WAAW;WAC/C,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,cAAc,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"loopback_turn.js","sourceRoot":"","sources":["../../src/relay/loopback_turn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EACL,wBAAwB,EAAE,yBAAyB,GACpD,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAyB,MAAM,0BAA0B,CAAC;AAIhG;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,MAAM,CAAC;AAEjD,uDAAuD;AACvD,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,MAAM,GAAG,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC5C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,qBAAqB,CAAC;IAClE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB;;;0CAGsC;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAChE,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAKlC;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,kBAAkB,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,OAAO,MAAM,gBAAgB,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,WAAW;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX;;sEAE8D;QAC9D,IAAI,CAAC,YAAY,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACzD,MAAM,IAAI,YAAY,CACpB,gBAAgB,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAC/E,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,YAAY,CACpB,gBAAgB,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,CAAC,EACvD,CAAC,YAAY,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -28,6 +28,15 @@ export interface RunEvidenceResult {
28
28
  /** For red_proof: the worktree was created at this path (already removed). */
29
29
  worktree?: string;
30
30
  }
31
+ export declare const EVIDENCE_DEFAULT_TIMEOUT_MS: number;
32
+ export declare const EVIDENCE_MAX_TIMEOUT_MS: number;
33
+ /** El tope que de verdad se va a aplicar a una corrida.
34
+ *
35
+ * Lo exporta el runner y lo usa TAMBIEN el handler del verbo para decidir si
36
+ * la corrida entra en la ventana de bloqueo o se va al fondo (PND-236). Si
37
+ * cada uno hiciera su propia cuenta, un dia divergirian y el handler mandaria
38
+ * al fondo corridas que el runner recorta -- o peor, al reves. */
39
+ export declare function effectiveEvidenceTimeoutMs(timeout_ms?: number): number;
31
40
  /** Spawn a shell command, capture everything, never throw. */
32
41
  export declare function runCommand(command: string, cwd: string, timeout_ms: number): Promise<{
33
42
  exit_code: number;
@@ -42,4 +51,17 @@ export declare function unlinkDir(p: string): Promise<void>;
42
51
  /** Run a command and record its receipt. For red_proof, run it in a base
43
52
  * worktree with the new test files copied in. */
44
53
  export declare function runEvidence(input: RunEvidenceInput): Promise<RunEvidenceResult>;
54
+ /** Lo que el proceso destacado necesita para correr y dejar el recibo. El
55
+ * spec viaja por archivo y no por argv: mutation_diff puede ser largo y el
56
+ * limite de linea de comandos de Windows es de 32 KB. */
57
+ export interface EvidenceSpec extends RunEvidenceInput {
58
+ /** Marca de version del formato, para que un spec viejo no se corra mal. */
59
+ spec: 1;
60
+ }
61
+ /** Escribe el spec en un temporal y devuelve su path. */
62
+ export declare function writeEvidenceSpec(input: RunEvidenceInput): Promise<string>;
63
+ /** Corre lo que dice el spec y deja el recibo. El spec se borra despues, haya
64
+ * salido bien o mal: es un temporal, y dejarlo seria otra fuga como la del
65
+ * Temp que ya costo una medicion. */
66
+ export declare function runEvidenceFromSpec(specPath: string): Promise<RunEvidenceResult>;
45
67
  //# sourceMappingURL=evidence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/urazuke/evidence.ts"],"names":[],"mappings":"AAsBA,OAAO,EAA8B,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAI3F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;+CAE2C;IAC3C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;iDAK6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAqBD,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CA4BpK;AAgCD;;wBAEwB;AACxB,wBAAsB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxD;AAMD;kDACkD;AAClD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoGrF"}
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/urazuke/evidence.ts"],"names":[],"mappings":"AAsBA,OAAO,EAA8B,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAI3F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;+CAE2C;IAC3C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;iDAK6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAC1D,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AAEtD;;;;;mEAKmE;AACnE,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAiBD,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CA4BpK;AAgCD;;wBAEwB;AACxB,wBAAsB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxD;AAMD;kDACkD;AAClD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoGrF;AAuBD;;0DAE0D;AAC1D,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,4EAA4E;IAC5E,IAAI,EAAE,CAAC,CAAC;CACT;AAED,yDAAyD;AACzD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhF;AAED;;sCAEsC;AACtC,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAYtF"}
@@ -23,8 +23,17 @@ import path from 'node:path';
23
23
  import { appendReceipt, parseCounts } from './receipts.js';
24
24
  const execFileP = promisify(execFile);
25
25
  const TAIL_CHARS = 4000;
26
- const DEFAULT_TIMEOUT = 10 * 60 * 1000;
27
- const MAX_TIMEOUT = 30 * 60 * 1000;
26
+ export const EVIDENCE_DEFAULT_TIMEOUT_MS = 10 * 60 * 1000;
27
+ export const EVIDENCE_MAX_TIMEOUT_MS = 30 * 60 * 1000;
28
+ /** El tope que de verdad se va a aplicar a una corrida.
29
+ *
30
+ * Lo exporta el runner y lo usa TAMBIEN el handler del verbo para decidir si
31
+ * la corrida entra en la ventana de bloqueo o se va al fondo (PND-236). Si
32
+ * cada uno hiciera su propia cuenta, un dia divergirian y el handler mandaria
33
+ * al fondo corridas que el runner recorta -- o peor, al reves. */
34
+ export function effectiveEvidenceTimeoutMs(timeout_ms) {
35
+ return Math.min(Math.max(timeout_ms ?? EVIDENCE_DEFAULT_TIMEOUT_MS, 1000), EVIDENCE_MAX_TIMEOUT_MS);
36
+ }
28
37
  async function git(cwd, args) {
29
38
  const { stdout } = await execFileP('git', args, { cwd, encoding: 'utf8', windowsHide: true });
30
39
  return stdout.trim();
@@ -150,7 +159,7 @@ function tail(s) {
150
159
  /** Run a command and record its receipt. For red_proof, run it in a base
151
160
  * worktree with the new test files copied in. */
152
161
  export async function runEvidence(input) {
153
- const timeout = Math.min(Math.max(input.timeout_ms ?? DEFAULT_TIMEOUT, 1000), MAX_TIMEOUT);
162
+ const timeout = effectiveEvidenceTimeoutMs(input.timeout_ms);
154
163
  const head = await gitRef(input.projectRoot);
155
164
  const started = Date.now();
156
165
  if (input.kind === 'red_proof') {
@@ -269,4 +278,34 @@ export async function runEvidence(input) {
269
278
  });
270
279
  return { receipt };
271
280
  }
281
+ /** Escribe el spec en un temporal y devuelve su path. */
282
+ export async function writeEvidenceSpec(input) {
283
+ const dir = path.join(os.tmpdir(), 'yujin-forge', 'evidence');
284
+ await fs.mkdir(dir, { recursive: true });
285
+ const p = path.join(dir, 'spec-' + Date.now() + '-' + Math.random().toString(36).slice(2, 8) + '.json');
286
+ const spec = { spec: 1, ...input };
287
+ await fs.writeFile(p, JSON.stringify(spec), 'utf8');
288
+ return p;
289
+ }
290
+ /** Corre lo que dice el spec y deja el recibo. El spec se borra despues, haya
291
+ * salido bien o mal: es un temporal, y dejarlo seria otra fuga como la del
292
+ * Temp que ya costo una medicion. */
293
+ export async function runEvidenceFromSpec(specPath) {
294
+ const raw = await fs.readFile(specPath, 'utf8');
295
+ const spec = JSON.parse(raw);
296
+ if (spec.spec !== 1)
297
+ throw new Error('spec de evidencia con formato desconocido: ' + String(spec.spec));
298
+ if (!spec.slug || !spec.projectRoot || !spec.kind || !spec.command) {
299
+ throw new Error('spec de evidencia incompleto (slug / projectRoot / kind / command)');
300
+ }
301
+ try {
302
+ return await runEvidence(spec);
303
+ }
304
+ finally {
305
+ try {
306
+ await fs.unlink(specPath);
307
+ }
308
+ catch { /* ya no esta */ }
309
+ }
310
+ }
272
311
  //# sourceMappingURL=evidence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/urazuke/evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/urazuke/evidence.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * Yujin Forge CLI version. Kept in sync with package.json by the npm
3
3
  * "version" lifecycle (scripts/sync_version.mjs) so the two never drift.
4
4
  */
5
- export declare const VERSION = "1.23.4";
5
+ export declare const VERSION = "1.23.5";
6
6
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  * Yujin Forge CLI version. Kept in sync with package.json by the npm
3
3
  * "version" lifecycle (scripts/sync_version.mjs) so the two never drift.
4
4
  */
5
- export const VERSION = '1.23.4';
5
+ export const VERSION = '1.23.5';
6
6
  //# sourceMappingURL=version.js.map