@tea-agent/loop-agent 0.40.0-next.11 → 0.40.0-next.12
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/CHANGELOG.md +10 -0
- package/dist/build-stamp.json +3 -3
- package/dist/commands/client-recovery.js +8 -36
- package/dist/executors/pi-sdk-executor.js +33 -5
- package/dist/shared/pi-context-pressure/checkpoint.js +116 -0
- package/dist/shared/pi-context-pressure/compaction-policy.js +151 -0
- package/dist/shared/pi-context-pressure/env.js +58 -0
- package/dist/shared/pi-context-pressure/extension.js +100 -0
- package/dist/shared/pi-context-pressure/index.js +7 -0
- package/dist/shared/pi-context-pressure/overflow.js +252 -0
- package/dist/shared/pi-context-pressure/sift-bridge.js +386 -0
- package/dist/shared/pi-context-pressure/telemetry.js +51 -0
- package/dist/worker/console/chat/pi-runtime.js +146 -5
- package/dist/worker/console/chat/provider-error.js +2 -1
- package/dist/worker/console/chat/routes.js +3 -0
- package/dist/worker/console/chat/sift-bridge.js +1 -0
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-Bs-CDAXM.js → abnfDiagram-N423BO3Z-C_hkwt2J.js} +1 -1
- package/dist/worker/console/static/assets/{arc-CAkA3We3.js → arc-s2Q6r96B.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-DEmI_zqr.js → architectureDiagram-T3A2C74G-CtgsrwU1.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-uDHANebE.js → blockDiagram-VBNYF7ZC-DZ-A7EiJ.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-Bv97b4_B.js → c4Diagram-5PPSVZJV-D2qv0Nyo.js} +1 -1
- package/dist/worker/console/static/assets/channel-BluaMT3-.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-shmQKsFz.js → chunk-2GRJ4B5K-D-UYpSaW.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-BAraNvcN.js → chunk-2Q5K7J3B-DAS3jrrt.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BirhxUop.js → chunk-5RXB4S5H-CSbuRcGB.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-C9LgUJpR.js → chunk-5VM5RSS4-BDH1ZO40.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DrU-s-t7.js → chunk-6Q2QTUOP-Dc2cqQIb.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-Tx-H_FA2.js → chunk-GF5L2VYU-CkZuemIW.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-BjLtNFrR.js → chunk-JWPE2WC7-URwjQnte.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-UNLVwSsy.js → chunk-KBJHAD2P-04RHylJK.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-CBEUX8XD.js → chunk-RYQCIY6F-CvQX56Hh.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-WTL7IZOq.js → chunk-XXDRQBXY-dUF7qura.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-H-ZpSafr.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-H-ZpSafr.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CkHG6W3s.js → cose-bilkent-JH36ORCC-COwbfxJE.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BRzFqTaL.js → cynefin-VYW2F7L2-CaBEJekQ.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-2_CFp_i7.js → cynefinDiagram-MW4NZA55-COWUBdet.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-BJtsmdkE.js → dagre-VZM6K2ZE-BLxVqTn4.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-DNEFFo6w.js → diagram-7IWD3JNH-WL0yKfEQ.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-B_IWV7eo.js → diagram-B4RE2ZJO-DaVkKCle.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-DvvRx2dz.js → diagram-LBJQPF4R-DdTgnRGf.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-CsibsWLg.js → diagram-Q27KOJAE-PG2Axo6A.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-les_djBQ.js → diagram-UB23O5K3-6vuQzlzI.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BEm2n7qJ.js → ebnfDiagram-BXEA7PRR-BpXeBz-g.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-BI7vHHVm.js → erDiagram-JOGREHBK-PxtUnaa1.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-CUFCERrB.js → flowDiagram-UKHOOZJN-B--Qgvs1.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-wxyLiGWt.js → ganttDiagram-PKOTCBZU-BIfQCgtx.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-Bt897K8Z.js → gitGraphDiagram-DS77QQ5N-BRaX_E4j.js} +1 -1
- package/dist/worker/console/static/assets/index-Crrgl8Mx.css +1 -0
- package/dist/worker/console/static/assets/{index-DqJbO3-p.js → index-vPsp-idE.js} +102 -72
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-DYNx_IPv.js → infoDiagram-6WML65LV-Cd93r4Ab.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-CzpLNEu6.js → ishikawaDiagram-WSZJBQD7-C4c80iHt.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-97f9owNU.js → journeyDiagram-NVQOT4AX-Ch5ajf3s.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-BxM9hyBn.js → kanban-definition-27J2QSJJ-DbpyW1Ut.js} +1 -1
- package/dist/worker/console/static/assets/{linear-ByuxcHvp.js → linear-BHVjBnTW.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-DwPGvpCv.js → mermaid.core-DO70kJ34.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-DCoqG9RT.js → mindmap-definition-FAOFIHXS-_P44Zpvs.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-BLSBmBMx.js → pegDiagram-VL7TDLO6-Bgi9FmEd.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-B0t_0oJW.js → pieDiagram-7S7Q4E2Y-C9InDfJn.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-sTzDk7Nt.js → quadrantDiagram-CIZ2JOQS-DtKrUouv.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-B3jRdATC.js → railroadDiagram-AXF67PYL-zgAD_6Yo.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-D-cTtXEN.js → requirementDiagram-LRYGKXZP-CQNO6kj4.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-B25igJRE.js → sankeyDiagram-W5VNT64P-knKu111P.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-jW_lM1_D.js → sequenceDiagram-SI44F4Z6-D6tshiQ6.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CrzTgsHE.js → sizeCapture-X5ZJPWSS-BMIWJcir.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-B01MvlqE.js → stateDiagram-OKZ733FA-BP9wRDqc.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-ClEhytQG.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-YcF12FiU.js → swimlanes-SLNWSIFB-DEkM5Dhe.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DPg5IMuu.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-ClnRcg2s.js → timeline-definition-Z64GVDOM-ByBKsL35.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-B6gr_z-q.js → vennDiagram-T6HMQDX7-waFbNCUy.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-CvSgguGH.js → wardleyDiagram-T6FBY63Y-1ljiY0eZ.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-23OtSZCb.js → xychartDiagram-ELKLHX3M-B4ZLHr_L.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/observe/static/styles.css +9 -0
- package/dist/worker/observe/static/views/dag-inspector.js +40 -0
- package/dist/worker/observe/static/views/session-timeline.js +135 -0
- package/dist/workflows/dag/init-hybrid.js +1 -1
- package/docs/architecture/runtime-boundaries.md +2 -1
- package/docs/templates/backend-test-dag.json +1 -1
- package/package.json +3 -2
- package/dist/worker/console/static/assets/channel-amxUpk7o.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-bejwBVIz.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-bejwBVIz.js +0 -1
- package/dist/worker/console/static/assets/index-BHhUOTri.css +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BvFKEtm2.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DIB2eVg-.js +0 -8
|
@@ -36,6 +36,8 @@ import { OPERATOR_CHAT_ALLOWED_TOOLS, authorizeOperatorChatTool, assertNoWriteTo
|
|
|
36
36
|
import { createOperatorChatResourceLoader, } from "./resource-loader.js";
|
|
37
37
|
import { applySkillAutoInvocationPreferences, isAutoInvocationEnabled, loadResourcePreferences, skillResourceId, } from "./resource-preferences-store.js";
|
|
38
38
|
import { buildModelCallableToolSchemas } from "./tool-adapter.js";
|
|
39
|
+
import { applyProcessCompactionOverride, createCompactionController, createContextPressureExtension, createSiftBridgeState, housekeepSiftStash, isConsoleSiftEnabled, parseCompactionPolicy, parseSiftBridgeConfig, projectPromptPressure, deriveEffectiveWindow, projectSafeTelemetry, emptyContextPressureCounters, } from "../../../shared/pi-context-pressure/index.js";
|
|
40
|
+
import { incrementCounter as incrementPressureCounter } from "../../../shared/pi-context-pressure/telemetry.js";
|
|
39
41
|
import { resolveDefaultChatModel, resolveLowChatModel, } from "./model-resolver.js";
|
|
40
42
|
import { filterActiveInterviewTools } from "../interview/tools.js";
|
|
41
43
|
import { RUNTIME_CONTEXT_TEXT_MAX, redactRuntimeText, } from "./runtime-context.js";
|
|
@@ -845,6 +847,9 @@ export class ConsolePiRuntime {
|
|
|
845
847
|
sessionModels = new Map();
|
|
846
848
|
/** SessionIds disposed while materialization was still in flight. */
|
|
847
849
|
disposedSessions = new Set();
|
|
850
|
+
compactionControllers = new Map();
|
|
851
|
+
siftStates = new Map();
|
|
852
|
+
/** Session-less tool definition caches (no AgentSession state). */
|
|
848
853
|
/** Session-less tool definition caches (no AgentSession state). */
|
|
849
854
|
operatorCustomToolsPromise;
|
|
850
855
|
exploreCustomToolsPromise;
|
|
@@ -892,14 +897,15 @@ export class ConsolePiRuntime {
|
|
|
892
897
|
registry: this.options.todoRegistry,
|
|
893
898
|
})
|
|
894
899
|
: undefined;
|
|
900
|
+
const pressureExtension = sessionId
|
|
901
|
+
? this.createContextPressureInlineExtension(sessionId)
|
|
902
|
+
: undefined;
|
|
903
|
+
const extraFactories = [todoContextExtension, pressureExtension].filter((item) => Boolean(item));
|
|
895
904
|
return {
|
|
896
905
|
...base,
|
|
897
|
-
...(
|
|
906
|
+
...(extraFactories.length > 0
|
|
898
907
|
? {
|
|
899
|
-
extensionFactories: [
|
|
900
|
-
...inheritedFactories,
|
|
901
|
-
todoContextExtension,
|
|
902
|
-
],
|
|
908
|
+
extensionFactories: [...inheritedFactories, ...extraFactories],
|
|
903
909
|
}
|
|
904
910
|
: {}),
|
|
905
911
|
skillsOverride: (current) => {
|
|
@@ -924,6 +930,126 @@ export class ConsolePiRuntime {
|
|
|
924
930
|
this.cachedSkillPrefs = prefs;
|
|
925
931
|
return prefs;
|
|
926
932
|
}
|
|
933
|
+
getCompactionController(sessionId) {
|
|
934
|
+
let controller = this.compactionControllers.get(sessionId);
|
|
935
|
+
if (!controller) {
|
|
936
|
+
controller = createCompactionController();
|
|
937
|
+
this.compactionControllers.set(sessionId, controller);
|
|
938
|
+
}
|
|
939
|
+
if (this.options.todoRegistry) {
|
|
940
|
+
controller.todos = this.options.todoRegistry.get(sessionId);
|
|
941
|
+
}
|
|
942
|
+
return controller;
|
|
943
|
+
}
|
|
944
|
+
createContextPressureInlineExtension(sessionId) {
|
|
945
|
+
const policy = parseCompactionPolicy();
|
|
946
|
+
const siftEnabled = isConsoleSiftEnabled();
|
|
947
|
+
let sift;
|
|
948
|
+
if (siftEnabled.enabled) {
|
|
949
|
+
sift = this.siftStates.get(sessionId);
|
|
950
|
+
if (!sift) {
|
|
951
|
+
const config = parseSiftBridgeConfig({
|
|
952
|
+
sessionId,
|
|
953
|
+
defaultStashRoot: path.join(this.options.sessionDir, "sift-stash"),
|
|
954
|
+
});
|
|
955
|
+
sift = createSiftBridgeState(config);
|
|
956
|
+
sift.counters = this.getCompactionController(sessionId).counters;
|
|
957
|
+
this.siftStates.set(sessionId, sift);
|
|
958
|
+
const housekeep = housekeepSiftStash({
|
|
959
|
+
root: path.dirname(config.stashDir),
|
|
960
|
+
activeSessionId: sessionId,
|
|
961
|
+
retentionDays: config.retentionDays,
|
|
962
|
+
});
|
|
963
|
+
if (housekeep.failed)
|
|
964
|
+
sift.diagnostics.add("housekeep-failed");
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
return createContextPressureExtension({
|
|
968
|
+
name: "operator-chat-context-pressure",
|
|
969
|
+
policy,
|
|
970
|
+
controller: this.getCompactionController(sessionId),
|
|
971
|
+
sift,
|
|
972
|
+
});
|
|
973
|
+
}
|
|
974
|
+
applySessionCompactionOverride(sessionId, services, session) {
|
|
975
|
+
const manager = services?.settingsManager;
|
|
976
|
+
const window = session?.getSessionStats?.()?.contextUsage?.contextWindow;
|
|
977
|
+
applyProcessCompactionOverride(manager, {
|
|
978
|
+
policy: parseCompactionPolicy(),
|
|
979
|
+
...(typeof window === "number" ? { contextWindow: window } : {}),
|
|
980
|
+
});
|
|
981
|
+
void sessionId;
|
|
982
|
+
}
|
|
983
|
+
async runPrePromptCompaction(sessionId, session, promptText, imageCount, onEvent) {
|
|
984
|
+
const policy = parseCompactionPolicy();
|
|
985
|
+
if (policy.mode === "off")
|
|
986
|
+
return;
|
|
987
|
+
const controller = this.getCompactionController(sessionId);
|
|
988
|
+
const stats = session.getSessionStats?.();
|
|
989
|
+
const window = stats?.contextUsage?.contextWindow;
|
|
990
|
+
const tokens = stats?.contextUsage?.tokens;
|
|
991
|
+
if (typeof window === "number" && window > 0) {
|
|
992
|
+
this.applySessionCompactionOverride(sessionId, this.serviceScopes.get(sessionId) ?? {}, session);
|
|
993
|
+
}
|
|
994
|
+
const projection = projectPromptPressure({
|
|
995
|
+
currentContextTokens: tokens,
|
|
996
|
+
promptText,
|
|
997
|
+
imageCount,
|
|
998
|
+
});
|
|
999
|
+
if (projection.usageUnavailable) {
|
|
1000
|
+
incrementPressureCounter(controller.counters, "usage-unavailable");
|
|
1001
|
+
return;
|
|
1002
|
+
}
|
|
1003
|
+
const effective = typeof window === "number" && window > 0
|
|
1004
|
+
? deriveEffectiveWindow(window, policy)
|
|
1005
|
+
: undefined;
|
|
1006
|
+
if (!effective || projection.projected < effective.triggerTokens)
|
|
1007
|
+
return;
|
|
1008
|
+
if (typeof session.compact !== "function")
|
|
1009
|
+
return;
|
|
1010
|
+
const compactionId = newCompactionId(sessionId);
|
|
1011
|
+
onEvent({
|
|
1012
|
+
type: "compaction_start",
|
|
1013
|
+
sessionId,
|
|
1014
|
+
compactionId,
|
|
1015
|
+
reason: "threshold",
|
|
1016
|
+
});
|
|
1017
|
+
controller.proactiveCompaction = true;
|
|
1018
|
+
try {
|
|
1019
|
+
incrementPressureCounter(controller.counters, "pre-prompt-threshold");
|
|
1020
|
+
const result = await session.compact();
|
|
1021
|
+
const snapshot = projectCompactSnapshot(result ?? {});
|
|
1022
|
+
onEvent({
|
|
1023
|
+
type: "compaction_end",
|
|
1024
|
+
sessionId,
|
|
1025
|
+
compactionId,
|
|
1026
|
+
reason: "threshold",
|
|
1027
|
+
status: "completed",
|
|
1028
|
+
willRetry: false,
|
|
1029
|
+
summary: snapshot.summary,
|
|
1030
|
+
...(snapshot.firstKeptEntryId
|
|
1031
|
+
? { firstKeptEntryId: snapshot.firstKeptEntryId }
|
|
1032
|
+
: {}),
|
|
1033
|
+
...(snapshot.tokensBefore === undefined
|
|
1034
|
+
? {}
|
|
1035
|
+
: { tokensBefore: snapshot.tokensBefore }),
|
|
1036
|
+
});
|
|
1037
|
+
}
|
|
1038
|
+
catch {
|
|
1039
|
+
incrementPressureCounter(controller.counters, "l0-compact-failed");
|
|
1040
|
+
onEvent({
|
|
1041
|
+
type: "compaction_end",
|
|
1042
|
+
sessionId,
|
|
1043
|
+
compactionId,
|
|
1044
|
+
reason: "threshold",
|
|
1045
|
+
status: "failed",
|
|
1046
|
+
willRetry: false,
|
|
1047
|
+
});
|
|
1048
|
+
}
|
|
1049
|
+
finally {
|
|
1050
|
+
controller.proactiveCompaction = false;
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
927
1053
|
/**
|
|
928
1054
|
* Resolve a skill in the current session inventory by server-issued resourceId.
|
|
929
1055
|
* Returns undefined when the id is unknown (caller maps to PI_SKILL_NOT_FOUND).
|
|
@@ -1156,6 +1282,7 @@ export class ConsolePiRuntime {
|
|
|
1156
1282
|
resourceLoader: services.resourceLoader,
|
|
1157
1283
|
settingsManager: services.settingsManager,
|
|
1158
1284
|
});
|
|
1285
|
+
this.applySessionCompactionOverride(sessionId, services, session);
|
|
1159
1286
|
this.revisions.set(sessionId, 1);
|
|
1160
1287
|
if (!this.thinkingSelections.has(sessionId)) {
|
|
1161
1288
|
this.thinkingSelections.set(sessionId, "auto");
|
|
@@ -1470,6 +1597,9 @@ export class ConsolePiRuntime {
|
|
|
1470
1597
|
// the latest resource-preferences.json written by PATCH.
|
|
1471
1598
|
await this.refreshSkillPrefsCache().catch(() => undefined);
|
|
1472
1599
|
await session.reload();
|
|
1600
|
+
const services = this.serviceScopes.get(sessionId);
|
|
1601
|
+
if (services)
|
|
1602
|
+
this.applySessionCompactionOverride(sessionId, services, session);
|
|
1473
1603
|
}
|
|
1474
1604
|
catch (error) {
|
|
1475
1605
|
return {
|
|
@@ -2076,6 +2206,7 @@ export class ConsolePiRuntime {
|
|
|
2076
2206
|
});
|
|
2077
2207
|
await bindSessionExtensions(session);
|
|
2078
2208
|
pinOperatorChatTools(session);
|
|
2209
|
+
this.applySessionCompactionOverride(init.sessionId, services, session);
|
|
2079
2210
|
return {
|
|
2080
2211
|
session,
|
|
2081
2212
|
modelRuntime,
|
|
@@ -2117,6 +2248,12 @@ export class ConsolePiRuntime {
|
|
|
2117
2248
|
session?.hasPendingBashMessages === true,
|
|
2118
2249
|
};
|
|
2119
2250
|
}
|
|
2251
|
+
/** Low-cardinality context-pressure counters; never includes payload text. */
|
|
2252
|
+
getContextPressureTelemetry(sessionId) {
|
|
2253
|
+
const counters = this.compactionControllers.get(sessionId)?.counters ??
|
|
2254
|
+
this.siftStates.get(sessionId)?.counters;
|
|
2255
|
+
return projectSafeTelemetry(counters ?? emptyContextPressureCounters());
|
|
2256
|
+
}
|
|
2120
2257
|
/**
|
|
2121
2258
|
* Send a prompt and stream events. Gate 3: each tool invocation is
|
|
2122
2259
|
* re-authorized by authorizeOperatorChatTool before the dispatcher runs it
|
|
@@ -2212,6 +2349,7 @@ export class ConsolePiRuntime {
|
|
|
2212
2349
|
}
|
|
2213
2350
|
};
|
|
2214
2351
|
emitContextUsage();
|
|
2352
|
+
await this.runPrePromptCompaction(sessionId, session, text, options?.images?.length ?? 0, onEvent);
|
|
2215
2353
|
let stepStartedAt;
|
|
2216
2354
|
let firstTokenAt;
|
|
2217
2355
|
let pendingProviderError;
|
|
@@ -2461,6 +2599,7 @@ export class ConsolePiRuntime {
|
|
|
2461
2599
|
throw new Error("CHAT_TURN_ACTIVE");
|
|
2462
2600
|
if (typeof session.compact !== "function")
|
|
2463
2601
|
throw new Error("COMPACTION_UNSUPPORTED");
|
|
2602
|
+
incrementPressureCounter(this.getCompactionController(sessionId).counters, "manual");
|
|
2464
2603
|
const result = await session.compact(customInstructions);
|
|
2465
2604
|
return projectCompactSnapshot(result ?? {});
|
|
2466
2605
|
}
|
|
@@ -2468,6 +2607,8 @@ export class ConsolePiRuntime {
|
|
|
2468
2607
|
// Mark disposed first so a late materialization never registers ready.
|
|
2469
2608
|
this.disposedSessions.add(sessionId);
|
|
2470
2609
|
this.sessionInit.delete(sessionId);
|
|
2610
|
+
this.compactionControllers.delete(sessionId);
|
|
2611
|
+
this.siftStates.delete(sessionId);
|
|
2471
2612
|
const session = this.sessions.get(sessionId);
|
|
2472
2613
|
if (session) {
|
|
2473
2614
|
try {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isContextOverflow } from "../../../shared/pi-context-pressure/overflow.js";
|
|
1
2
|
const MAX_RAW_CHARS = 8_000;
|
|
2
3
|
const MAX_MESSAGE_CHARS = 1_000;
|
|
3
4
|
function asRecord(value) {
|
|
@@ -52,7 +53,7 @@ function classify(input) {
|
|
|
52
53
|
status === 403 ||
|
|
53
54
|
/认证|鉴权|unauthori[sz]ed|forbidden|authentication|invalid api[-_ ]?key/.test(haystack))
|
|
54
55
|
return "authentication";
|
|
55
|
-
if (
|
|
56
|
+
if (isContextOverflow(`${input.message}\n${input.raw}`))
|
|
56
57
|
return "context-overflow";
|
|
57
58
|
if (status === 429 ||
|
|
58
59
|
/rate.?limit|too many requests|请求.{0,8}(?:频繁|过多)|限流/.test(haystack))
|
|
@@ -759,6 +759,9 @@ export async function handleGetChatSession(_req, res, deps, sessionId) {
|
|
|
759
759
|
hasBash: true,
|
|
760
760
|
sessionStats: telemetry.stats,
|
|
761
761
|
usage: telemetry.usage,
|
|
762
|
+
contextPressure: typeof deps.runtime.getContextPressureTelemetry === "function"
|
|
763
|
+
? deps.runtime.getContextPressureTelemetry(sessionId)
|
|
764
|
+
: undefined,
|
|
762
765
|
compactions: snapshot
|
|
763
766
|
.filter((event) => event.kind === "compact" ||
|
|
764
767
|
event.kind === "compaction_start" ||
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createSiftBridgeState, parseSiftBridgeConfig, compressProviderPayload, executeSiftRetrieve, housekeepSiftStash, createSiftRetrieveToolDefinition, SIFT_RETRIEVE_TOOL_NAME, SIFT_POLICY_VERSION, } from "../../../shared/pi-context-pressure/sift-bridge.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-Dc2cqQIb.js";import{p as f}from"./chunk-JWPE2WC7-URwjQnte.js";import{_ as n,l as o}from"./mermaid.core-DO70kJ34.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-CaBEJekQ.js";import"./index-vPsp-idE.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-DO70kJ34.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|