nolo-cli 0.54.0 → 0.61.0-alpha.3
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/README.md +3 -3
- package/{_executeModel-OPTKYHJA.js → _executeModel-R26QYY66.js} +50 -46
- package/{action-ORXWW2ZG.js → action-76JX3JX3.js} +7 -6
- package/{addContentAction-53BZ34AE.js → addContentAction-V3NAZRTJ.js} +6 -5
- package/{addDialogAgentAction-JRYUS54Y.js → addDialogAgentAction-RZOAF46K.js} +5 -4
- package/{agentDeleteCommand-FJIWU2BS.js → agentDeleteCommand-6GNQA4J4.js} +30 -27
- package/{agentEmailCommands-CE32L43B.js → agentEmailCommands-HH67CYKD.js} +61 -57
- package/{agentGrantCommands-2LEZDADN.js → agentGrantCommands-R3VQEZJR.js} +1 -1
- package/{agentListCommands-VJNKULIK.js → agentListCommands-23XW3OPZ.js} +61 -31
- package/{agentMachineCommands-HCJ3WQXL.js → agentMachineCommands-HXHASEWO.js} +31 -28
- package/{agentPullCommand-M552CYSI.js → agentPullCommand-N7L2CT7L.js} +2 -2
- package/{agentRecordCommands-QFWERED4.js → agentRecordCommands-UHTQJVGC.js} +59 -55
- package/{agentRunCommand-G3GQMUNN.js → agentRunCommand-OAMT77EX.js} +63 -59
- package/{agentRunControl-INKFDXDA.js → agentRunControl-WECMOO6O.js} +11 -6
- package/{agentRuntimeLocal-K327ELSL.js → agentRuntimeLocal-QBK4H3T2.js} +26 -23
- package/{agentSlice-ODKF4J6M.js → agentSlice-7XJH5WQF.js} +8 -7
- package/{appDeleteCommands-XUXMFDI4.js → appDeleteCommands-AX2O6VDV.js} +30 -27
- package/{appDeployCommands-37F4GPCU.js → appDeployCommands-L5ZR26CB.js} +30 -27
- package/{appDeployStatusCommands-WSPU7TUK.js → appDeployStatusCommands-5HQHELRA.js} +30 -27
- package/{appGetCommands-YLOBA3EM.js → appGetCommands-HVSYOS57.js} +30 -27
- package/{appListCommands-UD62R5ME.js → appListCommands-XV2FPTWX.js} +30 -27
- package/{authCommand-OK6HLHGS.js → authCommand-WOTWLJNF.js} +35 -29
- package/{authCommands-2DUIUEMT.js → authCommands-ILTBI6JV.js} +7 -5
- package/{chatQueueReduxAdapter-TV2TUOQS.js → chatQueueReduxAdapter-F3R253JE.js} +20 -18
- package/{chunk-HPW5MNDQ.js → chunk-22BTGNSP.js} +113 -57
- package/{chunk-UNZDCI3O.js → chunk-2KDR4CWE.js} +35 -4
- package/{chunk-3ZTR7ZO4.js → chunk-2PGGC63K.js} +1 -1
- package/{chunk-EA5OYZVD.js → chunk-37XDGCY7.js} +1 -1
- package/chunk-3BLB7QKO.js +433 -0
- package/{chunk-CS6TCJ7E.js → chunk-3JQ2NRYU.js} +30 -7
- package/{chunk-3LKZRP7E.js → chunk-3QGUVVX5.js} +2 -2
- package/{chunk-SSXTSPSG.js → chunk-45YO6H7P.js} +71 -30
- package/{chunk-YLCUU3WM.js → chunk-4NJEIGBQ.js} +5 -5
- package/{chunk-K4NISKOR.js → chunk-5ZYA4JJ3.js} +47 -17
- package/{chunk-6HIGYUBQ.js → chunk-6XIE5ZGI.js} +1 -1
- package/{chunk-3Y2K5O2R.js → chunk-7A3RRUCQ.js} +125 -40
- package/{chunk-6COJEAYH.js → chunk-7KELZLC2.js} +44 -37
- package/chunk-AETZ7AD6.js +274 -0
- package/chunk-BFU6C242.js +66 -0
- package/{chunk-IA3A5373.js → chunk-C3FZR5EC.js} +1 -1
- package/{chunk-IWUMSAQF.js → chunk-CJCJF5XB.js} +26 -3
- package/{chunk-UGBHDMHI.js → chunk-CP7VIDZ7.js} +1 -1
- package/{chunk-TR4DXUYX.js → chunk-CQ2OZMLQ.js} +1181 -737
- package/{chunk-JON2PHYT.js → chunk-CTCW7U7N.js} +1 -1
- package/{chunk-7NYDJAQ7.js → chunk-DNNSCSA2.js} +5 -5
- package/{chunk-NI2BS6UD.js → chunk-DWUCB2A3.js} +1 -1
- package/{chunk-FJHMLRDQ.js → chunk-DWYSDNOH.js} +22 -28
- package/{chunk-AA564GBL.js → chunk-E3YVTQWT.js} +2 -2
- package/chunk-E4MARS3Q.js +114 -0
- package/{chunk-75MSWWUE.js → chunk-E6RGHPDR.js} +5 -3
- package/chunk-EDKF7RX4.js +30 -0
- package/{chunk-TC6P4NDR.js → chunk-F44FAXP2.js} +6 -6
- package/{chunk-SYYUU7EV.js → chunk-FHAGENAS.js} +2 -3
- package/{chunk-NJUQBYFJ.js → chunk-FKFMIBTT.js} +3 -1
- package/{chunk-INZZJSQF.js → chunk-FZGV4FGK.js} +24 -12
- package/{chunk-6HDYSFLO.js → chunk-GSXDRMDO.js} +3 -3
- package/{chunk-AUVFJGPC.js → chunk-JX5PJCWS.js} +7 -5
- package/{chunk-LYGNQHUW.js → chunk-JYYZCK2Z.js} +2 -4
- package/{chunk-EY7V7REW.js → chunk-KHCLMKZZ.js} +6 -280
- package/{chunk-EJE33XNR.js → chunk-KSCXMC6U.js} +1521 -565
- package/{chunk-XOJRZUPF.js → chunk-KWSQR2KK.js} +14 -29
- package/{chunk-2WBFJHQA.js → chunk-L7B47JXR.js} +34 -39
- package/{chunk-EICIFHVS.js → chunk-LAFC3B2I.js} +1 -1
- package/{chunk-N4JKMCY3.js → chunk-LJKICKVC.js} +2 -2
- package/chunk-M3JEW6N6.js +193 -0
- package/{chunk-LRGKOI5Y.js → chunk-MBOEV4L2.js} +7 -3
- package/{chunk-SVDMVX4G.js → chunk-MMZ6ZTVO.js} +112 -73
- package/{chunk-JDSUTNYY.js → chunk-MP64VFGD.js} +2 -2
- package/{chunk-NFLA6GSU.js → chunk-MXUDQZXQ.js} +44 -5
- package/chunk-N4G4PKQ6.js +23 -0
- package/{chunk-WQHGJHAL.js → chunk-N6HLMLKE.js} +732 -726
- package/{chunk-YQBXOHE6.js → chunk-NO42UD73.js} +1 -1
- package/{chunk-MLEZPE3U.js → chunk-NRRPKMM7.js} +4 -4
- package/{chunk-KXKQO4Q6.js → chunk-NTW5GWDM.js} +58 -1
- package/chunk-ONXOABJR.js +215 -0
- package/{chunk-TY3ADTX5.js → chunk-OZX2IPKM.js} +7 -2
- package/{chunk-Q4XZVZPN.js → chunk-P7OOB7QP.js} +1 -1
- package/{chunk-XIJZOCSP.js → chunk-PEZJEQAO.js} +1 -1
- package/{chunk-SWJGJMTW.js → chunk-PQDIDWGX.js} +1 -1
- package/chunk-PSCNXBYA.js +11 -0
- package/{chunk-BY2FF2C4.js → chunk-QEFJJS2I.js} +55 -73
- package/{chunk-BG7J6Y5X.js → chunk-QEW2MFDQ.js} +1 -1
- package/{chunk-KLIBF3BY.js → chunk-RDBARW6T.js} +8 -3
- package/{chunk-ZVOHVJI3.js → chunk-RJ2SAFB5.js} +82 -35
- package/{chunk-MYMBBB6Q.js → chunk-RVWRKFUB.js} +5 -3
- package/{chunk-43CXXVJD.js → chunk-RXX4GDIH.js} +1 -1
- package/chunk-SEJ5OS6F.js +49 -0
- package/{chunk-JXIP6ZWH.js → chunk-SKIRVYEI.js} +18 -5
- package/{chunk-SAJSBPI2.js → chunk-SOJM57FX.js} +5 -2
- package/{chunk-EKLRRZIN.js → chunk-SPAQ4PVV.js} +0 -5
- package/{chunk-RHMDMTDK.js → chunk-SYNKICCB.js} +2 -2
- package/{chunk-YBFJQC2M.js → chunk-TBHAHL33.js} +65 -42
- package/{chunk-L7NG2M6H.js → chunk-TRV2MIDW.js} +89 -74
- package/{chunk-5UAYZEXO.js → chunk-UZPQSVM6.js} +1 -1
- package/{chunk-7FAS3NEF.js → chunk-VAKVNHK5.js} +19 -15
- package/{chunk-UOWXD4VN.js → chunk-VHO3TMQZ.js} +336 -244
- package/{chunk-SVC3GGUA.js → chunk-VMWYBIXG.js} +7 -5
- package/{chunk-ZHXJ6M7T.js → chunk-W7XHHYWM.js} +4 -0
- package/{chunk-UR66XPVF.js → chunk-XAVSS3KE.js} +21 -3
- package/{chunk-A65UV3M5.js → chunk-XOKOSO35.js} +10 -19
- package/{chunk-VZMUOPYG.js → chunk-XTJTN3RW.js} +46 -3
- package/{chunk-T5HJEUQN.js → chunk-YCDWJX45.js} +1 -1
- package/{chunk-BBTN4NQD.js → chunk-Z4QSJILV.js} +85 -13
- package/{chunk-5FCIPEKT.js → chunk-Z5MHFBJZ.js} +1051 -926
- package/{chunk-O5FLGN2L.js → chunk-ZRSJ3JEH.js} +6 -2
- package/{cliExecutor-BBUVQU4L.js → cliExecutor-HG3S345O.js} +1 -1
- package/{codingSkills-BCQXRZOI.js → codingSkills-TKROLCBA.js} +4 -3
- package/{contentThunks-KNI6VXLT.js → contentThunks-OZPK5B4Z.js} +21 -19
- package/{cooldownCommands-GI5NNWGL.js → cooldownCommands-BSCH2W7P.js} +2 -2
- package/{createAgentAutomationAction-OK4L33KF.js → createAgentAutomationAction-LCIBGE5T.js} +23 -21
- package/{createDialogAction-JDSMY4AY.js → createDialogAction-JPJZMHJE.js} +25 -22
- package/{createPageAction-T7RA3HCG.js → createPageAction-6P2WLNHO.js} +26 -23
- package/{dbSlice-TVX6SN2T.js → dbSlice-IBVOBVMS.js} +5 -4
- package/{deleteFile-JYKRT7C3.js → deleteFile-FWP2PSBG.js} +3 -2
- package/{dialogCommands-UQZYWOOV.js → dialogCommands-WAFKC3KK.js} +30 -27
- package/{dialogSlice-TYW2G7IL.js → dialogSlice-R5RZHFTU.js} +20 -18
- package/{docCreateCommands-OA6HZBWO.js → docCreateCommands-GHGB42S7.js} +32 -28
- package/{docDeleteCommands-KBB3YQI2.js → docDeleteCommands-Y5I7ZEX4.js} +33 -29
- package/{docReadCommands-ZLMFVC67.js → docReadCommands-BMXM6J7T.js} +32 -28
- package/{docStore-2URPBVCS.js → docStore-DKWZ6XJ5.js} +6 -5
- package/{docUpdateCommands-HMH5KUON.js → docUpdateCommands-QNABH3M2.js} +32 -28
- package/{getPricing-RFOPUWHY.js → getPricing-NM3NUTAS.js} +4 -4
- package/handleSendMessageAction-UQGKM4UX.js +675 -0
- package/index.js +79 -88
- package/{lib-2ZTNRXR4.js → lib-FRRS27KN.js} +63 -28
- package/{localRuntimeAuthority-KQDAE64E.js → localRuntimeAuthority-R5UBODT3.js} +6 -4
- package/{localRuntimeDb-PF7CFKDL.js → localRuntimeDb-P37ZTX55.js} +1 -1
- package/{machineCommands-RK6L7ZWL.js → machineCommands-YDAIPYU5.js} +298 -80
- package/{machineWsRunDispatch-3X64DW2Z.js → machineWsRunDispatch-O6RM2ECT.js} +57 -53
- package/{memberThunks-THZYZFSN.js → memberThunks-VZI6G7YZ.js} +10 -8
- package/{models-JVKUEER5.js → models-FAMINFZ7.js} +2 -2
- package/package.json +3 -2
- package/{read-K4JU4MQC.js → read-2BYWW7AA.js} +3 -2
- package/{readDocTool-LQGR6FUN.js → readDocTool-LC3A7QTB.js} +1 -1
- package/{readlineWorkspace-XUFJV3RS.js → readlineWorkspace-5DP3AJWN.js} +4367 -2796
- package/{removeDialogAgentAction-ECHCFB7N.js → removeDialogAgentAction-SFYZXHNK.js} +8 -7
- package/{runAgentClientLoop-24GQ2AW6.js → runAgentClientLoop-Y6HWP2PT.js} +51 -46
- package/{runtimeDoctorCommands-JKTTN723.js → runtimeDoctorCommands-CROTMULY.js} +7 -5
- package/{setDialogExtraReferencesAction-KCVJNGMB.js → setDialogExtraReferencesAction-Q32RGFTA.js} +6 -5
- package/{setPrimaryDialogAgentAction-VDOBOMKC.js → setPrimaryDialogAgentAction-BFYJHUJS.js} +8 -7
- package/{settingSlice-VR2IJSXC.js → settingSlice-IRUU4VFB.js} +6 -5
- package/{skillDiscovery-2QTZINON.js → skillDiscovery-CYUCJMAG.js} +2 -1
- package/{spaceCommands-S5YJJXL7.js → spaceCommands-CLN45IE3.js} +33 -215
- package/{streamAgentChatTurn-QHKP3ABO.js → streamAgentChatTurn-6WFQJ4DY.js} +107 -74
- package/{switchDialogAgentAction-5L4UP7VI.js → switchDialogAgentAction-L2KOKCGG.js} +5 -4
- package/{tableCommands-R6WFRDYF.js → tableCommands-SUNTHAYX.js} +1 -1
- package/{toolApiClient-53U4UDFF.js → toolApiClient-VGYUB4P5.js} +2 -1
- package/{tools-SSXSTC3O.js → tools-RR53D65Q.js} +39 -35
- package/{tuiSummaryLlmCaller-URFJHFC5.js → tuiSummaryLlmCaller-F3DPFFZM.js} +15 -13
- package/{updateCommands-IYKLF3JX.js → updateCommands-AJYSD73Y.js} +2 -2
- package/{updateDialogTitleAction-YFYAEW3T.js → updateDialogTitleAction-WXS3AKOL.js} +23 -21
- package/agentSuperviseCommands-5AR3DKNN.js +0 -640
- package/chunk-6IGD47IC.js +0 -19
- package/chunk-FD36SCCD.js +0 -105
- package/chunk-GRFK2XP4.js +0 -230
- package/chunk-HJTAGT3W.js +0 -370
- package/chunk-SUEIAK5N.js +0 -2574
- package/handleSendMessageAction-GO53TY7U.js +0 -409
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
clearCliLocalRuntimePreparedAgentCache
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Z5MHFBJZ.js";
|
|
4
4
|
import {
|
|
5
5
|
getReadableCliDb
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-RXX4GDIH.js";
|
|
7
7
|
import {
|
|
8
8
|
buildCreatedAgentRecord,
|
|
9
9
|
buildUpdatedAgentRecord,
|
|
@@ -12,10 +12,10 @@ import {
|
|
|
12
12
|
resolveAgentRecordFromHybridStore,
|
|
13
13
|
sanitizeAgentRecordForCliOutput,
|
|
14
14
|
writeAgentRecord
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-FHAGENAS.js";
|
|
16
16
|
import {
|
|
17
17
|
resolveCliAgentKeyInput
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-SPAQ4PVV.js";
|
|
19
19
|
import {
|
|
20
20
|
toErrorMessage
|
|
21
21
|
} from "./chunk-HNMXYYJR.js";
|
|
@@ -1,20 +1,76 @@
|
|
|
1
|
+
import {
|
|
2
|
+
estimateTokenCount
|
|
3
|
+
} from "./chunk-PSCNXBYA.js";
|
|
4
|
+
|
|
1
5
|
// packages/ai/tools/agent/agentRunDisplayHelpers.ts
|
|
2
6
|
function buildDelegatedTaskContent(task, input) {
|
|
3
7
|
if (input === void 0 || input === null) {
|
|
4
8
|
return task;
|
|
5
9
|
}
|
|
6
10
|
if (typeof input === "string") {
|
|
11
|
+
const trimmedInput = input.trim();
|
|
12
|
+
if (!trimmedInput || trimmedInput === task.trim()) {
|
|
13
|
+
return task;
|
|
14
|
+
}
|
|
7
15
|
return `${task}
|
|
8
16
|
|
|
9
17
|
--- INPUT (text) ---
|
|
10
18
|
${input}`;
|
|
11
19
|
}
|
|
12
|
-
|
|
20
|
+
let jsonStr;
|
|
21
|
+
try {
|
|
22
|
+
const serialized = JSON.stringify(input, null, 2);
|
|
23
|
+
if (serialized === void 0) {
|
|
24
|
+
return task;
|
|
25
|
+
}
|
|
26
|
+
jsonStr = serialized;
|
|
27
|
+
} catch {
|
|
28
|
+
jsonStr = "[Unserializable Input]";
|
|
29
|
+
}
|
|
13
30
|
return `${task}
|
|
14
31
|
|
|
15
32
|
--- INPUT (json) ---
|
|
16
33
|
${jsonStr}`;
|
|
17
34
|
}
|
|
35
|
+
function calculateDelegatedPayloadMetrics(task, input, delegatedContent) {
|
|
36
|
+
const taskText = typeof task === "string" ? task : "";
|
|
37
|
+
const taskChars = taskText.length;
|
|
38
|
+
let inputChars = 0;
|
|
39
|
+
let serializedInputForTokens = void 0;
|
|
40
|
+
if (input !== void 0 && input !== null) {
|
|
41
|
+
if (typeof input === "string") {
|
|
42
|
+
inputChars = input.length;
|
|
43
|
+
serializedInputForTokens = input;
|
|
44
|
+
} else {
|
|
45
|
+
try {
|
|
46
|
+
const serialized = JSON.stringify(input, null, 2);
|
|
47
|
+
if (serialized !== void 0) {
|
|
48
|
+
inputChars = serialized.length;
|
|
49
|
+
serializedInputForTokens = serialized;
|
|
50
|
+
} else {
|
|
51
|
+
inputChars = 0;
|
|
52
|
+
}
|
|
53
|
+
} catch {
|
|
54
|
+
const fallback = "[Unserializable Input]";
|
|
55
|
+
inputChars = fallback.length;
|
|
56
|
+
serializedInputForTokens = fallback;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const finalContent = delegatedContent ?? buildDelegatedTaskContent(task, input);
|
|
61
|
+
const totalChars = finalContent.length;
|
|
62
|
+
const estimatedTaskTokens = estimateTokenCount(taskText);
|
|
63
|
+
const estimatedTotalTokens = estimateTokenCount(finalContent);
|
|
64
|
+
const estimatedInputTokens = serializedInputForTokens && inputChars > 0 ? estimateTokenCount(serializedInputForTokens) : 0;
|
|
65
|
+
return {
|
|
66
|
+
taskChars,
|
|
67
|
+
inputChars,
|
|
68
|
+
totalChars,
|
|
69
|
+
estimatedTaskTokens,
|
|
70
|
+
estimatedInputTokens,
|
|
71
|
+
estimatedTotalTokens
|
|
72
|
+
};
|
|
73
|
+
}
|
|
18
74
|
function getAgentRunStatusIcon(status) {
|
|
19
75
|
switch (status) {
|
|
20
76
|
case "running":
|
|
@@ -221,6 +277,7 @@ function isAgentRunTerminalStatus(status) {
|
|
|
221
277
|
|
|
222
278
|
export {
|
|
223
279
|
buildDelegatedTaskContent,
|
|
280
|
+
calculateDelegatedPayloadMetrics,
|
|
224
281
|
getAgentRunStatusIcon,
|
|
225
282
|
shortRunId,
|
|
226
283
|
clipText,
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
// packages/agent-runtime/oauthTokenStore.ts
|
|
2
|
+
import {
|
|
3
|
+
chmodSync as chmodSync2,
|
|
4
|
+
existsSync as existsSync2,
|
|
5
|
+
mkdirSync as mkdirSync2,
|
|
6
|
+
readFileSync as readFileSync2,
|
|
7
|
+
unlinkSync as unlinkSync2,
|
|
8
|
+
writeFileSync as writeFileSync2
|
|
9
|
+
} from "node:fs";
|
|
10
|
+
import { homedir as homedir2 } from "node:os";
|
|
11
|
+
import { join as join3 } from "node:path";
|
|
12
|
+
|
|
13
|
+
// packages/agent-runtime/credentialLocationMigration.ts
|
|
14
|
+
import {
|
|
15
|
+
chmodSync,
|
|
16
|
+
existsSync,
|
|
17
|
+
lstatSync,
|
|
18
|
+
mkdirSync,
|
|
19
|
+
readFileSync,
|
|
20
|
+
linkSync,
|
|
21
|
+
unlinkSync,
|
|
22
|
+
writeFileSync
|
|
23
|
+
} from "node:fs";
|
|
24
|
+
import { dirname, join } from "node:path";
|
|
25
|
+
function getLegacyCredentialPath(relativePath, legacyHomeDir) {
|
|
26
|
+
return join(legacyHomeDir, ".nolo", "credentials", relativePath);
|
|
27
|
+
}
|
|
28
|
+
function credentialMigrationMarkerPath(canonicalPath) {
|
|
29
|
+
return `${canonicalPath}.legacy-migration-complete`;
|
|
30
|
+
}
|
|
31
|
+
function isRegularFile(path) {
|
|
32
|
+
try {
|
|
33
|
+
return lstatSync(path).isFile();
|
|
34
|
+
} catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function ensurePrivateDir(dir) {
|
|
39
|
+
mkdirSync(dir, { recursive: true, mode: 448 });
|
|
40
|
+
try {
|
|
41
|
+
chmodSync(dir, 448);
|
|
42
|
+
} catch {
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function markCredentialMigrationComplete(canonicalPath) {
|
|
46
|
+
const marker = credentialMigrationMarkerPath(canonicalPath);
|
|
47
|
+
ensurePrivateDir(dirname(marker));
|
|
48
|
+
if (existsSync(marker)) return;
|
|
49
|
+
writeFileSync(marker, "\n", { encoding: "utf8", mode: 384 });
|
|
50
|
+
try {
|
|
51
|
+
chmodSync(marker, 384);
|
|
52
|
+
} catch {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function migrateLegacyCredentialFile(args) {
|
|
56
|
+
if (args.mode !== "production" && args.mode !== "test") return false;
|
|
57
|
+
if (existsSync(credentialMigrationMarkerPath(args.canonicalPath))) return false;
|
|
58
|
+
if (existsSync(args.canonicalPath)) {
|
|
59
|
+
markCredentialMigrationComplete(args.canonicalPath);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
if (!isRegularFile(args.legacyPath)) return false;
|
|
63
|
+
let raw;
|
|
64
|
+
try {
|
|
65
|
+
raw = readFileSync(args.legacyPath, "utf8");
|
|
66
|
+
if (!args.isValid(raw)) return false;
|
|
67
|
+
} catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
ensurePrivateDir(dirname(args.canonicalPath));
|
|
71
|
+
const tempPath = `${args.canonicalPath}.migrate-${process.pid}-${Math.random().toString(36).slice(2)}`;
|
|
72
|
+
try {
|
|
73
|
+
writeFileSync(tempPath, raw, { encoding: "utf8", mode: 384 });
|
|
74
|
+
try {
|
|
75
|
+
chmodSync(tempPath, 384);
|
|
76
|
+
} catch {
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
linkSync(tempPath, args.canonicalPath);
|
|
80
|
+
} catch {
|
|
81
|
+
unlinkSync(tempPath);
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
unlinkSync(tempPath);
|
|
85
|
+
markCredentialMigrationComplete(args.canonicalPath);
|
|
86
|
+
try {
|
|
87
|
+
chmodSync(args.canonicalPath, 384);
|
|
88
|
+
} catch {
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
} catch {
|
|
92
|
+
try {
|
|
93
|
+
unlinkSync(tempPath);
|
|
94
|
+
} catch {
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// packages/agent-runtime/noloStateDir.ts
|
|
101
|
+
import { homedir } from "node:os";
|
|
102
|
+
import { join as join2 } from "node:path";
|
|
103
|
+
function resolveNoloStateDir(name, homeDir) {
|
|
104
|
+
if (homeDir) return join2(homeDir, ".nolo", name);
|
|
105
|
+
const noloHome = process.env.NOLO_HOME?.trim();
|
|
106
|
+
return noloHome ? join2(noloHome, name) : join2(homedir(), ".nolo", name);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// packages/agent-runtime/oauthTokenStore.ts
|
|
110
|
+
var DEFAULT_REFRESH_SKEW_MS = 5 * 60 * 1e3;
|
|
111
|
+
function getCredentialsDir(homeDir) {
|
|
112
|
+
return resolveNoloStateDir("credentials", homeDir);
|
|
113
|
+
}
|
|
114
|
+
function getCredentialPath(provider, homeDir) {
|
|
115
|
+
return join3(getCredentialsDir(homeDir), `${provider}.json`);
|
|
116
|
+
}
|
|
117
|
+
function ensurePrivateDir2(dir) {
|
|
118
|
+
mkdirSync2(dir, { recursive: true, mode: 448 });
|
|
119
|
+
try {
|
|
120
|
+
chmodSync2(dir, 448);
|
|
121
|
+
} catch {
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function writePrivateFile(path, body) {
|
|
125
|
+
writeFileSync2(path, body, { encoding: "utf8", mode: 384 });
|
|
126
|
+
try {
|
|
127
|
+
chmodSync2(path, 384);
|
|
128
|
+
} catch {
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function isValidOAuthCredential(raw, provider) {
|
|
132
|
+
try {
|
|
133
|
+
const parsed = JSON.parse(raw);
|
|
134
|
+
return parsed?.provider === provider && typeof parsed.accessToken === "string" && Boolean(parsed.accessToken);
|
|
135
|
+
} catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function migrateOAuthCredentialIfNeeded(provider, homeDir, migration) {
|
|
140
|
+
if (homeDir !== void 0 || !migration?.enableLegacyMigration) return;
|
|
141
|
+
const legacyHomeDir = migration.legacyHomeDir ?? homedir2();
|
|
142
|
+
const canonicalPath = getCredentialPath(provider);
|
|
143
|
+
migrateLegacyCredentialFile({
|
|
144
|
+
canonicalPath,
|
|
145
|
+
legacyPath: getLegacyCredentialPath(`${provider}.json`, legacyHomeDir),
|
|
146
|
+
mode: migration.mode ?? (migration.legacyHomeDir ? "test" : "production"),
|
|
147
|
+
isValid: (raw) => isValidOAuthCredential(raw, provider)
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
function readOAuthCredential(provider, homeDir, migration) {
|
|
151
|
+
migrateOAuthCredentialIfNeeded(provider, homeDir, migration);
|
|
152
|
+
const path = getCredentialPath(provider, homeDir);
|
|
153
|
+
if (!existsSync2(path)) return null;
|
|
154
|
+
const raw = readFileSync2(path, "utf8");
|
|
155
|
+
try {
|
|
156
|
+
const parsed = JSON.parse(raw);
|
|
157
|
+
if (!parsed?.provider || !parsed?.accessToken) return null;
|
|
158
|
+
return parsed;
|
|
159
|
+
} catch {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function writeOAuthCredential(provider, credential, homeDir) {
|
|
164
|
+
const path = getCredentialPath(provider, homeDir);
|
|
165
|
+
ensurePrivateDir2(getCredentialsDir(homeDir));
|
|
166
|
+
writePrivateFile(path, `${JSON.stringify(credential, null, 2)}
|
|
167
|
+
`);
|
|
168
|
+
}
|
|
169
|
+
function removeOAuthCredential(provider, homeDir) {
|
|
170
|
+
const path = getCredentialPath(provider, homeDir);
|
|
171
|
+
if (!existsSync2(path)) return;
|
|
172
|
+
unlinkSync2(path);
|
|
173
|
+
}
|
|
174
|
+
function createOAuthTokenStore(homeDir, migration) {
|
|
175
|
+
return {
|
|
176
|
+
read(provider) {
|
|
177
|
+
return readOAuthCredential(provider, homeDir, migration);
|
|
178
|
+
},
|
|
179
|
+
write(provider, credential) {
|
|
180
|
+
writeOAuthCredential(provider, credential, homeDir);
|
|
181
|
+
},
|
|
182
|
+
remove(provider) {
|
|
183
|
+
removeOAuthCredential(provider, homeDir);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function isTokenExpired(credential, skewMs = DEFAULT_REFRESH_SKEW_MS, now = Date.now()) {
|
|
188
|
+
if (!credential.expiresAt) return false;
|
|
189
|
+
return credential.expiresAt - now <= skewMs;
|
|
190
|
+
}
|
|
191
|
+
async function resolveFreshAccessToken(args) {
|
|
192
|
+
const store = args.store ?? createOAuthTokenStore(args.homeDir, args.migration);
|
|
193
|
+
const now = args.now ?? Date.now;
|
|
194
|
+
const credential = store.read(args.provider);
|
|
195
|
+
if (!credential) return null;
|
|
196
|
+
if (!args.force && !isTokenExpired(credential, args.skewMs ?? DEFAULT_REFRESH_SKEW_MS, now())) {
|
|
197
|
+
return credential.accessToken;
|
|
198
|
+
}
|
|
199
|
+
if (!credential.refreshToken || !args.refresh) return null;
|
|
200
|
+
const refreshed = await args.refresh(credential);
|
|
201
|
+
store.write(args.provider, refreshed);
|
|
202
|
+
return refreshed.accessToken;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export {
|
|
206
|
+
resolveNoloStateDir,
|
|
207
|
+
getLegacyCredentialPath,
|
|
208
|
+
migrateLegacyCredentialFile,
|
|
209
|
+
getCredentialsDir,
|
|
210
|
+
readOAuthCredential,
|
|
211
|
+
writeOAuthCredential,
|
|
212
|
+
createOAuthTokenStore,
|
|
213
|
+
isTokenExpired,
|
|
214
|
+
resolveFreshAccessToken
|
|
215
|
+
};
|
|
@@ -10,6 +10,9 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
extractCustomId
|
|
12
12
|
} from "./chunk-BJIRLHJR.js";
|
|
13
|
+
import {
|
|
14
|
+
selectIdentityToken
|
|
15
|
+
} from "./chunk-SEJ5OS6F.js";
|
|
13
16
|
import {
|
|
14
17
|
isRecord
|
|
15
18
|
} from "./chunk-KUG52IAP.js";
|
|
@@ -31,7 +34,10 @@ var resolveDesktopSafeServer = (value) => {
|
|
|
31
34
|
return isLocalServerUrl(value) ? MAIN_SERVER : value || MAIN_SERVER;
|
|
32
35
|
};
|
|
33
36
|
var selectCurrentServerFromState = (state) => resolveDesktopSafeServer(state?.settings?.currentServer);
|
|
34
|
-
var selectCurrentTokenFromState = (state) =>
|
|
37
|
+
var selectCurrentTokenFromState = (state) => {
|
|
38
|
+
const token = selectIdentityToken(state);
|
|
39
|
+
return typeof token === "string" ? token : null;
|
|
40
|
+
};
|
|
35
41
|
var selectCurrentDialogKeyFromState = (_state) => getActiveDialogKey();
|
|
36
42
|
var resolveToolBaseUrl = (currentServer) => {
|
|
37
43
|
const _window = globalThis.window;
|
|
@@ -48,7 +54,6 @@ var DESKTOP_LOCAL_TOOL_PATHS = /* @__PURE__ */ new Set([
|
|
|
48
54
|
"/api/apply-edit",
|
|
49
55
|
"/api/apply-line-edits",
|
|
50
56
|
"/api/code-search",
|
|
51
|
-
"/api/search-repo",
|
|
52
57
|
"/api/desktop/files/roots",
|
|
53
58
|
"/api/desktop/files/roots/request",
|
|
54
59
|
"/api/desktop/files/list",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// packages/ai/context/tokenUtils.ts
|
|
2
|
+
var estimateTokenCount = (text) => {
|
|
3
|
+
if (!text) return 0;
|
|
4
|
+
const chineseChars = (text.match(/[\u4e00-\u9fa5\u3400-\u4dbf]/g) || []).length;
|
|
5
|
+
const otherChars = text.length - chineseChars;
|
|
6
|
+
return Math.ceil(chineseChars * 1.5 + otherChars * 0.25);
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
estimateTokenCount
|
|
11
|
+
};
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
-
isImageUrlPart
|
|
3
|
-
|
|
2
|
+
isImageUrlPart,
|
|
3
|
+
isOllamaEndpoint
|
|
4
|
+
} from "./chunk-XTJTN3RW.js";
|
|
4
5
|
import {
|
|
5
6
|
AGENT_SELECTION_PRIORITY_INSTRUCTIONS
|
|
6
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RJ2SAFB5.js";
|
|
8
|
+
import {
|
|
9
|
+
getModelContextWindow
|
|
10
|
+
} from "./chunk-5ZYA4JJ3.js";
|
|
7
11
|
import {
|
|
8
12
|
estimateTokenCount
|
|
9
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-PSCNXBYA.js";
|
|
10
14
|
import {
|
|
11
15
|
canonicalizeToolNames
|
|
12
16
|
} from "./chunk-O6OSWFZQ.js";
|
|
@@ -14,7 +18,7 @@ import {
|
|
|
14
18
|
PLATFORM_HOSTED_KIMI_K3_MODEL,
|
|
15
19
|
isFireworksKimiModel,
|
|
16
20
|
isNoloHostedProvider
|
|
17
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-22BTGNSP.js";
|
|
18
22
|
import {
|
|
19
23
|
asTrimmedLowercaseString
|
|
20
24
|
} from "./chunk-QSJ3HFEF.js";
|
|
@@ -79,6 +83,9 @@ var buildStartupProtocolBlock = (options = {}) => {
|
|
|
79
83
|
lines.push(
|
|
80
84
|
"- \u6267\u884C\u547D\u4EE4\u65F6\u6839\u636E\u73AF\u5883\u9009 shell\uFF08Windows \u9ED8\u8BA4 PowerShell\uFF0CLinux/macOS \u9ED8\u8BA4 bash\uFF09\uFF1B\u6536\u96C6\u591A\u4E2A\u53EA\u8BFB\u4E8B\u5B9E\u4F18\u5148\u5408\u5E76\u4E3A\u4E00\u6B21 shell \u590D\u5408\u8C03\u7528\uFF0C\u907F\u514D\u62C6\u6210\u7EC6\u788E\u63A2\u9488\u3002"
|
|
81
85
|
);
|
|
86
|
+
lines.push(
|
|
87
|
+
"- \u9700\u8981\u5F53\u524D\u7CBE\u786E\u65F6\u95F4\uFF08\u5206\u949F/\u79D2\uFF09\u65F6\uFF0C\u901A\u8FC7 shell `date` \u83B7\u53D6\uFF0C\u4E0D\u8981\u51ED\u8BB0\u5FC6\u6216\u4F30\u7B97\u3002"
|
|
88
|
+
);
|
|
82
89
|
}
|
|
83
90
|
return lines.join("\n");
|
|
84
91
|
};
|
|
@@ -174,12 +181,12 @@ var MENU_USAGE_INSTRUCTIONS = `--- \u4EA4\u4E92\u8BF4\u660E ---
|
|
|
174
181
|
|
|
175
182
|
// packages/ai/agent/toolGuidedSections.ts
|
|
176
183
|
var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\u540E\u53F0 Run\uFF09 ---
|
|
177
|
-
\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 \
|
|
184
|
+
\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 \u63A7\u5236/\u8BCA\u65AD\u3002\u4F55\u65F6\u6D3E\u53D1\u89C1\u300C\u591A Agent \u534F\u4F5C\u300D\u6BB5\uFF1B\u672C\u6BB5\u53EA\u8BB2\u6D3E\u53D1\u4E4B\u540E\u7684\u76EF\u68A2\u4E0E\u6392\u9519\u3002
|
|
178
185
|
|
|
179
|
-
1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u4E32\u884C\u4F9D\u8D56\u4E0D\u662F\u963B\u585E\u5BF9\u8BDD\u7684\u7406\u7531\u2014\u2014\
|
|
180
|
-
2. \u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status\uFF0C\u8BED\u4E49\u4EE5\u4E24\u4E2A\u5DE5\u5177\u7684\u63CF\u8FF0\u4E3A\u51C6\
|
|
186
|
+
1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u4E32\u884C\u4F9D\u8D56\u4E0D\u662F\u963B\u585E\u5BF9\u8BDD\u7684\u7406\u7531\u2014\u2014\u7531\u5BBF\u4E3B\u80FD\u529B\u51B3\u5B9A\u5982\u4F55\u63A5\u529B\u3002\u662F\u5426\u5141\u8BB8\u963B\u585E\u7B49\u5F85\uFF0C\u7531\u5DE5\u5177\u8868\u81EA\u5DF1\u56DE\u7B54\uFF0C\u4E0D\u7528\u4F60\u731C\u6D4B\u73AF\u5883\uFF1AcontrolAgentRun \u7684 action \u91CC\u6709 wait \u5C31\u53EF\u4EE5\u7528\u5B83\u963B\u585E\u5230\u7EC8\u6001\uFF08\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF wait\uFF0C\u90A3\u662F\u4F2A\u88C5\u6210\u7B49\u5F85\u7684\u8F6E\u8BE2\uFF09\uFF1B\u6CA1\u6709 wait \u65F6\u6309\u5DE5\u5177\u63CF\u8FF0\u5904\u7406\uFF0C\u4E0D\u8981\u636E\u6B64\u63A8\u65AD\u4E00\u5B9A\u5B58\u5728 terminal wake\uFF0C\u6D3E\u53D1\u5B8C\u76F4\u63A5\u6536\u5C3E\u3002
|
|
187
|
+
2. \u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status\uFF0C\u8BED\u4E49\u4EE5\u4E24\u4E2A\u5DE5\u5177\u7684\u63CF\u8FF0\u4E3A\u51C6\u3002\u6B63\u5E38\u540E\u53F0 run \u6D3E\u53D1\u540E\u6536\u5C3E\uFF0C\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u7EE7\u7EED\u7531\u5BBF\u4E3B\u7EC8\u6001\u901A\u77E5\u51B3\u5B9A\uFF0C\u4E0D\u8981\u7528\u4E3B\u52A8 status \u5224\u65AD\u3002status \u4EC5\u7528\u4E8E\u5F02\u5E38\u8BCA\u65AD\u2014\u2014\u6000\u7591\u5361\u6B7B\u3001failed \u540E\u770B\u8BE6\u60C5/\u65E5\u5FD7\u3001\u7528\u6237\u660E\u786E\u8BE2\u95EE\u6267\u884C\u7EC6\u8282\uFF08tailLines:0 \u53EA\u770B\u72B6\u6001\u6458\u8981\uFF09\u3002\u5E76\u884C\uFF1A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\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\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\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\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
|
|
181
188
|
3. \u6392\u9519\u5148\u5206\u8BCA\uFF1AagentKey \u6CA1\u7167\u6284 listAgents \u5C31\u5148\u4FEE key\uFF08\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B\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\u540C\u4E00\u5DF2\u9A8C\u8BC1 key \u4ECD\u5931\u8D25\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u624D\u8BB0\u4E3A\u901A\u9053\u6545\u969C\u3002\u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u9700 \u22652 \u4E2A\u4E0D\u540C\u5019\u9009\u5404\u81EA\u5B8C\u6210\u300C\u5DF2\u9A8C\u8BC1 key + \u4E00\u6B21\u771F\u5B9E\u6D3E\u53D1\u300D\u4E14\u5931\u8D25\uFF0C\u5019\u9009\u4E0D\u8DB3\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
|
|
182
|
-
4. \u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\
|
|
189
|
+
4. \u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\u3002append \u53EF\u76F4\u63A5\u8C03\u7528\u2014\u2014not found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u5165\u961F\u7531 executor \u81EA\u8BC1\uFF1Bstop \u53EF\u76F4\u63A5\u8C03\u7528\uFF0Cnot found/\u5DF2\u7EC8\u6001/\u8FD0\u884C\u4E2D\u7531\u63A7\u5236\u5E73\u9762\u81EA\u884C\u5904\u7406\uFF08\u5DF2\u7EC8\u6001\u539F\u6837\u8FD4\u56DE\u3001\u4E0D\u4F1A\u88AB\u8986\u76D6\uFF09\uFF1Bstatus \u4EC5\u7528\u4E8E\u5F02\u5E38\u8BCA\u65AD\uFF0C\u4E0D\u662F stop \u524D mandatory preflight\u3002`;
|
|
183
190
|
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 ---
|
|
184
191
|
\u4EA7\u51FA\u4F18\u5148\uFF1A\u4E0D\u4E3A\u300C\u51D1\u6570\u91CF\u300D\u6D3E\u53D1\uFF0C\u4E5F\u4E0D\u5305\u529E\u53EF\u5E76\u884C\u7684\u72EC\u7ACB\u9886\u57DF\uFF1B\u6BCF\u8F6E\u63A8\u8FDB\u5F53\u524D\u6700\u6709\u4EF7\u503C\u7684\u52A8\u4F5C\uFF0C\u62FF\u8BC1\u636E\u518D\u5224\u65AD\u3002
|
|
185
192
|
|
|
@@ -199,6 +206,11 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
|
|
|
199
206
|
- **\u5E76\u884C\u8D26\u547D\u4E2D \u2192 \u6D3E\u53D1**\uFF1A\u22652 \u4E2A\u4E92\u4E0D\u4F9D\u8D56\u7684\u72EC\u7ACB\u9886\u57DF\uFF0C\u6216\u4ED3\u5E93\u6539\u52A8\uFF0B\u9A8C\u8BC1\uFF0B\u53D1\u5E03/\u8FC1\u79FB\u957F\u94FE\u8DEF \u2192 \u6309\u9886\u57DF\u5E76\u53D1\u6D3E\u53D1\u3002
|
|
200
207
|
- \u4E24\u8D26\u5747\u4E0D\u547D\u4E2D\u4E0D\u51D1\u6570\u6D3E\u53D1\uFF1B\u5B9E\u73B0\u6F14\u53D8\u4E3A\u591A\u8F6E\u9A8C\u8BC1\u5FAA\u73AF\u65F6\u7ACB\u5373\u6B62\u635F\u8F6C\u6D3E\u53D1\u3002\u7528\u6237\u660E\u786E\u8981\u6C42\u4F60\u4EB2\u81EA\u5B8C\u6210\u65F6\u6309\u7528\u6237\u8981\u6C42\u6267\u884C\uFF1B\u4EC5\u5F53\u6240\u6709\u5DF2\u9A8C\u8BC1\u6D3E\u53D1\u901A\u9053\u5747\u4E0D\u53EF\u7528\uFF08\u987B\u6709\u5F53\u6B21\u9519\u8BEF\u8BC1\u636E\uFF09\u624D\u964D\u7EA7\u81EA\u505A\u5E76\u8BF4\u660E\u3002
|
|
201
208
|
|
|
209
|
+
**\u4EFB\u52A1\u5206\u578B\u4E0E\u6536\u5DE5\u9884\u7B97\uFF08tool \u8C03\u7528\u5373\u6210\u672C\uFF0C\u9884\u7B97\u5148\u4E8E\u52E4\u594B\uFF09**\uFF1A
|
|
210
|
+
- **\u63A2\u7D22/spike \u578B**\uFF08\u8DEF\u5F84\u6216\u62A5\u9519\u672A\u77E5\u3001\u9A8C\u8BC1\u5916\u90E8\u5047\u8BBE\uFF09\uFF1Abrief \u5FC5\u987B\u5199\u5DE5\u5177\u8C03\u7528\u6216\u65F6\u95F4\u9884\u7B97\uFF08\u5982 \u2264150 \u6B21\u8C03\u7528 / \u226420 \u5206\u949F\uFF09\uFF0C\u5230\u8FBE\u9884\u7B97\u7ACB\u5373\u6536\u5DE5\uFF0C\u8F93\u51FA\u300C\u5DF2\u9A8C\u8BC1\u4E8B\u5B9E / \u5361\u70B9 / \u4E0B\u4E00\u6B65\u5EFA\u8BAE\u300D\u4E2D\u95F4\u62A5\u544A\u3002DoD \u662F\u7ED3\u8BBA\u800C\u975E\u8DD1\u901A\uFF1B\u7F16\u6392\u8005\u51ED\u62A5\u544A\u51B3\u5B9A\u7EED\u8DD1\u3001\u8F6C\u5411\u8FD8\u662F\u653E\u5F03\uFF0C\u7981\u6B62\u5355 run \u65E0\u9650\u8FED\u4EE3\u5230\u8DD1\u901A\u3002
|
|
211
|
+
- **\u6267\u884C\u578B**\uFF08\u8DEF\u5F84\u5DF2\u77E5\u7684\u660E\u786E\u6539\u52A8\uFF09\uFF1A\u53EF\u5355 run \u5B8C\u6210\uFF0C\u4F46 diff \u4E00\u6210\u578B\u7ACB\u5373\u6D3E\u72EC\u7ACB review\uFF0C\u4E0D\u628A review \u5806\u5230\u5168\u90E8\u5B8C\u5DE5\u540E\u3002
|
|
212
|
+
- **\u957F\u94FE\u578B**\uFF08\u8FC1\u79FB / \u53D1\u5E03 / \u591A\u9636\u6BB5\u4EFB\u52A1\uFF09\uFF1A\u62CD\u5E73\u4E3A\u300C\u4FA6\u5BDF \u2192 \u65B9\u6848 \u2192 \u6267\u884C \u2192 \u9A8C\u8BC1\u300D\u6241\u5E73\u9636\u6BB5\uFF0C\u6BCF\u9636\u6BB5\u72EC\u7ACB run\u3001\u72EC\u7ACB\u5BA1\u67E5\uFF1B\u7981\u6B62\u4E00\u4E2A run \u4ECE\u5934\u625B\u5230\u5C3E\u3002
|
|
213
|
+
|
|
202
214
|
**\u6D3E\u53D1\u901A\u9053**\uFF1A
|
|
203
215
|
- \u76EE\u6807\u8BB0\u5F55\u58F0\u660E\u4E86 delegation.serverBase / runtimeServerBase \u2192 \u81EA\u52A8\u8DEF\u7531\uFF0C\u65E0\u9700\u91CD\u590D\u586B\uFF1B\u7528\u6237\u7ED9\u51FA\u53EF\u8BBF\u95EE origin \u65F6\u53EF\u4F20 serverBase \u8986\u76D6\u3002\u52FF\u81C6\u9020\u5730\u5740\u3001\u52FF\u628A localhost \u5F53\u8FDC\u7AEF\u673A\u5668\u3002
|
|
204
216
|
- startAgentRun \u8FD4\u56DE runId \u53EA\u662F\u5DF2\u542F\u52A8\u4E0D\u8868\u793A\u5B8C\u6210\uFF1Bdone/failed \u540E\u9760 terminal wake \u7EE7\u7EED\u7236\u5BF9\u8BDD\uFF0C\u8BFB child evidence \u51B3\u5B9A\u4E0B\u4E00\u6B65\u3002\u80FD\u4E0D\u80FD\u540C\u6B65\u7B49\u5F85\u770B\u5DE5\u5177\u8868\u7ED9\u4E86\u4EC0\u4E48\u53C2\u6570/\u52A8\u4F5C\uFF08\u89C1\u300C\u591A Agent \u7F16\u6392\u300D\u6BB5\uFF09\uFF0C\u6CA1\u7ED9\u5C31\u662F\u5F02\u6B65\u6D3E\u53D1\u7ACB\u5373\u6536\u5C3E\u3002\u8981\u524D\u53F0\u5B9E\u65F6\u53D1\u8A00\u7528 runStreamingAgent\u3002
|
|
@@ -208,9 +220,9 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
|
|
|
208
220
|
- \u53D1\u6563\u6A21\u5F0F\uFF08Divergent Mode\uFF09\uFF1A\u521B\u610F\u63A2\u7D22/\u65B9\u6848\u679A\u4E3E/\u5F00\u653E\u5F0F\u591A\u89C6\u89D2\u5206\u6790 \u2192 \u5E76\u884C\u6D3E\u53D1\u5404\u5206\u652F\u76F4\u63A5\u56DE\u7B54\u539F\u95EE\u9898\uFF0C\u4FDD\u7559\u5F00\u653E\u6027\u4E0E\u4E0D\u540C\u6A21\u578B\u7279\u8272\u3002
|
|
209
221
|
- \u4F1A\u5546\u6A21\u5F0F\uFF08Deliberation Mode\uFF09\uFF1A\u590D\u6742\u51B3\u7B56/\u65B9\u6848\u8BBA\u8BC1/\u98CE\u9669\u8BC4\u4F30/\u51B2\u7A81\u534F\u8C03 \u2192 \u9996\u8F6E\u72EC\u7ACB\u4F5C\u7B54\uFF08\u521D\u59CB\u5224\u65AD+\u6838\u5FC3\u7406\u7531+\u6700\u5927\u98CE\u9669\uFF09\u2192 \u4EA4\u53C9\u590D\u8BAE\uFF08\u56DE\u5E94\u5206\u6B67\u4FEE\u6B63\u7ACB\u573A\uFF09\u2192 \u6309\u30101. \u5171\u8BC6 2. \u4FDD\u7559\u5206\u6B67 3. \u4E0B\u4E00\u6B65\u5EFA\u8BAE\u3011\u6536\u655B\uFF0C\u4E0D\u5F3A\u884C\u62B9\u5E73\u5408\u7406\u5206\u6B67\u3002
|
|
210
222
|
|
|
211
|
-
**\u9009\u4EBA**\uFF1A\u53EA\u8BA4 listAgents \u8FD4\u56DE\u7684\u8BB0\u5F55\uFF0CagentKey \u5FC5\u987B\u539F\u6837\u590D\u5236\u5176\u5B57\u6BB5\uFF0C\u4E0D\u62FC\u63A5/\u4E0D\u63A8\u65AD/\u4E0D\u6362\u683C\u5F0F/\u4E0D\u4F20 name\uFF1Bnot found \u65F6\u91CD\u65B0 listAgents \u53D6\u6700\u65B0 key\u3002
|
|
223
|
+
**\u9009\u4EBA**\uFF1A\u53EA\u8BA4 listAgents \u8FD4\u56DE\u7684\u8BB0\u5F55\uFF08\u9ED8\u8BA4\u4F18\u5148\u4ECE preferred \u53D1\u73B0\uFF09\uFF0CagentKey \u5FC5\u987B\u539F\u6837\u590D\u5236\u5176\u5B57\u6BB5\uFF0C\u4E0D\u62FC\u63A5/\u4E0D\u63A8\u65AD/\u4E0D\u6362\u683C\u5F0F/\u4E0D\u4F20 name\uFF1Bnot found \u65F6\u91CD\u65B0 listAgents \u53D6\u6700\u65B0 key\u3002
|
|
212
224
|
${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
|
|
213
|
-
- \u6A21\u578B\u5206\u6863\uFF1A\u4E2D\u6587\u5199\u7A3F/\u957F\u6587/\u4F4E AI \u5473\u4F18\u5148 \`gemini-3.
|
|
225
|
+
- \u6A21\u578B\u5206\u6863\uFF1A\u4E2D\u6587\u5199\u7A3F/\u957F\u6587/\u4F4E AI \u5473\u4F18\u5148 \`gemini-3.8-flash\`\uFF08\u884C\u6587\u81EA\u7136\u3001\u9AD8\u6027\u4EF7\u6BD4\uFF09\u6216 \`kimi-k3\`\u3002\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\uFF1B\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\uFF1B\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
|
|
214
226
|
- \u901A\u9053\u6392\u9664\uFF1A\u53EA\u6392\u9664\u300C\u672C\u6B21\u6539\u52A8\u4F5C\u8005\u300D\u4E0E\u300C\u6709\u5F53\u6B21\u9519\u8BEF\u8BC1\u636E\u7684\u574F\u901A\u9053\u300D\uFF08\u914D\u989D\u8017\u5C3D/\u4F59\u989D\u4E0D\u8DB3/\u9650\u6D41\uFF09\u3002\u4E0E\u6267\u884C\u8005\u4E0D\u540C\u5B9E\u4F8B\u5373\u4E3A\u5408\u6CD5 reviewer\uFF08flash \u6863 review \u6210\u672C\u53EF\u5FFD\u7565\uFF09\u3002\u4E0D\u51ED\u540D\u5B57\u7F16\u9020\u80FD\u529B\uFF0C\u4E0D\u7D22\u53D6 prompt/\u5BC6\u94A5/\u6570\u636E\u5E93 key\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
|
|
215
227
|
|
|
216
228
|
**\u62C6\u5206\u4E0E brief**\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\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u65B9\u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\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\u4E0E\u7528\u6237\u6C9F\u901A\u3002\u6D4B\u8BD5\u7C7B DoD \u5FC5\u987B\u9489\u6B7B\u57FA\u7EBF\u7CBE\u786E\u6570\u5B57\uFF08\u6D3E\u53D1\u524D\u4EB2\u81EA\u8DD1\u6D4B\u8BD5\u8BB0\u4E0B pass/fail \u4E0E\u65E2\u6709\u5931\u8D25\u5F52\u5C5E\uFF09\uFF0C\u9A8C\u6536\u4EB2\u81EA\u590D\u8DD1\u5BF9\u7167\u2014\u2014\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\u6309\u672A\u9A8C\u8BC1\u5904\u7406\u3002
|
|
@@ -261,6 +273,14 @@ var TOOL_ROUND_ECONOMY_INSTRUCTIONS = `--- \u5DE5\u5177\u8F6E\u6B21\u7ECF\u6D4E\
|
|
|
261
273
|
- \u53EA\u6709\u300C\u4E0B\u4E00\u6B65\u8981\u505A\u4EC0\u4E48\u53D6\u51B3\u4E8E\u4E0A\u4E00\u6B65\u7684\u7ED3\u679C\u300D\u65F6\u624D\u5206\u8F6E\u3002
|
|
262
274
|
- \u4E00\u6B21\u8C03\u7528\u91CC\u80FD\u8868\u8FBE\u7684\u5C31\u522B\u62C6\u6210\u591A\u6B21\uFF1A\u7528 glob \u7684\u82B1\u62EC\u53F7\u7EC4\u4E00\u6B21\u5339\u914D\u591A\u79CD\u540E\u7F00\u3001\u7528\u4E00\u6761\u547D\u4EE4\u4EE3\u66FF\u4E09\u6761\u3001\u6309\u9700\u8981\u7684\u884C\u8303\u56F4\u8BFB\u6587\u4EF6\u800C\u4E0D\u662F\u5148\u5168\u8BFB\u518D\u56DE\u5934\u627E\u3002
|
|
263
275
|
- \u7B49\u5F85\u7C7B\u5DE5\u5177\uFF08taskWait \u7B49\uFF09\u6309\u9884\u8BA1\u8017\u65F6\u4E00\u6B21\u7ED9\u8DB3\u9884\u7B97\uFF0C\u4E0D\u8981\u7528\u77ED\u8D85\u65F6\u53CD\u590D\u7EED\u7B49\u2014\u2014\u90A3\u662F\u628A\u5FAA\u73AF\u653E\u5728\u4E86\u6700\u8D35\u7684\u5730\u65B9\u3002`;
|
|
276
|
+
var PRIVILEGE_ESCALATION_INSTRUCTIONS = `--- \u6743\u9650\u63D0\u5347 ---
|
|
277
|
+
\u547D\u4EE4\u5931\u8D25\u4E14\u539F\u56E0\u6307\u5411\u6743\u9650\u4E0D\u8DB3\uFF08sudo: \u9700\u8981\u5BC6\u7801 / Permission denied / EACCES / Operation not permitted\uFF09\u65F6\uFF0C\u4F18\u5148\u628A\u300C\u8F93\u5BC6\u7801\u300D\u8FD9\u4E00\u6B65\u4EA4\u8FD8\u7ED9\u7528\u6237\u7684\u56FE\u5F62\u6388\u6743\u901A\u9053\uFF0C\u800C\u4E0D\u662F\u628A sudo \u547D\u4EE4\u629B\u56DE\u7ED9\u7528\u6237\u624B\u6284\uFF1A
|
|
278
|
+
1. \u684C\u9762\u4F1A\u8BDD\uFF08Linux \u6709 DISPLAY/WAYLAND_DISPLAY\uFF09\u76F4\u63A5\u8DD1 \`pkexec <\u547D\u4EE4>\`\uFF1Apolkit \u4F1A\u5728\u7528\u6237\u5C4F\u5E55\u5F39 GUI \u5BC6\u7801\u6846\u3002\u5F39\u4E4B\u524D\u5148\u4E00\u53E5\u8BDD\u8BF4\u660E\u8981\u505A\u4EC0\u4E48\u3001\u4E3A\u4F55\u9700\u8981 root\uFF0C\u907F\u514D\u51ED\u7A7A\u5F39\u7A97\uFF1B\u590D\u6742\u547D\u4EE4\u5148\u5199\u6210\u811A\u672C\u518D \`pkexec bash /tmp/xxx.sh\`\u3002
|
|
279
|
+
2. pkexec \u4E0D\u53EF\u7528\u6216\u975E\u56FE\u5F62\u4F1A\u8BDD\u65F6\u6309\u4EE3\u4EF7\u5347\u5E8F\u964D\u7EA7\uFF1A
|
|
280
|
+
- \u7528\u6237\u7EA7\u7B49\u4EF7\u65B9\u6848\u5148\u884C\uFF1Asystemctl --user set-property\u3001\u65E0\u7279\u6743\u914D\u7F6E\u8DEF\u5F84\u3001setcap\u3001\u628A\u7528\u6237\u52A0\u5165\u6240\u9700\u7EC4\uFF08\u91CD\u65B0\u767B\u5F55\u751F\u6548\uFF09\u7B49\u2014\u2014\u5F88\u591A\u300C\u5FC5\u987B root\u300D\u5176\u5B9E\u6709 user \u7EA7\u7B49\u4EF7\u7269\u3002
|
|
281
|
+
- \u786E\u5B9E\u7ED5\u4E0D\u5F00\uFF1A\u7ED9\u51FA\u4E00\u6761\u53EF\u76F4\u63A5\u7C98\u8D34\u7684\u547D\u4EE4\uFF08\u591A\u6B65\u5408\u5E76\u6210\u4E00\u6761\uFF09\uFF0C\u4E00\u6B21\u6027\u8BF4\u6E05\u526F\u4F5C\u7528\uFF0C\u7B49\u7528\u6237\u56DE\u62A5\u7ED3\u679C\u518D\u7EE7\u7EED\uFF1B\u4E0D\u8981\u8BA9\u7528\u6237\u6765\u56DE\u8DD1\u591A\u6B65\u3001\u4E0D\u8981\u91CD\u590D\u7D22\u8981\u3002
|
|
282
|
+
3. Windows \u7528 \`Start-Process -Verb RunAs\`\uFF08UAC \u5F39\u7A97\uFF09\u3001macOS \u7528 \`osascript ... with administrator privileges\`\uFF0C\u4EA4\u4E92\u539F\u5219\u76F8\u540C\uFF1A\u5F39\u7A97\u524D\u5148\u8BF4\u660E\u3001\u5931\u8D25\u540E\u4E0D\u91CD\u590D\u6253\u6270\u3002
|
|
283
|
+
4. \u7981\u6B62\u9759\u9ED8\u7ED5\u8FC7\uFF1A\u4E0D\u91CD\u8BD5\u540C\u4E00\u7279\u6743\u547D\u4EE4\u8D4C\u8FD0\u6C14\u3001\u4E0D\u7528\u7BA1\u9053/\u73AF\u5883\u53D8\u91CF\u5582\u5BC6\u7801\u7ED9 sudo\u3001\u4E0D\u4FEE\u6539 polkit/sudoers \u653E\u5BBD\u6388\u6743\u3002`;
|
|
264
284
|
var TOOL_GUIDED_SECTIONS = [
|
|
265
285
|
{
|
|
266
286
|
id: "toolRoundEconomy",
|
|
@@ -268,6 +288,11 @@ var TOOL_GUIDED_SECTIONS = [
|
|
|
268
288
|
triggerAnyTool: true,
|
|
269
289
|
build: () => TOOL_ROUND_ECONOMY_INSTRUCTIONS
|
|
270
290
|
},
|
|
291
|
+
{
|
|
292
|
+
id: "privilegeEscalation",
|
|
293
|
+
triggerTools: ["execShell"],
|
|
294
|
+
build: () => PRIVILEGE_ESCALATION_INSTRUCTIONS
|
|
295
|
+
},
|
|
271
296
|
{
|
|
272
297
|
id: "agentOrchestration",
|
|
273
298
|
triggerTools: [
|
|
@@ -302,6 +327,7 @@ var TOOL_GUIDED_SECTIONS = [
|
|
|
302
327
|
];
|
|
303
328
|
var TOOL_GUIDED_SECTION_ORDER = [
|
|
304
329
|
"toolRoundEconomy",
|
|
330
|
+
"privilegeEscalation",
|
|
305
331
|
"agentOrchestration",
|
|
306
332
|
"agentCollaboration",
|
|
307
333
|
"webAccess",
|
|
@@ -323,66 +349,6 @@ function resolveToolGuidedSections(agentTools) {
|
|
|
323
349
|
return out;
|
|
324
350
|
}
|
|
325
351
|
|
|
326
|
-
// packages/agent-runtime/currentTimeContext.ts
|
|
327
|
-
var pad2 = (value) => String(value).padStart(2, "0");
|
|
328
|
-
var resolveDefaultTimeZone = () => {
|
|
329
|
-
try {
|
|
330
|
-
return Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC";
|
|
331
|
-
} catch {
|
|
332
|
-
return "UTC";
|
|
333
|
-
}
|
|
334
|
-
};
|
|
335
|
-
var partsForTimeZone = (date, timeZone) => {
|
|
336
|
-
const parts = new Intl.DateTimeFormat("en-US", {
|
|
337
|
-
timeZone,
|
|
338
|
-
year: "numeric",
|
|
339
|
-
month: "2-digit",
|
|
340
|
-
day: "2-digit",
|
|
341
|
-
hour: "2-digit",
|
|
342
|
-
minute: "2-digit",
|
|
343
|
-
second: "2-digit",
|
|
344
|
-
hour12: false
|
|
345
|
-
}).formatToParts(date);
|
|
346
|
-
return Object.fromEntries(
|
|
347
|
-
parts.filter((part) => part.type !== "literal").map((part) => [part.type, part.value])
|
|
348
|
-
);
|
|
349
|
-
};
|
|
350
|
-
var zonedDateTime = (date, timeZone) => {
|
|
351
|
-
const parts = partsForTimeZone(date, timeZone);
|
|
352
|
-
return [
|
|
353
|
-
`${parts.year}-${parts.month}-${parts.day}`,
|
|
354
|
-
`${parts.hour}:${parts.minute}:${parts.second}`
|
|
355
|
-
].join(" ");
|
|
356
|
-
};
|
|
357
|
-
var timeZoneOffset = (date, timeZone) => {
|
|
358
|
-
const parts = partsForTimeZone(date, timeZone);
|
|
359
|
-
const utcMs = Date.UTC(
|
|
360
|
-
Number(parts.year),
|
|
361
|
-
Number(parts.month) - 1,
|
|
362
|
-
Number(parts.day),
|
|
363
|
-
Number(parts.hour),
|
|
364
|
-
Number(parts.minute),
|
|
365
|
-
Number(parts.second)
|
|
366
|
-
);
|
|
367
|
-
const offsetMinutes = Math.round((utcMs - date.getTime()) / 6e4);
|
|
368
|
-
const sign = offsetMinutes >= 0 ? "+" : "-";
|
|
369
|
-
const absolute = Math.abs(offsetMinutes);
|
|
370
|
-
return `UTC${sign}${pad2(Math.floor(absolute / 60))}:${pad2(absolute % 60)}`;
|
|
371
|
-
};
|
|
372
|
-
var toHourPrecision = (dateTime) => `${dateTime.slice(0, 13)}:00`;
|
|
373
|
-
var buildCurrentTimeBlock = (now = /* @__PURE__ */ new Date(), timeZone = resolveDefaultTimeZone()) => [
|
|
374
|
-
"--- \u5F53\u524D\u65F6\u95F4 ---",
|
|
375
|
-
`\u5F53\u524D\u65E5\u671F: ${zonedDateTime(now, timeZone).slice(0, 10)}`,
|
|
376
|
-
`\u5F53\u524D\u672C\u5730\u65F6\u95F4: ${toHourPrecision(zonedDateTime(now, timeZone))}`,
|
|
377
|
-
// hour precision — see toHourPrecision
|
|
378
|
-
`\u672C\u5730\u65F6\u533A: ${timeZone} / ${timeZoneOffset(now, timeZone)}`,
|
|
379
|
-
`UTC \u65F6\u95F4: ${toHourPrecision(now.toISOString())}`,
|
|
380
|
-
// hour precision; slice keeps the "T"
|
|
381
|
-
"\u6CE8\u610F\uFF1A\u4E0A\u9762\u7684\u65F6\u95F4\u53EA\u7CBE\u786E\u5230\u5C0F\u65F6\uFF08\u4E3A\u547D\u4E2D prompt \u7F13\u5B58\u800C\u964D\u4F4E\u7C92\u5EA6\uFF09\u3002\u9700\u8981\u7CBE\u786E\u5230\u5206\u949F\u6216\u79D2\u65F6\uFF0C\u7528 shell \u6267\u884C `date` \u83B7\u53D6\u3002",
|
|
382
|
-
"\u5F53\u7528\u6237\u95EE\u201C\u73B0\u5728\u201D\u201C\u5F53\u524D\u65F6\u95F4\u201D\u201C\u5317\u4EAC\u65F6\u95F4\u201D\u7B49\u65F6\u95F4\u95EE\u9898\u65F6\uFF0C\u76F4\u63A5\u4F7F\u7528\u8FD9\u91CC\u7684\u5F53\u524D\u65F6\u95F4\uFF1B\u4E0D\u8981\u53EA\u56DE\u7B54\u65E5\u671F\u3002",
|
|
383
|
-
"\u5F53\u7528\u6237\u8BF4\u201C\u4ECA\u5929\u201D\u201C\u4ECA\u65E5\u201D\u6216 today \u65F6\uFF0C\u9ED8\u8BA4\u6307\u5F53\u524D\u672C\u5730\u65E5\u671F\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u7ED9\u51FA\u5176\u5B83\u65E5\u671F\u3002"
|
|
384
|
-
].join("\n");
|
|
385
|
-
|
|
386
352
|
// packages/ai/agent/contextCompiler.ts
|
|
387
353
|
function createHash(_algo) {
|
|
388
354
|
let buf = "";
|
|
@@ -484,10 +450,16 @@ var isKimiK3ProviderModel = (provider, model) => {
|
|
|
484
450
|
}
|
|
485
451
|
return isNoloHostedProvider(provider) && normalizedModel === PLATFORM_HOSTED_KIMI_K3_MODEL;
|
|
486
452
|
};
|
|
453
|
+
var isOllamaProviderOrEndpoint = (provider, endpoint) => {
|
|
454
|
+
const p = asTrimmedLowercaseString(provider);
|
|
455
|
+
if (p === "ollama" || p === "ollama-cloud") return true;
|
|
456
|
+
return isOllamaEndpoint(endpoint);
|
|
457
|
+
};
|
|
487
458
|
var normalizeChatCompletionsBodyForProvider = ({
|
|
488
459
|
body,
|
|
489
460
|
provider,
|
|
490
|
-
model
|
|
461
|
+
model,
|
|
462
|
+
endpoint
|
|
491
463
|
}) => {
|
|
492
464
|
const nextBody = { ...body, model };
|
|
493
465
|
const normalizedProvider = asTrimmedLowercaseString(provider);
|
|
@@ -505,6 +477,17 @@ var normalizeChatCompletionsBodyForProvider = ({
|
|
|
505
477
|
delete nextBody.max_tokens;
|
|
506
478
|
}
|
|
507
479
|
}
|
|
480
|
+
if (isOllamaProviderOrEndpoint(provider, endpoint)) {
|
|
481
|
+
const existingNumCtx = nextBody.options?.num_ctx ?? nextBody.num_ctx;
|
|
482
|
+
if (existingNumCtx === void 0) {
|
|
483
|
+
const cw = getModelContextWindow(model);
|
|
484
|
+
const safeNumCtx = typeof cw === "number" && cw > 0 ? cw === 256e3 ? 32768 : Math.min(cw, 131072) : 32768;
|
|
485
|
+
nextBody.options = {
|
|
486
|
+
...nextBody.options,
|
|
487
|
+
num_ctx: safeNumCtx
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
}
|
|
508
491
|
if (Array.isArray(nextBody.messages) && requiresBareImageUrl({ provider, model })) {
|
|
509
492
|
nextBody.messages = toBareImageUrlMessages(nextBody.messages);
|
|
510
493
|
}
|
|
@@ -516,7 +499,6 @@ export {
|
|
|
516
499
|
buildRuntimeGuidanceBlocks,
|
|
517
500
|
TOOL_GUIDED_SECTION_ORDER,
|
|
518
501
|
resolveToolGuidedSections,
|
|
519
|
-
buildCurrentTimeBlock,
|
|
520
502
|
hashStablePrefixContent,
|
|
521
503
|
estimateContextTokens,
|
|
522
504
|
compileContextLayers,
|