@nac3/forge-cli 1.0.106 → 1.1.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.
@@ -0,0 +1,93 @@
1
+ /**
2
+ * forge_verbs_server.ts -- NAC3-first tool surface (reingenieria 2026-09-01).
3
+ *
4
+ * MCP stdio server que el subproceso `claude -p` invoca en modo
5
+ * claude-code-cli (Plan). Evolucion de forge_panel_server: en vez de
6
+ * UNA sola tool opaca `nac3_invoke`, expone un SUBCONJUNTO CURADO de
7
+ * verbos dev de Forge (fs / git / shell / task / session / reader /
8
+ * graph) como tools MCP INDIVIDUALES, cada una con el JSON-Schema real
9
+ * del verbo. El modelo elige mejor una tool bien descripta y tipada que
10
+ * un proxy con `verb_id` string -> asi las utilidades de Forge se usan
11
+ * PRIORITARIAMENTE y las nativas quedan como backup (ver
12
+ * docs/CONTEXT_REENGINEERING_PROPOSAL_2026-09-01.md, seccion 2).
13
+ *
14
+ * La cola larga de verbos (los no curados) sigue accesible via la tool
15
+ * proxy `nac3_invoke`, identica a forge_panel_server, para no perder
16
+ * cobertura.
17
+ *
18
+ * OJO con el nombre: estos son los VERBOS DEV INTERNOS de Forge
19
+ * (src/nac3/internal_manifest.ts), NO el contrato web NAC3 del spec
20
+ * (@nac3/runtime). Son superficies distintas (ver seccion 0.bis del
21
+ * doc). Por eso el server se llama `forge_verbs`, no `forge_nac3`.
22
+ *
23
+ * Cada tool call se reenvia por HTTP al chat server local
24
+ * (POST /api/forge/panel-invoke), que corre el dispatcher real -- igual
25
+ * que forge_panel_server. Puerto + token por env (FORGE_PANEL_PORT /
26
+ * FORGE_PANEL_TOKEN). Hand-rolled JSON-RPC 2.0 sobre stdio, estilo
27
+ * zero-dep del repo. ASCII-only.
28
+ */
29
+ import { type Nac3Verb } from '../nac3/internal_manifest.js';
30
+ interface JsonRpcReq {
31
+ jsonrpc: '2.0';
32
+ id?: number | string;
33
+ method: string;
34
+ params?: {
35
+ name?: string;
36
+ arguments?: Record<string, unknown>;
37
+ };
38
+ }
39
+ export interface ToolDef {
40
+ name: string;
41
+ description: string;
42
+ inputSchema: Record<string, unknown>;
43
+ }
44
+ /** Prefijos de verbos DEV que se exponen como tools individuales.
45
+ * Son los que deben SUPERAR a las tools nativas del brain
46
+ * (Bash/Write/Read/...). Los UI/panel/voz (pizarron, panel, voice)
47
+ * quedan fuera: no compiten con nativas y solo inflarian la lista. */
48
+ export declare const EXPOSE_PREFIXES: readonly string[];
49
+ /** Cap para mantener la lista de tools chica (una lista enorme empeora
50
+ * la seleccion del modelo y quema tokens). El resto sigue por el
51
+ * proxy nac3_invoke. */
52
+ export declare const MAX_INDIVIDUAL_TOOLS = 48;
53
+ /** verb_id -> nombre de tool MCP valido (^[a-zA-Z0-9_-]+$). Los ids
54
+ * llevan puntos y guiones; se colapsan a `_`. Reversible via el mapa
55
+ * nameToVerb que arma buildToolDefs. */
56
+ export declare function sanitizeToolName(verbId: string): string;
57
+ /** Selecciona los verbos dev curados: por prefijo, no deprecados,
58
+ * deduplicados y capados. Orden estable (el del manifest). */
59
+ export declare function selectDevVerbs(verbs: Nac3Verb[]): Nac3Verb[];
60
+ /** La tool proxy identica a forge_panel_server: cubre la cola larga. */
61
+ export declare const PROXY_TOOL: ToolDef;
62
+ export interface BuiltTools {
63
+ tools: ToolDef[];
64
+ /** nombre de tool MCP -> verb_id real (solo tools individuales). */
65
+ nameToVerb: Map<string, string>;
66
+ }
67
+ /** Arma las ToolDef (individuales + proxy) y el mapa de resolucion.
68
+ * Ante colision de nombre saneado, la primera gana y la segunda cae al
69
+ * proxy (no se pierde: sigue invocable por id). */
70
+ export declare function buildToolDefs(verbs: Nac3Verb[]): BuiltTools;
71
+ /** Reenvia una invocacion al chat server (dispatcher real) y devuelve
72
+ * el texto del resultado. Espejo de forge_panel_server.forwardInvoke.
73
+ * fetchImpl inyectable para test. */
74
+ export declare function forwardInvoke(verbId: string, args: Record<string, unknown>, env?: {
75
+ port?: string;
76
+ token?: string;
77
+ }, fetchImpl?: typeof fetch): Promise<{
78
+ ok: boolean;
79
+ text: string;
80
+ }>;
81
+ export interface RpcDeps {
82
+ send: (msg: unknown) => void;
83
+ forward: (verbId: string, args: Record<string, unknown>) => Promise<{
84
+ ok: boolean;
85
+ text: string;
86
+ }>;
87
+ built: BuiltTools;
88
+ }
89
+ /** Nucleo testeable: procesa un request JSON-RPC contra deps
90
+ * inyectables. main() lo cablea a stdio + fetch reales. */
91
+ export declare function handleRpc(req: JsonRpcReq, deps: RpcDeps): Promise<void>;
92
+ export {};
93
+ //# sourceMappingURL=forge_verbs_server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge_verbs_server.d.ts","sourceRoot":"","sources":["../../src/mcp/forge_verbs_server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEvE,UAAU,UAAU;IAClB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CACjE;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;uEAGuE;AACvE,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAQ5C,CAAC;AAEF;;yBAEyB;AACzB,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;yCAEyC;AACzC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;+DAC+D;AAC/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAQ5D;AAED,wEAAwE;AACxE,eAAO,MAAM,UAAU,EAAE,OAgBxB,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,oEAAoE;IACpE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;oDAEoD;AACpD,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,CAe3D;AAED;;sCAEsC;AACtC,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAuF,EAC3H,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBxC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnG,KAAK,EAAE,UAAU,CAAC;CACnB;AAMD;4DAC4D;AAC5D,wBAAsB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C7E"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * forge_verbs_server.ts -- NAC3-first tool surface (reingenieria 2026-09-01).
3
+ *
4
+ * MCP stdio server que el subproceso `claude -p` invoca en modo
5
+ * claude-code-cli (Plan). Evolucion de forge_panel_server: en vez de
6
+ * UNA sola tool opaca `nac3_invoke`, expone un SUBCONJUNTO CURADO de
7
+ * verbos dev de Forge (fs / git / shell / task / session / reader /
8
+ * graph) como tools MCP INDIVIDUALES, cada una con el JSON-Schema real
9
+ * del verbo. El modelo elige mejor una tool bien descripta y tipada que
10
+ * un proxy con `verb_id` string -> asi las utilidades de Forge se usan
11
+ * PRIORITARIAMENTE y las nativas quedan como backup (ver
12
+ * docs/CONTEXT_REENGINEERING_PROPOSAL_2026-09-01.md, seccion 2).
13
+ *
14
+ * La cola larga de verbos (los no curados) sigue accesible via la tool
15
+ * proxy `nac3_invoke`, identica a forge_panel_server, para no perder
16
+ * cobertura.
17
+ *
18
+ * OJO con el nombre: estos son los VERBOS DEV INTERNOS de Forge
19
+ * (src/nac3/internal_manifest.ts), NO el contrato web NAC3 del spec
20
+ * (@nac3/runtime). Son superficies distintas (ver seccion 0.bis del
21
+ * doc). Por eso el server se llama `forge_verbs`, no `forge_nac3`.
22
+ *
23
+ * Cada tool call se reenvia por HTTP al chat server local
24
+ * (POST /api/forge/panel-invoke), que corre el dispatcher real -- igual
25
+ * que forge_panel_server. Puerto + token por env (FORGE_PANEL_PORT /
26
+ * FORGE_PANEL_TOKEN). Hand-rolled JSON-RPC 2.0 sobre stdio, estilo
27
+ * zero-dep del repo. ASCII-only.
28
+ */
29
+ import { manifest } from '../nac3/internal_manifest.js';
30
+ /** Prefijos de verbos DEV que se exponen como tools individuales.
31
+ * Son los que deben SUPERAR a las tools nativas del brain
32
+ * (Bash/Write/Read/...). Los UI/panel/voz (pizarron, panel, voice)
33
+ * quedan fuera: no compiten con nativas y solo inflarian la lista. */
34
+ export const EXPOSE_PREFIXES = [
35
+ 'yujin.fs.',
36
+ 'yujin.git.',
37
+ 'yujin.shell.',
38
+ 'yujin.task.',
39
+ 'yujin.session.',
40
+ 'yujin.reader.',
41
+ 'yujin.graph.',
42
+ ];
43
+ /** Cap para mantener la lista de tools chica (una lista enorme empeora
44
+ * la seleccion del modelo y quema tokens). El resto sigue por el
45
+ * proxy nac3_invoke. */
46
+ export const MAX_INDIVIDUAL_TOOLS = 48;
47
+ /** verb_id -> nombre de tool MCP valido (^[a-zA-Z0-9_-]+$). Los ids
48
+ * llevan puntos y guiones; se colapsan a `_`. Reversible via el mapa
49
+ * nameToVerb que arma buildToolDefs. */
50
+ export function sanitizeToolName(verbId) {
51
+ return verbId.replace(/[^a-zA-Z0-9]+/g, '_').replace(/^_+|_+$/g, '');
52
+ }
53
+ /** Selecciona los verbos dev curados: por prefijo, no deprecados,
54
+ * deduplicados y capados. Orden estable (el del manifest). */
55
+ export function selectDevVerbs(verbs) {
56
+ const out = [];
57
+ for (const v of verbs) {
58
+ if (!EXPOSE_PREFIXES.some((p) => v.id.startsWith(p)))
59
+ continue;
60
+ out.push(v);
61
+ if (out.length >= MAX_INDIVIDUAL_TOOLS)
62
+ break;
63
+ }
64
+ return out;
65
+ }
66
+ /** La tool proxy identica a forge_panel_server: cubre la cola larga. */
67
+ export const PROXY_TOOL = {
68
+ name: 'nac3_invoke',
69
+ description: 'Fallback: invoca CUALQUIER verbo NAC3 del manifest de Forge por id '
70
+ + '(incluido cualquiera que no tenga tool propia arriba). Usa las tools '
71
+ + 'individuales yujin_* cuando exista una para tu accion; usa esta solo '
72
+ + 'para la cola larga. Para descubrir el schema de un verbo: '
73
+ + 'verb_id="yujin.nac3.discover-schemas" con args {verb_ids:[...]}.',
74
+ inputSchema: {
75
+ type: 'object',
76
+ properties: {
77
+ verb_id: { type: 'string', description: 'Id del verbo, p.ej. yujin.workflow.run.' },
78
+ args: { type: 'object', description: 'Argumentos del verbo (deben cumplir su schema).' },
79
+ },
80
+ required: ['verb_id'],
81
+ },
82
+ };
83
+ /** Arma las ToolDef (individuales + proxy) y el mapa de resolucion.
84
+ * Ante colision de nombre saneado, la primera gana y la segunda cae al
85
+ * proxy (no se pierde: sigue invocable por id). */
86
+ export function buildToolDefs(verbs) {
87
+ const tools = [];
88
+ const nameToVerb = new Map();
89
+ for (const v of selectDevVerbs(verbs)) {
90
+ const name = sanitizeToolName(v.id);
91
+ if (!name || nameToVerb.has(name))
92
+ continue; /* colision -> queda para el proxy */
93
+ nameToVerb.set(name, v.id);
94
+ tools.push({
95
+ name,
96
+ description: (v.description || v.label) + ' [verb: ' + v.id + ', policy: ' + v.policy + ']',
97
+ inputSchema: v.schema,
98
+ });
99
+ }
100
+ tools.push(PROXY_TOOL);
101
+ return { tools, nameToVerb };
102
+ }
103
+ /** Reenvia una invocacion al chat server (dispatcher real) y devuelve
104
+ * el texto del resultado. Espejo de forge_panel_server.forwardInvoke.
105
+ * fetchImpl inyectable para test. */
106
+ export async function forwardInvoke(verbId, args, env = { port: process.env['FORGE_PANEL_PORT'], token: process.env['FORGE_PANEL_TOKEN'] }, fetchImpl = fetch) {
107
+ if (!env.port || !env.token) {
108
+ return { ok: false, text: 'El canal de Forge no esta configurado (sin puerto/token).' };
109
+ }
110
+ try {
111
+ const r = await fetchImpl('http://127.0.0.1:' + env.port + '/api/forge/panel-invoke', {
112
+ method: 'POST',
113
+ headers: { 'content-type': 'application/json' },
114
+ body: JSON.stringify({ token: env.token, verb_id: verbId, args }),
115
+ });
116
+ if (!r.ok)
117
+ return { ok: false, text: 'Forge rechazo la invocacion (HTTP ' + r.status + ').' };
118
+ const j = await r.json();
119
+ return { ok: j.ok !== false, text: j.text || 'Listo.' };
120
+ }
121
+ catch (err) {
122
+ return { ok: false, text: 'No pude contactar a Forge: ' + (err instanceof Error ? err.message : String(err)) };
123
+ }
124
+ }
125
+ function toolResult(send, id, text, isError = false) {
126
+ send({ jsonrpc: '2.0', id, result: { content: [{ type: 'text', text }], ...(isError ? { isError: true } : {}) } });
127
+ }
128
+ /** Nucleo testeable: procesa un request JSON-RPC contra deps
129
+ * inyectables. main() lo cablea a stdio + fetch reales. */
130
+ export async function handleRpc(req, deps) {
131
+ const { id, method } = req;
132
+ const { send, forward, built } = deps;
133
+ if (method === 'initialize') {
134
+ send({
135
+ jsonrpc: '2.0', id,
136
+ result: {
137
+ protocolVersion: '2024-11-05',
138
+ capabilities: { tools: {} },
139
+ serverInfo: { name: 'forge-verbs', version: '1.0.0' },
140
+ },
141
+ });
142
+ return;
143
+ }
144
+ if (method.startsWith('notifications/'))
145
+ return;
146
+ if (method === 'tools/list') {
147
+ send({ jsonrpc: '2.0', id, result: { tools: built.tools } });
148
+ return;
149
+ }
150
+ if (method === 'tools/call') {
151
+ const name = req.params?.name ?? '';
152
+ const callArgs = (req.params?.arguments && typeof req.params.arguments === 'object' && !Array.isArray(req.params.arguments))
153
+ ? req.params.arguments : {};
154
+ /* Proxy: la cola larga por verb_id. */
155
+ if (name === 'nac3_invoke') {
156
+ const verbId = typeof callArgs.verb_id === 'string' ? callArgs.verb_id : '';
157
+ const verbArgs = (callArgs.args && typeof callArgs.args === 'object' && !Array.isArray(callArgs.args))
158
+ ? callArgs.args : {};
159
+ if (!verbId) {
160
+ toolResult(send, id, 'Falta verb_id.', true);
161
+ return;
162
+ }
163
+ const res = await forward(verbId, verbArgs);
164
+ toolResult(send, id, res.text, !res.ok);
165
+ return;
166
+ }
167
+ /* Tool individual: el nombre mapea a un verb_id; los argumentos SON
168
+ * los args del verbo (schema plano). */
169
+ const verbId = built.nameToVerb.get(name);
170
+ if (!verbId) {
171
+ toolResult(send, id, 'Tool desconocida: ' + name, true);
172
+ return;
173
+ }
174
+ const res = await forward(verbId, callArgs);
175
+ toolResult(send, id, res.text, !res.ok);
176
+ return;
177
+ }
178
+ if (typeof id !== 'undefined') {
179
+ send({ jsonrpc: '2.0', id, error: { code: -32601, message: 'method not found: ' + method } });
180
+ }
181
+ }
182
+ function logErr(msg) {
183
+ try {
184
+ process.stderr.write('[forge-verbs-mcp] ' + msg + '\n');
185
+ }
186
+ catch { /* ignore */ }
187
+ }
188
+ function main() {
189
+ const built = buildToolDefs(manifest().verbs);
190
+ const deps = {
191
+ send: (msg) => process.stdout.write(JSON.stringify(msg) + '\n'),
192
+ forward: (verbId, args) => forwardInvoke(verbId, args),
193
+ built,
194
+ };
195
+ let buf = '';
196
+ process.stdin.setEncoding('utf8');
197
+ process.stdin.on('data', (chunk) => {
198
+ buf += chunk;
199
+ let nl;
200
+ while ((nl = buf.indexOf('\n')) >= 0) {
201
+ const line = buf.slice(0, nl).trim();
202
+ buf = buf.slice(nl + 1);
203
+ if (!line)
204
+ continue;
205
+ let req;
206
+ try {
207
+ req = JSON.parse(line);
208
+ }
209
+ catch {
210
+ continue;
211
+ }
212
+ void handleRpc(req, deps).catch((err) => logErr('handler error: ' + (err instanceof Error ? err.message : String(err))));
213
+ }
214
+ });
215
+ process.stdin.on('end', () => process.exit(0));
216
+ logErr('ready (pid ' + process.pid + ', ' + built.tools.length + ' tools)');
217
+ }
218
+ /* Solo arranca stdio cuando se ejecuta como entrypoint, no al importar
219
+ * desde un test. import.meta.url vs argv[1]. */
220
+ const isEntry = (() => {
221
+ try {
222
+ const invoked = process.argv[1] ? process.argv[1].replace(/\\/g, '/') : '';
223
+ return invoked.endsWith('forge_verbs_server.js') || invoked.endsWith('forge_verbs_server.ts');
224
+ }
225
+ catch {
226
+ return false;
227
+ }
228
+ })();
229
+ if (isEntry)
230
+ main();
231
+ //# sourceMappingURL=forge_verbs_server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge_verbs_server.js","sourceRoot":"","sources":["../../src/mcp/forge_verbs_server.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * Yujin Forge CLI version. Kept in sync with package.json by the npm
3
3
  * "version" lifecycle (scripts/sync_version.mjs) so the two never drift.
4
4
  */
5
- export declare const VERSION = "1.0.106";
5
+ export declare const VERSION = "1.1.0";
6
6
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,OAAO,YAAY,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,OAAO,UAAU,CAAC"}
package/dist/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  * Yujin Forge CLI version. Kept in sync with package.json by the npm
3
3
  * "version" lifecycle (scripts/sync_version.mjs) so the two never drift.
4
4
  */
5
- export const VERSION = '1.0.106';
5
+ export const VERSION = '1.1.0';
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nac3/forge-cli",
3
- "version": "1.0.106",
3
+ "version": "1.1.0",
4
4
  "description": "Yujin Forge -- voice-first NAC-3 React development framework. CLI + chat panel + spec ingest + 10-format document reader + voice loop.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "Pablo Kuschnirof <pablo@rpaforce.com>",