@nac3/forge-cli 1.4.0 → 1.6.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/bin/heap_bootstrap.d.ts +34 -0
- package/dist/bin/heap_bootstrap.d.ts.map +1 -0
- package/dist/bin/heap_bootstrap.js +134 -0
- package/dist/bin/heap_bootstrap.js.map +1 -0
- package/dist/bin/yf.js +30 -21
- package/dist/bin/yf.js.map +1 -1
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js +20 -1
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/claude_cli.d.ts.map +1 -1
- package/dist/chat/claude_cli.js +22 -3
- package/dist/chat/claude_cli.js.map +1 -1
- package/dist/chat/graph_auto_ingest.d.ts +3 -0
- package/dist/chat/graph_auto_ingest.d.ts.map +1 -1
- package/dist/chat/graph_auto_ingest.js +18 -0
- package/dist/chat/graph_auto_ingest.js.map +1 -1
- package/dist/chat/graph_component_watcher.d.ts +41 -0
- package/dist/chat/graph_component_watcher.d.ts.map +1 -1
- package/dist/chat/graph_component_watcher.js +144 -2
- package/dist/chat/graph_component_watcher.js.map +1 -1
- package/dist/chat/graph_snapshot.d.ts +8 -0
- package/dist/chat/graph_snapshot.d.ts.map +1 -1
- package/dist/chat/graph_snapshot.js +142 -44
- package/dist/chat/graph_snapshot.js.map +1 -1
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +12728 -12719
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/persistence.d.ts.map +1 -1
- package/dist/chat/persistence.js +18 -8
- package/dist/chat/persistence.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +22 -8
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/session_store.d.ts +13 -0
- package/dist/chat/session_store.d.ts.map +1 -1
- package/dist/chat/session_store.js +36 -1
- package/dist/chat/session_store.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +59 -0
- package/dist/commands/chat.js.map +1 -1
- package/dist/core/brain_behaviour.d.ts.map +1 -1
- package/dist/core/brain_behaviour.js +8 -1
- package/dist/core/brain_behaviour.js.map +1 -1
- package/dist/core/brain_config.d.ts +23 -0
- package/dist/core/brain_config.d.ts.map +1 -1
- package/dist/core/brain_config.js +33 -0
- package/dist/core/brain_config.js.map +1 -1
- package/dist/core/federation_config.js +1 -1
- package/dist/core/federation_config.js.map +1 -1
- package/dist/core/heap_watch.d.ts +33 -0
- package/dist/core/heap_watch.d.ts.map +1 -0
- package/dist/core/heap_watch.js +82 -0
- package/dist/core/heap_watch.js.map +1 -0
- package/dist/core/keys_envelope.d.ts +1 -1
- package/dist/core/keys_envelope.d.ts.map +1 -1
- package/dist/core/keys_envelope.js.map +1 -1
- package/dist/core/provider_models.d.ts +5 -0
- package/dist/core/provider_models.d.ts.map +1 -1
- package/dist/core/provider_models.js +17 -4
- package/dist/core/provider_models.js.map +1 -1
- package/dist/lan/announce.d.ts +53 -0
- package/dist/lan/announce.d.ts.map +1 -0
- package/dist/lan/announce.js +111 -0
- package/dist/lan/announce.js.map +1 -0
- package/dist/llm/cohere_client.d.ts.map +1 -1
- package/dist/llm/cohere_client.js +13 -3
- package/dist/llm/cohere_client.js.map +1 -1
- package/dist/llm/context_compaction.d.ts +25 -0
- package/dist/llm/context_compaction.d.ts.map +1 -1
- package/dist/llm/context_compaction.js +81 -13
- package/dist/llm/context_compaction.js.map +1 -1
- package/dist/llm/deepseek_client.d.ts +10 -3
- package/dist/llm/deepseek_client.d.ts.map +1 -1
- package/dist/llm/deepseek_client.js +12 -2
- package/dist/llm/deepseek_client.js.map +1 -1
- package/dist/llm/gemini_client.d.ts.map +1 -1
- package/dist/llm/gemini_client.js +0 -0
- package/dist/llm/gemini_client.js.map +1 -1
- package/dist/llm/mistral_client.d.ts.map +1 -1
- package/dist/llm/mistral_client.js +13 -3
- package/dist/llm/mistral_client.js.map +1 -1
- package/dist/llm/ollama_client.d.ts.map +1 -1
- package/dist/llm/ollama_client.js +13 -3
- package/dist/llm/ollama_client.js.map +1 -1
- package/dist/llm/openai_client.d.ts.map +1 -1
- package/dist/llm/openai_client.js +13 -3
- package/dist/llm/openai_client.js.map +1 -1
- package/dist/llm/xai_client.d.ts.map +1 -1
- package/dist/llm/xai_client.js +13 -3
- package/dist/llm/xai_client.js.map +1 -1
- package/dist/qa/brain_matrix/brains.json +80 -80
- package/dist/semantic_graph/store.d.ts.map +1 -1
- package/dist/semantic_graph/store.js +119 -88
- package/dist/semantic_graph/store.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +117 -117
|
@@ -15,6 +15,11 @@ export interface ModelListResult {
|
|
|
15
15
|
}
|
|
16
16
|
/** Test hook. */
|
|
17
17
|
export declare function _resetProviderModelsCache(): void;
|
|
18
|
+
/** Providers con listado VIVO contra el API del proveedor. Es la fuente del
|
|
19
|
+
* invariante que exige que todo cerebro ofrecido tenga uno (ver
|
|
20
|
+
* `DAILY_BRAIN_PROVIDERS`): sin listado vivo el catalogo se pudre en
|
|
21
|
+
* silencio y el wizard termina escribiendo un modelo retirado. */
|
|
22
|
+
export declare const PROVIDERS_WITH_LIVE_LISTING: readonly BrainProvider[];
|
|
18
23
|
/**
|
|
19
24
|
* Lista los modelos disponibles para un provider. Nunca lanza:
|
|
20
25
|
* degrada a la lista estatica con `source: 'static'`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider_models.d.ts","sourceRoot":"","sources":["../../src/core/provider_models.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB;sDACkD;IAClD,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B;2CACuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"provider_models.d.ts","sourceRoot":"","sources":["../../src/core/provider_models.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB;sDACkD;IAClD,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B;2CACuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4DD,iBAAiB;AACjB,wBAAgB,yBAAyB,IAAI,IAAI,CAAoB;AAErE;;;mEAGmE;AACnE,eAAO,MAAM,2BAA2B,EAAE,SAAS,aAAa,EAE/D,CAAC;AAgFF;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,aAAa,EACvB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GACnF,OAAO,CAAC,eAAe,CAAC,CA2C1B"}
|
|
@@ -35,8 +35,11 @@ const STATIC_MODELS = {
|
|
|
35
35
|
{ id: 'gpt-4o-mini', display_name: 'GPT-4o mini' },
|
|
36
36
|
],
|
|
37
37
|
deepseek: [
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
/* 2026-09-21 -- deepseek-chat / deepseek-reasoner fueron retirados del
|
|
39
|
+
* API (GET /models ya no los devuelve). El catalogo vivo es flash +
|
|
40
|
+
* v4-pro; esta lista solo actua de fallback sin key. */
|
|
41
|
+
{ id: 'deepseek-flash', display_name: 'DeepSeek Flash' },
|
|
42
|
+
{ id: 'deepseek-v4-pro', display_name: 'DeepSeek V4 Pro' },
|
|
40
43
|
],
|
|
41
44
|
xai: [
|
|
42
45
|
{ id: 'grok-3', display_name: 'Grok 3' },
|
|
@@ -70,6 +73,13 @@ const CACHE_TTL_MS = 10 * 60 * 1000;
|
|
|
70
73
|
const _cache = new Map();
|
|
71
74
|
/** Test hook. */
|
|
72
75
|
export function _resetProviderModelsCache() { _cache.clear(); }
|
|
76
|
+
/** Providers con listado VIVO contra el API del proveedor. Es la fuente del
|
|
77
|
+
* invariante que exige que todo cerebro ofrecido tenga uno (ver
|
|
78
|
+
* `DAILY_BRAIN_PROVIDERS`): sin listado vivo el catalogo se pudre en
|
|
79
|
+
* silencio y el wizard termina escribiendo un modelo retirado. */
|
|
80
|
+
export const PROVIDERS_WITH_LIVE_LISTING = [
|
|
81
|
+
'anthropic', 'openai', 'google_ai', 'deepseek',
|
|
82
|
+
];
|
|
73
83
|
function staticResult(provider, error) {
|
|
74
84
|
const r = {
|
|
75
85
|
provider,
|
|
@@ -183,8 +193,11 @@ export async function listProviderModels(provider, opts = {}) {
|
|
|
183
193
|
case 'deepseek':
|
|
184
194
|
models = await listDeepSeek(key, fetchImpl, timeoutMs);
|
|
185
195
|
break;
|
|
186
|
-
/* Providers
|
|
187
|
-
*
|
|
196
|
+
/* Providers SIN listado vivo (xai/mistral/cohere/qwen/zai/ollama):
|
|
197
|
+
* fallback estatico sin error. Ninguno de estos es un cerebro
|
|
198
|
+
* ofrecido -- ver DAILY_BRAIN_PROVIDERS y el invariante que lo
|
|
199
|
+
* testea: un cerebro que se ofrece TIENE que tener listado vivo, o
|
|
200
|
+
* su catalogo se pudre igual que le paso a DeepSeek. */
|
|
188
201
|
default: return staticResult(provider);
|
|
189
202
|
}
|
|
190
203
|
if (models.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider_models.js","sourceRoot":"","sources":["../../src/core/provider_models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAsB,MAAM,mBAAmB,CAAC;AAkB7E;;wDAEwD;AACxD,MAAM,aAAa,GAAoD;IACrE,SAAS,EAAE;QACT,EAAE,EAAE,EAAE,iBAAiB,EAAa,YAAY,EAAE,iBAAiB,EAAE;QACrE,EAAE,EAAE,EAAE,mBAAmB,EAAW,YAAY,EAAE,mBAAmB,EAAE;QACvE,EAAE,EAAE,EAAE,2BAA2B,EAAG,YAAY,EAAE,kBAAkB,EAAE;KACvE;IACD,SAAS,EAAE;QACT,EAAE,EAAE,EAAE,gBAAgB,EAAS,YAAY,EAAE,gBAAgB,EAAE;QAC/D,EAAE,EAAE,EAAE,kBAAkB,EAAO,YAAY,EAAE,kBAAkB,EAAE;QACjE,EAAE,EAAE,EAAE,uBAAuB,EAAE,YAAY,EAAE,uBAAuB,EAAE;KACvE;IACD,MAAM,EAAE;QACN,EAAE,EAAE,EAAE,QAAQ,EAAO,YAAY,EAAE,QAAQ,EAAE;QAC7C,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE;KACnD;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"provider_models.js","sourceRoot":"","sources":["../../src/core/provider_models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anunciador mDNS del panel -- la mitad que faltaba (PND-086, 2026-09-22).
|
|
3
|
+
*
|
|
4
|
+
* `src/lan/mdns_service.ts` implementa el protocolo completo (announce +
|
|
5
|
+
* browse de `_yujin-forge._tcp.local.`) desde hace meses, pero
|
|
6
|
+
* `attachAnnouncer` NO lo llamaba nadie fuera de los tests: el panel nunca
|
|
7
|
+
* anunciaba nada en la red. Por eso el descubrimiento del celular cae
|
|
8
|
+
* siempre al polling de hosts cargados a mano -- y por eso habilitar
|
|
9
|
+
* zeroconf nativo en la app, sola, no habria cambiado nada: no habia a quien
|
|
10
|
+
* descubrir.
|
|
11
|
+
*
|
|
12
|
+
* Esto levanta el socket multicast, responde las consultas PTR y manda un
|
|
13
|
+
* anuncio no solicitado al arrancar (para que un cliente que ya estaba
|
|
14
|
+
* escuchando se entere sin tener que preguntar).
|
|
15
|
+
*
|
|
16
|
+
* Reglas de la casa:
|
|
17
|
+
* - Nunca tumba el panel. Si no hay red, si el puerto 5353 esta tomado por
|
|
18
|
+
* otro responder (Bonjour de Apple, avahi) o si el SO niega el multicast,
|
|
19
|
+
* se degrada a "no anuncio" y sigue.
|
|
20
|
+
* - Opt-out por env: `YF_NO_MDNS=1`.
|
|
21
|
+
*
|
|
22
|
+
* ASCII-only.
|
|
23
|
+
*/
|
|
24
|
+
import os from 'node:os';
|
|
25
|
+
import { type SocketLike } from './mdns_service.js';
|
|
26
|
+
export interface AnnouncerHandle {
|
|
27
|
+
/** true si el socket quedo escuchando y respondiendo. */
|
|
28
|
+
active: boolean;
|
|
29
|
+
/** Por que no se anuncia, cuando active=false. */
|
|
30
|
+
reason?: string;
|
|
31
|
+
stop(): void;
|
|
32
|
+
}
|
|
33
|
+
/** Primera IPv4 no interna de la maquina. Es la que se publica en el
|
|
34
|
+
* registro A: si no hay ninguna (sin red), no tiene sentido anunciar. */
|
|
35
|
+
export declare function primaryIpv4(ifaces?: NodeJS.Dict<os.NetworkInterfaceInfo[]>): string | null;
|
|
36
|
+
/** Nombre de instancia legible: el hostname de la maquina, sin dominio. */
|
|
37
|
+
export declare function instanceNameFor(hostname?: string): string;
|
|
38
|
+
export interface StartAnnouncerOpts {
|
|
39
|
+
/** Puerto del panel. */
|
|
40
|
+
port: number;
|
|
41
|
+
/** Slug del proyecto activo, para el TXT. */
|
|
42
|
+
projectSlug?: string;
|
|
43
|
+
/** Version del CLI, para el TXT. */
|
|
44
|
+
version?: string;
|
|
45
|
+
/** Inyectable para tests: crea el socket multicast ya bindeado. */
|
|
46
|
+
createSocket?: () => Promise<SocketLike & {
|
|
47
|
+
close(): void;
|
|
48
|
+
}>;
|
|
49
|
+
env?: Record<string, string | undefined>;
|
|
50
|
+
ipv4?: string | null;
|
|
51
|
+
}
|
|
52
|
+
export declare function startPanelAnnouncer(opts: StartAnnouncerOpts): Promise<AnnouncerHandle>;
|
|
53
|
+
//# sourceMappingURL=announce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announce.d.ts","sourceRoot":"","sources":["../../src/lan/announce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAEe,KAAK,UAAU,EACpC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,IAAI,IAAI,CAAC;CACd;AAMD;0EAC0E;AAC1E,wBAAgB,WAAW,CAAC,MAAM,GAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAA0B,GAAG,MAAM,GAAG,IAAI,CAUlH;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAGxE;AAED,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG;QAAE,KAAK,IAAI,IAAI,CAAA;KAAE,CAAC,CAAC;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAkBD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmC5F"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anunciador mDNS del panel -- la mitad que faltaba (PND-086, 2026-09-22).
|
|
3
|
+
*
|
|
4
|
+
* `src/lan/mdns_service.ts` implementa el protocolo completo (announce +
|
|
5
|
+
* browse de `_yujin-forge._tcp.local.`) desde hace meses, pero
|
|
6
|
+
* `attachAnnouncer` NO lo llamaba nadie fuera de los tests: el panel nunca
|
|
7
|
+
* anunciaba nada en la red. Por eso el descubrimiento del celular cae
|
|
8
|
+
* siempre al polling de hosts cargados a mano -- y por eso habilitar
|
|
9
|
+
* zeroconf nativo en la app, sola, no habria cambiado nada: no habia a quien
|
|
10
|
+
* descubrir.
|
|
11
|
+
*
|
|
12
|
+
* Esto levanta el socket multicast, responde las consultas PTR y manda un
|
|
13
|
+
* anuncio no solicitado al arrancar (para que un cliente que ya estaba
|
|
14
|
+
* escuchando se entere sin tener que preguntar).
|
|
15
|
+
*
|
|
16
|
+
* Reglas de la casa:
|
|
17
|
+
* - Nunca tumba el panel. Si no hay red, si el puerto 5353 esta tomado por
|
|
18
|
+
* otro responder (Bonjour de Apple, avahi) o si el SO niega el multicast,
|
|
19
|
+
* se degrada a "no anuncio" y sigue.
|
|
20
|
+
* - Opt-out por env: `YF_NO_MDNS=1`.
|
|
21
|
+
*
|
|
22
|
+
* ASCII-only.
|
|
23
|
+
*/
|
|
24
|
+
import os from 'node:os';
|
|
25
|
+
import { attachAnnouncer, MDNS_PORT, MDNS_GROUP_IPV4, } from './mdns_service.js';
|
|
26
|
+
const INACTIVE = (reason) => ({
|
|
27
|
+
active: false, reason, stop() { },
|
|
28
|
+
});
|
|
29
|
+
/** Primera IPv4 no interna de la maquina. Es la que se publica en el
|
|
30
|
+
* registro A: si no hay ninguna (sin red), no tiene sentido anunciar. */
|
|
31
|
+
export function primaryIpv4(ifaces = os.networkInterfaces()) {
|
|
32
|
+
for (const list of Object.values(ifaces)) {
|
|
33
|
+
for (const ni of list ?? []) {
|
|
34
|
+
if (ni.internal)
|
|
35
|
+
continue;
|
|
36
|
+
/* node >=18 puede devolver family como numero (4) o string ('IPv4') */
|
|
37
|
+
const fam = String(ni.family);
|
|
38
|
+
if (fam === '4' || fam === 'IPv4')
|
|
39
|
+
return ni.address;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
/** Nombre de instancia legible: el hostname de la maquina, sin dominio. */
|
|
45
|
+
export function instanceNameFor(hostname = os.hostname()) {
|
|
46
|
+
const first = String(hostname || 'forge').split('.')[0] || 'forge';
|
|
47
|
+
return first.slice(0, 63);
|
|
48
|
+
}
|
|
49
|
+
/** Socket real: UDP4 con reuseAddr (convive con el responder del SO),
|
|
50
|
+
* bindeado a 5353 y unido al grupo multicast. */
|
|
51
|
+
async function defaultSocket() {
|
|
52
|
+
const dgram = await import('node:dgram');
|
|
53
|
+
const sock = dgram.createSocket({ type: 'udp4', reuseAddr: true });
|
|
54
|
+
await new Promise((resolve, reject) => {
|
|
55
|
+
sock.once('error', reject);
|
|
56
|
+
sock.bind(MDNS_PORT, () => {
|
|
57
|
+
try {
|
|
58
|
+
sock.addMembership(MDNS_GROUP_IPV4);
|
|
59
|
+
}
|
|
60
|
+
catch { /* sin multicast: igual respondemos unicast */ }
|
|
61
|
+
sock.removeListener('error', reject);
|
|
62
|
+
resolve();
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
return sock;
|
|
66
|
+
}
|
|
67
|
+
export async function startPanelAnnouncer(opts) {
|
|
68
|
+
const env = opts.env ?? process.env;
|
|
69
|
+
if (env['YF_NO_MDNS'])
|
|
70
|
+
return INACTIVE('desactivado por YF_NO_MDNS');
|
|
71
|
+
const ipv4 = opts.ipv4 === undefined ? primaryIpv4() : opts.ipv4;
|
|
72
|
+
if (!ipv4)
|
|
73
|
+
return INACTIVE('sin IPv4 no interna (maquina sin red)');
|
|
74
|
+
const instanceName = instanceNameFor();
|
|
75
|
+
const cfg = {
|
|
76
|
+
instanceName,
|
|
77
|
+
hostName: instanceName + '.local.',
|
|
78
|
+
port: opts.port,
|
|
79
|
+
ipv4,
|
|
80
|
+
txt: {
|
|
81
|
+
...(opts.projectSlug ? { project: opts.projectSlug } : {}),
|
|
82
|
+
...(opts.version ? { version: opts.version } : {}),
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
let sock = null;
|
|
86
|
+
try {
|
|
87
|
+
sock = await (opts.createSocket ?? defaultSocket)();
|
|
88
|
+
const { unsolicited } = attachAnnouncer({ socket: sock, cfg });
|
|
89
|
+
/* Anuncio no solicitado: el que ya estaba escuchando nos ve sin preguntar. */
|
|
90
|
+
try {
|
|
91
|
+
sock.send(unsolicited, MDNS_PORT, MDNS_GROUP_IPV4);
|
|
92
|
+
}
|
|
93
|
+
catch { /* best-effort */ }
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
try {
|
|
97
|
+
sock?.close();
|
|
98
|
+
}
|
|
99
|
+
catch { /* */ }
|
|
100
|
+
return INACTIVE(err instanceof Error ? err.message : String(err));
|
|
101
|
+
}
|
|
102
|
+
const s = sock;
|
|
103
|
+
return {
|
|
104
|
+
active: true,
|
|
105
|
+
stop() { try {
|
|
106
|
+
s.close();
|
|
107
|
+
}
|
|
108
|
+
catch { /* ya cerrado */ } },
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=announce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announce.js","sourceRoot":"","sources":["../../src/lan/announce.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cohere_client.d.ts","sourceRoot":"","sources":["../../src/llm/cohere_client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"cohere_client.d.ts","sourceRoot":"","sources":["../../src/llm/cohere_client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAOjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAClE,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AA6BD,qBAAa,cAAe,SAAQ,KAAK;IACvC,MAAM,EAAE,MAAM,CAAC;gBACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAK5C;AAaD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,YAAY,CAAS;gBAEjB,IAAI,EAAE,mBAAmB;IAS/B,IAAI,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA8KhE"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { resolveBrainBehaviour } from '../core/brain_behaviour.js';
|
|
2
|
+
import { capToolResult, compactOldToolResults } from './context_compaction.js';
|
|
1
3
|
const COHERE_BASE = 'https://api.cohere.com/v2/chat';
|
|
2
4
|
const DEFAULT_COHERE_MODEL = 'command-r-plus-08-2024';
|
|
3
5
|
export class CohereApiError extends Error {
|
|
@@ -70,6 +72,10 @@ export class CohereClient {
|
|
|
70
72
|
let totalOut = 0;
|
|
71
73
|
let serverModel = model;
|
|
72
74
|
const toolRounds = [];
|
|
75
|
+
/* H2/H3 (2026-09-22) -- cap + compactacion por cerebro. Antes esto solo
|
|
76
|
+
* existia en el cliente deepseek: el resto acumulaba la historia entera
|
|
77
|
+
* y la re-serializaba en cada ronda, que es como se agotaba el heap. */
|
|
78
|
+
const behaviour = await resolveBrainBehaviour('cohere', serverModel);
|
|
73
79
|
for (let round = 0; round < maxRounds; round++) {
|
|
74
80
|
void round;
|
|
75
81
|
const body = {
|
|
@@ -181,11 +187,15 @@ export class CohereClient {
|
|
|
181
187
|
catch {
|
|
182
188
|
resultStr = String(result);
|
|
183
189
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
190
|
+
/* H2 (2026-09-22) -- antes: stub ciego de 200KB. Ahora el cap sale
|
|
191
|
+
* de la behaviour del cerebro (modo 'head': el modelo sigue viendo
|
|
192
|
+
* el principio del dato en vez de quedarse ciego). */
|
|
193
|
+
resultStr = capToolResult(resultStr, behaviour);
|
|
187
194
|
messages.push({ role: 'tool', tool_call_id: tc.id, content: resultStr });
|
|
188
195
|
}
|
|
196
|
+
/* Compactar los resultados VIEJOS del turno (no-op hasta que el turno
|
|
197
|
+
* se hace largo, segun la behaviour del cerebro). */
|
|
198
|
+
compactOldToolResults(messages, behaviour, round + 1);
|
|
189
199
|
}
|
|
190
200
|
return {
|
|
191
201
|
text: '[Alcance el limite de rondas (' + maxRounds + '/' + maxRounds +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cohere_client.js","sourceRoot":"","sources":["../../src/llm/cohere_client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cohere_client.js","sourceRoot":"","sources":["../../src/llm/cohere_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,5 +31,30 @@ interface OpenAiMsg {
|
|
|
31
31
|
* disabled or before the round trigger. Returns the number compacted (for
|
|
32
32
|
* telemetry/tests). */
|
|
33
33
|
export declare function compactOldToolResults(messages: OpenAiMsg[], b: BrainBehaviour, round: number): number;
|
|
34
|
+
interface AnthropicMsg {
|
|
35
|
+
role: string;
|
|
36
|
+
content?: unknown;
|
|
37
|
+
}
|
|
38
|
+
/** Misma idea que `compactOldToolResults`, para la forma de Anthropic: el
|
|
39
|
+
* resultado no es un mensaje con role='tool' sino un bloque
|
|
40
|
+
* `{ type: 'tool_result', content: '...' }` dentro del `content` de un
|
|
41
|
+
* mensaje de usuario. Sin esto, la ruta Console (el cerebro anthropic, que
|
|
42
|
+
* es el default) acumulaba la historia entera sin techo -- la causa del
|
|
43
|
+
* OOM de heap del panel (2026-09). */
|
|
44
|
+
export declare function compactOldAnthropicToolResults(messages: AnthropicMsg[], b: BrainBehaviour, round: number): number;
|
|
45
|
+
interface GeminiPart {
|
|
46
|
+
functionResponse?: {
|
|
47
|
+
name?: string;
|
|
48
|
+
response?: unknown;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
interface GeminiContent {
|
|
52
|
+
role?: string;
|
|
53
|
+
parts?: GeminiPart[];
|
|
54
|
+
}
|
|
55
|
+
/** Variante Gemini: el resultado viaja en
|
|
56
|
+
* `parts[].functionResponse.response`. Se reemplaza el payload por el
|
|
57
|
+
* marcador, conservando la forma que la API espera. */
|
|
58
|
+
export declare function compactOldGeminiToolResults(contents: GeminiContent[], b: BrainBehaviour, round: number): number;
|
|
34
59
|
export {};
|
|
35
60
|
//# sourceMappingURL=context_compaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context_compaction.d.ts","sourceRoot":"","sources":["../../src/llm/context_compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;kDAEkD;AAClD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,CAS1E;AAED,UAAU,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE;
|
|
1
|
+
{"version":3,"file":"context_compaction.d.ts","sourceRoot":"","sources":["../../src/llm/context_compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;kDAEkD;AAClD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,CAS1E;AAED,UAAU,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE;AAwBrG;;;;wBAIwB;AACxB,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYrG;AAKD,UAAU,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;AAE1D;;;;;uCAKuC;AACvC,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GACzD,MAAM,CAgBR;AAID,UAAU,UAAU;IAAG,gBAAgB,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE;AACjF,UAAU,aAAa;IAAG,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;CAAE;AAE/D;;wDAEwD;AACxD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAC1D,MAAM,CAiBR"}
|
|
@@ -12,32 +12,100 @@ export function capToolResult(resultStr, b) {
|
|
|
12
12
|
+ '\n[...truncado: ' + resultStr.length + ' bytes en total; se muestran los primeros '
|
|
13
13
|
+ max + '. Pedi un rango/paginado o filtra la consulta si necesitas mas.]';
|
|
14
14
|
}
|
|
15
|
+
/** El texto con el que se reemplaza un resultado viejo. Unico lugar donde
|
|
16
|
+
* se arma, para que los tres formatos digan exactamente lo mismo. */
|
|
17
|
+
function staleMarker(bytes) {
|
|
18
|
+
return '[resultado previo compactado -- ' + bytes
|
|
19
|
+
+ ' bytes; volve a consultar esa fuente si lo necesitas de nuevo]';
|
|
20
|
+
}
|
|
21
|
+
/** Ya fue compactado (o es tan chico que no vale la pena). */
|
|
22
|
+
function alreadyCompact(c) {
|
|
23
|
+
return c.length <= 400 || c.startsWith('[resultado previo compactado');
|
|
24
|
+
}
|
|
25
|
+
/** Cuantos de los N resultados hay que compactar, dados keep_recent.
|
|
26
|
+
* Devuelve los INDICES (dentro del array de indices recibido) a tocar. */
|
|
27
|
+
function staleSlice(all, b, round) {
|
|
28
|
+
if (!b.compaction.enabled)
|
|
29
|
+
return [];
|
|
30
|
+
if (round < b.compaction.trigger_after_rounds)
|
|
31
|
+
return [];
|
|
32
|
+
const keep = Math.max(1, b.compaction.keep_recent_tool_results | 0);
|
|
33
|
+
if (all.length <= keep)
|
|
34
|
+
return [];
|
|
35
|
+
return all.slice(0, all.length - keep);
|
|
36
|
+
}
|
|
15
37
|
/** Compact OLD tool-result messages IN PLACE: keep the `keep_recent` most
|
|
16
38
|
* recent role='tool' messages in full, replace the content of older ones with
|
|
17
39
|
* a short marker. Bounds both the RSS and the per-round payload. No-op when
|
|
18
40
|
* disabled or before the round trigger. Returns the number compacted (for
|
|
19
41
|
* telemetry/tests). */
|
|
20
42
|
export function compactOldToolResults(messages, b, round) {
|
|
21
|
-
if (!b.compaction.enabled)
|
|
22
|
-
return 0;
|
|
23
|
-
if (round < b.compaction.trigger_after_rounds)
|
|
24
|
-
return 0;
|
|
25
|
-
const keep = Math.max(1, b.compaction.keep_recent_tool_results | 0);
|
|
26
43
|
const toolIdx = [];
|
|
27
44
|
for (let i = 0; i < messages.length; i++)
|
|
28
45
|
if (messages[i].role === 'tool')
|
|
29
46
|
toolIdx.push(i);
|
|
30
|
-
if (toolIdx.length <= keep)
|
|
31
|
-
return 0;
|
|
32
|
-
const stale = toolIdx.slice(0, toolIdx.length - keep);
|
|
33
47
|
let compacted = 0;
|
|
34
|
-
for (const i of
|
|
48
|
+
for (const i of staleSlice(toolIdx, b, round)) {
|
|
35
49
|
const m = messages[i];
|
|
36
50
|
const c = typeof m.content === 'string' ? m.content : '';
|
|
37
|
-
if (c
|
|
38
|
-
continue;
|
|
39
|
-
m.content =
|
|
40
|
-
|
|
51
|
+
if (alreadyCompact(c))
|
|
52
|
+
continue;
|
|
53
|
+
m.content = staleMarker(c.length);
|
|
54
|
+
compacted++;
|
|
55
|
+
}
|
|
56
|
+
return compacted;
|
|
57
|
+
}
|
|
58
|
+
/** Misma idea que `compactOldToolResults`, para la forma de Anthropic: el
|
|
59
|
+
* resultado no es un mensaje con role='tool' sino un bloque
|
|
60
|
+
* `{ type: 'tool_result', content: '...' }` dentro del `content` de un
|
|
61
|
+
* mensaje de usuario. Sin esto, la ruta Console (el cerebro anthropic, que
|
|
62
|
+
* es el default) acumulaba la historia entera sin techo -- la causa del
|
|
63
|
+
* OOM de heap del panel (2026-09). */
|
|
64
|
+
export function compactOldAnthropicToolResults(messages, b, round) {
|
|
65
|
+
const blocks = [];
|
|
66
|
+
for (const m of messages) {
|
|
67
|
+
if (!Array.isArray(m.content))
|
|
68
|
+
continue;
|
|
69
|
+
for (const raw of m.content) {
|
|
70
|
+
if (raw && raw.type === 'tool_result')
|
|
71
|
+
blocks.push(raw);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
let compacted = 0;
|
|
75
|
+
for (const blk of staleSlice(blocks, b, round)) {
|
|
76
|
+
const c = typeof blk.content === 'string' ? blk.content : '';
|
|
77
|
+
if (alreadyCompact(c))
|
|
78
|
+
continue;
|
|
79
|
+
blk.content = staleMarker(c.length);
|
|
80
|
+
compacted++;
|
|
81
|
+
}
|
|
82
|
+
return compacted;
|
|
83
|
+
}
|
|
84
|
+
/** Variante Gemini: el resultado viaja en
|
|
85
|
+
* `parts[].functionResponse.response`. Se reemplaza el payload por el
|
|
86
|
+
* marcador, conservando la forma que la API espera. */
|
|
87
|
+
export function compactOldGeminiToolResults(contents, b, round) {
|
|
88
|
+
const parts = [];
|
|
89
|
+
for (const c of contents) {
|
|
90
|
+
if (!Array.isArray(c.parts))
|
|
91
|
+
continue;
|
|
92
|
+
for (const p of c.parts)
|
|
93
|
+
if (p && p.functionResponse)
|
|
94
|
+
parts.push(p);
|
|
95
|
+
}
|
|
96
|
+
let compacted = 0;
|
|
97
|
+
for (const p of staleSlice(parts, b, round)) {
|
|
98
|
+
const fr = p.functionResponse;
|
|
99
|
+
let serialized;
|
|
100
|
+
try {
|
|
101
|
+
serialized = typeof fr.response === 'string' ? fr.response : JSON.stringify(fr.response);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
serialized = String(fr.response);
|
|
105
|
+
}
|
|
106
|
+
if (alreadyCompact(serialized ?? ''))
|
|
107
|
+
continue;
|
|
108
|
+
fr.response = { result: staleMarker(serialized.length) };
|
|
41
109
|
compacted++;
|
|
42
110
|
}
|
|
43
111
|
return compacted;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context_compaction.js","sourceRoot":"","sources":["../../src/llm/context_compaction.ts"],"names":[],"mappings":"AAkBA;;kDAEkD;AAClD,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,CAAiB;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC;IACxD,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;UAC1B,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,4CAA4C;UACpF,GAAG,GAAG,kEAAkE,CAAC;AAC/E,CAAC;AAID
|
|
1
|
+
{"version":3,"file":"context_compaction.js","sourceRoot":"","sources":["../../src/llm/context_compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,14 +17,21 @@
|
|
|
17
17
|
* eco tier when budgets matter; reasoner variant decent for
|
|
18
18
|
* frontier-like work in non-coding contexts.
|
|
19
19
|
*
|
|
20
|
-
* Default models
|
|
21
|
-
*
|
|
22
|
-
* deepseek-
|
|
20
|
+
* Default models (catalogo vigente al 2026-09-21, verificado contra
|
|
21
|
+
* GET https://api.deepseek.com/models):
|
|
22
|
+
* deepseek-flash -- general purpose, barato y rapido
|
|
23
|
+
* deepseek-v4-pro -- tope de gama, mas lento, razonamiento profundo
|
|
24
|
+
*
|
|
25
|
+
* Los ids viejos deepseek-chat / deepseek-reasoner fueron RETIRADOS del
|
|
26
|
+
* API: ya no aparecen en /models y una llamada con ellos es rechazada.
|
|
27
|
+
* normalizeDeepSeekModel() los remapea para que una config guardada de
|
|
28
|
+
* antes siga funcionando en vez de romper.
|
|
23
29
|
*
|
|
24
30
|
* ASCII-only.
|
|
25
31
|
*/
|
|
26
32
|
import type { ToolRound, ChatMessage } from '../chat/claude.js';
|
|
27
33
|
import type { ToolSpec } from '../chat/tools.js';
|
|
34
|
+
export declare function normalizeDeepSeekModel(model: string): string;
|
|
28
35
|
export interface DeepSeekChatRequest {
|
|
29
36
|
messages: ChatMessage[];
|
|
30
37
|
system?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepseek_client.d.ts","sourceRoot":"","sources":["../../src/llm/deepseek_client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"deepseek_client.d.ts","sourceRoot":"","sources":["../../src/llm/deepseek_client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAejD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAUD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAClE,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AA6BD,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,MAAM,EAAE,MAAM,CAAC;gBACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAK5C;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,YAAY,CAAS;gBAEjB,IAAI,EAAE,qBAAqB;IASjC,IAAI,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CA6NpE"}
|
|
@@ -2,7 +2,17 @@ import { isTransientNetworkError, describeNetError } from '../chat/claude.js';
|
|
|
2
2
|
import { resolveBrainBehaviour } from '../core/brain_behaviour.js';
|
|
3
3
|
import { capToolResult, compactOldToolResults } from './context_compaction.js';
|
|
4
4
|
const DEEPSEEK_BASE = 'https://api.deepseek.com/chat/completions';
|
|
5
|
-
const DEFAULT_DEEPSEEK_MODEL = 'deepseek-
|
|
5
|
+
const DEFAULT_DEEPSEEK_MODEL = 'deepseek-flash';
|
|
6
|
+
/** Ids retirados -> su equivalente vigente. Una brain_config guardada
|
|
7
|
+
* antes del retiro (o un envelope BYOK viejo) trae los ids muertos; sin
|
|
8
|
+
* este remapeo la llamada muere con "model not found". */
|
|
9
|
+
const RETIRED_DEEPSEEK_MODELS = {
|
|
10
|
+
'deepseek-chat': 'deepseek-flash',
|
|
11
|
+
'deepseek-reasoner': 'deepseek-v4-pro',
|
|
12
|
+
};
|
|
13
|
+
export function normalizeDeepSeekModel(model) {
|
|
14
|
+
return RETIRED_DEEPSEEK_MODELS[model] ?? model;
|
|
15
|
+
}
|
|
6
16
|
const DEFAULT_MAX_TOOL_ROUNDS = 5;
|
|
7
17
|
/* A reasoning model (deepseek-reasoner) on a heavy task can take minutes.
|
|
8
18
|
* A hung socket must still eventually fail so the retry can fire, but the
|
|
@@ -35,7 +45,7 @@ export class DeepSeekClient {
|
|
|
35
45
|
if (req.tools && !req.runTool) {
|
|
36
46
|
throw new Error('DeepSeekChatRequest.tools requires a runTool callback');
|
|
37
47
|
}
|
|
38
|
-
const model = req.model ?? this.defaultModel;
|
|
48
|
+
const model = normalizeDeepSeekModel(req.model ?? this.defaultModel);
|
|
39
49
|
const maxTokens = req.maxTokens ?? 1024;
|
|
40
50
|
/* alpha.59g -- config-driven cap + family resolver, mirrors
|
|
41
51
|
* what OpenAI/Gemini/Claude clients do. */
|