@nac3/forge-cli 1.23.3 → 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 (69) hide show
  1. package/dist/bin/yf.js +0 -0
  2. package/dist/chat/doctrine_digest.d.ts.map +1 -1
  3. package/dist/chat/doctrine_digest.js +4 -1
  4. package/dist/chat/doctrine_digest.js.map +1 -1
  5. package/dist/chat/server.d.ts.map +1 -1
  6. package/dist/chat/server.js +72 -19
  7. package/dist/chat/server.js.map +1 -1
  8. package/dist/chat/tools/evidence.d.ts +34 -2
  9. package/dist/chat/tools/evidence.d.ts.map +1 -1
  10. package/dist/chat/tools/evidence.js +90 -12
  11. package/dist/chat/tools/evidence.js.map +1 -1
  12. package/dist/commands/urazuke.d.ts.map +1 -1
  13. package/dist/commands/urazuke.js +27 -0
  14. package/dist/commands/urazuke.js.map +1 -1
  15. package/dist/core/error_catalog.d.ts +4 -0
  16. package/dist/core/error_catalog.d.ts.map +1 -1
  17. package/dist/core/error_catalog.js +16 -0
  18. package/dist/core/error_catalog.js.map +1 -1
  19. package/dist/core/loopback_post.d.ts +101 -0
  20. package/dist/core/loopback_post.d.ts.map +1 -0
  21. package/dist/core/loopback_post.js +156 -0
  22. package/dist/core/loopback_post.js.map +1 -0
  23. package/dist/docs/doctrine/urazuke.md +50 -38
  24. package/dist/mcp/forge_panel_server.d.ts +1 -26
  25. package/dist/mcp/forge_panel_server.d.ts.map +1 -1
  26. package/dist/mcp/forge_panel_server.js +5 -26
  27. package/dist/mcp/forge_panel_server.js.map +1 -1
  28. package/dist/mcp/forge_verbs_server.d.ts +1 -11
  29. package/dist/mcp/forge_verbs_server.d.ts.map +1 -1
  30. package/dist/mcp/forge_verbs_server.js +7 -23
  31. package/dist/mcp/forge_verbs_server.js.map +1 -1
  32. package/dist/mcp/panel_invoke.d.ts +51 -0
  33. package/dist/mcp/panel_invoke.d.ts.map +1 -0
  34. package/dist/mcp/panel_invoke.js +102 -0
  35. package/dist/mcp/panel_invoke.js.map +1 -0
  36. package/dist/nac3/internal_manifest.d.ts +2 -0
  37. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  38. package/dist/nac3/internal_manifest.js +18 -3
  39. package/dist/nac3/internal_manifest.js.map +1 -1
  40. package/dist/nac3/verb_budget.d.ts +110 -0
  41. package/dist/nac3/verb_budget.d.ts.map +1 -0
  42. package/dist/nac3/verb_budget.js +142 -0
  43. package/dist/nac3/verb_budget.js.map +1 -0
  44. package/dist/relay/in_flight_turn.d.ts +52 -11
  45. package/dist/relay/in_flight_turn.d.ts.map +1 -1
  46. package/dist/relay/in_flight_turn.js +98 -30
  47. package/dist/relay/in_flight_turn.js.map +1 -1
  48. package/dist/relay/loopback_turn.d.ts +15 -42
  49. package/dist/relay/loopback_turn.d.ts.map +1 -1
  50. package/dist/relay/loopback_turn.js +27 -115
  51. package/dist/relay/loopback_turn.js.map +1 -1
  52. package/dist/urazuke/evidence.d.ts +22 -0
  53. package/dist/urazuke/evidence.d.ts.map +1 -1
  54. package/dist/urazuke/evidence.js +42 -3
  55. package/dist/urazuke/evidence.js.map +1 -1
  56. package/dist/version.d.ts +1 -1
  57. package/dist/version.js +1 -1
  58. package/docs/doctrine/urazuke.md +50 -38
  59. package/package.json +20 -18
  60. package/src/i18n/catalogs/ar.json +3 -0
  61. package/src/i18n/catalogs/de.json +3 -0
  62. package/src/i18n/catalogs/en.json +3 -0
  63. package/src/i18n/catalogs/es.json +3 -0
  64. package/src/i18n/catalogs/fr.json +3 -0
  65. package/src/i18n/catalogs/hi.json +3 -0
  66. package/src/i18n/catalogs/it.json +3 -0
  67. package/src/i18n/catalogs/ja.json +3 -0
  68. package/src/i18n/catalogs/pt.json +3 -0
  69. package/src/i18n/catalogs/zh.json +3 -0
