@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.
Files changed (69) hide show
  1. package/README.md +9 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/commands/context.d.ts.map +1 -1
  6. package/dist/lib/commands/context.js +4 -3
  7. package/dist/lib/commands/context.js.map +1 -1
  8. package/dist/lib/commands/stats.d.ts.map +1 -1
  9. package/dist/lib/commands/stats.js +15 -2
  10. package/dist/lib/commands/stats.js.map +1 -1
  11. package/dist/lib/config.d.ts +4 -0
  12. package/dist/lib/config.d.ts.map +1 -1
  13. package/dist/lib/config.js +36 -0
  14. package/dist/lib/config.js.map +1 -1
  15. package/dist/lib/hooks.d.ts.map +1 -1
  16. package/dist/lib/hooks.js +12 -4
  17. package/dist/lib/hooks.js.map +1 -1
  18. package/dist/lib/logger.d.ts +2 -2
  19. package/dist/lib/logger.d.ts.map +1 -1
  20. package/dist/lib/logger.js +8 -2
  21. package/dist/lib/logger.js.map +1 -1
  22. package/dist/lib/messages/index.d.ts +2 -0
  23. package/dist/lib/messages/index.d.ts.map +1 -1
  24. package/dist/lib/messages/index.js +2 -0
  25. package/dist/lib/messages/index.js.map +1 -1
  26. package/dist/lib/messages/inject/subagent-results.d.ts +4 -0
  27. package/dist/lib/messages/inject/subagent-results.d.ts.map +1 -0
  28. package/dist/lib/messages/inject/subagent-results.js +57 -0
  29. package/dist/lib/messages/inject/subagent-results.js.map +1 -0
  30. package/dist/lib/messages/prune.js +9 -4
  31. package/dist/lib/messages/prune.js.map +1 -1
  32. package/dist/lib/messages/sync.d.ts +4 -0
  33. package/dist/lib/messages/sync.d.ts.map +1 -0
  34. package/dist/lib/messages/sync.js +85 -0
  35. package/dist/lib/messages/sync.js.map +1 -0
  36. package/dist/lib/messages/utils.d.ts.map +1 -1
  37. package/dist/lib/messages/utils.js +2 -4
  38. package/dist/lib/messages/utils.js.map +1 -1
  39. package/dist/lib/shared-utils.d.ts.map +1 -1
  40. package/dist/lib/shared-utils.js +2 -1
  41. package/dist/lib/shared-utils.js.map +1 -1
  42. package/dist/lib/state/persistence.d.ts +9 -5
  43. package/dist/lib/state/persistence.d.ts.map +1 -1
  44. package/dist/lib/state/persistence.js +15 -27
  45. package/dist/lib/state/persistence.js.map +1 -1
  46. package/dist/lib/state/state.d.ts.map +1 -1
  47. package/dist/lib/state/state.js +7 -8
  48. package/dist/lib/state/state.js.map +1 -1
  49. package/dist/lib/state/types.d.ts +30 -3
  50. package/dist/lib/state/types.d.ts.map +1 -1
  51. package/dist/lib/state/utils.d.ts +12 -2
  52. package/dist/lib/state/utils.d.ts.map +1 -1
  53. package/dist/lib/state/utils.js +116 -8
  54. package/dist/lib/state/utils.js.map +1 -1
  55. package/dist/lib/subagents/subagent-results.d.ts +5 -0
  56. package/dist/lib/subagents/subagent-results.d.ts.map +1 -0
  57. package/dist/lib/subagents/subagent-results.js +52 -0
  58. package/dist/lib/subagents/subagent-results.js.map +1 -0
  59. package/dist/lib/tools/compress-utils.d.ts +13 -7
  60. package/dist/lib/tools/compress-utils.d.ts.map +1 -1
  61. package/dist/lib/tools/compress-utils.js +164 -22
  62. package/dist/lib/tools/compress-utils.js.map +1 -1
  63. package/dist/lib/tools/compress.d.ts.map +1 -1
  64. package/dist/lib/tools/compress.js +8 -3
  65. package/dist/lib/tools/compress.js.map +1 -1
  66. package/dist/lib/ui/notification.d.ts.map +1 -1
  67. package/dist/lib/ui/notification.js +7 -1
  68. package/dist/lib/ui/notification.js.map +1 -1
  69. 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,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,KAAK;IAClB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,MAAM;IACnB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7B,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACjD,KAAK,EAAE,KAAK,CAAA;IACZ,iBAAiB,EAAE,eAAe,EAAE,CAAA;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,YAAY,CAAA;IACnB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC/C,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,UAAU,EAAE,cAAc,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;CACzC"}
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>, legacyArr?: string[]): Map<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,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAItD,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,CACxB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,GACrB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIrB;AAcD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CA0B1E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAU3D"}
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"}
@@ -33,12 +33,121 @@ export function countTurns(state, messages) {
33
33
  }
34
34
  return turnCount;
35
35
  }
