@nac3/forge-cli 1.0.29 → 1.0.31

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 (68) hide show
  1. package/dist/bin/yf.d.ts.map +1 -1
  2. package/dist/bin/yf.js +5 -0
  3. package/dist/bin/yf.js.map +1 -1
  4. package/dist/chat/claude.d.ts +13 -0
  5. package/dist/chat/claude.d.ts.map +1 -1
  6. package/dist/chat/claude.js +18 -5
  7. package/dist/chat/claude.js.map +1 -1
  8. package/dist/chat/claude_cli.d.ts.map +1 -1
  9. package/dist/chat/claude_cli.js +10 -0
  10. package/dist/chat/claude_cli.js.map +1 -1
  11. package/dist/chat/panel.d.ts.map +1 -1
  12. package/dist/chat/panel.js +111 -10
  13. package/dist/chat/panel.js.map +1 -1
  14. package/dist/chat/server.d.ts.map +1 -1
  15. package/dist/chat/server.js +35 -2
  16. package/dist/chat/server.js.map +1 -1
  17. package/dist/commands/federation.d.ts +17 -0
  18. package/dist/commands/federation.d.ts.map +1 -0
  19. package/dist/commands/federation.js +145 -0
  20. package/dist/commands/federation.js.map +1 -0
  21. package/dist/core/brain_capabilities.d.ts +64 -0
  22. package/dist/core/brain_capabilities.d.ts.map +1 -0
  23. package/dist/core/brain_capabilities.js +119 -0
  24. package/dist/core/brain_capabilities.js.map +1 -0
  25. package/dist/core/brain_config.d.ts +1 -1
  26. package/dist/core/brain_config.d.ts.map +1 -1
  27. package/dist/core/brain_config.js +7 -0
  28. package/dist/core/brain_config.js.map +1 -1
  29. package/dist/core/cost_router.d.ts +6 -0
  30. package/dist/core/cost_router.d.ts.map +1 -1
  31. package/dist/core/cost_router.js +122 -8
  32. package/dist/core/cost_router.js.map +1 -1
  33. package/dist/core/federation_config.d.ts +17 -0
  34. package/dist/core/federation_config.d.ts.map +1 -0
  35. package/dist/core/federation_config.js +77 -0
  36. package/dist/core/federation_config.js.map +1 -0
  37. package/dist/core/provider_keys.d.ts +1 -1
  38. package/dist/core/provider_keys.d.ts.map +1 -1
  39. package/dist/core/provider_keys.js +3 -0
  40. package/dist/core/provider_keys.js.map +1 -1
  41. package/dist/core/provider_models.d.ts.map +1 -1
  42. package/dist/core/provider_models.js +10 -0
  43. package/dist/core/provider_models.js.map +1 -1
  44. package/dist/llm/federation_client.d.ts +66 -0
  45. package/dist/llm/federation_client.d.ts.map +1 -0
  46. package/dist/llm/federation_client.js +166 -0
  47. package/dist/llm/federation_client.js.map +1 -0
  48. package/dist/llm/federation_host.d.ts +16 -0
  49. package/dist/llm/federation_host.d.ts.map +1 -0
  50. package/dist/llm/federation_host.js +132 -0
  51. package/dist/llm/federation_host.js.map +1 -0
  52. package/dist/llm/gemini_client.d.ts.map +1 -1
  53. package/dist/llm/gemini_client.js +15 -6
  54. package/dist/llm/gemini_client.js.map +1 -1
  55. package/dist/llm/multi_provider_client.d.ts.map +1 -1
  56. package/dist/llm/multi_provider_client.js +27 -0
  57. package/dist/llm/multi_provider_client.js.map +1 -1
  58. package/dist/llm/openai_client.d.ts +4 -0
  59. package/dist/llm/openai_client.d.ts.map +1 -1
  60. package/dist/llm/openai_client.js +18 -6
  61. package/dist/llm/openai_client.js.map +1 -1
  62. package/dist/llm/single_step.d.ts +63 -0
  63. package/dist/llm/single_step.d.ts.map +1 -0
  64. package/dist/llm/single_step.js +171 -0
  65. package/dist/llm/single_step.js.map +1 -0
  66. package/dist/version.d.ts +1 -1
  67. package/dist/version.js +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * single_step -- ONE model call returning the assistant turn (text + tool_use
3
+ * requests) WITHOUT executing any tools. F4 (2026-06-20).
4
+ *
5
+ * The federation PARENT uses this to answer a child's inference job: it runs
6
+ * exactly one step of its configured brain and returns the raw assistant turn;
7
+ * the CHILD executes the tool calls on its own disk and submits the next step.
8
+ * This is the inverse of the looping provider clients (which run runTool
9
+ * internally) -- here tools must NOT run on the parent.
10
+ *
11
+ * Providers covered in v1:
12
+ * - 'anthropic' -> /v1/messages (also GLM via the z.ai
13
+ * Anthropic-compatible endpoint when baseUrl is set).
14
+ * - openai-compatible -> /chat/completions ('openai','deepseek','xai',
15
+ * 'mistral','ollama', GLM-openai, Qwen/DashScope).
16
+ * Gemini ('google_ai') is not yet wired here (parent brains for federation are
17
+ * the API set above); a clear error is thrown if requested.
18
+ *
19
+ * ASCII-only.
20
+ */
21
+ import type { BrainProvider } from '../core/brain_config.js';
22
+ export interface SingleStepToolSpec {
23
+ name: string;
24
+ description: string;
25
+ input_schema: Record<string, unknown>;
26
+ }
27
+ /** Anthropic-shape message (content is a string or a block array). This is the
28
+ * shape the federation child sends. */
29
+ export interface AnthroMessage {
30
+ role: 'user' | 'assistant';
31
+ content: unknown;
32
+ }
33
+ export interface SingleStepRequest {
34
+ provider: BrainProvider;
35
+ model: string;
36
+ apiKey: string | null;
37
+ /** Override the provider base origin (GLM anthropic-compat / openai-compat,
38
+ * Ollama localhost, DashScope). No trailing slash. */
39
+ baseUrl?: string;
40
+ messages: AnthroMessage[];
41
+ system?: string;
42
+ tools?: SingleStepToolSpec[];
43
+ maxTokens?: number;
44
+ fetchImpl?: typeof fetch;
45
+ }
46
+ export interface SingleStepResult {
47
+ text: string;
48
+ tool_calls: Array<{
49
+ id: string;
50
+ name: string;
51
+ input: Record<string, unknown>;
52
+ }>;
53
+ stop_reason: 'end_turn' | 'tool_use' | 'max_tokens' | 'unknown';
54
+ tokens_in: number;
55
+ tokens_out: number;
56
+ model: string;
57
+ }
58
+ export declare class SingleStepError extends Error {
59
+ status: number;
60
+ constructor(message: string, status?: number);
61
+ }
62
+ export declare function singleStep(req: SingleStepRequest): Promise<SingleStepResult>;
63
+ //# sourceMappingURL=single_step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single_step.d.ts","sourceRoot":"","sources":["../../src/llm/single_step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;wCACwC;AACxC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;2DACuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAChF,WAAW,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,MAAM,EAAE,MAAM,CAAC;gBACH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAI;CACxC;AAoBD,wBAAsB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWlF"}
@@ -0,0 +1,171 @@
1
+ export class SingleStepError extends Error {
2
+ status;
3
+ constructor(message, status = 0) { super(message); this.name = 'SingleStepError'; this.status = status; }
4
+ }
5
+ const OPENAI_COMPAT = new Set([
6
+ 'openai', 'deepseek', 'xai', 'mistral', 'qwen', 'zai', 'ollama',
7
+ ]);
8
+ function defaultBaseFor(provider) {
9
+ switch (provider) {
10
+ case 'anthropic': return 'https://api.anthropic.com';
11
+ case 'openai': return 'https://api.openai.com/v1';
12
+ case 'deepseek': return 'https://api.deepseek.com';
13
+ case 'xai': return 'https://api.x.ai/v1';
14
+ case 'mistral': return 'https://api.mistral.ai/v1';
15
+ case 'qwen': return 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';
16
+ case 'zai': return 'https://api.z.ai/api/paas/v4';
17
+ case 'ollama': return (process.env.YF_OLLAMA_BASE_URL || 'http://localhost:11434/v1');
18
+ default: return '';
19
+ }
20
+ }
21
+ export async function singleStep(req) {
22
+ const fetchImpl = req.fetchImpl ?? fetch;
23
+ const maxTokens = req.maxTokens ?? 4096;
24
+ if (req.provider === 'anthropic') {
25
+ return anthropicStep(req, fetchImpl, maxTokens);
26
+ }
27
+ if (OPENAI_COMPAT.has(req.provider)) {
28
+ return openAiCompatStep(req, fetchImpl, maxTokens);
29
+ }
30
+ throw new SingleStepError('federation parent brain provider not supported: ' + req.provider, 400);
31
+ }
32
+ /* ---------------- Anthropic / GLM anthropic-compat ---------------- */
33
+ async function anthropicStep(req, fetchImpl, maxTokens) {
34
+ if (!req.apiKey)
35
+ throw new SingleStepError('anthropic brain requires an api key', 400);
36
+ const base = (req.baseUrl || defaultBaseFor('anthropic')).replace(/\/+$/, '');
37
+ const body = {
38
+ model: req.model,
39
+ max_tokens: maxTokens,
40
+ messages: req.messages.map((m) => ({ role: m.role, content: m.content })),
41
+ };
42
+ if (req.system)
43
+ body.system = req.system;
44
+ if (req.tools && req.tools.length > 0) {
45
+ body.tools = req.tools.map((t) => ({ name: t.name, description: t.description, input_schema: t.input_schema }));
46
+ }
47
+ const r = await fetchImpl(base + '/v1/messages', {
48
+ method: 'POST',
49
+ headers: { 'x-api-key': req.apiKey, 'anthropic-version': '2023-06-01', 'content-type': 'application/json' },
50
+ body: JSON.stringify(body),
51
+ });
52
+ const j = await r.json().catch(() => ({}));
53
+ if (!r.ok)
54
+ throw new SingleStepError(j.error?.message || ('anthropic HTTP ' + r.status), r.status);
55
+ let text = '';
56
+ const tool_calls = [];
57
+ for (const b of j.content ?? []) {
58
+ if (b.type === 'text' && b.text)
59
+ text += b.text;
60
+ else if (b.type === 'tool_use' && b.id && b.name)
61
+ tool_calls.push({ id: b.id, name: b.name, input: b.input ?? {} });
62
+ }
63
+ return {
64
+ text,
65
+ tool_calls,
66
+ stop_reason: mapStop(j.stop_reason, tool_calls.length > 0),
67
+ tokens_in: j.usage?.input_tokens ?? 0,
68
+ tokens_out: j.usage?.output_tokens ?? 0,
69
+ model: j.model ?? req.model,
70
+ };
71
+ }
72
+ /** Convert the Anthropic-shape conversation into OpenAI chat messages
73
+ * (assistant tool_calls + role:'tool' results). */
74
+ function toOpenAiMessages(messages, system) {
75
+ const out = [];
76
+ if (system)
77
+ out.push({ role: 'system', content: system });
78
+ for (const m of messages) {
79
+ if (typeof m.content === 'string') {
80
+ out.push({ role: m.role, content: m.content });
81
+ continue;
82
+ }
83
+ const blocks = Array.isArray(m.content) ? m.content : [];
84
+ if (m.role === 'assistant') {
85
+ let text = '';
86
+ const toolCalls = [];
87
+ for (const b of blocks) {
88
+ if (b.type === 'text')
89
+ text += b.text;
90
+ else if (b.type === 'tool_use') {
91
+ toolCalls.push({ id: b.id, type: 'function', function: { name: b.name, arguments: JSON.stringify(b.input ?? {}) } });
92
+ }
93
+ }
94
+ const msg = { role: 'assistant', content: text || null };
95
+ if (toolCalls.length > 0)
96
+ msg.tool_calls = toolCalls;
97
+ out.push(msg);
98
+ }
99
+ else {
100
+ /* user: text blocks -> a user message; tool_result blocks -> tool msgs. */
101
+ let userText = '';
102
+ for (const b of blocks) {
103
+ if (b.type === 'text')
104
+ userText += b.text;
105
+ else if (b.type === 'tool_result') {
106
+ out.push({ role: 'tool', tool_call_id: b.tool_use_id, content: b.content });
107
+ }
108
+ }
109
+ if (userText)
110
+ out.push({ role: 'user', content: userText });
111
+ }
112
+ }
113
+ return out;
114
+ }
115
+ async function openAiCompatStep(req, fetchImpl, maxTokens) {
116
+ const keyless = req.provider === 'ollama';
117
+ if (!req.apiKey && !keyless)
118
+ throw new SingleStepError(req.provider + ' brain requires an api key', 400);
119
+ const base = (req.baseUrl || defaultBaseFor(req.provider)).replace(/\/+$/, '');
120
+ const body = {
121
+ model: req.model,
122
+ max_tokens: maxTokens,
123
+ messages: toOpenAiMessages(req.messages, req.system),
124
+ };
125
+ if (req.tools && req.tools.length > 0) {
126
+ body.tools = req.tools.map((t) => ({ type: 'function', function: { name: t.name, description: t.description, parameters: t.input_schema } }));
127
+ body.tool_choice = 'auto';
128
+ }
129
+ const headers = { 'content-type': 'application/json' };
130
+ if (req.apiKey)
131
+ headers['authorization'] = 'Bearer ' + req.apiKey;
132
+ const r = await fetchImpl(base + '/chat/completions', { method: 'POST', headers, body: JSON.stringify(body) });
133
+ const j = await r.json().catch(() => ({}));
134
+ if (!r.ok)
135
+ throw new SingleStepError(j.error?.message || (req.provider + ' HTTP ' + r.status), r.status);
136
+ const choice = j.choices && j.choices[0];
137
+ const msg = choice?.message;
138
+ const tool_calls = [];
139
+ for (const tc of msg?.tool_calls ?? []) {
140
+ let input = {};
141
+ try {
142
+ input = JSON.parse(tc.function.arguments || '{}');
143
+ }
144
+ catch {
145
+ input = {};
146
+ }
147
+ tool_calls.push({ id: tc.id, name: tc.function.name, input });
148
+ }
149
+ return {
150
+ text: typeof msg?.content === 'string' ? msg.content : '',
151
+ tool_calls,
152
+ stop_reason: mapStop(choice?.finish_reason, tool_calls.length > 0),
153
+ tokens_in: j.usage?.prompt_tokens ?? 0,
154
+ tokens_out: j.usage?.completion_tokens ?? 0,
155
+ model: j.model ?? req.model,
156
+ };
157
+ }
158
+ function mapStop(raw, hasToolCalls) {
159
+ if (hasToolCalls)
160
+ return 'tool_use';
161
+ switch (raw) {
162
+ case 'end_turn':
163
+ case 'stop': return 'end_turn';
164
+ case 'tool_use':
165
+ case 'tool_calls': return 'tool_use';
166
+ case 'max_tokens':
167
+ case 'length': return 'max_tokens';
168
+ default: return 'unknown';
169
+ }
170
+ }
171
+ //# sourceMappingURL=single_step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single_step.js","sourceRoot":"","sources":["../../src/llm/single_step.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.29";
5
+ export declare const VERSION = "1.0.31";
6
6
  //# sourceMappingURL=version.d.ts.map
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.29';
5
+ export const VERSION = '1.0.31';
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nac3/forge-cli",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
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>",