nolo-cli 0.38.0-alpha.3 → 0.47.0-alpha.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/{_executeModel-SWONBJ7Z.js → _executeModel-5PG6CUWD.js} +41 -42
- package/{action-KMBZ3LCZ.js → action-FLLC2SIX.js} +7 -7
- package/{addContentAction-KQ44UT2U.js → addContentAction-SVSPUUK4.js} +6 -6
- package/{addDialogAgentAction-ILSDCMYL.js → addDialogAgentAction-W3JGU4F7.js} +5 -5
- package/{agentDeleteCommand-SMUJYI6N.js → agentDeleteCommand-SHSPQZHI.js} +25 -26
- package/{agentEmailCommands-YWCGZ4RO.js → agentEmailCommands-LQKO5GRW.js} +54 -55
- package/{agentListCommands-ULFV2XJQ.js → agentListCommands-5QTNEYMQ.js} +31 -29
- package/{agentMachineCommands-7YZ2TIYZ.js → agentMachineCommands-P5K454CN.js} +24 -25
- package/{agentPullCommand-TSWAJPS2.js → agentPullCommand-M552CYSI.js} +2 -2
- package/{agentRecordCommands-EVOSSHJR.js → agentRecordCommands-Z4QYCNP4.js} +50 -51
- package/{agentRunCommand-PO55WUIY.js → agentRunCommand-HV3Y34B5.js} +52 -53
- package/{agentRunControl-7MUPSYDQ.js → agentRunControl-LHXOP4IU.js} +43 -1
- package/{agentRuntimeLocal-Q6D3G6G7.js → agentRuntimeLocal-ZKXYFLXI.js} +20 -21
- package/{agentSlice-6TRUUOSX.js → agentSlice-NKFLP3RI.js} +6 -6
- package/{agentSuperviseCommands-MKWW3ICX.js → agentSuperviseCommands-IMRZ56RC.js} +2 -2
- package/{appDeleteCommands-JDBSRLTX.js → appDeleteCommands-XYGAZIJX.js} +24 -25
- package/{appDeployCommands-Q5H2NBKQ.js → appDeployCommands-7T5CABRB.js} +24 -25
- package/{appDeployStatusCommands-PSYBUIZT.js → appDeployStatusCommands-KTFQMRPZ.js} +24 -25
- package/{appGetCommands-IX64IUW6.js → appGetCommands-HOX2ULSV.js} +24 -25
- package/{appListCommands-BJZFX65H.js → appListCommands-3SLCEHND.js} +24 -25
- package/{authCommand-B2XRHNJH.js → authCommand-OY2E2VQK.js} +12 -12
- package/{authCommands-GWABTFMR.js → authCommands-SBQVTD6V.js} +5 -5
- package/{chatQueueReduxAdapter-N7Z5MUPU.js → chatQueueReduxAdapter-WMMBQK3Y.js} +20 -20
- package/chunk-25J3BB35.js +6041 -0
- package/{chunk-U6QQLXWI.js → chunk-2X5S4IBZ.js} +1 -1
- package/{chunk-MJWX4JQO.js → chunk-3EEK7T3D.js} +1 -1
- package/{chunk-UNHKVD2N.js → chunk-43CXXVJD.js} +1 -1
- package/{chunk-WRP5TTM6.js → chunk-4MXGXSYN.js} +83 -3
- package/{chunk-7N7XKGEQ.js → chunk-4ZNDBDWG.js} +6 -6
- package/{chunk-XVVNNJAA.js → chunk-5BPZLBFB.js} +20 -51
- package/{chunk-MWGCZ4CS.js → chunk-5PPFYHU2.js} +3 -3
- package/{chunk-W445DPVT.js → chunk-5QRCPERU.js} +1 -1
- package/{chunk-GKHV4UH5.js → chunk-5UOBIU5G.js} +31 -3
- package/{chunk-BMB563Y6.js → chunk-6BYAXNH5.js} +3 -3
- package/{chunk-SMPAUSX5.js → chunk-6FGXGFAH.js} +2 -2
- package/{chunk-46VPXYIV.js → chunk-6LYUN76O.js} +5 -5
- package/{chunk-FTM4KUOZ.js → chunk-7XTC3KRG.js} +1 -1
- package/{chunk-IMHO5LC6.js → chunk-7XZ5GXSN.js} +1 -1
- package/{chunk-E2OQ5N2F.js → chunk-AEXP2UZT.js} +341 -16
- package/{chunk-MZZZYUZS.js → chunk-AV2CELZZ.js} +37 -12
- package/{chunk-JI2TIPLP.js → chunk-AYXSUBVC.js} +1 -1
- package/{chunk-J6WH4PYZ.js → chunk-CIF4X6ZM.js} +1 -1
- package/{chunk-GZRMWK5R.js → chunk-DQLYEGP7.js} +2 -2
- package/{chunk-GUYMR3JL.js → chunk-E2QH2AYX.js} +69 -3
- package/{chunk-B6H5XCT2.js → chunk-EMEUU5IY.js} +3 -3
- package/{chunk-X6EN3KJX.js → chunk-ENYDQKOB.js} +319 -71
- package/{chunk-RCFIB45Q.js → chunk-EVBFYPDC.js} +2 -2
- package/{chunk-PV734VZX.js → chunk-EXLOROHG.js} +1 -1
- package/{chunk-WRN7L5CS.js → chunk-FA4SY4F5.js} +1 -1
- package/{chunk-4WVNHL3V.js → chunk-FAWK6DBF.js} +157 -51
- package/{chunk-IFS5CUEH.js → chunk-FJHLA6SX.js} +1 -1
- package/{chunk-T2BZICLK.js → chunk-G46DB6KG.js} +49 -6
- package/{chunk-FGLKRJDI.js → chunk-GK74OOFT.js} +2 -2
- package/{chunk-LM6IYQ3F.js → chunk-GLKOYSRU.js} +8 -1
- package/{chunk-JIADXJYU.js → chunk-H2G6JXTR.js} +1 -1
- package/{chunk-IKGHZMK2.js → chunk-H2JQB6B6.js} +12 -12
- package/{chunk-MGIHZ5CJ.js → chunk-HAPCUPEO.js} +2 -2
- package/{chunk-LD6Y6RJY.js → chunk-HGDOIDQ4.js} +2 -2
- package/{chunk-NZLQ7B5P.js → chunk-HOM6NILS.js} +3 -3
- package/{chunk-IZNJDUJ4.js → chunk-I4JISVWK.js} +1 -1
- package/{chunk-N4XRDM26.js → chunk-IA3A5373.js} +2 -2
- package/{chunk-Y5MMUI3L.js → chunk-IWUPQUWA.js} +2 -2
- package/{chunk-L7SMDIL6.js → chunk-JEGPB5H2.js} +3 -3
- package/{chunk-GEPHJJW4.js → chunk-L7NG2M6H.js} +1 -1
- package/{chunk-XQES6LXQ.js → chunk-LFLWZX76.js} +2 -2
- package/{chunk-IIOHYLIG.js → chunk-LGUQHYAL.js} +1 -1
- package/{chunk-4AWH4LQA.js → chunk-LYGNQHUW.js} +3 -1
- package/{db-3H3JECGY.js → chunk-M5PVFLD4.js} +11 -158
- package/{chunk-WN5AJG5I.js → chunk-MKZRKDQM.js} +1 -1
- package/{chunk-VOXNBPLB.js → chunk-MUIJYGYW.js} +649 -41
- package/{chunk-CYAC5WXX.js → chunk-MWT2BBCH.js} +213 -45
- package/{chunk-V5GA74HI.js → chunk-MZXZJVVD.js} +20 -39
- package/{chunk-ZBB3MZR3.js → chunk-OLNC7AWK.js} +7 -4
- package/{chunk-J5NMOM35.js → chunk-OYNDYVSE.js} +1 -1
- package/{chunk-C6ELZQ7H.js → chunk-OZVGA4SY.js} +1 -1
- package/{chunk-K4KIFRIN.js → chunk-Q24S4NDF.js} +1 -1
- package/{chunk-NRROOY22.js → chunk-Q6DMA2OM.js} +271 -130
- package/{chunk-2WKUUY2E.js → chunk-SVEUG45B.js} +5 -3
- package/{chunk-IZCHPD7T.js → chunk-TNPCQNGQ.js} +11 -6
- package/{chunk-4DMPISV6.js → chunk-URBGEE42.js} +2 -2
- package/{chunk-2KO5QQFV.js → chunk-V2IPBG5U.js} +1 -1
- package/{chunk-B6YYACBT.js → chunk-WPFNAEIW.js} +1 -1
- package/{chunk-23KKIMD5.js → chunk-WVGEBWA6.js} +4 -4
- package/{chunk-KU6CDTZ5.js → chunk-XMI3APSU.js} +61 -49
- package/{chunk-64KIQZA2.js → chunk-XO3G35OV.js} +1 -1
- package/{chunk-UWGWUOVN.js → chunk-YNOGNUBC.js} +108 -47
- package/{chunk-XT73C4VH.js → chunk-Z5NW3O7V.js} +1 -1
- package/{codingSkills-H6N5EKSX.js → codingSkills-BYQI6EPT.js} +2 -2
- package/{createAgentAutomationAction-U57ZMPMS.js → createAgentAutomationAction-ENDNA3Q4.js} +21 -21
- package/{createDialogAction-MAJLBNK4.js → createDialogAction-2KNX6S2D.js} +23 -23
- package/{createPageAction-4EX7HU6G.js → createPageAction-SNBCYPK6.js} +21 -21
- package/db-VQSAOWAO.js +162 -0
- package/{dbSlice-PIQGICNM.js → dbSlice-XWUM4QOF.js} +5 -5
- package/deleteFile-NPZ64DFN.js +1 -1
- package/{dialogCommands-4MHZXEIS.js → dialogCommands-6E5P35DG.js} +28 -26
- package/{dialogSlice-AL3UJLOJ.js → dialogSlice-RTPOD6EW.js} +20 -20
- package/{docCreateCommands-GDYFEK67.js → docCreateCommands-JWY25UFB.js} +23 -24
- package/{docDeleteCommands-WIE5CXED.js → docDeleteCommands-BPJOCSX4.js} +24 -25
- package/{docReadCommands-LTOOPJVC.js → docReadCommands-BSEZCYTQ.js} +23 -24
- package/{docStore-35B5VAFF.js → docStore-TYHVLU7G.js} +22 -22
- package/{docUpdateCommands-TZGAGXSG.js → docUpdateCommands-S2IE2VV4.js} +23 -24
- package/{fetchMessages-CUEFN4GQ.js → fetchMessages-KZQVBXKY.js} +3 -3
- package/{getPricing-P3E2WRIH.js → getPricing-X3HXP6VQ.js} +3 -3
- package/{handleSendMessageAction-PXX2R5JS.js → handleSendMessageAction-QYXDQXGH.js} +21 -21
- package/index.js +69 -69
- package/levelLazyShim-GZBKODGI.js +7 -0
- package/{localDialogRead-P7CHFMIC.js → localDialogRead-NQ33HBSI.js} +2 -2
- package/{localRuntimeAuthority-S77B5QVB.js → localRuntimeAuthority-KQDAE64E.js} +4 -4
- package/{localRuntimeDb-N3H3HQ7G.js → localRuntimeDb-PF7CFKDL.js} +2 -2
- package/{machineCommands-VCPPY23X.js → machineCommands-QCE4KLGR.js} +48 -49
- package/{machineWsRunDispatch-A4C727GL.js → machineWsRunDispatch-FBRMGU5D.js} +48 -49
- package/{models-L7S2EKPM.js → models-7LWATQFH.js} +2 -2
- package/package.json +1 -1
- package/{read-6C2XD3YZ.js → read-DQQ75VI3.js} +2 -2
- package/{readDocTool-Y7AB365O.js → readDocTool-HCQQFAZD.js} +1 -1
- package/{readlineWorkspace-BIBIM6DG.js → readlineWorkspace-2TACWKMN.js} +164 -78
- package/{removeDialogAgentAction-KG5WMJRZ.js → removeDialogAgentAction-DNONRKST.js} +7 -7
- package/{runAgentClientLoop-RKDXMIZW.js → runAgentClientLoop-GBLDVBT5.js} +39 -39
- package/{runtimeDoctorCommands-HT4O2PXL.js → runtimeDoctorCommands-JKTTN723.js} +4 -4
- package/serverStoreFactory-YMXDF4NI.js +20 -0
- package/{setDialogExtraReferencesAction-O2NLXMSM.js → setDialogExtraReferencesAction-ERHUPT3F.js} +6 -6
- package/{setPrimaryDialogAgentAction-FYYUY7PB.js → setPrimaryDialogAgentAction-6C2HYNEC.js} +7 -7
- package/{settingSlice-GPLI6E3M.js → settingSlice-YVRJFKQX.js} +6 -6
- package/{spaceCommands-4FMO3SNP.js → spaceCommands-XOLPJMRK.js} +23 -24
- package/{spaceSlice-2W4GJ2OE.js → spaceSlice-OQPAGQDP.js} +21 -21
- package/{streamAgentChatTurn-FS52LDQP.js → streamAgentChatTurn-SN5XJJ7U.js} +91 -49
- package/{switchDialogAgentAction-GH5P6Q3Z.js → switchDialogAgentAction-HP57XYFP.js} +5 -5
- package/{tools-3J5CKEE7.js → tools-Y65Y3CI4.js} +32 -32
- package/{tuiSummaryLlmCaller-SHRB4RWM.js → tuiSummaryLlmCaller-NBTWT57U.js} +25 -14
- package/{updateDialogTitleAction-5MGPA3OO.js → updateDialogTitleAction-OAOP7CCE.js} +24 -23
- package/chunk-4APLX2RT.js +0 -1514
- package/chunk-P66M7LSQ.js +0 -58
- package/{chunk-6WD3OOJS.js → chunk-UV6VISQJ.js} +0 -0
- package/{tableCommands-PQUJ55AS.js → tableCommands-P2TXJ3CF.js} +1 -1
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BUILTIN_SUMMARY_LLM_CONFIG
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EVBFYPDC.js";
|
|
4
4
|
import {
|
|
5
5
|
buildDialogAttachmentPlan,
|
|
6
6
|
extractFileContentIds
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-H2G6JXTR.js";
|
|
8
8
|
import {
|
|
9
9
|
isOAuthApiKeyRef
|
|
10
10
|
} from "./chunk-YYLHWIW6.js";
|
|
11
|
+
import {
|
|
12
|
+
runLlm
|
|
13
|
+
} from "./chunk-6LYUN76O.js";
|
|
11
14
|
import {
|
|
12
15
|
getApproxPricePerImage
|
|
13
16
|
} from "./chunk-AGGIDPCZ.js";
|
|
14
|
-
import {
|
|
15
|
-
runLlm
|
|
16
|
-
} from "./chunk-46VPXYIV.js";
|
|
17
17
|
import {
|
|
18
18
|
cleanupCliSessionForDialog
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-HAPCUPEO.js";
|
|
20
20
|
import {
|
|
21
21
|
getActiveDialogAgentId,
|
|
22
22
|
getDialogAgentIds,
|
|
@@ -43,10 +43,15 @@ import {
|
|
|
43
43
|
import {
|
|
44
44
|
DEFAULT_AUTO_EXECUTION_PROFILE,
|
|
45
45
|
DEFAULT_CONTEXT_WINDOW,
|
|
46
|
+
EMPTY_ASSISTANT_FALLBACK_MESSAGE,
|
|
47
|
+
LENGTH_TRUNCATED_FALLBACK_MESSAGE,
|
|
48
|
+
REPETITION_LOOP_FALLBACK_MESSAGE,
|
|
49
|
+
STAGNANT_TOOL_CALLS_FALLBACK_MESSAGE,
|
|
50
|
+
STREAM_TRUNCATED_FALLBACK_MESSAGE,
|
|
46
51
|
getModelContextWindow,
|
|
47
52
|
getModelInfo,
|
|
48
53
|
resolveAutoExecutionProfile
|
|
49
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-4MXGXSYN.js";
|
|
50
55
|
import {
|
|
51
56
|
COMPACTION_SUMMARY_SYSTEM_PROMPT,
|
|
52
57
|
buildCompactionMetricsFromPlan,
|
|
@@ -58,26 +63,26 @@ import {
|
|
|
58
63
|
normalizeAssistantContentBuffer,
|
|
59
64
|
planCompression,
|
|
60
65
|
serializeMessageContent
|
|
61
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-GK74OOFT.js";
|
|
62
67
|
import {
|
|
63
68
|
findModelConfig,
|
|
64
69
|
getModelConfig
|
|
65
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-OZVGA4SY.js";
|
|
66
71
|
import {
|
|
67
72
|
toErrorMessage
|
|
68
73
|
} from "./chunk-HNMXYYJR.js";
|
|
69
74
|
import {
|
|
70
75
|
fetchMessages
|
|
71
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-FA4SY4F5.js";
|
|
72
77
|
import {
|
|
73
78
|
getPlatformHostedDeepSeekV4Price,
|
|
74
79
|
isPlatformHostedDeepSeekV4Model,
|
|
75
80
|
isPlatformHostedImageModel,
|
|
76
81
|
isPlatformHostedOpenAIImageModel
|
|
77
|
-
} from "./chunk-
|
|
82
|
+
} from "./chunk-ENYDQKOB.js";
|
|
78
83
|
import {
|
|
79
84
|
nolotusId
|
|
80
|
-
} from "./chunk-
|
|
85
|
+
} from "./chunk-EMEUU5IY.js";
|
|
81
86
|
import {
|
|
82
87
|
asRecordOrEmpty
|
|
83
88
|
} from "./chunk-KX6YBIHG.js";
|
|
@@ -87,7 +92,7 @@ import {
|
|
|
87
92
|
remove,
|
|
88
93
|
selectById,
|
|
89
94
|
write
|
|
90
|
-
} from "./chunk-
|
|
95
|
+
} from "./chunk-WVGEBWA6.js";
|
|
91
96
|
import {
|
|
92
97
|
buildDialogAgentListIndexDeleteOps,
|
|
93
98
|
createDialogMessageKeyAndId,
|
|
@@ -98,13 +103,13 @@ import {
|
|
|
98
103
|
isDialogRecordKey,
|
|
99
104
|
isPageKey,
|
|
100
105
|
isTableMetaKey
|
|
101
|
-
} from "./chunk-
|
|
102
|
-
import {
|
|
103
|
-
asTrimmedNonEmptyStringArray
|
|
104
|
-
} from "./chunk-I42VC5KR.js";
|
|
106
|
+
} from "./chunk-SVEUG45B.js";
|
|
105
107
|
import {
|
|
106
108
|
asOptionalFiniteNumber
|
|
107
109
|
} from "./chunk-WWC7I6TA.js";
|
|
110
|
+
import {
|
|
111
|
+
asTrimmedNonEmptyStringArray
|
|
112
|
+
} from "./chunk-I42VC5KR.js";
|
|
108
113
|
import {
|
|
109
114
|
asTrimmedLowercaseString
|
|
110
115
|
} from "./chunk-QSJ3HFEF.js";
|
|
@@ -112,7 +117,7 @@ import {
|
|
|
112
117
|
builtinAgentCatalogEntryById,
|
|
113
118
|
builtinRuntimeFallbackEntries,
|
|
114
119
|
isBuiltinPlatformAgentKey
|
|
115
|
-
} from "./chunk-
|
|
120
|
+
} from "./chunk-Z5NW3O7V.js";
|
|
116
121
|
import {
|
|
117
122
|
extractCustomId,
|
|
118
123
|
extractUserId,
|
|
@@ -1432,6 +1437,38 @@ var updateDialogSummaryAction = async (args, thunkApi) => {
|
|
|
1432
1437
|
}
|
|
1433
1438
|
};
|
|
1434
1439
|
|
|
1440
|
+
// packages/chat/messages/normalizeHistoricalReasoning.ts
|
|
1441
|
+
var HISTORICAL_REASONING_FALLBACK_MESSAGES = /* @__PURE__ */ new Set([
|
|
1442
|
+
EMPTY_ASSISTANT_FALLBACK_MESSAGE,
|
|
1443
|
+
LENGTH_TRUNCATED_FALLBACK_MESSAGE,
|
|
1444
|
+
STREAM_TRUNCATED_FALLBACK_MESSAGE,
|
|
1445
|
+
REPETITION_LOOP_FALLBACK_MESSAGE,
|
|
1446
|
+
STAGNANT_TOOL_CALLS_FALLBACK_MESSAGE
|
|
1447
|
+
]);
|
|
1448
|
+
function normalizeHistoricalReasoningMessage(message) {
|
|
1449
|
+
if (!message || typeof message !== "object") {
|
|
1450
|
+
return message;
|
|
1451
|
+
}
|
|
1452
|
+
if (message.role !== "assistant") {
|
|
1453
|
+
return message;
|
|
1454
|
+
}
|
|
1455
|
+
if (typeof message.thinkContent === "string" && message.thinkContent.trim().length > 0) {
|
|
1456
|
+
return message;
|
|
1457
|
+
}
|
|
1458
|
+
const reasoning = message.reasoning_content;
|
|
1459
|
+
if (typeof reasoning !== "string" || reasoning.trim().length === 0) {
|
|
1460
|
+
return message;
|
|
1461
|
+
}
|
|
1462
|
+
const content = message.content;
|
|
1463
|
+
if (typeof content !== "string" || !HISTORICAL_REASONING_FALLBACK_MESSAGES.has(content.trim())) {
|
|
1464
|
+
return message;
|
|
1465
|
+
}
|
|
1466
|
+
return {
|
|
1467
|
+
...message,
|
|
1468
|
+
thinkContent: reasoning
|
|
1469
|
+
};
|
|
1470
|
+
}
|
|
1471
|
+
|
|
1435
1472
|
// packages/chat/messages/messageContract.ts
|
|
1436
1473
|
function separateThinkContent(contentBuffer) {
|
|
1437
1474
|
let thinkContent = "";
|
|
@@ -1907,16 +1944,27 @@ function resolveStreamEndBillingUsages(input) {
|
|
|
1907
1944
|
const { agentConfig, totalUsage, finalVisibleContent } = input;
|
|
1908
1945
|
const imageGenerationCount = countImageGenerationOutputsInContent(finalVisibleContent);
|
|
1909
1946
|
const billedUsage = isOpenAIBuiltInImageGenerationAgent(agentConfig) ? withImageGenerationCount(totalUsage, imageGenerationCount) : totalUsage;
|
|
1910
|
-
const
|
|
1947
|
+
const rawEstimatedUsage = estimateMissingUsage({
|
|
1911
1948
|
content: finalVisibleContent
|
|
1912
1949
|
});
|
|
1950
|
+
const providerCallId = typeof totalUsage === "object" && totalUsage !== null ? totalUsage.provider_call_id : void 0;
|
|
1951
|
+
const estimatedUsage = providerCallId ? { ...rawEstimatedUsage, provider_call_id: providerCallId } : rawEstimatedUsage;
|
|
1913
1952
|
const billedEstimatedUsage = isOpenAIBuiltInImageGenerationAgent(agentConfig) ? withImageGenerationCount(estimatedUsage, imageGenerationCount) : estimatedUsage;
|
|
1914
1953
|
const titleEligibleContent = serializeMessageContent(finalVisibleContent, "[\u56FE\u7247]") ?? "";
|
|
1954
|
+
const hasReportedTokens = Boolean(
|
|
1955
|
+
totalUsage && typeof totalUsage === "object" && ([
|
|
1956
|
+
"prompt_tokens",
|
|
1957
|
+
"completion_tokens",
|
|
1958
|
+
"total_tokens",
|
|
1959
|
+
"input_tokens",
|
|
1960
|
+
"output_tokens"
|
|
1961
|
+
].some((field) => Object.prototype.hasOwnProperty.call(totalUsage, field)) || Object.prototype.hasOwnProperty.call(totalUsage, "cost") && typeof totalUsage.cost === "number")
|
|
1962
|
+
);
|
|
1915
1963
|
return {
|
|
1916
1964
|
imageGenerationCount,
|
|
1917
1965
|
billedUsage,
|
|
1918
1966
|
billedEstimatedUsage,
|
|
1919
|
-
hasReportedUsage:
|
|
1967
|
+
hasReportedUsage: hasReportedTokens,
|
|
1920
1968
|
titleEligible: titleEligibleContent.trim() !== ""
|
|
1921
1969
|
};
|
|
1922
1970
|
}
|
|
@@ -2474,8 +2522,8 @@ function resolveStreamEndFinalMetadata(input) {
|
|
|
2474
2522
|
|
|
2475
2523
|
// packages/chat/messages/messageStreamEndPostWritePolicy.ts
|
|
2476
2524
|
function resolveStreamEndPostWritePolicy(input) {
|
|
2477
|
-
const { hasReportedUsage, agentProvider, titleEligible, textContent, toolCalls } = input;
|
|
2478
|
-
const billingMode = hasReportedUsage ? "reported" : agentProvider && agentProvider !== "custom" ? "estimated" : "skip";
|
|
2525
|
+
const { hasReportedUsage, billingFailed, skipBilling, agentProvider, titleEligible, textContent, toolCalls } = input;
|
|
2526
|
+
const billingMode = billingFailed || skipBilling ? "skip" : hasReportedUsage ? "reported" : agentProvider && agentProvider !== "custom" ? "estimated" : "skip";
|
|
2479
2527
|
const hasText = textContent.trim() !== "";
|
|
2480
2528
|
const noTools = !toolCalls || toolCalls.length === 0;
|
|
2481
2529
|
return {
|
|
@@ -2503,7 +2551,8 @@ async function dispatchStreamEndBilling(input) {
|
|
|
2503
2551
|
} = input;
|
|
2504
2552
|
try {
|
|
2505
2553
|
if (billingMode === "reported") {
|
|
2506
|
-
const
|
|
2554
|
+
const fallbackCallId = typeof billedUsage?.provider_call_id === "string" && billedUsage.provider_call_id.trim() ? billedUsage.provider_call_id.trim() : void 0;
|
|
2555
|
+
const usageRecords = billingUsageRecords?.length ? billingUsageRecords : [{ callId: fallbackCallId, usage: billedUsage }];
|
|
2507
2556
|
for (const usageRecord of usageRecords) {
|
|
2508
2557
|
await dispatch(
|
|
2509
2558
|
updateTokensAction2({
|
|
@@ -2790,13 +2839,22 @@ var findDialogIdByMessageDbKey = (state, dbKey) => {
|
|
|
2790
2839
|
return inferDialogIdFromDbKey(dbKey);
|
|
2791
2840
|
};
|
|
2792
2841
|
var upsertOneMessage = (dialogState, message) => {
|
|
2793
|
-
dialogState.msgs = messagesAdapter.upsertOne(
|
|
2842
|
+
dialogState.msgs = messagesAdapter.upsertOne(
|
|
2843
|
+
dialogState.msgs,
|
|
2844
|
+
normalizeHistoricalReasoningMessage(message)
|
|
2845
|
+
);
|
|
2794
2846
|
};
|
|
2795
2847
|
var upsertManyMessages = (dialogState, messages) => {
|
|
2796
|
-
dialogState.msgs = messagesAdapter.upsertMany(
|
|
2848
|
+
dialogState.msgs = messagesAdapter.upsertMany(
|
|
2849
|
+
dialogState.msgs,
|
|
2850
|
+
messages.map(normalizeHistoricalReasoningMessage)
|
|
2851
|
+
);
|
|
2797
2852
|
};
|
|
2798
2853
|
var addOneMessage = (dialogState, message) => {
|
|
2799
|
-
dialogState.msgs = messagesAdapter.addOne(
|
|
2854
|
+
dialogState.msgs = messagesAdapter.addOne(
|
|
2855
|
+
dialogState.msgs,
|
|
2856
|
+
normalizeHistoricalReasoningMessage(message)
|
|
2857
|
+
);
|
|
2800
2858
|
};
|
|
2801
2859
|
var updateOneMessage = (dialogState, payload) => {
|
|
2802
2860
|
dialogState.msgs = messagesAdapter.updateOne(dialogState.msgs, payload);
|
|
@@ -2811,7 +2869,10 @@ var removeAllMessages = (dialogState) => {
|
|
|
2811
2869
|
dialogState.msgs = messagesAdapter.removeAll(dialogState.msgs);
|
|
2812
2870
|
};
|
|
2813
2871
|
var setAllMessages = (dialogState, messages) => {
|
|
2814
|
-
dialogState.msgs = messagesAdapter.setAll(
|
|
2872
|
+
dialogState.msgs = messagesAdapter.setAll(
|
|
2873
|
+
dialogState.msgs,
|
|
2874
|
+
messages.map(normalizeHistoricalReasoningMessage)
|
|
2875
|
+
);
|
|
2815
2876
|
};
|
|
2816
2877
|
var messageActions;
|
|
2817
2878
|
var messageSlice = createSliceWithThunks({
|
|
@@ -3231,7 +3292,9 @@ var messageSlice = createSliceWithThunks({
|
|
|
3231
3292
|
messageId,
|
|
3232
3293
|
reasoningBuffer,
|
|
3233
3294
|
toolCalls,
|
|
3234
|
-
finishReason
|
|
3295
|
+
finishReason,
|
|
3296
|
+
billingFailed,
|
|
3297
|
+
skipBilling
|
|
3235
3298
|
} = payload;
|
|
3236
3299
|
const spaceId = payload.spaceId;
|
|
3237
3300
|
const rawAgentName = asTrimmedString(agentConfig?.name);
|
|
@@ -3318,6 +3381,8 @@ var messageSlice = createSliceWithThunks({
|
|
|
3318
3381
|
addRefs
|
|
3319
3382
|
} = resolveStreamEndPostWritePolicy({
|
|
3320
3383
|
hasReportedUsage,
|
|
3384
|
+
billingFailed,
|
|
3385
|
+
skipBilling,
|
|
3321
3386
|
agentProvider: agentConfig?.provider,
|
|
3322
3387
|
titleEligible,
|
|
3323
3388
|
textContent,
|
|
@@ -3519,7 +3584,7 @@ var messageSlice = createSliceWithThunks({
|
|
|
3519
3584
|
runtimeOptions: args.runtimeOptions
|
|
3520
3585
|
});
|
|
3521
3586
|
if (agentKeyToUse) {
|
|
3522
|
-
const { streamAgentChatTurn } = await import("./agentSlice-
|
|
3587
|
+
const { streamAgentChatTurn } = await import("./agentSlice-NKFLP3RI.js");
|
|
3523
3588
|
await dispatch(
|
|
3524
3589
|
streamAgentChatTurn({
|
|
3525
3590
|
agentKey: agentKeyToUse,
|
|
@@ -4088,12 +4153,13 @@ var normalizeUsage = (usage) => {
|
|
|
4088
4153
|
output_tokens: 0,
|
|
4089
4154
|
total_tokens: 0,
|
|
4090
4155
|
cache_creation_input_tokens: 0,
|
|
4091
|
-
cache_read_input_tokens: 0
|
|
4156
|
+
cache_read_input_tokens: 0,
|
|
4157
|
+
cost: 0
|
|
4092
4158
|
};
|
|
4093
4159
|
}
|
|
4094
4160
|
const inputTokens = "input_tokens" in usage ? usage.input_tokens ?? 0 : "prompt_tokens" in usage ? usage.prompt_tokens : 0;
|
|
4095
4161
|
const outputTokens = "output_tokens" in usage ? usage.output_tokens ?? 0 : "completion_tokens" in usage ? usage.completion_tokens : 0;
|
|
4096
|
-
const cacheCreationInputTokens = "cache_creation_input_tokens" in usage ? usage.cache_creation_input_tokens ?? 0 : "prompt_cache_miss_tokens" in usage ? usage.prompt_cache_miss_tokens : 0;
|
|
4162
|
+
const cacheCreationInputTokens = "cache_creation_input_tokens" in usage ? usage.cache_creation_input_tokens ?? 0 : "prompt_cache_miss_tokens" in usage ? usage.prompt_cache_miss_tokens ?? 0 : 0;
|
|
4097
4163
|
const cacheReadInputTokens = finiteTokenCount(usage.cache_read_input_tokens) ?? finiteTokenCount(usage.prompt_cache_hit_tokens) ?? readNestedTokenCount(usage, ["input_tokens_details", "cached_tokens"]) ?? readNestedTokenCount(usage, ["prompt_tokens_details", "cached_tokens"]) ?? 0;
|
|
4098
4164
|
let cost = 0;
|
|
4099
4165
|
const providedCost = readFiniteNumberField(usage, "cost");
|
|
@@ -4120,6 +4186,7 @@ var normalizeUsage = (usage) => {
|
|
|
4120
4186
|
return {
|
|
4121
4187
|
input_tokens: inputTokens,
|
|
4122
4188
|
output_tokens: outputTokens,
|
|
4189
|
+
total_tokens: finiteTokenCount(usage.total_tokens) ?? inputTokens + outputTokens,
|
|
4123
4190
|
cache_creation_input_tokens: cacheCreationInputTokens,
|
|
4124
4191
|
cache_read_input_tokens: cacheReadInputTokens,
|
|
4125
4192
|
cost,
|
|
@@ -4317,7 +4384,9 @@ function normalizeDayStats(prev, userId, timeKey) {
|
|
|
4317
4384
|
models: {},
|
|
4318
4385
|
providers: {},
|
|
4319
4386
|
agents: {},
|
|
4320
|
-
entryPaths: {}
|
|
4387
|
+
entryPaths: {},
|
|
4388
|
+
categories: {},
|
|
4389
|
+
modelCategories: {}
|
|
4321
4390
|
};
|
|
4322
4391
|
}
|
|
4323
4392
|
const normalizeMap = (m) => {
|
|
@@ -4326,13 +4395,37 @@ function normalizeDayStats(prev, userId, timeKey) {
|
|
|
4326
4395
|
for (const [k, v] of Object.entries(m)) out[k] = normalizeStats(v);
|
|
4327
4396
|
return out;
|
|
4328
4397
|
};
|
|
4398
|
+
const normalizedTotal = normalizeStats(prev.total);
|
|
4399
|
+
const normalizedModels = normalizeMap(prev.models);
|
|
4400
|
+
const normalizedProviders = normalizeMap(prev.providers);
|
|
4401
|
+
const normalizedAgents = normalizeMap(prev.agents);
|
|
4402
|
+
const normalizedEntryPaths = normalizeMap(prev.entryPaths);
|
|
4403
|
+
let categories = normalizeMap(prev.categories);
|
|
4404
|
+
let modelCategories = normalizeMap(prev.modelCategories);
|
|
4405
|
+
const hasCategories = Object.keys(categories).length > 0;
|
|
4406
|
+
const hasModelCategories = Object.keys(modelCategories).length > 0;
|
|
4407
|
+
if (!hasCategories) {
|
|
4408
|
+
const hasActivity = normalizedTotal.count > 0 || normalizedTotal.failedCount > 0 || normalizedTotal.cost > 0 || normalizedTotal.tokens.input > 0 || normalizedTotal.tokens.output > 0;
|
|
4409
|
+
if (hasActivity) {
|
|
4410
|
+
categories = { platform: { ...normalizedTotal } };
|
|
4411
|
+
}
|
|
4412
|
+
}
|
|
4413
|
+
if (!hasModelCategories && Object.keys(normalizedModels).length > 0) {
|
|
4414
|
+
const legacyModelCats = {};
|
|
4415
|
+
for (const [modelKey, modelStat] of Object.entries(normalizedModels)) {
|
|
4416
|
+
legacyModelCats[`${modelKey}:::platform`] = { ...modelStat };
|
|
4417
|
+
}
|
|
4418
|
+
modelCategories = legacyModelCats;
|
|
4419
|
+
}
|
|
4329
4420
|
return {
|
|
4330
4421
|
...prev,
|
|
4331
|
-
total:
|
|
4332
|
-
models:
|
|
4333
|
-
providers:
|
|
4334
|
-
agents:
|
|
4335
|
-
entryPaths:
|
|
4422
|
+
total: normalizedTotal,
|
|
4423
|
+
models: normalizedModels,
|
|
4424
|
+
providers: normalizedProviders,
|
|
4425
|
+
agents: normalizedAgents,
|
|
4426
|
+
entryPaths: normalizedEntryPaths,
|
|
4427
|
+
categories,
|
|
4428
|
+
modelCategories
|
|
4336
4429
|
};
|
|
4337
4430
|
}
|
|
4338
4431
|
function applyTokenUsageToDayStats(prev, delta) {
|
|
@@ -4342,6 +4435,8 @@ function applyTokenUsageToDayStats(prev, delta) {
|
|
|
4342
4435
|
const cacheRead = delta.cache_read_input_tokens ?? 0;
|
|
4343
4436
|
const cacheCreation = delta.cache_creation_input_tokens ?? 0;
|
|
4344
4437
|
const isFailed = delta.status === "failed";
|
|
4438
|
+
const category = delta.billingCategory || "platform";
|
|
4439
|
+
const modelCategoryKey = `${modelName}:::${category}`;
|
|
4345
4440
|
const inc = (s) => {
|
|
4346
4441
|
const n = normalizeStats(s);
|
|
4347
4442
|
if (isFailed) {
|
|
@@ -4358,7 +4453,9 @@ function applyTokenUsageToDayStats(prev, delta) {
|
|
|
4358
4453
|
cacheRead: n.tokens.cacheRead + cacheRead,
|
|
4359
4454
|
cacheCreation: n.tokens.cacheCreation + cacheCreation
|
|
4360
4455
|
},
|
|
4361
|
-
|
|
4456
|
+
// 非计费记录(订阅/OAuth/CLI,billable=false)不向平台积分统计贡献 cost:
|
|
4457
|
+
// 订阅已付费、不按 token 计费,若不归零,图表「成本」视图会把订阅用量误显示为积分消耗。
|
|
4458
|
+
cost: Number((n.cost + (category === "subscription" ? 0 : delta.cost)).toFixed(6)),
|
|
4362
4459
|
failedCount: n.failedCount
|
|
4363
4460
|
};
|
|
4364
4461
|
};
|
|
@@ -4372,6 +4469,14 @@ function applyTokenUsageToDayStats(prev, delta) {
|
|
|
4372
4469
|
providers: {
|
|
4373
4470
|
...base.providers,
|
|
4374
4471
|
[providerName]: inc(base.providers[providerName])
|
|
4472
|
+
},
|
|
4473
|
+
categories: {
|
|
4474
|
+
...base.categories,
|
|
4475
|
+
[category]: inc(base.categories?.[category])
|
|
4476
|
+
},
|
|
4477
|
+
modelCategories: {
|
|
4478
|
+
...base.modelCategories,
|
|
4479
|
+
[modelCategoryKey]: inc(base.modelCategories?.[modelCategoryKey])
|
|
4375
4480
|
}
|
|
4376
4481
|
};
|
|
4377
4482
|
if (delta.agentId !== void 0) {
|
|
@@ -4443,7 +4548,8 @@ var updateStats = async (data, existingStats, key, thunkApi) => {
|
|
|
4443
4548
|
cache_read_input_tokens: data.cache_read_input_tokens,
|
|
4444
4549
|
cache_creation_input_tokens: data.cache_creation_input_tokens,
|
|
4445
4550
|
agentId: data.agentId ?? data.cybotId,
|
|
4446
|
-
entry_path: data.entry_path
|
|
4551
|
+
entry_path: data.entry_path,
|
|
4552
|
+
billingCategory: data.billable ? "platform" : "subscription"
|
|
4447
4553
|
});
|
|
4448
4554
|
await thunkApi.dispatch(
|
|
4449
4555
|
write({
|
|
@@ -4516,8 +4622,8 @@ var updateTokensAction = async ({ dialogId, dialogKey, usage: legacyUsage, usage
|
|
|
4516
4622
|
currentAccountUserId: currentUser?.userId ?? null
|
|
4517
4623
|
});
|
|
4518
4624
|
const timestamp = Date.now();
|
|
4519
|
-
const callId = typeof usageRecord?.callId === "string" && usageRecord.callId ? usageRecord.callId : void 0;
|
|
4520
4625
|
const usageRaw = usageRecord?.usage ?? legacyUsage;
|
|
4626
|
+
const callId = (typeof usageRecord?.callId === "string" && usageRecord.callId.trim() ? usageRecord.callId.trim() : void 0) ?? (typeof usageRaw?.provider_call_id === "string" && usageRaw.provider_call_id.trim() ? usageRaw.provider_call_id.trim() : void 0);
|
|
4521
4627
|
const usageWithStableCallId = callId && !usageRaw?.provider_call_id ? { ...usageRaw, provider_call_id: callId } : usageRaw;
|
|
4522
4628
|
const callAgentConfig = {
|
|
4523
4629
|
...agentConfig,
|
|
@@ -4742,7 +4848,7 @@ var deleteDialogThunk = async (payload, thunkApi) => {
|
|
|
4742
4848
|
}
|
|
4743
4849
|
if (isCurrentDialog) {
|
|
4744
4850
|
await thunkApi.dispatch(resetMsgs());
|
|
4745
|
-
const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-
|
|
4851
|
+
const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-RTPOD6EW.js");
|
|
4746
4852
|
dispatch(clearPendingAttachments2());
|
|
4747
4853
|
}
|
|
4748
4854
|
return { dialogKey, isCurrentDialog, attachmentPlan };
|
|
@@ -4750,39 +4856,39 @@ var deleteDialogThunk = async (payload, thunkApi) => {
|
|
|
4750
4856
|
|
|
4751
4857
|
// packages/chat/dialog/dialogSlice.ts
|
|
4752
4858
|
var runCreateDialogAction = async (args, thunkApi) => {
|
|
4753
|
-
const { createDialogAction } = await import("./createDialogAction-
|
|
4859
|
+
const { createDialogAction } = await import("./createDialogAction-2KNX6S2D.js");
|
|
4754
4860
|
return createDialogAction(args, thunkApi);
|
|
4755
4861
|
};
|
|
4756
4862
|
var runCreateAgentAutomationAction = async (args, thunkApi) => {
|
|
4757
|
-
const { createAgentAutomationAction } = await import("./createAgentAutomationAction-
|
|
4863
|
+
const { createAgentAutomationAction } = await import("./createAgentAutomationAction-ENDNA3Q4.js");
|
|
4758
4864
|
return createAgentAutomationAction(args, thunkApi);
|
|
4759
4865
|
};
|
|
4760
4866
|
var runUpdateDialogTitleAction = async (args, thunkApi) => {
|
|
4761
|
-
const { updateDialogTitleAction } = await import("./updateDialogTitleAction-
|
|
4867
|
+
const { updateDialogTitleAction } = await import("./updateDialogTitleAction-OAOP7CCE.js");
|
|
4762
4868
|
return updateDialogTitleAction(args, thunkApi);
|
|
4763
4869
|
};
|
|
4764
4870
|
var runAddDialogAgentAction = async (args, thunkApi) => {
|
|
4765
|
-
const { addDialogAgentAction } = await import("./addDialogAgentAction-
|
|
4871
|
+
const { addDialogAgentAction } = await import("./addDialogAgentAction-W3JGU4F7.js");
|
|
4766
4872
|
return addDialogAgentAction(args, thunkApi);
|
|
4767
4873
|
};
|
|
4768
4874
|
var runRemoveDialogAgentAction = async (args, thunkApi) => {
|
|
4769
|
-
const { removeDialogAgentAction } = await import("./removeDialogAgentAction-
|
|
4875
|
+
const { removeDialogAgentAction } = await import("./removeDialogAgentAction-DNONRKST.js");
|
|
4770
4876
|
return removeDialogAgentAction(args, thunkApi);
|
|
4771
4877
|
};
|
|
4772
4878
|
var runSetPrimaryDialogAgentAction = async (args, thunkApi) => {
|
|
4773
|
-
const { setPrimaryDialogAgentAction } = await import("./setPrimaryDialogAgentAction-
|
|
4879
|
+
const { setPrimaryDialogAgentAction } = await import("./setPrimaryDialogAgentAction-6C2HYNEC.js");
|
|
4774
4880
|
return setPrimaryDialogAgentAction(args, thunkApi);
|
|
4775
4881
|
};
|
|
4776
4882
|
var runSwitchDialogAgentAction = async (args, thunkApi) => {
|
|
4777
|
-
const { switchDialogAgentAction } = await import("./switchDialogAgentAction-
|
|
4883
|
+
const { switchDialogAgentAction } = await import("./switchDialogAgentAction-HP57XYFP.js");
|
|
4778
4884
|
return switchDialogAgentAction(args, thunkApi);
|
|
4779
4885
|
};
|
|
4780
4886
|
var runSetDialogExtraReferencesAction = async (args, thunkApi) => {
|
|
4781
|
-
const { setDialogExtraReferencesAction } = await import("./setDialogExtraReferencesAction-
|
|
4887
|
+
const { setDialogExtraReferencesAction } = await import("./setDialogExtraReferencesAction-ERHUPT3F.js");
|
|
4782
4888
|
return setDialogExtraReferencesAction(args, thunkApi);
|
|
4783
4889
|
};
|
|
4784
4890
|
var runHandleSendMessageAction = async (args, thunkApi) => {
|
|
4785
|
-
const { handleSendMessageAction } = await import("./handleSendMessageAction-
|
|
4891
|
+
const { handleSendMessageAction } = await import("./handleSendMessageAction-QYXDQXGH.js");
|
|
4786
4892
|
return handleSendMessageAction(args, thunkApi);
|
|
4787
4893
|
};
|
|
4788
4894
|
function clearDialogState() {
|
|
@@ -4795,7 +4901,7 @@ var createPageAndAddReference = createAsyncThunk(
|
|
|
4795
4901
|
async (payload, { dispatch, getState, rejectWithValue }) => {
|
|
4796
4902
|
const { slateData, jsonData, title, type, fileId, groupId, dialogKey } = payload;
|
|
4797
4903
|
try {
|
|
4798
|
-
const { createDocState } = await import("./docStore-
|
|
4904
|
+
const { createDocState } = await import("./docStore-TYHVLU7G.js");
|
|
4799
4905
|
const pageKey = await createDocState(
|
|
4800
4906
|
{ slateData, title },
|
|
4801
4907
|
{ dispatch, getState }
|
|
@@ -199,7 +199,7 @@ async function readDocFunc(args, thunkApi) {
|
|
|
199
199
|
throw new Error(`\u65E0\u6548\u7684\u9875\u9762 ID: ${id}\u3002\u9875\u9762 ID \u901A\u5E38\u4EE5 "page-" \u5F00\u5934\u3002`);
|
|
200
200
|
}
|
|
201
201
|
try {
|
|
202
|
-
const { readAction } = await import("./read-
|
|
202
|
+
const { readAction } = await import("./read-DQQ75VI3.js");
|
|
203
203
|
const pageData = await readAction({ dbKey: id }, thunkApi);
|
|
204
204
|
if (!pageData) {
|
|
205
205
|
throw new Error(`\u672A\u627E\u5230 ID \u4E3A ${id} \u7684\u9875\u9762\u3002`);
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isImageUrlPart
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6BYAXNH5.js";
|
|
4
4
|
import {
|
|
5
5
|
AGENT_SELECTION_PRIORITY_INSTRUCTIONS
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TNPCQNGQ.js";
|
|
7
7
|
import {
|
|
8
8
|
canonicalizeToolNames
|
|
9
9
|
} from "./chunk-O6OSWFZQ.js";
|
|
10
|
+
import {
|
|
11
|
+
PLATFORM_HOSTED_KIMI_K3_MODEL,
|
|
12
|
+
isFireworksKimiModel,
|
|
13
|
+
isNoloHostedProvider
|
|
14
|
+
} from "./chunk-ENYDQKOB.js";
|
|
10
15
|
import {
|
|
11
16
|
asTrimmedLowercaseString
|
|
12
17
|
} from "./chunk-QSJ3HFEF.js";
|
|
@@ -166,7 +171,7 @@ var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\
|
|
|
166
171
|
\u7528 startAgentRun \u542F\u52A8\u5B50 Agent\uFF08wait:false \u5F02\u6B65 fork+exec \u8FD4\u56DE runId\uFF1Bwait:true \u540C\u6B65\u7B49\u7ED3\u679C\uFF09\uFF0C\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF08wait/signal/proc \u8BED\u4E49\uFF09\u3002\u4F55\u65F6\u6D3E\u53D1\u89C1\u300C\u591A Agent \u534F\u4F5C\u300D\u6BB5\uFF1B\u672C\u6BB5\u53EA\u8BB2\u6D3E\u53D1\u4E4B\u540E\u600E\u4E48\u76EF\u3001\u600E\u4E48\u6392\u9519\u3002
|
|
167
172
|
|
|
168
173
|
1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u8981\u7ACB\u5373\u62FF\u7ED3\u679C\u5C31\u522B\u7528\u5F02\u6B65\uFF1A<100s \u5B50\u4EFB\u52A1\u76F4\u63A5 startAgentRun({ wait: true })\uFF1B\u5DF2\u5F02\u6B65\u6D3E\u51FA\u7684\u7528 controlAgentRun(action:"wait", runId) \u963B\u585E\u5230\u7EC8\u6001\u3002\u652F\u6301\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u684C\u9762 TUI\uFF09run \u5230\u7EC8\u6001\u81EA\u52A8\u6458\u8981\u5524\u9192\u4F60\uFF0C\u65E0\u5E76\u884C\u5DE5\u4F5C\u5219\u4E00\u53E5\u8BDD\u6536\u5C3E\uFF1B\u6CA1\u6709\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u88F8 CLI\u3001\u670D\u52A1\u7AEF runtime\uFF09\u7528 wait \u963B\u585E\uFF0C\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF\u67E5\u3002
|
|
169
|
-
2. \u7B49\u5F85/\u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status \u7684\u8BED\u4E49\u4EE5 startAgentRun \u4E0E controlAgentRun \u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002controlAgentRun \u53EA\u5728\u300C\u7B54\u6848\u4F1A\u6539\u53D8\u4F60\u4E0B\u4E00\u6B65\u52A8\u4F5C\u300D\u65F6\u7528\uFF08\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u53EB\u505C/\u8865\u6D3E\uFF09\uFF1B\u4E00\u6B21\u6027\u6B7B\u6D3B\u68C0\u67E5\u7528 status(runId, tailLines:0)\u3002\u5E76\u884C\uFF1A\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u4E4B\u540E\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002
|
|
174
|
+
2. \u7B49\u5F85/\u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status \u7684\u8BED\u4E49\u4EE5 startAgentRun \u4E0E controlAgentRun \u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002controlAgentRun \u53EA\u5728\u300C\u7B54\u6848\u4F1A\u6539\u53D8\u4F60\u4E0B\u4E00\u6B65\u52A8\u4F5C\u300D\u65F6\u7528\uFF08\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u53EB\u505C/\u8865\u6D3E\uFF09\uFF1B\u4E00\u6B21\u6027\u6B7B\u6D3B\u68C0\u67E5\u7528 status(runId, tailLines:0)\u3002\u5E76\u884C\uFF1A\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u4E4B\u540E\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002\u65E0\u6587\u4EF6\u4EA4\u96C6\u3001\u65E0\u771F\u5B9E\u6570\u636E\u4F9D\u8D56\u7684\u4EFB\u52A1\u9ED8\u8BA4\u5E76\u53D1\u6D3E\u53D1\u2014\u2014\u4E0D\u8981\u56E0\u5B83\u4EEC\u6070\u597D\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\u7684\u4FDD\u5B88\u5047\u8BBE\uFF08\u540C\u901A\u9053\u5141\u8BB8\u5E76\u53D1 fork \u591A\u5B9E\u4F8B\uFF0C\u5B9E\u4F8B\u95F4\u65E0\u4E0A\u4E0B\u6587\u5171\u4EAB\uFF09\uFF1B\u53EA\u6709\u4EFB\u52A1\u95F4\u5B58\u5728\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
|
|
170
175
|
3. \u6392\u9519\uFF1A\u5148\u5206\u8BCA\u518D\u4E0B\u7ED3\u8BBA\u3002\u2460 \u590D\u6838 agentKey \u662F\u5426\u7167\u6284\u81EA listAgents\uFF08\u4E0D\u662F\u5C31\u5148\u4FEE key\uFF0C\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B\u2461 \u62A5\u9519\u542B not found / invalid ref / Local agent config not found \u2192 \u5148 readAgent \u590D\u6838\uFF0C**\u7981\u6B62**\u636E\u6B64\u63A8\u65AD\u51ED\u8BC1\u7F3A\u5931\u6216\u901A\u9053\u5168\u6302\uFF1B\u2462 \u540C\u4E00\u5DF2\u9A8C\u8BC1 key \u4E0A\u4ECD\u5931\u8D25\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u2192 \u624D\u8BB0\u4E3A\u901A\u9053\u6545\u969C\u3002
|
|
171
176
|
4. \u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u524D\uFF0C\u81F3\u5C11\u5BF9 2 \u4E2A\u4E0D\u540C\u5019\u9009\u5404\u5B8C\u6210\u300C\u5DF2\u9A8C\u8BC1 key + \u4E00\u6B21\u771F\u5B9E\u6D3E\u53D1\u300D\uFF1B\u5019\u9009\u4E0D\u8DB3 2 \u4E2A\u5C31\u5982\u5B9E\u62A5\u544A\u300C\u4EC5\u6B64\u5019\u9009\u4E14\u901A\u9053\u5931\u8D25\u300D\uFF0C\u4E0D\u5F97\u5938\u5927\u6210\u5168\u5E93\u4E0D\u53EF\u7528\u3002\u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u6BEB\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\uFF1Bstop \u4E4B\u524D\u5148\u770B\u65E5\u5FD7\u786E\u8BA4\u662F\u771F\u5361\u6B7B\uFF0C\u5E76\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\u2014\u2014\u522B\u5047\u8BBE\u300C\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1\u300D\u3002`;
|
|
172
177
|
var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C\uFF08\u591A Agent \u534F\u4F5C\uFF1A\u8BA1\u5212 \u2192 \u6309\u9700\u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
|
|
@@ -191,11 +196,12 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
|
|
|
191
196
|
${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
|
|
192
197
|
- \u4E2D\u6587\u5199\u7A3F/\u957F\u6587\u521B\u4F5C/\u4F4E AI \u5473\u5185\u5BB9\uFF1A\u4F18\u5148\u9009 \`gemini-3.7-flash\`\uFF08\u884C\u6587\u81EA\u7136\u3001\u9AD8\u6027\u4EF7\u6BD4\uFF09\u6216 \`kimi-k3\`\u3002
|
|
193
198
|
- \u9876\u6863\u6A21\u578B\uFF08Opus 5\u3001GPT-5.6 Sol \u53CA\u540C\u7EA7\uFF09\u81EA\u52A8\u59D4\u6258\u786C\u95E8\uFF1A\u4EC5\u7528\u4E8E\u590D\u6742\u67B6\u6784/\u8DE8\u57DF\u8BBE\u8BA1\u3001\u91CD\u5927\u4E8B\u6545\u3001\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027\u9AD8\u98CE\u9669\u5206\u6790\u3001\u8FBE\u6807\u7684\u6DF1 review\uFF0C\u6216\u4F4E\u4EF7\u5019\u9009\u5DF2\u6709\u5931\u8D25\u8BC1\u636E\u540E\u7684\u5347\u7EA7\u3002\u6DF1 review \u8FBE\u6807\u7EBF\uFF1D\u6539\u52A8\u6587\u4EF6\u6570 \u2265 30 \u4E14\u89E6\u53CA\u8BA1\u8D39/\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027/\u6838\u5FC3\u8DEF\u7531\uFF0C\u6216\u4F4E\u4EF7 reviewer \u5DF2 BLOCK/\u901A\u9053\u5931\u8D25\u3002\u666E\u901A review \u9ED8\u8BA4\u6D3E\u4F4E\u4EF7\u5019\u9009\u3002\u9009\u9876\u6863\u8981\u5728\u56DE\u590D\u91CC\u8BF4\u660E\u7406\u7531\uFF1B\u7528\u6237\u70B9\u540D\u4E0D\u53D7\u6B64\u9650\u3002
|
|
199
|
+
- \u901A\u9053\u6392\u9664\u5224\u636E\uFF1A\u53EA\u6392\u9664\u300C\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\u300D\u4E0E\u300C\u5F53\u65F6\u5B9E\u6D4B\u6B7B\u56E0\u7684\u574F\u901A\u9053\u300D\uFF08\u914D\u989D\u8017\u5C3D/\u4F59\u989D\u4E0D\u8DB3/\u9650\u6D41\uFF0C\u987B\u6709\u5F53\u6B21\u9519\u8BEF\u8BC1\u636E\uFF09\u3002\u7F16\u6392\u8005\u81EA\u8EAB\u7684 agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u65B0\u5B9E\u4F8B\u4E0D\u5E26\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF1A\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u662F\u5408\u6CD5 reviewer\uFF0C\u4E14 flash \u6863\u5E38\u662F\u6700\u4FBF\u5B9C\u7684 review \u901A\u9053\uFF1B\u300C\u4E0D\u70E7\u5E73\u53F0\u79EF\u5206\u300D\u4F18\u5148\u7EA7\u5BF9\u5927\u8DD1\u91CF\u6267\u884C\u8005\u6210\u7ACB\uFF0C\u5BF9 flash \u6863 review\uFF08\u6210\u672C\u53EF\u5FFD\u7565\uFF09\u4E0D\u9002\u7528\u3002
|
|
194
200
|
- \u4E0D\u51ED\u540D\u5B57\u7F16\u9020\u80FD\u529B\uFF0C\u4E0D\u7D22\u53D6 prompt/\u5BC6\u94A5/\u6570\u636E\u5E93 key \u6765\u9009\u4EBA\uFF1B\u6D3E\u53D1\u524D\u8DF3\u8FC7\u5DF2\u77E5\u574F\u901A\u9053\uFF08\u914D\u7F6E\u7F3A\u5931/\u533A\u57DF\u9650\u5236/\u7F51\u5173 400\uFF09\u3002
|
|
195
201
|
|
|
196
|
-
**\u62C6\u5206\u4E0E\u6D3E\u53D1\u8D28\u91CF**\uFF1A\u6309\u72EC\u7ACB\u9886\u57DF\u62C6\uFF0C\u4E0D\u6309\u6587\u4EF6\u6570\u91CF\u62C6\uFF1B\u5171\u4EAB\u63A5\u53E3/\u5F3A\u987A\u5E8F\u4F9D\u8D56\u7684\u5DE5\u4F5C\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u4E2A Agent \u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\uFF0C\u53EA\u4F20\u5B8C\u6210\u8BE5\u5B50\u4EFB\u52A1\u6240\u9700\u7684\u6700\u5C0F\u5DE5\u4F5C\u96C6\uFF08\u4E0A\u4E0B\u6587\u6700\u5C0F\u5316\uFF09\uFF0C\u4E25\u7981\u8F6C\u53D1\u65E0\u5173\u5386\u53F2\u4E0E\u65E5\u5FD7\uFF1B\u7236 Agent \u4FDD\u7559\u76EE\u6807\u3001\u5951\u7EA6\u3001\u96C6\u6210\u3001\u6700\u7EC8\u9A8C\u8BC1\u548C\u7528\u6237\u6C9F\u901A\u3002
|
|
202
|
+
**\u62C6\u5206\u4E0E\u6D3E\u53D1\u8D28\u91CF**\uFF1A\u6309\u72EC\u7ACB\u9886\u57DF\u62C6\uFF0C\u4E0D\u6309\u6587\u4EF6\u6570\u91CF\u62C6\uFF1B\u5171\u4EAB\u63A5\u53E3/\u5F3A\u987A\u5E8F\u4F9D\u8D56\u7684\u5DE5\u4F5C\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u4E2A Agent \u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\uFF0C\u53EA\u4F20\u5B8C\u6210\u8BE5\u5B50\u4EFB\u52A1\u6240\u9700\u7684\u6700\u5C0F\u5DE5\u4F5C\u96C6\uFF08\u4E0A\u4E0B\u6587\u6700\u5C0F\u5316\uFF09\uFF0C\u4E25\u7981\u8F6C\u53D1\u65E0\u5173\u5386\u53F2\u4E0E\u65E5\u5FD7\uFF1B\u7236 Agent \u4FDD\u7559\u76EE\u6807\u3001\u5951\u7EA6\u3001\u96C6\u6210\u3001\u6700\u7EC8\u9A8C\u8BC1\u548C\u7528\u6237\u6C9F\u901A\u3002brief \u5BF9\u6D4B\u8BD5\u7C7B DoD \u5FC5\u987B\u9489\u6B7B\u57FA\u7EBF\u7CBE\u786E\u6570\u5B57\uFF08\u6D3E\u53D1\u524D\u4EB2\u81EA\u8DD1 bun test <scope> \u8BB0\u4E0B pass/fail\uFF0C\u5199\u660E\u65E2\u6709\u5931\u8D25\u5F52\u5C5E\uFF09\uFF0C\u9A8C\u6536\u65F6\u4EB2\u81EA\u590D\u8DD1\u5BF9\u7167\u2014\u2014fail \u8D85\u57FA\u7EBF\u5373\u6267\u884C\u8005\u5F15\u5165\u56DE\u5F52\uFF08flaky \u53E6\u884C\u7504\u522B\uFF09\uFF1B\u65E0\u6570\u5B57\u7684\u300C\u6D4B\u8BD5\u901A\u8FC7\u300D\u81EA\u8FF0\u6309\u672A\u9A8C\u8BC1\u5904\u7406\u3002
|
|
197
203
|
|
|
198
|
-
**\u72EC\u7ACB\u5BA1\u67E5\uFF08commit \u524D\u786C\u95E8\uFF09**\uFF1A\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review\uFF0Creviewer \u4E0D\u53EF\u662F\u81EA\u5DF1\uFF1B\u65E0 review \u4E0D commit\u3002\u81EA\u52A8\u5FAA\u73AF\uFF1A\u6539\u5B8C \u2192 startAgentRun(ephemeral:true) \u6D3E reviewer \u5BA1 diff \u2192 \u6709 finding \u5219\u4FEE \u2192 \u590D\u5BA1\u76F4\u5230 APPROVE\uFF08\u65E0 CRITICAL/HIGH\uFF09\u624D\u63D0\u4EA4\uFF1BBLOCK \u5FC5\u4FEE\u3001WARNING \u62A5\u7528\u6237\u3002review \u8BC1\u636E\u786C\u95E8\uFF1A\u4EC5\u5F53 reviewer \u8FD4\u56DE\u53EF\u8BFB\u7684\u6700\u7EC8\u6587\u672C\u4E14\u660E\u786E\u542B APPROVE\u3001\u65E0 CRITICAL/HIGH \u624D\u7B97\u901A\u8FC7\uFF1Bdone\u3001exit 0\u3001\u7A7A dialog\u3001messagesCount=0\u3001agentReply=null\u3001\u8D85\u65F6\u5747\u89C6\u4E3A\u672A\u5BA1\u67E5\uFF0C\u4E25\u7981\u63D0\u4EA4\u3002review context contract\uFF1A\u6D3E reviewer \u524D\u6309\u6539\u52A8\u8303\u56F4\u8BFB\u53D6 AGENTS.md\u3001docs/workflow.md\u3001\u5F53\u524D plan/progress\u3001\u547D\u4E2D\u7684 SKILL.md\u3001references\u3001\u6D89\u53CA\u4EA7\u54C1\u53D6\u820D\u65F6\u7684 docs/product-positioning.md\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\u3002\u5BA1\u67E5\u6E05\u5355\uFF1A\u53EF\u8BFB\u6027/\u53EF\u641C\u7D22\u6027\u3001\u53EF\u7EF4\u62A4\u6027/\u5220\u9664\u6210\u672C\u3001\u53EF\u7EC4\u5408\u6027/\u590D\u7528\u3001\u91CD\u590D\u5B9E\u73B0\u3001\u53EF\u5220\u9664\u4EE3\u7801\u3002\u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\u3002\u6D89\u53CA\u4ED3\u5E93\u6587\u4EF6\u5199\u5165\u5FC5\u987B\u7528\u72EC\u7ACB worktree\u3002\u4ED3\u5E93\u7EA7 plan / review / worktree \u7EAA\u5F8B\u4EE5 AGENTS.md \u4E3A\u51C6\u3002
|
|
204
|
+
**\u72EC\u7ACB\u5BA1\u67E5\uFF08commit \u524D\u786C\u95E8\uFF09**\uFF1A\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review\uFF0Creviewer \u4E0D\u53EF\u662F\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\uFF08\u7F16\u6392\u8005\u4EE5\u81EA\u8EAB agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u5168\u65B0\u5B9E\u4F8B\u4E0D\u5171\u4EAB\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF0C\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u4E0D\u7B97\u300C\u81EA\u5DF1\u300D\uFF09\uFF1B\u5168\u90E8\u8DE8\u5BB6\u65CF\u901A\u9053\u4E0D\u53EF\u7528\u65F6\uFF0C\u540C\u6A21\u578B\u5BB6\u65CF\u7684\u6D3E\u53D1\u65B0\u5B9E\u4F8B\uFF08\u4E0A\u4E0B\u6587\u4ECD\u9694\u79BB\uFF09\u7ECF owner \u6388\u6743\u53EF\u4F5C\u964D\u7EA7 reviewer\uFF0Ctrailer \u6CE8\u660E\u5B9E\u9645\u5BA1\u67E5\u8005\u4E0E\u539F\u56E0\uFF1B\u65E0 review \u4E0D commit\u3002\u81EA\u52A8\u5FAA\u73AF\uFF1A\u6539\u5B8C \u2192 startAgentRun(ephemeral:true) \u6D3E reviewer \u5BA1 diff \u2192 \u6709 finding \u5219\u4FEE \u2192 \u590D\u5BA1\u76F4\u5230 APPROVE\uFF08\u65E0 CRITICAL/HIGH\uFF09\u624D\u63D0\u4EA4\uFF1BBLOCK \u5FC5\u4FEE\u3001WARNING \u62A5\u7528\u6237\u3002review \u8BC1\u636E\u786C\u95E8\uFF1A\u4EC5\u5F53 reviewer \u8FD4\u56DE\u53EF\u8BFB\u7684\u6700\u7EC8\u6587\u672C\u4E14\u660E\u786E\u542B APPROVE\u3001\u65E0 CRITICAL/HIGH \u624D\u7B97\u901A\u8FC7\uFF1Bdone\u3001exit 0\u3001\u7A7A dialog\u3001messagesCount=0\u3001agentReply=null\u3001\u8D85\u65F6\u5747\u89C6\u4E3A\u672A\u5BA1\u67E5\uFF0C\u4E25\u7981\u63D0\u4EA4\u3002review context contract\uFF1A\u6D3E reviewer \u524D\u6309\u6539\u52A8\u8303\u56F4\u8BFB\u53D6 AGENTS.md\u3001docs/workflow.md\u3001\u5F53\u524D plan/progress\u3001\u547D\u4E2D\u7684 SKILL.md\u3001references\u3001\u6D89\u53CA\u4EA7\u54C1\u53D6\u820D\u65F6\u7684 docs/product-positioning.md\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\u3002\u5BA1\u67E5\u6E05\u5355\uFF1A\u53EF\u8BFB\u6027/\u53EF\u641C\u7D22\u6027\u3001\u53EF\u7EF4\u62A4\u6027/\u5220\u9664\u6210\u672C\u3001\u53EF\u7EC4\u5408\u6027/\u590D\u7528\u3001\u91CD\u590D\u5B9E\u73B0\u3001\u53EF\u5220\u9664\u4EE3\u7801\u3002\u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\u3002\u6D89\u53CA\u4ED3\u5E93\u6587\u4EF6\u5199\u5165\u5FC5\u987B\u7528\u72EC\u7ACB worktree\u3002\u4ED3\u5E93\u7EA7 plan / review / worktree \u7EAA\u5F8B\u4EE5 AGENTS.md \u4E3A\u51C6\u3002
|
|
199
205
|
|
|
200
206
|
**\u5371\u9669 / \u4E0D\u53EF\u9006\u64CD\u4F5C**\uFF1A
|
|
201
207
|
- \u6D89\u53CA\u4E0D\u53EF\u9006\u64CD\u4F5C\uFF08\u4FEE\u6539\u6587\u4EF6\u3001\u5220\u9664\u6570\u636E\u3001\u53D1\u9001\u6D88\u606F\u3001\u751F\u6210\u6B63\u5F0F\u6587\u4EF6\u3001\u6267\u884C\u4EA4\u6613\u7B49\uFF09\u65F6\uFF0C\u4F18\u5148\u9884\u89C8\u6216\u5411\u7528\u6237\u786E\u8BA4\u3002
|
|
@@ -379,11 +385,48 @@ function toBareImageUrlMessages(messages) {
|
|
|
379
385
|
});
|
|
380
386
|
}
|
|
381
387
|
|
|
388
|
+
// packages/integrations/openai/providerBodyCompatibility.ts
|
|
389
|
+
var MOONSHOT_KIMI_K3_MODEL = "kimi-k3";
|
|
390
|
+
var isKimiK3ProviderModel = (provider, model) => {
|
|
391
|
+
const normalizedModel = asTrimmedLowercaseString(model);
|
|
392
|
+
if (asTrimmedLowercaseString(provider) === "moonshot") {
|
|
393
|
+
return normalizedModel === MOONSHOT_KIMI_K3_MODEL;
|
|
394
|
+
}
|
|
395
|
+
return isNoloHostedProvider(provider) && normalizedModel === PLATFORM_HOSTED_KIMI_K3_MODEL;
|
|
396
|
+
};
|
|
397
|
+
var normalizeChatCompletionsBodyForProvider = ({
|
|
398
|
+
body,
|
|
399
|
+
provider,
|
|
400
|
+
model
|
|
401
|
+
}) => {
|
|
402
|
+
const nextBody = { ...body, model };
|
|
403
|
+
const normalizedProvider = asTrimmedLowercaseString(provider);
|
|
404
|
+
if (normalizedProvider === "fireworks" && isFireworksKimiModel(model)) {
|
|
405
|
+
delete nextBody.reasoning;
|
|
406
|
+
delete nextBody.reasoning_effort;
|
|
407
|
+
}
|
|
408
|
+
if (isKimiK3ProviderModel(provider, model)) {
|
|
409
|
+
delete nextBody.temperature;
|
|
410
|
+
delete nextBody.top_p;
|
|
411
|
+
delete nextBody.frequency_penalty;
|
|
412
|
+
delete nextBody.presence_penalty;
|
|
413
|
+
if (typeof nextBody.max_tokens === "number") {
|
|
414
|
+
nextBody.max_completion_tokens = nextBody.max_tokens;
|
|
415
|
+
delete nextBody.max_tokens;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
if (Array.isArray(nextBody.messages) && requiresBareImageUrl({ provider, model })) {
|
|
419
|
+
nextBody.messages = toBareImageUrlMessages(nextBody.messages);
|
|
420
|
+
}
|
|
421
|
+
return nextBody;
|
|
422
|
+
};
|
|
423
|
+
|
|
382
424
|
export {
|
|
383
425
|
buildIdentityBlock,
|
|
384
426
|
buildRuntimeGuidanceBlocks,
|
|
385
427
|
resolveToolGuidedSections,
|
|
386
428
|
buildCurrentTimeBlock,
|
|
387
429
|
requiresBareImageUrl,
|
|
388
|
-
toBareImageUrlMessages
|
|
430
|
+
toBareImageUrlMessages,
|
|
431
|
+
normalizeChatCompletionsBodyForProvider
|
|
389
432
|
};
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-DWLEOOGR.js";
|
|
4
4
|
import {
|
|
5
5
|
addContentAction
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-3EEK7T3D.js";
|
|
7
7
|
import {
|
|
8
8
|
upload
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WVGEBWA6.js";
|
|
10
10
|
import {
|
|
11
11
|
getRuntimeServerContext
|
|
12
12
|
} from "./chunk-HHBXCRJS.js";
|
|
@@ -9,8 +9,15 @@ function resolveNoloHome(options = {}) {
|
|
|
9
9
|
const env = options.env ?? process.env;
|
|
10
10
|
return env.NOLO_HOME?.trim() || path.join(options.homeDir ?? homedir(), ".nolo");
|
|
11
11
|
}
|
|
12
|
+
function resolveLocalDialogDbCandidates(options = {}) {
|
|
13
|
+
const candidates = [resolveServerDbPath(options)];
|
|
14
|
+
const noloHomeDb = path.join(resolveNoloHome(options), "data", "leveldb");
|
|
15
|
+
if (!candidates.includes(noloHomeDb)) candidates.push(noloHomeDb);
|
|
16
|
+
return candidates;
|
|
17
|
+
}
|
|
12
18
|
|
|
13
19
|
export {
|
|
14
20
|
resolveServerDbPath,
|
|
15
|
-
resolveNoloHome
|
|
21
|
+
resolveNoloHome,
|
|
22
|
+
resolveLocalDialogDbCandidates
|
|
16
23
|
};
|