skyloom 1.11.0 → 1.13.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/.github/workflows/ci.yml +36 -36
- package/README.md +142 -46
- package/config/default.yaml +43 -47
- package/config/models.yaml +155 -0
- package/config/providers.yaml +39 -39
- package/config/skills/api_integrator/SKILL.md +15 -15
- package/config/skills/arch_designer/SKILL.md +13 -13
- package/config/skills/ci_cd_manager/SKILL.md +14 -14
- package/config/skills/code_analysis/SKILL.md +13 -13
- package/config/skills/code_generator/SKILL.md +12 -12
- package/config/skills/code_reviewer/SKILL.md +13 -13
- package/config/skills/content_writer/SKILL.md +14 -14
- package/config/skills/data_transformer/SKILL.md +15 -15
- package/config/skills/document_analysis/SKILL.md +13 -13
- package/config/skills/emotional_companion/SKILL.md +15 -15
- package/config/skills/performance_checker/SKILL.md +14 -14
- package/config/skills/security_auditor/SKILL.md +14 -14
- package/config/skills/self_evolve/SKILL.md +13 -13
- package/config/skills/sys_operator/SKILL.md +15 -15
- package/config/skills/task_planner/SKILL.md +14 -14
- package/config/skills/web_research/SKILL.md +14 -14
- package/config/skills/workflow_designer/SKILL.md +13 -13
- package/dist/agents/dew.js +52 -52
- package/dist/agents/fair.js +84 -84
- package/dist/agents/fog.js +30 -30
- package/dist/agents/frost.js +32 -32
- package/dist/agents/rain.js +32 -32
- package/dist/agents/snow.js +68 -68
- package/dist/cli/main.js +172 -47
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui.d.ts.map +1 -1
- package/dist/cli/tui.js +9 -1
- package/dist/cli/tui.js.map +1 -1
- package/dist/core/agent/task.d.ts +58 -0
- package/dist/core/agent/task.d.ts.map +1 -0
- package/dist/core/agent/task.js +83 -0
- package/dist/core/agent/task.js.map +1 -0
- package/dist/core/agent.d.ts +2 -45
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +61 -145
- package/dist/core/agent.js.map +1 -1
- package/dist/core/agent_helpers.d.ts +10 -0
- package/dist/core/agent_helpers.d.ts.map +1 -1
- package/dist/core/agent_helpers.js +39 -0
- package/dist/core/agent_helpers.js.map +1 -1
- package/dist/core/catalog.d.ts +71 -0
- package/dist/core/catalog.d.ts.map +1 -0
- package/dist/core/catalog.js +176 -0
- package/dist/core/catalog.js.map +1 -0
- package/dist/core/config.d.ts +8 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +12 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/factory.js +16 -16
- package/dist/core/llm.d.ts +7 -0
- package/dist/core/llm.d.ts.map +1 -1
- package/dist/core/llm.js +139 -7
- package/dist/core/llm.js.map +1 -1
- package/dist/core/longdoc.js +5 -5
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +69 -62
- package/dist/core/memory.js.map +1 -1
- package/dist/core/theme.d.ts +46 -0
- package/dist/core/theme.d.ts.map +1 -0
- package/dist/core/theme.js +42 -0
- package/dist/core/theme.js.map +1 -0
- package/dist/web/server.js +542 -519
- package/dist/web/server.js.map +1 -1
- package/docs/AESTHETIC_DESIGN.md +144 -0
- package/docs/OPTIMIZATION_PLAN.md +178 -0
- package/package.json +60 -60
- package/scripts/install.js +48 -48
- package/scripts/link.js +10 -10
- package/setup.bat +79 -79
- package/skill-test-ty2fOA/test.md +10 -10
- package/src/agents/dew.ts +70 -70
- package/src/agents/fair.ts +102 -102
- package/src/agents/fog.ts +48 -48
- package/src/agents/frost.ts +50 -50
- package/src/agents/rain.ts +50 -50
- package/src/agents/snow.ts +239 -239
- package/src/cli/main.ts +425 -316
- package/src/cli/mode.ts +58 -58
- package/src/cli/tui.ts +272 -268
- package/src/core/agent/task.ts +100 -0
- package/src/core/agent.ts +1446 -1549
- package/src/core/agent_helpers.ts +496 -461
- package/src/core/arbitrate.ts +162 -162
- package/src/core/catalog.ts +178 -0
- package/src/core/checkpoint.ts +94 -94
- package/src/core/config.ts +20 -4
- package/src/core/estimate.ts +104 -104
- package/src/core/evolve.ts +191 -191
- package/src/core/factory.ts +627 -627
- package/src/core/filter.ts +103 -103
- package/src/core/graph.ts +156 -156
- package/src/core/icons.ts +53 -53
- package/src/core/index.ts +37 -37
- package/src/core/learn.ts +146 -146
- package/src/core/llm.ts +108 -5
- package/src/core/longdoc.ts +155 -155
- package/src/core/mcp_server.ts +176 -176
- package/src/core/memory.ts +1178 -1171
- package/src/core/profile.ts +255 -255
- package/src/core/router.ts +124 -124
- package/src/core/sandbox.ts +142 -142
- package/src/core/security.ts +243 -243
- package/src/core/skill.ts +342 -342
- package/src/core/theme.ts +65 -0
- package/src/core/tool_router.ts +193 -193
- package/src/core/vector.ts +152 -152
- package/src/core/workspace.ts +150 -150
- package/src/plugins/loader.ts +66 -66
- package/src/skills/loader.ts +46 -46
- package/src/sql.js.d.ts +29 -29
- package/src/tools/builtin.ts +380 -380
- package/src/tools/computer.ts +269 -269
- package/src/tools/delegate.ts +49 -49
- package/src/web/server.ts +660 -634
- package/src/web/tts.ts +93 -93
- package/tests/agent_helpers.test.ts +48 -0
- package/tests/bus.test.ts +121 -121
- package/tests/catalog.test.ts +86 -0
- package/tests/config.test.ts +41 -0
- package/tests/icons.test.ts +45 -45
- package/tests/memory.test.ts +147 -0
- package/tests/router.test.ts +86 -86
- package/tests/schemas.test.ts +51 -51
- package/tests/semantic.test.ts +83 -83
- package/tests/setup.ts +10 -10
- package/tests/skill.test.ts +172 -172
- package/tests/task.test.ts +60 -0
- package/tests/tool.test.ts +108 -108
- package/tests/tool_router.test.ts +71 -71
- package/vitest.config.ts +17 -17
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Model & Provider Catalog — single source of truth.
|
|
4
|
+
*
|
|
5
|
+
* Replaces the three drifting copies of model data (config/models.yaml,
|
|
6
|
+
* the hardcoded setup-wizard list in cli/main.ts, and the README table)
|
|
7
|
+
* with one typed, validated catalog loaded from config/models.yaml.
|
|
8
|
+
*
|
|
9
|
+
* Every model exposed here is intended to be directly callable. Fictional
|
|
10
|
+
* or unreleased models must not appear in models.yaml.
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.PROVIDER_META = void 0;
|
|
47
|
+
exports.loadCatalog = loadCatalog;
|
|
48
|
+
exports.resetCatalogCache = resetCatalogCache;
|
|
49
|
+
exports.listProviders = listProviders;
|
|
50
|
+
exports.modelsFor = modelsFor;
|
|
51
|
+
exports.allModels = allModels;
|
|
52
|
+
exports.getModelInfo = getModelInfo;
|
|
53
|
+
exports.isKnownModel = isKnownModel;
|
|
54
|
+
exports.providerLabel = providerLabel;
|
|
55
|
+
exports.validateModel = validateModel;
|
|
56
|
+
const fs = __importStar(require("fs"));
|
|
57
|
+
const path = __importStar(require("path"));
|
|
58
|
+
const yaml = __importStar(require("yaml"));
|
|
59
|
+
const config_1 = require("./config");
|
|
60
|
+
const logger_1 = require("./logger");
|
|
61
|
+
const log = (0, logger_1.getLogger)("catalog");
|
|
62
|
+
/**
|
|
63
|
+
* Provider display metadata. Ordering matches the setup wizard.
|
|
64
|
+
* Provider *ids* match the keys used in config/models.yaml.
|
|
65
|
+
*/
|
|
66
|
+
exports.PROVIDER_META = {
|
|
67
|
+
deepseek: { id: "deepseek", name: "DeepSeek", envVar: "DEEPSEEK_API_KEY", order: 1 },
|
|
68
|
+
openai: { id: "openai", name: "OpenAI", envVar: "OPENAI_API_KEY", order: 2 },
|
|
69
|
+
anthropic: { id: "anthropic", name: "Anthropic", envVar: "ANTHROPIC_API_KEY", order: 3 },
|
|
70
|
+
google: { id: "google", name: "Google Gemini", envVar: "GEMINI_API_KEY", order: 4 },
|
|
71
|
+
groq: { id: "groq", name: "Groq", envVar: "GROQ_API_KEY", order: 5 },
|
|
72
|
+
openrouter: { id: "openrouter", name: "OpenRouter (多模型)", envVar: "OPENROUTER_API_KEY", order: 6 },
|
|
73
|
+
mistral: { id: "mistral", name: "Mistral", envVar: "MISTRAL_API_KEY", order: 7 },
|
|
74
|
+
xai: { id: "xai", name: "xAI (Grok)", envVar: "XAI_API_KEY", order: 8 },
|
|
75
|
+
ollama: { id: "ollama", name: "Ollama 本地", order: 9 },
|
|
76
|
+
};
|
|
77
|
+
let catalogCache = null;
|
|
78
|
+
function readModelsYaml() {
|
|
79
|
+
const modelPath = path.join(config_1.CONFIG_DIR, "models.yaml");
|
|
80
|
+
try {
|
|
81
|
+
if (!fs.existsSync(modelPath)) {
|
|
82
|
+
log.warn("models_yaml_missing", { path: modelPath });
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
const data = yaml.parse(fs.readFileSync(modelPath, "utf-8"));
|
|
86
|
+
return (data && typeof data === "object" ? data : {});
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
log.error("models_yaml_parse_failed", { error: String(e) });
|
|
90
|
+
return {};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Load (and cache) the full catalog as provider -> models. */
|
|
94
|
+
function loadCatalog() {
|
|
95
|
+
if (catalogCache)
|
|
96
|
+
return catalogCache;
|
|
97
|
+
const raw = readModelsYaml();
|
|
98
|
+
const catalog = new Map();
|
|
99
|
+
for (const [provider, entries] of Object.entries(raw)) {
|
|
100
|
+
if (!Array.isArray(entries))
|
|
101
|
+
continue;
|
|
102
|
+
const models = [];
|
|
103
|
+
for (const e of entries) {
|
|
104
|
+
if (!e || typeof e.name !== "string")
|
|
105
|
+
continue;
|
|
106
|
+
const costIn = e.cost_in ?? 0;
|
|
107
|
+
const costOut = e.cost_out ?? 0;
|
|
108
|
+
models.push({
|
|
109
|
+
id: e.name,
|
|
110
|
+
provider,
|
|
111
|
+
context: e.context ?? 0,
|
|
112
|
+
costIn,
|
|
113
|
+
costOut,
|
|
114
|
+
desc: e.desc ?? "",
|
|
115
|
+
local: provider === "ollama" || (costIn === 0 && costOut === 0),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (models.length > 0)
|
|
119
|
+
catalog.set(provider, models);
|
|
120
|
+
}
|
|
121
|
+
catalogCache = catalog;
|
|
122
|
+
return catalog;
|
|
123
|
+
}
|
|
124
|
+
/** Clear the cache (used by tests). */
|
|
125
|
+
function resetCatalogCache() {
|
|
126
|
+
catalogCache = null;
|
|
127
|
+
}
|
|
128
|
+
/** All provider ids present in the catalog, in wizard order. */
|
|
129
|
+
function listProviders() {
|
|
130
|
+
const present = [...loadCatalog().keys()];
|
|
131
|
+
return present.sort((a, b) => (exports.PROVIDER_META[a]?.order ?? 99) - (exports.PROVIDER_META[b]?.order ?? 99));
|
|
132
|
+
}
|
|
133
|
+
/** Models for a provider (empty array if unknown). */
|
|
134
|
+
function modelsFor(provider) {
|
|
135
|
+
return loadCatalog().get(provider) ?? [];
|
|
136
|
+
}
|
|
137
|
+
/** Flat list of every callable model across providers. */
|
|
138
|
+
function allModels() {
|
|
139
|
+
return [...loadCatalog().values()].flat();
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Look up a model by id. Matching is tolerant of a "provider/" prefix
|
|
143
|
+
* (e.g. "openai/gpt-4o" resolves to the "gpt-4o" entry under openai).
|
|
144
|
+
*/
|
|
145
|
+
function getModelInfo(modelId) {
|
|
146
|
+
const all = allModels();
|
|
147
|
+
const exact = all.find((m) => m.id === modelId);
|
|
148
|
+
if (exact)
|
|
149
|
+
return exact;
|
|
150
|
+
// tolerate provider/ prefix on either side
|
|
151
|
+
const stripped = modelId.includes("/") ? modelId.split("/").slice(1).join("/") : modelId;
|
|
152
|
+
return all.find((m) => m.id === stripped || m.id.split("/").slice(1).join("/") === modelId) ?? null;
|
|
153
|
+
}
|
|
154
|
+
/** Whether a model id is a known, callable model in the catalog. */
|
|
155
|
+
function isKnownModel(modelId) {
|
|
156
|
+
return getModelInfo(modelId) !== null;
|
|
157
|
+
}
|
|
158
|
+
/** Provider display label (falls back to the raw id). */
|
|
159
|
+
function providerLabel(provider) {
|
|
160
|
+
return exports.PROVIDER_META[provider]?.name ?? provider;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Validate that a configured default model is callable. Returns a short
|
|
164
|
+
* list of suggested model ids when it is not, so callers can fail loudly
|
|
165
|
+
* instead of 404-ing at request time.
|
|
166
|
+
*/
|
|
167
|
+
function validateModel(modelId) {
|
|
168
|
+
if (modelId && isKnownModel(modelId))
|
|
169
|
+
return { ok: true, suggestions: [] };
|
|
170
|
+
const suggestions = allModels()
|
|
171
|
+
.filter((m) => !m.local)
|
|
172
|
+
.slice(0, 6)
|
|
173
|
+
.map((m) => m.id);
|
|
174
|
+
return { ok: false, suggestions };
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -65,6 +65,14 @@ export interface SkyloomConfig {
|
|
|
65
65
|
agents: Record<string, AgentConfig>;
|
|
66
66
|
providers?: Record<string, ProviderEntry>;
|
|
67
67
|
models?: Record<string, ModelEntry[]>;
|
|
68
|
+
/** Top-level default model chosen by the setup wizard (e.g. "deepseek-v4-flash"). */
|
|
69
|
+
default_model?: string;
|
|
70
|
+
/** Top-level default provider chosen by the setup wizard. */
|
|
71
|
+
default_provider?: string;
|
|
72
|
+
/** LLM defaults block from default.yaml / user config (snake_case keys). */
|
|
73
|
+
llm?: Record<string, any>;
|
|
74
|
+
/** Other passthrough top-level config (memory, workspace, cli, mcp, plugins, tts…). */
|
|
75
|
+
[key: string]: any;
|
|
68
76
|
}
|
|
69
77
|
/**
|
|
70
78
|
* Load default configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwCH,eAAO,MAAM,eAAe,QAAyB,CAAC;AAuBtD,eAAO,MAAM,UAAU,QAAkB,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,0DAA2D,CAAC;AAwBpF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CA6B/D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAoCnE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.js
CHANGED
|
@@ -214,18 +214,26 @@ function mergeConfigs(defaultCfg, userCfg) {
|
|
|
214
214
|
if (!userCfg) {
|
|
215
215
|
return defaultCfg;
|
|
216
216
|
}
|
|
217
|
+
// Preserve all top-level keys (default_model, default_provider, llm, memory,
|
|
218
|
+
// workspace, …) with the user winning, then deep-merge the known sub-objects.
|
|
217
219
|
return {
|
|
220
|
+
...defaultCfg,
|
|
221
|
+
...userCfg,
|
|
218
222
|
agents: {
|
|
219
223
|
...defaultCfg.agents,
|
|
220
224
|
...userCfg.agents,
|
|
221
225
|
},
|
|
222
226
|
providers: {
|
|
223
|
-
...defaultCfg.providers,
|
|
224
|
-
...userCfg.providers,
|
|
227
|
+
...(defaultCfg.providers || {}),
|
|
228
|
+
...(userCfg.providers || {}),
|
|
225
229
|
},
|
|
226
230
|
models: {
|
|
227
|
-
...defaultCfg.models,
|
|
228
|
-
...userCfg.models,
|
|
231
|
+
...(defaultCfg.models || {}),
|
|
232
|
+
...(userCfg.models || {}),
|
|
233
|
+
},
|
|
234
|
+
llm: {
|
|
235
|
+
...(defaultCfg.llm || {}),
|
|
236
|
+
...(userCfg.llm || {}),
|
|
229
237
|
},
|
|
230
238
|
};
|
|
231
239
|
}
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqHH,4CA6BC;AAmBD,kDAoCC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/factory.js
CHANGED
|
@@ -370,22 +370,22 @@ async function judgeGoalAchievement(snow, goal, results) {
|
|
|
370
370
|
const excerpt = (r.content || '').slice(0, 800);
|
|
371
371
|
return `- [task ${r.id} · agent=${r.agent} · status=${status}] len=${(r.content || '').length}chars\n ${excerpt}`;
|
|
372
372
|
}).join('\n');
|
|
373
|
-
const prompt = `你是一名极严格的项目验收员。验证 sub-task 真的产出了可验证的交付物。
|
|
374
|
-
|
|
375
|
-
## 验收规则(严格执行)
|
|
376
|
-
|
|
377
|
-
1. **「调研/搜集/查询」类**:必须列出具体对象名称和数据/特性/链接。
|
|
378
|
-
2. **「撰写/生成/写作」类**:必须包含实际的文本/代码/markdown。
|
|
379
|
-
3. **「审查/审计/对比」类**:必须列出具体问题点。
|
|
380
|
-
4. **核心交付物缺失绝不容忍**。
|
|
381
|
-
|
|
382
|
-
## 用户原目标
|
|
383
|
-
${goal}
|
|
384
|
-
|
|
385
|
-
## 子任务执行结果
|
|
386
|
-
${bullets}
|
|
387
|
-
|
|
388
|
-
严格按下列 JSON 格式输出(除 JSON 之外不要任何其他字符):
|
|
373
|
+
const prompt = `你是一名极严格的项目验收员。验证 sub-task 真的产出了可验证的交付物。
|
|
374
|
+
|
|
375
|
+
## 验收规则(严格执行)
|
|
376
|
+
|
|
377
|
+
1. **「调研/搜集/查询」类**:必须列出具体对象名称和数据/特性/链接。
|
|
378
|
+
2. **「撰写/生成/写作」类**:必须包含实际的文本/代码/markdown。
|
|
379
|
+
3. **「审查/审计/对比」类**:必须列出具体问题点。
|
|
380
|
+
4. **核心交付物缺失绝不容忍**。
|
|
381
|
+
|
|
382
|
+
## 用户原目标
|
|
383
|
+
${goal}
|
|
384
|
+
|
|
385
|
+
## 子任务执行结果
|
|
386
|
+
${bullets}
|
|
387
|
+
|
|
388
|
+
严格按下列 JSON 格式输出(除 JSON 之外不要任何其他字符):
|
|
389
389
|
{"achieved": true/false, "missing": "若未达成,逐项列出缺什么"}`;
|
|
390
390
|
try {
|
|
391
391
|
const raw = await snow.chatOneshot(prompt);
|
package/dist/core/llm.d.ts
CHANGED
|
@@ -115,6 +115,13 @@ export declare class LLMClient {
|
|
|
115
115
|
private getApiKey;
|
|
116
116
|
private getBaseUrl;
|
|
117
117
|
stream(messages: Record<string, unknown>[], agentName?: string): AsyncGenerator<string>;
|
|
118
|
+
/**
|
|
119
|
+
* Real SSE token streaming for OpenAI-compatible providers (openai, deepseek,
|
|
120
|
+
* groq, openrouter, mistral, xai, ollama). Content + reasoning deltas are
|
|
121
|
+
* yielded as they arrive; tool-call deltas are accumulated by index and
|
|
122
|
+
* emitted once complete. Usage comes from the final `stream_options` chunk.
|
|
123
|
+
*/
|
|
124
|
+
private callOpenAIStream;
|
|
118
125
|
streamWithTools(messages: Record<string, unknown>[], agentName?: string, tools?: string[], _toolRegistry?: ToolRegistry, overrides?: Record<string, unknown>): AsyncGenerator<StreamEvent>;
|
|
119
126
|
}
|
|
120
127
|
//# sourceMappingURL=llm.d.ts.map
|
package/dist/core/llm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/core/llm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA8SD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAKR;AA6FD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,UAAU,CAAkD;IACpE,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,GAAG,CAAuB;gBAGhC,MAAM,EAAE,GAAG,EACX,YAAY,EAAE,YAAY,EAC1B,SAAS,GAAE,MAAM,GAAG,IAAW;IAQjC;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,OAAO,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/core/llm.ts"],"names":[],"mappings":"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"}
|
package/dist/core/llm.js
CHANGED
|
@@ -369,7 +369,10 @@ class LLMClient {
|
|
|
369
369
|
return String(agentCfg.model);
|
|
370
370
|
}
|
|
371
371
|
}
|
|
372
|
-
|
|
372
|
+
// Honor the user's configured default (set by the /setup wizard). YAML uses
|
|
373
|
+
// snake_case; the legacy camelCase read is kept as a last resort.
|
|
374
|
+
const c = this.config;
|
|
375
|
+
return c.default_model || c.llm?.default_model || c.llm?.defaultModel || "gpt-4o";
|
|
373
376
|
}
|
|
374
377
|
/**
|
|
375
378
|
* Get max retries from config.
|
|
@@ -661,13 +664,142 @@ class LLMClient {
|
|
|
661
664
|
const response = await this.complete(messages, agentName);
|
|
662
665
|
yield response.content;
|
|
663
666
|
}
|
|
667
|
+
/**
|
|
668
|
+
* Real SSE token streaming for OpenAI-compatible providers (openai, deepseek,
|
|
669
|
+
* groq, openrouter, mistral, xai, ollama). Content + reasoning deltas are
|
|
670
|
+
* yielded as they arrive; tool-call deltas are accumulated by index and
|
|
671
|
+
* emitted once complete. Usage comes from the final `stream_options` chunk.
|
|
672
|
+
*/
|
|
673
|
+
async *callOpenAIStream(m, messages, tools, temp, maxTok) {
|
|
674
|
+
const apiKey = this.getApiKey(m);
|
|
675
|
+
const baseUrl = this.getBaseUrl(m);
|
|
676
|
+
const body = {
|
|
677
|
+
model: m, messages, temperature: temp ?? 0.7, max_tokens: maxTok ?? 4096,
|
|
678
|
+
stream: true, stream_options: { include_usage: true },
|
|
679
|
+
};
|
|
680
|
+
if (tools?.length) {
|
|
681
|
+
const defs = tools.map(t => this._toolRegistry.get(t)).filter(Boolean);
|
|
682
|
+
if (defs.length)
|
|
683
|
+
body.tools = defs.map(t => ({ type: "function", function: { name: t.name, description: t.description, parameters: this.paramsToSchema(t.parameters || []) } }));
|
|
684
|
+
}
|
|
685
|
+
const resp = await fetch(baseUrl + "/chat/completions", { method: "POST", headers: { "Content-Type": "application/json", Authorization: "Bearer " + apiKey }, body: JSON.stringify(body) });
|
|
686
|
+
if (!resp.ok || !resp.body) {
|
|
687
|
+
const e = new Error("API " + resp.status + ": " + ((await resp.text()).slice(0, 200)));
|
|
688
|
+
e.status_code = resp.status;
|
|
689
|
+
throw e;
|
|
690
|
+
}
|
|
691
|
+
const reader = resp.body.getReader();
|
|
692
|
+
const decoder = new TextDecoder();
|
|
693
|
+
let buf = "";
|
|
694
|
+
const toolAcc = new Map();
|
|
695
|
+
let usage = { promptTokens: 0, completionTokens: 0 };
|
|
696
|
+
let reasoning = "";
|
|
697
|
+
while (true) {
|
|
698
|
+
const { done, value } = await reader.read();
|
|
699
|
+
if (done)
|
|
700
|
+
break;
|
|
701
|
+
buf += decoder.decode(value, { stream: true });
|
|
702
|
+
const lines = buf.split("\n");
|
|
703
|
+
buf = lines.pop() || "";
|
|
704
|
+
for (const line of lines) {
|
|
705
|
+
const t = line.trim();
|
|
706
|
+
if (!t.startsWith("data:"))
|
|
707
|
+
continue;
|
|
708
|
+
const data = t.slice(5).trim();
|
|
709
|
+
if (data === "[DONE]")
|
|
710
|
+
continue;
|
|
711
|
+
let json;
|
|
712
|
+
try {
|
|
713
|
+
json = JSON.parse(data);
|
|
714
|
+
}
|
|
715
|
+
catch {
|
|
716
|
+
continue;
|
|
717
|
+
}
|
|
718
|
+
if (json.usage)
|
|
719
|
+
usage = { promptTokens: json.usage.prompt_tokens || 0, completionTokens: json.usage.completion_tokens || 0 };
|
|
720
|
+
const delta = json.choices?.[0]?.delta;
|
|
721
|
+
if (!delta)
|
|
722
|
+
continue;
|
|
723
|
+
if (delta.content)
|
|
724
|
+
yield { type: "content", text: delta.content };
|
|
725
|
+
if (delta.reasoning_content) {
|
|
726
|
+
reasoning += delta.reasoning_content;
|
|
727
|
+
yield { type: "reasoning", text: delta.reasoning_content };
|
|
728
|
+
}
|
|
729
|
+
if (Array.isArray(delta.tool_calls)) {
|
|
730
|
+
for (const tc of delta.tool_calls) {
|
|
731
|
+
const idx = tc.index ?? 0;
|
|
732
|
+
const acc = toolAcc.get(idx) || { id: "", name: "", args: "" };
|
|
733
|
+
if (tc.id)
|
|
734
|
+
acc.id = tc.id;
|
|
735
|
+
if (tc.function?.name)
|
|
736
|
+
acc.name = tc.function.name;
|
|
737
|
+
if (tc.function?.arguments)
|
|
738
|
+
acc.args += tc.function.arguments;
|
|
739
|
+
toolAcc.set(idx, acc);
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
for (const acc of toolAcc.values()) {
|
|
745
|
+
if (acc.name)
|
|
746
|
+
yield { type: "tool_call", toolCall: { id: acc.id || ("call_" + acc.name), type: "function", function: { name: acc.name, arguments: acc.args || "{}" } } };
|
|
747
|
+
}
|
|
748
|
+
yield { type: "done", usage, reasoningContent: reasoning || undefined };
|
|
749
|
+
}
|
|
664
750
|
async *streamWithTools(messages, agentName, tools, _toolRegistry, overrides) {
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
751
|
+
this.checkBudget();
|
|
752
|
+
const ov = overrides || {};
|
|
753
|
+
const model = typeof ov.model === "string" ? ov.model : this.getModel(agentName);
|
|
754
|
+
const temperature = ov.temperature ?? 0.7;
|
|
755
|
+
const maxTokens = ov.maxTokens ?? 4096;
|
|
756
|
+
const isAnthropic = model.includes("claude") || model.startsWith("anthropic/");
|
|
757
|
+
// Blocking fallback used for Anthropic (different wire format) and on
|
|
758
|
+
// failures before any content has streamed (preserves fallback chain + retry).
|
|
759
|
+
const blockingFallback = async function* () {
|
|
760
|
+
const response = await this.complete(messages, agentName, tools, false, overrides);
|
|
761
|
+
if (response.content)
|
|
762
|
+
yield { type: "content", text: response.content };
|
|
763
|
+
for (const tc of response.toolCalls || [])
|
|
764
|
+
yield { type: "tool_call", toolCall: tc };
|
|
765
|
+
yield { type: "done", usage: response.usage, reasoningContent: response.reasoningContent };
|
|
766
|
+
}.bind(this);
|
|
767
|
+
if (isAnthropic) {
|
|
768
|
+
yield* blockingFallback();
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
let started = false;
|
|
772
|
+
let usage = { promptTokens: 0, completionTokens: 0 };
|
|
773
|
+
try {
|
|
774
|
+
for await (const ev of this.callOpenAIStream(model, messages, tools, temperature, maxTokens)) {
|
|
775
|
+
if (ev.type === "content" || ev.type === "tool_call")
|
|
776
|
+
started = true;
|
|
777
|
+
if (ev.type === "done" && ev.usage)
|
|
778
|
+
usage = ev.usage;
|
|
779
|
+
yield ev;
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
catch (e) {
|
|
783
|
+
if (started) {
|
|
784
|
+
yield { type: "error", text: String(e?.message || e) };
|
|
785
|
+
yield { type: "done", usage };
|
|
786
|
+
return;
|
|
787
|
+
}
|
|
788
|
+
this.log?.warn("stream_failed_fallback", { model, error: String(e?.message || e) });
|
|
789
|
+
yield* blockingFallback();
|
|
790
|
+
return;
|
|
791
|
+
}
|
|
792
|
+
// Usage + cost bookkeeping (mirrors completeWithRetry).
|
|
793
|
+
const name = agentName || "default";
|
|
794
|
+
if (!this.usageStats.has(name))
|
|
795
|
+
this.usageStats.set(name, { prompt_tokens: 0, completion_tokens: 0, calls: 0, cost: 0 });
|
|
796
|
+
const s = this.usageStats.get(name);
|
|
797
|
+
s.prompt_tokens += usage.promptTokens;
|
|
798
|
+
s.completion_tokens += usage.completionTokens;
|
|
799
|
+
s.calls += 1;
|
|
800
|
+
const cost = estimateCost(model, usage.promptTokens, usage.completionTokens);
|
|
801
|
+
s.cost += cost;
|
|
802
|
+
this.totalCost += cost;
|
|
671
803
|
}
|
|
672
804
|
}
|
|
673
805
|
exports.LLMClient = LLMClient;
|