@nac3/forge-cli 1.24.1 → 1.26.0

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 (122) hide show
  1. package/dist/chat/agent_session.d.ts.map +1 -1
  2. package/dist/chat/agent_session.js +132 -12
  3. package/dist/chat/agent_session.js.map +1 -1
  4. package/dist/chat/cache_ttl.d.ts +143 -0
  5. package/dist/chat/cache_ttl.d.ts.map +1 -0
  6. package/dist/chat/cache_ttl.js +165 -0
  7. package/dist/chat/cache_ttl.js.map +1 -0
  8. package/dist/chat/claude.d.ts +1 -0
  9. package/dist/chat/claude.d.ts.map +1 -1
  10. package/dist/chat/claude.js +47 -5
  11. package/dist/chat/claude.js.map +1 -1
  12. package/dist/chat/claude_cli.d.ts +24 -0
  13. package/dist/chat/claude_cli.d.ts.map +1 -1
  14. package/dist/chat/claude_cli.js +76 -10
  15. package/dist/chat/claude_cli.js.map +1 -1
  16. package/dist/chat/panel.d.ts.map +1 -1
  17. package/dist/chat/panel.js +133 -21
  18. package/dist/chat/panel.js.map +1 -1
  19. package/dist/chat/server.d.ts.map +1 -1
  20. package/dist/chat/server.js +32 -3
  21. package/dist/chat/server.js.map +1 -1
  22. package/dist/chat/tools/evidence.d.ts +15 -0
  23. package/dist/chat/tools/evidence.d.ts.map +1 -1
  24. package/dist/chat/tools/evidence.js +16 -0
  25. package/dist/chat/tools/evidence.js.map +1 -1
  26. package/dist/chat/tools/keys.d.ts.map +1 -1
  27. package/dist/chat/tools/keys.js +22 -2
  28. package/dist/chat/tools/keys.js.map +1 -1
  29. package/dist/chat/tools/pending.d.ts +3 -0
  30. package/dist/chat/tools/pending.d.ts.map +1 -1
  31. package/dist/chat/tools/pending.js +40 -3
  32. package/dist/chat/tools/pending.js.map +1 -1
  33. package/dist/chat/tools/session_verbs.d.ts +83 -0
  34. package/dist/chat/tools/session_verbs.d.ts.map +1 -1
  35. package/dist/chat/tools/session_verbs.js +251 -18
  36. package/dist/chat/tools/session_verbs.js.map +1 -1
  37. package/dist/chat/tools/shell.d.ts +11 -0
  38. package/dist/chat/tools/shell.d.ts.map +1 -1
  39. package/dist/chat/tools/shell.js +68 -1
  40. package/dist/chat/tools/shell.js.map +1 -1
  41. package/dist/commands/chat.d.ts +6 -0
  42. package/dist/commands/chat.d.ts.map +1 -1
  43. package/dist/commands/chat.js +25 -0
  44. package/dist/commands/chat.js.map +1 -1
  45. package/dist/commands/limits.d.ts.map +1 -1
  46. package/dist/commands/limits.js +85 -6
  47. package/dist/commands/limits.js.map +1 -1
  48. package/dist/commands/pending.d.ts.map +1 -1
  49. package/dist/commands/pending.js +26 -1
  50. package/dist/commands/pending.js.map +1 -1
  51. package/dist/commands/urazuke.d.ts.map +1 -1
  52. package/dist/commands/urazuke.js +82 -0
  53. package/dist/commands/urazuke.js.map +1 -1
  54. package/dist/core/brain_pin.d.ts +74 -0
  55. package/dist/core/brain_pin.d.ts.map +1 -0
  56. package/dist/core/brain_pin.js +113 -0
  57. package/dist/core/brain_pin.js.map +1 -0
  58. package/dist/core/cost_router.d.ts.map +1 -1
  59. package/dist/core/cost_router.js +56 -0
  60. package/dist/core/cost_router.js.map +1 -1
  61. package/dist/core/limits_config.d.ts +61 -0
  62. package/dist/core/limits_config.d.ts.map +1 -1
  63. package/dist/core/limits_config.js +78 -0
  64. package/dist/core/limits_config.js.map +1 -1
  65. package/dist/core/provider_keys.d.ts +33 -0
  66. package/dist/core/provider_keys.d.ts.map +1 -1
  67. package/dist/core/provider_keys.js +40 -3
  68. package/dist/core/provider_keys.js.map +1 -1
  69. package/dist/docs/doctrine/session-orchestration.md +109 -86
  70. package/dist/llm/sse_stream.d.ts +5 -0
  71. package/dist/llm/sse_stream.d.ts.map +1 -1
  72. package/dist/llm/sse_stream.js +26 -3
  73. package/dist/llm/sse_stream.js.map +1 -1
  74. package/dist/mcp/bridge_registry.d.ts +1 -1
  75. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  76. package/dist/nac3/internal_manifest.js +2 -0
  77. package/dist/nac3/internal_manifest.js.map +1 -1
  78. package/dist/pending/store.d.ts +12 -0
  79. package/dist/pending/store.d.ts.map +1 -1
  80. package/dist/pending/store.js +20 -0
  81. package/dist/pending/store.js.map +1 -1
  82. package/dist/pending/types.d.ts +11 -0
  83. package/dist/pending/types.d.ts.map +1 -1
  84. package/dist/pending/types.js.map +1 -1
  85. package/dist/tasks/supervisor.d.ts +31 -0
  86. package/dist/tasks/supervisor.d.ts.map +1 -1
  87. package/dist/tasks/supervisor.js +61 -5
  88. package/dist/tasks/supervisor.js.map +1 -1
  89. package/dist/telemetry/usage.d.ts +107 -0
  90. package/dist/telemetry/usage.d.ts.map +1 -1
  91. package/dist/telemetry/usage.js +186 -13
  92. package/dist/telemetry/usage.js.map +1 -1
  93. package/dist/urazuke/close_gate.d.ts +47 -3
  94. package/dist/urazuke/close_gate.d.ts.map +1 -1
  95. package/dist/urazuke/close_gate.js +57 -3
  96. package/dist/urazuke/close_gate.js.map +1 -1
  97. package/dist/urazuke/evidence.d.ts +10 -0
  98. package/dist/urazuke/evidence.d.ts.map +1 -1
  99. package/dist/urazuke/evidence.js +63 -3
  100. package/dist/urazuke/evidence.js.map +1 -1
  101. package/dist/urazuke/external_audit.d.ts +89 -0
  102. package/dist/urazuke/external_audit.d.ts.map +1 -0
  103. package/dist/urazuke/external_audit.js +309 -0
  104. package/dist/urazuke/external_audit.js.map +1 -0
  105. package/dist/urazuke/receipts.d.ts +28 -1
  106. package/dist/urazuke/receipts.d.ts.map +1 -1
  107. package/dist/urazuke/receipts.js +59 -6
  108. package/dist/urazuke/receipts.js.map +1 -1
  109. package/dist/version.d.ts +1 -1
  110. package/dist/version.js +1 -1
  111. package/docs/doctrine/session-orchestration.md +109 -86
  112. package/package.json +1 -1
  113. package/src/i18n/catalogs/ar.json +570 -568
  114. package/src/i18n/catalogs/de.json +570 -568
  115. package/src/i18n/catalogs/en.json +570 -568
  116. package/src/i18n/catalogs/es.json +570 -568
  117. package/src/i18n/catalogs/fr.json +570 -568
  118. package/src/i18n/catalogs/hi.json +570 -568
  119. package/src/i18n/catalogs/it.json +570 -568
  120. package/src/i18n/catalogs/ja.json +570 -568
  121. package/src/i18n/catalogs/pt.json +570 -568
  122. package/src/i18n/catalogs/zh.json +570 -568
