@nac3/forge-cli 1.25.0 → 1.27.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/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 +128 -17
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +13 -1
- 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/reader.d.ts.map +1 -1
- package/dist/chat/tools/reader.js +24 -4
- package/dist/chat/tools/reader.js.map +1 -1
- package/dist/chat/tools/session_verbs.d.ts +3 -1
- package/dist/chat/tools/session_verbs.d.ts.map +1 -1
- package/dist/chat/tools/session_verbs.js +65 -2
- 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 +46 -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 +77 -6
- package/dist/commands/limits.js.map +1 -1
- package/dist/commands/operate.d.ts.map +1 -1
- package/dist/commands/operate.js +42 -0
- package/dist/commands/operate.js.map +1 -1
- package/dist/commands/urazuke.d.ts.map +1 -1
- package/dist/commands/urazuke.js +189 -9
- 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 +19 -0
- package/dist/core/limits_config.d.ts.map +1 -1
- package/dist/core/limits_config.js +38 -0
- package/dist/core/limits_config.js.map +1 -1
- package/dist/core/machine_files.d.ts +27 -0
- package/dist/core/machine_files.d.ts.map +1 -0
- package/dist/core/machine_files.js +97 -0
- package/dist/core/machine_files.js.map +1 -0
- package/dist/docs/doctrine/session-orchestration.md +109 -91
- package/dist/docs/doctrine/urazuke.md +221 -221
- package/dist/llm/sse_stream.d.ts +2 -0
- package/dist/llm/sse_stream.d.ts.map +1 -1
- package/dist/llm/sse_stream.js +10 -1
- package/dist/llm/sse_stream.js.map +1 -1
- package/dist/nac3/dispatch_log.d.ts +16 -1
- package/dist/nac3/dispatch_log.d.ts.map +1 -1
- package/dist/nac3/dispatch_log.js +29 -10
- package/dist/nac3/dispatch_log.js.map +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/telemetry/battery_events.d.ts +91 -0
- package/dist/telemetry/battery_events.d.ts.map +1 -0
- package/dist/telemetry/battery_events.js +84 -0
- package/dist/telemetry/battery_events.js.map +1 -0
- package/dist/telemetry/usage.d.ts +107 -0
- package/dist/telemetry/usage.d.ts.map +1 -1
- package/dist/telemetry/usage.js +172 -13
- package/dist/telemetry/usage.js.map +1 -1
- package/dist/urazuke/evidence.d.ts +5 -0
- package/dist/urazuke/evidence.d.ts.map +1 -1
- package/dist/urazuke/evidence.js +2 -0
- package/dist/urazuke/evidence.js.map +1 -1
- package/dist/urazuke/freeze.d.ts.map +1 -1
- package/dist/urazuke/freeze.js +82 -16
- package/dist/urazuke/freeze.js.map +1 -1
- package/dist/urazuke/gates_data.d.ts +4 -1
- package/dist/urazuke/gates_data.d.ts.map +1 -1
- package/dist/urazuke/gates_data.js +7 -1
- package/dist/urazuke/gates_data.js.map +1 -1
- package/dist/urazuke/gates_ledger.d.ts +25 -1
- package/dist/urazuke/gates_ledger.d.ts.map +1 -1
- package/dist/urazuke/gates_ledger.js +30 -6
- package/dist/urazuke/gates_ledger.js.map +1 -1
- package/dist/urazuke/method_config.d.ts +116 -0
- package/dist/urazuke/method_config.d.ts.map +1 -0
- package/dist/urazuke/method_config.js +328 -0
- package/dist/urazuke/method_config.js.map +1 -0
- package/dist/urazuke/prompts_client.d.ts +42 -12
- package/dist/urazuke/prompts_client.d.ts.map +1 -1
- package/dist/urazuke/prompts_client.js +120 -16
- package/dist/urazuke/prompts_client.js.map +1 -1
- package/dist/urazuke/prompts_freeze.d.ts +186 -0
- package/dist/urazuke/prompts_freeze.d.ts.map +1 -0
- package/dist/urazuke/prompts_freeze.js +498 -0
- package/dist/urazuke/prompts_freeze.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/urazuke/start.d.ts.map +1 -1
- package/dist/urazuke/start.js +42 -2
- package/dist/urazuke/start.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/doctrine/session-orchestration.md +109 -91
- package/docs/doctrine/urazuke.md +221 -221
- package/package.json +124 -124
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export declare const METHOD_CONFIG_REL: string;
|
|
2
|
+
export declare function methodConfigPath(projectRoot: string): string;
|
|
3
|
+
/** De donde sale el TEXTO de los prompts cuando el proyecto resuelve. */
|
|
4
|
+
export type PromptsSource = 'frozen' | 'published' | 'vendored';
|
|
5
|
+
export declare const PROMPTS_SOURCES: readonly PromptsSource[];
|
|
6
|
+
export interface MethodConfig {
|
|
7
|
+
/** 'frozen' (default) = el congelado del proyecto, y si no hay, lo
|
|
8
|
+
* publicado. 'published' = siempre lo publicado (un proyecto que
|
|
9
|
+
* deliberadamente sigue al metodo). 'vendored' = la copia compilada en
|
|
10
|
+
* este Forge, sin red. */
|
|
11
|
+
prompts_source: PromptsSource;
|
|
12
|
+
/** Espejos / copias locales para los pull y adopt. Vacio = las
|
|
13
|
+
* direcciones canonicas del metodo. */
|
|
14
|
+
prompts_url?: string;
|
|
15
|
+
gates_url?: string;
|
|
16
|
+
ledger_url?: string;
|
|
17
|
+
/** Al abrir el proyecto, medir la diferencia contra lo publicado y
|
|
18
|
+
* avisar si hay version nueva. Undefined = lo que diga la maquina
|
|
19
|
+
* (limits.json urazuke.update_check). */
|
|
20
|
+
check_on_start?: boolean;
|
|
21
|
+
/** MODO ESTRICTO: un proyecto asi se NIEGA a correr la escalera con los
|
|
22
|
+
* prompts o las compuertas sin congelar, en vez de caer al catalogo
|
|
23
|
+
* compilado con una nota. Para un equipo que esta midiendo, caer y
|
|
24
|
+
* seguir es la familia del cero otra vez. */
|
|
25
|
+
strict: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function defaultMethodConfig(): MethodConfig;
|
|
28
|
+
/** Llaves que la configuracion NO acepta, con el motivo que se le devuelve
|
|
29
|
+
* a quien las escriba. La lista es explicita a proposito: el que la
|
|
30
|
+
* intente tiene que leer por que no, no descubrir que no paso nada. */
|
|
31
|
+
export declare const LLAVES_PROHIBIDAS: Record<string, string>;
|
|
32
|
+
export interface MethodConfigRead {
|
|
33
|
+
cfg: MethodConfig;
|
|
34
|
+
/** Lo que estaba mal escrito y se ignoro, con el motivo. */
|
|
35
|
+
problems: string[];
|
|
36
|
+
/** Llaves prohibidas que el archivo intenta declarar. NO se aplican, y
|
|
37
|
+
* esto no es un detalle: un proyecto que cree tener auto-adopcion y no
|
|
38
|
+
* la tiene necesita verlo. */
|
|
39
|
+
refused: string[];
|
|
40
|
+
/** El archivo existe. */
|
|
41
|
+
present: boolean;
|
|
42
|
+
}
|
|
43
|
+
/** Leer la seccion `method` del proyecto. Nunca lanza: un proyecto con un
|
|
44
|
+
* settings roto tiene que poder seguir corriendo con los defaults, y
|
|
45
|
+
* enterarse de que su archivo no se esta aplicando. */
|
|
46
|
+
export declare function readMethodConfig(projectRoot: string): Promise<MethodConfigRead>;
|
|
47
|
+
/** Resolver si este proyecto avisa de versiones nuevas: el proyecto manda,
|
|
48
|
+
* la maquina pone el default. */
|
|
49
|
+
export declare function updateCheckEnabled(cfg: MethodConfig, machine: 'off' | 'notify' | undefined): boolean;
|
|
50
|
+
export interface StrictVerdict {
|
|
51
|
+
/** El proyecto declara modo estricto. */
|
|
52
|
+
strict: boolean;
|
|
53
|
+
/** Se puede correr la escalera. */
|
|
54
|
+
ok: boolean;
|
|
55
|
+
/** Que falta, nombrado. */
|
|
56
|
+
missing: string[];
|
|
57
|
+
detail: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* EL MODO ESTRICTO. Un proyecto que declara `method.strict` no corre la
|
|
61
|
+
* escalera leyendo el catalogo compilado ni los prompts vendorizados: eso
|
|
62
|
+
* es medir con un instrumento distinto del que el proyecto declaro, y para
|
|
63
|
+
* un equipo que esta midiendo es peor que no correr.
|
|
64
|
+
*
|
|
65
|
+
* Devuelve el veredicto en vez de lanzar: el que decide si frena es el
|
|
66
|
+
* llamador (el arranque frena; un `status` informa y sigue, porque negarle
|
|
67
|
+
* a alguien VER el estado por no haber congelado seria absurdo).
|
|
68
|
+
*/
|
|
69
|
+
export declare function methodStrictVerdict(cfg: MethodConfig, estado: {
|
|
70
|
+
gates_frozen: boolean;
|
|
71
|
+
prompts_frozen: boolean;
|
|
72
|
+
}): StrictVerdict;
|
|
73
|
+
export interface NewVersionNotice {
|
|
74
|
+
/** 'gates' | 'prompts' */
|
|
75
|
+
half: 'gates' | 'prompts';
|
|
76
|
+
frozen: string;
|
|
77
|
+
published: string;
|
|
78
|
+
detail: string;
|
|
79
|
+
}
|
|
80
|
+
/** Una linea por mitad que tenga version nueva publicada. Sin red, sin
|
|
81
|
+
* congelado o sin version publicada legible NO dice nada: un aviso que no
|
|
82
|
+
* pudo mirar no se informa como "estas al dia". */
|
|
83
|
+
export declare function compareVersions(half: 'gates' | 'prompts', frozen: string | undefined, published: string | undefined): NewVersionNotice | undefined;
|
|
84
|
+
export interface MethodState {
|
|
85
|
+
cfg: MethodConfig;
|
|
86
|
+
/** Avisos de la configuracion (llaves rechazadas, typos). */
|
|
87
|
+
config_notices: string[];
|
|
88
|
+
gates_frozen: boolean;
|
|
89
|
+
gates_version?: string;
|
|
90
|
+
prompts_frozen: boolean;
|
|
91
|
+
prompts_version?: string;
|
|
92
|
+
strict: StrictVerdict;
|
|
93
|
+
/** Una por mitad con version nueva publicada. Vacio NO quiere decir "al
|
|
94
|
+
* dia": quiere decir que no hay nada que avisar CON lo que se pudo
|
|
95
|
+
* mirar. Si no se pudo mirar, esta en `could_not_check`. */
|
|
96
|
+
updates: NewVersionNotice[];
|
|
97
|
+
/** Por que no se pudo comparar, cuando no se pudo. Tercer estado. */
|
|
98
|
+
could_not_check?: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* EL ESTADO DEL METODO EN ESTE PROYECTO, de una sola lectura: que dice la
|
|
102
|
+
* configuracion, que esta congelado, si el modo estricto deja arrancar y si
|
|
103
|
+
* hay version nueva publicada.
|
|
104
|
+
*
|
|
105
|
+
* `check_updates` sale de la maquina (limits.json urazuke.update_check) y lo
|
|
106
|
+
* pisa el proyecto. Cuando esta apagado NO se sale a la red, y el resultado
|
|
107
|
+
* lo dice en vez de informar silencio como si fuera "al dia".
|
|
108
|
+
*/
|
|
109
|
+
export declare function methodState(projectRoot: string, opts?: {
|
|
110
|
+
machine_update_check?: 'off' | 'notify';
|
|
111
|
+
fetchImpl?: typeof fetch;
|
|
112
|
+
offline?: boolean;
|
|
113
|
+
}): Promise<MethodState>;
|
|
114
|
+
/** El estado en lineas, para el CLI y el arranque. */
|
|
115
|
+
export declare function renderMethodState(s: MethodState): string[];
|
|
116
|
+
//# sourceMappingURL=method_config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method_config.d.ts","sourceRoot":"","sources":["../../src/urazuke/method_config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LA CONFIGURACION DEL METODO -- de donde sale la definicion, cuando avisa
|
|
3
|
+
* que hay una version nueva, y cuando se niega a arrancar sin congelar.
|
|
4
|
+
*
|
|
5
|
+
* Pedido del dueno, textual (2026-11-03): "y que tanto las compuertas como
|
|
6
|
+
* los prompts se puedan actualizar desde el config de Forge".
|
|
7
|
+
*
|
|
8
|
+
* DONDE VIVE ESTO, Y POR QUE NO EN limits.json
|
|
9
|
+
*
|
|
10
|
+
* La pregunta vino abierta ("decidilo vos y escribi por que"), asi que la
|
|
11
|
+
* decision esta aca y no en un commit message. Vive en el PROYECTO
|
|
12
|
+
* (`.forge/project-settings.json`, seccion `method`), no en el global del
|
|
13
|
+
* usuario, por tres razones:
|
|
14
|
+
*
|
|
15
|
+
* 1. UNA LLAVE GLOBAL QUE CAMBIA COMO SE MIDE UN PROYECTO ES INVISIBLE EN
|
|
16
|
+
* SU HISTORIA. El congelado de las compuertas y el de los prompts ya
|
|
17
|
+
* viven en `.forge/` y se commitean; la POLITICA que decide de donde
|
|
18
|
+
* salen tiene que viajar igual. Si estuviera en el home del usuario,
|
|
19
|
+
* dos maquinas darian dos veredictos del mismo commit y el diff no
|
|
20
|
+
* mostraria nada. Eso es exactamente la familia del cero que informaba
|
|
21
|
+
* salud.
|
|
22
|
+
* 2. YA HAY PRECEDENTE EN EL MISMO ARCHIVO. `.forge/project-settings.json`
|
|
23
|
+
* es donde el proyecto declara los apagados de reglas, con su registro
|
|
24
|
+
* de cuatro campos, y los evaluadores lo leen de ahi. La politica del
|
|
25
|
+
* metodo es de la misma clase: politica del proyecto que una compuerta
|
|
26
|
+
* consulta.
|
|
27
|
+
* 3. limits.json ES RUNTIME DE LA MAQUINA (topes, vencimientos, postura
|
|
28
|
+
* de aprobacion). Ahi SI pertenece una preferencia de maquina -- si
|
|
29
|
+
* este Forge avisa o no cuando sale una version nueva -- y por eso esa
|
|
30
|
+
* sola llave esta en limits.json (`urazuke.update_check`) y el
|
|
31
|
+
* proyecto la puede pisar. Ruido: maquina. Medicion: proyecto.
|
|
32
|
+
*
|
|
33
|
+
* LO QUE ESTA CONFIGURACION NO PUEDE HACER, Y ES EL LIMITE DE TODO ESTO
|
|
34
|
+
*
|
|
35
|
+
* Ninguna llave de configuracion puede adoptar una version sin la razon
|
|
36
|
+
* escrita del dueno.
|
|
37
|
+
*
|
|
38
|
+
* Si se pudiera declarar "adopta siempre lo ultimo", el doble candado se
|
|
39
|
+
* termino: el proyecto cambiaria lo que el agente lee en cada turno sin que
|
|
40
|
+
* nadie firme el cambio. La configuracion puede decir DE DONDE MIRAR,
|
|
41
|
+
* CUANDO AVISAR y CUANDO NEGARSE A ARRANCAR. La adopcion sigue siendo un
|
|
42
|
+
* acto con nombre y razon (`gates adopt --reason`, `prompts adopt
|
|
43
|
+
* --reason`).
|
|
44
|
+
*
|
|
45
|
+
* Y no se ignora en silencio al que lo intente: una llave de
|
|
46
|
+
* auto-adopcion se RECHAZA con el motivo escrito (ver LLAVES_PROHIBIDAS).
|
|
47
|
+
* Una configuracion que descarta sin avisar es la misma familia de defecto
|
|
48
|
+
* que todo este lote vino a cerrar.
|
|
49
|
+
*
|
|
50
|
+
* ASCII-only.
|
|
51
|
+
*/
|
|
52
|
+
import { promises as fs } from 'node:fs';
|
|
53
|
+
import path from 'node:path';
|
|
54
|
+
export const METHOD_CONFIG_REL = path.join('.forge', 'project-settings.json');
|
|
55
|
+
export function methodConfigPath(projectRoot) {
|
|
56
|
+
return path.join(projectRoot, METHOD_CONFIG_REL);
|
|
57
|
+
}
|
|
58
|
+
export const PROMPTS_SOURCES = ['frozen', 'published', 'vendored'];
|
|
59
|
+
export function defaultMethodConfig() {
|
|
60
|
+
return { prompts_source: 'frozen', strict: false };
|
|
61
|
+
}
|
|
62
|
+
/** Llaves que la configuracion NO acepta, con el motivo que se le devuelve
|
|
63
|
+
* a quien las escriba. La lista es explicita a proposito: el que la
|
|
64
|
+
* intente tiene que leer por que no, no descubrir que no paso nada. */
|
|
65
|
+
export const LLAVES_PROHIBIDAS = {
|
|
66
|
+
auto_adopt: 'la adopcion es un acto con autor y razon escrita (yf urazuke gates|prompts adopt --reason).'
|
|
67
|
+
+ ' Una llave que adopta sola cambiaria lo que el agente lee en cada turno sin que nadie firme el cambio.',
|
|
68
|
+
adopt_latest: 'lo mismo que auto_adopt: la configuracion puede decir de donde mirar y cuando avisar, no adoptar.',
|
|
69
|
+
always_latest: 'lo mismo que auto_adopt. Si lo que queres es seguir al metodo sin congelar,'
|
|
70
|
+
+ ' eso es prompts_source="published", y queda declarado en el proyecto.',
|
|
71
|
+
};
|
|
72
|
+
function esObjeto(v) {
|
|
73
|
+
return v != null && typeof v === 'object' && !Array.isArray(v);
|
|
74
|
+
}
|
|
75
|
+
function url(v, campo, problems) {
|
|
76
|
+
if (v === undefined)
|
|
77
|
+
return undefined;
|
|
78
|
+
if (typeof v !== 'string' || !/^https?:\/\/|^file:\/\//.test(v.trim())) {
|
|
79
|
+
problems.push('method.' + campo + ' tiene que ser una direccion http(s) o file: -- ignorada');
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
return v.trim();
|
|
83
|
+
}
|
|
84
|
+
/** Leer la seccion `method` del proyecto. Nunca lanza: un proyecto con un
|
|
85
|
+
* settings roto tiene que poder seguir corriendo con los defaults, y
|
|
86
|
+
* enterarse de que su archivo no se esta aplicando. */
|
|
87
|
+
export async function readMethodConfig(projectRoot) {
|
|
88
|
+
const cfg = defaultMethodConfig();
|
|
89
|
+
const problems = [];
|
|
90
|
+
const refused = [];
|
|
91
|
+
let raw;
|
|
92
|
+
try {
|
|
93
|
+
raw = JSON.parse(await fs.readFile(methodConfigPath(projectRoot), 'utf8'));
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
const err = e;
|
|
97
|
+
if (err && err.code !== 'ENOENT') {
|
|
98
|
+
problems.push('no pude leer ' + METHOD_CONFIG_REL + ': ' + e.message
|
|
99
|
+
+ ' -- el proyecto corre con la configuracion por omision del metodo');
|
|
100
|
+
}
|
|
101
|
+
return { cfg, problems, refused, present: false };
|
|
102
|
+
}
|
|
103
|
+
if (!esObjeto(raw)) {
|
|
104
|
+
problems.push(METHOD_CONFIG_REL + ' no es un objeto JSON -- ignorado');
|
|
105
|
+
return { cfg, problems, refused, present: true };
|
|
106
|
+
}
|
|
107
|
+
const m = raw['method'];
|
|
108
|
+
if (m === undefined)
|
|
109
|
+
return { cfg, problems, refused, present: true };
|
|
110
|
+
if (!esObjeto(m)) {
|
|
111
|
+
problems.push('method tiene que ser un objeto -- ignorado');
|
|
112
|
+
return { cfg, problems, refused, present: true };
|
|
113
|
+
}
|
|
114
|
+
for (const [k, motivo] of Object.entries(LLAVES_PROHIBIDAS)) {
|
|
115
|
+
if (m[k] !== undefined) {
|
|
116
|
+
refused.push('method.' + k + ' NO se aplica: ' + motivo);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (m['prompts_source'] !== undefined) {
|
|
120
|
+
const v = m['prompts_source'];
|
|
121
|
+
if (typeof v === 'string' && PROMPTS_SOURCES.includes(v)) {
|
|
122
|
+
cfg.prompts_source = v;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
problems.push('method.prompts_source acepta ' + PROMPTS_SOURCES.join('|')
|
|
126
|
+
+ ' -- se usa ' + cfg.prompts_source);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const pu = url(m['prompts_url'], 'prompts_url', problems);
|
|
130
|
+
if (pu)
|
|
131
|
+
cfg.prompts_url = pu;
|
|
132
|
+
const gu = url(m['gates_url'], 'gates_url', problems);
|
|
133
|
+
if (gu)
|
|
134
|
+
cfg.gates_url = gu;
|
|
135
|
+
const lu = url(m['ledger_url'], 'ledger_url', problems);
|
|
136
|
+
if (lu)
|
|
137
|
+
cfg.ledger_url = lu;
|
|
138
|
+
if (m['check_on_start'] !== undefined) {
|
|
139
|
+
if (typeof m['check_on_start'] === 'boolean')
|
|
140
|
+
cfg.check_on_start = m['check_on_start'];
|
|
141
|
+
else
|
|
142
|
+
problems.push('method.check_on_start tiene que ser booleano -- se usa el ajuste de la maquina');
|
|
143
|
+
}
|
|
144
|
+
if (m['strict'] !== undefined) {
|
|
145
|
+
if (typeof m['strict'] === 'boolean')
|
|
146
|
+
cfg.strict = m['strict'];
|
|
147
|
+
else
|
|
148
|
+
problems.push('method.strict tiene que ser booleano -- se usa ' + cfg.strict);
|
|
149
|
+
}
|
|
150
|
+
/* Las llaves que nadie reconoce se nombran. Un typo en una politica que
|
|
151
|
+
* decide como se mide un proyecto no puede pasar inadvertido. */
|
|
152
|
+
const conocidas = new Set([
|
|
153
|
+
'prompts_source', 'prompts_url', 'gates_url', 'ledger_url', 'check_on_start', 'strict',
|
|
154
|
+
...Object.keys(LLAVES_PROHIBIDAS),
|
|
155
|
+
]);
|
|
156
|
+
for (const k of Object.keys(m)) {
|
|
157
|
+
if (!conocidas.has(k))
|
|
158
|
+
problems.push('method.' + k + ' no es una llave que Forge conozca -- ignorada');
|
|
159
|
+
}
|
|
160
|
+
return { cfg, problems, refused, present: true };
|
|
161
|
+
}
|
|
162
|
+
/** Resolver si este proyecto avisa de versiones nuevas: el proyecto manda,
|
|
163
|
+
* la maquina pone el default. */
|
|
164
|
+
export function updateCheckEnabled(cfg, machine) {
|
|
165
|
+
if (cfg.check_on_start !== undefined)
|
|
166
|
+
return cfg.check_on_start;
|
|
167
|
+
return machine !== 'off';
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* EL MODO ESTRICTO. Un proyecto que declara `method.strict` no corre la
|
|
171
|
+
* escalera leyendo el catalogo compilado ni los prompts vendorizados: eso
|
|
172
|
+
* es medir con un instrumento distinto del que el proyecto declaro, y para
|
|
173
|
+
* un equipo que esta midiendo es peor que no correr.
|
|
174
|
+
*
|
|
175
|
+
* Devuelve el veredicto en vez de lanzar: el que decide si frena es el
|
|
176
|
+
* llamador (el arranque frena; un `status` informa y sigue, porque negarle
|
|
177
|
+
* a alguien VER el estado por no haber congelado seria absurdo).
|
|
178
|
+
*/
|
|
179
|
+
export function methodStrictVerdict(cfg, estado) {
|
|
180
|
+
const missing = [];
|
|
181
|
+
if (!estado.gates_frozen)
|
|
182
|
+
missing.push('las compuertas');
|
|
183
|
+
if (!estado.prompts_frozen)
|
|
184
|
+
missing.push('los prompts');
|
|
185
|
+
if (!cfg.strict) {
|
|
186
|
+
return {
|
|
187
|
+
strict: false, ok: true, missing,
|
|
188
|
+
detail: missing.length
|
|
189
|
+
? 'sin congelar: ' + missing.join(' y ') + '. El proyecto NO declara modo estricto,'
|
|
190
|
+
+ ' asi que corre leyendo lo que haya (catalogo compilado / prompts publicados) y lo dice.'
|
|
191
|
+
: 'las dos mitades estan congeladas.',
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if (!missing.length) {
|
|
195
|
+
return { strict: true, ok: true, missing, detail: 'modo estricto: las dos mitades estan congeladas.' };
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
strict: true, ok: false, missing,
|
|
199
|
+
detail: 'MODO ESTRICTO: este proyecto declara method.strict y le falta congelar ' + missing.join(' y ')
|
|
200
|
+
+ '. No corro la escalera leyendo otra version del metodo que la que el proyecto declaro:'
|
|
201
|
+
+ ' corre `yf urazuke freeze` (congela lo que lee hoy) o'
|
|
202
|
+
+ ' `yf urazuke gates adopt --reason "..."` / `yf urazuke prompts adopt --reason "..."`'
|
|
203
|
+
+ ' para adoptar la publicada. Si no queres esta compuerta, saca method.strict del'
|
|
204
|
+
+ ' ' + METHOD_CONFIG_REL + '.',
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/** Una linea por mitad que tenga version nueva publicada. Sin red, sin
|
|
208
|
+
* congelado o sin version publicada legible NO dice nada: un aviso que no
|
|
209
|
+
* pudo mirar no se informa como "estas al dia". */
|
|
210
|
+
export function compareVersions(half, frozen, published) {
|
|
211
|
+
if (!frozen || !published || frozen === published)
|
|
212
|
+
return undefined;
|
|
213
|
+
return {
|
|
214
|
+
half, frozen, published,
|
|
215
|
+
detail: (half === 'gates' ? 'las compuertas' : 'los prompts') + ' del proyecto estan congelados en '
|
|
216
|
+
+ frozen + ' y el metodo publica ' + published + '. Adoptarla es una decision con razon escrita:'
|
|
217
|
+
+ ' `yf urazuke ' + (half === 'gates' ? 'gates' : 'prompts') + ' pull` mide lo que cambia sin escribir nada.',
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* EL ESTADO DEL METODO EN ESTE PROYECTO, de una sola lectura: que dice la
|
|
222
|
+
* configuracion, que esta congelado, si el modo estricto deja arrancar y si
|
|
223
|
+
* hay version nueva publicada.
|
|
224
|
+
*
|
|
225
|
+
* `check_updates` sale de la maquina (limits.json urazuke.update_check) y lo
|
|
226
|
+
* pisa el proyecto. Cuando esta apagado NO se sale a la red, y el resultado
|
|
227
|
+
* lo dice en vez de informar silencio como si fuera "al dia".
|
|
228
|
+
*/
|
|
229
|
+
export async function methodState(projectRoot, opts = {}) {
|
|
230
|
+
const { cfg, problems, refused } = await readMethodConfig(projectRoot);
|
|
231
|
+
const config_notices = [...refused, ...problems];
|
|
232
|
+
let gates_frozen = false;
|
|
233
|
+
let gates_version;
|
|
234
|
+
try {
|
|
235
|
+
const { readFrozenGates } = await import('./gates_data.js');
|
|
236
|
+
const g = await readFrozenGates(projectRoot);
|
|
237
|
+
if (g.gates) {
|
|
238
|
+
gates_frozen = true;
|
|
239
|
+
gates_version = g.gates.version;
|
|
240
|
+
}
|
|
241
|
+
else if (g.refused?.length)
|
|
242
|
+
config_notices.push('el congelado de compuertas NO verifica: ' + g.refused.join('; '));
|
|
243
|
+
}
|
|
244
|
+
catch { /* sin congelado */ }
|
|
245
|
+
let prompts_frozen = false;
|
|
246
|
+
let prompts_version;
|
|
247
|
+
try {
|
|
248
|
+
const { readFrozenPrompts, declaredPromptsVersion } = await import('./prompts_freeze.js');
|
|
249
|
+
const p = await readFrozenPrompts(projectRoot);
|
|
250
|
+
if (p.prompts) {
|
|
251
|
+
prompts_frozen = true;
|
|
252
|
+
prompts_version = declaredPromptsVersion(p.prompts);
|
|
253
|
+
}
|
|
254
|
+
else if (p.refused?.length)
|
|
255
|
+
config_notices.push('el congelado de prompts NO verifica: ' + p.refused.join('; '));
|
|
256
|
+
}
|
|
257
|
+
catch { /* sin congelado */ }
|
|
258
|
+
const strict = methodStrictVerdict(cfg, { gates_frozen, prompts_frozen });
|
|
259
|
+
const state = {
|
|
260
|
+
cfg, config_notices, gates_frozen, prompts_frozen, strict, updates: [],
|
|
261
|
+
...(gates_version ? { gates_version } : {}),
|
|
262
|
+
...(prompts_version ? { prompts_version } : {}),
|
|
263
|
+
};
|
|
264
|
+
if (!updateCheckEnabled(cfg, opts.machine_update_check)) {
|
|
265
|
+
state.could_not_check = 'el aviso de version nueva esta apagado'
|
|
266
|
+
+ ' (limits.json urazuke.update_check=off, o method.check_on_start=false en el proyecto):'
|
|
267
|
+
+ ' no mire, asi que no se si hay una version nueva.';
|
|
268
|
+
return state;
|
|
269
|
+
}
|
|
270
|
+
/* SIN CONGELADO NO HAY CON QUE COMPARAR, y eso NO es "estas al dia".
|
|
271
|
+
* Decirlo asi es la mitad del defecto que este modulo viene a cerrar: un
|
|
272
|
+
* proyecto sin congelar lee lo publicado en cada turno, asi que por
|
|
273
|
+
* construccion no tiene version nueva que adoptar -- y tampoco tiene
|
|
274
|
+
* version fija, que es la otra mitad de la frase y la que importa. */
|
|
275
|
+
if (!prompts_frozen) {
|
|
276
|
+
state.could_not_check = 'los prompts de este proyecto NO estan congelados, asi que no hay con que'
|
|
277
|
+
+ ' comparar: lee lo publicado en cada turno. No es "al dia": es "sin version fija".'
|
|
278
|
+
+ ' `yf urazuke freeze` congela lo que lee hoy.';
|
|
279
|
+
return state;
|
|
280
|
+
}
|
|
281
|
+
/* Los prompts son la mitad que se puede comparar sin instalar nada: la
|
|
282
|
+
* definicion de compuertas en vigor NO sale a la red por diseno, asi que
|
|
283
|
+
* su contraste es `yf urazuke gates pull`, que es un acto explicito. */
|
|
284
|
+
try {
|
|
285
|
+
const { loadPublishedPrompts } = await import('./prompts_client.js');
|
|
286
|
+
const pub = await loadPublishedPrompts({
|
|
287
|
+
...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}),
|
|
288
|
+
...(opts.offline ? { offline: true } : {}),
|
|
289
|
+
...(cfg.prompts_url ? { url: cfg.prompts_url } : {}),
|
|
290
|
+
});
|
|
291
|
+
if (!pub) {
|
|
292
|
+
state.could_not_check = 'no pude leer los prompts publicados (sin red y sin cache util):'
|
|
293
|
+
+ ' no se si hay una version nueva, que no es lo mismo que estar al dia.';
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
const { declaredPromptsVersion } = await import('./prompts_freeze.js');
|
|
297
|
+
const publicada = declaredPromptsVersion(pub.payload);
|
|
298
|
+
const n = compareVersions('prompts', prompts_version, publicada);
|
|
299
|
+
if (n)
|
|
300
|
+
state.updates.push(n);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
catch (e) {
|
|
304
|
+
state.could_not_check = 'no pude comparar contra lo publicado: ' + e.message;
|
|
305
|
+
}
|
|
306
|
+
return state;
|
|
307
|
+
}
|
|
308
|
+
/** El estado en lineas, para el CLI y el arranque. */
|
|
309
|
+
export function renderMethodState(s) {
|
|
310
|
+
const L = [];
|
|
311
|
+
L.push('compuertas: ' + (s.gates_frozen ? 'congeladas en ' + s.gates_version : 'SIN congelar')
|
|
312
|
+
+ ' | prompts: ' + (s.prompts_frozen ? 'congelados en ' + s.prompts_version : 'SIN congelar'));
|
|
313
|
+
L.push('fuente de los prompts: ' + s.cfg.prompts_source
|
|
314
|
+
+ (s.cfg.prompts_url ? ' (' + s.cfg.prompts_url + ')' : '')
|
|
315
|
+
+ ' | modo estricto: ' + (s.cfg.strict ? 'SI' : 'no'));
|
|
316
|
+
for (const n of s.config_notices)
|
|
317
|
+
L.push('aviso: ' + n);
|
|
318
|
+
if (!s.strict.ok)
|
|
319
|
+
L.push(s.strict.detail);
|
|
320
|
+
for (const u of s.updates)
|
|
321
|
+
L.push('VERSION NUEVA: ' + u.detail);
|
|
322
|
+
if (s.could_not_check)
|
|
323
|
+
L.push('aviso: ' + s.could_not_check);
|
|
324
|
+
if (!s.updates.length && !s.could_not_check)
|
|
325
|
+
L.push('no hay version nueva publicada de los prompts.');
|
|
326
|
+
return L;
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=method_config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method_config.js","sourceRoot":"","sources":["../../src/urazuke/method_config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const DEFAULT_PROMPTS_URL = "https://yujin.app/urazuke/api/prompts.json";
|
|
2
|
-
export type PromptSource = 'override' | 'remote' | 'cache' | 'vendored';
|
|
2
|
+
export type PromptSource = 'override' | 'frozen' | 'remote' | 'cache' | 'vendored';
|
|
3
3
|
export interface PromptsApiPayload {
|
|
4
4
|
version: string;
|
|
5
5
|
generated_at?: string;
|
|
@@ -15,6 +15,19 @@ export interface ResolvedPrompts {
|
|
|
15
15
|
version: string;
|
|
16
16
|
/** Keys the project overrides. */
|
|
17
17
|
overridden: string[];
|
|
18
|
+
/** El congelado del proyecto, cuando hay uno que verifica. */
|
|
19
|
+
frozen?: {
|
|
20
|
+
version: string;
|
|
21
|
+
hash: string;
|
|
22
|
+
frozen_at?: string;
|
|
23
|
+
frozen_reason?: string;
|
|
24
|
+
};
|
|
25
|
+
/** Lo que el dueno tiene que saber y nadie mas le va a decir: un
|
|
26
|
+
* congelado que no verifica, un archivo viejo que no declara si es
|
|
27
|
+
* congelado u override, una llave de configuracion rechazada. Nunca se
|
|
28
|
+
* calla: un congelado que se ignora en silencio es la version que el
|
|
29
|
+
* proyecto creia tener y no tiene. */
|
|
30
|
+
notices?: string[];
|
|
18
31
|
}
|
|
19
32
|
export interface PromptOverridesFile {
|
|
20
33
|
version: 1;
|
|
@@ -55,7 +68,16 @@ export declare function resolveCanonicalPrompts(opts?: FetchOptions): Promise<{
|
|
|
55
68
|
source: Record<string, PromptSource>;
|
|
56
69
|
version: string;
|
|
57
70
|
}>;
|
|
58
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* Effective prompts for a project: overrides > FROZEN > published > vendored.
|
|
73
|
+
*
|
|
74
|
+
* El congelado entra en el medio y cambia una cosa mas que el orden: cuando
|
|
75
|
+
* hay un congelado que verifica y la configuracion del proyecto no pide otra
|
|
76
|
+
* cosa, esta funcion NO SALE A LA RED. Es la misma regla que las compuertas
|
|
77
|
+
* ya cumplen (resolveGates no consulta el portal nunca): un proyecto no
|
|
78
|
+
* cambia de regla entre dos turnos, y resolver un prompt no es el momento de
|
|
79
|
+
* descubrir que el portal se movio.
|
|
80
|
+
*/
|
|
59
81
|
export declare function resolvePrompts(projectRoot: string | undefined, opts?: FetchOptions): Promise<ResolvedPrompts>;
|
|
60
82
|
export interface PullResult {
|
|
61
83
|
/** The canonical version these prompts were pulled from. */
|
|
@@ -66,16 +88,24 @@ export interface PullResult {
|
|
|
66
88
|
* before (a fresh `pull` of an up-to-date project reports none). */
|
|
67
89
|
changed: string[];
|
|
68
90
|
}
|
|
69
|
-
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Copiar los prompts CANONICOS al archivo de OVERRIDES del proyecto,
|
|
93
|
+
* pisando lo que hubiera.
|
|
94
|
+
*
|
|
95
|
+
* SE LLAMABA `pullPrompts`, Y ESE NOMBRE ERA EL DEFECTO (PND-277). En el
|
|
96
|
+
* mismo comando padre, `gates pull` MIDE y no escribe; este ESCRIBIA y no
|
|
97
|
+
* media. Un dueno que aprendio el seguro y corrio el otro por analogia ya
|
|
98
|
+
* se habia pisado los prompts del proyecto. El nombre prometia el
|
|
99
|
+
* comportamiento del otro, que es peor que no existir.
|
|
100
|
+
*
|
|
101
|
+
* La capacidad sigue siendo legitima para UN caso -- "quiero el texto
|
|
102
|
+
* publicado como punto de partida para editarlo a mano" -- asi que no se
|
|
103
|
+
* borro: se le puso el nombre que dice lo que hace, y el CLI la expone como
|
|
104
|
+
* `yf urazuke prompts copy-to-overrides`. Lo que escribe son OVERRIDES del
|
|
105
|
+
* dueno, no un congelado: el congelado tiene version, huella y razon, y se
|
|
106
|
+
* escribe con `prompts adopt --reason` (src/urazuke/prompts_freeze.ts).
|
|
107
|
+
*/
|
|
108
|
+
export declare function copyCanonicalIntoOverrides(projectRoot: string, opts?: FetchOptions & {
|
|
79
109
|
key?: string;
|
|
80
110
|
}): Promise<PullResult>;
|
|
81
111
|
//# sourceMappingURL=prompts_client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts_client.d.ts","sourceRoot":"","sources":["../../src/urazuke/prompts_client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompts_client.d.ts","sourceRoot":"","sources":["../../src/urazuke/prompts_client.ts"],"names":[],"mappings":"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"}
|