@actalk/inkos-studio 1.3.7 → 1.3.8-canary.38.1
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/api/server.d.ts.map +1 -1
- package/dist/api/server.js +24 -13
- package/dist/api/server.js.map +1 -1
- package/dist/assets/{_baseUniq-DObXPjDJ.js → _baseUniq-C9Y1-hO5.js} +1 -1
- package/dist/assets/{arc-BdlZFnEp.js → arc-BRZyzuQA.js} +1 -1
- package/dist/assets/{architectureDiagram-Q4EWVU46-DWIamVb1.js → architectureDiagram-Q4EWVU46-DjfNd-Bm.js} +1 -1
- package/dist/assets/{blockDiagram-DXYQGD6D-B15h8JDl.js → blockDiagram-DXYQGD6D-BPUhG5Pi.js} +1 -1
- package/dist/assets/{c4Diagram-AHTNJAMY-CLWyVUi5.js → c4Diagram-AHTNJAMY-_tBGcXBa.js} +1 -1
- package/dist/assets/channel-CKcWmxVn.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-CoreBbcY.js → chunk-4BX2VUAB-BiqlhI-C.js} +1 -1
- package/dist/assets/{chunk-4TB4RGXK-hpWBtrjE.js → chunk-4TB4RGXK-CpYM-rO3.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-CAWFhQRP.js → chunk-55IACEB6-DwgOALxJ.js} +1 -1
- package/dist/assets/{chunk-EDXVE4YY-3BFURqnV.js → chunk-EDXVE4YY-CX3dlP_l.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-VbVgWRBP.js → chunk-FMBD7UC4-C8YFZKmg.js} +1 -1
- package/dist/assets/{chunk-OYMX7WX6-P0Kgp9FK.js → chunk-OYMX7WX6-j7_AAktP.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-C4tZsUim.js → chunk-QZHKN3VN-Vo9weHaU.js} +1 -1
- package/dist/assets/{chunk-YZCP3GAM-DGxN4WQV.js → chunk-YZCP3GAM-3YkEYHpK.js} +1 -1
- package/dist/assets/classDiagram-6PBFFD2Q-CiyWFxFc.js +1 -0
- package/dist/assets/classDiagram-v2-HSJHXN6E-CiyWFxFc.js +1 -0
- package/dist/assets/clone-BZHRzjdi.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-uWd9Sg8T.js → cose-bilkent-S5V4N54A-DHN7hc-n.js} +1 -1
- package/dist/assets/{dagre-KV5264BT-Bpno7Sui.js → dagre-KV5264BT-BJc8-9vX.js} +1 -1
- package/dist/assets/{diagram-5BDNPKRD-uXKJXOTX.js → diagram-5BDNPKRD-LBNFe2C7.js} +1 -1
- package/dist/assets/{diagram-G4DWMVQ6-CWAx_MrF.js → diagram-G4DWMVQ6-Bjg4V5BY.js} +1 -1
- package/dist/assets/{diagram-MMDJMWI5-C-apgI2M.js → diagram-MMDJMWI5-D900HokL.js} +1 -1
- package/dist/assets/{diagram-TYMM5635-oE6H2pqq.js → diagram-TYMM5635-D7SwKLL5.js} +1 -1
- package/dist/assets/{erDiagram-SMLLAGMA-BfgDxyIM.js → erDiagram-SMLLAGMA-5sBqfYg6.js} +1 -1
- package/dist/assets/{flowDiagram-DWJPFMVM-BLkrIcA5.js → flowDiagram-DWJPFMVM-BMf7yxYw.js} +1 -1
- package/dist/assets/{ganttDiagram-T4ZO3ILL-Cgyf68mR.js → ganttDiagram-T4ZO3ILL-CTCXaq4s.js} +1 -1
- package/dist/assets/{gitGraphDiagram-UUTBAWPF-dXvSLru9.js → gitGraphDiagram-UUTBAWPF-CWInQLKk.js} +1 -1
- package/dist/assets/{graph-ClhNJ_no.js → graph-DwUZOIST.js} +1 -1
- package/dist/assets/{highlighted-body-OFNGDK62-CAGQz_wQ.js → highlighted-body-OFNGDK62-BSwDZbkV.js} +1 -1
- package/dist/assets/{index-CGOCC7tt.js → index-DZiAZ3ZR.js} +215 -215
- package/dist/assets/{infoDiagram-42DDH7IO-CoU2GA9H.js → infoDiagram-42DDH7IO-sN2TrdG3.js} +1 -1
- package/dist/assets/{ishikawaDiagram-UXIWVN3A-CNYIiSHo.js → ishikawaDiagram-UXIWVN3A-COUwPi4O.js} +1 -1
- package/dist/assets/{journeyDiagram-VCZTEJTY-BIOf8Fr8.js → journeyDiagram-VCZTEJTY-Dae0U8tM.js} +1 -1
- package/dist/assets/{kanban-definition-6JOO6SKY-DoKVT16A.js → kanban-definition-6JOO6SKY-DdXwUHK8.js} +1 -1
- package/dist/assets/{layout-BP7JvoUj.js → layout-4qR_Jz0Y.js} +1 -1
- package/dist/assets/{linear-BaHWv3Cv.js → linear-BWT9oXlV.js} +1 -1
- package/dist/assets/{min-B323zLjI.js → min-fjIdbAVp.js} +1 -1
- package/dist/assets/{mindmap-definition-QFDTVHPH-831I92Ss.js → mindmap-definition-QFDTVHPH-BT4gPcAu.js} +1 -1
- package/dist/assets/{pieDiagram-DEJITSTG-lzn2BmD0.js → pieDiagram-DEJITSTG-ZxucsY3r.js} +1 -1
- package/dist/assets/{quadrantDiagram-34T5L4WZ-CUKMogxF.js → quadrantDiagram-34T5L4WZ-CU0sFVVH.js} +1 -1
- package/dist/assets/{requirementDiagram-MS252O5E-BhrbxNGm.js → requirementDiagram-MS252O5E-C5V4O9K7.js} +1 -1
- package/dist/assets/{sankeyDiagram-XADWPNL6-eCYinXw3.js → sankeyDiagram-XADWPNL6-B-5NWsl3.js} +1 -1
- package/dist/assets/{sequenceDiagram-FGHM5R23-BhykTJJs.js → sequenceDiagram-FGHM5R23-Cd_5KZe-.js} +1 -1
- package/dist/assets/{stateDiagram-FHFEXIEX-BeJDpoIy.js → stateDiagram-FHFEXIEX-C9zWS2i5.js} +1 -1
- package/dist/assets/stateDiagram-v2-QKLJ7IA2-X_Scctdf.js +1 -0
- package/dist/assets/{timeline-definition-GMOUNBTQ-C-Z1gWQE.js → timeline-definition-GMOUNBTQ-DVnXsIGm.js} +1 -1
- package/dist/assets/{vennDiagram-DHZGUBPP-CN_umDEu.js → vennDiagram-DHZGUBPP-B3pdZFAM.js} +1 -1
- package/dist/assets/{wardley-RL74JXVD-BlJ0F_eo.js → wardley-RL74JXVD-B5AYoUfP.js} +1 -1
- package/dist/assets/{wardleyDiagram-NUSXRM2D-7eU2x8b0.js → wardleyDiagram-NUSXRM2D-DeSgssK0.js} +1 -1
- package/dist/assets/{xychartDiagram-5P7HB3ND-BVz98NOl.js → xychartDiagram-5P7HB3ND-BW4TgRPp.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +2 -2
- package/dist/assets/channel-CnRwuGVB.js +0 -1
- package/dist/assets/classDiagram-6PBFFD2Q-C2Hsd0Kb.js +0 -1
- package/dist/assets/classDiagram-v2-HSJHXN6E-C2Hsd0Kb.js +0 -1
- package/dist/assets/clone-ULoi9D6A.js +0 -1
- package/dist/assets/stateDiagram-v2-QKLJ7IA2-C4HmXN_E.js +0 -1
package/dist/api/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,EAqCL,KAAK,aAAa,EAGnB,MAAM,oBAAoB,CAAC;AA2sB5B,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,8EAmrE5E;AAID,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,SAAO,EACX,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
|
package/dist/api/server.js
CHANGED
|
@@ -2,7 +2,7 @@ import { Hono } from "hono";
|
|
|
2
2
|
import { cors } from "hono/cors";
|
|
3
3
|
import { streamSSE } from "hono/streaming";
|
|
4
4
|
import { serve } from "@hono/node-server";
|
|
5
|
-
import { StateManager, PipelineRunner, createLLMClient, createLogger, createInteractionToolsFromDeps, computeAnalytics, loadProjectConfig, loadProjectSession, processProjectInteractionRequest, resolveSessionActiveBook, listBookSessions, loadBookSession, appendManualSessionMessages, createAndPersistBookSession, renameBookSession, deleteBookSession, migrateBookSession, SessionAlreadyMigratedError, runAgentSession, buildAgentSystemPrompt, resolveServicePreset, resolveServiceProviderFamily, resolveServiceModelsBaseUrl, resolveServiceModel, loadSecrets, saveSecrets, listModelsForService, getAllEndpoints, probeModelsFromUpstream, fetchWithProxy, chatCompletion, buildExportArtifact, GLOBAL_ENV_PATH, } from "@actalk/inkos-core";
|
|
5
|
+
import { StateManager, PipelineRunner, createLLMClient, createLogger, createInteractionToolsFromDeps, computeAnalytics, loadProjectConfig, loadProjectSession, processProjectInteractionRequest, resolveSessionActiveBook, listBookSessions, loadBookSession, appendManualSessionMessages, createAndPersistBookSession, renameBookSession, deleteBookSession, migrateBookSession, SessionAlreadyMigratedError, runAgentSession, buildAgentSystemPrompt, resolveServicePreset, resolveServiceProviderFamily, resolveServiceModelsBaseUrl, resolveServiceModel, loadSecrets, saveSecrets, listModelsForService, isApiKeyOptionalForEndpoint, getAllEndpoints, probeModelsFromUpstream, fetchWithProxy, chatCompletion, buildExportArtifact, GLOBAL_ENV_PATH, } from "@actalk/inkos-core";
|
|
6
6
|
import { access, readFile, readdir, writeFile } from "node:fs/promises";
|
|
7
7
|
import { isAbsolute, join, relative, resolve } from "node:path";
|
|
8
8
|
import { isSafeBookId } from "./safety.js";
|
|
@@ -407,7 +407,7 @@ function formatServiceProbeError(args) {
|
|
|
407
407
|
upstreamDetail ? `\n上游返回:${upstreamDetail}` : "",
|
|
408
408
|
].filter(Boolean).join("\n");
|
|
409
409
|
}
|
|
410
|
-
if (args.service === "moonshot" || args.service === "kimiCodingPlan") {
|
|
410
|
+
if (args.service === "moonshot" || args.service === "kimiCodingPlan" || args.service === "kimicode") {
|
|
411
411
|
return [
|
|
412
412
|
`${args.label ?? args.service} 测试连接失败。`,
|
|
413
413
|
context,
|
|
@@ -482,7 +482,8 @@ async function probeServiceCapabilities(args) {
|
|
|
482
482
|
const serviceFirstModel = endpoint?.checkModel
|
|
483
483
|
?? preset?.knownModels?.[0]
|
|
484
484
|
?? endpoint?.models.find((model) => model.enabled !== false)?.id;
|
|
485
|
-
const
|
|
485
|
+
const useDynamicLocalModels = baseService === "ollama";
|
|
486
|
+
const useEndpointCheckModel = !useDynamicLocalModels && !isCustomServiceId(args.service) && Boolean(endpoint?.checkModel);
|
|
486
487
|
const configService = typeof llm.service === "string" ? llm.service : undefined;
|
|
487
488
|
const configModel = !useEndpointCheckModel && configService === args.service
|
|
488
489
|
? typeof llm.defaultModel === "string"
|
|
@@ -493,7 +494,7 @@ async function probeServiceCapabilities(args) {
|
|
|
493
494
|
: undefined;
|
|
494
495
|
const useCustomFallbacks = isCustomServiceId(args.service);
|
|
495
496
|
const modelCandidates = buildModelCandidates({
|
|
496
|
-
preferredModel: args.preferredModel ?? serviceFirstModel,
|
|
497
|
+
preferredModel: args.preferredModel ?? (useDynamicLocalModels ? discoveredModels[0]?.id ?? serviceFirstModel : serviceFirstModel),
|
|
497
498
|
configModel,
|
|
498
499
|
envModel: useCustomFallbacks ? envModel : undefined,
|
|
499
500
|
discoveredModels: useEndpointCheckModel ? [] : discoveredModels,
|
|
@@ -1033,19 +1034,24 @@ export function createStudioServer(initialConfig, root) {
|
|
|
1033
1034
|
app.post("/api/v1/services/:service/test", async (c) => {
|
|
1034
1035
|
const service = c.req.param("service");
|
|
1035
1036
|
const { apiKey, baseUrl, apiFormat, stream } = await c.req.json();
|
|
1036
|
-
if (!apiKey?.trim()) {
|
|
1037
|
-
return c.json({ ok: false, error: "API Key 不能为空" }, 400);
|
|
1038
|
-
}
|
|
1039
1037
|
const resolvedBaseUrl = await resolveConfiguredServiceBaseUrl(root, service, baseUrl);
|
|
1040
1038
|
if (!resolvedBaseUrl) {
|
|
1041
1039
|
return c.json({ ok: false, error: `未知服务商: ${service}` }, 400);
|
|
1042
1040
|
}
|
|
1041
|
+
const baseService = isCustomServiceId(service) ? "custom" : service;
|
|
1042
|
+
const apiKeyOptional = isApiKeyOptionalForEndpoint({
|
|
1043
|
+
provider: resolveServiceProviderFamily(baseService) ?? "openai",
|
|
1044
|
+
baseUrl: resolvedBaseUrl,
|
|
1045
|
+
});
|
|
1046
|
+
if (!apiKey?.trim() && !apiKeyOptional) {
|
|
1047
|
+
return c.json({ ok: false, error: "API Key 不能为空" }, 400);
|
|
1048
|
+
}
|
|
1043
1049
|
const rawConfig = await loadRawConfig(root).catch(() => ({}));
|
|
1044
1050
|
const llm = rawConfig.llm ?? {};
|
|
1045
1051
|
const probe = await probeServiceCapabilities({
|
|
1046
1052
|
root,
|
|
1047
1053
|
service,
|
|
1048
|
-
apiKey: apiKey
|
|
1054
|
+
apiKey: apiKey?.trim() ?? "",
|
|
1049
1055
|
baseUrl: resolvedBaseUrl,
|
|
1050
1056
|
preferredApiFormat: apiFormat,
|
|
1051
1057
|
preferredStream: stream,
|
|
@@ -1149,10 +1155,15 @@ export function createStudioServer(initialConfig, root) {
|
|
|
1149
1155
|
const refresh = c.req.query("refresh") === "1";
|
|
1150
1156
|
const secrets = await loadSecrets(root);
|
|
1151
1157
|
const apiKey = c.req.query("apiKey") || secrets.services[service]?.apiKey || "";
|
|
1152
|
-
// No key = no models
|
|
1153
|
-
if (!apiKey)
|
|
1154
|
-
return c.json({ models: [] });
|
|
1155
1158
|
const resolvedBaseUrl = await resolveConfiguredServiceBaseUrl(root, service);
|
|
1159
|
+
const baseService = isCustomServiceId(service) ? "custom" : service;
|
|
1160
|
+
const apiKeyOptional = isApiKeyOptionalForEndpoint({
|
|
1161
|
+
provider: resolveServiceProviderFamily(baseService) ?? "openai",
|
|
1162
|
+
baseUrl: resolvedBaseUrl,
|
|
1163
|
+
});
|
|
1164
|
+
// No key = no models, except local/self-hosted endpoints such as Ollama.
|
|
1165
|
+
if (!apiKey && !apiKeyOptional)
|
|
1166
|
+
return c.json({ models: [] });
|
|
1156
1167
|
// Cache by service + resolved baseUrl + apiKey fingerprint; valid for 10 min unless ?refresh=1
|
|
1157
1168
|
const cacheKey = `${service}::${resolvedBaseUrl ?? ""}::${apiKey.slice(-8)}`;
|
|
1158
1169
|
if (!refresh) {
|
|
@@ -1518,12 +1529,12 @@ export function createStudioServer(initialConfig, root) {
|
|
|
1518
1529
|
// Create pipeline with resolved model (so sub_agent tools use the frontend-selected model)
|
|
1519
1530
|
// Don't spread config.llm — its baseUrl/provider belong to the old service.
|
|
1520
1531
|
// Let createLLMClient resolve baseUrl from the service preset.
|
|
1521
|
-
const pipelineClient = (reqService && reqModel &&
|
|
1532
|
+
const pipelineClient = (reqService && reqModel && resolvedModel)
|
|
1522
1533
|
? createLLMClient({
|
|
1523
1534
|
...config.llm,
|
|
1524
1535
|
service: configuredEntry?.service ?? reqService,
|
|
1525
1536
|
model: reqModel,
|
|
1526
|
-
apiKey: resolvedApiKey,
|
|
1537
|
+
apiKey: resolvedApiKey ?? "",
|
|
1527
1538
|
...(configuredEntry?.apiFormat ? { apiFormat: configuredEntry.apiFormat } : {}),
|
|
1528
1539
|
...(configuredEntry?.stream !== undefined ? { stream: configuredEntry.stream } : {}),
|
|
1529
1540
|
baseUrl: configuredEntry?.baseUrl ?? "",
|