@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.
- package/dist/chat/agent_session.d.ts.map +1 -1
- package/dist/chat/agent_session.js +132 -12
- package/dist/chat/agent_session.js.map +1 -1
- package/dist/chat/cache_ttl.d.ts +143 -0
- package/dist/chat/cache_ttl.d.ts.map +1 -0
- package/dist/chat/cache_ttl.js +165 -0
- package/dist/chat/cache_ttl.js.map +1 -0
- package/dist/chat/claude.d.ts +1 -0
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js +47 -5
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/claude_cli.d.ts +24 -0
- package/dist/chat/claude_cli.d.ts.map +1 -1
- package/dist/chat/claude_cli.js +76 -10
- package/dist/chat/claude_cli.js.map +1 -1
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +133 -21
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +32 -3
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/evidence.d.ts +15 -0
- package/dist/chat/tools/evidence.d.ts.map +1 -1
- package/dist/chat/tools/evidence.js +16 -0
- package/dist/chat/tools/evidence.js.map +1 -1
- package/dist/chat/tools/keys.d.ts.map +1 -1
- package/dist/chat/tools/keys.js +22 -2
- package/dist/chat/tools/keys.js.map +1 -1
- package/dist/chat/tools/pending.d.ts +3 -0
- package/dist/chat/tools/pending.d.ts.map +1 -1
- package/dist/chat/tools/pending.js +40 -3
- package/dist/chat/tools/pending.js.map +1 -1
- package/dist/chat/tools/session_verbs.d.ts +83 -0
- package/dist/chat/tools/session_verbs.d.ts.map +1 -1
- package/dist/chat/tools/session_verbs.js +251 -18
- package/dist/chat/tools/session_verbs.js.map +1 -1
- package/dist/chat/tools/shell.d.ts +11 -0
- package/dist/chat/tools/shell.d.ts.map +1 -1
- package/dist/chat/tools/shell.js +68 -1
- package/dist/chat/tools/shell.js.map +1 -1
- package/dist/commands/chat.d.ts +6 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +25 -0
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/limits.d.ts.map +1 -1
- package/dist/commands/limits.js +85 -6
- package/dist/commands/limits.js.map +1 -1
- package/dist/commands/pending.d.ts.map +1 -1
- package/dist/commands/pending.js +26 -1
- package/dist/commands/pending.js.map +1 -1
- package/dist/commands/urazuke.d.ts.map +1 -1
- package/dist/commands/urazuke.js +82 -0
- package/dist/commands/urazuke.js.map +1 -1
- package/dist/core/brain_pin.d.ts +74 -0
- package/dist/core/brain_pin.d.ts.map +1 -0
- package/dist/core/brain_pin.js +113 -0
- package/dist/core/brain_pin.js.map +1 -0
- package/dist/core/cost_router.d.ts.map +1 -1
- package/dist/core/cost_router.js +56 -0
- package/dist/core/cost_router.js.map +1 -1
- package/dist/core/limits_config.d.ts +61 -0
- package/dist/core/limits_config.d.ts.map +1 -1
- package/dist/core/limits_config.js +78 -0
- package/dist/core/limits_config.js.map +1 -1
- package/dist/core/provider_keys.d.ts +33 -0
- package/dist/core/provider_keys.d.ts.map +1 -1
- package/dist/core/provider_keys.js +40 -3
- package/dist/core/provider_keys.js.map +1 -1
- package/dist/docs/doctrine/session-orchestration.md +109 -86
- package/dist/llm/sse_stream.d.ts +5 -0
- package/dist/llm/sse_stream.d.ts.map +1 -1
- package/dist/llm/sse_stream.js +26 -3
- package/dist/llm/sse_stream.js.map +1 -1
- package/dist/mcp/bridge_registry.d.ts +1 -1
- package/dist/nac3/internal_manifest.d.ts.map +1 -1
- package/dist/nac3/internal_manifest.js +2 -0
- package/dist/nac3/internal_manifest.js.map +1 -1
- package/dist/pending/store.d.ts +12 -0
- package/dist/pending/store.d.ts.map +1 -1
- package/dist/pending/store.js +20 -0
- package/dist/pending/store.js.map +1 -1
- package/dist/pending/types.d.ts +11 -0
- package/dist/pending/types.d.ts.map +1 -1
- package/dist/pending/types.js.map +1 -1
- package/dist/tasks/supervisor.d.ts +31 -0
- package/dist/tasks/supervisor.d.ts.map +1 -1
- package/dist/tasks/supervisor.js +61 -5
- package/dist/tasks/supervisor.js.map +1 -1
- package/dist/telemetry/usage.d.ts +107 -0
- package/dist/telemetry/usage.d.ts.map +1 -1
- package/dist/telemetry/usage.js +186 -13
- package/dist/telemetry/usage.js.map +1 -1
- package/dist/urazuke/close_gate.d.ts +47 -3
- package/dist/urazuke/close_gate.d.ts.map +1 -1
- package/dist/urazuke/close_gate.js +57 -3
- package/dist/urazuke/close_gate.js.map +1 -1
- package/dist/urazuke/evidence.d.ts +10 -0
- package/dist/urazuke/evidence.d.ts.map +1 -1
- package/dist/urazuke/evidence.js +63 -3
- package/dist/urazuke/evidence.js.map +1 -1
- package/dist/urazuke/external_audit.d.ts +89 -0
- package/dist/urazuke/external_audit.d.ts.map +1 -0
- package/dist/urazuke/external_audit.js +309 -0
- package/dist/urazuke/external_audit.js.map +1 -0
- package/dist/urazuke/receipts.d.ts +28 -1
- package/dist/urazuke/receipts.d.ts.map +1 -1
- package/dist/urazuke/receipts.js +59 -6
- package/dist/urazuke/receipts.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/doctrine/session-orchestration.md +109 -86
- package/package.json +1 -1
- package/src/i18n/catalogs/ar.json +570 -568
- package/src/i18n/catalogs/de.json +570 -568
- package/src/i18n/catalogs/en.json +570 -568
- package/src/i18n/catalogs/es.json +570 -568
- package/src/i18n/catalogs/fr.json +570 -568
- package/src/i18n/catalogs/hi.json +570 -568
- package/src/i18n/catalogs/it.json +570 -568
- package/src/i18n/catalogs/ja.json +570 -568
- package/src/i18n/catalogs/pt.json +570 -568
- 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;
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAsCpD,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACzE,OAAO,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAC7E,CAAC;AAED;;yBAEyB;AACzB,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED;qEACqE;AACrE,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO;QACL,6EAA6E;QAC7E,8EAA8E;QAC9E,2BAA2B;QAC3B,EAAE;QACF,0EAA0E;QAC1E,2EAA2E;QAC3E,4EAA4E;QAC5E,iEAAiE;QACjE,EAAE;QACF,wEAAwE;QACxE,uEAAuE;QACvE,mBAAmB,GAAG,uBAAuB;QAC7C,EAAE;QACF,QAAQ;QACR,IAAI;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAID,KAAK,UAAU,QAAQ,CACrB,SAAuB,EAAE,IAAY,EAAE,OAAe,EAAE,SAAiB;
|
|
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":"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"}
|
package/dist/chat/claude.d.ts
CHANGED
|
@@ -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":"AA6BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/chat/claude.ts"],"names":[],"mappings":"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"}
|