@aiyou-dev/cli 0.1.0 → 1.0.2
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/README.md +438 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +360 -4
- package/dist/commands/index.js.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/init/interactive.d.ts +2 -0
- package/dist/init/interactive.d.ts.map +1 -1
- package/dist/init/interactive.js +2 -2
- package/dist/init/interactive.js.map +1 -1
- package/dist/init/opencode-config.d.ts +46 -0
- package/dist/init/opencode-config.d.ts.map +1 -0
- package/dist/init/opencode-config.js +82 -0
- package/dist/init/opencode-config.js.map +1 -0
- package/dist/init/settings-generator.d.ts +21 -10
- package/dist/init/settings-generator.d.ts.map +1 -1
- package/dist/init/settings-generator.js +121 -35
- package/dist/init/settings-generator.js.map +1 -1
- package/dist/init/team-setup.d.ts +43 -0
- package/dist/init/team-setup.d.ts.map +1 -0
- package/dist/init/team-setup.js +237 -0
- package/dist/init/team-setup.js.map +1 -0
- package/dist/mcp/tools/ast-tools.d.ts +6 -0
- package/dist/mcp/tools/ast-tools.d.ts.map +1 -0
- package/dist/mcp/tools/ast-tools.js +101 -0
- package/dist/mcp/tools/ast-tools.js.map +1 -0
- package/dist/mcp/tools/config-tools.js +1 -1
- package/dist/mcp/tools/config-tools.js.map +1 -1
- package/dist/mcp/tools/hooks-tools.d.ts.map +1 -1
- package/dist/mcp/tools/hooks-tools.js +99 -1
- package/dist/mcp/tools/hooks-tools.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +1 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +13 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/model-engine-tools.d.ts +3 -0
- package/dist/mcp/tools/model-engine-tools.d.ts.map +1 -0
- package/dist/mcp/tools/model-engine-tools.js +52 -0
- package/dist/mcp/tools/model-engine-tools.js.map +1 -0
- package/dist/mcp/tools/models-tools.d.ts +6 -0
- package/dist/mcp/tools/models-tools.d.ts.map +1 -0
- package/dist/mcp/tools/models-tools.js +162 -0
- package/dist/mcp/tools/models-tools.js.map +1 -0
- package/dist/mcp/tools/proxy-tools.d.ts +6 -0
- package/dist/mcp/tools/proxy-tools.d.ts.map +1 -0
- package/dist/mcp/tools/proxy-tools.js +243 -0
- package/dist/mcp/tools/proxy-tools.js.map +1 -0
- package/dist/mcp/tools/rd-tools.d.ts +6 -0
- package/dist/mcp/tools/rd-tools.d.ts.map +1 -0
- package/dist/mcp/tools/rd-tools.js +205 -0
- package/dist/mcp/tools/rd-tools.js.map +1 -0
- package/dist/mcp/tools/semantic-tools.d.ts +6 -0
- package/dist/mcp/tools/semantic-tools.d.ts.map +1 -0
- package/dist/mcp/tools/semantic-tools.js +129 -0
- package/dist/mcp/tools/semantic-tools.js.map +1 -0
- package/dist/models/index.d.ts +6 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +6 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/launcher.d.ts +15 -0
- package/dist/models/launcher.d.ts.map +1 -0
- package/dist/models/launcher.js +187 -0
- package/dist/models/launcher.js.map +1 -0
- package/dist/models/manager.d.ts +13 -0
- package/dist/models/manager.d.ts.map +1 -0
- package/dist/models/manager.js +247 -0
- package/dist/models/manager.js.map +1 -0
- package/dist/models/minio.d.ts +17 -0
- package/dist/models/minio.d.ts.map +1 -0
- package/dist/models/minio.js +93 -0
- package/dist/models/minio.js.map +1 -0
- package/dist/models/types.d.ts +48 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +2 -0
- package/dist/models/types.js.map +1 -0
- package/dist/models/vram.d.ts +9 -0
- package/dist/models/vram.d.ts.map +1 -0
- package/dist/models/vram.js +139 -0
- package/dist/models/vram.js.map +1 -0
- package/dist/napi/proxy.d.ts +214 -0
- package/dist/napi/proxy.d.ts.map +1 -0
- package/dist/napi/proxy.js +39 -0
- package/dist/napi/proxy.js.map +1 -0
- package/dist/production/error-handler.js +1 -1
- package/dist/production/error-handler.js.map +1 -1
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +9 -5
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep Research tools — research session management, search, document processing.
|
|
3
|
+
*/
|
|
4
|
+
function text(t) { return { content: [{ type: "text", text: t }] }; }
|
|
5
|
+
function json(d) { return { content: [{ type: "text", text: JSON.stringify(d, null, 2) }] }; }
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
let researchEngine = null;
|
|
8
|
+
function getEngine() {
|
|
9
|
+
if (!researchEngine) {
|
|
10
|
+
try {
|
|
11
|
+
const mod = require("../../rd/engine.js");
|
|
12
|
+
researchEngine = mod.getResearchEngine?.() ?? null;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return researchEngine;
|
|
19
|
+
}
|
|
20
|
+
export const rdTools = [
|
|
21
|
+
{
|
|
22
|
+
name: "rd_init",
|
|
23
|
+
description: "Initialize a deep research session with a query and strategy",
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: "object",
|
|
26
|
+
properties: {
|
|
27
|
+
query: { type: "string", description: "Research query" },
|
|
28
|
+
strategy: { type: "string", description: "Strategy: langgraph-agent, source-based, focused-iteration, quick" },
|
|
29
|
+
max_iterations: { type: "number", description: "Max iterations (default: 50)" },
|
|
30
|
+
},
|
|
31
|
+
required: ["query"],
|
|
32
|
+
},
|
|
33
|
+
handler: async (input) => {
|
|
34
|
+
const engine = getEngine();
|
|
35
|
+
if (!engine)
|
|
36
|
+
return text("Deep research engine not available");
|
|
37
|
+
try {
|
|
38
|
+
const session = engine.initSession({
|
|
39
|
+
query: input.query,
|
|
40
|
+
strategy: input.strategy,
|
|
41
|
+
maxIterations: input.max_iterations,
|
|
42
|
+
});
|
|
43
|
+
return json(session);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
return text(`RD init error: ${err instanceof Error ? err.message : String(err)}`);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: "rd_search",
|
|
52
|
+
description: "Search the web for research sources",
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
query: { type: "string", description: "Search query" },
|
|
57
|
+
engine: { type: "string", description: "Engine: searxng, arxiv, pubmed, semantic-scholar, wikipedia" },
|
|
58
|
+
},
|
|
59
|
+
required: ["query"],
|
|
60
|
+
},
|
|
61
|
+
handler: async (input) => {
|
|
62
|
+
const engine = getEngine();
|
|
63
|
+
if (!engine)
|
|
64
|
+
return text("Deep research engine not available");
|
|
65
|
+
try {
|
|
66
|
+
const results = await engine.search(input.query, input.engine);
|
|
67
|
+
return json(results);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
return text(`RD search error: ${err instanceof Error ? err.message : String(err)}`);
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "rd_strategies",
|
|
76
|
+
description: "List available research strategies",
|
|
77
|
+
inputSchema: { type: "object", properties: {} },
|
|
78
|
+
handler: async () => {
|
|
79
|
+
const engine = getEngine();
|
|
80
|
+
if (!engine)
|
|
81
|
+
return text("Deep research engine not available");
|
|
82
|
+
try {
|
|
83
|
+
return json(engine.listStrategies());
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
return text(`RD strategies error: ${err instanceof Error ? err.message : String(err)}`);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: "rd_status",
|
|
92
|
+
description: "Check research session status",
|
|
93
|
+
inputSchema: {
|
|
94
|
+
type: "object",
|
|
95
|
+
properties: {
|
|
96
|
+
session_id: { type: "string", description: "Session ID" },
|
|
97
|
+
},
|
|
98
|
+
required: ["session_id"],
|
|
99
|
+
},
|
|
100
|
+
handler: async (input) => {
|
|
101
|
+
const engine = getEngine();
|
|
102
|
+
if (!engine)
|
|
103
|
+
return text("Deep research engine not available");
|
|
104
|
+
try {
|
|
105
|
+
return json(engine.getStatus(input.session_id));
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
return text(`RD status error: ${err instanceof Error ? err.message : String(err)}`);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: "rd_report",
|
|
114
|
+
description: "Generate a research report from a completed session",
|
|
115
|
+
inputSchema: {
|
|
116
|
+
type: "object",
|
|
117
|
+
properties: {
|
|
118
|
+
session_id: { type: "string", description: "Session ID" },
|
|
119
|
+
format: { type: "string", description: "Format: markdown, json, text" },
|
|
120
|
+
},
|
|
121
|
+
required: ["session_id"],
|
|
122
|
+
},
|
|
123
|
+
handler: async (input) => {
|
|
124
|
+
const engine = getEngine();
|
|
125
|
+
if (!engine)
|
|
126
|
+
return text("Deep research engine not available");
|
|
127
|
+
try {
|
|
128
|
+
const report = engine.generateReport(input.session_id, input.format);
|
|
129
|
+
return typeof report === "string" ? text(report) : json(report);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
return text(`RD report error: ${err instanceof Error ? err.message : String(err)}`);
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: "rd_knowledge_graph",
|
|
138
|
+
description: "View knowledge graph nodes and connections for a research session",
|
|
139
|
+
inputSchema: {
|
|
140
|
+
type: "object",
|
|
141
|
+
properties: {
|
|
142
|
+
session_id: { type: "string", description: "Session ID" },
|
|
143
|
+
},
|
|
144
|
+
required: ["session_id"],
|
|
145
|
+
},
|
|
146
|
+
handler: async (input) => {
|
|
147
|
+
const engine = getEngine();
|
|
148
|
+
if (!engine)
|
|
149
|
+
return text("Deep research engine not available");
|
|
150
|
+
try {
|
|
151
|
+
return json(engine.getKnowledgeGraph(input.session_id));
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
return text(`RD knowledge graph error: ${err instanceof Error ? err.message : String(err)}`);
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: "rd_document_process",
|
|
160
|
+
description: "Process a document (PDF/DOCX/image) for research",
|
|
161
|
+
inputSchema: {
|
|
162
|
+
type: "object",
|
|
163
|
+
properties: {
|
|
164
|
+
path: { type: "string", description: "Document file path" },
|
|
165
|
+
ocr: { type: "boolean", description: "Enable OCR for scanned documents" },
|
|
166
|
+
},
|
|
167
|
+
required: ["path"],
|
|
168
|
+
},
|
|
169
|
+
handler: async (input) => {
|
|
170
|
+
const engine = getEngine();
|
|
171
|
+
if (!engine)
|
|
172
|
+
return text("Deep research engine not available");
|
|
173
|
+
try {
|
|
174
|
+
return json(engine.processDocument(input.path, input.ocr));
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
return text(`RD document error: ${err instanceof Error ? err.message : String(err)}`);
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: "rd_citations",
|
|
183
|
+
description: "Generate citations from session sources",
|
|
184
|
+
inputSchema: {
|
|
185
|
+
type: "object",
|
|
186
|
+
properties: {
|
|
187
|
+
session_id: { type: "string", description: "Session ID" },
|
|
188
|
+
style: { type: "string", description: "Citation style: APA, MLA, Chicago, BibTeX" },
|
|
189
|
+
},
|
|
190
|
+
required: ["session_id"],
|
|
191
|
+
},
|
|
192
|
+
handler: async (input) => {
|
|
193
|
+
const engine = getEngine();
|
|
194
|
+
if (!engine)
|
|
195
|
+
return text("Deep research engine not available");
|
|
196
|
+
try {
|
|
197
|
+
return json(engine.generateCitations(input.session_id, input.style));
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
return text(`RD citations error: ${err instanceof Error ? err.message : String(err)}`);
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
];
|
|
205
|
+
//# sourceMappingURL=rd-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rd-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/rd-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/semantic-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,gBAAgB,CAAC;AAsB7D,eAAO,MAAM,aAAa,EAAE,OAAO,EAmGlC,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic tools — semantic routing via aiyoucli-proxy NAPI.
|
|
3
|
+
*/
|
|
4
|
+
function text(t) { return { content: [{ type: "text", text: t }] }; }
|
|
5
|
+
function json(d) { return { content: [{ type: "text", text: JSON.stringify(d, null, 2) }] }; }
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
let proxyEngine = null;
|
|
8
|
+
function createProxyEngine() {
|
|
9
|
+
try {
|
|
10
|
+
const mod = require("../../napi/proxy.js");
|
|
11
|
+
return mod.getProxyEngine?.() ?? null;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function getEngine() {
|
|
18
|
+
if (!proxyEngine)
|
|
19
|
+
proxyEngine = createProxyEngine();
|
|
20
|
+
return proxyEngine;
|
|
21
|
+
}
|
|
22
|
+
export const semanticTools = [
|
|
23
|
+
{
|
|
24
|
+
name: "semantic_route",
|
|
25
|
+
description: "Route a task to the optimal agent type using keyword matching",
|
|
26
|
+
inputSchema: {
|
|
27
|
+
type: "object",
|
|
28
|
+
properties: {
|
|
29
|
+
task: { type: "string", description: "Task description to route" },
|
|
30
|
+
},
|
|
31
|
+
required: ["task"],
|
|
32
|
+
},
|
|
33
|
+
handler: async (input) => {
|
|
34
|
+
const engine = getEngine();
|
|
35
|
+
if (!engine)
|
|
36
|
+
return text("Semantic router not available");
|
|
37
|
+
try {
|
|
38
|
+
return json(engine.semanticRoute(input.task));
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
return text(`Semantic route error: ${err instanceof Error ? err.message : String(err)}`);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "semantic_route_hybrid",
|
|
47
|
+
description: "Route a task with custom embedding scores (keyword + embedding hybrid)",
|
|
48
|
+
inputSchema: {
|
|
49
|
+
type: "object",
|
|
50
|
+
properties: {
|
|
51
|
+
task: { type: "string", description: "Task description" },
|
|
52
|
+
embedding: { type: "array", items: { type: "number" }, description: "Pre-computed embedding" },
|
|
53
|
+
},
|
|
54
|
+
required: ["task"],
|
|
55
|
+
},
|
|
56
|
+
handler: async (input) => {
|
|
57
|
+
const engine = getEngine();
|
|
58
|
+
if (!engine)
|
|
59
|
+
return text("Semantic router not available");
|
|
60
|
+
try {
|
|
61
|
+
return json(engine.semanticRouteHybrid(input.task, input.embedding));
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
return text(`Semantic route hybrid error: ${err instanceof Error ? err.message : String(err)}`);
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "semantic_route_enhanced",
|
|
70
|
+
description: "Auto hybrid route — combines keyword matching with gateway embeddings",
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: "object",
|
|
73
|
+
properties: {
|
|
74
|
+
task: { type: "string", description: "Task description" },
|
|
75
|
+
},
|
|
76
|
+
required: ["task"],
|
|
77
|
+
},
|
|
78
|
+
handler: async (input) => {
|
|
79
|
+
const engine = getEngine();
|
|
80
|
+
if (!engine)
|
|
81
|
+
return text("Semantic router not available");
|
|
82
|
+
try {
|
|
83
|
+
return json(engine.semanticRouteEnhanced(input.task));
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
return text(`Semantic route enhanced error: ${err instanceof Error ? err.message : String(err)}`);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: "semantic_embed",
|
|
92
|
+
description: "Get keyword embedding vector for a text (8-dim)",
|
|
93
|
+
inputSchema: {
|
|
94
|
+
type: "object",
|
|
95
|
+
properties: {
|
|
96
|
+
text: { type: "string", description: "Text to embed" },
|
|
97
|
+
},
|
|
98
|
+
required: ["text"],
|
|
99
|
+
},
|
|
100
|
+
handler: async (input) => {
|
|
101
|
+
const engine = getEngine();
|
|
102
|
+
if (!engine)
|
|
103
|
+
return text("Semantic router not available");
|
|
104
|
+
try {
|
|
105
|
+
return json(engine.semanticEmbed(input.text));
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
return text(`Semantic embed error: ${err instanceof Error ? err.message : String(err)}`);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: "semantic_stats",
|
|
114
|
+
description: "Get semantic router configuration and agent statistics",
|
|
115
|
+
inputSchema: { type: "object", properties: {} },
|
|
116
|
+
handler: async () => {
|
|
117
|
+
const engine = getEngine();
|
|
118
|
+
if (!engine)
|
|
119
|
+
return text("Semantic router not available");
|
|
120
|
+
try {
|
|
121
|
+
return json(engine.semanticStats());
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
return text(`Semantic stats error: ${err instanceof Error ? err.message : String(err)}`);
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
//# sourceMappingURL=semantic-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/semantic-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ModelAssignment, RunningModel } from "./types.js";
|
|
2
|
+
export declare function startServer(assignment: ModelAssignment): Promise<RunningModel | {
|
|
3
|
+
error: string;
|
|
4
|
+
}>;
|
|
5
|
+
export declare function stopServer(role: string): boolean;
|
|
6
|
+
export declare function stopAll(): {
|
|
7
|
+
stopped: string[];
|
|
8
|
+
errors: string[];
|
|
9
|
+
};
|
|
10
|
+
export declare function getRunningServers(): {
|
|
11
|
+
role: string;
|
|
12
|
+
pid: number;
|
|
13
|
+
}[];
|
|
14
|
+
export declare function isPortInUse(port: number): boolean;
|
|
15
|
+
//# sourceMappingURL=launcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/models/launcher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAkEhE,wBAAgB,WAAW,CACzB,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyE3C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWhD;AAED,wBAAgB,OAAO,IAAI;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAkBjE;AAED,wBAAgB,iBAAiB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAanE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { spawn, execSync } from "node:child_process";
|
|
2
|
+
import { existsSync, statSync } from "node:fs";
|
|
3
|
+
import http from "node:http";
|
|
4
|
+
const runningServers = new Map();
|
|
5
|
+
let _llamaServerPath = null;
|
|
6
|
+
function getLlamaServerPath() {
|
|
7
|
+
if (_llamaServerPath)
|
|
8
|
+
return _llamaServerPath;
|
|
9
|
+
try {
|
|
10
|
+
const result = execSync("which llama-server 2>/dev/null", { encoding: "utf-8", timeout: 5000 }).trim();
|
|
11
|
+
if (result) {
|
|
12
|
+
_llamaServerPath = result;
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// not in PATH
|
|
18
|
+
}
|
|
19
|
+
const commonPaths = [
|
|
20
|
+
"/home/august/code/llama.cpp/build/bin/llama-server",
|
|
21
|
+
"/usr/local/bin/llama-server",
|
|
22
|
+
"/usr/bin/llama-server",
|
|
23
|
+
"/opt/llama.cpp/build/bin/llama-server",
|
|
24
|
+
"/opt/homebrew/bin/llama-server",
|
|
25
|
+
];
|
|
26
|
+
for (const p of commonPaths) {
|
|
27
|
+
if (existsSync(p)) {
|
|
28
|
+
_llamaServerPath = p;
|
|
29
|
+
return p;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
_llamaServerPath = "llama-server";
|
|
33
|
+
return _llamaServerPath;
|
|
34
|
+
}
|
|
35
|
+
function wait(ms) {
|
|
36
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
37
|
+
}
|
|
38
|
+
function waitForReady(host, port, timeout) {
|
|
39
|
+
const start = Date.now();
|
|
40
|
+
return new Promise((resolve) => {
|
|
41
|
+
function poll() {
|
|
42
|
+
if (Date.now() - start > timeout)
|
|
43
|
+
return resolve(false);
|
|
44
|
+
const req = http.get({ host, port, path: "/v1/models", timeout: 5000 }, (res) => {
|
|
45
|
+
const ready = res.statusCode === 200;
|
|
46
|
+
res.destroy();
|
|
47
|
+
if (ready)
|
|
48
|
+
return resolve(true);
|
|
49
|
+
setTimeout(poll, 2000);
|
|
50
|
+
});
|
|
51
|
+
req.on("error", () => {
|
|
52
|
+
req.destroy();
|
|
53
|
+
setTimeout(poll, 2000);
|
|
54
|
+
});
|
|
55
|
+
req.on("timeout", () => {
|
|
56
|
+
req.destroy();
|
|
57
|
+
setTimeout(poll, 2000);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
poll();
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
export function startServer(assignment) {
|
|
64
|
+
return new Promise((resolve) => {
|
|
65
|
+
if (!existsSync(assignment.path)) {
|
|
66
|
+
resolve({ error: `Modelo no encontrado: ${assignment.path}` });
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (!statSync(assignment.path).isFile()) {
|
|
70
|
+
resolve({ error: `La ruta no es un archivo valido: ${assignment.path}` });
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const startedAt = new Date().toISOString();
|
|
74
|
+
try {
|
|
75
|
+
const binPath = getLlamaServerPath();
|
|
76
|
+
const proc = spawn(binPath, [
|
|
77
|
+
"-m", assignment.path,
|
|
78
|
+
"--port", String(assignment.port),
|
|
79
|
+
"--host", "127.0.0.1",
|
|
80
|
+
], {
|
|
81
|
+
stdio: "ignore",
|
|
82
|
+
detached: true,
|
|
83
|
+
});
|
|
84
|
+
const key = `${assignment.role}`;
|
|
85
|
+
let resolved = false;
|
|
86
|
+
proc.on("error", (err) => {
|
|
87
|
+
if (!resolved) {
|
|
88
|
+
resolved = true;
|
|
89
|
+
resolve({ error: `Error iniciando llama-server: ${err.message}` });
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
proc.on("spawn", () => {
|
|
93
|
+
runningServers.set(key, proc);
|
|
94
|
+
proc.unref();
|
|
95
|
+
console.log(` ${assignment.role} esperando a que el servidor este listo en :${assignment.port}...`);
|
|
96
|
+
});
|
|
97
|
+
proc.on("exit", (code, signal) => {
|
|
98
|
+
runningServers.delete(key);
|
|
99
|
+
if (!resolved) {
|
|
100
|
+
resolved = true;
|
|
101
|
+
resolve({ error: `llama-server (${assignment.role}) termino antes de estar listo. Código: ${code ?? "unknown"}${signal ? `, señal: ${signal}` : ""}` });
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
waitForReady("127.0.0.1", assignment.port, 120_000).then((ready) => {
|
|
105
|
+
if (resolved)
|
|
106
|
+
return;
|
|
107
|
+
if (!ready) {
|
|
108
|
+
resolved = true;
|
|
109
|
+
resolve({ error: `llama-server (${assignment.role}) no respondio en :${assignment.port} tras 120s` });
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (!proc.pid) {
|
|
113
|
+
resolved = true;
|
|
114
|
+
resolve({ error: `llama-server (${assignment.role}) murio justo despues de iniciar` });
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
resolved = true;
|
|
118
|
+
resolve({
|
|
119
|
+
pid: proc.pid,
|
|
120
|
+
assignment,
|
|
121
|
+
startedAt,
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
127
|
+
resolve({ error: `Error iniciando llama-server: ${msg}` });
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
export function stopServer(role) {
|
|
132
|
+
const proc = runningServers.get(role);
|
|
133
|
+
if (!proc || !proc.pid)
|
|
134
|
+
return false;
|
|
135
|
+
try {
|
|
136
|
+
process.kill(proc.pid, "SIGTERM");
|
|
137
|
+
runningServers.delete(role);
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export function stopAll() {
|
|
145
|
+
const stopped = [];
|
|
146
|
+
const errors = [];
|
|
147
|
+
for (const [role, proc] of runningServers.entries()) {
|
|
148
|
+
if (!proc.pid) {
|
|
149
|
+
errors.push(`${role}: sin PID`);
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
process.kill(proc.pid, "SIGTERM");
|
|
154
|
+
stopped.push(role);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
errors.push(`${role}: no se pudo detener`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
runningServers.clear();
|
|
161
|
+
return { stopped, errors };
|
|
162
|
+
}
|
|
163
|
+
export function getRunningServers() {
|
|
164
|
+
const result = [];
|
|
165
|
+
for (const [role, proc] of runningServers.entries()) {
|
|
166
|
+
if (proc.pid) {
|
|
167
|
+
try {
|
|
168
|
+
process.kill(proc.pid, 0);
|
|
169
|
+
result.push({ role, pid: proc.pid });
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
runningServers.delete(role);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
export function isPortInUse(port) {
|
|
179
|
+
try {
|
|
180
|
+
execSync(`lsof -i :${port} -t`, { encoding: "utf-8", timeout: 3000 });
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/models/launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RunningModel } from "./types.js";
|
|
2
|
+
export declare function startInteractive(defaultModel?: string): Promise<{
|
|
3
|
+
ok: boolean;
|
|
4
|
+
running: RunningModel[];
|
|
5
|
+
message: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function displayStatus(running: RunningModel[]): void;
|
|
8
|
+
export declare function showStatus(): string;
|
|
9
|
+
export declare function stopInteractive(): {
|
|
10
|
+
ok: boolean;
|
|
11
|
+
message: string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/models/manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAA4C,YAAY,EAAoB,MAAM,YAAY,CAAC;AAuF3G,wBAAsB,gBAAgB,CACpC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA8JpE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAK3D;AAED,wBAAgB,UAAU,IAAI,MAAM,CAWnC;AAED,wBAAgB,eAAe,IAAI;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAoBlE"}
|