nolo-cli 0.76.0 → 0.77.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/{_executeModel-I3XRMAJ2.js → _executeModel-G6BRN2BO.js} +21 -21
- package/{agentDeleteCommand-DCTG26JW.js → agentDeleteCommand-C5JTDBIX.js} +15 -14
- package/{agentEmailCommands-MRRHBLDQ.js → agentEmailCommands-AYSYNUSH.js} +28 -27
- package/{agentListCommands-CUE46CSP.js → agentListCommands-CVFL3P3D.js} +17 -16
- package/{agentMachineCommands-FYDEKBIO.js → agentMachineCommands-2EPX7IYC.js} +15 -14
- package/{agentProviderCommands-X3FA6BUM.js → agentProviderCommands-EHR3PV2V.js} +1 -1
- package/{agentRecordCommands-P2MSNP7R.js → agentRecordCommands-DPZVHOOA.js} +27 -26
- package/{agentRunCommand-YJOW3VB3.js → agentRunCommand-BE53VNNN.js} +27 -26
- package/{agentRuntimeLocal-T43UNWAY.js → agentRuntimeLocal-BPN5IOFT.js} +13 -12
- package/{agentSlice-7GDS5Q2S.js → agentSlice-PYJFXGZL.js} +1 -1
- package/{appDeleteCommands-YBKY3VEI.js → appDeleteCommands-TREMNXCA.js} +16 -15
- package/{appDeployCommands-EBC76HO4.js → appDeployCommands-7FYCMERT.js} +16 -15
- package/{appDeployStatusCommands-WXRC5KEK.js → appDeployStatusCommands-7LAYH7IX.js} +16 -15
- package/{appGetCommands-VZZQEDOV.js → appGetCommands-BONTQ2XH.js} +16 -15
- package/{appListCommands-HYSPVQ77.js → appListCommands-BYIELWUL.js} +16 -15
- package/{authCommand-E4GDVKMW.js → authCommand-J5C7GS33.js} +9 -8
- package/{builtinSkillRegistry-5SYVTS6Z.js → builtinSkillRegistry-YITVDLWG.js} +1 -1
- package/{chatQueueReduxAdapter-CXEWIDFZ.js → chatQueueReduxAdapter-PIOXZBGH.js} +8 -8
- package/{chunk-UO66QKGI.js → chunk-2F4VYGFW.js} +2 -2
- package/{chunk-3T4PRBHV.js → chunk-3DZIWHJ6.js} +1 -1
- package/{chunk-IO7DYRPW.js → chunk-4PAFEM6V.js} +3 -3
- package/{chunk-BNMZ7QUV.js → chunk-5DAMTON3.js} +1 -1
- package/chunk-5ZUL4CUO.js +10 -0
- package/{chunk-WSOMSDQB.js → chunk-6HCLDVEI.js} +35 -1
- package/{chunk-GRJTR4PU.js → chunk-6LWO3QQS.js} +2 -2
- package/{chunk-JC2WQS66.js → chunk-7TEU3WX2.js} +17 -13
- package/{chunk-L2VNQQ7M.js → chunk-ACFF7U3F.js} +273 -13
- package/{chunk-MFW4BGJS.js → chunk-AGX5TE5W.js} +1 -1
- package/{chunk-UWMQ6FPM.js → chunk-ASGDO77C.js} +118 -1
- package/{chunk-4FRNB4ZG.js → chunk-D4TJCP3V.js} +3 -3
- package/{chunk-TGRQUFLU.js → chunk-DNQPPRHY.js} +1 -1
- package/{chunk-NVHJWYUO.js → chunk-DQD4PYQY.js} +13 -13
- package/{chunk-KO7QCXLL.js → chunk-FSISQCCB.js} +13 -13
- package/{chunk-VQD6BTML.js → chunk-FWGPT6VI.js} +3 -3
- package/{chunk-Y2IFJ7VM.js → chunk-HLRYI5XO.js} +1 -1
- package/{chunk-IMDA4FW4.js → chunk-IEILL33V.js} +48 -37
- package/{chunk-6RCZYDDC.js → chunk-JRFQPOPS.js} +3 -3
- package/{chunk-P3AS5IPM.js → chunk-JT7FRJP5.js} +1 -0
- package/{chunk-X77EN2BJ.js → chunk-K7M3MWCE.js} +2 -2
- package/{chunk-VARZWSKW.js → chunk-LGSXBNWH.js} +1 -1
- package/{chunk-EVBFYPDC.js → chunk-MC4XLIJ7.js} +6 -2
- package/{chunk-DS3SQTDT.js → chunk-MJHQ3NRV.js} +1 -1
- package/{chunk-W7PGACND.js → chunk-MRT4KARW.js} +7 -7
- package/{chunk-T4F2EQGN.js → chunk-ND2J3NRB.js} +2 -2
- package/{chunk-LEYH5NOH.js → chunk-PGO7O65Q.js} +3 -3
- package/{chunk-FMODTASJ.js → chunk-Q5FJJ6XI.js} +1 -7
- package/{chunk-Q246OUG5.js → chunk-RHB6OCZS.js} +3 -3
- package/{chunk-ZSG2AQU4.js → chunk-RJ3TDODF.js} +50 -11
- package/{chunk-EXWOCYCR.js → chunk-TIJK4PBP.js} +9 -4
- package/{chunk-S6STPUMG.js → chunk-UDK3ZSMN.js} +1 -1
- package/{chunk-ZKGIAM7I.js → chunk-UQ45IHLM.js} +1 -1
- package/{chunk-VW3YGKWR.js → chunk-UQYEVBMM.js} +89 -15
- package/{chunk-Q4KVAB6L.js → chunk-UUVQJZ75.js} +26 -7
- package/{chunk-OCL2YCAU.js → chunk-VEJ4BOQV.js} +38 -38
- package/{chunk-6H7GN3JL.js → chunk-VRLI2WNW.js} +10 -1
- package/{chunk-23RQKXP6.js → chunk-WS22FPWT.js} +1 -1
- package/{chunk-AYT2OKNM.js → chunk-XIYOAH3S.js} +2 -2
- package/{chunk-ZIHJVHFH.js → chunk-Z33ARZCP.js} +1 -1
- package/{contentThunks-Y2ACIFDB.js → contentThunks-RYZTYVUV.js} +9 -9
- package/{createAgentAutomationAction-TNE3QMJR.js → createAgentAutomationAction-GUBB2LWY.js} +9 -9
- package/{createDialogAction-BMGHBTQB.js → createDialogAction-577E6FB2.js} +10 -10
- package/{createPageAction-FFNIZPIS.js → createPageAction-4CNYIRJ5.js} +9 -9
- package/{dialogCommands-3JC3BIXC.js → dialogCommands-U4RQIRKK.js} +16 -15
- package/{dialogSlice-3E7Z7HZV.js → dialogSlice-YXMORK5T.js} +8 -8
- package/{docCreateCommands-6LNQLCTA.js → docCreateCommands-AXXATGCL.js} +15 -14
- package/{docDeleteCommands-ZJOAPWZS.js → docDeleteCommands-CRPIFYFA.js} +16 -15
- package/{docReadCommands-LJTRSBG6.js → docReadCommands-4IMZXFDR.js} +15 -14
- package/{docStore-R47ABXBB.js → docStore-3U5FBN2O.js} +1 -1
- package/{docUpdateCommands-7P3QF3N2.js → docUpdateCommands-RRPRZXCE.js} +15 -14
- package/{getPricing-TV6ZB7ES.js → getPricing-F2C65RIX.js} +3 -3
- package/{handleSendMessageAction-FFYOGXAO.js → handleSendMessageAction-BQIRKHC6.js} +8 -8
- package/index.js +50 -50
- package/{machineCommands-FN5GGQV3.js → machineCommands-RNBADNTE.js} +26 -25
- package/{machineWsRunDispatch-H47IA7ZT.js → machineWsRunDispatch-7J6WNF57.js} +26 -25
- package/{models-CMXFDBQH.js → models-WW7VFNXB.js} +2 -2
- package/package.json +1 -1
- package/{providerPresetApply-D2GGHPI7.js → providerPresetApply-SAJAK7C3.js} +6 -6
- package/{providerRegistry-MU6C4ABD.js → providerRegistry-COD57OVY.js} +6 -6
- package/{readlineWorkspace-2RP77YDN.js → readlineWorkspace-ZO2W3N4U.js} +30 -29
- package/{runAgentClientLoop-CEBV5UPD.js → runAgentClientLoop-KJZ7DK6D.js} +19 -19
- package/{spaceCommands-JHT4ALCQ.js → spaceCommands-VZRYKVWZ.js} +15 -14
- package/{streamAgentChatTurn-SFCZP4GY.js → streamAgentChatTurn-L3SO4N2R.js} +26 -24
- package/{tools-K3YOTESV.js → tools-GRV74JPO.js} +16 -16
- package/tuiSummaryLlmCaller-ATDKMGI5.js +127 -0
- package/{updateDialogTitleAction-CSPKYQRO.js → updateDialogTitleAction-KRUWX66L.js} +29 -12
- package/tuiSummaryLlmCaller-T2OA5ZVB.js +0 -116
|
@@ -3,12 +3,14 @@ var BASE_BUILTIN_DIALOG_LLM_CONFIG = {
|
|
|
3
3
|
apiSource: "platform",
|
|
4
4
|
useServerProxy: true
|
|
5
5
|
};
|
|
6
|
+
var BUILTIN_DIALOG_LLM_FALLBACK_MODEL = "deepseek-flash";
|
|
7
|
+
var BUILTIN_DIALOG_LLM_CHAT_FALLBACK_MODEL = "glm-5-3-flash";
|
|
6
8
|
var BUILTIN_TITLE_LLM_CONFIG = {
|
|
7
9
|
...BASE_BUILTIN_DIALOG_LLM_CONFIG,
|
|
8
10
|
provider: "nolo",
|
|
9
11
|
id: "builtin-dialog-title-llm",
|
|
10
12
|
name: "Builtin Dialog Title LLM",
|
|
11
|
-
model: "
|
|
13
|
+
model: "mimo-v2.6-flash",
|
|
12
14
|
prompt: "You are a title generator for chat history. \u4F60\u53EA\u505A\u4E00\u4EF6\u4E8B\uFF1A\u6839\u636E\u5BF9\u8BDD\u5185\u5BB9\u8F93\u51FA\u6700\u7EC8\u6807\u9898\u3002\u786C\u6027\u89C4\u5219\uFF1A1) \u53EA\u8F93\u51FA\u6807\u9898\u8FD9\u4E00\u884C\uFF1B\u4E25\u7981\u8F93\u51FA\u63A8\u7406\u3001\u5206\u6790\u3001\u6B65\u9AA4\u3001\u89E3\u91CA\u3001\u524D\u8A00\u3001\u540E\u8BB0\u3001\u7FFB\u8BD1\u3001\u81F4\u6B49\u6216\u4EFB\u4F55\u989D\u5916\u8BF4\u660E\u30022) \u4E0D\u8981\u56DE\u7B54\u7528\u6237\u8BF7\u6C42\uFF0C\u4E0D\u8981\u5199\u6458\u8981\uFF0C\u53EA\u7ED9\u6807\u9898\u7ED3\u679C\u30023) \u6807\u9898\u5C3D\u91CF\u77ED\uFF1A\u901A\u5E38 2-5 \u4E2A\u8BCD\uFF0C\u82F1\u6587\u4E0D\u8D85\u8FC7 6 \u4E2A\u8BCD\u30024) \u4F7F\u7528\u5BF9\u8BDD\u4E3B\u8BED\u8A00\uFF1B\u6DF7\u5408\u8BED\u8A00\u65F6\u4F18\u5148\u7528\u6237\u4E3B\u8981\u8BED\u8A00\u30025) \u4F18\u5148\u590D\u7528\u5BF9\u8BDD\u4E2D\u7684\u5177\u4F53\u4E3B\u9898\u8BCD\uFF0C\u907F\u514D issue\u3001help\u3001discussion\u3001analysis\u3001update \u8FD9\u7C7B\u7A7A\u6CDB\u8BCD\u30026) \u5FFD\u7565 tool JSON\u3001\u51FD\u6570\u540D\u3001branch label\u3001agent \u540D\u3001\u7CFB\u7EDF\u6307\u4EE4\u548C\u7F16\u6392\u75D5\u8FF9\uFF08\u5982 GPT\u3001Claude\u3001Gemini\uFF09\uFF1B\u6807\u9898\u8981\u843D\u5728\u7528\u6237\u771F\u6B63\u8BA8\u8BBA\u7684\u5BF9\u8C61\u6216\u51B3\u7B56\u4E0A\u30027) \u66F4\u504F\u597D\u201C\u5BF9\u8C61 + \u52A8\u4F5C/\u5224\u65AD\u201D\u7684\u77ED\u6807\u9898\uFF0C\u4F8B\u5982\u201CAI \u90AE\u4EF6\u52A9\u624B\u53D6\u820D\u201D\u201C\u4E1C\u4EAC\u56DB\u65E5\u6162\u65C5\u884C\u201D\u201C\u91CD\u590D\u6263\u8D39\u9000\u6B3E\u201D\u30028) \u7EAF\u6587\u672C\uFF0C\u4E0D\u8981\u9879\u76EE\u7B26\u53F7\u3001\u7F16\u53F7\u3001markdown\u3001emoji\u3002\u6700\u7EC8\u53EA\u8FD4\u56DE\u6807\u9898\u6587\u672C\u3002 Output only the title text."
|
|
13
15
|
};
|
|
14
16
|
var BUILTIN_SUMMARY_LLM_CONFIG = {
|
|
@@ -16,13 +18,15 @@ var BUILTIN_SUMMARY_LLM_CONFIG = {
|
|
|
16
18
|
provider: "nolo",
|
|
17
19
|
id: "builtin-dialog-summary-llm",
|
|
18
20
|
name: "Builtin Dialog Summary LLM",
|
|
19
|
-
model: "
|
|
21
|
+
model: "mimo-v2.6-flash",
|
|
20
22
|
// @deprecated 用 COMPACTION_SUMMARY_SYSTEM_PROMPT(packages/ai/context/compactionShared.ts)。
|
|
21
23
|
// 生产代码已全部迁移;此旧两段式 prompt 仅被 scripts/probes/dialog 探针脚本使用,待探针迁移后删除。
|
|
22
24
|
prompt: "\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u5BF9\u8BDD\u8BB0\u5FC6\u52A9\u7406\u3002\u8BF7\u57FA\u4E8E\u3010\u73B0\u6709\u8BB0\u5FC6\u3011\u548C\u3010\u65B0\u589E\u5BF9\u8BDD\u3011\uFF0C\u8F93\u51FA\u4E00\u4EFD\u66F4\u65B0\u540E\u7684\u5BF9\u8BDD\u8BB0\u5FC6\u6863\u6848\u3002\u4E25\u683C\u53EA\u8F93\u51FA\u4E0B\u9762\u4E24\u90E8\u5206\uFF0C\u6807\u9898\u5FC5\u987B\u5B8C\u5168\u4E00\u81F4\uFF1A\n\u5173\u952E\u4E8B\u5B9E\u6863\u6848\n- ...\n\u5BF9\u8BDD\u5267\u60C5\u6458\u8981\n- ...\n\u8981\u6C42\uFF1A1) \u4F7F\u7528\u5BF9\u8BDD\u4E3B\u8BED\u8A00\uFF1B\u6DF7\u5408\u8BED\u8A00\u65F6\u4F18\u5148\u8DDF\u968F\u7528\u6237\u4E3B\u8981\u8BED\u8A00\uFF0C\u4E13\u6709\u540D\u8BCD\u4FDD\u7559\u539F\u6587\u30022) \u5173\u952E\u4E8B\u5B9E\u6863\u6848\u53EA\u4FDD\u7559\u4E4B\u540E\u7EE7\u7EED\u5BF9\u8BDD\u4ECD\u6709\u4EF7\u503C\u7684\u4FE1\u606F\uFF0C\u4F8B\u5982\u7528\u6237\u504F\u597D\u3001\u76EE\u6807\u3001\u7EA6\u675F\u3001\u6280\u672F\u6808\u3001\u786E\u5B9A\u7684\u6587\u4EF6\u540D/\u53D8\u91CF\u540D\u3001\u6838\u5FC3\u51B3\u7B56\u3001\u5F85\u529E\u4E8B\u9879\u30023) \u5BF9\u8BDD\u5267\u60C5\u6458\u8981\u5148\u6781\u7B80\u6982\u62EC\u65E7\u4E0A\u4E0B\u6587\uFF0C\u518D\u66F4\u8BE6\u7EC6\u8BB0\u5F55\u6700\u8FD1\u65B0\u589E\u7684\u8FDB\u5C55\u3001\u5206\u6B67\u3001\u7ED3\u8BBA\u548C\u4E0B\u4E00\u6B65\u30024) \u5FFD\u7565\u5BD2\u6684\u3001\u91CD\u590D\u5C1D\u8BD5\u3001\u5DF2\u653E\u5F03\u65B9\u6848\u548C\u65E0\u4EF7\u503C\u5E9F\u8BDD\u30025) \u4E0D\u8981\u7F16\u9020\u672A\u51FA\u73B0\u7684\u4FE1\u606F\uFF0C\u4E0D\u8981\u8F93\u51FA\u5F00\u573A\u767D\u3001\u7ED3\u675F\u8BED\u3001markdown \u4EE3\u7801\u5757\u6216\u989D\u5916\u7AE0\u8282\u3002"
|
|
23
25
|
};
|
|
24
26
|
|
|
25
27
|
export {
|
|
28
|
+
BUILTIN_DIALOG_LLM_FALLBACK_MODEL,
|
|
29
|
+
BUILTIN_DIALOG_LLM_CHAT_FALLBACK_MODEL,
|
|
26
30
|
BUILTIN_TITLE_LLM_CONFIG,
|
|
27
31
|
BUILTIN_SUMMARY_LLM_CONFIG
|
|
28
32
|
};
|
|
@@ -5,14 +5,14 @@ import {
|
|
|
5
5
|
inlineImageUrlsForCustomProvider,
|
|
6
6
|
prepareTools,
|
|
7
7
|
shouldInlineImageUrlsForAgent
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-FWGPT6VI.js";
|
|
9
9
|
import {
|
|
10
10
|
INVALID_TOOL_ARGS_REPLACEMENT,
|
|
11
11
|
buildInvalidToolCallSelfHealResult,
|
|
12
12
|
parseToolCallArguments,
|
|
13
13
|
performFetchRequest,
|
|
14
14
|
sanitizeOutboundMessages
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-7TEU3WX2.js";
|
|
16
16
|
import {
|
|
17
17
|
createSSEParser,
|
|
18
18
|
createToolRunId,
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
toolRunSetPending,
|
|
24
24
|
toolRunStarted,
|
|
25
25
|
toolRunSucceeded
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-DQD4PYQY.js";
|
|
27
27
|
import {
|
|
28
28
|
getPublicImageAgentMode
|
|
29
29
|
} from "./chunk-VIDPVFP3.js";
|
|
@@ -35,10 +35,10 @@ import {
|
|
|
35
35
|
messageStreamEnd,
|
|
36
36
|
messageStreaming,
|
|
37
37
|
updateToolMessage
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-ACFF7U3F.js";
|
|
39
39
|
import {
|
|
40
40
|
streamAgentChatTurn
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-D4TJCP3V.js";
|
|
42
42
|
import {
|
|
43
43
|
addActiveController,
|
|
44
44
|
removeActiveController,
|
|
@@ -56,10 +56,10 @@ import {
|
|
|
56
56
|
import {
|
|
57
57
|
EMPTY_ASSISTANT_REPAIR_PROMPT,
|
|
58
58
|
getModelInfo
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-VEJ4BOQV.js";
|
|
60
60
|
import {
|
|
61
61
|
getApiEndpoint
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-VRLI2WNW.js";
|
|
63
63
|
import {
|
|
64
64
|
toErrorMessage
|
|
65
65
|
} from "./chunk-HNMXYYJR.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getModelConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VRLI2WNW.js";
|
|
4
4
|
import {
|
|
5
5
|
isPlatformHostedDeepseekModel,
|
|
6
6
|
isPlatformHostedOpenAIImageModel,
|
|
7
7
|
resolvePlatformHostedRouting
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-ASGDO77C.js";
|
|
9
9
|
import {
|
|
10
10
|
asTrimmedLowercaseString
|
|
11
11
|
} from "./chunk-QSJ3HFEF.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
clearCliLocalRuntimePreparedAgentCache
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IEILL33V.js";
|
|
4
4
|
import {
|
|
5
5
|
getReadableCliDb
|
|
6
6
|
} from "./chunk-LS2ZANRJ.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
resolveAgentRecordFromHybridStore,
|
|
13
13
|
sanitizeAgentRecordForCliOutput,
|
|
14
14
|
writeAgentRecord
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-HLRYI5XO.js";
|
|
16
16
|
import {
|
|
17
17
|
resolveCliAgentKeyInput
|
|
18
18
|
} from "./chunk-SPAQ4PVV.js";
|
|
@@ -212,7 +212,7 @@ async function runAgentCreateCommand(args, deps = {}) {
|
|
|
212
212
|
clearCliLocalRuntimePreparedAgentCache();
|
|
213
213
|
let verifyResult;
|
|
214
214
|
if (parsed.verify) {
|
|
215
|
-
const { verifyCustomProvider } = await import("./agentProviderCommands-
|
|
215
|
+
const { verifyCustomProvider } = await import("./agentProviderCommands-EHR3PV2V.js");
|
|
216
216
|
const rec = built.nextRecord;
|
|
217
217
|
verifyResult = await verifyCustomProvider({
|
|
218
218
|
providerUrl: rec.customProviderUrl,
|
|
@@ -93,17 +93,11 @@ function buildDevinOAuthCredential(token, now = Date.now()) {
|
|
|
93
93
|
obtainedAt: now
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
-
function isDevinOAuthAgent(agent) {
|
|
97
|
-
const ref = agent.apiKeyRef?.trim().toLowerCase();
|
|
98
|
-
const prov = agent.provider?.trim().toLowerCase();
|
|
99
|
-
return ref === "devin" || prov === "devin";
|
|
100
|
-
}
|
|
101
96
|
|
|
102
97
|
export {
|
|
103
98
|
DEVIN_CONNECT_URL,
|
|
104
99
|
buildDevinAuthUrl,
|
|
105
100
|
extractDevinToken,
|
|
106
101
|
detectLocalDevinCredentials,
|
|
107
|
-
buildDevinOAuthCredential
|
|
108
|
-
isDevinOAuthAgent
|
|
102
|
+
buildDevinOAuthCredential
|
|
109
103
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createCliLocalRuntimeAdapter,
|
|
3
3
|
summarizeEndpoint
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-IEILL33V.js";
|
|
5
5
|
import {
|
|
6
6
|
clipMultilineText
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-DQD4PYQY.js";
|
|
8
8
|
import {
|
|
9
9
|
runLocalAgentTurn
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-UQYEVBMM.js";
|
|
11
11
|
import {
|
|
12
12
|
applyToolSurfaceConstraints
|
|
13
13
|
} from "./chunk-OKCTLCKS.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ANTIGRAVITY_CLOUD_CODE_BASE_URL
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MJHQ3NRV.js";
|
|
4
4
|
import {
|
|
5
5
|
kimiCodeModels,
|
|
6
6
|
moonshotModels,
|
|
@@ -9,13 +9,13 @@ import {
|
|
|
9
9
|
qwenTokenPlanModels,
|
|
10
10
|
stepfunModels,
|
|
11
11
|
stepfunStepPlanModels
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-VRLI2WNW.js";
|
|
13
13
|
import {
|
|
14
14
|
PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE,
|
|
15
15
|
PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE,
|
|
16
16
|
PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE,
|
|
17
17
|
PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-ASGDO77C.js";
|
|
19
19
|
|
|
20
20
|
// packages/integrations/commandcode/models.ts
|
|
21
21
|
var commandCodeModels = [
|
|
@@ -252,6 +252,15 @@ var STEPFUN_MODEL_OPTIONS = stepfunModels.map((m, i) => ({
|
|
|
252
252
|
hasVision: m.hasVision,
|
|
253
253
|
...i === 0 ? { recommended: true } : {}
|
|
254
254
|
}));
|
|
255
|
+
var MIMO_MODEL_OPTIONS = [
|
|
256
|
+
{ id: "mimo-v2.6-flash", label: "MiMo V2.6 Flash", hasVision: true, recommended: true },
|
|
257
|
+
{ id: "mimo-v2.6-pro", label: "MiMo V2.6 Pro", hasVision: true },
|
|
258
|
+
{
|
|
259
|
+
id: "mimo-v2.6-pro-ultraspeed",
|
|
260
|
+
label: "MiMo V2.6 Pro Ultraspeed",
|
|
261
|
+
hasVision: true
|
|
262
|
+
}
|
|
263
|
+
];
|
|
255
264
|
var STEPFUN_STEP_PLAN_MODEL_OPTIONS = stepfunStepPlanModels.map((m, i) => ({
|
|
256
265
|
id: m.name,
|
|
257
266
|
label: m.displayName ?? m.name,
|
|
@@ -354,21 +363,36 @@ var SUBSCRIPTION_OAUTH_PROVIDERS = [
|
|
|
354
363
|
kind: "oauth",
|
|
355
364
|
id: "devin-oauth",
|
|
356
365
|
label: "Devin Pro",
|
|
357
|
-
description: "Devin
|
|
366
|
+
description: "Devin Pro $20/\u6708\uFF1A\u65E5/\u5468 quota \u8986\u76D6 sessions/CLI/Desktop\uFF0C\u8D85\u989D\u6309 API \u4EF7\u8D2D credits\uFF1BSWE-2 \u9650\u65F6\u514D\u8D39\u81F3 2026-10-10",
|
|
358
367
|
apiKeyRef: "devin",
|
|
359
368
|
provider: "devin",
|
|
360
369
|
defaultModel: "swe-2-max",
|
|
361
370
|
defaultReasoningEffort: "high",
|
|
362
371
|
modelOptions: [
|
|
363
|
-
|
|
372
|
+
// selector 全部来自上游 live catalog(GetCliModelConfigs)并逐個实测可调。
|
|
373
|
+
// 旧列表 9 个选项里 6 个是上游不存在的死 id(swe-2 / swe-1.7 /
|
|
374
|
+
// claude-3.7-sonnet / gpt-5.2 / gpt-4o / claude-sonnet-4.6 均
|
|
375
|
+
// permission_denied),已替换。注意 catalog selector 是连字符写法,
|
|
376
|
+
// 点号/裸写法上游不接受。
|
|
377
|
+
{ id: "swe-2-max", label: "SWE-2 Max", hasVision: true, recommended: true },
|
|
364
378
|
{ id: "swe-2-high", label: "SWE-2 High", hasVision: true },
|
|
365
379
|
{ id: "swe-2-medium", label: "SWE-2 Medium", hasVision: true },
|
|
366
|
-
{ id: "swe-
|
|
367
|
-
{ id: "swe-1
|
|
368
|
-
{ id: "
|
|
369
|
-
{ id: "claude-
|
|
370
|
-
{ id: "
|
|
371
|
-
{ id: "
|
|
380
|
+
{ id: "swe-1-7", label: "SWE-1.7 Max", hasVision: true },
|
|
381
|
+
{ id: "swe-1-7-lightning", label: "SWE-1.7 Lightning Max", hasVision: true },
|
|
382
|
+
{ id: "swe-1-6-fast", label: "SWE-1.6 Fast", hasVision: true },
|
|
383
|
+
{ id: "claude-opus-5-medium", label: "Claude Opus 5 Medium", hasVision: true },
|
|
384
|
+
{ id: "claude-fable-5-1-medium", label: "Claude Fable 5.1 Medium", hasVision: true },
|
|
385
|
+
{ id: "claude-sonnet-5-medium", label: "Claude Sonnet 5 Medium", hasVision: true },
|
|
386
|
+
{ id: "claude-sonnet-4-6", label: "Claude Sonnet 4.6", hasVision: true },
|
|
387
|
+
{ id: "gpt-6-astra-medium", label: "GPT-6 Astra Medium", hasVision: true },
|
|
388
|
+
{ id: "gpt-5-6-sol-medium", label: "GPT-5.6 Sol Medium", hasVision: true },
|
|
389
|
+
{ id: "gpt-5-6-luna-medium", label: "GPT-5.6 Luna Medium", hasVision: true },
|
|
390
|
+
{ id: "MODEL_GPT_5_2_MEDIUM", label: "GPT-5.2 Medium", hasVision: true },
|
|
391
|
+
{ id: "gemini-3-8-flash-medium", label: "Gemini 3.8 Flash Medium", hasVision: true },
|
|
392
|
+
{ id: "gemini-3-1-pro-high", label: "Gemini 3.1 Pro High", hasVision: true },
|
|
393
|
+
{ id: "kimi-k3-high", label: "Kimi K3 High", hasVision: true },
|
|
394
|
+
{ id: "glm-5-3-high", label: "GLM-5.3 High", hasVision: false },
|
|
395
|
+
{ id: "glm-5-3-flash-high", label: "GLM-5.3 Flash High", hasVision: true }
|
|
372
396
|
]
|
|
373
397
|
}
|
|
374
398
|
];
|
|
@@ -565,6 +589,21 @@ var CUSTOM_API_KEY_TEMPLATES = [
|
|
|
565
589
|
commercialKind: "api",
|
|
566
590
|
accessVariant: "metered_key"
|
|
567
591
|
},
|
|
592
|
+
// 小米 MiMo 官方按量计费 API(api.xiaomimimo.com):与上面的「MiMo Token Plan」
|
|
593
|
+
// 订阅模板是两条不同的通道(key 不通用);本条是用户自带 Key 的 metered 通道,
|
|
594
|
+
// 与平台托管(provider=nolo + mimo-v2.6-*,平台积分计费)并存、互不影响。
|
|
595
|
+
{
|
|
596
|
+
kind: "api_key_template",
|
|
597
|
+
id: "mimo-api",
|
|
598
|
+
label: "MiMo API \u7528\u91CF\u8BA1\u8D39",
|
|
599
|
+
description: "\u5C0F\u7C73 MiMo \u5B98\u65B9 API\uFF08OpenAI \u517C\u5BB9\uFF0C\u6309\u91CF\u8BA1\u8D39\uFF1BKey \u987B\u4E3A\u6309\u91CF\u8BA1\u8D39 Key\uFF0C\u975E Token Plan \u8BA2\u9605 Key\uFF09",
|
|
600
|
+
provider: "mimo",
|
|
601
|
+
baseUrl: "https://api.xiaomimimo.com/v1",
|
|
602
|
+
defaultModel: "mimo-v2.6-flash",
|
|
603
|
+
modelOptions: MIMO_MODEL_OPTIONS,
|
|
604
|
+
commercialKind: "api",
|
|
605
|
+
accessVariant: "metered_key"
|
|
606
|
+
},
|
|
568
607
|
{
|
|
569
608
|
kind: "api_key_template",
|
|
570
609
|
id: "kimi-api",
|
|
@@ -35,15 +35,16 @@ import {
|
|
|
35
35
|
resolvePlatformAuthToken,
|
|
36
36
|
resolvePlatformServerUrl,
|
|
37
37
|
resolveProviderTransportDecision
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-K7M3MWCE.js";
|
|
39
39
|
import {
|
|
40
40
|
clipCompactText,
|
|
41
41
|
isMeaningfulChatCompletionOutput,
|
|
42
42
|
isMeaningfulResponsesOutput
|
|
43
43
|
} from "./chunk-KT6LENVP.js";
|
|
44
44
|
import {
|
|
45
|
-
NOLO_CLIENT_VERSION_HEADER
|
|
46
|
-
|
|
45
|
+
NOLO_CLIENT_VERSION_HEADER,
|
|
46
|
+
isPlatformMimoProviderModel
|
|
47
|
+
} from "./chunk-ASGDO77C.js";
|
|
47
48
|
import {
|
|
48
49
|
isRecord
|
|
49
50
|
} from "./chunk-KUG52IAP.js";
|
|
@@ -465,7 +466,11 @@ function isAbortOrTimeoutError(error) {
|
|
|
465
466
|
}
|
|
466
467
|
var CHAT_PROXY_PATH = "/api/v1/chat";
|
|
467
468
|
function shouldDisableThinking(providerConfig) {
|
|
468
|
-
return providerConfig.provider.toLowerCase() === "mimo" || /xiaomimimo\.com/i.test(providerConfig.endpoint)
|
|
469
|
+
return providerConfig.provider.toLowerCase() === "mimo" || /xiaomimimo\.com/i.test(providerConfig.endpoint) || // 平台托管 MiMo(provider=nolo + mimo-v2.6-*):endpoint 通常已解析成
|
|
470
|
+
// api.xiaomimimo.com/...(上面的正则已命中),但 transport=direct 时
|
|
471
|
+
// endpoint 是 nolo 服务器地址——模型 id 判据保证两跳都关掉 thinking
|
|
472
|
+
// (上游 thinking 默认 enabled)。
|
|
473
|
+
isPlatformMimoProviderModel(providerConfig.provider, providerConfig.model);
|
|
469
474
|
}
|
|
470
475
|
function isResponsesEndpoint(endpoint) {
|
|
471
476
|
return /\/responses$/i.test(endpoint.trim());
|
|
@@ -8,18 +8,19 @@ import {
|
|
|
8
8
|
readSseFrames,
|
|
9
9
|
streamSseDataValues,
|
|
10
10
|
throwIfChatCompletionStreamFailed
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-TIJK4PBP.js";
|
|
12
12
|
import {
|
|
13
13
|
DEVIN_CONNECT_URL
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-Q5FJJ6XI.js";
|
|
15
15
|
import {
|
|
16
16
|
clipToolText,
|
|
17
17
|
hasImageInRuntimeMessages,
|
|
18
|
+
resolveAgentContextWindow,
|
|
18
19
|
resolveAgentImageInputSupport,
|
|
19
20
|
resolveHistoricalToolContentCap,
|
|
20
21
|
resolveToolOutputProfile,
|
|
21
22
|
stripImagePartsFromMessages
|
|
22
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-6HCLDVEI.js";
|
|
23
24
|
import {
|
|
24
25
|
downgradeUnparsableToolCalls,
|
|
25
26
|
hasParsableObjectArguments,
|
|
@@ -43,7 +44,7 @@ import {
|
|
|
43
44
|
requiresBareImageUrl,
|
|
44
45
|
resolveToolGuidedSections,
|
|
45
46
|
toBareImageUrlMessages
|
|
46
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-UUVQJZ75.js";
|
|
47
48
|
import {
|
|
48
49
|
convertMessagesToResponsesInput,
|
|
49
50
|
extractReasoningFromResponseOutput,
|
|
@@ -72,11 +73,11 @@ import {
|
|
|
72
73
|
getAntigravityUserAgent,
|
|
73
74
|
readAntigravityProjectId,
|
|
74
75
|
resolveAntigravityCloudCodeBaseUrl
|
|
75
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-MJHQ3NRV.js";
|
|
76
77
|
import {
|
|
77
78
|
buildProviderAuthHeaders,
|
|
78
79
|
buildProviderExecutionPlan
|
|
79
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-K7M3MWCE.js";
|
|
80
81
|
import {
|
|
81
82
|
buildDialogFallbackTitleFromUserInput
|
|
82
83
|
} from "./chunk-2MBTWINN.js";
|
|
@@ -90,7 +91,7 @@ import {
|
|
|
90
91
|
resolveEmptyAssistantFallbackMessage,
|
|
91
92
|
resolveEmptyAssistantOutcome,
|
|
92
93
|
resolveTruncatedReasoningTailLog
|
|
93
|
-
} from "./chunk-
|
|
94
|
+
} from "./chunk-VEJ4BOQV.js";
|
|
94
95
|
import {
|
|
95
96
|
COMPACTION_SUMMARY_SCHEMA_VERSION,
|
|
96
97
|
COMPACTION_SUMMARY_SYSTEM_PROMPT,
|
|
@@ -12202,7 +12203,7 @@ function summarizeToolArguments(toolName, rawArgs) {
|
|
|
12202
12203
|
}
|
|
12203
12204
|
|
|
12204
12205
|
// packages/agent-runtime/leafFinalHandoff.ts
|
|
12205
|
-
var LEAF_FINAL_HANDOFF_INSTRUCTIONS = `Leaf subtask final: return only the result, blockers/findings, and minimal evidence the parent needs. Do not narrate your process or restate the task. Keep success minimal (a one-line result is enough); on failure include the blocker, severity when relevant, and an evidence reference (file:line, test command, commit, artifact, or run/dialog). If the task explicitly requires a long-form deliverable (document, translation, dataset, code, or other artifact), provide that deliverable in full and keep only the handoff around it concise.`;
|
|
12206
|
+
var LEAF_FINAL_HANDOFF_INSTRUCTIONS = `Leaf subtask final: return only the result, blockers/findings, and minimal evidence the parent needs. Do not narrate your process or restate the task. Keep success minimal (a one-line result is enough); on failure include the blocker, severity when relevant, and an evidence reference (file:line, test command, commit, artifact, or run/dialog). If the task explicitly requires a long-form deliverable (document, translation, dataset, code, or other artifact), provide that deliverable in full and keep only the handoff around it concise. During execution, follow the brief as given: only when new evidence would materially change the goal, risk, irreversibility, or DoD should you surface it as a blocker/finding in the handoff \u2014 do not silently expand scope or re-litigate the settled direction.`;
|
|
12206
12207
|
|
|
12207
12208
|
// packages/agent-runtime/contextBlockScope.ts
|
|
12208
12209
|
var isContextBlockScope = (value) => {
|
|
@@ -13047,10 +13048,10 @@ var TOOL_METADATA_KEYS = [
|
|
|
13047
13048
|
"pasteId",
|
|
13048
13049
|
"source"
|
|
13049
13050
|
];
|
|
13050
|
-
function trimHistoryToContextBudget(history, model) {
|
|
13051
|
+
function trimHistoryToContextBudget(history, model, contextWindowOverride) {
|
|
13051
13052
|
if (history.length === 0) return { history, droppedCount: 0 };
|
|
13052
13053
|
const { rawMessageBudget } = planContextUsage({
|
|
13053
|
-
contextWindow: getModelContextWindow(model ?? ""),
|
|
13054
|
+
contextWindow: contextWindowOverride ?? getModelContextWindow(model ?? ""),
|
|
13054
13055
|
summaryTokens: 0,
|
|
13055
13056
|
// localLoop 没有 web 端的负载分档器;medium 是中性默认值,
|
|
13056
13057
|
// 不为了省几个 token 在这里复制一份分类逻辑。
|
|
@@ -13541,7 +13542,7 @@ async function runLocalAgentTurn(input) {
|
|
|
13541
13542
|
}
|
|
13542
13543
|
return resolvedProvider;
|
|
13543
13544
|
};
|
|
13544
|
-
const contextWindow =
|
|
13545
|
+
const contextWindow = resolveAgentContextWindow(agentConfig);
|
|
13545
13546
|
const compressionTriggerRatio = resolveCompressionTriggerRatio(contextWindow);
|
|
13546
13547
|
let realContextUsagePercent;
|
|
13547
13548
|
if (input.continueDialogId && typeof input.adapter.loadLastContextUsage === "function") {
|
|
@@ -13583,6 +13584,7 @@ async function runLocalAgentTurn(input) {
|
|
|
13583
13584
|
history,
|
|
13584
13585
|
model: agentConfig.model,
|
|
13585
13586
|
resolveProvider: resolveProviderOnce,
|
|
13587
|
+
contextWindow,
|
|
13586
13588
|
realContextUsagePercent
|
|
13587
13589
|
});
|
|
13588
13590
|
history = compacted.history;
|
|
@@ -13592,7 +13594,7 @@ async function runLocalAgentTurn(input) {
|
|
|
13592
13594
|
console.warn("[localLoop] auto-compaction unexpected error:", error);
|
|
13593
13595
|
}
|
|
13594
13596
|
loopTimingMark("maybeAutoCompactLocalHistory", 0);
|
|
13595
|
-
const trimmedHistory = trimHistoryToContextBudget(history, agentConfig.model);
|
|
13597
|
+
const trimmedHistory = trimHistoryToContextBudget(history, agentConfig.model, contextWindow);
|
|
13596
13598
|
if (trimmedHistory.droppedCount > 0) {
|
|
13597
13599
|
history = trimmedHistory.history;
|
|
13598
13600
|
}
|
|
@@ -13679,6 +13681,7 @@ async function runLocalAgentTurn(input) {
|
|
|
13679
13681
|
],
|
|
13680
13682
|
model: agentConfig.model,
|
|
13681
13683
|
resolveProvider: resolveProviderOnce,
|
|
13684
|
+
contextWindow,
|
|
13682
13685
|
realContextUsagePercent: ratio
|
|
13683
13686
|
});
|
|
13684
13687
|
if (compacted.usage) {
|
|
@@ -19353,7 +19356,7 @@ function buildLoadSkillExecutor(args2) {
|
|
|
19353
19356
|
const { resolveSkillByName } = await import("./skillDiscovery-CYUCJMAG.js");
|
|
19354
19357
|
const resolved = resolveSkillByName(args2.cwd, name);
|
|
19355
19358
|
if (!resolved) {
|
|
19356
|
-
const { resolveBuiltinSkillByName } = await import("./builtinSkillRegistry-
|
|
19359
|
+
const { resolveBuiltinSkillByName } = await import("./builtinSkillRegistry-YITVDLWG.js");
|
|
19357
19360
|
const builtin = resolveBuiltinSkillByName(name);
|
|
19358
19361
|
if (builtin) {
|
|
19359
19362
|
return {
|
|
@@ -20332,6 +20335,62 @@ function parseDevinConnectFrames(buffer3) {
|
|
|
20332
20335
|
remainder: buffer3.subarray(offset)
|
|
20333
20336
|
};
|
|
20334
20337
|
}
|
|
20338
|
+
function parseDevinMetadataUsage(metaBytes) {
|
|
20339
|
+
let prompt = 0;
|
|
20340
|
+
let completion;
|
|
20341
|
+
let cacheRead = 0;
|
|
20342
|
+
let cacheWrite = 0;
|
|
20343
|
+
let sawAny = false;
|
|
20344
|
+
let offset = 0;
|
|
20345
|
+
while (offset < metaBytes.length) {
|
|
20346
|
+
let tag = 0;
|
|
20347
|
+
let shift = 0;
|
|
20348
|
+
while (offset < metaBytes.length) {
|
|
20349
|
+
const b = metaBytes[offset++];
|
|
20350
|
+
tag |= (b & 127) << shift;
|
|
20351
|
+
if (!(b & 128)) break;
|
|
20352
|
+
shift += 7;
|
|
20353
|
+
}
|
|
20354
|
+
const fieldNum = tag >>> 3;
|
|
20355
|
+
const wireType = tag & 7;
|
|
20356
|
+
if (wireType === 0) {
|
|
20357
|
+
let val = 0;
|
|
20358
|
+
let s = 0;
|
|
20359
|
+
while (offset < metaBytes.length) {
|
|
20360
|
+
const b = metaBytes[offset++];
|
|
20361
|
+
val |= (b & 127) << s;
|
|
20362
|
+
if (!(b & 128)) break;
|
|
20363
|
+
s += 7;
|
|
20364
|
+
}
|
|
20365
|
+
if (fieldNum === 2) {
|
|
20366
|
+
prompt = val;
|
|
20367
|
+
sawAny = true;
|
|
20368
|
+
} else if (fieldNum === 3) {
|
|
20369
|
+
completion = val;
|
|
20370
|
+
sawAny = true;
|
|
20371
|
+
} else if (fieldNum === 4) {
|
|
20372
|
+
cacheWrite = val;
|
|
20373
|
+
sawAny = true;
|
|
20374
|
+
} else if (fieldNum === 5) {
|
|
20375
|
+
cacheRead = val;
|
|
20376
|
+
sawAny = true;
|
|
20377
|
+
}
|
|
20378
|
+
} else if (wireType === 2) {
|
|
20379
|
+
let len = 0;
|
|
20380
|
+
let s = 0;
|
|
20381
|
+
while (offset < metaBytes.length) {
|
|
20382
|
+
const b = metaBytes[offset++];
|
|
20383
|
+
len |= (b & 127) << s;
|
|
20384
|
+
if (!(b & 128)) break;
|
|
20385
|
+
s += 7;
|
|
20386
|
+
}
|
|
20387
|
+
offset += len;
|
|
20388
|
+
} else {
|
|
20389
|
+
break;
|
|
20390
|
+
}
|
|
20391
|
+
}
|
|
20392
|
+
return sawAny ? { prompt, completion, cacheRead, cacheWrite } : null;
|
|
20393
|
+
}
|
|
20335
20394
|
function parseDevinConnectTrailer(payload) {
|
|
20336
20395
|
const text = payload.toString("utf8").trim();
|
|
20337
20396
|
if (!text || text === "{}") return null;
|
|
@@ -20352,6 +20411,7 @@ function decodeDevinResponsePayload(payload) {
|
|
|
20352
20411
|
let content = "";
|
|
20353
20412
|
let reasoning = "";
|
|
20354
20413
|
let finishReason = null;
|
|
20414
|
+
let usage = null;
|
|
20355
20415
|
const events = [];
|
|
20356
20416
|
while (offset < payload.length) {
|
|
20357
20417
|
let tag = 0;
|
|
@@ -20433,15 +20493,17 @@ function decodeDevinResponsePayload(payload) {
|
|
|
20433
20493
|
if (argsDelta !== void 0) {
|
|
20434
20494
|
events.push({ type: "tool-call-args", argsDelta, ...id ? { id } : {} });
|
|
20435
20495
|
}
|
|
20496
|
+
} else if (fieldNum === 7) {
|
|
20497
|
+
usage = parseDevinMetadataUsage(valBytes);
|
|
20436
20498
|
}
|
|
20437
20499
|
} else {
|
|
20438
20500
|
break;
|
|
20439
20501
|
}
|
|
20440
20502
|
}
|
|
20441
|
-
return { content, reasoning, finishReason, events };
|
|
20503
|
+
return { content, reasoning, finishReason, events, usage };
|
|
20442
20504
|
}
|
|
20443
20505
|
function createDevinProvider(options) {
|
|
20444
|
-
const { token, model = "swe-2", fetchImpl = fetch, tools = [], temperature } = options;
|
|
20506
|
+
const { token, model = "swe-2-max", fetchImpl = fetch, tools = [], temperature } = options;
|
|
20445
20507
|
return {
|
|
20446
20508
|
model,
|
|
20447
20509
|
async complete(messages, opts) {
|
|
@@ -20476,6 +20538,7 @@ function createDevinProvider(options) {
|
|
|
20476
20538
|
let text = "";
|
|
20477
20539
|
let reasoning = "";
|
|
20478
20540
|
let finishReason = null;
|
|
20541
|
+
let frameUsage = null;
|
|
20479
20542
|
const toolCallOrder = [];
|
|
20480
20543
|
const toolCallById = /* @__PURE__ */ new Map();
|
|
20481
20544
|
let currentToolCallId = null;
|
|
@@ -20500,6 +20563,9 @@ function createDevinProvider(options) {
|
|
|
20500
20563
|
continue;
|
|
20501
20564
|
}
|
|
20502
20565
|
const delta = decodeDevinResponsePayload(f.payload);
|
|
20566
|
+
if (delta.usage?.completion !== void 0) {
|
|
20567
|
+
frameUsage = delta.usage;
|
|
20568
|
+
}
|
|
20503
20569
|
text += delta.content;
|
|
20504
20570
|
reasoning += delta.reasoning;
|
|
20505
20571
|
if (delta.finishReason) finishReason = delta.finishReason;
|
|
@@ -20552,10 +20618,18 @@ function createDevinProvider(options) {
|
|
|
20552
20618
|
if (!text && !reasoning && toolCalls.length === 0) {
|
|
20553
20619
|
throw new Error("Devin Connect upstream completed without content or tool calls");
|
|
20554
20620
|
}
|
|
20621
|
+
const usage = frameUsage ? {
|
|
20622
|
+
prompt_tokens: frameUsage.prompt + frameUsage.cacheRead,
|
|
20623
|
+
completion_tokens: frameUsage.completion ?? 0,
|
|
20624
|
+
total_tokens: frameUsage.prompt + frameUsage.cacheRead + (frameUsage.completion ?? 0) + frameUsage.cacheWrite,
|
|
20625
|
+
...frameUsage.cacheRead > 0 ? { prompt_tokens_details: { cached_tokens: frameUsage.cacheRead } } : {},
|
|
20626
|
+
...frameUsage.cacheWrite > 0 ? { cache_creation_input_tokens: frameUsage.cacheWrite } : {}
|
|
20627
|
+
} : void 0;
|
|
20555
20628
|
return {
|
|
20556
20629
|
content: text,
|
|
20557
20630
|
model: selectedModel,
|
|
20558
20631
|
provider: "devin",
|
|
20632
|
+
...usage ? { usage } : {},
|
|
20559
20633
|
...reasoning ? { reasoning_content: reasoning } : {},
|
|
20560
20634
|
...toolCalls.length > 0 ? { tool_calls: toolCalls } : {},
|
|
20561
20635
|
// The upstream finish event wins whenever it is present. A tool call
|