neoctl 0.2.58 → 0.2.59
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/model/agent-settings-boundary.js +7 -9
- package/dist/model/agent-settings-boundary.js.map +1 -1
- package/dist/model/composition-runtime.d.ts +11 -0
- package/dist/model/composition-runtime.js +37 -1
- package/dist/model/composition-runtime.js.map +1 -1
- package/dist/model/settings-store.d.ts +24 -4
- package/dist/model/settings-store.js +137 -10
- package/dist/model/settings-store.js.map +1 -1
- package/dist/model/settings-sync.d.ts +2 -1
- package/dist/model/settings-sync.js +4 -2
- package/dist/model/settings-sync.js.map +1 -1
- package/dist/repl/index.js +7 -6
- package/dist/repl/index.js.map +1 -1
- package/dist/web/index.js +29 -11
- package/dist/web/index.js.map +1 -1
- package/dist/web/model-settings-api.js +4 -3
- package/dist/web/model-settings-api.js.map +1 -1
- package/package.json +1 -1
package/dist/web/index.js
CHANGED
|
@@ -3,8 +3,8 @@ import { trackSettingsGateway } from "../model/settings-sync.js";
|
|
|
3
3
|
import { observeModelSettings } from "../model/settings-sync.js";
|
|
4
4
|
import { modelProtocols } from "../model/context-window.js";
|
|
5
5
|
import { isReasoningEffort } from "../model/model-gateway.js";
|
|
6
|
-
import { ModelSettingsStore,
|
|
7
|
-
import { registerCompositionTools } from "../model/composition-runtime.js";
|
|
6
|
+
import { ModelSettingsStore, routeModel } from "../model/settings-store.js";
|
|
7
|
+
import { registerCompositionTools, createCompositionGateway } from "../model/composition-runtime.js";
|
|
8
8
|
import { handleModelSettingsRequest } from "./model-settings-api.js";
|
|
9
9
|
import { paginateSessions, sessionPageOptions } from "../session/session-pagination.js";
|
|
10
10
|
import { applyToolInputChanges } from "../model/tool-input-stream.js";
|
|
@@ -158,9 +158,10 @@ export async function createWebRuntime(options = {}) {
|
|
|
158
158
|
const settingsStore = new ModelSettingsStore();
|
|
159
159
|
const appliedSettings = settingsStore.read()?.applied;
|
|
160
160
|
const settingsRevisions = new WeakMap();
|
|
161
|
-
const
|
|
161
|
+
const appliedGateway = appliedSettings ? createCompositionGateway(appliedSettings.composition, appliedSettings.connections) : undefined;
|
|
162
|
+
const modelConfig = appliedGateway ? appliedGateway.config : readModelProviderConfig(process.env);
|
|
162
163
|
const communicationLogger = new CommunicationLogger();
|
|
163
|
-
const modelGateway = trackSettingsGateway(new LoggingModelGateway(createModelGatewayFromConfig(modelConfig), communicationLogger), appliedSettings?.revision,
|
|
164
|
+
const modelGateway = trackSettingsGateway(new LoggingModelGateway(appliedGateway ? appliedGateway.gateway : createModelGatewayFromConfig(modelConfig), communicationLogger), appliedSettings?.revision, appliedGateway ? appliedGateway.heldConnections : []);
|
|
164
165
|
const taskStore = new TaskStore();
|
|
165
166
|
const pluginCatalog = normalizeWebRuntimePlugins(options.externalPlugins);
|
|
166
167
|
const pluginOverrides = normalizePluginOverrides(options.sessionPluginOverrides, pluginCatalog);
|
|
@@ -252,11 +253,12 @@ export async function createWebRuntime(options = {}) {
|
|
|
252
253
|
const revision = applied.revision;
|
|
253
254
|
if (settingsRevisions.get(engine) === revision)
|
|
254
255
|
return;
|
|
255
|
-
const
|
|
256
|
-
const gateway = trackSettingsGateway(new LoggingModelGateway(
|
|
256
|
+
const routed = createCompositionGateway(applied.composition, applied.connections), config = routed.config;
|
|
257
|
+
const gateway = trackSettingsGateway(new LoggingModelGateway(routed.gateway, communicationLogger), revision, routed.heldConnections);
|
|
257
258
|
engine.setModelProvider({ modelGateway: gateway, model: config?.model, reasoning: config?.defaultReasoning });
|
|
258
259
|
if (config)
|
|
259
260
|
effectiveModelProviders.set(engine, config.provider);
|
|
261
|
+
effectiveModelRoutes.set(engine, applied);
|
|
260
262
|
registerCompositionTools(tools, applied.composition, applied.connections);
|
|
261
263
|
for (const name of ["web_search", "image_create"]) {
|
|
262
264
|
const tool = tools.get(name);
|
|
@@ -1542,10 +1544,17 @@ export class WebRepl {
|
|
|
1542
1544
|
}
|
|
1543
1545
|
const engine = this.runtime.engine;
|
|
1544
1546
|
const nextModel = model.trim();
|
|
1545
|
-
const
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1547
|
+
const routes = appliedRoutes(engine);
|
|
1548
|
+
if (routes) {
|
|
1549
|
+
if (!routeModel(nextModel, routes.composition, routes.connections))
|
|
1550
|
+
return actionFailure("MODEL_INVALID", "没有已启用的 API 提供此模型");
|
|
1551
|
+
}
|
|
1552
|
+
else {
|
|
1553
|
+
const provider = effectiveModelProviders.get(engine) ?? readModelProviderConfig()?.provider;
|
|
1554
|
+
const metadata = (engine.getActiveModelCatalog?.() ?? loadModelCatalog()).models.find(m => m.modelIds.includes(nextModel));
|
|
1555
|
+
if (metadata && provider && !modelProtocols(metadata).includes(provider))
|
|
1556
|
+
return actionFailure("MODEL_INVALID", "模型不支持当前主连接接口");
|
|
1557
|
+
}
|
|
1549
1558
|
const current = { ...engine.getModelSettings(), ...engine.getPendingSessionSettings() };
|
|
1550
1559
|
const argument = reasoning;
|
|
1551
1560
|
const validationError = validateModelReasoningArgument(nextModel, argument);
|
|
@@ -3211,10 +3220,19 @@ function sanitizeWebAttachments(value) {
|
|
|
3211
3220
|
});
|
|
3212
3221
|
}
|
|
3213
3222
|
const effectiveModelProviders = new WeakMap();
|
|
3223
|
+
const effectiveModelRoutes = new WeakMap();
|
|
3224
|
+
/** Applied priority list for this engine (or the stored one before its first turn); undefined for legacy/env setups. */
|
|
3225
|
+
function appliedRoutes(engine) {
|
|
3226
|
+
const applied = effectiveModelRoutes.get(engine) ?? new ModelSettingsStore().read()?.applied;
|
|
3227
|
+
return applied?.composition.order ? applied : undefined;
|
|
3228
|
+
}
|
|
3214
3229
|
function webCatalog(runtime) {
|
|
3215
3230
|
const catalog = runtime.engine.getActiveModelCatalog?.() ?? loadModelCatalog();
|
|
3216
3231
|
const provider = effectiveModelProviders.get(runtime.engine) ?? readModelProviderConfig()?.provider;
|
|
3217
|
-
const
|
|
3232
|
+
const routes = appliedRoutes(runtime.engine);
|
|
3233
|
+
const models = routes
|
|
3234
|
+
? catalog.models.filter(model => routeModel(model.id, routes.composition, routes.connections))
|
|
3235
|
+
: catalog.models.filter(model => !provider || modelProtocols(model).includes(provider));
|
|
3218
3236
|
const modelIds = [...new Set(models.flatMap(model => model.modelIds.length ? model.modelIds : [model.id]))].sort((left, right) => left.localeCompare(right, "en", { numeric: true }));
|
|
3219
3237
|
return {
|
|
3220
3238
|
commands: replCommandDefinitions,
|