36
- export function loadPruneMap(obj, legacyArr) {
37
- if (obj)
38
- return new Map(Object.entries(obj));
39
- if (legacyArr)
40
- return new Map(legacyArr.map((id) => [id, 0]));
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 = new Map();
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":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAUxD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAW,EAAE,SAAiB;IAClE,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;QACpE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAA;IAClC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,KAAK,CAAA;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAAqB;IAC7D,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7D,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;QAChC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAmB,EAAE,QAAqB;IACjE,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACjC,SAAQ;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC7B,SAAS,EAAE,CAAA;YACf,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAA4B;IACrD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,GAAG,EAAE,CAAA;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CACtC,CAAC,KAAK,EAA6B,EAAE,CACjC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CACnE,CAAA;IACD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,wBAAwB;IACpC,OAAO;QACH,WAAW,EAAE,IAAI,GAAG,EAA8B;QAClD,UAAU,EAAE,IAAI,GAAG,EAA4B;QAC/C,cAAc,EAAE,IAAI,GAAG,EAAU;QACjC,uBAAuB,EAAE,IAAI,GAAG,EAAkB;QAClD,WAAW,EAAE,CAAC;KACjB,CAAA;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAClC,SAAuC;IAEvC,MAAM,KAAK,GAAG,wBAAwB,EAAE,CAAA;IACxC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QACvF,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,SAAS,CAAC,WAAW,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACrE,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACtC,SAAQ;YACZ,CAAC;YAED,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9E,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;gBAChD,CAAC,CAAC;oBACI,GAAG,IAAI,GAAG,CACN,KAAK,CAAC,WAAW,CAAC,MAAM,CACpB,CAAC,EAAE,EAAgB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CACvD,CACJ;iBACJ;gBACH,CAAC,CAAC,EAAE,CAAA;YACR,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;gBACtD,CAAC,CAAC;oBACI,GAAG,IAAI,GAAG,CACN,KAAK,CAAC,cAAc,CAAC,MAAM,CACvB,CAAC,EAAE,EAAgB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CACvD,CACJ;iBACJ;gBACH,CAAC,CAAC,EAAE,CAAA;YAER,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE;gBAC7B,UAAU;gBACV,WAAW;gBACX,cAAc;aACjB,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnE,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnF,SAAQ;YACZ,CAAC;YAED,MAAM,aAAa,GAAG,CAAC,KAAc,EAAY,EAAE,CAC/C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAChB,CAAC,CAAC;oBACI,GAAG,IAAI,GAAG,CACN,KAAK,CAAC,MAAM,CACR,CAAC,IAAI,EAAkB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAC/D,CACJ;iBACJ;gBACH,CAAC,CAAC,EAAE,CAAA;YACZ,MAAM,aAAa,GAAG,CAAC,KAAc,EAAY,EAAE,CAC/C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAChB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;gBAChF,CAAC,CAAC,EAAE,CAAA;YAEZ,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE;gBAC1B,OAAO;gBACP,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI;gBAC7B,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzD,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC/D,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzD,eAAe,EACX,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;gBAC1E,iBAAiB,EACb,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;gBAC9E,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBACvD,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBACvD,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC;gBACnD,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBACvD,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC;gBACjD,mBAAmB,EAAE,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBAC7D,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBACvD,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpE,aAAa,EACT,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;gBAC7E,oBAAoB,EAChB,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ;oBAC9C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC;oBACxC,CAAC,CAAC,KAAK,CAAC,oBAAoB;oBAC5B,CAAC,CAAC,SAAS;gBACnB,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;aAClE,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1C,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC5C,SAAQ;YACZ,CAAC;YACD,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACrC,CAAC;IACL,CAAC;IAED,IACI,SAAS,CAAC,uBAAuB;QACjC,OAAO,SAAS,CAAC,uBAAuB,KAAK,QAAQ,EACvD,CAAC;QACC,KAAK,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CACnD,SAAS,CAAC,uBAAuB,CACpC,EAAE,CAAC;YACA,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC3E,SAAQ;YACZ,CAAC;YACD,KAAK,CAAC,uBAAuB,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QAC/D,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACjC,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,KAAK,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;YACrE,CAAC;QACL,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,WAAW,GAAG,OAAO,GAAG,CAAC,CAAA;QACnC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAkB;IAC5C,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,OAAO,KAAK,CAAC,IAAI,CACb,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,CAC7F,CAAA;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAqB;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,IAAI,oBAAoB,GAAkB,IAAI,CAAA;IAE9C,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAE3B,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,MAAK;QACT,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;YAC1C,CAAC;YACD,SAAQ;QACZ,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,oBAAoB,EAAE,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC5B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;YACjC,oBAAoB,GAAG,IAAI,CAAA;QAC/B,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACjD,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;IAC5B,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC7C,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,wBAAwB,EAAE,CAAA;IACjD,KAAK,CAAC,MAAM,GAAG;QACX,mBAAmB,EAAE,IAAI,GAAG,EAAU;QACtC,gBAAgB,EAAE,IAAI,GAAG,EAAU;QACnC,qBAAqB,EAAE,IAAI,GAAG,EAAU;KAC3C,CAAA;AACL,CAAC"}
@@ -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, CompressSummary } from "../state";
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, CompressSummary>;
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, CompressSummary>): void;
58
- export declare function injectBlockPlaceholders(summary: string, placeholders: ParsedBlockPlaceholder[], summaryByBlockId: Map<number, CompressSummary>, startReference: BoundaryReference, endReference: BoundaryReference): InjectedSummaryResult;
59
- export declare function allocateBlockId(summaries: CompressSummary[]): number;
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":"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"}
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 summary of state.compressSummaries || []) {
46
- summaryByBlockId.set(summary.blockId, summary);
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(summaries) {
323
- if (summaries.length === 0) {
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
- let max = 0;
327
- for (const summary of summaries) {
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 consumed = new Set(consumedBlockIds);
345
- state.compressSummaries = (state.compressSummaries || []).filter((s) => !consumed.has(s.blockId));
346
- state.compressSummaries.push({
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
- let compressedTokens = 0;
352
- for (const messageId of range.messageIds) {
353
- if (state.prune.messages.has(messageId)) {
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
- state.prune.messages.set(messageId, tokenCount);
358
- compressedTokens += tokenCount;
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
  }