@@ -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":"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"}
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.3";
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.3';
5
+ export const VERSION = '1.23.5';
6
6
  //# sourceMappingURL=version.js.map
@@ -1,38 +1,50 @@
1
- # Urazuke -- the evidence method, as Forge runs it
2
-
3
- Urazuke (github.com/pkuschnirof/urazuke) is the method behind every project
4
- Forge builds or maintains: 24 ordered steps in four stretches, each with an
5
- exact prompt, the inputs the owner prepares, the artifacts the agent leaves
6
- in the repository, and a completion check the owner does WITHOUT reading
7
- code. An existing system built without it goes through eight normalisation
8
- stations (N0..N7) first and enters the loop at step 5.
9
-
10
- ## What is mechanical (not prose)
11
-
12
- - The project's workflow is `urazuke` (no code) or `urazuke-legacy` (code
13
- without the method's artifacts). Every canonical task carries its step.
14
- - The CURRENT step's prompt is injected into your system prompt every turn,
15
- with the state of its checks (section "URAZUKE -- peldano NN"). Act on
16
- that prompt as if the owner had pasted it. Do not skip ahead.
17
- - A canonical task closes ONLY when `evaluateStep()` is GREEN: the files
18
- the step names exist, are not stubs, say what they must; the sizing
19
- record is admissible (G9); the plan items carry a spec; the evidence
20
- receipts exist. `yujin.pending.close` refuses a red step. An override
21
- needs the OWNER's written `force_reason` (kept in history); never pass
22
- one on your own initiative.
23
- - Evidence is a RECEIPT Forge records (command, ref, exit code, counts),
24
- never your summary. "Tests pass" without a receipt is a claim.
25
-
26
- ## How to work inside it
27
-
28
- 1. Read the URAZUKE section: red checks are what is missing. Produce the
29
- artifact at the path named, with real content, or ask the owner for the
30
- input that is theirs (`antes de enviar`). Never invent an owner input.
31
- 2. When the section says GREEN, close the task with `yujin.pending.close`
32
- (full expediente) and the next step's prompt arrives on the next turn.
33
- 3. `yujin.urazuke.status` shows the whole ladder; `yujin.urazuke.step`
34
- shows any step in full (prompts, inputs, artifacts, checklist).
35
- 4. The plan is the pendings: each item needs `spec` (acceptance "given /
36
- when / then" + `how_verified`) before it is implemented (step 5).
37
- 5. No deadlines, ever: the method fixes the order and the gates, not the
38
- calendar. Speed is a consequence, not the objective.
1
+ # Urazuke -- the evidence method, as Forge runs it
2
+
3
+ Urazuke (github.com/pkuschnirof/urazuke) is the method behind every project
4
+ Forge builds or maintains: 24 ordered steps in four stretches, each with an
5
+ exact prompt, the inputs the owner prepares, the artifacts the agent leaves
6
+ in the repository, and a completion check the owner does WITHOUT reading
7
+ code. An existing system built without it goes through eight normalisation
8
+ stations (N0..N7) first and enters the loop at step 5.
9
+
10
+ ## What is mechanical (not prose)
11
+
12
+ - The project's workflow is `urazuke` (no code) or `urazuke-legacy` (code
13
+ without the method's artifacts). Every canonical task carries its step.
14
+ - The CURRENT step's prompt is injected into your system prompt every turn,
15
+ with the state of its checks (section "URAZUKE -- peldano NN"). Act on
16
+ that prompt as if the owner had pasted it. Do not skip ahead.
17
+ - A canonical task closes ONLY when `evaluateStep()` is GREEN: the files
18
+ the step names exist, are not stubs, say what they must; the sizing
19
+ record is admissible (G9); the plan items carry a spec; the evidence
20
+ receipts exist. `yujin.pending.close` refuses a red step. An override
21
+ needs the OWNER's written `force_reason` (kept in history); never pass
22
+ one on your own initiative.
23
+ - Evidence is a RECEIPT Forge records (command, ref, exit code, counts),
24
+ never your summary. "Tests pass" without a receipt is a claim.
25
+ - A LONG run leaves its receipt the same way. `yujin.evidence.run` blocks
26
+ the turn only while the run fits the blocking window (10 min, lowered with
27
+ `limits.claude_cli_silence_ms`); over that, or with `background: true`, it
28
+ is launched detached and returns a HANDLE. That is not a degraded mode:
29
+ the receipt is written by whoever runs, not by whoever waits. Read it with
30
+ `yujin.evidence.list` when the task finishes (`yujin.task.status({id})`
31
+ for the progress). Do NOT relaunch a run that already has a handle.
32
+ - And the corollary for any invocation that dies waiting: a verb call that
33
+ comes back UNANSWERED (E_VERB_CALL_UNANSWERED) did not necessarily fail.
34
+ Before redoing the work, LOOK FOR THE TRACE -- `yujin.evidence.list` for a
35
+ receipt, `yujin.task.list` for a task. Two closes were reported as
36
+ "believed" over a receipt that existed on disk the whole time.
37
+
38
+ ## How to work inside it
39
+
40
+ 1. Read the URAZUKE section: red checks are what is missing. Produce the
41
+ artifact at the path named, with real content, or ask the owner for the
42
+ input that is theirs (`antes de enviar`). Never invent an owner input.
43
+ 2. When the section says GREEN, close the task with `yujin.pending.close`
44
+ (full expediente) and the next step's prompt arrives on the next turn.
45
+ 3. `yujin.urazuke.status` shows the whole ladder; `yujin.urazuke.step`
46
+ shows any step in full (prompts, inputs, artifacts, checklist).
47
+ 4. The plan is the pendings: each item needs `spec` (acceptance "given /
48
+ when / then" + `how_verified`) before it is implemented (step 5).
49
+ 5. No deadlines, ever: the method fixes the order and the gates, not the
50
+ calendar. Speed is a consequence, not the objective.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nac3/forge-cli",
3
- "version": "1.23.3",
3
+ "version": "1.23.5",
4
4
  "description": "Yujin Forge -- voice-first NAC-3 React development framework. CLI + chat panel + spec ingest + 10-format document reader + voice loop.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "Pablo Kuschnirof <pablo@rpaforce.com>",
@@ -15,6 +15,23 @@
15
15
  "exports": {
16
16
  ".": "./dist/index.js"
17
17
  },
18
+ "scripts": {
19
+ "version": "node scripts/sync_version.mjs && git add src/version.ts",
20
+ "build": "node scripts/clean_dist.mjs && tsc && node scripts/copy_qa_assets.mjs",
21
+ "dev": "tsx watch src/bin/yf.ts",
22
+ "typecheck": "tsc --noEmit",
23
+ "typecheck:all": "pnpm typecheck && pnpm --filter @yujin/hito4-server typecheck && pnpm --filter @yujin/forge-mobile typecheck",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest",
26
+ "lint": "tsc --noEmit",
27
+ "yf": "tsx src/bin/yf.ts",
28
+ "catalog:lint": "node scripts/catalog_lint.mjs",
29
+ "pairing:check": "node scripts/check_pairing_sync.mjs",
30
+ "brain-matrix:gate": "node scripts/brain_matrix_gate.mjs",
31
+ "hito4:lint": "node scripts/hito4_lint_bundle.mjs",
32
+ "publish-alpha-emergency": "node scripts/publish_alpha_emergency.mjs",
33
+ "prepublishOnly": "pnpm run build && pnpm run typecheck && pnpm run catalog:lint && pnpm run test && pnpm run brain-matrix:gate && pnpm run hito4:lint"
34
+ },
18
35
  "dependencies": {
19
36
  "@anthropic-ai/sdk": "^0.32.1",
20
37
  "@aws-sdk/client-ecs": "^3.1053.0",
@@ -51,6 +68,7 @@
51
68
  "node": ">=18.17",
52
69
  "pnpm": ">=9"
53
70
  },
71
+ "packageManager": "pnpm@11.3.0",
54
72
  "files": [
55
73
  "dist",
56
74
  "templates",
@@ -95,21 +113,5 @@
95
113
  "publishConfig": {
96
114
  "access": "public",
97
115
  "tag": "latest"
98
- },
99
- "scripts": {
100
- "version": "node scripts/sync_version.mjs && git add src/version.ts",
101
- "build": "node scripts/clean_dist.mjs && tsc && node scripts/copy_qa_assets.mjs",
102
- "dev": "tsx watch src/bin/yf.ts",
103
- "typecheck": "tsc --noEmit",
104
- "typecheck:all": "pnpm typecheck && pnpm --filter @yujin/hito4-server typecheck && pnpm --filter @yujin/forge-mobile typecheck",
105
- "test": "vitest run",
106
- "test:watch": "vitest",
107
- "lint": "tsc --noEmit",
108
- "yf": "tsx src/bin/yf.ts",
109
- "catalog:lint": "node scripts/catalog_lint.mjs",
110
- "pairing:check": "node scripts/check_pairing_sync.mjs",
111
- "brain-matrix:gate": "node scripts/brain_matrix_gate.mjs",
112
- "hito4:lint": "node scripts/hito4_lint_bundle.mjs",
113
- "publish-alpha-emergency": "node scripts/publish_alpha_emergency.mjs"
114
116
  }
115
- }
117
+ }
@@ -135,6 +135,9 @@
135
135
  "error.mobile_turn_undelivered.why": "خادم المحادثة في سطح المكتب لم يكن يستمع على المنفذ {port}. لم يُنفَّذ أي شيء هنا.",
136
136
  "error.mobile_turn_undelivered.fix": "افتح لوحة Forge على سطح المكتب (أو شغّلها بـ yf chat) ثم أعد إرسال الطلب.",
137
137
  "error.mobile_turn_undelivered.cmd": "yf chat",
138
+ "error.verb_call_unanswered.what": "لم يُرجع استدعاء {verb} أي استجابة خلال {minutes} دقيقة.",
139
+ "error.verb_call_unanswered.why": "ما انتهت مدته هو الانتظار لا العمل: قد يستمر هذا الفعل في العمل على جانب Forge وينتهي بنجاح.",
140
+ "error.verb_call_unanswered.fix": "لا تُعد المحاولة بشكل أعمى. إذا كان الفعل يترك أثرًا فاقرأ الأثر أولًا: yujin.evidence.list للإيصال، وyujin.task.list للمهمة الخلفية.",
138
141
  "panel.button.agents": "الوكلاء",
139
142
  "panel.agents.title": "الوكلاء",
140
143
  "panel.agents.subtitle": "المدير والوكلاء الفرعيون المسجلون في هذا المشروع",
@@ -135,6 +135,9 @@
135
135
  "error.mobile_turn_undelivered.why": "Der Chat-Server des Desktops lauschte nicht auf Port {port}. Hier wurde nichts ausgefuehrt.",
136
136
  "error.mobile_turn_undelivered.fix": "Oeffne das Forge-Panel auf dem Desktop (oder starte es mit yf chat) und sende die Anfrage erneut.",
137
137
  "error.mobile_turn_undelivered.cmd": "yf chat",
138
+ "error.verb_call_unanswered.what": "Der Aufruf von {verb} hat in {minutes} Minuten keine Antwort geliefert.",
139
+ "error.verb_call_unanswered.why": "Abgelaufen ist das Warten, nicht die Arbeit: das Verb kann auf der Forge-Seite weiterlaufen und korrekt enden.",
140
+ "error.verb_call_unanswered.fix": "Nicht blind wiederholen. Wenn das Verb eine Spur hinterlasst, lies zuerst die Spur: yujin.evidence.list fuer einen Beleg, yujin.task.list fuer einen Hintergrundauftrag.",
138
141
  "panel.button.agents": "Agenten",
139
142
  "panel.agents.title": "Agenten",
140
143
  "panel.agents.subtitle": "Director und Sub-Agenten registriert in diesem Projekt",
@@ -135,6 +135,9 @@
135
135
  "error.mobile_turn_undelivered.why": "The desktop chat server was not listening on port {port}. Nothing ran here.",
136
136
  "error.mobile_turn_undelivered.fix": "Open the Forge panel on the desktop (or start it with yf chat) and send the request again.",
137
137
  "error.mobile_turn_undelivered.cmd": "yf chat",
138
+ "error.verb_call_unanswered.what": "The call to {verb} returned no response within {minutes} minutes.",
139
+ "error.verb_call_unanswered.why": "What expired is the wait, not the work: the verb may still be running on the Forge side and finish fine.",
140
+ "error.verb_call_unanswered.fix": "Do not blindly retry. If the verb leaves a trace, read the trace first: yujin.evidence.list for a receipt, yujin.task.list for a background task.",
138
141
  "panel.button.agents": "Agents",
139
142
  "panel.agents.title": "Agents",
140
143
  "panel.agents.subtitle": "Director and sub-agents registered in this project",
@@ -135,6 +135,9 @@
135
135
  "error.mobile_turn_undelivered.why": "El servidor de chat del escritorio no estaba escuchando en el puerto {port}. Aca no se ejecuto nada.",
136
136
  "error.mobile_turn_undelivered.fix": "Abri el panel de Forge en el escritorio (o arrancalo con yf chat) y volve a mandar el pedido.",
137
137
  "error.mobile_turn_undelivered.cmd": "yf chat",
138
+ "error.verb_call_unanswered.what": "La invocacion de {verb} no devolvio respuesta en {minutes} minutos.",
139
+ "error.verb_call_unanswered.why": "Lo que vencio es la espera, no el trabajo: el verbo puede seguir corriendo del lado de Forge y terminar bien.",
140
+ "error.verb_call_unanswered.fix": "No lo repitas a ciegas. Si el verbo deja rastro, mira el rastro primero: yujin.evidence.list para un recibo, yujin.task.list para una tarea de fondo.",
138
141
  "panel.button.agents": "Agentes",
139
142
  "panel.agents.title": "Agentes",
140
143
  "panel.agents.subtitle": "Director + sub-agentes registrados en este proyecto",
@@ -135,6 +135,9 @@
135
135
  "error.mobile_turn_undelivered.why": "Le serveur de chat du bureau n'ecoutait pas sur le port {port}. Rien n'a ete execute ici.",
136
136
  "error.mobile_turn_undelivered.fix": "Ouvre le panneau Forge sur le bureau (ou lance-le avec yf chat) puis renvoie la demande.",
137
137
  "error.mobile_turn_undelivered.cmd": "yf chat",
138
+ "error.verb_call_unanswered.what": "L'appel de {verb} n'a pas renvoye de reponse en {minutes} minutes.",
139
+ "error.verb_call_unanswered.why": "Ce qui a expire, c'est l'attente, pas le travail : le verbe peut continuer a tourner cote Forge et se terminer correctement.",
140
+ "error.verb_call_unanswered.fix": "Ne relancez pas a l'aveugle. Si le verbe laisse une trace, lisez-la d'abord : yujin.evidence.list pour un recu, yujin.task.list pour une tache de fond.",
138
141
  "panel.button.agents": "Agents",
139
142
  "panel.agents.title": "Agents",
140
143
  "panel.agents.subtitle": "Director et sous-agents enregistres dans ce projet",
@@ -135,6 +135,9 @@
135
135
  "error.mobile_turn_undelivered.why": "डेस्कटॉप का चैट सर्वर पोर्ट {port} पर सुन नहीं रहा था। यहां कुछ भी नहीं चला।",
136
136
  "error.mobile_turn_undelivered.fix": "डेस्कटॉप पर Forge पैनल खोलें (या yf chat से शुरू करें) और अनुरोध दोबारा भेजें।",
137
137
  "error.mobile_turn_undelivered.cmd": "yf chat",
138
+ "error.verb_call_unanswered.what": "{verb} की कॉल ने {minutes} मिनट में कोई उत्तर नहीं लौटाया।",
139
+ "error.verb_call_unanswered.why": "समय-सीमा प्रतीक्षा की समाप्त हुई, काम की नहीं: यह वर्ब Forge की ओर चलता रह सकता है और ठीक से पूरा हो सकता है।",
140
+ "error.verb_call_unanswered.fix": "आंख मूंदकर दोबारा न चलाएं। यदि वर्ब कोई निशान छोड़ता है, तो पहले निशान देखें: रसीद के लिए yujin.evidence.list, बैकग्राउंड कार्य के लिए yujin.task.list।",
138
141
  "panel.button.agents": "एजेंट",
139
142
  "panel.agents.title": "एजेंट",
140
143
  "panel.agents.subtitle": "इस परियोजना में पंजीकृत निदेशक और उप-एजेंट",
@@ -135,6 +135,9 @@
135
135
  "error.mobile_turn_undelivered.why": "Il server di chat del desktop non era in ascolto sulla porta {port}. Qui non e stato eseguito nulla.",
136
136
  "error.mobile_turn_undelivered.fix": "Apri il pannello Forge sul desktop (o avvialo con yf chat) e rimanda la richiesta.",
137
137
  "error.mobile_turn_undelivered.cmd": "yf chat",
138
+ "error.verb_call_unanswered.what": "La chiamata di {verb} non ha restituito risposta in {minutes} minuti.",
139
+ "error.verb_call_unanswered.why": "Cio che e scaduto e l'attesa, non il lavoro: il verbo puo continuare a girare dal lato Forge e finire bene.",
140
+ "error.verb_call_unanswered.fix": "Non ripetere alla cieca. Se il verbo lascia una traccia, guarda prima la traccia: yujin.evidence.list per una ricevuta, yujin.task.list per un'attivita in background.",
138
141
  "panel.button.agents": "Agenti",
139
142
  "panel.agents.title": "Agenti",
140
143
  "panel.agents.subtitle": "Director e sub-agenti registrati in questo progetto",
@@ -135,6 +135,9 @@
135
135
  "error.mobile_turn_undelivered.why": "デスクトップのチャットサーバーがポート {port} で待ち受けていませんでした。ここでは何も実行されていません。",
136
136
  "error.mobile_turn_undelivered.fix": "デスクトップで Forge パネルを開き (または yf chat で起動し)、もう一度リクエストを送ってください。",
137
137
  "error.mobile_turn_undelivered.cmd": "yf chat",
138
+ "error.verb_call_unanswered.what": "{verb} の呼び出しは {minutes} 分以内に応答を返しませんでした。",
139
+ "error.verb_call_unanswered.why": "期限切れになったのは待機であって、作業ではありません。この動詞は Forge 側で動き続け、正常に終わる可能性があります。",
140
+ "error.verb_call_unanswered.fix": "やみくもに再実行しないでください。痕跡が残る動詞なら、まず痕跡を見てください: レシートは yujin.evidence.list、バックグラウンド処理は yujin.task.list。",
138
141
  "panel.button.agents": "エージェント",
139
142
  "panel.agents.title": "エージェント",
140
143
  "panel.agents.subtitle": "このプロジェクトに登録されたディレクターとサブエージェント",