@tarquinen/opencode-dcp 2.2.3-beta0 → 2.2.5-beta0
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 +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/commands/context.d.ts.map +1 -1
- package/dist/lib/commands/context.js +4 -3
- package/dist/lib/commands/context.js.map +1 -1
- package/dist/lib/commands/stats.d.ts.map +1 -1
- package/dist/lib/commands/stats.js +15 -2
- package/dist/lib/commands/stats.js.map +1 -1
- package/dist/lib/config.d.ts +4 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +36 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +12 -4
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/logger.d.ts +2 -2
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +8 -2
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/messages/index.d.ts +2 -0
- package/dist/lib/messages/index.d.ts.map +1 -1
- package/dist/lib/messages/index.js +2 -0
- package/dist/lib/messages/index.js.map +1 -1
- package/dist/lib/messages/inject/subagent-results.d.ts +4 -0
- package/dist/lib/messages/inject/subagent-results.d.ts.map +1 -0
- package/dist/lib/messages/inject/subagent-results.js +57 -0
- package/dist/lib/messages/inject/subagent-results.js.map +1 -0
- package/dist/lib/messages/prune.js +9 -4
- package/dist/lib/messages/prune.js.map +1 -1
- package/dist/lib/messages/sync.d.ts +4 -0
- package/dist/lib/messages/sync.d.ts.map +1 -0
- package/dist/lib/messages/sync.js +85 -0
- package/dist/lib/messages/sync.js.map +1 -0
- package/dist/lib/messages/utils.d.ts.map +1 -1
- package/dist/lib/messages/utils.js +2 -4
- package/dist/lib/messages/utils.js.map +1 -1
- package/dist/lib/shared-utils.d.ts.map +1 -1
- package/dist/lib/shared-utils.js +2 -1
- package/dist/lib/shared-utils.js.map +1 -1
- package/dist/lib/state/persistence.d.ts +9 -5
- package/dist/lib/state/persistence.d.ts.map +1 -1
- package/dist/lib/state/persistence.js +15 -27
- package/dist/lib/state/persistence.js.map +1 -1
- package/dist/lib/state/state.d.ts.map +1 -1
- package/dist/lib/state/state.js +7 -8
- package/dist/lib/state/state.js.map +1 -1
- package/dist/lib/state/types.d.ts +30 -3
- package/dist/lib/state/types.d.ts.map +1 -1
- package/dist/lib/state/utils.d.ts +12 -2
- package/dist/lib/state/utils.d.ts.map +1 -1
- package/dist/lib/state/utils.js +116 -8
- package/dist/lib/state/utils.js.map +1 -1
- package/dist/lib/subagents/subagent-results.d.ts +5 -0
- package/dist/lib/subagents/subagent-results.d.ts.map +1 -0
- package/dist/lib/subagents/subagent-results.js +52 -0
- package/dist/lib/subagents/subagent-results.js.map +1 -0
- package/dist/lib/tools/compress-utils.d.ts +13 -7
- package/dist/lib/tools/compress-utils.d.ts.map +1 -1
- package/dist/lib/tools/compress-utils.js +164 -22
- package/dist/lib/tools/compress-utils.js.map +1 -1
- package/dist/lib/tools/compress.d.ts.map +1 -1
- package/dist/lib/tools/compress.js +8 -3
- package/dist/lib/tools/compress.js.map +1 -1
- package/dist/lib/ui/notification.d.ts.map +1 -1
- package/dist/lib/ui/notification.js +7 -1
- package/dist/lib/ui/notification.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/state/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,IAAI,EAAE,CAAA;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,GAAG,CAAA;IACf,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/state/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
import type { SessionState, WithParts } from "./types";
|
|
1
|
+
import type { CompressionBlock, PruneMessagesState, PrunedMessageEntry, SessionState, WithParts } from "./types";
|
|
2
|
+
interface PersistedPruneMessagesState {
|
|
3
|
+
byMessageId?: Record<string, PrunedMessageEntry>;
|
|
4
|
+
blocksById?: Record<string, CompressionBlock>;
|
|
5
|
+
activeBlockIds?: number[];
|
|
6
|
+
activeByAnchorMessageId?: Record<string, number>;
|
|
7
|
+
nextBlockId?: number;
|
|
8
|
+
}
|
|
2
9
|
export declare function isSubAgentSession(client: any, sessionID: string): Promise<boolean>;
|
|
3
10
|
export declare function findLastCompactionTimestamp(messages: WithParts[]): number;
|
|
4
11
|
export declare function countTurns(state: SessionState, messages: WithParts[]): number;
|
|
5
|
-
export declare function loadPruneMap(obj?: Record<string, number
|
|
12
|
+
export declare function loadPruneMap(obj?: Record<string, number>): Map<string, number>;
|
|
13
|
+
export declare function createPruneMessagesState(): PruneMessagesState;
|
|
14
|
+
export declare function loadPruneMessagesState(persisted?: PersistedPruneMessagesState): PruneMessagesState;
|
|
6
15
|
export declare function collectTurnNudgeAnchors(messages: WithParts[]): Set<string>;
|
|
7
16
|
export declare function resetOnCompaction(state: SessionState): void;
|
|
17
|
+
export {};
|
|
8
18
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACZ,MAAM,SAAS,CAAA;AAIhB,UAAU,2BAA2B;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChD,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAQzE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAc7E;AAED,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAU9E;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAQ7D;AAED,wBAAgB,sBAAsB,CAClC,SAAS,CAAC,EAAE,2BAA2B,GACxC,kBAAkB,CAoIpB;AAcD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CA0B1E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAS3D"}
|
package/dist/lib/state/utils.js
CHANGED
|
@@ -33,12 +33,121 @@ export function countTurns(state, messages) {
|
|
|
33
33
|
}
|
|
34
34
|
return turnCount;
|
|
35
35
|
}
|
|
36
|
-
export function loadPruneMap(obj
|
|
37
|
-
if (obj)
|
|
38
|
-
return new Map(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return new Map();
|
|
36
|
+
export function loadPruneMap(obj) {
|
|
37
|
+
if (!obj || typeof obj !== "object") {
|
|
38
|
+
return new Map();
|
|
39
|
+
}
|
|
40
|
+
const entries = Object.entries(obj).filter((entry) => typeof entry[0] === "string" && typeof entry[1] === "number");
|
|
41
|
+
return new Map(entries);
|
|
42
|
+
}
|
|
43
|
+
export function createPruneMessagesState() {
|
|
44
|
+
return {
|
|
45
|
+
byMessageId: new Map(),
|
|
46
|
+
blocksById: new Map(),
|
|
47
|
+
activeBlockIds: new Set(),
|
|
48
|
+
activeByAnchorMessageId: new Map(),
|
|
49
|
+
nextBlockId: 1,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function loadPruneMessagesState(persisted) {
|
|
53
|
+
const state = createPruneMessagesState();
|
|
54
|
+
if (!persisted || typeof persisted !== "object") {
|
|
55
|
+
return state;
|
|
56
|
+
}
|
|
57
|
+
if (typeof persisted.nextBlockId === "number" && Number.isInteger(persisted.nextBlockId)) {
|
|
58
|
+
state.nextBlockId = Math.max(1, persisted.nextBlockId);
|
|
59
|
+
}
|
|
60
|
+
if (persisted.byMessageId && typeof persisted.byMessageId === "object") {
|
|
61
|
+
for (const [messageId, entry] of Object.entries(persisted.byMessageId)) {
|
|
62
|
+
if (!entry || typeof entry !== "object") {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const tokenCount = typeof entry.tokenCount === "number" ? entry.tokenCount : 0;
|
|
66
|
+
const allBlockIds = Array.isArray(entry.allBlockIds)
|
|
67
|
+
? [
|
|
68
|
+
...new Set(entry.allBlockIds.filter((id) => Number.isInteger(id) && id > 0)),
|
|
69
|
+
]
|
|
70
|
+
: [];
|
|
71
|
+
const activeBlockIds = Array.isArray(entry.activeBlockIds)
|
|
72
|
+
? [
|
|
73
|
+
...new Set(entry.activeBlockIds.filter((id) => Number.isInteger(id) && id > 0)),
|
|
74
|
+
]
|
|
75
|
+
: [];
|
|
76
|
+
state.byMessageId.set(messageId, {
|
|
77
|
+
tokenCount,
|
|
78
|
+
allBlockIds,
|
|
79
|
+
activeBlockIds,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (persisted.blocksById && typeof persisted.blocksById === "object") {
|
|
84
|
+
for (const [blockIdStr, block] of Object.entries(persisted.blocksById)) {
|
|
85
|
+
const blockId = Number.parseInt(blockIdStr, 10);
|
|
86
|
+
if (!Number.isInteger(blockId) || blockId < 1 || !block || typeof block !== "object") {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const toNumberArray = (value) => Array.isArray(value)
|
|
90
|
+
? [
|
|
91
|
+
...new Set(value.filter((item) => Number.isInteger(item) && item > 0)),
|
|
92
|
+
]
|
|
93
|
+
: [];
|
|
94
|
+
const toStringArray = (value) => Array.isArray(value)
|
|
95
|
+
? [...new Set(value.filter((item) => typeof item === "string"))]
|
|
96
|
+
: [];
|
|
97
|
+
state.blocksById.set(blockId, {
|
|
98
|
+
blockId,
|
|
99
|
+
active: block.active === true,
|
|
100
|
+
topic: typeof block.topic === "string" ? block.topic : "",
|
|
101
|
+
startId: typeof block.startId === "string" ? block.startId : "",
|
|
102
|
+
endId: typeof block.endId === "string" ? block.endId : "",
|
|
103
|
+
anchorMessageId: typeof block.anchorMessageId === "string" ? block.anchorMessageId : "",
|
|
104
|
+
compressMessageId: typeof block.compressMessageId === "string" ? block.compressMessageId : "",
|
|
105
|
+
includedBlockIds: toNumberArray(block.includedBlockIds),
|
|
106
|
+
consumedBlockIds: toNumberArray(block.consumedBlockIds),
|
|
107
|
+
parentBlockIds: toNumberArray(block.parentBlockIds),
|
|
108
|
+
directMessageIds: toStringArray(block.directMessageIds),
|
|
109
|
+
directToolIds: toStringArray(block.directToolIds),
|
|
110
|
+
effectiveMessageIds: toStringArray(block.effectiveMessageIds),
|
|
111
|
+
effectiveToolIds: toStringArray(block.effectiveToolIds),
|
|
112
|
+
createdAt: typeof block.createdAt === "number" ? block.createdAt : 0,
|
|
113
|
+
deactivatedAt: typeof block.deactivatedAt === "number" ? block.deactivatedAt : undefined,
|
|
114
|
+
deactivatedByBlockId: typeof block.deactivatedByBlockId === "number" &&
|
|
115
|
+
Number.isInteger(block.deactivatedByBlockId)
|
|
116
|
+
? block.deactivatedByBlockId
|
|
117
|
+
: undefined,
|
|
118
|
+
summary: typeof block.summary === "string" ? block.summary : "",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (Array.isArray(persisted.activeBlockIds)) {
|
|
123
|
+
for (const blockId of persisted.activeBlockIds) {
|
|
124
|
+
if (!Number.isInteger(blockId) || blockId < 1) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
state.activeBlockIds.add(blockId);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (persisted.activeByAnchorMessageId &&
|
|
131
|
+
typeof persisted.activeByAnchorMessageId === "object") {
|
|
132
|
+
for (const [anchorMessageId, blockId] of Object.entries(persisted.activeByAnchorMessageId)) {
|
|
133
|
+
if (typeof blockId !== "number" || !Number.isInteger(blockId) || blockId < 1) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
state.activeByAnchorMessageId.set(anchorMessageId, blockId);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
for (const [blockId, block] of state.blocksById) {
|
|
140
|
+
if (block.active) {
|
|
141
|
+
state.activeBlockIds.add(blockId);
|
|
142
|
+
if (block.anchorMessageId) {
|
|
143
|
+
state.activeByAnchorMessageId.set(block.anchorMessageId, blockId);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (blockId >= state.nextBlockId) {
|
|
147
|
+
state.nextBlockId = blockId + 1;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return state;
|
|
42
151
|
}
|
|
43
152
|
function hasCompletedCompress(message) {
|
|
44
153
|
if (message.info.role !== "assistant") {
|
|
@@ -72,8 +181,7 @@ export function collectTurnNudgeAnchors(messages) {
|
|
|
72
181
|
export function resetOnCompaction(state) {
|
|
73
182
|
state.toolParameters.clear();
|
|
74
183
|
state.prune.tools = new Map();
|
|
75
|
-
state.prune.messages =
|
|
76
|
-
state.compressSummaries = [];
|
|
184
|
+
state.prune.messages = createPruneMessagesState();
|
|
77
185
|
state.nudges = {
|
|
78
186
|
contextLimitAnchors: new Set(),
|
|
79
187
|
turnNudgeAnchors: new Set(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { WithParts } from "../state";
|
|
2
|
+
export declare function getSubAgentId(part: any): string | null;
|
|
3
|
+
export declare function buildSubagentResultText(messages: WithParts[]): string;
|
|
4
|
+
export declare function mergeSubagentResult(output: string, subAgentResultText: string): string;
|
|
5
|
+
//# sourceMappingURL=subagent-results.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-results.d.ts","sourceRoot":"","sources":["../../../lib/subagents/subagent-results.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAIzC,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAQtD;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAoBrE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAUtF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const SUB_AGENT_RESULT_BLOCK_REGEX = /(<task_result>\s*)([\s\S]*?)(\s*<\/task_result>)/i;
|
|
2
|
+
export function getSubAgentId(part) {
|
|
3
|
+
const sessionId = part?.state?.metadata?.sessionId;
|
|
4
|
+
if (typeof sessionId !== "string") {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
const value = sessionId.trim();
|
|
8
|
+
return value.length > 0 ? value : null;
|
|
9
|
+
}
|
|
10
|
+
export function buildSubagentResultText(messages) {
|
|
11
|
+
const assistantMessages = messages.filter((message) => message.info.role === "assistant");
|
|
12
|
+
if (assistantMessages.length === 0) {
|
|
13
|
+
return "";
|
|
14
|
+
}
|
|
15
|
+
const lastAssistant = assistantMessages[assistantMessages.length - 1];
|
|
16
|
+
const lastText = getLastTextPart(lastAssistant);
|
|
17
|
+
if (assistantMessages.length < 2) {
|
|
18
|
+
return lastText;
|
|
19
|
+
}
|
|
20
|
+
const secondToLastAssistant = assistantMessages[assistantMessages.length - 2];
|
|
21
|
+
if (!assistantMessageHasCompressTool(secondToLastAssistant)) {
|
|
22
|
+
return lastText;
|
|
23
|
+
}
|
|
24
|
+
const secondToLastText = getLastTextPart(secondToLastAssistant);
|
|
25
|
+
return [secondToLastText, lastText].filter((text) => text.length > 0).join("\n\n");
|
|
26
|
+
}
|
|
27
|
+
export function mergeSubagentResult(output, subAgentResultText) {
|
|
28
|
+
if (!subAgentResultText || typeof output !== "string") {
|
|
29
|
+
return output;
|
|
30
|
+
}
|
|
31
|
+
return output.replace(SUB_AGENT_RESULT_BLOCK_REGEX, (_match, openTag, _body, closeTag) => `${openTag}${subAgentResultText}${closeTag}`);
|
|
32
|
+
}
|
|
33
|
+
function getLastTextPart(message) {
|
|
34
|
+
const parts = Array.isArray(message.parts) ? message.parts : [];
|
|
35
|
+
for (let index = parts.length - 1; index >= 0; index--) {
|
|
36
|
+
const part = parts[index];
|
|
37
|
+
if (part.type !== "text" || typeof part.text !== "string") {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const text = part.text.trim();
|
|
41
|
+
if (!text) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
return text;
|
|
45
|
+
}
|
|
46
|
+
return "";
|
|
47
|
+
}
|
|
48
|
+
function assistantMessageHasCompressTool(message) {
|
|
49
|
+
const parts = Array.isArray(message.parts) ? message.parts : [];
|
|
50
|
+
return parts.some((part) => part.type === "tool" && part.tool === "compress" && part.state?.status === "completed");
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=subagent-results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-results.js","sourceRoot":"","sources":["../../../lib/subagents/subagent-results.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SessionState, WithParts
|
|
1
|
+
import type { CompressionBlock, SessionState, WithParts } from "../state";
|
|
2
2
|
export interface CompressToolArgs {
|
|
3
3
|
topic: string;
|
|
4
4
|
content: {
|
|
@@ -18,7 +18,7 @@ export interface SearchContext {
|
|
|
18
18
|
rawMessages: WithParts[];
|
|
19
19
|
rawMessagesById: Map<string, WithParts>;
|
|
20
20
|
rawIndexById: Map<string, number>;
|
|
21
|
-
summaryByBlockId: Map<number,
|
|
21
|
+
summaryByBlockId: Map<number, CompressionBlock>;
|
|
22
22
|
}
|
|
23
23
|
export interface RangeResolution {
|
|
24
24
|
startReference: BoundaryReference;
|
|
@@ -42,6 +42,12 @@ export interface AppliedCompressionResult {
|
|
|
42
42
|
compressedTokens: number;
|
|
43
43
|
messageIds: string[];
|
|
44
44
|
}
|
|
45
|
+
export interface CompressionStateInput {
|
|
46
|
+
topic: string;
|
|
47
|
+
startId: string;
|
|
48
|
+
endId: string;
|
|
49
|
+
compressMessageId: string;
|
|
50
|
+
}
|
|
45
51
|
export declare const COMPRESSED_BLOCK_HEADER = "[Compressed conversation section]";
|
|
46
52
|
export declare function formatBlockPlaceholder(blockId: number): string;
|
|
47
53
|
export declare function validateCompressArgs(args: CompressToolArgs): void;
|
|
@@ -54,10 +60,10 @@ export declare function resolveBoundaryIds(context: SearchContext, state: Sessio
|
|
|
54
60
|
export declare function resolveRange(context: SearchContext, startReference: BoundaryReference, endReference: BoundaryReference): RangeResolution;
|
|
55
61
|
export declare function resolveAnchorMessageId(startReference: BoundaryReference): string;
|
|
56
62
|
export declare function parseBlockPlaceholders(summary: string): ParsedBlockPlaceholder[];
|
|
57
|
-
export declare function validateSummaryPlaceholders(placeholders: ParsedBlockPlaceholder[], requiredBlockIds: number[], startReference: BoundaryReference, endReference: BoundaryReference, summaryByBlockId: Map<number,
|
|
58
|
-
export declare function injectBlockPlaceholders(summary: string, placeholders: ParsedBlockPlaceholder[], summaryByBlockId: Map<number,
|
|
59
|
-
export declare function allocateBlockId(
|
|
63
|
+
export declare function validateSummaryPlaceholders(placeholders: ParsedBlockPlaceholder[], requiredBlockIds: number[], startReference: BoundaryReference, endReference: BoundaryReference, summaryByBlockId: Map<number, CompressionBlock>): void;
|
|
64
|
+
export declare function injectBlockPlaceholders(summary: string, placeholders: ParsedBlockPlaceholder[], summaryByBlockId: Map<number, CompressionBlock>, startReference: BoundaryReference, endReference: BoundaryReference): InjectedSummaryResult;
|
|
65
|
+
export declare function allocateBlockId(state: SessionState): number;
|
|
60
66
|
export declare function wrapCompressedSummary(blockId: number, summary: string): string;
|
|
61
|
-
export declare function applyCompressionState(state: SessionState, range: RangeResolution, anchorMessageId: string, blockId: number, summary: string, consumedBlockIds: number[]): AppliedCompressionResult;
|
|
62
|
-
export declare function appendProtectedTools(summary: string, range: RangeResolution, searchContext: SearchContext, protectedTools: string[], protectedFilePatterns?: string[]): string
|
|
67
|
+
export declare function applyCompressionState(state: SessionState, input: CompressionStateInput, range: RangeResolution, anchorMessageId: string, blockId: number, summary: string, consumedBlockIds: number[]): AppliedCompressionResult;
|
|
68
|
+
export declare function appendProtectedTools(client: any, state: SessionState, allowSubAgents: boolean, summary: string, range: RangeResolution, searchContext: SearchContext, protectedTools: string[], protectedFilePatterns?: string[]): Promise<string>;
|
|
63
69
|
//# sourceMappingURL=compress-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress-utils.d.ts","sourceRoot":"","sources":["../../../lib/tools/compress-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"compress-utils.d.ts","sourceRoot":"","sources":["../../../lib/tools/compress-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { formatBlockRef, formatMessageIdTag, parseBoundaryId } from "../message-
|
|
|
2
2
|
import { isIgnoredUserMessage } from "../messages/utils";
|
|
3
3
|
import { countAllMessageTokens } from "../strategies/utils";
|
|
4
4
|
import { getFilePathsFromParameters, isProtected } from "../protected-file-patterns";
|
|
5
|
+
import { buildSubagentResultText, getSubAgentId, mergeSubagentResult, } from "../subagents/subagent-results";
|
|
5
6
|
const BLOCK_PLACEHOLDER_REGEX = /\(b(\d+)\)|\{block_(\d+)\}/gi;
|
|
6
7
|
export const COMPRESSED_BLOCK_HEADER = "[Compressed conversation section]";
|
|
7
8
|
export function formatBlockPlaceholder(blockId) {
|
|
@@ -42,8 +43,11 @@ export function buildSearchContext(state, rawMessages) {
|
|
|
42
43
|
rawIndexById.set(message.info.id, index);
|
|
43
44
|
}
|
|
44
45
|
const summaryByBlockId = new Map();
|
|
45
|
-
for (const
|
|
46
|
-
|
|
46
|
+
for (const [blockId, block] of state.prune.messages.blocksById) {
|
|
47
|
+
if (!block.active) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
summaryByBlockId.set(blockId, block);
|
|
47
51
|
}
|
|
48
52
|
return {
|
|
49
53
|
rawMessages,
|
|
@@ -319,17 +323,14 @@ export function injectBlockPlaceholders(summary, placeholders, summaryByBlockId,
|
|
|
319
323
|
consumedBlockIds: consumed,
|
|
320
324
|
};
|
|
321
325
|
}
|
|
322
|
-
export function allocateBlockId(
|
|
323
|
-
|
|
326
|
+
export function allocateBlockId(state) {
|
|
327
|
+
const next = state.prune.messages.nextBlockId;
|
|
328
|
+
if (!Number.isInteger(next) || next < 1) {
|
|
329
|
+
state.prune.messages.nextBlockId = 2;
|
|
324
330
|
return 1;
|
|
325
331
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
if (summary.blockId > max) {
|
|
329
|
-
max = summary.blockId;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
return max + 1;
|
|
332
|
+
state.prune.messages.nextBlockId = next + 1;
|
|
333
|
+
return next;
|
|
333
334
|
}
|
|
334
335
|
export function wrapCompressedSummary(blockId, summary) {
|
|
335
336
|
const header = COMPRESSED_BLOCK_HEADER;
|
|
@@ -340,22 +341,135 @@ export function wrapCompressedSummary(blockId, summary) {
|
|
|
340
341
|
}
|
|
341
342
|
return `${header}\n${body}\n\n${footer}`;
|
|
342
343
|
}
|
|
343
|
-
export function applyCompressionState(state, range, anchorMessageId, blockId, summary, consumedBlockIds) {
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
|
|
344
|
+
export function applyCompressionState(state, input, range, anchorMessageId, blockId, summary, consumedBlockIds) {
|
|
345
|
+
const messagesState = state.prune.messages;
|
|
346
|
+
const consumed = [...new Set(consumedBlockIds.filter((id) => Number.isInteger(id) && id > 0))];
|
|
347
|
+
const included = [...consumed];
|
|
348
|
+
const effectiveMessageIds = new Set(range.messageIds);
|
|
349
|
+
const effectiveToolIds = new Set(range.toolIds);
|
|
350
|
+
for (const consumedBlockId of consumed) {
|
|
351
|
+
const consumedBlock = messagesState.blocksById.get(consumedBlockId);
|
|
352
|
+
if (!consumedBlock) {
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
for (const messageId of consumedBlock.effectiveMessageIds) {
|
|
356
|
+
effectiveMessageIds.add(messageId);
|
|
357
|
+
}
|
|
358
|
+
for (const toolId of consumedBlock.effectiveToolIds) {
|
|
359
|
+
effectiveToolIds.add(toolId);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
const initiallyActiveMessages = new Set();
|
|
363
|
+
for (const messageId of effectiveMessageIds) {
|
|
364
|
+
const entry = messagesState.byMessageId.get(messageId);
|
|
365
|
+
if (entry && entry.activeBlockIds.length > 0) {
|
|
366
|
+
initiallyActiveMessages.add(messageId);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
const createdAt = Date.now();
|
|
370
|
+
const block = {
|
|
347
371
|
blockId,
|
|
372
|
+
active: true,
|
|
373
|
+
topic: input.topic,
|
|
374
|
+
startId: input.startId,
|
|
375
|
+
endId: input.endId,
|
|
348
376
|
anchorMessageId,
|
|
377
|
+
compressMessageId: input.compressMessageId,
|
|
378
|
+
includedBlockIds: included,
|
|
379
|
+
consumedBlockIds: consumed,
|
|
380
|
+
parentBlockIds: [],
|
|
381
|
+
directMessageIds: [...range.messageIds],
|
|
382
|
+
directToolIds: [...range.toolIds],
|
|
383
|
+
effectiveMessageIds: [...effectiveMessageIds],
|
|
384
|
+
effectiveToolIds: [...effectiveToolIds],
|
|
385
|
+
createdAt,
|
|
349
386
|
summary,
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
387
|
+
};
|
|
388
|
+
messagesState.blocksById.set(blockId, block);
|
|
389
|
+
messagesState.activeBlockIds.add(blockId);
|
|
390
|
+
messagesState.activeByAnchorMessageId.set(anchorMessageId, blockId);
|
|
391
|
+
const deactivatedAt = Date.now();
|
|
392
|
+
for (const consumedBlockId of consumed) {
|
|
393
|
+
const consumedBlock = messagesState.blocksById.get(consumedBlockId);
|
|
394
|
+
if (!consumedBlock || !consumedBlock.active) {
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
consumedBlock.active = false;
|
|
398
|
+
consumedBlock.deactivatedAt = deactivatedAt;
|
|
399
|
+
consumedBlock.deactivatedByBlockId = blockId;
|
|
400
|
+
if (!consumedBlock.parentBlockIds.includes(blockId)) {
|
|
401
|
+
consumedBlock.parentBlockIds.push(blockId);
|
|
402
|
+
}
|
|
403
|
+
messagesState.activeBlockIds.delete(consumedBlockId);
|
|
404
|
+
const mappedBlockId = messagesState.activeByAnchorMessageId.get(consumedBlock.anchorMessageId);
|
|
405
|
+
if (mappedBlockId === consumedBlockId) {
|
|
406
|
+
messagesState.activeByAnchorMessageId.delete(consumedBlock.anchorMessageId);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
const removeActiveBlockId = (entry, blockIdToRemove) => {
|
|
410
|
+
if (entry.activeBlockIds.length === 0) {
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
entry.activeBlockIds = entry.activeBlockIds.filter((id) => id !== blockIdToRemove);
|
|
414
|
+
};
|
|
415
|
+
for (const consumedBlockId of consumed) {
|
|
416
|
+
const consumedBlock = messagesState.blocksById.get(consumedBlockId);
|
|
417
|
+
if (!consumedBlock) {
|
|
354
418
|
continue;
|
|
355
419
|
}
|
|
420
|
+
for (const messageId of consumedBlock.effectiveMessageIds) {
|
|
421
|
+
const entry = messagesState.byMessageId.get(messageId);
|
|
422
|
+
if (!entry) {
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
removeActiveBlockId(entry, consumedBlockId);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
for (const messageId of range.messageIds) {
|
|
356
429
|
const tokenCount = range.messageTokenById.get(messageId) || 0;
|
|
357
|
-
|
|
358
|
-
|
|
430
|
+
const existing = messagesState.byMessageId.get(messageId);
|
|
431
|
+
if (!existing) {
|
|
432
|
+
messagesState.byMessageId.set(messageId, {
|
|
433
|
+
tokenCount,
|
|
434
|
+
allBlockIds: [blockId],
|
|
435
|
+
activeBlockIds: [blockId],
|
|
436
|
+
});
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
existing.tokenCount = Math.max(existing.tokenCount, tokenCount);
|
|
440
|
+
if (!existing.allBlockIds.includes(blockId)) {
|
|
441
|
+
existing.allBlockIds.push(blockId);
|
|
442
|
+
}
|
|
443
|
+
if (!existing.activeBlockIds.includes(blockId)) {
|
|
444
|
+
existing.activeBlockIds.push(blockId);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
for (const messageId of block.effectiveMessageIds) {
|
|
448
|
+
if (range.messageTokenById.has(messageId)) {
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
451
|
+
const existing = messagesState.byMessageId.get(messageId);
|
|
452
|
+
if (!existing) {
|
|
453
|
+
continue;
|
|
454
|
+
}
|
|
455
|
+
if (!existing.allBlockIds.includes(blockId)) {
|
|
456
|
+
existing.allBlockIds.push(blockId);
|
|
457
|
+
}
|
|
458
|
+
if (!existing.activeBlockIds.includes(blockId)) {
|
|
459
|
+
existing.activeBlockIds.push(blockId);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
let compressedTokens = 0;
|
|
463
|
+
for (const messageId of effectiveMessageIds) {
|
|
464
|
+
const entry = messagesState.byMessageId.get(messageId);
|
|
465
|
+
if (!entry) {
|
|
466
|
+
continue;
|
|
467
|
+
}
|
|
468
|
+
const isNowActive = entry.activeBlockIds.length > 0;
|
|
469
|
+
const wasActive = initiallyActiveMessages.has(messageId);
|
|
470
|
+
if (isNowActive && !wasActive) {
|
|
471
|
+
compressedTokens += entry.tokenCount;
|
|
472
|
+
}
|
|
359
473
|
}
|
|
360
474
|
state.stats.pruneTokenCounter += compressedTokens;
|
|
361
475
|
state.stats.totalPruneTokens += state.stats.pruneTokenCounter;
|
|
@@ -406,7 +520,7 @@ function mergeWithSpacing(left, right) {
|
|
|
406
520
|
}
|
|
407
521
|
return `${l}\n\n${r}`;
|
|
408
522
|
}
|
|
409
|
-
export function appendProtectedTools(summary, range, searchContext, protectedTools, protectedFilePatterns = []) {
|
|
523
|
+
export async function appendProtectedTools(client, state, allowSubAgents, summary, range, searchContext, protectedTools, protectedFilePatterns = []) {
|
|
410
524
|
const protectedSet = new Set(protectedTools);
|
|
411
525
|
const protectedOutputs = [];
|
|
412
526
|
for (const messageId of range.messageIds) {
|
|
@@ -432,6 +546,34 @@ export function appendProtectedTools(summary, range, searchContext, protectedToo
|
|
|
432
546
|
? part.state.output
|
|
433
547
|
: JSON.stringify(part.state.output);
|
|
434
548
|
}
|
|
549
|
+
if (allowSubAgents &&
|
|
550
|
+
part.tool === "task" &&
|
|
551
|
+
part.state?.status === "completed" &&
|
|
552
|
+
typeof part.state?.output === "string") {
|
|
553
|
+
const cachedSubAgentResult = state.subAgentResultCache.get(part.callID);
|
|
554
|
+
if (cachedSubAgentResult !== undefined) {
|
|
555
|
+
if (cachedSubAgentResult) {
|
|
556
|
+
output = mergeSubagentResult(part.state.output, cachedSubAgentResult);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
else {
|
|
560
|
+
const subAgentSessionId = getSubAgentId(part);
|
|
561
|
+
if (subAgentSessionId) {
|
|
562
|
+
let subAgentResultText = "";
|
|
563
|
+
try {
|
|
564
|
+
const subAgentMessages = await fetchSessionMessages(client, subAgentSessionId);
|
|
565
|
+
subAgentResultText = buildSubagentResultText(subAgentMessages);
|
|
566
|
+
}
|
|
567
|
+
catch {
|
|
568
|
+
subAgentResultText = "";
|
|
569
|
+
}
|
|
570
|
+
if (subAgentResultText) {
|
|
571
|
+
state.subAgentResultCache.set(part.callID, subAgentResultText);
|
|
572
|
+
output = mergeSubagentResult(part.state.output, subAgentResultText);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
435
577
|
if (output) {
|
|
436
578
|
protectedOutputs.push(`\n### ${title}\n${output}`);
|
|
437
579
|
}
|