@@ -1 +1 @@
1
- {"version":3,"file":"agent_session.d.ts","sourceRoot":"","sources":["../../src/chat/agent_session.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB;8EAC0E;IAC1E,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,yBAAyB;IACzB,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,CAAC;IAC3B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;yBAEyB;AACzB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxD;AAoDD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAwFzF"}
1
+ {"version":3,"file":"agent_session.d.ts","sourceRoot":"","sources":["../../src/chat/agent_session.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB;8EAC0E;IAC1E,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,yBAAyB;IACzB,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,CAAC;IAC3B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;yBAEyB;AACzB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxD;AAuKD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyFzF"}
@@ -55,18 +55,137 @@ function wrapTask(task) {
55
55
  task,
56
56
  ].join('\n');
57
57
  }
58
- async function postTurn(fetchImpl, port, content, sessionId) {
59
- const resp = await fetchImpl('http://127.0.0.1:' + port + '/api/chat', {
60
- method: 'POST',
61
- headers: { 'content-type': 'application/json' },
62
- body: JSON.stringify({
63
- messages: [{ role: 'user', content }],
64
- session_id: sessionId,
65
- /* origin 'bridge' keeps the turn out of the mobile/relay echo path. */
66
- origin: 'bridge',
67
- }),
58
+ /** PND-257 -- the loopback deadline, resolved once per run.
59
+ *
60
+ * Read from the limits config (`request_timeout_ms.loopback_agent`) so the
61
+ * owner can move it and see it. If the config cannot be read we still take
62
+ * a deadline: the alternative is the one that caused the defect -- no
63
+ * declared deadline, and undici's ~306 s floor silently in force. */
64
+ async function loopbackDeadlineMs() {
65
+ try {
66
+ const { readLimitsConfig } = await import('../core/limits_config.js');
67
+ const cfg = await readLimitsConfig();
68
+ const v = cfg.request_timeout_ms?.loopback_agent;
69
+ if (Number.isFinite(v) && v > 0)
70
+ return v;
71
+ }
72
+ catch { /* fall through to the compiled default */ }
73
+ return 300000;
74
+ }
75
+ /** Is this the loopback deadline biting -- ours, or undici's floor under it? */
76
+ function isTimeoutError(err) {
77
+ const e = err;
78
+ if (!e)
79
+ return false;
80
+ if (e.name === 'AbortError' || e.name === 'TimeoutError')
81
+ return true;
82
+ const code = String(e.cause?.code ?? '');
83
+ if (code === 'UND_ERR_HEADERS_TIMEOUT' || code === 'UND_ERR_BODY_TIMEOUT' || code === 'ETIMEDOUT')
84
+ return true;
85
+ return /timeout/i.test(String(e.cause?.message ?? ''));
86
+ }
87
+ /** THE ERROR THAT SAYS WHERE IT CAME FROM.
88
+ *
89
+ * What used to reach the result was a bare `fetch failed`. Two sessions in
90
+ * a row read that and went looking for the knob in the DeepSeek client --
91
+ * and the provider was never involved: DeepSeek returns headers in
92
+ * 485-1176 ms with 31k of context. The message now names the loopback, the
93
+ * URL with its port, the deadline that fired and the floor underneath, so
94
+ * nobody spends a turn in the wrong place. */
95
+ function describeLoopbackTimeout(url, deadline, floor) {
96
+ return 'el lazo local vencio: POST ' + url + ' no contesto en ' + deadline + ' ms '
97
+ + '(request_timeout_ms.loopback_agent). ESTE NO ES UN ERROR DEL PROVEEDOR -- es el turno '
98
+ + 'entero de la sub-sesion viajando por el lazo local al propio servidor, que no escribe '
99
+ + 'cabeceras hasta terminar el turno. Por debajo hay un piso que no es configurable: el '
100
+ + 'headersTimeout de undici, ' + floor + ' ms. Si la tarea necesita mas, bajale las rondas '
101
+ + '(yf limits set max_tool_rounds.autonomous <N>) o partila en sub-tareas: un turno que pasa '
102
+ + 'el vencimiento se pierde entero, no devuelve las rondas que alcanzo a dar.';
103
+ }
104
+ /** Read the turn result from either shape.
105
+ *
106
+ * SSE (stream:true, the normal path now): the payload travels in the
107
+ * `turn_complete` event -- the SAME object the buffered path returns, so
108
+ * there is one shape downstream and not two. An `error` event is kept in
109
+ * case the stream ends without completing, which is the case that used to
110
+ * arrive as an empty turn.
111
+ *
112
+ * JSON: the buffered path. Kept because it is what an injected fetch
113
+ * returns in the tests, and because a server that ignores stream:true must
114
+ * not leave this loop reading an empty body. */
115
+ async function readTurnPayload(resp) {
116
+ const ct = String(resp.headers?.get?.('content-type') ?? '');
117
+ if (!/text\/event-stream/i.test(ct) || !resp.body) {
118
+ return await resp.json();
119
+ }
120
+ const { forEachSseEvent } = await import('../llm/sse_stream.js');
121
+ let done = null;
122
+ let failed = null;
123
+ await forEachSseEvent(resp.body, (event, obj) => {
124
+ if (event === 'turn_complete')
125
+ done = obj;
126
+ else if (event === 'error') {
127
+ const o = obj;
128
+ failed = { ok: false, error: String(o.message ?? o.kind ?? 'turn failed') };
129
+ }
68
130
  });
69
- const j = await resp.json();
131
+ if (done)
132
+ return done;
133
+ if (failed)
134
+ return failed;
135
+ /* Ni turn_complete ni error: el stream se corto en el medio. Decirlo, en
136
+ * vez de devolver un turno vacio que se lee como un turno sin texto. */
137
+ return { ok: false, error: 'el lazo local se corto sin turn_complete ni error: el servidor cerro el stream en el medio del turno' };
138
+ }
139
+ async function postTurn(fetchImpl, port, content, sessionId, deadlineMs) {
140
+ const url = 'http://127.0.0.1:' + port + '/api/chat';
141
+ const { LOOPBACK_HEADERS_FLOOR_MS } = await import('../core/limits_config.js');
142
+ /* El vencimiento viaja CON la peticion. Sin signal el limite en vigor es el
143
+ * de undici, que no es nuestro y no esta escrito en ningun lado. */
144
+ const ctl = new AbortController();
145
+ const timer = setTimeout(() => ctl.abort(), deadlineMs);
146
+ let resp;
147
+ try {
148
+ resp = await fetchImpl(url, {
149
+ method: 'POST',
150
+ headers: { 'content-type': 'application/json' },
151
+ signal: ctl.signal,
152
+ body: JSON.stringify({
153
+ messages: [{ role: 'user', content }],
154
+ session_id: sessionId,
155
+ /* origin 'bridge' keeps the turn out of the mobile/relay echo path. */
156
+ origin: 'bridge',
157
+ /* PND-257 -- EL ARREGLO DE FONDO, Y NO HUBO QUE INVENTARLO.
158
+ *
159
+ * El piso de ~306 s no venia de que el turno sea largo: venia de que
160
+ * /api/chat NO ESCRIBIA CABECERAS hasta terminar el turno entero, asi
161
+ * que el headersTimeout de undici contaba contra el turno completo.
162
+ * El endpoint YA sabe escribir cabeceras al ACEPTAR el turno -- lo
163
+ * hace desde alpha.59e cuando el cliente pide stream:true, que es
164
+ * como lo usa el panel -- y este lazo era el unico cliente que no lo
165
+ * pedia. Con stream:true las cabeceras llegan en milisegundos y el
166
+ * piso desaparece: lo que queda vigente es el vencimiento declarado
167
+ * de arriba, que es nuestro y se puede configurar. */
168
+ stream: true,
169
+ }),
170
+ });
171
+ }
172
+ catch (err) {
173
+ if (isTimeoutError(err)) {
174
+ throw new Error(describeLoopbackTimeout(url, deadlineMs, LOOPBACK_HEADERS_FLOOR_MS));
175
+ }
176
+ /* Cualquier otro fallo de transporte tambien nombra el lazo local: el
177
+ * `fetch failed` pelado es el que mando a dos sesiones al lugar
178
+ * equivocado, y el codigo de la causa es lo unico accionable que hay. */
179
+ const cause = err?.cause?.code;
180
+ throw new Error('el lazo local fallo: POST ' + url + ' -- '
181
+ + (err instanceof Error ? err.message : String(err))
182
+ + (cause ? ' [' + cause + ']' : '')
183
+ + '. Es el lazo al propio servidor de la sub-sesion, no el proveedor.');
184
+ }
185
+ finally {
186
+ clearTimeout(timer);
187
+ }
188
+ const j = await readTurnPayload(resp);
70
189
  if (!j || j.ok === false)
71
190
  throw new Error(j?.error || 'turn failed');
72
191
  return {
@@ -91,10 +210,11 @@ export async function runAgentSession(opts) {
91
210
  let lastReply = '';
92
211
  let status = 'maxturns';
93
212
  let error;
213
+ const deadlineMs = await loopbackDeadlineMs();
94
214
  try {
95
215
  let nextMsg = wrapTask(opts.task);
96
216
  while (turns < maxTurns) {
97
- const r = await postTurn(fetchImpl, opts.port, nextMsg, sessionId);
217
+ const r = await postTurn(fetchImpl, opts.port, nextMsg, sessionId, deadlineMs);
98
218
  turns += 1;
99
219
  tokIn += r.tokensIn;
100
220
  tokOut += r.tokensOut;
@@ -1 +1 @@
1
- {"version":3,"file":"agent_session.js","sourceRoot":"","sources":["../../src/chat/agent_session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent_session.js","sourceRoot":"","sources":["../../src/chat/agent_session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Yujin Forge -- la ventana de la cache de prompt, como DECISION del caso
3
+ * de uso y no como constante.
4
+ *
5
+ * POR QUE EXISTE ESTE ARCHIVO (medido el 2026-11-03, experimento A/B de
6
+ * Urazuke, PND-272)
7
+ *
8
+ * El camino HTTP marcaba sus dos breakpoints con el efimero por omision de
9
+ * 5 minutos, y el motivo estaba escrito al lado del codigo:
10
+ *
11
+ * TTL is the default 5min ephemeral to match the system block +
12
+ * avoid the 1h write-cost premium.
13
+ *
14
+ * Esa eleccion es CORRECTA para el caso que tenia en mente -- turnos cortos
15
+ * uno atras del otro -- y equivocada para una sesion de Urazuke, donde los
16
+ * turnos duran entre 99 y 169 minutos medidos. La aritmetica de Anthropic:
17
+ *
18
+ * lectura de cache 0,10x del precio base de entrada
19
+ * escritura a 5 min 1,25x
20
+ * escritura a 1 hora 2,00x
21
+ *
22
+ * Con ventana de 5 minutos, un prefijo que se vuelve a necesitar 20 minutos
23
+ * despues se re-escribe a 1,25x lo que podria haberse leido a 0,10x: doce
24
+ * veces de mas. Con ventana de 1 hora se paga 2x UNA vez y despues se lee.
25
+ * Pero al reves tambien es cierto: si los turnos salen cada 30 segundos, la
26
+ * ventana de 1 hora no compra NADA y cobra 2x en vez de 1,25x por cada
27
+ * escritura. No hay una constante correcta -- hay una decision.
28
+ *
29
+ * COMO SE DECIDE, Y POR QUE ASI
30
+ *
31
+ * La politica sale de la configuracion (limits.json, cache.ttl). Con 'auto'
32
+ * -- el valor por omision -- la decide la unica evidencia disponible en el
33
+ * momento de escribir: el hueco medido entre el arranque de la peticion
34
+ * ANTERIOR que compartia prefijo y el de esta. Es un predictor por historia
35
+ * reciente, y se declara como tal: nadie sabe cuando va a llegar la lectura
36
+ * siguiente. Los umbrales son los de la aritmetica de arriba, no una
37
+ * intuicion:
38
+ *
39
+ * sin hueco conocido (primera peticion) -> 5m (no hay evidencia; 5m es
40
+ * la escritura mas barata)
41
+ * hueco < 5 min -> 5m (cada peticion refresca la
42
+ * entrada; es estrictamente
43
+ * mas barato)
44
+ * hueco entre 5 y 60 min -> 1h (la unica ventana donde la
45
+ * escritura a 2x se paga)
46
+ * hueco > 60 min -> 5m (la entrada va a estar
47
+ * fria igual; pagar 2x por
48
+ * algo que nadie va a leer
49
+ * es puro recargo)
50
+ *
51
+ * Una lectura REFRESCA el reloj de la entrada sin costo extra, en las dos
52
+ * ventanas, asi que una cadena de turnos cortos mantiene viva la entrada de
53
+ * 5 minutos indefinidamente.
54
+ *
55
+ * LO QUE ESTE ARCHIVO NO ARREGLA (medido, declarado)
56
+ *
57
+ * Por el camino `claude-code-cli` la cache la maneja el CLI de Claude Code y
58
+ * no Forge: medido con scripts/measure_cache.mjs, el CLI escribe SIEMPRE en
59
+ * la ventana de 1 hora (cache_creation.ephemeral_1h_input_tokens), nunca en
60
+ * la de 5 minutos. Por ese camino no hay ventana que elegir, y el problema
61
+ * de cache es otro: la estabilidad del prefijo (ver claude_cli.ts).
62
+ *
63
+ * ASCII-only.
64
+ */
65
+ /** Las dos ventanas que acepta la API. */
66
+ export type CacheTtl = '5m' | '1h';
67
+ /** Lo que el operador puede declarar en limits.json (cache.ttl). */
68
+ export type CacheTtlPolicy = 'auto' | '5m' | '1h';
69
+ export declare const CACHE_TTL_POLICIES: readonly CacheTtlPolicy[];
70
+ /** Piso de la ventana corta: por debajo de esto cada peticion refresca la
71
+ * entrada de 5 minutos y la de 1 hora solo cobraria el doble. */
72
+ export declare const VENTANA_CORTA_MS: number;
73
+ /** Techo de la ventana larga: por encima de una hora la entrada esta fria
74
+ * igual y la escritura a 2x es recargo sin lectura. */
75
+ export declare const VENTANA_LARGA_MS: number;
76
+ export interface CacheTtlDecision {
77
+ ttl: CacheTtl;
78
+ /** Motivo legible, para el log y para el reporte de costos. */
79
+ why: string;
80
+ }
81
+ /**
82
+ * Elegir la ventana de esta escritura.
83
+ *
84
+ * `lastGapMs` es el hueco medido entre el arranque de la peticion anterior
85
+ * que compartia prefijo y el de esta. `undefined` = no hay anterior.
86
+ */
87
+ export declare function chooseCacheTtl(policy: CacheTtlPolicy, opts?: {
88
+ lastGapMs?: number | undefined;
89
+ }): CacheTtlDecision;
90
+ /**
91
+ * El bloque `cache_control` que va al cuerpo de la peticion. Separado para
92
+ * que el emisor no tenga que acordarse de que a 5 minutos se OMITE el campo
93
+ * `ttl` (es el valor por omision de la API) y a 1 hora se declara.
94
+ */
95
+ export declare function cacheControlFor(ttl: CacheTtl): Record<string, unknown>;
96
+ /**
97
+ * Rastreador del hueco entre peticiones que comparten prefijo. Vive en la
98
+ * instancia del cliente: una instancia por sesion de chat, asi que el hueco
99
+ * que mide es el de ESA conversacion y no el de la maquina.
100
+ *
101
+ * No persiste a disco a proposito: un hueco de ayer no dice nada del de hoy,
102
+ * y la primera peticion de una sesion nueva ya tiene su propia respuesta
103
+ * ('sin hueco medido' -> 5m, la escritura mas barata).
104
+ */
105
+ export declare class CacheGapTracker {
106
+ private lastStartMs;
107
+ /** Llamar al ARRANQUE de cada peticion. Devuelve el hueco contra la
108
+ * anterior (undefined la primera vez) y deja anotado este arranque. */
109
+ mark(nowMs?: number): number | undefined;
110
+ reset(): void;
111
+ }
112
+ /**
113
+ * EL ALCANCE DE ESTA POLITICA, DICHO DONDE SE LA CONFIGURA.
114
+ *
115
+ * Pedido del dueno del experimento el 2026-11-03, y el motivo es el mismo
116
+ * que el del cero que informaba salud: "un knob que no hace nada en el
117
+ * camino principal y no lo avisa es un instrumento que contesta cuando no
118
+ * puede mirar". `cache.ttl` rige el camino HTTP (src/chat/claude.ts, que es
119
+ * el que pone cache_control en el cuerpo). Por el camino `claude-code-cli`
120
+ * la cache la maneja el CLI de Claude Code: medido con
121
+ * scripts/measure_cache.mjs, escribe SIEMPRE en la ventana de una hora, y
122
+ * Forge no tiene ahi ninguna ventana que elegir.
123
+ *
124
+ * Se declara SIEMPRE y no solo cuando el proveedor activo es el CLI, a
125
+ * proposito: el proveedor de un turno se decide con la bandera `--provider`
126
+ * de `yf chat`, que la configuracion no ve. Afirmar "tu camino es el HTTP"
127
+ * leyendo brain_config seria exactamente la clase de afirmacion sin
128
+ * medicion que este lote vino a sacar. Cuando la configuracion SI alcanza a
129
+ * verlo -- anthropic_mode='plan' -- el aviso lo agrega.
130
+ */
131
+ export declare const CACHE_TTL_ALCANCE: string;
132
+ /** El aviso para `yf limits set cache.ttl` y para el panel. `brain` es
133
+ * opcional: sin el, el aviso es el alcance a secas. */
134
+ export declare function cacheTtlScopeNotice(brain?: {
135
+ anthropic_mode?: string | undefined;
136
+ eco?: {
137
+ provider?: string;
138
+ };
139
+ frontier?: {
140
+ provider?: string;
141
+ };
142
+ }): string;
143
+ //# sourceMappingURL=cache_ttl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache_ttl.d.ts","sourceRoot":"","sources":["../../src/chat/cache_ttl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,oEAAoE;AACpE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAAyB,CAAC;AAElF;kEACkE;AAClE,eAAO,MAAM,gBAAgB,QAAgB,CAAC;AAE9C;wDACwD;AACxD,eAAO,MAAM,gBAAgB,QAAiB,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,QAAQ,CAAC;IACd,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAO,GAC5C,gBAAgB,CAgBlB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAItE;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAuB;IAE1C;4EACwE;IACxE,IAAI,CAAC,KAAK,GAAE,MAAmB,GAAG,MAAM,GAAG,SAAS;IAQpD,KAAK,IAAI,IAAI;CAGd;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,iBAAiB,QAGoB,CAAC;AAEnD;wDACwD;AACxD,wBAAgB,mBAAmB,CACjC,KAAK,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC7G,MAAM,CAQR"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Yujin Forge -- la ventana de la cache de prompt, como DECISION del caso
3
+ * de uso y no como constante.
4
+ *
5
+ * POR QUE EXISTE ESTE ARCHIVO (medido el 2026-11-03, experimento A/B de
6
+ * Urazuke, PND-272)
7
+ *
8
+ * El camino HTTP marcaba sus dos breakpoints con el efimero por omision de
9
+ * 5 minutos, y el motivo estaba escrito al lado del codigo:
10
+ *
11
+ * TTL is the default 5min ephemeral to match the system block +
12
+ * avoid the 1h write-cost premium.
13
+ *
14
+ * Esa eleccion es CORRECTA para el caso que tenia en mente -- turnos cortos
15
+ * uno atras del otro -- y equivocada para una sesion de Urazuke, donde los
16
+ * turnos duran entre 99 y 169 minutos medidos. La aritmetica de Anthropic:
17
+ *
18
+ * lectura de cache 0,10x del precio base de entrada
19
+ * escritura a 5 min 1,25x
20
+ * escritura a 1 hora 2,00x
21
+ *
22
+ * Con ventana de 5 minutos, un prefijo que se vuelve a necesitar 20 minutos
23
+ * despues se re-escribe a 1,25x lo que podria haberse leido a 0,10x: doce
24
+ * veces de mas. Con ventana de 1 hora se paga 2x UNA vez y despues se lee.
25
+ * Pero al reves tambien es cierto: si los turnos salen cada 30 segundos, la
26
+ * ventana de 1 hora no compra NADA y cobra 2x en vez de 1,25x por cada
27
+ * escritura. No hay una constante correcta -- hay una decision.
28
+ *
29
+ * COMO SE DECIDE, Y POR QUE ASI
30
+ *
31
+ * La politica sale de la configuracion (limits.json, cache.ttl). Con 'auto'
32
+ * -- el valor por omision -- la decide la unica evidencia disponible en el
33
+ * momento de escribir: el hueco medido entre el arranque de la peticion
34
+ * ANTERIOR que compartia prefijo y el de esta. Es un predictor por historia
35
+ * reciente, y se declara como tal: nadie sabe cuando va a llegar la lectura
36
+ * siguiente. Los umbrales son los de la aritmetica de arriba, no una
37
+ * intuicion:
38
+ *
39
+ * sin hueco conocido (primera peticion) -> 5m (no hay evidencia; 5m es
40
+ * la escritura mas barata)
41
+ * hueco < 5 min -> 5m (cada peticion refresca la
42
+ * entrada; es estrictamente
43
+ * mas barato)
44
+ * hueco entre 5 y 60 min -> 1h (la unica ventana donde la
45
+ * escritura a 2x se paga)
46
+ * hueco > 60 min -> 5m (la entrada va a estar
47
+ * fria igual; pagar 2x por
48
+ * algo que nadie va a leer
49
+ * es puro recargo)
50
+ *
51
+ * Una lectura REFRESCA el reloj de la entrada sin costo extra, en las dos
52
+ * ventanas, asi que una cadena de turnos cortos mantiene viva la entrada de
53
+ * 5 minutos indefinidamente.
54
+ *
55
+ * LO QUE ESTE ARCHIVO NO ARREGLA (medido, declarado)
56
+ *
57
+ * Por el camino `claude-code-cli` la cache la maneja el CLI de Claude Code y
58
+ * no Forge: medido con scripts/measure_cache.mjs, el CLI escribe SIEMPRE en
59
+ * la ventana de 1 hora (cache_creation.ephemeral_1h_input_tokens), nunca en
60
+ * la de 5 minutos. Por ese camino no hay ventana que elegir, y el problema
61
+ * de cache es otro: la estabilidad del prefijo (ver claude_cli.ts).
62
+ *
63
+ * ASCII-only.
64
+ */
65
+ export const CACHE_TTL_POLICIES = ['auto', '5m', '1h'];
66
+ /** Piso de la ventana corta: por debajo de esto cada peticion refresca la
67
+ * entrada de 5 minutos y la de 1 hora solo cobraria el doble. */
68
+ export const VENTANA_CORTA_MS = 5 * 60 * 1000;
69
+ /** Techo de la ventana larga: por encima de una hora la entrada esta fria
70
+ * igual y la escritura a 2x es recargo sin lectura. */
71
+ export const VENTANA_LARGA_MS = 60 * 60 * 1000;
72
+ /**
73
+ * Elegir la ventana de esta escritura.
74
+ *
75
+ * `lastGapMs` es el hueco medido entre el arranque de la peticion anterior
76
+ * que compartia prefijo y el de esta. `undefined` = no hay anterior.
77
+ */
78
+ export function chooseCacheTtl(policy, opts = {}) {
79
+ if (policy === '5m')
80
+ return { ttl: '5m', why: 'politica fija 5m' };
81
+ if (policy === '1h')
82
+ return { ttl: '1h', why: 'politica fija 1h' };
83
+ const gap = opts.lastGapMs;
84
+ if (typeof gap !== 'number' || !Number.isFinite(gap) || gap < 0) {
85
+ return { ttl: '5m', why: 'auto: sin hueco medido todavia (primera peticion)' };
86
+ }
87
+ const min = Math.round(gap / 60000);
88
+ if (gap < VENTANA_CORTA_MS) {
89
+ return { ttl: '5m', why: 'auto: hueco anterior ' + min + ' min (< 5), cada peticion refresca la entrada' };
90
+ }
91
+ if (gap <= VENTANA_LARGA_MS) {
92
+ return { ttl: '1h', why: 'auto: hueco anterior ' + min + ' min (5..60), la escritura a 2x se paga' };
93
+ }
94
+ return { ttl: '5m', why: 'auto: hueco anterior ' + min + ' min (> 60), la entrada va a estar fria igual' };
95
+ }
96
+ /**
97
+ * El bloque `cache_control` que va al cuerpo de la peticion. Separado para
98
+ * que el emisor no tenga que acordarse de que a 5 minutos se OMITE el campo
99
+ * `ttl` (es el valor por omision de la API) y a 1 hora se declara.
100
+ */
101
+ export function cacheControlFor(ttl) {
102
+ return ttl === '1h'
103
+ ? { type: 'ephemeral', ttl: '1h' }
104
+ : { type: 'ephemeral' };
105
+ }
106
+ /**
107
+ * Rastreador del hueco entre peticiones que comparten prefijo. Vive en la
108
+ * instancia del cliente: una instancia por sesion de chat, asi que el hueco
109
+ * que mide es el de ESA conversacion y no el de la maquina.
110
+ *
111
+ * No persiste a disco a proposito: un hueco de ayer no dice nada del de hoy,
112
+ * y la primera peticion de una sesion nueva ya tiene su propia respuesta
113
+ * ('sin hueco medido' -> 5m, la escritura mas barata).
114
+ */
115
+ export class CacheGapTracker {
116
+ lastStartMs = null;
117
+ /** Llamar al ARRANQUE de cada peticion. Devuelve el hueco contra la
118
+ * anterior (undefined la primera vez) y deja anotado este arranque. */
119
+ mark(nowMs = Date.now()) {
120
+ const prev = this.lastStartMs;
121
+ this.lastStartMs = nowMs;
122
+ if (prev === null)
123
+ return undefined;
124
+ const gap = nowMs - prev;
125
+ return gap >= 0 ? gap : undefined;
126
+ }
127
+ reset() {
128
+ this.lastStartMs = null;
129
+ }
130
+ }
131
+ /**
132
+ * EL ALCANCE DE ESTA POLITICA, DICHO DONDE SE LA CONFIGURA.
133
+ *
134
+ * Pedido del dueno del experimento el 2026-11-03, y el motivo es el mismo
135
+ * que el del cero que informaba salud: "un knob que no hace nada en el
136
+ * camino principal y no lo avisa es un instrumento que contesta cuando no
137
+ * puede mirar". `cache.ttl` rige el camino HTTP (src/chat/claude.ts, que es
138
+ * el que pone cache_control en el cuerpo). Por el camino `claude-code-cli`
139
+ * la cache la maneja el CLI de Claude Code: medido con
140
+ * scripts/measure_cache.mjs, escribe SIEMPRE en la ventana de una hora, y
141
+ * Forge no tiene ahi ninguna ventana que elegir.
142
+ *
143
+ * Se declara SIEMPRE y no solo cuando el proveedor activo es el CLI, a
144
+ * proposito: el proveedor de un turno se decide con la bandera `--provider`
145
+ * de `yf chat`, que la configuracion no ve. Afirmar "tu camino es el HTTP"
146
+ * leyendo brain_config seria exactamente la clase de afirmacion sin
147
+ * medicion que este lote vino a sacar. Cuando la configuracion SI alcanza a
148
+ * verlo -- anthropic_mode='plan' -- el aviso lo agrega.
149
+ */
150
+ export const CACHE_TTL_ALCANCE = 'cache.ttl rige el camino HTTP (API con clave). Por el camino'
151
+ + ' claude-code-cli (suscripcion: yf chat --provider claude-code-cli, o anthropic_mode=plan)'
152
+ + ' la ventana la elige el CLI de Claude Code y no Forge: medido, escribe siempre en la de 1 hora.'
153
+ + ' Cambiar esta politica NO altera ese camino.';
154
+ /** El aviso para `yf limits set cache.ttl` y para el panel. `brain` es
155
+ * opcional: sin el, el aviso es el alcance a secas. */
156
+ export function cacheTtlScopeNotice(brain) {
157
+ const usaAnthropic = brain?.eco?.provider === 'anthropic' || brain?.frontier?.provider === 'anthropic';
158
+ if (brain?.anthropic_mode === 'plan' && usaAnthropic) {
159
+ return CACHE_TTL_ALCANCE
160
+ + ' Y ES TU CASO: brain_config declara anthropic_mode=plan con un brain anthropic,'
161
+ + ' asi que los turnos de ese brain no van a cambiar por esto.';
162
+ }
163
+ return CACHE_TTL_ALCANCE;
164
+ }
165
+ //# sourceMappingURL=cache_ttl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache_ttl.js","sourceRoot":"","sources":["../../src/chat/cache_ttl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAQH,MAAM,CAAC,MAAM,kBAAkB,GAA8B,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAElF;kEACkE;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C;wDACwD;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAQ/C;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAsB,EACtB,OAA2C,EAAE;IAE7C,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IACnE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IAEnE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;IAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,mDAAmD,EAAE,CAAC;IACjF,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC3B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,uBAAuB,GAAG,GAAG,GAAG,+CAA+C,EAAE,CAAC;IAC7G,CAAC;IACD,IAAI,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC5B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,uBAAuB,GAAG,GAAG,GAAG,yCAAyC,EAAE,CAAC;IACvG,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,uBAAuB,GAAG,GAAG,GAAG,+CAA+C,EAAE,CAAC;AAC7G,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAa;IAC3C,OAAO,GAAG,KAAK,IAAI;QACjB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE;QAClC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAe;IAClB,WAAW,GAAkB,IAAI,CAAC;IAE1C;4EACwE;IACxE,IAAI,CAAC,QAAgB,IAAI,CAAC,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;QACzB,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,8DAA8D;MAC3F,2FAA2F;MAC3F,iGAAiG;MACjG,8CAA8C,CAAC;AAEnD;wDACwD;AACxD,MAAM,UAAU,mBAAmB,CACjC,KAA8G;IAE9G,MAAM,YAAY,GAAG,KAAK,EAAE,GAAG,EAAE,QAAQ,KAAK,WAAW,IAAI,KAAK,EAAE,QAAQ,EAAE,QAAQ,KAAK,WAAW,CAAC;IACvG,IAAI,KAAK,EAAE,cAAc,KAAK,MAAM,IAAI,YAAY,EAAE,CAAC;QACrD,OAAO,iBAAiB;cACpB,iFAAiF;cACjF,6DAA6D,CAAC;IACpE,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
@@ -261,6 +261,7 @@ export declare class ClaudeClient implements ChatLLMClient {
261
261
  private fetchImpl;
262
262
  private defaultModel;
263
263
  private baseUrl;
264
+ private gap;
264
265
  constructor(opts?: ClaudeClientOptions);
265
266
  chat(req: ClaudeChatRequest): Promise<ClaudeChatResponse>;
266
267
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/chat/claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/chat/claude.ts"],"names":[],"mappings":"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"}