@nac3/forge-cli 1.27.0 → 1.28.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 (36) hide show
  1. package/dist/chat/graph_snapshot.d.ts +24 -0
  2. package/dist/chat/graph_snapshot.d.ts.map +1 -1
  3. package/dist/chat/graph_snapshot.js +28 -3
  4. package/dist/chat/graph_snapshot.js.map +1 -1
  5. package/dist/chat/history_budget.d.ts +114 -0
  6. package/dist/chat/history_budget.d.ts.map +1 -0
  7. package/dist/chat/history_budget.js +98 -0
  8. package/dist/chat/history_budget.js.map +1 -0
  9. package/dist/chat/server.d.ts.map +1 -1
  10. package/dist/chat/server.js +49 -0
  11. package/dist/chat/server.js.map +1 -1
  12. package/dist/chat/tools/pending.d.ts.map +1 -1
  13. package/dist/chat/tools/pending.js +25 -10
  14. package/dist/chat/tools/pending.js.map +1 -1
  15. package/dist/chat/tools/pending_ack.d.ts +82 -0
  16. package/dist/chat/tools/pending_ack.d.ts.map +1 -0
  17. package/dist/chat/tools/pending_ack.js +55 -0
  18. package/dist/chat/tools/pending_ack.js.map +1 -0
  19. package/dist/core/instructions_budget.d.ts +113 -0
  20. package/dist/core/instructions_budget.d.ts.map +1 -0
  21. package/dist/core/instructions_budget.js +165 -0
  22. package/dist/core/instructions_budget.js.map +1 -0
  23. package/dist/core/limits_config.d.ts +15 -0
  24. package/dist/core/limits_config.d.ts.map +1 -1
  25. package/dist/core/limits_config.js +17 -0
  26. package/dist/core/limits_config.js.map +1 -1
  27. package/dist/nac3/manifest_lazy.d.ts +15 -0
  28. package/dist/nac3/manifest_lazy.d.ts.map +1 -1
  29. package/dist/nac3/manifest_lazy.js +17 -1
  30. package/dist/nac3/manifest_lazy.js.map +1 -1
  31. package/dist/urazuke/evidence.d.ts.map +1 -1
  32. package/dist/urazuke/evidence.js +14 -2
  33. package/dist/urazuke/evidence.js.map +1 -1
  34. package/dist/version.d.ts +1 -1
  35. package/dist/version.js +1 -1
  36. package/package.json +4 -3
@@ -37,6 +37,30 @@ export declare function kindLabel(kind: string): string;
37
37
  * cualquier kind nuevo, alfabetico. */
38
38
  export declare function orderKinds(kinds: Iterable<string>): string[];
39
39
  export declare function _resetSnapshotCacheForTests(): void;
