pybao-cli 1.5.16 → 1.5.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/REPL-XAVL5RCA.js +50 -0
- package/dist/{acp-OQU3Q74X.js → acp-FZMRRE52.js} +31 -31
- package/dist/{agentsValidate-SZEKAI7D.js → agentsValidate-L7GAT762.js} +7 -7
- package/dist/{ask-4GYZIFBI.js → ask-ADTEQS26.js} +30 -30
- package/dist/{autoUpdater-TNJ5EHPF.js → autoUpdater-PGOABD5I.js} +3 -3
- package/dist/{chunk-2UIC6KUN.js → chunk-2TMP5VOI.js} +2 -2
- package/dist/{chunk-GF2MQGGQ.js → chunk-3765IJF3.js} +1 -1
- package/dist/{chunk-XC7HSASO.js → chunk-55NEZKOK.js} +3 -3
- package/dist/{chunk-VLAJHHDH.js → chunk-5FCS7XMX.js} +4 -4
- package/dist/{chunk-TOLIZZNG.js → chunk-5TG2TS2B.js} +1 -1
- package/dist/{chunk-7UPV7QTD.js → chunk-6KHHEHVK.js} +4 -4
- package/dist/{chunk-OTEQDHXR.js → chunk-6M456HRQ.js} +3 -3
- package/dist/{chunk-MZBUBAHS.js → chunk-AT65XQ6F.js} +15 -15
- package/dist/chunk-BKCAVW2G.js.map +7 -0
- package/dist/{chunk-OQUAEZWY.js → chunk-CSNXWIN7.js} +2 -2
- package/dist/{chunk-ZHCJRYGZ.js → chunk-E3CALQ2P.js} +2 -2
- package/dist/{chunk-PJ6F6UEG.js → chunk-F2LDNSWF.js} +3 -3
- package/dist/{chunk-IW5UFMRQ.js → chunk-FKOFLEGS.js} +1 -1
- package/dist/{chunk-GZBASJQM.js → chunk-FV2AKPZZ.js} +3 -3
- package/dist/{chunk-EGFEUHPK.js → chunk-FVBN7FJN.js} +137 -6
- package/dist/chunk-FVBN7FJN.js.map +7 -0
- package/dist/{chunk-RA55NOAX.js → chunk-HFULFLIR.js} +3 -3
- package/dist/{chunk-LE4MSECX.js → chunk-JCO7YSWF.js} +650 -618
- package/dist/{chunk-LE4MSECX.js.map → chunk-JCO7YSWF.js.map} +3 -3
- package/dist/{chunk-WCNJUZPB.js → chunk-JNHYI6EM.js} +4 -4
- package/dist/{chunk-ZVVBLU3R.js → chunk-JTAX2243.js} +1 -1
- package/dist/{chunk-SQDHH3JF.js → chunk-JWOMCQK6.js} +3 -3
- package/dist/{chunk-TKUXXEIH.js → chunk-K5VSWVIL.js} +1 -1
- package/dist/{chunk-7TRQANX3.js → chunk-NDQGKE3J.js} +2 -2
- package/dist/{chunk-GDUBW6S3.js → chunk-O2C7QBAN.js} +1 -1
- package/dist/{chunk-T2TMNQ7H.js → chunk-ONDCEX4W.js} +3 -3
- package/dist/{chunk-MMTMYYK4.js → chunk-P5EV4BIE.js} +1 -1
- package/dist/{chunk-DXLMPRXX.js → chunk-Q6EWDFHH.js} +1 -1
- package/dist/{chunk-74PPXIKF.js → chunk-QXTM3UIH.js} +1 -1
- package/dist/{chunk-ZGQA3IBT.js → chunk-REUM4VSE.js} +1 -1
- package/dist/{chunk-5NEN4RZF.js → chunk-SCB62IS4.js} +2 -2
- package/dist/{chunk-ZVKBWRCR.js → chunk-SLUIT4WW.js} +1 -2
- package/dist/chunk-SLUIT4WW.js.map +7 -0
- package/dist/{chunk-2JDFT27Z.js → chunk-V6V3YH74.js} +4 -4
- package/dist/{chunk-2IP3S5YY.js → chunk-YERYOD26.js} +2 -2
- package/dist/{chunk-6UUMMCEA.js → chunk-ZWBQVHEV.js} +1 -1
- package/dist/{cli-BQVVZA5X.js → cli-GJKS4YX3.js} +92 -92
- package/dist/commands-5O55ZKC5.js +54 -0
- package/dist/{config-RPIQCWHL.js → config-DK44ZOUO.js} +4 -4
- package/dist/{context-LWB5JWQA.js → context-QVAW7R4W.js} +6 -6
- package/dist/{conversationPersistence-KR3CK6SF.js → conversationPersistence-WOGPQFDH.js} +3 -3
- package/dist/{conversationTracker-YXHNBYW3.js → conversationTracker-DJ2P3C5A.js} +4 -4
- package/dist/{customCommands-6TIJA6HB.js → customCommands-6FCLZWIJ.js} +4 -4
- package/dist/{env-7RX7XQ4A.js → env-4W3WLNYJ.js} +2 -2
- package/dist/{file-LJN7Y7PR.js → file-5AU2OZUV.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-NAYVED3B.js → llm-3QII764E.js} +87 -39
- package/dist/llm-3QII764E.js.map +7 -0
- package/dist/{llmLazy-ORKIQCY5.js → llmLazy-WONGJIAG.js} +1 -1
- package/dist/{loader-A76GID3X.js → loader-ZBS52MFJ.js} +4 -4
- package/dist/{lsp-XEKIOPMN.js → lsp-HIGRY52B.js} +6 -6
- package/dist/{lspAnchor-AAJRSC4H.js → lspAnchor-2P4IM7TI.js} +6 -6
- package/dist/{mcp-FLNPZDDY.js → mcp-7QUJLHOA.js} +7 -7
- package/dist/{mentionProcessor-I5GL7S3X.js → mentionProcessor-ZBADLKGT.js} +5 -5
- package/dist/{messages-4MKBBVXD.js → messages-O5VJZH5E.js} +1 -1
- package/dist/{model-TIZ3I4PF.js → model-KCSVLRTZ.js} +5 -5
- package/dist/{openai-FQAJSMPU.js → openai-UESI7G2E.js} +5 -5
- package/dist/{outputStyles-UGN4PZ2U.js → outputStyles-MA2S5OX2.js} +4 -4
- package/dist/{pluginRuntime-VS4AI72Y.js → pluginRuntime-HXHAABU4.js} +6 -6
- package/dist/{pluginValidation-UXM6NUGH.js → pluginValidation-W4XDOMXL.js} +6 -6
- package/dist/prompts-LRBNHOJ3.js +56 -0
- package/dist/{pybAgentSessionLoad-HN7QZC2J.js → pybAgentSessionLoad-IR7OHSKZ.js} +4 -4
- package/dist/{pybAgentSessionResume-JI2EBGGX.js → pybAgentSessionResume-LQCA3KM4.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-GGI6HS7W.js → pybAgentStreamJsonSession-OKQERAJN.js} +1 -1
- package/dist/{pybHooks-YLJLAANL.js → pybHooks-L2YFSZI5.js} +4 -4
- package/dist/query-QTCH5XN4.js +54 -0
- package/dist/{registry-JZNE7NQ7.js → registry-BBSYMZVS.js} +5 -5
- package/dist/{ripgrep-JEZOY3ZY.js → ripgrep-YHLURRLJ.js} +3 -3
- package/dist/{skillMarketplace-67VL2DPG.js → skillMarketplace-OH6O2R4I.js} +3 -3
- package/dist/{state-WMWNA6WF.js → state-BHFEPCZT.js} +2 -2
- package/dist/{theme-X7OI4VAS.js → theme-2MGLCL3T.js} +5 -5
- package/dist/{toolPermissionSettings-XWDLCBZA.js → toolPermissionSettings-VBL3MSNO.js} +6 -6
- package/dist/tools-PRDWPGAC.js +55 -0
- package/dist/{userInput-3TEL6EW5.js → userInput-AHRHX2EI.js} +32 -32
- package/package.json +1 -2
- package/scripts/session-behavior-invariant-gate.mjs +44 -6
- package/scripts/session-contract-gate.mjs +3 -3
- package/dist/REPL-SLKFFXW3.js +0 -50
- package/dist/chunk-5ZAXW6YC.js.map +0 -7
- package/dist/chunk-EGFEUHPK.js.map +0 -7
- package/dist/chunk-ZVKBWRCR.js.map +0 -7
- package/dist/commands-BW7WPWPW.js +0 -54
- package/dist/llm-NAYVED3B.js.map +0 -7
- package/dist/prompts-7JAIWFA4.js +0 -56
- package/dist/query-HS7RAFSK.js +0 -56
- package/dist/tools-XHB7WGLV.js +0 -55
- /package/dist/{REPL-SLKFFXW3.js.map → REPL-XAVL5RCA.js.map} +0 -0
- /package/dist/{acp-OQU3Q74X.js.map → acp-FZMRRE52.js.map} +0 -0
- /package/dist/{agentsValidate-SZEKAI7D.js.map → agentsValidate-L7GAT762.js.map} +0 -0
- /package/dist/{ask-4GYZIFBI.js.map → ask-ADTEQS26.js.map} +0 -0
- /package/dist/{autoUpdater-TNJ5EHPF.js.map → autoUpdater-PGOABD5I.js.map} +0 -0
- /package/dist/{chunk-2UIC6KUN.js.map → chunk-2TMP5VOI.js.map} +0 -0
- /package/dist/{chunk-GF2MQGGQ.js.map → chunk-3765IJF3.js.map} +0 -0
- /package/dist/{chunk-XC7HSASO.js.map → chunk-55NEZKOK.js.map} +0 -0
- /package/dist/{chunk-VLAJHHDH.js.map → chunk-5FCS7XMX.js.map} +0 -0
- /package/dist/{chunk-TOLIZZNG.js.map → chunk-5TG2TS2B.js.map} +0 -0
- /package/dist/{chunk-7UPV7QTD.js.map → chunk-6KHHEHVK.js.map} +0 -0
- /package/dist/{chunk-OTEQDHXR.js.map → chunk-6M456HRQ.js.map} +0 -0
- /package/dist/{chunk-MZBUBAHS.js.map → chunk-AT65XQ6F.js.map} +0 -0
- /package/dist/{chunk-5ZAXW6YC.js → chunk-BKCAVW2G.js} +0 -0
- /package/dist/{chunk-OQUAEZWY.js.map → chunk-CSNXWIN7.js.map} +0 -0
- /package/dist/{chunk-ZHCJRYGZ.js.map → chunk-E3CALQ2P.js.map} +0 -0
- /package/dist/{chunk-PJ6F6UEG.js.map → chunk-F2LDNSWF.js.map} +0 -0
- /package/dist/{chunk-IW5UFMRQ.js.map → chunk-FKOFLEGS.js.map} +0 -0
- /package/dist/{chunk-GZBASJQM.js.map → chunk-FV2AKPZZ.js.map} +0 -0
- /package/dist/{chunk-RA55NOAX.js.map → chunk-HFULFLIR.js.map} +0 -0
- /package/dist/{chunk-WCNJUZPB.js.map → chunk-JNHYI6EM.js.map} +0 -0
- /package/dist/{chunk-ZVVBLU3R.js.map → chunk-JTAX2243.js.map} +0 -0
- /package/dist/{chunk-SQDHH3JF.js.map → chunk-JWOMCQK6.js.map} +0 -0
- /package/dist/{chunk-TKUXXEIH.js.map → chunk-K5VSWVIL.js.map} +0 -0
- /package/dist/{chunk-7TRQANX3.js.map → chunk-NDQGKE3J.js.map} +0 -0
- /package/dist/{chunk-GDUBW6S3.js.map → chunk-O2C7QBAN.js.map} +0 -0
- /package/dist/{chunk-T2TMNQ7H.js.map → chunk-ONDCEX4W.js.map} +0 -0
- /package/dist/{chunk-MMTMYYK4.js.map → chunk-P5EV4BIE.js.map} +0 -0
- /package/dist/{chunk-DXLMPRXX.js.map → chunk-Q6EWDFHH.js.map} +0 -0
- /package/dist/{chunk-74PPXIKF.js.map → chunk-QXTM3UIH.js.map} +0 -0
- /package/dist/{chunk-ZGQA3IBT.js.map → chunk-REUM4VSE.js.map} +0 -0
- /package/dist/{chunk-5NEN4RZF.js.map → chunk-SCB62IS4.js.map} +0 -0
- /package/dist/{chunk-2JDFT27Z.js.map → chunk-V6V3YH74.js.map} +0 -0
- /package/dist/{chunk-2IP3S5YY.js.map → chunk-YERYOD26.js.map} +0 -0
- /package/dist/{chunk-6UUMMCEA.js.map → chunk-ZWBQVHEV.js.map} +0 -0
- /package/dist/{cli-BQVVZA5X.js.map → cli-GJKS4YX3.js.map} +0 -0
- /package/dist/{commands-BW7WPWPW.js.map → commands-5O55ZKC5.js.map} +0 -0
- /package/dist/{config-RPIQCWHL.js.map → config-DK44ZOUO.js.map} +0 -0
- /package/dist/{context-LWB5JWQA.js.map → context-QVAW7R4W.js.map} +0 -0
- /package/dist/{conversationPersistence-KR3CK6SF.js.map → conversationPersistence-WOGPQFDH.js.map} +0 -0
- /package/dist/{conversationTracker-YXHNBYW3.js.map → conversationTracker-DJ2P3C5A.js.map} +0 -0
- /package/dist/{customCommands-6TIJA6HB.js.map → customCommands-6FCLZWIJ.js.map} +0 -0
- /package/dist/{env-7RX7XQ4A.js.map → env-4W3WLNYJ.js.map} +0 -0
- /package/dist/{file-LJN7Y7PR.js.map → file-5AU2OZUV.js.map} +0 -0
- /package/dist/{llmLazy-ORKIQCY5.js.map → llmLazy-WONGJIAG.js.map} +0 -0
- /package/dist/{loader-A76GID3X.js.map → loader-ZBS52MFJ.js.map} +0 -0
- /package/dist/{lsp-XEKIOPMN.js.map → lsp-HIGRY52B.js.map} +0 -0
- /package/dist/{lspAnchor-AAJRSC4H.js.map → lspAnchor-2P4IM7TI.js.map} +0 -0
- /package/dist/{mcp-FLNPZDDY.js.map → mcp-7QUJLHOA.js.map} +0 -0
- /package/dist/{mentionProcessor-I5GL7S3X.js.map → mentionProcessor-ZBADLKGT.js.map} +0 -0
- /package/dist/{messages-4MKBBVXD.js.map → messages-O5VJZH5E.js.map} +0 -0
- /package/dist/{model-TIZ3I4PF.js.map → model-KCSVLRTZ.js.map} +0 -0
- /package/dist/{openai-FQAJSMPU.js.map → openai-UESI7G2E.js.map} +0 -0
- /package/dist/{outputStyles-UGN4PZ2U.js.map → outputStyles-MA2S5OX2.js.map} +0 -0
- /package/dist/{pluginRuntime-VS4AI72Y.js.map → pluginRuntime-HXHAABU4.js.map} +0 -0
- /package/dist/{pluginValidation-UXM6NUGH.js.map → pluginValidation-W4XDOMXL.js.map} +0 -0
- /package/dist/{prompts-7JAIWFA4.js.map → prompts-LRBNHOJ3.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-HN7QZC2J.js.map → pybAgentSessionLoad-IR7OHSKZ.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-JI2EBGGX.js.map → pybAgentSessionResume-LQCA3KM4.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-GGI6HS7W.js.map → pybAgentStreamJsonSession-OKQERAJN.js.map} +0 -0
- /package/dist/{pybHooks-YLJLAANL.js.map → pybHooks-L2YFSZI5.js.map} +0 -0
- /package/dist/{query-HS7RAFSK.js.map → query-QTCH5XN4.js.map} +0 -0
- /package/dist/{registry-JZNE7NQ7.js.map → registry-BBSYMZVS.js.map} +0 -0
- /package/dist/{ripgrep-JEZOY3ZY.js.map → ripgrep-YHLURRLJ.js.map} +0 -0
- /package/dist/{skillMarketplace-67VL2DPG.js.map → skillMarketplace-OH6O2R4I.js.map} +0 -0
- /package/dist/{state-WMWNA6WF.js.map → state-BHFEPCZT.js.map} +0 -0
- /package/dist/{theme-X7OI4VAS.js.map → theme-2MGLCL3T.js.map} +0 -0
- /package/dist/{toolPermissionSettings-XWDLCBZA.js.map → toolPermissionSettings-VBL3MSNO.js.map} +0 -0
- /package/dist/{tools-XHB7WGLV.js.map → tools-PRDWPGAC.js.map} +0 -0
- /package/dist/{userInput-3TEL6EW5.js.map → userInput-AHRHX2EI.js.map} +0 -0
|
@@ -244,6 +244,8 @@ function computeAutoCompactMetrics(events) {
|
|
|
244
244
|
errorSamples.length
|
|
245
245
|
) : void 0;
|
|
246
246
|
const first_turn_drift_rate = task_goal_retention_rate === void 0 ? void 0 : 1 - task_goal_retention_rate;
|
|
247
|
+
const latest_user_goal_adherence_rate = task_goal_retention_rate;
|
|
248
|
+
const turn_drift_rate = first_turn_drift_rate;
|
|
247
249
|
const restoreIntegrityEvents = events.filter(
|
|
248
250
|
(event) => event.phase === "TRACKER_RESTORE_INTEGRITY_CHECK"
|
|
249
251
|
);
|
|
@@ -256,6 +258,20 @@ function computeAutoCompactMetrics(events) {
|
|
|
256
258
|
const userContentAdaptedEvents = events.filter(
|
|
257
259
|
(event) => event.phase === "MESSAGE_USER_CONTENT_ADAPTED"
|
|
258
260
|
);
|
|
261
|
+
const normalizeGuardEvents = events.filter(
|
|
262
|
+
(event) => event.phase === "BOUNDARY_NORMALIZE_GUARD_APPLIED"
|
|
263
|
+
);
|
|
264
|
+
const staleInstructionBlockedTotal = normalizeGuardEvents.reduce(
|
|
265
|
+
(sum, event) => sum + Number(event.data?.cross_turn_user_merge_block_count ?? 0),
|
|
266
|
+
0
|
|
267
|
+
);
|
|
268
|
+
const cacheChainEvents = events.filter(
|
|
269
|
+
(event) => event.phase === "CACHE_CONTROL_CHAIN"
|
|
270
|
+
);
|
|
271
|
+
const cacheChainTraceSamples = cacheChainEvents.filter(
|
|
272
|
+
(event) => Number.isFinite(Number(event.data?.cached_block_count)) && Number.isFinite(Number(event.data?.response_chain_depth))
|
|
273
|
+
);
|
|
274
|
+
const cache_chain_trace_rate = cacheChainEvents.length > 0 ? safeDivide(cacheChainTraceSamples.length, cacheChainEvents.length) : void 0;
|
|
259
275
|
const stringInputPathNumerator = userContentAdaptedEvents.reduce((sum, event) => {
|
|
260
276
|
const eventTotal = Number(event.data?.totalUserContentCount ?? 0);
|
|
261
277
|
const eventString = Number(event.data?.userStringContentCount ?? 0);
|
|
@@ -269,6 +285,7 @@ function computeAutoCompactMetrics(events) {
|
|
|
269
285
|
return sum + eventTotal;
|
|
270
286
|
}, 0);
|
|
271
287
|
const string_input_path_usage_rate = stringInputPathDenominator > 0 ? safeDivide(stringInputPathNumerator, stringInputPathDenominator) : void 0;
|
|
288
|
+
const stale_instruction_revisit_rate = stringInputPathDenominator > 0 ? safeDivide(staleInstructionBlockedTotal, stringInputPathDenominator) : void 0;
|
|
272
289
|
return {
|
|
273
290
|
compact_invalid_shape_rate,
|
|
274
291
|
compact_retry_success_rate,
|
|
@@ -289,6 +306,9 @@ function computeAutoCompactMetrics(events) {
|
|
|
289
306
|
result_fidelity_rate,
|
|
290
307
|
error_fidelity_rate,
|
|
291
308
|
first_turn_drift_rate,
|
|
309
|
+
turn_drift_rate,
|
|
310
|
+
stale_instruction_revisit_rate,
|
|
311
|
+
latest_user_goal_adherence_rate,
|
|
292
312
|
tracker_restore_integrity_issue_rate,
|
|
293
313
|
string_input_path_usage_rate,
|
|
294
314
|
prune_marker_coverage_rate,
|
|
@@ -299,7 +319,8 @@ function computeAutoCompactMetrics(events) {
|
|
|
299
319
|
tool_output_token_reduction_rate,
|
|
300
320
|
dangling_tool_closure_rate,
|
|
301
321
|
w11_sample_pass_rate,
|
|
302
|
-
w14_sample_pass_rate
|
|
322
|
+
w14_sample_pass_rate,
|
|
323
|
+
cache_chain_trace_rate
|
|
303
324
|
};
|
|
304
325
|
}
|
|
305
326
|
|
|
@@ -730,14 +751,98 @@ function getErroredToolUseMessages(normalizedMessages) {
|
|
|
730
751
|
);
|
|
731
752
|
}
|
|
732
753
|
function normalizeMessagesForAPI(messages) {
|
|
754
|
+
let partPreserveCount = 0;
|
|
755
|
+
let partDowngradeCount = 0;
|
|
756
|
+
let partClearCount = 0;
|
|
757
|
+
let partTrimOrderValid = true;
|
|
758
|
+
function resolvePartTrimLimit(envName, fallback) {
|
|
759
|
+
const raw = process.env[envName];
|
|
760
|
+
if (!raw) {
|
|
761
|
+
return fallback;
|
|
762
|
+
}
|
|
763
|
+
const parsed = Number(raw);
|
|
764
|
+
if (!Number.isFinite(parsed)) {
|
|
765
|
+
return fallback;
|
|
766
|
+
}
|
|
767
|
+
if (parsed < 0) {
|
|
768
|
+
return fallback;
|
|
769
|
+
}
|
|
770
|
+
return Math.floor(parsed);
|
|
771
|
+
}
|
|
772
|
+
const PART_DOWNGRADE_TEXT_LIMIT = resolvePartTrimLimit(
|
|
773
|
+
"PYB_MESSAGE_PART_DOWNGRADE_LIMIT",
|
|
774
|
+
2e3
|
|
775
|
+
);
|
|
776
|
+
const PART_CLEAR_TEXT_LIMIT = resolvePartTrimLimit(
|
|
777
|
+
"PYB_MESSAGE_PART_CLEAR_LIMIT",
|
|
778
|
+
4e3
|
|
779
|
+
);
|
|
733
780
|
function isSyntheticApiErrorMessage(message) {
|
|
734
781
|
return message.type === "assistant" && message.isApiErrorMessage === true && message.message.model === "<synthetic>";
|
|
735
782
|
}
|
|
736
783
|
function normalizeUserContent(content) {
|
|
784
|
+
function preservePartFields(part) {
|
|
785
|
+
if (part?.type !== "tool_result") {
|
|
786
|
+
return part;
|
|
787
|
+
}
|
|
788
|
+
partPreserveCount += 1;
|
|
789
|
+
const toolResult = part;
|
|
790
|
+
return {
|
|
791
|
+
...toolResult,
|
|
792
|
+
tool_use_id: toolResult.tool_use_id,
|
|
793
|
+
status: toolResult.status,
|
|
794
|
+
errors: toolResult.errors
|
|
795
|
+
};
|
|
796
|
+
}
|
|
797
|
+
function downgradePartPayload(part) {
|
|
798
|
+
if (part?.type !== "tool_result") {
|
|
799
|
+
return part;
|
|
800
|
+
}
|
|
801
|
+
const toolResult = part;
|
|
802
|
+
if (typeof toolResult.content !== "string") {
|
|
803
|
+
return part;
|
|
804
|
+
}
|
|
805
|
+
if (toolResult.content.length <= PART_DOWNGRADE_TEXT_LIMIT) {
|
|
806
|
+
return part;
|
|
807
|
+
}
|
|
808
|
+
partDowngradeCount += 1;
|
|
809
|
+
return {
|
|
810
|
+
...toolResult,
|
|
811
|
+
content: `${toolResult.content.slice(0, 1024)}...[downgraded]`
|
|
812
|
+
};
|
|
813
|
+
}
|
|
814
|
+
function clearPartTailIfBudgetExceeded(part, originalLength, downgradedApplied) {
|
|
815
|
+
if (part?.type !== "tool_result") {
|
|
816
|
+
return part;
|
|
817
|
+
}
|
|
818
|
+
if (originalLength <= PART_CLEAR_TEXT_LIMIT) {
|
|
819
|
+
return part;
|
|
820
|
+
}
|
|
821
|
+
if (!downgradedApplied) {
|
|
822
|
+
partTrimOrderValid = false;
|
|
823
|
+
}
|
|
824
|
+
partClearCount += 1;
|
|
825
|
+
const toolResult = part;
|
|
826
|
+
return {
|
|
827
|
+
...toolResult,
|
|
828
|
+
content: typeof toolResult.content === "string" ? `${toolResult.content.slice(0, 256)}...[tail-cleared]` : toolResult.content
|
|
829
|
+
};
|
|
830
|
+
}
|
|
831
|
+
const applyPartLevelPipeline = (part) => {
|
|
832
|
+
const preserved = preservePartFields(part);
|
|
833
|
+
const originalLength = typeof preserved?.content === "string" ? preserved.content.length : 0;
|
|
834
|
+
const downgraded = downgradePartPayload(preserved);
|
|
835
|
+
const downgradedApplied = downgraded !== preserved;
|
|
836
|
+
return clearPartTailIfBudgetExceeded(
|
|
837
|
+
downgraded,
|
|
838
|
+
originalLength,
|
|
839
|
+
downgradedApplied
|
|
840
|
+
);
|
|
841
|
+
};
|
|
737
842
|
if (typeof content === "string") {
|
|
738
|
-
return [{ type: "text", text: content }];
|
|
843
|
+
return [{ type: "text", text: content }].map(applyPartLevelPipeline);
|
|
739
844
|
}
|
|
740
|
-
return content;
|
|
845
|
+
return content.map(applyPartLevelPipeline);
|
|
741
846
|
}
|
|
742
847
|
function toolResultsFirst(content) {
|
|
743
848
|
const toolResults = [];
|
|
@@ -770,6 +875,10 @@ function normalizeMessagesForAPI(messages) {
|
|
|
770
875
|
const result = [];
|
|
771
876
|
let userStringContentCount = 0;
|
|
772
877
|
let totalUserContentCount = 0;
|
|
878
|
+
let userMergeCount = 0;
|
|
879
|
+
let toolResultMergeCount = 0;
|
|
880
|
+
let boundaryGuardHitCount = 0;
|
|
881
|
+
let crossTurnUserMergeBlockCount = 0;
|
|
773
882
|
for (const message of messages) {
|
|
774
883
|
if (message.type === "progress") continue;
|
|
775
884
|
if (isSyntheticApiErrorMessage(message)) continue;
|
|
@@ -780,10 +889,21 @@ function normalizeMessagesForAPI(messages) {
|
|
|
780
889
|
userStringContentCount += 1;
|
|
781
890
|
}
|
|
782
891
|
const prev = last(result);
|
|
783
|
-
if (prev?.type === "user") {
|
|
892
|
+
if (prev?.type === "user" && isUserToolResultMessage(prev) && isUserToolResultMessage(message)) {
|
|
893
|
+
toolResultMergeCount += 1;
|
|
784
894
|
result[result.indexOf(prev)] = mergeUserMessages(prev, message);
|
|
785
895
|
} else {
|
|
786
|
-
|
|
896
|
+
if (prev?.type === "user") {
|
|
897
|
+
boundaryGuardHitCount += 1;
|
|
898
|
+
crossTurnUserMergeBlockCount += 1;
|
|
899
|
+
}
|
|
900
|
+
result.push({
|
|
901
|
+
...message,
|
|
902
|
+
message: {
|
|
903
|
+
...message.message,
|
|
904
|
+
content: normalizeUserContent(message.message.content)
|
|
905
|
+
}
|
|
906
|
+
});
|
|
787
907
|
}
|
|
788
908
|
break;
|
|
789
909
|
}
|
|
@@ -821,8 +941,19 @@ function normalizeMessagesForAPI(messages) {
|
|
|
821
941
|
emitAutoCompactTelemetryEvent("MESSAGE_USER_CONTENT_ADAPTED", {
|
|
822
942
|
totalUserContentCount,
|
|
823
943
|
userStringContentCount,
|
|
944
|
+
user_merge_count: userMergeCount,
|
|
945
|
+
tool_result_merge_count: toolResultMergeCount,
|
|
946
|
+
part_preserve_count: partPreserveCount,
|
|
947
|
+
part_downgrade_count: partDowngradeCount,
|
|
948
|
+
part_clear_count: partClearCount,
|
|
949
|
+
part_trim_order_valid: partTrimOrderValid,
|
|
824
950
|
string_input_path_usage_rate: totalUserContentCount > 0 ? userStringContentCount / totalUserContentCount : 0
|
|
825
951
|
});
|
|
952
|
+
emitAutoCompactTelemetryEvent("BOUNDARY_NORMALIZE_GUARD_APPLIED", {
|
|
953
|
+
applied: boundaryGuardHitCount > 0,
|
|
954
|
+
boundary_guard_hit_count: boundaryGuardHitCount,
|
|
955
|
+
cross_turn_user_merge_block_count: crossTurnUserMergeBlockCount
|
|
956
|
+
});
|
|
826
957
|
return result;
|
|
827
958
|
}
|
|
828
959
|
function normalizeContentFromAPI(content) {
|
|
@@ -873,7 +1004,7 @@ function getLastAssistantMessageId(messages) {
|
|
|
873
1004
|
|
|
874
1005
|
// src/utils/messages/index.ts
|
|
875
1006
|
async function processUserInput(input, mode, setToolJSX, context, pastedImages) {
|
|
876
|
-
const impl = await import("./userInput-
|
|
1007
|
+
const impl = await import("./userInput-AHRHX2EI.js");
|
|
877
1008
|
return impl.processUserInput(input, mode, setToolJSX, context, pastedImages);
|
|
878
1009
|
}
|
|
879
1010
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/messages/core.ts", "../src/services/ai/llmConstants.ts", "../src/services/telemetry/eventBus.ts", "../src/utils/session/autoCompactMetrics.ts", "../src/utils/session/autoCompactMetricsSink.ts", "../src/services/telemetry/autoCompactTelemetry.ts", "../src/utils/messages/index.ts"],
|
|
4
|
+
"sourcesContent": ["import { createHash, randomUUID, UUID } from 'crypto'\nimport { AssistantMessage, Message, ProgressMessage, UserMessage } from '@query'\nimport { last, memoize } from 'lodash-es'\nimport type { Tool } from '@tool'\nimport { NO_CONTENT_MESSAGE } from '@services/llmConstants'\nimport {\n ImageBlockParam,\n TextBlockParam,\n ToolResultBlockParam,\n ToolUseBlockParam,\n Message as APIMessage,\n ContentBlockParam,\n ContentBlock,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { emitAutoCompactTelemetryEvent } from '@services/telemetry/autoCompactTelemetry'\n\nexport const INTERRUPT_MESSAGE = '[Request interrupted by user]'\nexport const INTERRUPT_MESSAGE_FOR_TOOL_USE =\n '[Request interrupted by user for tool use]'\nexport const CANCEL_MESSAGE =\n \"The user doesn't want to take this action right now. STOP what you are doing and wait for the user to tell you how to proceed.\"\nexport const REJECT_MESSAGE =\n \"The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.\"\nexport const REJECT_MESSAGE_WITH_FEEDBACK_PREFIX = `The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). To tell you how to proceed, the user said:\\n`\nexport const REJECTED_PLAN_PREFIX = `The agent proposed a plan that was rejected by the user. The user chose to stay in plan mode rather than proceed with implementation.\\n\\nRejected plan:\\n`\nexport const NO_RESPONSE_REQUESTED = 'No response requested.'\n\nexport const SYNTHETIC_ASSISTANT_MESSAGES = new Set([\n INTERRUPT_MESSAGE,\n INTERRUPT_MESSAGE_FOR_TOOL_USE,\n CANCEL_MESSAGE,\n REJECT_MESSAGE,\n NO_RESPONSE_REQUESTED,\n])\n\nfunction stableUuidFromSeed(seed: string): UUID {\n const hex = createHash('sha256').update(seed).digest('hex').slice(0, 32)\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}` as UUID\n}\n\nfunction baseCreateAssistantMessage(\n content: ContentBlock[],\n extra?: Partial<AssistantMessage>,\n): AssistantMessage {\n return {\n type: 'assistant',\n costUSD: 0,\n durationMs: 0,\n uuid: randomUUID(),\n message: {\n id: randomUUID(),\n model: '<synthetic>',\n role: 'assistant',\n stop_reason: 'stop_sequence',\n stop_sequence: '',\n type: 'message',\n usage: {\n input_tokens: 0,\n output_tokens: 0,\n cache_creation_input_tokens: 0,\n cache_read_input_tokens: 0,\n },\n content,\n },\n ...extra,\n }\n}\n\nexport function createAssistantMessage(content: string): AssistantMessage {\n return baseCreateAssistantMessage([\n {\n type: 'text' as const,\n text: content === '' ? NO_CONTENT_MESSAGE : content,\n citations: [],\n },\n ])\n}\n\nexport function createAssistantAPIErrorMessage(\n content: string,\n): AssistantMessage {\n return baseCreateAssistantMessage(\n [\n {\n type: 'text' as const,\n text: content === '' ? NO_CONTENT_MESSAGE : content,\n citations: [],\n },\n ],\n { isApiErrorMessage: true },\n )\n}\n\nexport type FullToolUseResult = {\n data: unknown\n resultForAssistant: ToolResultBlockParam['content']\n newMessages?: Message[]\n contextModifier?: { modifyContext: (ctx: any) => any }\n}\n\nfunction createUserTextBlocks(content: string): ContentBlockParam[] {\n return [{ type: 'text', text: content }]\n}\n\nexport function createUserMessageFromBlocks(\n content: ContentBlockParam[],\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m: UserMessage = {\n type: 'user',\n message: {\n role: 'user',\n content,\n },\n uuid: randomUUID(),\n toolUseResult,\n options: {\n contentInputPath: 'blocks',\n },\n }\n return m\n}\n\nexport function createUserMessageFromText(\n content: string,\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m: UserMessage = {\n type: 'user',\n message: {\n role: 'user',\n content: createUserTextBlocks(content),\n },\n uuid: randomUUID(),\n toolUseResult,\n options: {\n contentInputPath: 'blocks',\n },\n }\n return m\n}\n\nexport function generateQueryId(): string {\n return randomUUID()\n}\n\nexport function createUserTurnMessageFromBlocks(\n content: ContentBlockParam[],\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m = createUserMessageFromBlocks(content, toolUseResult)\n m.queryId = generateQueryId()\n return m\n}\n\nexport function createUserTurnMessageFromText(\n content: string,\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m = createUserMessageFromText(content, toolUseResult)\n m.queryId = generateQueryId()\n return m\n}\n\nexport function createProgressMessage(\n toolUseID: string,\n siblingToolUseIDs: Set<string>,\n content: AssistantMessage,\n normalizedMessages: NormalizedMessage[],\n tools: Tool[],\n meta?: {\n progressState?: 'queued_waiting' | 'running' | 'unknown'\n },\n): ProgressMessage {\n return {\n type: 'progress',\n content,\n normalizedMessages,\n siblingToolUseIDs,\n tools,\n toolUseID,\n progressState: meta?.progressState ?? 'unknown',\n uuid: randomUUID(),\n }\n}\n\nexport function filterProgressMessagesForTools(\n messages: NormalizedMessage[],\n toolNames: Set<string>,\n): NormalizedMessage[] {\n const toolUseIds = new Set<string>()\n for (const message of messages) {\n if (message.type !== 'assistant') continue\n const block = message.message.content[0]\n if (!isToolUseLikeBlockParam(block)) continue\n if (toolNames.has(block.name)) {\n toolUseIds.add(block.id)\n }\n }\n if (toolUseIds.size === 0) return messages\n return messages.filter(\n message => message.type !== 'progress' || !toolUseIds.has(message.toolUseID),\n )\n}\n\nexport function createToolResultStopMessage(\n toolUseID: string,\n): ToolResultBlockParam {\n return {\n type: 'tool_result',\n content: CANCEL_MESSAGE,\n is_error: true,\n tool_use_id: toolUseID,\n }\n}\n\nexport function extractTagFromMessage(\n message: Message,\n tagName: string,\n): string | null {\n if (message.type === 'progress') {\n return null\n }\n if (typeof message.message.content !== 'string') {\n return null\n }\n return extractTag(message.message.content, tagName)\n}\n\nexport function extractTag(html: string, tagName: string): string | null {\n if (!html.trim() || !tagName.trim()) {\n return null\n }\n\n const escapedTag = tagName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\n const pattern = new RegExp(\n `<${escapedTag}(?:\\\\s+[^>]*)?>` + '([\\\\s\\\\S]*?)' + `<\\\\/${escapedTag}>`,\n 'gi',\n )\n\n let match\n let depth = 0\n let lastIndex = 0\n const openingTag = new RegExp(`<${escapedTag}(?:\\\\s+[^>]*?)?>`, 'gi')\n const closingTag = new RegExp(`<\\\\/${escapedTag}>`, 'gi')\n\n while ((match = pattern.exec(html)) !== null) {\n const content = match[1]\n const beforeMatch = html.slice(lastIndex, match.index)\n\n depth = 0\n\n openingTag.lastIndex = 0\n while (openingTag.exec(beforeMatch) !== null) {\n depth++\n }\n\n closingTag.lastIndex = 0\n while (closingTag.exec(beforeMatch) !== null) {\n depth--\n }\n\n if (depth === 0 && content) {\n return content\n }\n\n lastIndex = match.index + match[0].length\n }\n\n return null\n}\n\nexport function isNotEmptyMessage(message: Message): boolean {\n if (message.type === 'progress') {\n return true\n }\n\n if (typeof message.message.content === 'string') {\n return message.message.content.trim().length > 0\n }\n\n if (message.message.content.length === 0) {\n return false\n }\n\n if (message.message.content.length > 1) {\n return true\n }\n\n if (message.message.content[0]!.type !== 'text') {\n return true\n }\n\n return (\n message.message.content[0]!.text.trim().length > 0 &&\n message.message.content[0]!.text !== NO_CONTENT_MESSAGE &&\n message.message.content[0]!.text !== INTERRUPT_MESSAGE_FOR_TOOL_USE\n )\n}\n\ntype NormalizedUserMessage = {\n message: {\n content: [\n | TextBlockParam\n | ImageBlockParam\n | ToolUseBlockParam\n | ToolResultBlockParam,\n ]\n role: 'user'\n }\n type: 'user'\n uuid: UUID\n}\n\nexport type NormalizedMessage =\n | NormalizedUserMessage\n | AssistantMessage\n | ProgressMessage\n\nexport function normalizeMessages(messages: Message[]): NormalizedMessage[] {\n return messages.flatMap(message => {\n if (message.type === 'progress') {\n return [message] as NormalizedMessage[]\n }\n if (typeof message.message.content === 'string') {\n return [message] as NormalizedMessage[]\n }\n const contentBlocks = message.message.content.filter(\n block =>\n !(\n block.type === 'thinking' &&\n (typeof (block as any).thinking !== 'string' ||\n (block as any).thinking.trim().length === 0)\n ),\n )\n\n return contentBlocks.map((block, blockIndex) => {\n switch (message.type) {\n case 'assistant':\n const baseSeed = String(\n (message as any).uuid ??\n (message as any).message?.id ??\n randomUUID(),\n )\n return {\n type: 'assistant',\n uuid: stableUuidFromSeed(`${baseSeed}:${blockIndex}`),\n message: {\n ...message.message,\n content: [block],\n },\n costUSD:\n (message as AssistantMessage).costUSD / contentBlocks.length,\n durationMs: (message as AssistantMessage).durationMs,\n } as NormalizedMessage\n case 'user':\n return message as NormalizedUserMessage\n }\n })\n })\n}\n\ntype ToolUseRequestMessage = AssistantMessage & {\n message: { content: any[] }\n}\n\ntype ToolUseLikeBlockParam = ToolUseBlockParam & {\n type: 'tool_use' | 'server_tool_use' | 'mcp_tool_use'\n}\n\nfunction isToolUseLikeBlockParam(block: any): block is ToolUseLikeBlockParam {\n return (\n block &&\n typeof block === 'object' &&\n (block.type === 'tool_use' ||\n block.type === 'server_tool_use' ||\n block.type === 'mcp_tool_use') &&\n typeof block.id === 'string'\n )\n}\n\nfunction isToolUseRequestMessage(\n message: Message,\n): message is ToolUseRequestMessage {\n return (\n message.type === 'assistant' &&\n 'costUSD' in message &&\n message.message.content.some(isToolUseLikeBlockParam)\n )\n}\n\nexport function reorderMessages(\n messages: NormalizedMessage[],\n): NormalizedMessage[] {\n const ms: NormalizedMessage[] = []\n const toolUseMessages: ToolUseRequestMessage[] = []\n\n for (const message of messages) {\n if (isToolUseRequestMessage(message)) {\n toolUseMessages.push(message)\n }\n\n if (message.type === 'progress') {\n const existingProgressMessage = ms.find(\n _ => _.type === 'progress' && _.toolUseID === message.toolUseID,\n )\n if (existingProgressMessage) {\n ms[ms.indexOf(existingProgressMessage)] = message\n continue\n }\n const toolUseMessage = toolUseMessages.find(\n _ => _.message.content[0]?.id === message.toolUseID,\n )\n if (toolUseMessage) {\n ms.splice(ms.indexOf(toolUseMessage) + 1, 0, message)\n continue\n }\n }\n\n if (\n message.type === 'user' &&\n Array.isArray(message.message.content) &&\n message.message.content[0]?.type === 'tool_result'\n ) {\n const toolUseID = (message.message.content[0] as ToolResultBlockParam)\n ?.tool_use_id\n\n const lastProgressMessage = ms.find(\n _ => _.type === 'progress' && _.toolUseID === toolUseID,\n )\n if (lastProgressMessage) {\n ms.splice(ms.indexOf(lastProgressMessage) + 1, 0, message)\n continue\n }\n\n const toolUseMessage = toolUseMessages.find(\n _ => _.message.content[0]?.id === toolUseID,\n )\n if (toolUseMessage) {\n ms.splice(ms.indexOf(toolUseMessage) + 1, 0, message)\n continue\n }\n }\n\n else {\n ms.push(message)\n }\n }\n\n return ms\n}\n\nconst getToolResultIDs = memoize(\n (normalizedMessages: NormalizedMessage[]): { [toolUseID: string]: boolean } =>\n Object.fromEntries(\n normalizedMessages.flatMap(_ =>\n _.type === 'user' && _.message.content[0]?.type === 'tool_result'\n ? [\n [\n _.message.content[0]!.tool_use_id,\n _.message.content[0]!.is_error ?? false,\n ],\n ]\n : ([] as [string, boolean][]),\n ),\n ),\n)\n\nexport function getUnresolvedToolUseIDs(\n normalizedMessages: NormalizedMessage[],\n): Set<string> {\n const toolResults = getToolResultIDs(normalizedMessages)\n return new Set(\n normalizedMessages\n .filter(\n (\n _,\n ): _ is AssistantMessage & {\n message: { content: [ToolUseLikeBlockParam] }\n } =>\n _.type === 'assistant' &&\n Array.isArray(_.message.content) &&\n isToolUseLikeBlockParam(_.message.content[0]) &&\n !(_.message.content[0].id in toolResults),\n )\n .map(_ => _.message.content[0].id),\n )\n}\n\nexport function getInProgressToolUseIDs(\n normalizedMessages: NormalizedMessage[],\n): Set<string> {\n const unresolvedToolUseIDs = getUnresolvedToolUseIDs(normalizedMessages)\n\n function isQueuedWaitingProgressMessage(message: NormalizedMessage): boolean {\n if (message.type !== 'progress') return false\n if (message.progressState === 'queued_waiting') return true\n return false\n }\n\n const toolUseIDsThatHaveProgressMessages = new Set(\n normalizedMessages\n .filter(\n (_): _ is ProgressMessage =>\n _.type === 'progress' && !isQueuedWaitingProgressMessage(_),\n )\n .map(_ => _.toolUseID),\n )\n return new Set(\n (\n normalizedMessages.filter(_ => {\n if (_.type !== 'assistant') {\n return false\n }\n const firstBlock = _.message.content[0]\n if (!isToolUseLikeBlockParam(firstBlock)) return false\n const toolUseID = firstBlock.id\n if (toolUseID === unresolvedToolUseIDs.values().next().value) {\n return true\n }\n\n if (\n toolUseIDsThatHaveProgressMessages.has(toolUseID) &&\n unresolvedToolUseIDs.has(toolUseID)\n ) {\n return true\n }\n\n return false\n }) as AssistantMessage[]\n ).map(_ => (_.message.content[0]! as ToolUseBlockParam).id),\n )\n}\n\nexport function getErroredToolUseMessages(\n normalizedMessages: NormalizedMessage[],\n): AssistantMessage[] {\n const toolResults = getToolResultIDs(normalizedMessages)\n return normalizedMessages.filter(\n _ =>\n _.type === 'assistant' &&\n Array.isArray(_.message.content) &&\n isToolUseLikeBlockParam(_.message.content[0]) &&\n _.message.content[0].id in toolResults &&\n toolResults[_.message.content[0].id],\n ) as AssistantMessage[]\n}\n\nexport function normalizeMessagesForAPI(\n messages: Message[],\n): (UserMessage | AssistantMessage)[] {\n let partPreserveCount = 0\n let partDowngradeCount = 0\n let partClearCount = 0\n let partTrimOrderValid = true\n function resolvePartTrimLimit(envName: string, fallback: number): number {\n const raw = process.env[envName]\n if (!raw) {\n return fallback\n }\n const parsed = Number(raw)\n if (!Number.isFinite(parsed)) {\n return fallback\n }\n if (parsed < 0) {\n return fallback\n }\n return Math.floor(parsed)\n }\n const PART_DOWNGRADE_TEXT_LIMIT = resolvePartTrimLimit(\n 'PYB_MESSAGE_PART_DOWNGRADE_LIMIT',\n 2000,\n )\n const PART_CLEAR_TEXT_LIMIT = resolvePartTrimLimit(\n 'PYB_MESSAGE_PART_CLEAR_LIMIT',\n 4000,\n )\n\n function isSyntheticApiErrorMessage(message: Message): boolean {\n return (\n message.type === 'assistant' &&\n message.isApiErrorMessage === true &&\n message.message.model === '<synthetic>'\n )\n }\n\n function normalizeUserContent(\n content: UserMessage['message']['content'],\n ): ContentBlockParam[] {\n function preservePartFields(part: ContentBlockParam): ContentBlockParam {\n if ((part as any)?.type !== 'tool_result') {\n return part\n }\n partPreserveCount += 1\n const toolResult = part as any\n return {\n ...toolResult,\n tool_use_id: toolResult.tool_use_id,\n status: toolResult.status,\n errors: toolResult.errors,\n }\n }\n\n function downgradePartPayload(part: ContentBlockParam): ContentBlockParam {\n if ((part as any)?.type !== 'tool_result') {\n return part\n }\n const toolResult = part as any\n if (typeof toolResult.content !== 'string') {\n return part\n }\n if (toolResult.content.length <= PART_DOWNGRADE_TEXT_LIMIT) {\n return part\n }\n partDowngradeCount += 1\n return {\n ...toolResult,\n content: `${toolResult.content.slice(0, 1024)}...[downgraded]`,\n }\n }\n\n function clearPartTailIfBudgetExceeded(\n part: ContentBlockParam,\n originalLength: number,\n downgradedApplied: boolean,\n ): ContentBlockParam {\n if ((part as any)?.type !== 'tool_result') {\n return part\n }\n if (originalLength <= PART_CLEAR_TEXT_LIMIT) {\n return part\n }\n if (!downgradedApplied) {\n partTrimOrderValid = false\n }\n partClearCount += 1\n const toolResult = part as any\n return {\n ...toolResult,\n content:\n typeof toolResult.content === 'string'\n ? `${toolResult.content.slice(0, 256)}...[tail-cleared]`\n : toolResult.content,\n }\n }\n\n const applyPartLevelPipeline = (part: ContentBlockParam): ContentBlockParam => {\n const preserved = preservePartFields(part)\n const originalLength =\n typeof (preserved as any)?.content === 'string'\n ? (preserved as any).content.length\n : 0\n const downgraded = downgradePartPayload(preserved)\n const downgradedApplied = downgraded !== preserved\n return clearPartTailIfBudgetExceeded(\n downgraded,\n originalLength,\n downgradedApplied,\n )\n }\n\n if (typeof content === 'string') {\n return [{ type: 'text', text: content }].map(applyPartLevelPipeline)\n }\n return content.map(applyPartLevelPipeline)\n }\n\n function toolResultsFirst(content: ContentBlockParam[]): ContentBlockParam[] {\n const toolResults: ContentBlockParam[] = []\n const rest: ContentBlockParam[] = []\n for (const block of content) {\n if (block.type === 'tool_result') {\n toolResults.push(block)\n } else {\n rest.push(block)\n }\n }\n return [...toolResults, ...rest]\n }\n\n function mergeUserMessages(\n base: UserMessage,\n next: UserMessage,\n ): UserMessage {\n const baseBlocks = normalizeUserContent(base.message.content)\n const nextBlocks = normalizeUserContent(next.message.content)\n return {\n ...base,\n message: {\n ...base.message,\n content: toolResultsFirst([...baseBlocks, ...nextBlocks]),\n },\n }\n }\n\n function isUserToolResultMessage(message: Message): message is UserMessage {\n if (message.type !== 'user') return false\n if (!Array.isArray(message.message.content)) return false\n return message.message.content.some(block => block.type === 'tool_result')\n }\n\n const result: (UserMessage | AssistantMessage)[] = []\n let userStringContentCount = 0\n let totalUserContentCount = 0\n let userMergeCount = 0\n let toolResultMergeCount = 0\n let boundaryGuardHitCount = 0\n let crossTurnUserMergeBlockCount = 0\n for (const message of messages) {\n if (message.type === 'progress') continue\n if (isSyntheticApiErrorMessage(message)) continue\n\n switch (message.type) {\n case 'user': {\n totalUserContentCount += 1\n if (typeof message.message.content === 'string') {\n userStringContentCount += 1\n }\n const prev = last(result)\n if (\n prev?.type === 'user' &&\n isUserToolResultMessage(prev) &&\n isUserToolResultMessage(message)\n ) {\n toolResultMergeCount += 1\n result[result.indexOf(prev)] = mergeUserMessages(prev, message)\n } else {\n if (prev?.type === 'user') {\n boundaryGuardHitCount += 1\n crossTurnUserMergeBlockCount += 1\n }\n result.push({\n ...message,\n message: {\n ...message.message,\n content: normalizeUserContent(message.message.content),\n },\n })\n }\n break\n }\n case 'assistant': {\n let merged = false\n for (let i = result.length - 1; i >= 0; i--) {\n const prev = result[i]\n if (prev.type !== 'assistant' && !isUserToolResultMessage(prev)) {\n break\n }\n if (prev.type === 'assistant') {\n if (prev.message.id === message.message.id) {\n result[i] = {\n ...prev,\n message: {\n ...prev.message,\n content: [\n ...(Array.isArray(prev.message.content)\n ? prev.message.content\n : []),\n ...(Array.isArray(message.message.content)\n ? message.message.content\n : []),\n ],\n },\n }\n merged = true\n }\n break\n }\n }\n if (!merged) {\n result.push(message)\n }\n break\n }\n }\n }\n\n emitAutoCompactTelemetryEvent('MESSAGE_USER_CONTENT_ADAPTED', {\n totalUserContentCount,\n userStringContentCount,\n user_merge_count: userMergeCount,\n tool_result_merge_count: toolResultMergeCount,\n part_preserve_count: partPreserveCount,\n part_downgrade_count: partDowngradeCount,\n part_clear_count: partClearCount,\n part_trim_order_valid: partTrimOrderValid,\n string_input_path_usage_rate:\n totalUserContentCount > 0 ? userStringContentCount / totalUserContentCount : 0,\n })\n emitAutoCompactTelemetryEvent('BOUNDARY_NORMALIZE_GUARD_APPLIED', {\n applied: boundaryGuardHitCount > 0,\n boundary_guard_hit_count: boundaryGuardHitCount,\n cross_turn_user_merge_block_count: crossTurnUserMergeBlockCount,\n })\n\n return result\n}\n\nexport function normalizeContentFromAPI(\n content: APIMessage['content'],\n): APIMessage['content'] {\n const filteredContent = content.filter(\n _ => _.type !== 'text' || _.text.trim().length > 0,\n )\n\n if (filteredContent.length === 0) {\n return [{ type: 'text', text: NO_CONTENT_MESSAGE, citations: [] }]\n }\n\n return filteredContent\n}\n\nexport function isEmptyMessageText(text: string): boolean {\n return (\n stripSystemMessages(text).trim() === '' ||\n text.trim() === NO_CONTENT_MESSAGE\n )\n}\nconst STRIPPED_TAGS = [\n 'commit_analysis',\n 'context',\n 'function_analysis',\n 'pr_analysis',\n]\n\nexport function stripSystemMessages(content: string): string {\n const regex = new RegExp(`<(${STRIPPED_TAGS.join('|')})>.*?</\\\\1>\\n?`, 'gs')\n return content.replace(regex, '').trim()\n}\n\nexport function getToolUseID(message: NormalizedMessage): string | null {\n switch (message.type) {\n case 'assistant':\n return isToolUseLikeBlockParam(message.message.content[0])\n ? message.message.content[0].id\n : null\n case 'user':\n if (message.message.content[0]?.type !== 'tool_result') {\n return null\n }\n return message.message.content[0].tool_use_id\n case 'progress':\n return message.toolUseID\n }\n}\n\nexport function getLastAssistantMessageId(\n messages: Message[],\n): string | undefined {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (message && message.type === 'assistant') {\n return message.message.id\n }\n }\n return undefined\n}\n", "export const API_ERROR_MESSAGE_PREFIX = 'API Error'\nexport const PROMPT_TOO_LONG_ERROR_MESSAGE = 'Prompt is too long'\nexport const CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE = 'Credit balance is too low'\nexport const INVALID_API_KEY_ERROR_MESSAGE =\n 'Invalid API key \u00B7 Please run /login'\nexport const NO_CONTENT_MESSAGE = '(no content)'\n\nexport const MAIN_QUERY_TEMPERATURE = 1\n", "export type TelemetryEvent = {\n channel: string\n phase: string\n data?: Record<string, any>\n timestamp: number\n}\n\ntype TelemetryListener = (event: TelemetryEvent) => void\n\nconst listeners = new Map<string, TelemetryListener>()\n\nexport function registerTelemetryListener(\n listenerId: string,\n listener: TelemetryListener,\n) {\n listeners.set(listenerId, listener)\n}\n\nexport function unregisterTelemetryListener(listenerId: string) {\n listeners.delete(listenerId)\n}\n\nexport function emitTelemetryEvent(event: TelemetryEvent) {\n for (const listener of listeners.values()) {\n listener(event)\n }\n}\n\nexport function clearTelemetryListeners() {\n listeners.clear()\n}\n\n", "type EventRecord = {\n phase: string\n data?: Record<string, any>\n}\n\nexport type AutoCompactMetrics = {\n compact_invalid_shape_rate: number\n compact_retry_success_rate: number\n thinking_first_ratio: number\n cross_model_replay_error_rate: number\n structured_primary_path_rate?: number\n structured_semantic_coverage_rate?: number\n typed_primary_path_rate?: number\n typed_contract_fail_rate?: number\n recoverable_failure_rate?: number\n retry_exhausted_rate?: number\n status_compensation_failure_rate?: number\n compaction_boundary_hit_rate?: number\n overflow_replay_success_rate?: number\n compaction_reentry_success_rate?: number\n noise_ratio_after_compaction?: number\n task_goal_retention_rate?: number\n result_fidelity_rate?: number\n error_fidelity_rate?: number\n first_turn_drift_rate?: number\n turn_drift_rate?: number\n stale_instruction_revisit_rate?: number\n latest_user_goal_adherence_rate?: number\n tracker_restore_integrity_issue_rate?: number\n string_input_path_usage_rate?: number\n prune_marker_coverage_rate?: number\n compacted_index_integrity_rate?: number\n post_prune_noise_ratio?: number\n tool_output_aging_hit_rate?: number\n tool_output_placeholder_hit_rate?: number\n tool_output_token_reduction_rate?: number\n dangling_tool_closure_rate?: number\n w11_sample_pass_rate?: number\n w14_sample_pass_rate?: number\n cache_chain_trace_rate?: number\n}\n\nfunction safeDivide(numerator: number, denominator: number): number {\n if (denominator <= 0) return 0\n return numerator / denominator\n}\n\nexport function computeAutoCompactMetrics(events: EventRecord[]): AutoCompactMetrics {\n const failedEvents = events.filter(event => event.phase === 'AUTO_COMPACT_FAILED')\n const retryEvents = events.filter(event => event.phase === 'AUTO_COMPACT_RETRY')\n const fallbackEvents = events.filter(event => event.phase === 'AUTO_COMPACT_FALLBACK')\n\n const invalidShapeFailures = failedEvents.filter(\n event => event.data?.failureType === 'invalid_content_shape',\n ).length\n const compact_invalid_shape_rate = safeDivide(\n invalidShapeFailures,\n failedEvents.length,\n )\n\n const retrySuccessSignals = fallbackEvents.length\n const compact_retry_success_rate = safeDivide(\n retrySuccessSignals,\n retryEvents.length + fallbackEvents.length,\n )\n\n const transformAppliedEvents = events.filter(\n event => event.phase === 'MESSAGE_TRANSFORM_APPLIED',\n )\n const thinkingFirstCount = transformAppliedEvents.filter(event => {\n const stats = event.data?.outputBlockStats || {}\n const thinking = Number(stats.thinking ?? 0)\n const text = Number(stats.text ?? 0)\n return thinking > 0 && text > 0\n }).length\n const thinking_first_ratio = safeDivide(\n thinkingFirstCount,\n transformAppliedEvents.length,\n )\n\n const crossReplayTagged = events.filter(\n event =>\n event.phase === 'AUTO_COMPACT_FAILED' ||\n event.phase === 'AUTO_COMPACT_RETRY' ||\n event.phase === 'AUTO_COMPACT_FALLBACK',\n )\n const crossReplayErrors = crossReplayTagged.filter(\n event =>\n event.data?.crossModelReplay === true &&\n event.phase === 'AUTO_COMPACT_FAILED',\n ).length\n const crossReplayTotal = crossReplayTagged.filter(\n event => event.data?.crossModelReplay === true,\n ).length\n const cross_model_replay_error_rate = safeDivide(\n crossReplayErrors,\n crossReplayTotal,\n )\n const sessionTypedPathEvents = events.filter(\n event => event.phase === 'SESSION_TYPED_PATH_APPLIED',\n )\n const sessionTypedConsistencyFailedEvents = events.filter(\n event => event.phase === 'SESSION_TYPED_PATH_CONSISTENCY_FAILED',\n )\n const typedPathDecisionEventsCount =\n sessionTypedPathEvents.length + sessionTypedConsistencyFailedEvents.length\n const typed_primary_path_rate =\n sessionTypedPathEvents.length > 0\n ? safeDivide(\n sessionTypedPathEvents.length,\n sessionTypedPathEvents.length,\n )\n : undefined\n const typed_contract_fail_rate =\n typedPathDecisionEventsCount > 0\n ? safeDivide(\n sessionTypedConsistencyFailedEvents.length,\n typedPathDecisionEventsCount,\n )\n : undefined\n const recoverable_failure_rate =\n failedEvents.length + retryEvents.length > 0\n ? safeDivide(retryEvents.length, failedEvents.length + retryEvents.length)\n : undefined\n const retry_exhausted_rate =\n failedEvents.length > 0\n ? safeDivide(\n failedEvents.filter(\n event =>\n Number.isFinite(Number(event.data?.attempts)) &&\n Number(event.data?.attempts) >= 2,\n ).length,\n failedEvents.length,\n )\n : undefined\n const boundaryEvents = events.filter(\n event => event.phase === 'COMPACTION_BOUNDARY_APPLIED',\n )\n const compaction_boundary_hit_rate =\n boundaryEvents.length > 0\n ? safeDivide(\n boundaryEvents.filter(event => event.data?.applied === true).length,\n boundaryEvents.length,\n )\n : undefined\n const replayOutcomeEvents = boundaryEvents.filter(event =>\n ['replayed_latest_user_task', 'synthetic_continue_prompt'].includes(\n String(event.data?.replayMode ?? ''),\n ),\n )\n const overflow_replay_success_rate =\n replayOutcomeEvents.length > 0\n ? safeDivide(\n replayOutcomeEvents.filter(\n event => event.data?.replayMode === 'replayed_latest_user_task',\n ).length,\n replayOutcomeEvents.length,\n )\n : undefined\n const compaction_reentry_success_rate = overflow_replay_success_rate\n const pruneCoverageSamples = boundaryEvents.filter(\n event => typeof event.data?.pruneMarkerConsumed === 'boolean',\n )\n const prune_marker_coverage_rate =\n pruneCoverageSamples.length > 0\n ? safeDivide(\n pruneCoverageSamples.filter(\n event => event.data?.pruneMarkerConsumed === true,\n ).length,\n pruneCoverageSamples.length,\n )\n : undefined\n const indexIntegritySamples = boundaryEvents.filter(\n event => event.data?.indexValidationKnown === true,\n )\n const compacted_index_integrity_rate =\n indexIntegritySamples.length > 0\n ? safeDivide(\n indexIntegritySamples.filter(\n event => event.data?.indexValidationValid === true,\n ).length,\n indexIntegritySamples.length,\n )\n : undefined\n const lifecycleEvents = events.filter(\n event => event.phase === 'TOOL_OUTPUT_LIFECYCLE_APPLIED',\n )\n const lifecycleAppliedEvents = lifecycleEvents.filter(\n event => event.data?.applied !== false,\n )\n const lifecycleAgedTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.agedBlocks ?? 0),\n 0,\n )\n const lifecycleToolResultBeforeTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.totalToolResultBlocksBefore ?? 0),\n 0,\n )\n const lifecyclePlaceholderTotal = lifecycleAppliedEvents.reduce(\n (sum, event) =>\n sum +\n Number(event.data?.l2Blocks ?? 0) +\n Number(event.data?.l3Blocks ?? 0),\n 0,\n )\n const lifecycleBeforeTokensTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.beforeTokens ?? 0),\n 0,\n )\n const lifecycleTokenDeltaTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.tokenDelta ?? 0),\n 0,\n )\n const danglingDetectedTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.danglingDetected ?? 0),\n 0,\n )\n const danglingClosedTotal = lifecycleAppliedEvents.reduce(\n (sum, event) => sum + Number(event.data?.danglingClosed ?? 0),\n 0,\n )\n const tool_output_aging_hit_rate =\n lifecycleToolResultBeforeTotal > 0\n ? safeDivide(lifecycleAgedTotal, lifecycleToolResultBeforeTotal)\n : undefined\n const tool_output_placeholder_hit_rate =\n lifecycleAgedTotal > 0\n ? safeDivide(lifecyclePlaceholderTotal, lifecycleAgedTotal)\n : undefined\n const tool_output_token_reduction_rate =\n lifecycleBeforeTokensTotal > 0\n ? safeDivide(lifecycleTokenDeltaTotal, lifecycleBeforeTokensTotal)\n : undefined\n const dangling_tool_closure_rate =\n danglingDetectedTotal > 0\n ? safeDivide(danglingClosedTotal, danglingDetectedTotal)\n : undefined\n const status_compensation_failure_rate =\n danglingDetectedTotal > 0\n ? safeDivide(\n Math.max(0, danglingDetectedTotal - danglingClosedTotal),\n danglingDetectedTotal,\n )\n : undefined\n const lifecycleDraftEvents = events.filter(\n event => event.phase === 'TOOL_OUTPUT_LIFECYCLE_PRE_GATE_METRICS_DRAFT',\n )\n const latestLifecycleDraft =\n lifecycleDraftEvents.length > 0\n ? lifecycleDraftEvents[lifecycleDraftEvents.length - 1]\n : undefined\n const w11_sample_pass_rate = Number.isFinite(\n Number(latestLifecycleDraft?.data?.w11_sample_pass_rate),\n )\n ? Number(latestLifecycleDraft?.data?.w11_sample_pass_rate)\n : undefined\n const w14_sample_pass_rate = Number.isFinite(\n Number(latestLifecycleDraft?.data?.w14_sample_pass_rate),\n )\n ? Number(latestLifecycleDraft?.data?.w14_sample_pass_rate)\n : undefined\n const postPruneNoiseSamples = lifecycleEvents.filter(\n event =>\n Number.isFinite(Number(event.data?.beforeTokens)) &&\n Number(event.data?.beforeTokens) > 0 &&\n Number.isFinite(Number(event.data?.afterTokens)),\n )\n const post_prune_noise_ratio =\n postPruneNoiseSamples.length > 0\n ? postPruneNoiseSamples.reduce((sum, event) => {\n const before = Number(event.data?.beforeTokens)\n const after = Number(event.data?.afterTokens)\n return sum + Math.max(0, Math.min(1, safeDivide(after, before)))\n }, 0) / postPruneNoiseSamples.length\n : undefined\n\n const sanitizerEvents = events.filter(\n event => event.phase === 'AUTO_COMPACT_SANITIZER_APPLIED',\n )\n const removedNoiseTotal = sanitizerEvents.reduce(\n (sum, event) =>\n sum +\n Number(event.data?.removedReminderTags ?? 0) +\n Number(event.data?.removedToolProgressTags ?? 0),\n 0,\n )\n const changedMessagesTotal = sanitizerEvents.reduce(\n (sum, event) => sum + Number(event.data?.changedMessages ?? 0),\n 0,\n )\n const noise_ratio_after_compaction =\n changedMessagesTotal > 0\n ? Math.max(\n 0,\n Math.min(1, 1 - safeDivide(removedNoiseTotal, changedMessagesTotal * 2)),\n )\n : undefined\n const summaryInputPathEvents = events.filter(\n event => event.phase === 'AUTO_COMPACT_SUMMARY_INPUT_PATH_APPLIED',\n )\n const structuredPrimaryPathEvents = summaryInputPathEvents.filter(\n event => event.data?.mode === 'structured_primary',\n )\n const structured_primary_path_rate =\n summaryInputPathEvents.length > 0\n ? safeDivide(structuredPrimaryPathEvents.length, summaryInputPathEvents.length)\n : undefined\n const structured_semantic_coverage_rate = structured_primary_path_rate\n\n const qualityEvents = events.filter(\n event => event.phase === 'AUTO_COMPACT_SUMMARY_QUALITY',\n )\n const goalSamples = qualityEvents.filter(\n event => typeof event.data?.taskGoalRetained === 'boolean',\n )\n const resultSamples = qualityEvents.filter(\n event => typeof event.data?.hasResultInput === 'boolean',\n )\n const errorSamples = qualityEvents.filter(\n event => typeof event.data?.hasErrorInput === 'boolean',\n )\n const task_goal_retention_rate =\n goalSamples.length > 0\n ? safeDivide(\n goalSamples.filter(event => event.data?.taskGoalRetained === true).length,\n goalSamples.length,\n )\n : undefined\n const result_fidelity_rate =\n resultSamples.length > 0\n ? safeDivide(\n resultSamples.filter(event => {\n if (event.data?.hasResultInput !== true) return true\n return event.data?.hasResultSummary === true\n }).length,\n resultSamples.length,\n )\n : undefined\n const error_fidelity_rate =\n errorSamples.length > 0\n ? safeDivide(\n errorSamples.filter(event => {\n if (event.data?.hasErrorInput !== true) return true\n return event.data?.hasErrorSummary === true\n }).length,\n errorSamples.length,\n )\n : undefined\n const first_turn_drift_rate =\n task_goal_retention_rate === undefined ? undefined : 1 - task_goal_retention_rate\n const latest_user_goal_adherence_rate = task_goal_retention_rate\n const turn_drift_rate = first_turn_drift_rate\n const restoreIntegrityEvents = events.filter(\n event => event.phase === 'TRACKER_RESTORE_INTEGRITY_CHECK',\n )\n const restoreIntegrityIssueCount = restoreIntegrityEvents.filter(event => {\n const isConsistent = event.data?.isConsistent\n if (typeof isConsistent === 'boolean') return isConsistent === false\n return Number(event.data?.droppedCount ?? 0) > 0\n }).length\n const tracker_restore_integrity_issue_rate =\n restoreIntegrityEvents.length > 0\n ? safeDivide(restoreIntegrityIssueCount, restoreIntegrityEvents.length)\n : undefined\n const userContentAdaptedEvents = events.filter(\n event => event.phase === 'MESSAGE_USER_CONTENT_ADAPTED',\n )\n const normalizeGuardEvents = events.filter(\n event => event.phase === 'BOUNDARY_NORMALIZE_GUARD_APPLIED',\n )\n const staleInstructionBlockedTotal = normalizeGuardEvents.reduce(\n (sum, event) => sum + Number(event.data?.cross_turn_user_merge_block_count ?? 0),\n 0,\n )\n const cacheChainEvents = events.filter(\n event => event.phase === 'CACHE_CONTROL_CHAIN',\n )\n const cacheChainTraceSamples = cacheChainEvents.filter(\n event =>\n Number.isFinite(Number(event.data?.cached_block_count)) &&\n Number.isFinite(Number(event.data?.response_chain_depth)),\n )\n const cache_chain_trace_rate =\n cacheChainEvents.length > 0\n ? safeDivide(cacheChainTraceSamples.length, cacheChainEvents.length)\n : undefined\n const stringInputPathNumerator = userContentAdaptedEvents.reduce((sum, event) => {\n const eventTotal = Number(event.data?.totalUserContentCount ?? 0)\n const eventString = Number(event.data?.userStringContentCount ?? 0)\n if (!Number.isFinite(eventTotal) || eventTotal <= 0) return sum\n if (!Number.isFinite(eventString) || eventString < 0) return sum\n return sum + Math.min(eventTotal, eventString)\n }, 0)\n const stringInputPathDenominator = userContentAdaptedEvents.reduce((sum, event) => {\n const eventTotal = Number(event.data?.totalUserContentCount ?? 0)\n if (!Number.isFinite(eventTotal) || eventTotal <= 0) return sum\n return sum + eventTotal\n }, 0)\n const string_input_path_usage_rate =\n stringInputPathDenominator > 0\n ? safeDivide(stringInputPathNumerator, stringInputPathDenominator)\n : undefined\n const stale_instruction_revisit_rate =\n stringInputPathDenominator > 0\n ? safeDivide(staleInstructionBlockedTotal, stringInputPathDenominator)\n : undefined\n\n return {\n compact_invalid_shape_rate,\n compact_retry_success_rate,\n thinking_first_ratio,\n cross_model_replay_error_rate,\n structured_primary_path_rate,\n structured_semantic_coverage_rate,\n typed_primary_path_rate,\n typed_contract_fail_rate,\n recoverable_failure_rate,\n retry_exhausted_rate,\n status_compensation_failure_rate,\n compaction_boundary_hit_rate,\n overflow_replay_success_rate,\n compaction_reentry_success_rate,\n noise_ratio_after_compaction,\n task_goal_retention_rate,\n result_fidelity_rate,\n error_fidelity_rate,\n first_turn_drift_rate,\n turn_drift_rate,\n stale_instruction_revisit_rate,\n latest_user_goal_adherence_rate,\n tracker_restore_integrity_issue_rate,\n string_input_path_usage_rate,\n prune_marker_coverage_rate,\n compacted_index_integrity_rate,\n post_prune_noise_ratio,\n tool_output_aging_hit_rate,\n tool_output_placeholder_hit_rate,\n tool_output_token_reduction_rate,\n dangling_tool_closure_rate,\n w11_sample_pass_rate,\n w14_sample_pass_rate,\n cache_chain_trace_rate,\n }\n}\n", "import {\n computeAutoCompactMetrics,\n type AutoCompactMetrics,\n} from './autoCompactMetrics'\n\ntype SinkEvent = {\n phase: string\n data?: Record<string, any>\n}\n\nexport function createAutoCompactMetricsSink() {\n const events: SinkEvent[] = []\n return {\n push(event: SinkEvent) {\n events.push(event)\n },\n snapshot(): { eventCount: number; metrics: AutoCompactMetrics } {\n return {\n eventCount: events.length,\n metrics: computeAutoCompactMetrics(events),\n }\n },\n clear() {\n events.length = 0\n },\n }\n}\n\n", "import {\n registerTelemetryListener,\n emitTelemetryEvent,\n type TelemetryEvent,\n} from './eventBus'\nimport { createAutoCompactMetricsSink } from '@utils/session/autoCompactMetricsSink'\n\nconst AUTO_COMPACT_TELEMETRY_PHASES = new Set([\n 'AUTO_COMPACT_FAILED',\n 'AUTO_COMPACT_RETRY',\n 'AUTO_COMPACT_FALLBACK',\n 'MESSAGE_TRANSFORM_APPLIED',\n 'AUTO_COMPACT_SUMMARY_INPUT_PATH_APPLIED',\n 'AUTO_COMPACT_SUMMARY_QUALITY',\n 'AUTO_COMPACT_BUDGET_APPLIED',\n 'AUTO_COMPACT_POST_PERSIST_CHECK',\n 'TRACKER_RESTORE_INTEGRITY_CHECK',\n 'COMPACTION_BOUNDARY_APPLIED',\n 'COMPACTION_HOOK_TURN_END',\n 'COMPACTION_HOOK_OVERFLOW_DETECTED',\n 'COMPACTION_HOOK_PRE_NEXT_TURN',\n 'TOOL_OUTPUT_LIFECYCLE_APPLIED',\n 'SESSION_TYPED_PATH_APPLIED',\n 'SESSION_TYPED_PATH_CONSISTENCY_FAILED',\n 'SESSION_TYPED_PATH_POLICY_APPLIED',\n 'SESSION_TYPED_PATH_AUTO_DEGRADED',\n 'MESSAGE_USER_CONTENT_ADAPTED',\n 'AUTO_COMPACT_TASK_NODE_CREATED',\n 'AUTO_COMPACT_TASK_NODE_TRANSITION',\n 'AUTO_COMPACT_TASK_NODE_FAILED',\n 'AUTO_COMPACT_OVERFLOW_JOINT_DECISION_DRAFT',\n])\n\nconst AUTO_COMPACT_SINK_LISTENER_ID = 'auto-compact-metrics-sink'\nconst autoCompactSink = createAutoCompactMetricsSink()\nlet sinkRegistered = false\n\nexport function ensureAutoCompactTelemetryRegistered() {\n if (sinkRegistered) return\n registerTelemetryListener(AUTO_COMPACT_SINK_LISTENER_ID, event => {\n if (!AUTO_COMPACT_TELEMETRY_PHASES.has(event.phase)) return\n autoCompactSink.push({\n phase: event.phase,\n data: event.data,\n })\n })\n sinkRegistered = true\n}\n\nexport function emitAutoCompactTelemetryEvent(\n phase: string,\n data?: Record<string, any>,\n) {\n ensureAutoCompactTelemetryRegistered()\n emitTelemetryEvent({\n channel: 'auto_compact',\n phase,\n data,\n timestamp: Date.now(),\n })\n}\n\nexport function getAutoCompactMetricsSnapshot() {\n ensureAutoCompactTelemetryRegistered()\n return autoCompactSink.snapshot()\n}\n\nexport function resetAutoCompactTelemetry() {\n autoCompactSink.clear()\n}\n\nexport function mapDebugEventToTelemetryEvent(\n phase: string,\n data?: Record<string, any>,\n): TelemetryEvent {\n return {\n channel: 'auto_compact',\n phase,\n data,\n timestamp: Date.now(),\n }\n}\n\nensureAutoCompactTelemetryRegistered()\n", "export * from './core'\n\nimport type { SetToolJSXFn, ToolUseContext } from '@tool'\nimport type { Message } from '@query'\n\nexport async function processUserInput(\n input: string,\n mode: 'bash' | 'prompt' | 'pyb',\n setToolJSX: SetToolJSXFn,\n context: ToolUseContext & {\n setForkConvoWithMessagesOnTheNextRender: (\n forkConvoWithMessages: Message[],\n ) => void\n options?: {\n isPybRequest?: boolean\n pybContext?: string\n }\n },\n pastedImages: Array<{\n placeholder: string\n data: string\n mediaType: string\n }> | null,\n): Promise<Message[]> {\n const impl = await import('./userInput')\n return impl.processUserInput(input, mode, setToolJSX, context, pastedImages)\n}\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
PRODUCT_NAME,
|
|
5
5
|
execFileNoThrow,
|
|
6
6
|
logError
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-K5VSWVIL.js";
|
|
8
8
|
import {
|
|
9
9
|
MACRO
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-SLUIT4WW.js";
|
|
11
11
|
|
|
12
12
|
// src/utils/session/autoUpdater.ts
|
|
13
13
|
async function getSemver() {
|
|
@@ -82,7 +82,7 @@ async function checkAndNotifyUpdate() {
|
|
|
82
82
|
const [
|
|
83
83
|
{ isAutoUpdaterDisabled, getGlobalConfig, saveGlobalConfig },
|
|
84
84
|
{ env }
|
|
85
|
-
] = await Promise.all([import("./config-
|
|
85
|
+
] = await Promise.all([import("./config-DK44ZOUO.js"), import("./env-4W3WLNYJ.js")]);
|
|
86
86
|
if (await isAutoUpdaterDisabled()) return;
|
|
87
87
|
if (await env.getIsDocker()) return;
|
|
88
88
|
if (!await env.hasInternetAccess()) return;
|