nolo-cli 0.96.0-alpha.1 → 0.96.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/{_executeModel-AUQRMRWL.js → _executeModel-GWF37P7J.js} +68 -63
- package/{action-YVYQEAAV.js → action-GI44T4DR.js} +10 -10
- package/{addContentAction-O7R66HEX.js → addContentAction-B2DRF7P6.js} +9 -9
- package/{addDialogAgentAction-74OA7KYP.js → addDialogAgentAction-T3I7IXPK.js} +15 -17
- package/{agentDeleteCommand-4BAHJRU3.js → agentDeleteCommand-5SHJMUF7.js} +47 -43
- package/{agentEmailCommands-QISOY7Y6.js → agentEmailCommands-YC7RFNYN.js} +90 -82
- package/{agentListCommands-U46ODMQU.js → agentListCommands-O4DSVOHQ.js} +78 -82
- package/{agentMachineCommands-EHV2KM2C.js → agentMachineCommands-ZSQCK3SA.js} +42 -38
- package/{agentProviderCommands-GNPTL5XR.js → agentProviderCommands-EMZCM6VA.js} +1 -1
- package/{agentPullCommand-O5MPVJ5E.js → agentPullCommand-HF4A42D4.js} +1 -1
- package/agentRecordCommands-MUG5QMN7.js +136 -0
- package/{agentRunCommand-K4CLMA6B.js → agentRunCommand-5EBSIN74.js} +90 -80
- package/{agentRunControl-XLGD3UZ5.js → agentRunControl-5T64LM2M.js} +2 -2
- package/{agentRuntimeLocal-O4HPUJA4.js → agentRuntimeLocal-KTWDCVYZ.js} +44 -36
- package/{agentSlice-ZYT2OUR3.js → agentSlice-QA6WAKNE.js} +11 -11
- package/{appDeleteCommands-R5BBTKQK.js → appDeleteCommands-JPPKN55V.js} +42 -38
- package/{appDeployCommands-ZJIXOJWD.js → appDeployCommands-QU5PW23S.js} +42 -38
- package/{appDeployStatusCommands-B3R2ZTBF.js → appDeployStatusCommands-QVAJTRSP.js} +42 -38
- package/{appGetCommands-2AQSOV2A.js → appGetCommands-LT3KDTHJ.js} +42 -38
- package/{appListCommands-HCIJGZFY.js → appListCommands-V37HIWKN.js} +42 -38
- package/{authCommand-F4EFRRX6.js → authCommand-2YPMMIJN.js} +117 -23
- package/{authCommands-RGOGCPP6.js → authCommands-FFDS4FVX.js} +7 -5
- package/{builtinSkillRegistry-FUAVTRVZ.js → builtinSkillRegistry-CALVIJTX.js} +6 -5
- package/{chatQueueReduxAdapter-Q5V4YJVI.js → chatQueueReduxAdapter-YYIRKWPD.js} +30 -29
- package/{chromeCommands-FZYAU75D.js → chromeCommands-K27J4OVZ.js} +124 -28
- package/{chromeOpsCommands-62P2Q2YB.js → chromeOpsCommands-IXRLN57H.js} +4 -3
- package/{chunk-6OZ36FXI.js → chunk-27ONFIEY.js} +22 -4
- package/{chunk-JEDZAO7L.js → chunk-2SYTUTLI.js} +257 -37
- package/{chunk-OIVSQH2O.js → chunk-3BXNTXYI.js} +299 -5
- package/{chunk-BLJWCTRL.js → chunk-45LEXXBA.js} +1 -1
- package/{chunk-EYAQT56M.js → chunk-4DPP773Q.js} +2 -2
- package/chunk-4LCOCOR5.js +50 -0
- package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
- package/{chunk-LLT642J4.js → chunk-4W65H3KF.js} +24 -5
- package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
- package/chunk-5G7QSEFG.js +13349 -0
- package/{chunk-E4MARS3Q.js → chunk-5GVBDNTO.js} +1 -1
- package/chunk-5J3PYNUP.js +255 -0
- package/chunk-5MMAK75Q.js +15 -0
- package/{chunk-JPGCXHNM.js → chunk-5OA5HMTL.js} +1 -1
- package/{chunk-42V6BK2E.js → chunk-62IL3KQV.js} +4 -34
- package/{chunk-6YTOJY35.js → chunk-6D2JFXLY.js} +35 -0
- package/{chunk-3BMYXEUW.js → chunk-6O4IK4V2.js} +1 -1
- package/{chunk-WADCY6G6.js → chunk-6ZWMH6TJ.js} +111 -41
- package/{chunk-ABQYVJBJ.js → chunk-7CHC4W22.js} +1 -1
- package/{chunk-YQTQQX2H.js → chunk-7IJ3GSRH.js} +1 -1
- package/{chunk-GQBOR3G6.js → chunk-7KVZ5LDQ.js} +2 -2
- package/{chunk-OA6Q2A4I.js → chunk-A7RSPKU6.js} +98 -22
- package/chunk-ALY3N3HU.js +7600 -0
- package/{chunk-Q554LLSI.js → chunk-AUDNYVRC.js} +1 -1
- package/{chunk-GPCZ7UXG.js → chunk-AZRHIN5B.js} +1 -1
- package/chunk-BMQ2MJUK.js +153 -0
- package/{chunk-3IIEFNGY.js → chunk-C53ZG23R.js} +2 -2
- package/chunk-CHOZJMJS.js +78 -0
- package/{chunk-HJUYAD4A.js → chunk-CPUFH46E.js} +8 -8
- package/{chunk-LS2ZANRJ.js → chunk-CTUQJVQM.js} +1 -1
- package/{chunk-BP4XNZRM.js → chunk-CU3QB4HW.js} +3 -3
- package/{chunk-ACTMNVHM.js → chunk-CYSYR67N.js} +1 -1
- package/{chunk-KQ4ONNQD.js → chunk-DAWDCRIG.js} +82 -8
- package/{chunk-VLTIYV3X.js → chunk-DCLMZ5TX.js} +4 -4
- package/{chunk-UKZDAFYT.js → chunk-DSSTTEKI.js} +6 -10
- package/{chunk-HVURBGF3.js → chunk-ESRMFY7G.js} +2 -2
- package/{chunk-TRV2MIDW.js → chunk-EXAJ6DCR.js} +1 -0
- package/{chunk-ZLR5JN3E.js → chunk-FKBRWL4E.js} +7 -7
- package/{chunk-XOVEWFLK.js → chunk-G3BCMDJB.js} +100 -100
- package/chunk-GMZLP5DV.js +82 -0
- package/{chunk-FDTR4QJ6.js → chunk-H6A6X4EK.js} +32 -1
- package/{chunk-DVINR3PL.js → chunk-HDLLCBRF.js} +1 -1
- package/{chunk-ONXOABJR.js → chunk-HNGRBWYF.js} +3 -0
- package/{chunk-IAO6JBYW.js → chunk-HP2HV7RZ.js} +171 -14
- package/{chunk-H62HCIUP.js → chunk-HYZIYH2H.js} +11 -10
- package/{chunk-NTW5GWDM.js → chunk-I3QNET24.js} +32 -17
- package/{chunk-WV42OMV7.js → chunk-IAESIMK7.js} +4 -4
- package/{chunk-JRQFUXY7.js → chunk-KCDUTE5V.js} +96 -19
- package/{chunk-XRWZB6CF.js → chunk-KLTTJFH2.js} +23 -76
- package/{chunk-IIVGDG4I.js → chunk-LNPYTNMG.js} +8 -4
- package/{chunk-AFDS2CVM.js → chunk-MDMTFGJ2.js} +15 -20
- package/{chunk-4MY4GLIW.js → chunk-MN3RHOFX.js} +969 -1090
- package/{chunk-7S4YWN7P.js → chunk-MX574M24.js} +1 -1
- package/{chunk-FZGV4FGK.js → chunk-NUHHBEJC.js} +378 -187
- package/{chunk-53HEEOTT.js → chunk-O26PCYLS.js} +80 -13
- package/{chunk-3DII57IT.js → chunk-O2OWEFII.js} +1 -1
- package/chunk-OCZKATRC.js +129 -0
- package/{chunk-6D6VBVEW.js → chunk-OTEMQQZI.js} +80 -14
- package/chunk-P6GMCCAT.js +870 -0
- package/{chunk-CPH3W5A7.js → chunk-Q4GP72HX.js} +94 -3
- package/{chunk-DHDMC6FO.js → chunk-QKUMVP3O.js} +11 -6
- package/{chunk-76WEAXJB.js → chunk-QXWGM7NK.js} +18 -15
- package/{chunk-JOHSKZQX.js → chunk-R2TEASHZ.js} +865 -207
- package/{chunk-Z77CRGTW.js → chunk-R4SQ3LGW.js} +1 -1
- package/{chunk-V4MJDUSR.js → chunk-RSEEDUMS.js} +2 -2
- package/{chunk-UZGQNTVW.js → chunk-S5XGT6GB.js} +5 -3
- package/{chunk-QIAVMDHY.js → chunk-SDAPKV2N.js} +4 -4
- package/{chunk-SNPMM7H3.js → chunk-SN2U5EE7.js} +13 -13
- package/{chunk-AFUORTY4.js → chunk-SONWNI3L.js} +21 -21
- package/{chunk-A6G32FNX.js → chunk-SYAMDUAL.js} +13 -13
- package/{chunk-BYMV6QZG.js → chunk-TNIX77YM.js} +4 -0
- package/{chunk-OF7AQZUG.js → chunk-TU5NE4U3.js} +9 -84
- package/{chunk-EGSKXKR5.js → chunk-TWROMK2A.js} +1 -1
- package/chunk-TY3TIUJK.js +89 -0
- package/chunk-UNYJU5L6.js +780 -0
- package/{chunk-J4MOO56S.js → chunk-UQNS32WZ.js} +10 -2
- package/chunk-VIWDGTDA.js +8 -0
- package/chunk-VJVNU77E.js +83 -0
- package/{chunk-MMPXJXHT.js → chunk-VKEMMN62.js} +584 -480
- package/{chunk-ZXKVPF4K.js → chunk-W5HY3V6I.js} +236 -36
- package/{chunk-JAXOVNM4.js → chunk-WILHZY7K.js} +45 -45
- package/{chunk-UKWGR5SS.js → chunk-WIWM4FE3.js} +187 -398
- package/{chunk-BGSLKVCP.js → chunk-XAAUXO27.js} +6 -7
- package/{chunk-O6OSWFZQ.js → chunk-XUWRURDF.js} +6 -0
- package/{chunk-Q67DOFOO.js → chunk-Y3PMXGLH.js} +2 -0
- package/{chunk-SH43IESU.js → chunk-YUNJN43V.js} +44 -9
- package/{chunk-BZWBEHGD.js → chunk-YYMTXN25.js} +66 -38
- package/{chunk-TOP2VXOR.js → chunk-Z4CSIXYP.js} +2 -2
- package/{chunk-DEUUPHOO.js → chunk-ZGESTNDD.js} +77 -17
- package/{chunk-2F7RJC6L.js → chunk-ZOVKKMF6.js} +1 -1
- package/chunk-ZRAU6T47.js +56 -0
- package/commandRegistry-JPJBZMSB.js +833 -0
- package/{contentThunks-PT23JWJX.js → contentThunks-S5S6Y7FH.js} +32 -30
- package/{cooldownCommands-REAWYVTY.js → cooldownCommands-ZLEPIB4A.js} +2 -2
- package/{createAgentAutomationAction-N27SYTLU.js → createAgentAutomationAction-E3V23HF4.js} +32 -30
- package/{createDialogAction-XZPLHD5G.js → createDialogAction-PS2N7OCP.js} +36 -33
- package/{createPageAction-KHVJQ3CS.js → createPageAction-6XUY3KXJ.js} +38 -36
- package/{chunk-3SJQXXGY.js → cursorProvider-YGGNMVWX.js} +2560 -9879
- package/{dbSlice-XVWBAGYN.js → dbSlice-DQ32LYTJ.js} +8 -8
- package/{deleteFile-YG6QMJLU.js → deleteFile-NX6QHCWZ.js} +3 -3
- package/{dialogCommands-ZUWW5UT6.js → dialogCommands-3YXLYO2W.js} +45 -41
- package/{dialogSlice-3YH242HS.js → dialogSlice-NTZ5GT5B.js} +36 -29
- package/{dist-VODFSGNG.js → dist-NJC2W7I4.js} +61 -54
- package/{docCreateCommands-Q6FADDSJ.js → docCreateCommands-4JSMQDST.js} +44 -40
- package/{docDeleteCommands-ZKIH54PZ.js → docDeleteCommands-3KTE3KP6.js} +44 -40
- package/{docReadCommands-7BZT2QTW.js → docReadCommands-54BL4OYN.js} +43 -39
- package/{docStore-YSZRNUUD.js → docStore-QE6H3LDC.js} +11 -10
- package/{docUpdateCommands-WJXWTRL7.js → docUpdateCommands-BMBPTW5U.js} +44 -40
- package/{fetchMessages-EIU7UFFK.js → fetchMessages-67MEFPZR.js} +2 -2
- package/{getPricing-LUSEABA6.js → getPricing-NMMFT3YI.js} +3 -3
- package/{handleSendMessageAction-KJO2QDBM.js → handleSendMessageAction-34BJIBML.js} +91 -83
- package/index.js +87 -884
- package/{localDialogRead-BTFJ4V2I.js → localDialogRead-EBRS242U.js} +2 -2
- package/{localRuntimeAuthority-6IR6BBXE.js → localRuntimeAuthority-5W6IJRAD.js} +6 -6
- package/{localRuntimeDb-SYQGUF4U.js → localRuntimeDb-3LRMNLCM.js} +1 -1
- package/{machineCommands-QC4TD7GJ.js → machineCommands-KBMEZDL3.js} +85 -77
- package/{machineWsRunDispatch-XUOIAXO7.js → machineWsRunDispatch-FRANXJZJ.js} +82 -74
- package/{memberThunks-QGFLFVCI.js → memberThunks-5ZXPR63F.js} +9 -9
- package/{models-T3SG6MJ5.js → models-ZPU5EDF4.js} +2 -2
- package/oauthTokenStore-ITEB663N.js +23 -0
- package/package.json +1 -1
- package/pdf-U6KSUEZZ.js +26435 -0
- package/processSpawn-SOAV3FEV.js +11 -0
- package/profileConfig-ZGOFORWV.js +43 -0
- package/{providerPresetApply-FG6NZ57W.js → providerPresetApply-76AVU3HD.js} +7 -7
- package/{providerRegistry-757OWH3O.js → providerRegistry-Z62NC45X.js} +11 -7
- package/{read-COE3ZYR6.js → read-EPTJRAEF.js} +5 -5
- package/{readDocTool-5USN4A6V.js → readDocTool-W4NDXNEX.js} +5 -3
- package/{readlineWorkspace-74TXXSLO.js → readlineWorkspace-P7WDR4NG.js} +2450 -2022
- package/{removeDialogAgentAction-IX3MN2ZO.js → removeDialogAgentAction-BVAWQKXE.js} +17 -19
- package/{runAgentClientLoop-37BXJD62.js → runAgentClientLoop-5OQN64SG.js} +62 -58
- package/{runtimeDoctorCommands-X6WDBEQX.js → runtimeDoctorCommands-3USD722U.js} +3 -3
- package/runtimeModeArgs-2Y7BALTO.js +31 -0
- package/{setDialogExtraReferencesAction-X4HCPNZL.js → setDialogExtraReferencesAction-LYY45IAD.js} +12 -11
- package/{setPrimaryDialogAgentAction-4GMIQLOD.js → setPrimaryDialogAgentAction-73IL7DLU.js} +18 -20
- package/{settingSlice-ZQZVUPKK.js → settingSlice-Q6EKL7EQ.js} +9 -9
- package/{skillDiscovery-CYUCJMAG.js → skillDiscovery-ZBU76COE.js} +3 -3
- package/{spaceCommands-P3ONT6LL.js → spaceCommands-W7B34E7K.js} +44 -40
- package/{streamAgentChatTurn-FGXQXALU.js → streamAgentChatTurn-7AX7XVHL.js} +184 -91
- package/{switchDialogAgentAction-N52LRPA3.js → switchDialogAgentAction-UUXDSQ6X.js} +15 -17
- package/{tableCommands-O6NWHFKV.js → tableCommands-G7RV3RU3.js} +4 -4
- package/{toolApiClient-QVJ6HDNN.js → toolApiClient-INIQCPGY.js} +3 -3
- package/{tools-R5UF2KZO.js → tools-357446VN.js} +55 -51
- package/{tuiSummaryLlmCaller-T2SHYMDZ.js → tuiSummaryLlmCaller-74NRRLVW.js} +18 -16
- package/{updateCommands-2M74UL7P.js → updateCommands-4EHDLF5J.js} +3 -3
- package/{updateDialogTitleAction-RTADGV7A.js → updateDialogTitleAction-A2OK52IY.js} +81 -43
- package/agentRecordCommands-SIPURU2S.js +0 -128
- package/chunk-FOWEGIMF.js +0 -18881
- package/chunk-M76ECQRD.js +0 -13658
- package/chunk-Q5FJJ6XI.js +0 -103
- package/chunk-S7Z2HMCN.js +0 -25
- package/{chunk-VMFTFOWF.js → chunk-3AH7LNUB.js} +7 -7
- package/{chunk-X7HHHIOZ.js → chunk-Y6ROFCZO.js} +0 -0
- package/{db-WK5MDZVN.js → db-VQSAOWAO.js} +1 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
// packages/ai/tools/chromeConnectorTools.ts
|
|
2
|
+
var CHROME_CONNECTOR_TOOL_NAMES = [
|
|
3
|
+
"browser_list_tabs",
|
|
4
|
+
"browser_open_tab",
|
|
5
|
+
"browser_close_tab",
|
|
6
|
+
"browser_read_page",
|
|
7
|
+
"browser_click_element",
|
|
8
|
+
"browser_type",
|
|
9
|
+
"browser_press",
|
|
10
|
+
"browser_scroll",
|
|
11
|
+
"browser_screenshot",
|
|
12
|
+
"browser_read_console",
|
|
13
|
+
"browser_read_network"
|
|
14
|
+
];
|
|
15
|
+
var CHROME_CONNECTOR_LEGACY_TOOL_ALIASES = {
|
|
16
|
+
chrome_list_tabs: "browser_list_tabs",
|
|
17
|
+
chrome_open_tab: "browser_open_tab",
|
|
18
|
+
chrome_close_tab: "browser_close_tab",
|
|
19
|
+
chrome_read_page: "browser_read_page",
|
|
20
|
+
chrome_click: "browser_click_element",
|
|
21
|
+
chrome_type: "browser_type",
|
|
22
|
+
chrome_press: "browser_press",
|
|
23
|
+
chrome_scroll: "browser_scroll",
|
|
24
|
+
chrome_screenshot: "browser_screenshot",
|
|
25
|
+
chrome_read_console: "browser_read_console",
|
|
26
|
+
chrome_read_network: "browser_read_network"
|
|
27
|
+
};
|
|
28
|
+
var CHROME_CONNECTOR_LEGACY_TOOL_NAMES = Object.keys(
|
|
29
|
+
CHROME_CONNECTOR_LEGACY_TOOL_ALIASES
|
|
30
|
+
);
|
|
31
|
+
var CHROME_CONNECTOR_ACCEPTED_TOOL_NAMES = [
|
|
32
|
+
...CHROME_CONNECTOR_TOOL_NAMES,
|
|
33
|
+
...CHROME_CONNECTOR_LEGACY_TOOL_NAMES
|
|
34
|
+
];
|
|
35
|
+
function resolveChromeConnectorToolName(name) {
|
|
36
|
+
if (CHROME_CONNECTOR_TOOL_NAMES.includes(name)) {
|
|
37
|
+
return name;
|
|
38
|
+
}
|
|
39
|
+
return CHROME_CONNECTOR_LEGACY_TOOL_ALIASES[name];
|
|
40
|
+
}
|
|
41
|
+
function canonicalizeChromeConnectorToolNames(toolNames) {
|
|
42
|
+
const out = [];
|
|
43
|
+
for (const name of toolNames ?? []) {
|
|
44
|
+
const resolved = typeof name === "string" ? resolveChromeConnectorToolName(name) : void 0;
|
|
45
|
+
if (resolved && !out.includes(resolved)) out.push(resolved);
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
var CONNECTOR_TARGET_PROPERTY = {
|
|
50
|
+
type: "string",
|
|
51
|
+
description: "Reserved and ignored for now; future multi-provider targeting."
|
|
52
|
+
};
|
|
53
|
+
var CHROME_CONNECTOR_READ_TOOL_NAMES = [
|
|
54
|
+
"browser_list_tabs",
|
|
55
|
+
"browser_read_page",
|
|
56
|
+
"browser_screenshot",
|
|
57
|
+
"browser_read_console",
|
|
58
|
+
"browser_read_network"
|
|
59
|
+
];
|
|
60
|
+
var getChromeConnectorToolBehavior = (name) => CHROME_CONNECTOR_READ_TOOL_NAMES.includes(resolveChromeConnectorToolName(name)) ? "data" : "action";
|
|
61
|
+
var getChromeConnectorToolDefaultConsent = (name) => CHROME_CONNECTOR_READ_TOOL_NAMES.includes(resolveChromeConnectorToolName(name)) ? "auto" : "ask";
|
|
62
|
+
function baseSchema(name, description, properties, required = []) {
|
|
63
|
+
return {
|
|
64
|
+
name,
|
|
65
|
+
description,
|
|
66
|
+
parameters: {
|
|
67
|
+
type: "object",
|
|
68
|
+
properties: { ...properties, target: CONNECTOR_TARGET_PROPERTY },
|
|
69
|
+
required
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
var tabId = {
|
|
74
|
+
type: "string",
|
|
75
|
+
description: "Browser tab id returned by browser_list_tabs or browser_open_tab."
|
|
76
|
+
};
|
|
77
|
+
var elementRef = {
|
|
78
|
+
type: "string",
|
|
79
|
+
description: "Revision-scoped ref like 1a2b3c4d-e2, copied verbatim from browser_read_page; preferred over selector when available."
|
|
80
|
+
};
|
|
81
|
+
var selector = {
|
|
82
|
+
type: "string",
|
|
83
|
+
description: "CSS selector for the visible page element to operate on; fallback when no elementRef is available."
|
|
84
|
+
};
|
|
85
|
+
var chromeListTabsFunctionSchema = baseSchema(
|
|
86
|
+
"browser_list_tabs",
|
|
87
|
+
"List controllable browser tabs from the user's browser profile through the Nolo Browser Connector.",
|
|
88
|
+
{}
|
|
89
|
+
);
|
|
90
|
+
var chromeOpenTabFunctionSchema = baseSchema(
|
|
91
|
+
"browser_open_tab",
|
|
92
|
+
"Open a URL in the user's browser (Chrome or Firefox) through the Nolo Browser Connector.",
|
|
93
|
+
{
|
|
94
|
+
url: {
|
|
95
|
+
type: "string",
|
|
96
|
+
description: "HTTP or HTTPS URL to open in the browser."
|
|
97
|
+
},
|
|
98
|
+
active: {
|
|
99
|
+
type: "boolean",
|
|
100
|
+
description: "Whether to focus the new browser tab. Defaults to true."
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
["url"]
|
|
104
|
+
);
|
|
105
|
+
var chromeCloseTabFunctionSchema = baseSchema(
|
|
106
|
+
"browser_close_tab",
|
|
107
|
+
"Close a browser tab through the Nolo Browser Connector. Prefer closing the tabs your own run opened with browser_open_tab, and ask the user before closing a tab they are using. Pinned tabs are refused (TAB_PINNED); unknown tab ids fail (TAB_NOT_FOUND).",
|
|
108
|
+
{
|
|
109
|
+
tabId
|
|
110
|
+
},
|
|
111
|
+
["tabId"]
|
|
112
|
+
);
|
|
113
|
+
var chromeReadPageFunctionSchema = baseSchema(
|
|
114
|
+
"browser_read_page",
|
|
115
|
+
"Read a compact view of a browser tab: visible text (hard cap 6000 chars) plus short-lived elementRefs (hard cap 35) and a pageRevision. Reuse those refs for browser_click_element and browser_type instead of guessing selectors; use region to focus a big page. Does not read cookies or profile databases.",
|
|
116
|
+
{
|
|
117
|
+
tabId,
|
|
118
|
+
region: {
|
|
119
|
+
type: "string",
|
|
120
|
+
description: "Optional CSS selector limiting the read to part of the page."
|
|
121
|
+
},
|
|
122
|
+
maxChars: {
|
|
123
|
+
type: "number",
|
|
124
|
+
description: "Optional text character budget; the connector clamps it to a hard maximum."
|
|
125
|
+
},
|
|
126
|
+
detail: {
|
|
127
|
+
type: "string",
|
|
128
|
+
enum: ["compact", "full"],
|
|
129
|
+
description: "compact (default) returns budgeted text; full raises the budget and adds capped HTML."
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
["tabId"]
|
|
133
|
+
);
|
|
134
|
+
var chromeClickFunctionSchema = baseSchema(
|
|
135
|
+
"browser_click_element",
|
|
136
|
+
"Click a visible element in a browser tab by elementRef from browser_read_page, or by CSS selector. Controls whose name indicates an irreversible external action (payment, send, delete, publish, permission change) are refused with SENSITIVE_ACTION_REQUIRES_CONFIRMATION: this desktop runtime has no approval channel, so name the control and ask the user to activate it themselves.",
|
|
137
|
+
{
|
|
138
|
+
tabId,
|
|
139
|
+
elementRef,
|
|
140
|
+
selector
|
|
141
|
+
},
|
|
142
|
+
["tabId"]
|
|
143
|
+
);
|
|
144
|
+
var chromeTypeFunctionSchema = baseSchema(
|
|
145
|
+
"browser_type",
|
|
146
|
+
"Type text into a browser page element identified by elementRef from browser_read_page or by CSS selector. Typing into a control whose name indicates an irreversible external action is refused with SENSITIVE_ACTION_REQUIRES_CONFIRMATION, same as clicking it.",
|
|
147
|
+
{
|
|
148
|
+
tabId,
|
|
149
|
+
elementRef,
|
|
150
|
+
selector,
|
|
151
|
+
text: {
|
|
152
|
+
type: "string",
|
|
153
|
+
description: "Text to type into the selected element."
|
|
154
|
+
},
|
|
155
|
+
clearFirst: {
|
|
156
|
+
type: "boolean",
|
|
157
|
+
description: "Whether to clear the field before typing. Defaults to true."
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
["tabId", "text"]
|
|
161
|
+
);
|
|
162
|
+
var chromePressFunctionSchema = baseSchema(
|
|
163
|
+
"browser_press",
|
|
164
|
+
"Send a keyboard key or shortcut to a browser tab. Enter-like keys are refused with SENSITIVE_ACTION_REQUIRES_CONFIRMATION when the focused control is an irreversible action.",
|
|
165
|
+
{
|
|
166
|
+
tabId,
|
|
167
|
+
key: {
|
|
168
|
+
type: "string",
|
|
169
|
+
description: "Key or shortcut, for example Enter, Escape, ArrowDown, or Meta+L."
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
["tabId", "key"]
|
|
173
|
+
);
|
|
174
|
+
var chromeScrollFunctionSchema = baseSchema(
|
|
175
|
+
"browser_scroll",
|
|
176
|
+
"Scroll a browser tab by pixel deltas.",
|
|
177
|
+
{
|
|
178
|
+
tabId,
|
|
179
|
+
deltaX: {
|
|
180
|
+
type: "number",
|
|
181
|
+
description: "Horizontal scroll delta in pixels."
|
|
182
|
+
},
|
|
183
|
+
deltaY: {
|
|
184
|
+
type: "number",
|
|
185
|
+
description: "Vertical scroll delta in pixels."
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
["tabId"]
|
|
189
|
+
);
|
|
190
|
+
var chromeScreenshotFunctionSchema = baseSchema(
|
|
191
|
+
"browser_screenshot",
|
|
192
|
+
"Capture a screenshot from a browser tab through the Nolo Browser Connector.",
|
|
193
|
+
{
|
|
194
|
+
tabId,
|
|
195
|
+
fullPage: {
|
|
196
|
+
type: "boolean",
|
|
197
|
+
description: "Whether to capture the full page. Defaults to false."
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
["tabId"]
|
|
201
|
+
);
|
|
202
|
+
var chromeReadConsoleFunctionSchema = baseSchema(
|
|
203
|
+
"browser_read_console",
|
|
204
|
+
"Read recent console messages from a browser tab using debugger-backed connector state.",
|
|
205
|
+
{
|
|
206
|
+
tabId,
|
|
207
|
+
limit: {
|
|
208
|
+
type: "number",
|
|
209
|
+
description: "Maximum number of recent console messages to return."
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
["tabId"]
|
|
213
|
+
);
|
|
214
|
+
var chromeReadNetworkFunctionSchema = baseSchema(
|
|
215
|
+
"browser_read_network",
|
|
216
|
+
"Read a deduplicated recent network summary from a browser tab using debugger-backed connector state. Static assets are filtered unless includeAssets is set.",
|
|
217
|
+
{
|
|
218
|
+
tabId,
|
|
219
|
+
limit: {
|
|
220
|
+
type: "number",
|
|
221
|
+
description: "Maximum number of recent network entries to return."
|
|
222
|
+
},
|
|
223
|
+
includeAssets: {
|
|
224
|
+
type: "boolean",
|
|
225
|
+
description: "Include images, CSS, fonts and other static assets. Defaults to false."
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
["tabId"]
|
|
229
|
+
);
|
|
230
|
+
var chromeConnectorToolSchemas = [
|
|
231
|
+
chromeListTabsFunctionSchema,
|
|
232
|
+
chromeOpenTabFunctionSchema,
|
|
233
|
+
chromeCloseTabFunctionSchema,
|
|
234
|
+
chromeReadPageFunctionSchema,
|
|
235
|
+
chromeClickFunctionSchema,
|
|
236
|
+
chromeTypeFunctionSchema,
|
|
237
|
+
chromePressFunctionSchema,
|
|
238
|
+
chromeScrollFunctionSchema,
|
|
239
|
+
chromeScreenshotFunctionSchema,
|
|
240
|
+
chromeReadConsoleFunctionSchema,
|
|
241
|
+
chromeReadNetworkFunctionSchema
|
|
242
|
+
];
|
|
243
|
+
async function chromeConnectorUnavailableFunc() {
|
|
244
|
+
throw new Error("Browser connector tools are only executable in the Nolo desktop local runtime.");
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export {
|
|
248
|
+
CHROME_CONNECTOR_LEGACY_TOOL_ALIASES,
|
|
249
|
+
CHROME_CONNECTOR_ACCEPTED_TOOL_NAMES,
|
|
250
|
+
canonicalizeChromeConnectorToolNames,
|
|
251
|
+
getChromeConnectorToolBehavior,
|
|
252
|
+
getChromeConnectorToolDefaultConsent,
|
|
253
|
+
chromeConnectorToolSchemas,
|
|
254
|
+
chromeConnectorUnavailableFunc
|
|
255
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
compactWhitespace
|
|
3
|
+
} from "./chunk-DWLEOOGR.js";
|
|
4
|
+
|
|
5
|
+
// packages/core/clipCompactText.ts
|
|
6
|
+
function clipCompactText(value, max, ellipsis = "...") {
|
|
7
|
+
const compact = compactWhitespace(value);
|
|
8
|
+
if (compact.length <= max) return compact;
|
|
9
|
+
if (max <= ellipsis.length) return compact.slice(0, max);
|
|
10
|
+
return `${compact.slice(0, max - ellipsis.length)}${ellipsis}`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
clipCompactText
|
|
15
|
+
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
|
-
mergeAvailabilityDeadline
|
|
3
|
-
|
|
2
|
+
mergeAvailabilityDeadline,
|
|
3
|
+
resolveCredentialKeyWithFallback
|
|
4
|
+
} from "./chunk-H6A6X4EK.js";
|
|
4
5
|
|
|
5
|
-
// packages/
|
|
6
|
+
// packages/agent-runtime/credentialAvailability.ts
|
|
6
7
|
import { homedir } from "node:os";
|
|
7
8
|
import { join } from "node:path";
|
|
8
9
|
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
@@ -13,36 +14,6 @@ function resolveNoloHome(env = process.env) {
|
|
|
13
14
|
function resolveCredentialAvailabilityPath(env = process.env) {
|
|
14
15
|
return join(resolveNoloHome(env), FILE_NAME);
|
|
15
16
|
}
|
|
16
|
-
function resolveCredentialKey(agent) {
|
|
17
|
-
if (!agent || typeof agent !== "object") return void 0;
|
|
18
|
-
for (const field of ["apiKeyRef", "credentialRef"]) {
|
|
19
|
-
const value = agent[field];
|
|
20
|
-
if (typeof value === "string") {
|
|
21
|
-
const trimmed = value.trim();
|
|
22
|
-
if (trimmed) return trimmed;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return void 0;
|
|
26
|
-
}
|
|
27
|
-
function resolveCredentialKeyWithFallback(agent) {
|
|
28
|
-
const byRef = resolveCredentialKey(agent);
|
|
29
|
-
if (byRef) return byRef;
|
|
30
|
-
if (!agent || typeof agent !== "object") return void 0;
|
|
31
|
-
const endpoint = agent.customProviderUrl;
|
|
32
|
-
if (typeof endpoint === "string") {
|
|
33
|
-
const trimmed = endpoint.trim();
|
|
34
|
-
if (trimmed) {
|
|
35
|
-
try {
|
|
36
|
-
const origin = new URL(trimmed).origin;
|
|
37
|
-
if (origin && origin !== "null") return `custom-endpoint:${origin}`;
|
|
38
|
-
} catch {
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const key = agent.key;
|
|
43
|
-
if (typeof key === "string" && key.trim()) return `custom-agent:${key.trim()}`;
|
|
44
|
-
return void 0;
|
|
45
|
-
}
|
|
46
17
|
function parseFile(raw) {
|
|
47
18
|
const parsed = JSON.parse(raw);
|
|
48
19
|
if (!parsed || typeof parsed !== "object") return { entries: {} };
|
|
@@ -155,7 +126,6 @@ function applyCredentialAvailability(agents, credentialAvailability) {
|
|
|
155
126
|
}
|
|
156
127
|
|
|
157
128
|
export {
|
|
158
|
-
resolveCredentialKeyWithFallback,
|
|
159
129
|
readCredentialAvailability,
|
|
160
130
|
readCredentialEntry,
|
|
161
131
|
markCredentialUnavailable,
|
|
@@ -21,6 +21,8 @@ var createEmptyDialogRuntimeState = () => ({
|
|
|
21
21
|
activeControllers: {},
|
|
22
22
|
pendingRawData: {},
|
|
23
23
|
loopStopReason: null,
|
|
24
|
+
turnPhase: null,
|
|
25
|
+
turnPhaseTurnId: null,
|
|
24
26
|
pendingUserInputQueue: []
|
|
25
27
|
});
|
|
26
28
|
var activeDialogKey = null;
|
|
@@ -67,6 +69,8 @@ function resetDialogRuntimeSessionState(dialogKey) {
|
|
|
67
69
|
const runtime = ensureDialogRuntimeState(dialogKey);
|
|
68
70
|
runtime.tokens = createEmptyTokenStats();
|
|
69
71
|
runtime.loopStopReason = null;
|
|
72
|
+
runtime.turnPhase = null;
|
|
73
|
+
runtime.turnPhaseTurnId = null;
|
|
70
74
|
runtime.pendingUserInputQueue = [];
|
|
71
75
|
notify();
|
|
72
76
|
}
|
|
@@ -114,6 +118,26 @@ function setLoopStopReason(payload) {
|
|
|
114
118
|
notify();
|
|
115
119
|
return action("dialogRuntime/setLoopStopReason", payload);
|
|
116
120
|
}
|
|
121
|
+
function claimDialogTurnPhase(payload) {
|
|
122
|
+
const runtime = ensureDialogRuntimeState(payload.dialogKey);
|
|
123
|
+
runtime.turnPhaseTurnId = payload.turnId;
|
|
124
|
+
runtime.turnPhase = null;
|
|
125
|
+
notify();
|
|
126
|
+
return action("dialogRuntime/claimDialogTurnPhase", payload);
|
|
127
|
+
}
|
|
128
|
+
function setDialogTurnPhase(payload) {
|
|
129
|
+
const runtime = ensureDialogRuntimeState(payload.dialogKey);
|
|
130
|
+
if (typeof payload.turnId === "string" && runtime.turnPhaseTurnId !== null && runtime.turnPhaseTurnId !== payload.turnId) {
|
|
131
|
+
return action("dialogRuntime/setDialogTurnPhase:rejected", payload);
|
|
132
|
+
}
|
|
133
|
+
runtime.turnPhase = payload.phase;
|
|
134
|
+
runtime.turnPhaseTurnId = payload.phase === null ? null : payload.turnId ?? null;
|
|
135
|
+
notify();
|
|
136
|
+
return action("dialogRuntime/setDialogTurnPhase", payload);
|
|
137
|
+
}
|
|
138
|
+
function clearDialogTurnPhase(payload = {}) {
|
|
139
|
+
return setDialogTurnPhase({ phase: null, dialogKey: payload.dialogKey, turnId: payload.turnId });
|
|
140
|
+
}
|
|
117
141
|
function clearDialogRuntimeState(payload) {
|
|
118
142
|
delete runtimeByKey[payload.dialogKey];
|
|
119
143
|
notify();
|
|
@@ -258,6 +282,9 @@ function getPendingUserInputQueue(dialogKey) {
|
|
|
258
282
|
function getLoopStopReason(dialogKey) {
|
|
259
283
|
return getDialogRuntimeState(dialogKey).loopStopReason;
|
|
260
284
|
}
|
|
285
|
+
function getDialogTurnPhase(dialogKey) {
|
|
286
|
+
return getDialogRuntimeState(dialogKey).turnPhase;
|
|
287
|
+
}
|
|
261
288
|
var selectDialogRuntimeByKey = (_state, dialogKey) => getDialogRuntimeState(dialogKey);
|
|
262
289
|
var selectPendingFiles = (_state, dialogKey) => getPendingFiles(dialogKey);
|
|
263
290
|
var selectActiveControllers = (_state, dialogKey) => getActiveControllers(dialogKey);
|
|
@@ -293,6 +320,10 @@ function useLoopStopReason(dialogKey) {
|
|
|
293
320
|
(0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
294
321
|
return getLoopStopReason(dialogKey);
|
|
295
322
|
}
|
|
323
|
+
function useDialogTurnPhase(dialogKey) {
|
|
324
|
+
(0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
325
|
+
return getDialogTurnPhase(dialogKey);
|
|
326
|
+
}
|
|
296
327
|
function useDialogRuntimeTokens(dialogKey) {
|
|
297
328
|
(0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
298
329
|
return getDialogRuntimeTokens(dialogKey);
|
|
@@ -316,6 +347,9 @@ export {
|
|
|
316
347
|
removePendingFile,
|
|
317
348
|
clearPendingAttachments,
|
|
318
349
|
setLoopStopReason,
|
|
350
|
+
claimDialogTurnPhase,
|
|
351
|
+
setDialogTurnPhase,
|
|
352
|
+
clearDialogTurnPhase,
|
|
319
353
|
clearDialogRuntimeState,
|
|
320
354
|
addActiveController,
|
|
321
355
|
removeActiveController,
|
|
@@ -346,6 +380,7 @@ export {
|
|
|
346
380
|
useActiveControllers,
|
|
347
381
|
usePendingUserInputQueue,
|
|
348
382
|
useLoopStopReason,
|
|
383
|
+
useDialogTurnPhase,
|
|
349
384
|
useDialogRuntimeTokens,
|
|
350
385
|
useCurrentDialogKey,
|
|
351
386
|
useDialogConfigError
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
estimateTokenCount
|
|
3
3
|
} from "./chunk-PSCNXBYA.js";
|
|
4
|
-
import {
|
|
5
|
-
compactWhitespace
|
|
6
|
-
} from "./chunk-DWLEOOGR.js";
|
|
7
4
|
import {
|
|
8
5
|
addContentAction
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-RSEEDUMS.js";
|
|
10
7
|
import {
|
|
11
8
|
upload
|
|
12
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-HYZIYH2H.js";
|
|
13
10
|
import {
|
|
14
11
|
getRuntimeServerContext
|
|
15
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WIWM4FE3.js";
|
|
16
13
|
import {
|
|
17
14
|
API_ENDPOINTS
|
|
18
15
|
} from "./chunk-LCBAMY2M.js";
|
|
@@ -367,6 +364,7 @@ var truncateToolOutputForContext = (text, contextWindow) => {
|
|
|
367
364
|
// packages/ai/context/planCompression.ts
|
|
368
365
|
var MIN_COMPRESS_COUNT = 5;
|
|
369
366
|
var ACTIVE_SUMMARY_TAIL_KEEP_COUNT = 2;
|
|
367
|
+
var COMPACTION_RETENTION_CUSHION_RATIO = 0.18;
|
|
370
368
|
var MIN_TRIGGER_PENDING_COUNT = MIN_COMPRESS_COUNT + ACTIVE_SUMMARY_TAIL_KEEP_COUNT;
|
|
371
369
|
var getMessageTokenCount = (msg) => {
|
|
372
370
|
const content = serializeMessageContent(msg.content) || "";
|
|
@@ -409,13 +407,14 @@ var normalizeContextUsageRatio = (value) => {
|
|
|
409
407
|
const ratio = value > 1 ? value / 100 : value;
|
|
410
408
|
return ratio >= 0 && ratio <= 1 ? ratio : void 0;
|
|
411
409
|
};
|
|
412
|
-
var emptyPlan = (startIndex) => ({
|
|
410
|
+
var emptyPlan = (startIndex, diagnostics) => ({
|
|
413
411
|
shouldCompress: false,
|
|
414
412
|
compressCount: 0,
|
|
415
413
|
msgsToCompress: [],
|
|
416
414
|
msgsToKeep: [],
|
|
417
415
|
newSummarizedBeforeId: void 0,
|
|
418
|
-
startIndex
|
|
416
|
+
startIndex,
|
|
417
|
+
...diagnostics ? { diagnostics } : {}
|
|
419
418
|
});
|
|
420
419
|
function findPendingMessages(allMsgs, summarizedBeforeId) {
|
|
421
420
|
let startIndex = 0;
|
|
@@ -464,15 +463,42 @@ function calculateCompressCount(pendingMsgs, rawMessageBudget, opts) {
|
|
|
464
463
|
}
|
|
465
464
|
return pendingMsgs.length - keepCount;
|
|
466
465
|
}
|
|
466
|
+
function resolveEffectiveCompactionBudgets(args) {
|
|
467
|
+
const {
|
|
468
|
+
contextWindow,
|
|
469
|
+
triggerRatio,
|
|
470
|
+
historyBudget,
|
|
471
|
+
rawMessageBudget,
|
|
472
|
+
summaryTokens,
|
|
473
|
+
cushionRatio = COMPACTION_RETENTION_CUSHION_RATIO
|
|
474
|
+
} = args;
|
|
475
|
+
const maxRetainedRatio = Math.max(
|
|
476
|
+
0.2,
|
|
477
|
+
Number((triggerRatio - cushionRatio).toFixed(4))
|
|
478
|
+
);
|
|
479
|
+
const maxRetainedHistoryBudget = Math.floor(contextWindow * maxRetainedRatio);
|
|
480
|
+
const effectiveHistoryBudget = Math.min(historyBudget, maxRetainedHistoryBudget);
|
|
481
|
+
const effectiveRawMessageBudget = Math.min(
|
|
482
|
+
rawMessageBudget,
|
|
483
|
+
Math.max(0, effectiveHistoryBudget - summaryTokens)
|
|
484
|
+
);
|
|
485
|
+
return {
|
|
486
|
+
effectiveHistoryBudget,
|
|
487
|
+
effectiveRawMessageBudget,
|
|
488
|
+
maxRetainedRatio
|
|
489
|
+
};
|
|
490
|
+
}
|
|
467
491
|
function guardToolChainBoundary(pendingMsgs, compressCount) {
|
|
468
492
|
let count = compressCount;
|
|
469
|
-
while (count
|
|
470
|
-
count
|
|
493
|
+
while (count < pendingMsgs.length && pendingMsgs[count].role === "tool") {
|
|
494
|
+
count++;
|
|
471
495
|
}
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
496
|
+
while (count > 0 && hasOpenEndedToolCall(pendingMsgs[count - 1])) {
|
|
497
|
+
if (count < pendingMsgs.length && pendingMsgs[count].role === "tool") {
|
|
498
|
+
count++;
|
|
499
|
+
} else {
|
|
475
500
|
count--;
|
|
501
|
+
break;
|
|
476
502
|
}
|
|
477
503
|
}
|
|
478
504
|
return count;
|
|
@@ -489,7 +515,20 @@ function planCompression(input) {
|
|
|
489
515
|
coldResume
|
|
490
516
|
} = input;
|
|
491
517
|
const { pendingMsgs, startIndex } = findPendingMessages(allMsgs, summarizedBeforeId);
|
|
492
|
-
if (pendingMsgs.length === 0)
|
|
518
|
+
if (pendingMsgs.length === 0) {
|
|
519
|
+
return emptyPlan(startIndex, {
|
|
520
|
+
pendingMsgCount: 0,
|
|
521
|
+
totalUsed: estimateTokenCount(summary || ""),
|
|
522
|
+
historyBudget: 0,
|
|
523
|
+
triggerRatio: resolveCompressionTriggerRatio(contextWindow),
|
|
524
|
+
realUsageRatio: normalizeContextUsageRatio(realContextUsagePercent),
|
|
525
|
+
triggeredByRealUsage: false,
|
|
526
|
+
triggeredByEstimate: false,
|
|
527
|
+
triggeredByColdResume: false,
|
|
528
|
+
shouldRunActiveSummary: false,
|
|
529
|
+
emptyReason: "no-pending"
|
|
530
|
+
});
|
|
531
|
+
}
|
|
493
532
|
const summaryTokens = estimateTokenCount(summary || "");
|
|
494
533
|
const pendingTokens = pendingMsgs.reduce((sum, msg) => sum + getMessageTokenCount(msg), 0);
|
|
495
534
|
const totalUsed = summaryTokens + pendingTokens;
|
|
@@ -517,14 +556,47 @@ function planCompression(input) {
|
|
|
517
556
|
coldResume,
|
|
518
557
|
lastMsg: pendingMsgs[pendingMsgs.length - 1]
|
|
519
558
|
});
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
keepTailCount: shouldRunActiveSummary || triggeredByRealUsage || triggeredByColdResume,
|
|
559
|
+
const diagnostics = {
|
|
560
|
+
pendingMsgCount: pendingMsgs.length,
|
|
523
561
|
totalUsed,
|
|
524
|
-
historyBudget
|
|
562
|
+
historyBudget,
|
|
563
|
+
triggerRatio,
|
|
564
|
+
realUsageRatio: normalizeContextUsageRatio(realContextUsagePercent),
|
|
565
|
+
triggeredByRealUsage,
|
|
566
|
+
triggeredByEstimate: normalizeContextUsageRatio(realContextUsagePercent) === void 0 && totalUsed >= historyBudget,
|
|
567
|
+
triggeredByColdResume,
|
|
568
|
+
shouldRunActiveSummary
|
|
569
|
+
};
|
|
570
|
+
if (!trigger) {
|
|
571
|
+
return emptyPlan(startIndex, {
|
|
572
|
+
...diagnostics,
|
|
573
|
+
emptyReason: "not-triggered"
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
const { effectiveHistoryBudget, effectiveRawMessageBudget } = resolveEffectiveCompactionBudgets({
|
|
577
|
+
contextWindow,
|
|
578
|
+
triggerRatio,
|
|
579
|
+
historyBudget,
|
|
580
|
+
rawMessageBudget,
|
|
581
|
+
summaryTokens
|
|
525
582
|
});
|
|
583
|
+
let compressCount = calculateCompressCount(
|
|
584
|
+
pendingMsgs,
|
|
585
|
+
effectiveRawMessageBudget,
|
|
586
|
+
{
|
|
587
|
+
keepTailCount: shouldRunActiveSummary || triggeredByRealUsage || triggeredByColdResume,
|
|
588
|
+
totalUsed,
|
|
589
|
+
historyBudget: effectiveHistoryBudget
|
|
590
|
+
}
|
|
591
|
+
);
|
|
526
592
|
compressCount = guardToolChainBoundary(pendingMsgs, compressCount);
|
|
527
|
-
if (compressCount < MIN_COMPRESS_COUNT)
|
|
593
|
+
if (compressCount < MIN_COMPRESS_COUNT) {
|
|
594
|
+
return emptyPlan(startIndex, {
|
|
595
|
+
...diagnostics,
|
|
596
|
+
compressCount,
|
|
597
|
+
emptyReason: "below-min-compress-count"
|
|
598
|
+
});
|
|
599
|
+
}
|
|
528
600
|
const msgsToCompress = pendingMsgs.slice(0, compressCount);
|
|
529
601
|
const msgsToKeep = pendingMsgs.slice(compressCount);
|
|
530
602
|
const newSummarizedBeforeId = msgsToCompress[msgsToCompress.length - 1].id;
|
|
@@ -534,12 +606,13 @@ function planCompression(input) {
|
|
|
534
606
|
msgsToCompress,
|
|
535
607
|
msgsToKeep,
|
|
536
608
|
newSummarizedBeforeId,
|
|
537
|
-
startIndex
|
|
609
|
+
startIndex,
|
|
610
|
+
diagnostics: { ...diagnostics, compressCount }
|
|
538
611
|
};
|
|
539
612
|
}
|
|
540
613
|
|
|
541
614
|
// packages/ai/context/compactionShared.ts
|
|
542
|
-
var COMPACTION_SUMMARY_SCHEMA_VERSION =
|
|
615
|
+
var COMPACTION_SUMMARY_SCHEMA_VERSION = 2;
|
|
543
616
|
var COMPACTION_SUMMARY_SYSTEM_PROMPT = `\u4F60\u662F\u5BF9\u8BDD\u4E0A\u4E0B\u6587\u538B\u7F29\u5668\u3002\u6839\u636E\u3010\u73B0\u6709\u8BB0\u5FC6\u3011\u548C\u3010\u65B0\u589E\u5BF9\u8BDD\u3011\uFF0C\u8F93\u51FA\u53EF\u66FF\u4EE3\u539F\u59CB\u6D88\u606F\u7684\u4E8B\u5B9E\u6027\u8981\u70B9\uFF0C\u4F9B\u540E\u7EED\u5BF9\u8BDD\u76F4\u63A5\u4F7F\u7528\u3002
|
|
544
617
|
|
|
545
618
|
\u4E25\u683C\u53EA\u8F93\u51FA\u4E0B\u9762\u4E09\u90E8\u5206\uFF0C\u6807\u9898\u5FC5\u987B\u5B8C\u5168\u4E00\u81F4\uFF1A
|
|
@@ -552,10 +625,16 @@ var COMPACTION_SUMMARY_SYSTEM_PROMPT = `\u4F60\u662F\u5BF9\u8BDD\u4E0A\u4E0B\u65
|
|
|
552
625
|
|
|
553
626
|
\u8981\u6C42\uFF1A
|
|
554
627
|
1) \u4F7F\u7528\u5BF9\u8BDD\u4E3B\u8BED\u8A00\uFF1B\u6DF7\u5408\u8BED\u8A00\u65F6\u4F18\u5148\u7528\u6237\u4E3B\u8981\u8BED\u8A00\uFF1B\u4E13\u6709\u540D\u8BCD\u3001\u6587\u4EF6\u8DEF\u5F84\u3001\u6807\u8BC6\u7B26\u3001\u547D\u4EE4\u4FDD\u7559\u539F\u6587\uFF0C\u4E0D\u8981\u7FFB\u8BD1\u6216\u8F6C\u8FF0\u3002
|
|
555
|
-
2) \u5173\u952E\u4E8B\u5B9E\u6863\u6848\
|
|
628
|
+
2) \u5173\u952E\u4E8B\u5B9E\u6863\u6848\u7684**\u524D\u4E24\u9879\u56FA\u5B9A\u662F**\uFF1A
|
|
629
|
+
- \u300C\u539F\u59CB\u76EE\u6807\u300D\uFF1A\u7528\u6237\u6700\u521D\u4E3A\u4EC0\u4E48\u5F00\u8FD9\u6BB5\u5BF9\u8BDD\uFF08\u5C3D\u91CF\u4FDD\u7559\u4ED6\u7684\u539F\u8BDD\u4E0E\u7528\u8BCD\uFF0C\u4E0D\u8981\u6539\u5199\u6210\u4EFB\u52A1\u6E05\u5355\uFF09\u3002
|
|
630
|
+
\u589E\u91CF\u66F4\u65B0\u65F6\u6CBF\u7528\u3010\u73B0\u6709\u8BB0\u5FC6\u3011\u91CC\u5DF2\u6709\u7684\u300C\u539F\u59CB\u76EE\u6807\u300D\uFF0C\u4E0D\u8981\u88AB\u65B0\u589E\u5BF9\u8BDD\u6539\u5199\u2014\u2014\u5B83\u662F\u7A33\u5B9A\u5B57\u6BB5\uFF1B
|
|
631
|
+
\u4EC5\u5F53\u65B0\u5BF9\u8BDD\u660E\u786E\u8868\u660E\u539F\u6587\u6709\u4E8B\u5B9E\u6027\u9519\u8BEF\u65F6\u624D\u4FEE\u6B63\uFF0C\u5E76\u5728\u300C\u76EE\u6807\u6F14\u5316\u300D\u91CC\u6CE8\u660E\u3002
|
|
632
|
+
- \u300C\u76EE\u6807\u6F14\u5316\u300D\uFF1A\u82E5\u4E2D\u9014\u8F6C\u5411\uFF0C\u5199\u6E05\u8F6C\u5411\u4E86\u4EC0\u4E48\u3001\u56E0\u4E3A\u4EC0\u4E48\uFF1B\u6CA1\u6709\u8F6C\u5411\u5C31\u5199\u300C\u65E0\u8F6C\u5411\u300D\u6216\u7701\u7565\u8FD9\u4E00\u9879\uFF0C\u4E0D\u8981\u786C\u51D1\u3002
|
|
633
|
+
\u88AB\u540E\u7EED\u5DE5\u4F5C\u53D6\u4EE3\u7684\u662F"\u65B9\u6848"\uFF0C\u4E0D\u662F"\u7528\u6237\u7684\u521D\u59CB\u610F\u56FE"\u2014\u2014\u521D\u59CB\u610F\u56FE\u4E0D\u5F97\u7701\u7565\u3002
|
|
634
|
+
\u5176\u540E\u624D\u662F\uFF1A\u7528\u6237\u504F\u597D\u3001\u7EA6\u675F\u3001\u6280\u672F\u6808\u3001\u786E\u5B9A\u7684\u6587\u4EF6\u8DEF\u5F84\u3001\u6838\u5FC3\u51B3\u7B56\u3001\u672A\u5B8C\u6210\u5F85\u529E\u3002\u4FDD\u7559\u786E\u5207\u503C\uFF08\u7AEF\u53E3\u53F7\u3001\u7248\u672C\u53F7\u3001\u8DEF\u5F84\u3001\u53D8\u91CF\u540D\u3001\u9519\u8BEF\u4FE1\u606F\u539F\u6587\uFF09\uFF0C\u4E0D\u8981\u6982\u62EC\u6210"\u67D0\u4E2A\u7AEF\u53E3"\u6216"\u67D0\u4E2A\u6587\u4EF6"\u6216"\u67D0\u62A5\u9519"\u3002
|
|
556
635
|
3) \u5BF9\u8BDD\u8FDB\u5C55\u4E0E\u5F85\u529E\u4EE5\u7B2C\u4E00\u4EBA\u79F0\u7EED\u4F5C\u7B14\u8BB0\u7684\u53E3\u543B\u5199\uFF08"\u6211\u505A\u4E86\u2026""\u7528\u6237\u8981\u6C42\u2026""\u4E0B\u4E00\u6B65\u6211\u9700\u8981\u2026"\uFF09\uFF0C\u4E0D\u8981\u5199\u6210\u7B2C\u4E09\u65B9\u89C2\u5BDF\u62A5\u544A\u3002\u5148\u6781\u7B80\u6982\u62EC\u65E7\u4E0A\u4E0B\u6587\uFF0C\u518D\u66F4\u8BE6\u7EC6\u8BB0\u5F55\u6700\u8FD1\u8FDB\u5C55\u3001\u7ED3\u8BBA\u3001\u5206\u6B67\u4E0E\u4E0B\u4E00\u6B65\u3002\u5BF9\u4E8E\u58F0\u79F0\u5DF2\u5B8C\u6210\u4F46\u5C1A\u672A\u9A8C\u8BC1\u7684\u5DE5\u4F5C\uFF08\u5982\u5DE5\u5177\u8C03\u7528\u8FD4\u56DE\u6210\u529F\u4F46\u7ED3\u679C\u672A\u4EBA\u5DE5\u786E\u8BA4\uFF09\uFF0C\u660E\u786E\u6807\u6CE8"\uFF08\u5F85\u9A8C\u8BC1\uFF09"\u2014\u2014\u4E0D\u8981\u9ED8\u8BA4\u4FE1\u4EFB\u5DE5\u5177\u8FD4\u56DE\u503C\u3002
|
|
557
636
|
4) \u6587\u4EF6\u64CD\u4F5C\u6E05\u5355\uFF1A\u5217\u51FA\u672C\u6B21\u538B\u7F29\u8303\u56F4\u5185\u8BFB\u53D6\u3001\u5199\u5165\u3001\u7F16\u8F91\u8FC7\u7684\u6587\u4EF6\u8DEF\u5F84\u53CA\u64CD\u4F5C\u7C7B\u578B\uFF08\u5982: - \u8BFB\u53D6: path/to/file\uFF1B\u82E5\u672A\u6D89\u53CA\u6587\u4EF6\u64CD\u4F5C\u5199"\u65E0"\uFF09\u3002
|
|
558
|
-
5) \u5FFD\u7565\u5BD2\u6684\u3001\u91CD\u590D\u5C1D\u8BD5\
|
|
637
|
+
5) \u5FFD\u7565\u5BD2\u6684\u3001\u91CD\u590D\u5C1D\u8BD5\u548C\u65E0\u4EF7\u503C\u5E9F\u8BDD\uFF1B**\u5DF2\u653E\u5F03\u7684\u65B9\u6848/\u5C1D\u8BD5**\u53EF\u4EE5\u7701\u7565\uFF0C\u4F46\u7528\u6237\u5F53\u521D\u7684\u610F\u56FE\u4E0E\u7406\u7531\u4E0D\u53EF\u7701\u7565\uFF08\u89C1\u7B2C 2 \u6761\uFF09\u3002
|
|
559
638
|
6) \u4E0D\u8981\u7F16\u9020\u672A\u51FA\u73B0\u7684\u4FE1\u606F\uFF1B\u4E0D\u8981\u5F00\u573A\u767D\u3001\u7ED3\u675F\u8BED\u3001markdown \u4EE3\u7801\u5757\u6216\u989D\u5916\u7AE0\u8282\uFF1B\u4E0D\u8981\u8C03\u7528\u4EFB\u4F55\u5DE5\u5177\u3002`;
|
|
560
639
|
function formatMessageContentFallback(msg) {
|
|
561
640
|
const content = serializeMessageContent(msg.content);
|
|
@@ -691,14 +770,6 @@ function formatCompactionMetricsLog(metrics) {
|
|
|
691
770
|
return `[Compaction] reason=${metrics.reason} compressed=${metrics.compressedCount}->${metrics.retainedCount} msgs, tokens=${totalBefore}->${totalAfter} (ratio=${ratio})${llmInfo}`;
|
|
692
771
|
}
|
|
693
772
|
|
|
694
|
-
// packages/core/clipCompactText.ts
|
|
695
|
-
function clipCompactText(value, max, ellipsis = "...") {
|
|
696
|
-
const compact = compactWhitespace(value);
|
|
697
|
-
if (compact.length <= max) return compact;
|
|
698
|
-
if (max <= ellipsis.length) return compact.slice(0, max);
|
|
699
|
-
return `${compact.slice(0, max - ellipsis.length)}${ellipsis}`;
|
|
700
|
-
}
|
|
701
|
-
|
|
702
773
|
// packages/ai/token/providerCallTiming.ts
|
|
703
774
|
var defaultNow = () => {
|
|
704
775
|
const perf = globalThis.performance;
|
|
@@ -770,7 +841,14 @@ var isMeaningfulResponsesOutput = (event) => {
|
|
|
770
841
|
};
|
|
771
842
|
|
|
772
843
|
export {
|
|
773
|
-
|
|
844
|
+
normalizeTimingMs,
|
|
845
|
+
createProviderCallTimingTracker,
|
|
846
|
+
observeMeaningfulProviderResponseAt,
|
|
847
|
+
observeMeaningfulProviderResponse,
|
|
848
|
+
finalizeProviderCallTiming,
|
|
849
|
+
withProviderCallTimingFields,
|
|
850
|
+
isMeaningfulChatCompletionOutput,
|
|
851
|
+
isMeaningfulResponsesOutput,
|
|
774
852
|
planContextUsage,
|
|
775
853
|
buildDatabaseFileContentUrl,
|
|
776
854
|
serializeMessageContent,
|
|
@@ -784,13 +862,5 @@ export {
|
|
|
784
862
|
formatFileOperationsFromMessages,
|
|
785
863
|
formatMessagesForSummaryWithTruncation,
|
|
786
864
|
buildCompactionMetricsFromPlan,
|
|
787
|
-
formatCompactionMetricsLog
|
|
788
|
-
normalizeTimingMs,
|
|
789
|
-
createProviderCallTimingTracker,
|
|
790
|
-
observeMeaningfulProviderResponseAt,
|
|
791
|
-
observeMeaningfulProviderResponse,
|
|
792
|
-
finalizeProviderCallTiming,
|
|
793
|
-
withProviderCallTimingFields,
|
|
794
|
-
isMeaningfulChatCompletionOutput,
|
|
795
|
-
isMeaningfulResponsesOutput
|
|
865
|
+
formatCompactionMetricsLog
|
|
796
866
|
};
|