@nac3/forge-cli 1.0.105 → 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.
- package/dist/bin/yf.js +0 -0
- package/dist/chat/claude_cli.d.ts +15 -0
- package/dist/chat/claude_cli.d.ts.map +1 -1
- package/dist/chat/claude_cli.js +92 -12
- package/dist/chat/claude_cli.js.map +1 -1
- package/dist/chat/doctrine_digest.js +1 -1
- package/dist/chat/doctrine_digest.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +12 -13
- package/dist/chat/server.js.map +1 -1
- package/dist/mcp/forge_verbs_server.d.ts +93 -0
- package/dist/mcp/forge_verbs_server.d.ts.map +1 -0
- package/dist/mcp/forge_verbs_server.js +231 -0
- package/dist/mcp/forge_verbs_server.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +20 -18
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,QAAQ,EAAiB,MAAM,8BAA8B,CAAC;AAevE;;;uEAGuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,WAAW;IACX,YAAY;IACZ,cAAc;IACd,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,cAAc;CACf,CAAC;AAEF;;yBAEyB;AACzB,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC;;yCAEyC;AACzC,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;+DAC+D;AAC/D,MAAM,UAAU,cAAc,CAAC,KAAiB;IAC9C,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAC/D,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,GAAG,CAAC,MAAM,IAAI,oBAAoB;YAAE,MAAM;IAChD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,MAAM,UAAU,GAAY;IACjC,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,qEAAqE;UACnE,uEAAuE;UACvE,uEAAuE;UACvE,4DAA4D;UAC5D,kEAAkE;IACtE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;YACnF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;SACzF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC;AAQF;;oDAEoD;AACpD,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,qCAAqC;QAClF,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC;YACT,IAAI;YACJ,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG;YAC5F,WAAW,EAAE,CAAC,CAAC,MAA4C;SAC5D,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,CAAC;AAED;;sCAEsC;AACtC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,IAA6B,EAC7B,MAAyC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,EAC3H,YAA0B,KAAK;IAE/B,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,2DAA2D,EAAE,CAAC;IAC1F,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,mBAAmB,GAAG,GAAG,CAAC,IAAI,GAAG,yBAAyB,EAAE;YACpF,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClE,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,oCAAoC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QAC9F,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAqC,CAAC;QAC5D,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,6BAA6B,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACjH,CAAC;AACH,CAAC;AAQD,SAAS,UAAU,CAAC,IAAqB,EAAE,EAA+B,EAAE,IAAY,EAAE,OAAO,GAAG,KAAK;IACvG,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACrH,CAAC;AAED;4DAC4D;AAC5D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAe,EAAE,IAAa;IAC5D,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAC3B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACtC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,EAAE;YAClB,MAAM,EAAE;gBACN,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE;aACtD;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO;IAChD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC1H,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,uCAAuC;QACvC,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpG,CAAC,CAAC,QAAQ,CAAC,IAA+B,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACtE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5C,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD;gDACwC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACjF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IACD,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,oBAAoB,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,IAAI,CAAC;QAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,IAAI;IACX,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAY;QACpB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC/D,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC;QACtD,KAAK;KACN,CAAC;IACF,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACzC,GAAG,IAAI,KAAK,CAAC;QACb,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,GAAe,CAAC;YACpB,IAAI,CAAC;gBAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAe,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,SAAS;YAAC,CAAC;YACjE,KAAK,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3H,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAC9E,CAAC;AAED;gDACgD;AAChD,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;IACpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IAChG,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC,CAAC,EAAE,CAAC;AACL,IAAI,OAAO;IAAE,IAAI,EAAE,CAAC"}
|
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
|
|
5
|
+
export declare const VERSION = "1.1.0";
|
|
6
6
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,OAAO,
|
|
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
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
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
|
|
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>",
|
|
@@ -15,6 +15,23 @@
|
|
|
15
15
|
"exports": {
|
|
16
16
|
".": "./dist/index.js"
|
|
17
17
|
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"version": "node scripts/sync_version.mjs && git add src/version.ts",
|
|
20
|
+
"build": "tsc && node scripts/copy_qa_assets.mjs",
|
|
21
|
+
"dev": "tsx watch src/bin/yf.ts",
|
|
22
|
+
"typecheck": "tsc --noEmit",
|
|
23
|
+
"typecheck:all": "pnpm typecheck && pnpm --filter @yujin/hito4-server typecheck && pnpm --filter @yujin/forge-mobile typecheck",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"lint": "tsc --noEmit",
|
|
27
|
+
"yf": "tsx src/bin/yf.ts",
|
|
28
|
+
"catalog:lint": "node scripts/catalog_lint.mjs",
|
|
29
|
+
"pairing:check": "node scripts/check_pairing_sync.mjs",
|
|
30
|
+
"brain-matrix:gate": "node scripts/brain_matrix_gate.mjs",
|
|
31
|
+
"hito4:lint": "node scripts/hito4_lint_bundle.mjs",
|
|
32
|
+
"publish-alpha-emergency": "node scripts/publish_alpha_emergency.mjs",
|
|
33
|
+
"prepublishOnly": "pnpm run build && pnpm run typecheck && pnpm run catalog:lint && pnpm run test && pnpm run brain-matrix:gate && pnpm run hito4:lint"
|
|
34
|
+
},
|
|
18
35
|
"dependencies": {
|
|
19
36
|
"@anthropic-ai/sdk": "^0.32.1",
|
|
20
37
|
"@aws-sdk/client-ecs": "^3.1053.0",
|
|
@@ -51,6 +68,7 @@
|
|
|
51
68
|
"node": ">=18.17",
|
|
52
69
|
"pnpm": ">=9"
|
|
53
70
|
},
|
|
71
|
+
"packageManager": "pnpm@11.3.0",
|
|
54
72
|
"files": [
|
|
55
73
|
"dist",
|
|
56
74
|
"templates",
|
|
@@ -95,21 +113,5 @@
|
|
|
95
113
|
"publishConfig": {
|
|
96
114
|
"access": "public",
|
|
97
115
|
"tag": "latest"
|
|
98
|
-
},
|
|
99
|
-
"scripts": {
|
|
100
|
-
"version": "node scripts/sync_version.mjs && git add src/version.ts",
|
|
101
|
-
"build": "tsc && node scripts/copy_qa_assets.mjs",
|
|
102
|
-
"dev": "tsx watch src/bin/yf.ts",
|
|
103
|
-
"typecheck": "tsc --noEmit",
|
|
104
|
-
"typecheck:all": "pnpm typecheck && pnpm --filter @yujin/hito4-server typecheck && pnpm --filter @yujin/forge-mobile typecheck",
|
|
105
|
-
"test": "vitest run",
|
|
106
|
-
"test:watch": "vitest",
|
|
107
|
-
"lint": "tsc --noEmit",
|
|
108
|
-
"yf": "tsx src/bin/yf.ts",
|
|
109
|
-
"catalog:lint": "node scripts/catalog_lint.mjs",
|
|
110
|
-
"pairing:check": "node scripts/check_pairing_sync.mjs",
|
|
111
|
-
"brain-matrix:gate": "node scripts/brain_matrix_gate.mjs",
|
|
112
|
-
"hito4:lint": "node scripts/hito4_lint_bundle.mjs",
|
|
113
|
-
"publish-alpha-emergency": "node scripts/publish_alpha_emergency.mjs"
|
|
114
116
|
}
|
|
115
|
-
}
|
|
117
|
+
}
|