40
+ /** Caracteres por token del contenido DENSO -- el de esta seccion.
41
+ *
42
+ * POR QUE NO ES 4 (PND-282, medido 2026-11-03)
43
+ *
44
+ * Esta funcion asumia 4 chars/token, y con eso la seccion declaraba un
45
+ * presupuesto de 2.400 tokens y entregaba 4.693: se pasaba por 1,9x. El
46
+ * 4 no es el numero de ningun contenido real; es la costumbre.
47
+ *
48
+ * Lo que esta seccion emite es una lista de identificadores
49
+ * (`comp.src-workflow-multi_view-ts-computeworkflowsview`,
50
+ * `module.evidence-mutation-crlf-test`), que el tokenizador parte en
51
+ * muchas piezas cortas. Calibrado contra `output_tokens`, que viene
52
+ * exacto en el `usage`, el contenido denso mide 1,96 caracteres por
53
+ * token (`measure_prompt_sections.mjs --mode calib`).
54
+ *
55
+ * Un presupuesto declarado en tokens y convertido con el divisor
56
+ * equivocado no es un presupuesto: es una etiqueta. Lo verifica
57
+ * `tests/prompt-sin-duplicar.test.ts`, que compara los tokens REALES de
58
+ * la seccion contra `max_tokens` en vez de confiar en la conversion. */
59
+ export declare const CHARS_PER_TOKEN_DENSE = 1.96;
60
+ /** Convertir un presupuesto en tokens a su presupuesto en caracteres.
61
+ * Un presupuesto no positivo (o no numerico) es cero, no infinito: el
62
+ * llamador que pide "nada" tiene que recibir nada. */
63
+ export declare function tokenBudgetToChars(tokens: number): number;
40
64
  /**
41
65
  * Build the snapshot section for a project, with per-slug hash cache.
42
66
  * Failure mode: graceful -- never throws.
@@ -1 +1 @@
1
- {"version":3,"file":"graph_snapshot.d.ts","sourceRoot":"","sources":["../../src/chat/graph_snapshot.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAM,MAAM,CAAC;IACf,IAAI,EAAI,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;6DAEyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAK,OAAO,CAAC;IACf,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE/E,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAO,eAAe,CAAC;IAC9B;gEAC4D;IAC5D,UAAU,CAAC,EAAG,MAAM,CAAC;IACrB,wDAAwD;IACxD,MAAM,CAAC,EAAO,MAAM,CAAC;IACrB,iDAAiD;IACjD,KAAK,CAAC,EAAQ,MAAM,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC;sEACkE;IAClE,EAAE,EAAM,OAAO,CAAC;IAChB,IAAI,EAAI,MAAM,CAAC;IACf,IAAI,EAAI,MAAM,CAAC;IACf,KAAK,EAAG,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB;AAqCD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;wCACwC;AACxC,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAS5D;AAwBD,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AA6GD;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoC7F;AAcD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBzF"}
1
+ {"version":3,"file":"graph_snapshot.d.ts","sourceRoot":"","sources":["../../src/chat/graph_snapshot.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAM,MAAM,CAAC;IACf,IAAI,EAAI,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;6DAEyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAK,OAAO,CAAC;IACf,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE/E,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAO,eAAe,CAAC;IAC9B;gEAC4D;IAC5D,UAAU,CAAC,EAAG,MAAM,CAAC;IACrB,wDAAwD;IACxD,MAAM,CAAC,EAAO,MAAM,CAAC;IACrB,iDAAiD;IACjD,KAAK,CAAC,EAAQ,MAAM,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC;sEACkE;IAClE,EAAE,EAAM,OAAO,CAAC;IAChB,IAAI,EAAI,MAAM,CAAC;IACf,IAAI,EAAI,MAAM,CAAC;IACf,KAAK,EAAG,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB;AAqCD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;wCACwC;AACxC,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAS5D;AAwBD,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;;;;;;;;;;;;;;;;yEAkByE;AACzE,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C;;uDAEuD;AACvD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIzD;AAwGD;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoC7F;AAcD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBzF"}
@@ -87,9 +87,34 @@ const CACHE = new Map();
87
87
  export function _resetSnapshotCacheForTests() {
88
88
  CACHE.clear();
89
89
  }
90
- /** Approximate token budget into char budget (4 chars/token). */
91
- function tokenBudgetToChars(tokens) {
92
- return tokens * 4;
90
+ /** Caracteres por token del contenido DENSO -- el de esta seccion.
91
+ *
92
+ * POR QUE NO ES 4 (PND-282, medido 2026-11-03)
93
+ *
94
+ * Esta funcion asumia 4 chars/token, y con eso la seccion declaraba un
95
+ * presupuesto de 2.400 tokens y entregaba 4.693: se pasaba por 1,9x. El
96
+ * 4 no es el numero de ningun contenido real; es la costumbre.
97
+ *
98
+ * Lo que esta seccion emite es una lista de identificadores
99
+ * (`comp.src-workflow-multi_view-ts-computeworkflowsview`,
100
+ * `module.evidence-mutation-crlf-test`), que el tokenizador parte en
101
+ * muchas piezas cortas. Calibrado contra `output_tokens`, que viene
102
+ * exacto en el `usage`, el contenido denso mide 1,96 caracteres por
103
+ * token (`measure_prompt_sections.mjs --mode calib`).
104
+ *
105
+ * Un presupuesto declarado en tokens y convertido con el divisor
106
+ * equivocado no es un presupuesto: es una etiqueta. Lo verifica
107
+ * `tests/prompt-sin-duplicar.test.ts`, que compara los tokens REALES de
108
+ * la seccion contra `max_tokens` en vez de confiar en la conversion. */
109
+ export const CHARS_PER_TOKEN_DENSE = 1.96;
110
+ /** Convertir un presupuesto en tokens a su presupuesto en caracteres.
111
+ * Un presupuesto no positivo (o no numerico) es cero, no infinito: el
112
+ * llamador que pide "nada" tiene que recibir nada. */
113
+ export function tokenBudgetToChars(tokens) {
114
+ const n = Number(tokens);
115
+ if (!Number.isFinite(n) || n <= 0)
116
+ return 0;
117
+ return Math.floor(n * CHARS_PER_TOKEN_DENSE);
93
118
  }
94
119
  function renderSnapshot(nodes, maxTokens, hash, fetchedAt) {
95
120
  if (nodes.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"graph_snapshot.js","sourceRoot":"","sources":["../../src/chat/graph_snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph_snapshot.js","sourceRoot":"","sources":["../../src/chat/graph_snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Yujin Forge -- QUE se arrastra de la conversacion, y que se desprende
3
+ * (P0, PND-281).
4
+ *
5
+ * EL PROBLEMA, MEDIDO
6
+ *
7
+ * Cada turno vuelve a mandar la conversacion entera. En el camino CLI eso
8
+ * esta escrito en la cabecera de `claude_cli.ts` ("Multi-turn conversation
9
+ * history is concatenated into a single prompt") y en el camino HTTP es el
10
+ * `messages[]` completo. Peor: ese prefijo lo relee CADA llamada de la rueda
11
+ * de herramientas del turno -- 159 de mediana en el brazo C1. Un token que
12
+ * entra en la llamada 1 se paga 159 veces.
13
+ *
14
+ * Medido sobre los 47 turnos del brazo: la historia arrastrada llego a
15
+ * 110.060 tokens y cuesta USD 181,25 (15,38% del corpus), y la regresion
16
+ * dice que NO compra lo que cuesta -- pendiente -0,103 llamadas de
17
+ * re-orientacion por cada 1.000 tokens de historia, R2 = 0,0727, t = 1,88
18
+ * (no significativo). Tomada como si fuera real: compra USD 0,0176 y cuesta
19
+ * USD 0,0890. 5,1x en contra.
20
+ *
21
+ * QUE SE DESPRENDE, Y UNA CORRECCION A LA PREMISA
22
+ *
23
+ * La decision del dueno nombro tres clases: los `tool_use` con sus salidas,
24
+ * el `thinking`, y el detalle de los comandos de los turnos anteriores.
25
+ * NINGUNA DE LAS TRES VIAJA: `flattenMessages` concatena solo
26
+ * {role, content} y el `content` del turno del asistente es `reply.text`
27
+ * -- el texto final. Medido sobre el corpus entero: cero `tool_use`, cero
28
+ * `tool_result`, cero `<thinking>`.
29
+ *
30
+ * Lo que se arrastra es conversacion entera, y su unico reparto real es por
31
+ * ROL: 41,12% lo escribio el dueno, 58,88% el agente
32
+ * (`splitHistoryByRole`, scripts/measure_base_payers.mjs).
33
+ *
34
+ * Asi que el principio que el dueno fijo para el CLAUDE.md es el que aplica,
35
+ * y aplica a la mitad que de verdad esta ahi:
36
+ *
37
+ * lo que el agente DEBE OBEDECER se queda;
38
+ * lo que puede necesitar CONSULTAR se desprende, y queda una linea
39
+ * que dice donde esta.
40
+ *
41
+ * - Los mensajes del DUENO son la obligacion: viajan ENTEROS y en orden.
42
+ * Es un invariante, no una preferencia -- `tests/history-budget.test.ts`
43
+ * lo defiende y cae si una version futura los recorta para ahorrar mas.
44
+ * - Las respuestas del AGENTE son consultables: las recientes son la
45
+ * conversacion en curso y viajan enteras; las viejas se desprenden y
46
+ * dejan un puntero. El propio dueno escribio el fundamento: "si el
47
+ * agente necesita el detalle de un turno pasado, lo pide: esta en
48
+ * disco". Y esta: el `sessionStore` persiste el transcripto completo.
49
+ *
50
+ * EL AHORRO, CON LA REGLA PUESTA
51
+ *
52
+ * El contrafactico publicado (USD 183) capaba el TOTAL de la historia, o
53
+ * sea media un mundo donde los mensajes del dueno tambien se recortan --
54
+ * que la decision prohibe. Con su mitad protegida, lo alcanzable es
55
+ * USD 117,26 desprendiendo todo lo del agente y USD 102,94 con el
56
+ * presupuesto de 4.000 tokens que entra por default
57
+ * (`dragCounterfactualOwnerWhole`). La diferencia contra los 183 son sus
58
+ * propios mensajes, y no se tocan.
59
+ *
60
+ * ASCII-only.
61
+ */
62
+ import type { ChatMessage } from './claude.js';
63
+ /** Caracteres por token de la conversacion arrastrada.
64
+ *
65
+ * NO es 4 (el numero que se repite por costumbre) ni 3,3 (el de
66
+ * `measure_turn_weight.mjs`, calibrado sobre la SALIDA del modelo). Son
67
+ * 2,36, medidos por minimos cuadrados sobre los 47 turnos del brazo
68
+ * contra el `usage` real -- R2 = 0,9915. El contenido es prosa tecnica en
69
+ * castellano, que mide mas denso que el ingles.
70
+ *
71
+ * Asumir 4 fue exactamente el defecto de `graph_snapshot.ts:140`: un
72
+ * presupuesto declarado en tokens, convertido con el divisor equivocado,
73
+ * que entrega el doble de lo que dice. No se repite aca: el caso
74
+ * "respeta el presupuesto que declara" lo verifica contra este divisor. */
75
+ export declare const HISTORY_CHARS_PER_TOKEN = 2.36;
76
+ /** Presupuesto por default para lo que el AGENTE dijo en turnos anteriores.
77
+ * 4.000 tokens = el paquete que el contrafactico midio (USD 102,94 de
78
+ * ahorro, 6,55% del corpus). Alcanza para que las ultimas conclusiones
79
+ * viajen enteras; lo de mas atras queda en disco. */
80
+ export declare const DEFAULT_AGENT_HISTORY_BUDGET_TOKENS = 4000;
81
+ export interface BudgetHistoryOptions {
82
+ /** Tope en tokens para las respuestas del agente de turnos ANTERIORES.
83
+ * <= 0, NaN o ausente desactivan el recorte (una config a mano no puede
84
+ * terminar mandando la conversacion vacia). */
85
+ agentBudgetTokens?: number;
86
+ /** Solo para el puntero: de donde se pide el detalle. */
87
+ transcriptHint?: string;
88
+ }
89
+ export interface BudgetHistoryResult {
90
+ messages: ChatMessage[];
91
+ /** Cuantas respuestas del agente quedaron reemplazadas por un puntero. */
92
+ detached: number;
93
+ /** Caracteres que se dejaron de mandar. */
94
+ saved_chars: number;
95
+ }
96
+ /**
97
+ * Aplicar el presupuesto a la conversacion que va al modelo.
98
+ *
99
+ * Invariantes (los defiende la bateria):
100
+ * 1. Ningun mensaje del dueno se toca. Nunca. Ni con presupuesto cero.
101
+ * 2. El orden y la cantidad de mensajes no cambian (el par
102
+ * usuario/asistente sigue alineado para cualquier consumidor).
103
+ * 3. El ultimo mensaje -- el pedido activo de este turno -- no se toca.
104
+ * 4. La respuesta mas reciente del agente viaja entera aunque pase el
105
+ * presupuesto por si sola: es lo que acaba de decir, y sin eso el
106
+ * turno siguiente no sabe de donde viene.
107
+ * 5. Por debajo del presupuesto la conversacion sale byte a byte igual.
108
+ * 6. Nunca encarece: si el puntero fuera mas largo que lo que reemplaza,
109
+ * se deja el original.
110
+ * 7. Los metadatos del turno (`hidden`, `brain_tier`, `doc_loaded`)
111
+ * sobreviven: los consumen `flattenMessages` y el router pegajoso.
112
+ */
113
+ export declare function budgetHistory(messages: ChatMessage[], opts?: BudgetHistoryOptions): BudgetHistoryResult;
114
+ //# sourceMappingURL=history_budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history_budget.d.ts","sourceRoot":"","sources":["../../src/chat/history_budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;4EAW4E;AAC5E,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;sDAGsD;AACtD,eAAO,MAAM,mCAAmC,OAAO,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC;;oDAEgD;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;CACrB;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EAAE,EACvB,IAAI,GAAE,oBAAyB,GAC9B,mBAAmB,CAqCrB"}
@@ -0,0 +1,98 @@
1
+ /** Caracteres por token de la conversacion arrastrada.
2
+ *
3
+ * NO es 4 (el numero que se repite por costumbre) ni 3,3 (el de
4
+ * `measure_turn_weight.mjs`, calibrado sobre la SALIDA del modelo). Son
5
+ * 2,36, medidos por minimos cuadrados sobre los 47 turnos del brazo
6
+ * contra el `usage` real -- R2 = 0,9915. El contenido es prosa tecnica en
7
+ * castellano, que mide mas denso que el ingles.
8
+ *
9
+ * Asumir 4 fue exactamente el defecto de `graph_snapshot.ts:140`: un
10
+ * presupuesto declarado en tokens, convertido con el divisor equivocado,
11
+ * que entrega el doble de lo que dice. No se repite aca: el caso
12
+ * "respeta el presupuesto que declara" lo verifica contra este divisor. */
13
+ export const HISTORY_CHARS_PER_TOKEN = 2.36;
14
+ /** Presupuesto por default para lo que el AGENTE dijo en turnos anteriores.
15
+ * 4.000 tokens = el paquete que el contrafactico midio (USD 102,94 de
16
+ * ahorro, 6,55% del corpus). Alcanza para que las ultimas conclusiones
17
+ * viajen enteras; lo de mas atras queda en disco. */
18
+ export const DEFAULT_AGENT_HISTORY_BUDGET_TOKENS = 4000;
19
+ /** El puntero que reemplaza una respuesta desprendida.
20
+ *
21
+ * Tiene que ser ACCIONABLE, no un "[recortado]": si el agente lee que no
22
+ * dijo nada en ese turno, vuelve a hacer el trabajo. Dice las tres cosas
23
+ * que necesita -- que hubo una respuesta, de que tamano, y que el detalle
24
+ * se pide. Y arranca con las primeras palabras de lo que dijo, que es lo
25
+ * que le permite saber si le hace falta pedirlo. */
26
+ function punteroDe(content, hint) {
27
+ const cabeza = content.replace(/\s+/g, ' ').trim().slice(0, 120);
28
+ return '[Forge: respuesta desprendida de un turno anterior -- '
29
+ + String(content.length) + ' caracteres. Arrancaba: "' + cabeza + '...". '
30
+ + 'El texto completo esta en ' + hint + '; pedilo si lo necesitas.]';
31
+ }
32
+ /**
33
+ * Aplicar el presupuesto a la conversacion que va al modelo.
34
+ *
35
+ * Invariantes (los defiende la bateria):
36
+ * 1. Ningun mensaje del dueno se toca. Nunca. Ni con presupuesto cero.
37
+ * 2. El orden y la cantidad de mensajes no cambian (el par
38
+ * usuario/asistente sigue alineado para cualquier consumidor).
39
+ * 3. El ultimo mensaje -- el pedido activo de este turno -- no se toca.
40
+ * 4. La respuesta mas reciente del agente viaja entera aunque pase el
41
+ * presupuesto por si sola: es lo que acaba de decir, y sin eso el
42
+ * turno siguiente no sabe de donde viene.
43
+ * 5. Por debajo del presupuesto la conversacion sale byte a byte igual.
44
+ * 6. Nunca encarece: si el puntero fuera mas largo que lo que reemplaza,
45
+ * se deja el original.
46
+ * 7. Los metadatos del turno (`hidden`, `brain_tier`, `doc_loaded`)
47
+ * sobreviven: los consumen `flattenMessages` y el router pegajoso.
48
+ */
49
+ export function budgetHistory(messages, opts = {}) {
50
+ const budget = Number(opts.agentBudgetTokens);
51
+ const sinRecorte = { messages, detached: 0, saved_chars: 0 };
52
+ if (!Number.isFinite(budget) || budget <= 0)
53
+ return sinRecorte;
54
+ if (!Array.isArray(messages) || messages.length === 0)
55
+ return sinRecorte;
56
+ const hint = opts.transcriptHint || 'el transcripto de la sesion en disco';
57
+ const capChars = budget * HISTORY_CHARS_PER_TOKEN;
58
+ const ultimo = messages.length - 1;
59
+ /* De lo mas nuevo a lo mas viejo: lo reciente es conversacion en curso.
60
+ * La primera respuesta del agente que se encuentra entra entera (nota 4)
61
+ * y DESPUES se empieza a cobrar contra el presupuesto, que es lo que hace
62
+ * que el tope se mida sobre los turnos anteriores. */
63
+ let gastado = 0;
64
+ let masReciente = true;
65
+ const out = messages.slice();
66
+ let detached = 0;
67
+ let saved = 0;
68
+ for (let i = messages.length - 1; i >= 0; i--) {
69
+ const m = messages[i];
70
+ if (!m)
71
+ continue;
72
+ if (m.role !== 'assistant')
73
+ continue; /* invariante 1 */
74
+ if (i === ultimo)
75
+ continue; /* invariante 3 */
76
+ const len = m.content.length;
77
+ if (masReciente) {
78
+ masReciente = false;
79
+ continue;
80
+ }
81
+ if (gastado + len <= capChars) {
82
+ gastado += len;
83
+ continue;
84
+ }
85
+ const puntero = punteroDe(m.content, hint);
86
+ if (puntero.length >= len) {
87
+ gastado += len;
88
+ continue;
89
+ } /* invariante 6 */
90
+ out[i] = { ...m, content: puntero }; /* invariante 7 */
91
+ detached++;
92
+ saved += len - puntero.length;
93
+ }
94
+ if (detached === 0)
95
+ return sinRecorte; /* invariante 5 */
96
+ return { messages: out, detached, saved_chars: saved };
97
+ }
98
+ //# sourceMappingURL=history_budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history_budget.js","sourceRoot":"","sources":["../../src/chat/history_budget.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/chat/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/chat/server.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,7 @@ import { getSessionProject, setSessionProject } from './session_projects.js';
66
66
  import { beginTurn, endTurn, interruptActiveTurn, interruptAllTurns, isTurnActive, activeTurnId, activeTurns, } from './turn_control.js';
67
67
  import { openSteering, closeSteering, drainSteers, formatSteer, queueSteer, pendingSteers, } from './turn_steering.js';
68
68
  import { manifest as nac3Manifest } from '../nac3/internal_manifest.js';
69
+ import { buildToolDefs } from '../mcp/forge_verbs_server.js';
69
70
  import { buildManifestForPrompt } from '../nac3/manifest_lazy.js';
70
71
  import { popPending, logApproval } from '../nac3/approval_queue.js';
71
72
  /**
@@ -6901,6 +6902,29 @@ async function handleChat(req, res, ctx) {
6901
6902
  * user turn; fall back to the client view if not. */
6902
6903
  turnMessages = normalized;
6903
6904
  }
6905
+ /* P0 (PND-281) -- el presupuesto de lo que se arrastra. Va ACA y no en
6906
+ * `flattenMessages` a proposito: aca lo cobran TODOS los cerebros (el
6907
+ * camino CLI aplana, los de HTTP mandan el `messages[]`), y los dos
6908
+ * pagan el prefijo en cada llamada de la rueda de herramientas.
6909
+ *
6910
+ * Los mensajes del dueno NO se tocan. Lo que se acota son las
6911
+ * respuestas viejas del agente, que quedan en el `sessionStore` y se
6912
+ * piden si hacen falta. El detalle de por que, y los numeros, estan en
6913
+ * la cabecera de history_budget.ts. */
6914
+ let historyBudgetApplied = { detached: 0, saved_chars: 0 };
6915
+ try {
6916
+ const { budgetHistory } = await import('./history_budget.js');
6917
+ const { readLimitsConfig: _readLimForHist } = await import('../core/limits_config.js');
6918
+ const _limHist = await _readLimForHist();
6919
+ const recortado = budgetHistory(turnMessages, {
6920
+ agentBudgetTokens: _limHist.agent_history_budget_tokens,
6921
+ transcriptHint: sessionStore.filePath,
6922
+ });
6923
+ turnMessages = recortado.messages;
6924
+ historyBudgetApplied = { detached: recortado.detached, saved_chars: recortado.saved_chars };
6925
+ }
6926
+ catch { /* nunca bloquear el turno por el recorte */ }
6927
+ void historyBudgetApplied;
6904
6928
  /* Register THIS turn as the active one right before the model
6905
6929
  * call. beginTurn returns the AbortSignal the callers honor
6906
6930
  * (claude.ts at round boundary, claude_cli kills the subprocess).
@@ -7747,6 +7771,21 @@ async function handleChat(req, res, ctx) {
7747
7771
  }
7748
7772
  }
7749
7773
  }
7774
+ /** Los verb_id que ya viajan como tool MCP individual con su esquema
7775
+ * completo (server `forge_verbs`). Se calcula de la MISMA fuente que
7776
+ * `claude_cli.ts` usa para registrarlas -- `buildToolDefs` sobre el
7777
+ * manifest -- para que agregar un prefijo a `EXPOSE_PREFIXES` no deje las
7778
+ * dos listas desincronizadas (par productor/consumidor, SQ 14).
7779
+ *
7780
+ * Se memoiza porque el manifest no cambia en caliente y esto corre en cada
7781
+ * turno. */
7782
+ let _verbosExpuestosCache;
7783
+ function verbosYaExpuestosComoTool() {
7784
+ if (!_verbosExpuestosCache) {
7785
+ _verbosExpuestosCache = [...buildToolDefs(nac3Manifest().verbs).nameToVerb.values()];
7786
+ }
7787
+ return _verbosExpuestosCache;
7788
+ }
7750
7789
  export function buildSystemPrompt(ctx, mode = 'didactico', pilotState = {
7751
7790
  pilot_completed: true, target_pending: false, mode_pending: false,
7752
7791
  },
@@ -8105,6 +8144,16 @@ multiagentEnabled = false) {
8105
8144
  /* operate mode (Pablo 2026-10-10): the config/orchestrator verbs only
8106
8145
  * exist in the prompt when the deployment profile authorises them. */
8107
8146
  includeOperateVerbs: operateEnabled(),
8147
+ /* 1a (PND-282) -- no describir dos veces el mismo verbo. Solo cuando
8148
+ * el camino de esta request LLEVA las tools individuales: `panelMode
8149
+ * === 'mcp-bridge'` es exactamente el caso claude-code-cli con el
8150
+ * bridge vivo, que es cuando `claude_cli.ts` registra el server
8151
+ * `forge_verbs` con su `buildToolDefs`. En el camino HTTP (BYOK /
8152
+ * Console / managed) NO hay tools individuales y el stub es la unica
8153
+ * puerta: ahi no se recorta nada. */
8154
+ alreadyExposedVerbIds: panelMode === 'mcp-bridge'
8155
+ ? verbosYaExpuestosComoTool()
8156
+ : undefined,
8108
8157
  }).text,
8109
8158
  /* alpha.59z.37 NAC-3 v3.x backend tools (task #23 slice 1):
8110
8159
  * splice the pre-built app.* verbs section. Empty string ->