@p4r4d0xb0x/opencode-dcp 3.0.5

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 (203) hide show
  1. package/LICENSE +619 -0
  2. package/README.md +229 -0
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +88 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/auth.d.ts +4 -0
  8. package/dist/lib/auth.d.ts.map +1 -0
  9. package/dist/lib/auth.js +32 -0
  10. package/dist/lib/auth.js.map +1 -0
  11. package/dist/lib/commands/context.d.ts +52 -0
  12. package/dist/lib/commands/context.d.ts.map +1 -0
  13. package/dist/lib/commands/context.js +241 -0
  14. package/dist/lib/commands/context.js.map +1 -0
  15. package/dist/lib/commands/decompress.d.ts +12 -0
  16. package/dist/lib/commands/decompress.d.ts.map +1 -0
  17. package/dist/lib/commands/decompress.js +159 -0
  18. package/dist/lib/commands/decompress.js.map +1 -0
  19. package/dist/lib/commands/help.d.ts +17 -0
  20. package/dist/lib/commands/help.d.ts.map +1 -0
  21. package/dist/lib/commands/help.js +52 -0
  22. package/dist/lib/commands/help.js.map +1 -0
  23. package/dist/lib/commands/manual.d.ts +22 -0
  24. package/dist/lib/commands/manual.d.ts.map +1 -0
  25. package/dist/lib/commands/manual.js +48 -0
  26. package/dist/lib/commands/manual.js.map +1 -0
  27. package/dist/lib/commands/recompress.d.ts +12 -0
  28. package/dist/lib/commands/recompress.d.ts.map +1 -0
  29. package/dist/lib/commands/recompress.js +137 -0
  30. package/dist/lib/commands/recompress.js.map +1 -0
  31. package/dist/lib/commands/stats.d.ts +15 -0
  32. package/dist/lib/commands/stats.d.ts.map +1 -0
  33. package/dist/lib/commands/stats.js +62 -0
  34. package/dist/lib/commands/stats.js.map +1 -0
  35. package/dist/lib/commands/sweep.d.ts +23 -0
  36. package/dist/lib/commands/sweep.d.ts.map +1 -0
  37. package/dist/lib/commands/sweep.js +194 -0
  38. package/dist/lib/commands/sweep.js.map +1 -0
  39. package/dist/lib/config.d.ts +72 -0
  40. package/dist/lib/config.d.ts.map +1 -0
  41. package/dist/lib/config.js +766 -0
  42. package/dist/lib/config.js.map +1 -0
  43. package/dist/lib/hooks.d.ts +33 -0
  44. package/dist/lib/hooks.d.ts.map +1 -0
  45. package/dist/lib/hooks.js +195 -0
  46. package/dist/lib/hooks.js.map +1 -0
  47. package/dist/lib/host-permissions.d.ts +11 -0
  48. package/dist/lib/host-permissions.d.ts.map +1 -0
  49. package/dist/lib/host-permissions.js +58 -0
  50. package/dist/lib/host-permissions.js.map +1 -0
  51. package/dist/lib/logger.d.ts +31 -0
  52. package/dist/lib/logger.d.ts.map +1 -0
  53. package/dist/lib/logger.js +204 -0
  54. package/dist/lib/logger.js.map +1 -0
  55. package/dist/lib/message-ids.d.ts +19 -0
  56. package/dist/lib/message-ids.d.ts.map +1 -0
  57. package/dist/lib/message-ids.js +112 -0
  58. package/dist/lib/message-ids.js.map +1 -0
  59. package/dist/lib/messages/index.d.ts +7 -0
  60. package/dist/lib/messages/index.d.ts.map +1 -0
  61. package/dist/lib/messages/index.js +7 -0
  62. package/dist/lib/messages/index.js.map +1 -0
  63. package/dist/lib/messages/inject/inject.d.ts +7 -0
  64. package/dist/lib/messages/inject/inject.d.ts.map +1 -0
  65. package/dist/lib/messages/inject/inject.js +131 -0
  66. package/dist/lib/messages/inject/inject.js.map +1 -0
  67. package/dist/lib/messages/inject/subagent-results.d.ts +4 -0
  68. package/dist/lib/messages/inject/subagent-results.d.ts.map +1 -0
  69. package/dist/lib/messages/inject/subagent-results.js +58 -0
  70. package/dist/lib/messages/inject/subagent-results.js.map +1 -0
  71. package/dist/lib/messages/inject/utils.d.ts +25 -0
  72. package/dist/lib/messages/inject/utils.d.ts.map +1 -0
  73. package/dist/lib/messages/inject/utils.js +198 -0
  74. package/dist/lib/messages/inject/utils.js.map +1 -0
  75. package/dist/lib/messages/prune.d.ts +5 -0
  76. package/dist/lib/messages/prune.d.ts.map +1 -0
  77. package/dist/lib/messages/prune.js +177 -0
  78. package/dist/lib/messages/prune.js.map +1 -0
  79. package/dist/lib/messages/reasoning-strip.d.ts +8 -0
  80. package/dist/lib/messages/reasoning-strip.d.ts.map +1 -0
  81. package/dist/lib/messages/reasoning-strip.js +33 -0
  82. package/dist/lib/messages/reasoning-strip.js.map +1 -0
  83. package/dist/lib/messages/sync.d.ts +4 -0
  84. package/dist/lib/messages/sync.d.ts.map +1 -0
  85. package/dist/lib/messages/sync.js +93 -0
  86. package/dist/lib/messages/sync.js.map +1 -0
  87. package/dist/lib/messages/utils.d.ts +21 -0
  88. package/dist/lib/messages/utils.d.ts.map +1 -0
  89. package/dist/lib/messages/utils.js +118 -0
  90. package/dist/lib/messages/utils.js.map +1 -0
  91. package/dist/lib/prompts/compress.d.ts +2 -0
  92. package/dist/lib/prompts/compress.d.ts.map +1 -0
  93. package/dist/lib/prompts/compress.js +85 -0
  94. package/dist/lib/prompts/compress.js.map +1 -0
  95. package/dist/lib/prompts/context-limit-nudge.d.ts +2 -0
  96. package/dist/lib/prompts/context-limit-nudge.d.ts.map +1 -0
  97. package/dist/lib/prompts/context-limit-nudge.js +25 -0
  98. package/dist/lib/prompts/context-limit-nudge.js.map +1 -0
  99. package/dist/lib/prompts/index.d.ts +3 -0
  100. package/dist/lib/prompts/index.d.ts.map +1 -0
  101. package/dist/lib/prompts/index.js +19 -0
  102. package/dist/lib/prompts/index.js.map +1 -0
  103. package/dist/lib/prompts/internal-overlays.d.ts +5 -0
  104. package/dist/lib/prompts/internal-overlays.d.ts.map +1 -0
  105. package/dist/lib/prompts/internal-overlays.js +43 -0
  106. package/dist/lib/prompts/internal-overlays.js.map +1 -0
  107. package/dist/lib/prompts/iteration-nudge.d.ts +2 -0
  108. package/dist/lib/prompts/iteration-nudge.d.ts.map +1 -0
  109. package/dist/lib/prompts/iteration-nudge.js +9 -0
  110. package/dist/lib/prompts/iteration-nudge.js.map +1 -0
  111. package/dist/lib/prompts/store.d.ts +24 -0
  112. package/dist/lib/prompts/store.d.ts.map +1 -0
  113. package/dist/lib/prompts/store.js +346 -0
  114. package/dist/lib/prompts/store.js.map +1 -0
  115. package/dist/lib/prompts/system.d.ts +2 -0
  116. package/dist/lib/prompts/system.d.ts.map +1 -0
  117. package/dist/lib/prompts/system.js +30 -0
  118. package/dist/lib/prompts/system.js.map +1 -0
  119. package/dist/lib/prompts/turn-nudge.d.ts +2 -0
  120. package/dist/lib/prompts/turn-nudge.d.ts.map +1 -0
  121. package/dist/lib/prompts/turn-nudge.js +12 -0
  122. package/dist/lib/prompts/turn-nudge.js.map +1 -0
  123. package/dist/lib/protected-patterns.d.ts +5 -0
  124. package/dist/lib/protected-patterns.d.ts.map +1 -0
  125. package/dist/lib/protected-patterns.js +107 -0
  126. package/dist/lib/protected-patterns.js.map +1 -0
  127. package/dist/lib/shared-utils.d.ts +8 -0
  128. package/dist/lib/shared-utils.d.ts.map +1 -0
  129. package/dist/lib/shared-utils.js +30 -0
  130. package/dist/lib/shared-utils.js.map +1 -0
  131. package/dist/lib/state/index.d.ts +4 -0
  132. package/dist/lib/state/index.d.ts.map +1 -0
  133. package/dist/lib/state/index.js +4 -0
  134. package/dist/lib/state/index.js.map +1 -0
  135. package/dist/lib/state/persistence.d.ts +41 -0
  136. package/dist/lib/state/persistence.d.ts.map +1 -0
  137. package/dist/lib/state/persistence.js +174 -0
  138. package/dist/lib/state/persistence.js.map +1 -0
  139. package/dist/lib/state/state.d.ts +7 -0
  140. package/dist/lib/state/state.d.ts.map +1 -0
  141. package/dist/lib/state/state.js +134 -0
  142. package/dist/lib/state/state.js.map +1 -0
  143. package/dist/lib/state/tool-cache.d.ts +13 -0
  144. package/dist/lib/state/tool-cache.d.ts.map +1 -0
  145. package/dist/lib/state/tool-cache.js +69 -0
  146. package/dist/lib/state/tool-cache.js.map +1 -0
  147. package/dist/lib/state/types.d.ts +90 -0
  148. package/dist/lib/state/types.d.ts.map +1 -0
  149. package/dist/lib/state/types.js +2 -0
  150. package/dist/lib/state/types.js.map +1 -0
  151. package/dist/lib/state/utils.d.ts +18 -0
  152. package/dist/lib/state/utils.d.ts.map +1 -0
  153. package/dist/lib/state/utils.js +196 -0
  154. package/dist/lib/state/utils.js.map +1 -0
  155. package/dist/lib/strategies/deduplication.d.ts +10 -0
  156. package/dist/lib/strategies/deduplication.d.ts.map +1 -0
  157. package/dist/lib/strategies/deduplication.js +100 -0
  158. package/dist/lib/strategies/deduplication.js.map +1 -0
  159. package/dist/lib/strategies/index.d.ts +4 -0
  160. package/dist/lib/strategies/index.d.ts.map +1 -0
  161. package/dist/lib/strategies/index.js +4 -0
  162. package/dist/lib/strategies/index.js.map +1 -0
  163. package/dist/lib/strategies/purge-errors.d.ts +13 -0
  164. package/dist/lib/strategies/purge-errors.d.ts.map +1 -0
  165. package/dist/lib/strategies/purge-errors.js +62 -0
  166. package/dist/lib/strategies/purge-errors.js.map +1 -0
  167. package/dist/lib/strategies/supersede-writes.d.ts +13 -0
  168. package/dist/lib/strategies/supersede-writes.d.ts.map +1 -0
  169. package/dist/lib/strategies/supersede-writes.js +94 -0
  170. package/dist/lib/strategies/supersede-writes.js.map +1 -0
  171. package/dist/lib/strategies/utils.d.ts +21 -0
  172. package/dist/lib/strategies/utils.d.ts.map +1 -0
  173. package/dist/lib/strategies/utils.js +128 -0
  174. package/dist/lib/strategies/utils.js.map +1 -0
  175. package/dist/lib/subagents/subagent-results.d.ts +5 -0
  176. package/dist/lib/subagents/subagent-results.d.ts.map +1 -0
  177. package/dist/lib/subagents/subagent-results.js +52 -0
  178. package/dist/lib/subagents/subagent-results.js.map +1 -0
  179. package/dist/lib/tools/compress.d.ts +4 -0
  180. package/dist/lib/tools/compress.d.ts.map +1 -0
  181. package/dist/lib/tools/compress.js +110 -0
  182. package/dist/lib/tools/compress.js.map +1 -0
  183. package/dist/lib/tools/index.d.ts +3 -0
  184. package/dist/lib/tools/index.d.ts.map +1 -0
  185. package/dist/lib/tools/index.js +2 -0
  186. package/dist/lib/tools/index.js.map +1 -0
  187. package/dist/lib/tools/types.d.ts +13 -0
  188. package/dist/lib/tools/types.d.ts.map +1 -0
  189. package/dist/lib/tools/types.js +2 -0
  190. package/dist/lib/tools/types.js.map +1 -0
  191. package/dist/lib/tools/utils.d.ts +80 -0
  192. package/dist/lib/tools/utils.d.ts.map +1 -0
  193. package/dist/lib/tools/utils.js +675 -0
  194. package/dist/lib/tools/utils.js.map +1 -0
  195. package/dist/lib/ui/notification.d.ts +10 -0
  196. package/dist/lib/ui/notification.d.ts.map +1 -0
  197. package/dist/lib/ui/notification.js +182 -0
  198. package/dist/lib/ui/notification.js.map +1 -0
  199. package/dist/lib/ui/utils.d.ts +10 -0
  200. package/dist/lib/ui/utils.d.ts.map +1 -0
  201. package/dist/lib/ui/utils.js +255 -0
  202. package/dist/lib/ui/utils.js.map +1 -0
  203. package/package.json +61 -0
@@ -0,0 +1,107 @@
1
+ function normalizePath(input) {
2
+ return input.replaceAll("\\\\", "/");
3
+ }
4
+ function escapeRegExpChar(ch) {
5
+ return /[\\.^$+{}()|\[\]]/.test(ch) ? `\\${ch}` : ch;
6
+ }
7
+ export function matchesGlob(inputPath, pattern) {
8
+ if (!pattern)
9
+ return false;
10
+ const input = normalizePath(inputPath);
11
+ const pat = normalizePath(pattern);
12
+ let regex = "^";
13
+ for (let i = 0; i < pat.length; i++) {
14
+ const ch = pat[i];
15
+ if (ch === "*") {
16
+ const next = pat[i + 1];
17
+ if (next === "*") {
18
+ const after = pat[i + 2];
19
+ if (after === "/") {
20
+ // **/ (zero or more directories)
21
+ regex += "(?:.*/)?";
22
+ i += 2;
23
+ continue;
24
+ }
25
+ // **
26
+ regex += ".*";
27
+ i++;
28
+ continue;
29
+ }
30
+ // *
31
+ regex += "[^/]*";
32
+ continue;
33
+ }
34
+ if (ch === "?") {
35
+ regex += "[^/]";
36
+ continue;
37
+ }
38
+ if (ch === "/") {
39
+ regex += "/";
40
+ continue;
41
+ }
42
+ regex += escapeRegExpChar(ch);
43
+ }
44
+ regex += "$";
45
+ return new RegExp(regex).test(input);
46
+ }
47
+ export function getFilePathsFromParameters(tool, parameters) {
48
+ if (typeof parameters !== "object" || parameters === null) {
49
+ return [];
50
+ }
51
+ const paths = [];
52
+ const params = parameters;
53
+ // 1. apply_patch uses patchText with embedded paths
54
+ if (tool === "apply_patch" && typeof params.patchText === "string") {
55
+ const pathRegex = /\*\*\* (?:Add|Delete|Update) File: ([^\n\r]+)/g;
56
+ let match;
57
+ while ((match = pathRegex.exec(params.patchText)) !== null) {
58
+ paths.push(match[1].trim());
59
+ }
60
+ }
61
+ // 2. multiedit uses top-level filePath and nested edits array
62
+ if (tool === "multiedit") {
63
+ if (typeof params.filePath === "string") {
64
+ paths.push(params.filePath);
65
+ }
66
+ if (Array.isArray(params.edits)) {
67
+ for (const edit of params.edits) {
68
+ if (edit && typeof edit.filePath === "string") {
69
+ paths.push(edit.filePath);
70
+ }
71
+ }
72
+ }
73
+ }
74
+ // 3. Default check for common filePath parameter (read, write, edit, etc)
75
+ if (typeof params.filePath === "string") {
76
+ paths.push(params.filePath);
77
+ }
78
+ // Return unique non-empty paths
79
+ return [...new Set(paths)].filter((p) => p.length > 0);
80
+ }
81
+ export function isFilePathProtected(filePaths, patterns) {
82
+ if (!filePaths || filePaths.length === 0)
83
+ return false;
84
+ if (!patterns || patterns.length === 0)
85
+ return false;
86
+ return filePaths.some((path) => patterns.some((pattern) => matchesGlob(path, pattern)));
87
+ }
88
+ const GLOB_CHARS = /[*?]/;
89
+ export function isToolNameProtected(toolName, patterns) {
90
+ if (!toolName || !patterns || patterns.length === 0)
91
+ return false;
92
+ const exactPatterns = new Set();
93
+ const globPatterns = [];
94
+ for (const pattern of patterns) {
95
+ if (GLOB_CHARS.test(pattern)) {
96
+ globPatterns.push(pattern);
97
+ }
98
+ else {
99
+ exactPatterns.add(pattern);
100
+ }
101
+ }
102
+ if (exactPatterns.has(toolName)) {
103
+ return true;
104
+ }
105
+ return globPatterns.some((pattern) => matchesGlob(toolName, pattern));
106
+ }
107
+ //# sourceMappingURL=protected-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protected-patterns.js","sourceRoot":"","sources":["../../lib/protected-patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { PluginConfig } from "./config";
2
+ import { type HostPermissionSnapshot } from "./host-permissions";
3
+ import { SessionState, WithParts } from "./state";
4
+ export declare const isMessageCompacted: (state: SessionState, msg: WithParts) => boolean;
5
+ export declare const getLastUserMessage: (messages: WithParts[], startIndex?: number) => WithParts | null;
6
+ export declare const compressPermission: (state: SessionState, config: PluginConfig) => "ask" | "allow" | "deny";
7
+ export declare const syncCompressPermissionState: (state: SessionState, config: PluginConfig, hostPermissions: HostPermissionSnapshot, messages: WithParts[]) => void;
8
+ //# sourceMappingURL=shared-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-utils.d.ts","sourceRoot":"","sources":["../../lib/shared-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,KAAK,sBAAsB,EAAsC,MAAM,oBAAoB,CAAA;AACpG,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAGjD,eAAO,MAAM,kBAAkB,GAAI,OAAO,YAAY,EAAE,KAAK,SAAS,KAAG,OASxE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC3B,UAAU,SAAS,EAAE,EACrB,aAAa,MAAM,KACpB,SAAS,GAAG,IASd,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC3B,OAAO,YAAY,EACnB,QAAQ,YAAY,KACrB,KAAK,GAAG,OAAO,GAAG,MAEpB,CAAA;AAED,eAAO,MAAM,2BAA2B,GACpC,OAAO,YAAY,EACnB,QAAQ,YAAY,EACpB,iBAAiB,sBAAsB,EACvC,UAAU,SAAS,EAAE,KACtB,IAOF,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { resolveEffectiveCompressPermission } from "./host-permissions";
2
+ import { isIgnoredUserMessage } from "./messages/utils";
3
+ export const isMessageCompacted = (state, msg) => {
4
+ if (msg.info.time.created < state.lastCompaction) {
5
+ return true;
6
+ }
7
+ const pruneEntry = state.prune.messages.byMessageId.get(msg.info.id);
8
+ if (pruneEntry && pruneEntry.activeBlockIds.length > 0) {
9
+ return true;
10
+ }
11
+ return false;
12
+ };
13
+ export const getLastUserMessage = (messages, startIndex) => {
14
+ const start = startIndex ?? messages.length - 1;
15
+ for (let i = start; i >= 0; i--) {
16
+ const msg = messages[i];
17
+ if (msg.info.role === "user" && !isIgnoredUserMessage(msg)) {
18
+ return msg;
19
+ }
20
+ }
21
+ return null;
22
+ };
23
+ export const compressPermission = (state, config) => {
24
+ return state.compressPermission ?? config.compress.permission;
25
+ };
26
+ export const syncCompressPermissionState = (state, config, hostPermissions, messages) => {
27
+ const activeAgent = getLastUserMessage(messages)?.info.agent;
28
+ state.compressPermission = resolveEffectiveCompressPermission(config.compress.permission, hostPermissions, activeAgent);
29
+ };
30
+ //# sourceMappingURL=shared-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-utils.js","sourceRoot":"","sources":["../../lib/shared-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,kCAAkC,EAAE,MAAM,oBAAoB,CAAA;AAEpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAmB,EAAE,GAAc,EAAW,EAAE;IAC/E,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAA;IACf,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACpE,IAAI,UAAU,IAAI,UAAU,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAA;IACf,CAAC;IACD,OAAO,KAAK,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAC9B,QAAqB,EACrB,UAAmB,EACH,EAAE;IAClB,MAAM,KAAK,GAAG,UAAU,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;IAC/C,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,OAAO,GAAG,CAAA;QACd,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAC9B,KAAmB,EACnB,MAAoB,EACI,EAAE;IAC1B,OAAO,KAAK,CAAC,kBAAkB,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAA;AACjE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACvC,KAAmB,EACnB,MAAoB,EACpB,eAAuC,EACvC,QAAqB,EACjB,EAAE;IACN,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAA;IAC5D,KAAK,CAAC,kBAAkB,GAAG,kCAAkC,CACzD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAC1B,eAAe,EACf,WAAW,CACd,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from "./persistence";
2
+ export * from "./types";
3
+ export * from "./state";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/state/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from "./persistence";
2
+ export * from "./types";
3
+ export * from "./state";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/state/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * State persistence module for DCP plugin.
3
+ * Persists pruned tool IDs across sessions so they survive OpenCode restarts.
4
+ * Storage location: ~/.local/share/opencode/storage/plugin/dcp/{sessionId}.json
5
+ */
6
+ import type { CompressionBlock, PrunedMessageEntry, SessionState, SessionStats } from "./types";
7
+ import type { Logger } from "../logger";
8
+ /** Prune state as stored on disk */
9
+ export interface PersistedPruneMessagesState {
10
+ byMessageId: Record<string, PrunedMessageEntry>;
11
+ blocksById: Record<string, CompressionBlock>;
12
+ activeBlockIds: number[];
13
+ activeByAnchorMessageId: Record<string, number>;
14
+ nextBlockId: number;
15
+ }
16
+ export interface PersistedPrune {
17
+ tools?: Record<string, number>;
18
+ messages?: PersistedPruneMessagesState;
19
+ }
20
+ export interface PersistedNudges {
21
+ contextLimitAnchors: string[];
22
+ turnNudgeAnchors?: string[];
23
+ iterationNudgeAnchors?: string[];
24
+ }
25
+ export interface PersistedSessionState {
26
+ sessionName?: string;
27
+ prune: PersistedPrune;
28
+ nudges: PersistedNudges;
29
+ stats: SessionStats;
30
+ lastUpdated: string;
31
+ }
32
+ export declare function saveSessionState(sessionState: SessionState, logger: Logger, sessionName?: string): Promise<void>;
33
+ export declare function loadSessionState(sessionId: string, logger: Logger): Promise<PersistedSessionState | null>;
34
+ export interface AggregatedStats {
35
+ totalTokens: number;
36
+ totalTools: number;
37
+ totalMessages: number;
38
+ sessionCount: number;
39
+ }
40
+ export declare function loadAllSessionStats(logger: Logger): Promise<AggregatedStats>;
41
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC/F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,oCAAoC;AACpC,MAAM,WAAW,2BAA2B;IACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC5C,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/C,WAAW,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,EAAE,2BAA2B,CAAA;CACzC;AAED,MAAM,WAAW,eAAe;IAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,qBAAqB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,eAAe,CAAA;IACvB,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACtB;AAoBD,wBAAsB,gBAAgB,CAClC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED,wBAAsB,gBAAgB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAwFvC;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA2ClF"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * State persistence module for DCP plugin.
3
+ * Persists pruned tool IDs across sessions so they survive OpenCode restarts.
4
+ * Storage location: ~/.local/share/opencode/storage/plugin/dcp/{sessionId}.json
5
+ */
6
+ import * as fs from "fs/promises";
7
+ import { existsSync } from "fs";
8
+ import { homedir } from "os";
9
+ import { join } from "path";
10
+ const STORAGE_DIR = join(process.env.XDG_DATA_HOME || join(homedir(), ".local", "share"), "opencode", "storage", "plugin", "dcp");
11
+ async function ensureStorageDir() {
12
+ if (!existsSync(STORAGE_DIR)) {
13
+ await fs.mkdir(STORAGE_DIR, { recursive: true });
14
+ }
15
+ }
16
+ function getSessionFilePath(sessionId) {
17
+ return join(STORAGE_DIR, `${sessionId}.json`);
18
+ }
19
+ export async function saveSessionState(sessionState, logger, sessionName) {
20
+ try {
21
+ if (!sessionState.sessionId) {
22
+ return;
23
+ }
24
+ await ensureStorageDir();
25
+ const state = {
26
+ sessionName: sessionName,
27
+ prune: {
28
+ tools: Object.fromEntries(sessionState.prune.tools),
29
+ messages: {
30
+ byMessageId: Object.fromEntries(sessionState.prune.messages.byMessageId),
31
+ blocksById: Object.fromEntries(Array.from(sessionState.prune.messages.blocksById.entries()).map(([blockId, block]) => [String(blockId), block])),
32
+ activeBlockIds: Array.from(sessionState.prune.messages.activeBlockIds),
33
+ activeByAnchorMessageId: Object.fromEntries(sessionState.prune.messages.activeByAnchorMessageId),
34
+ nextBlockId: sessionState.prune.messages.nextBlockId,
35
+ },
36
+ },
37
+ nudges: {
38
+ contextLimitAnchors: Array.from(sessionState.nudges.contextLimitAnchors),
39
+ turnNudgeAnchors: Array.from(sessionState.nudges.turnNudgeAnchors),
40
+ iterationNudgeAnchors: Array.from(sessionState.nudges.iterationNudgeAnchors),
41
+ },
42
+ stats: sessionState.stats,
43
+ lastUpdated: new Date().toISOString(),
44
+ };
45
+ const filePath = getSessionFilePath(sessionState.sessionId);
46
+ const content = JSON.stringify(state, null, 2);
47
+ await fs.writeFile(filePath, content, "utf-8");
48
+ logger.info("Saved session state to disk", {
49
+ sessionId: sessionState.sessionId,
50
+ totalTokensSaved: state.stats.totalPruneTokens,
51
+ });
52
+ }
53
+ catch (error) {
54
+ logger.error("Failed to save session state", {
55
+ sessionId: sessionState.sessionId,
56
+ error: error?.message,
57
+ });
58
+ }
59
+ }
60
+ export async function loadSessionState(sessionId, logger) {
61
+ try {
62
+ const filePath = getSessionFilePath(sessionId);
63
+ if (!existsSync(filePath)) {
64
+ return null;
65
+ }
66
+ const content = await fs.readFile(filePath, "utf-8");
67
+ const state = JSON.parse(content);
68
+ const hasPruneTools = state?.prune?.tools && typeof state.prune.tools === "object";
69
+ const hasPruneMessages = state?.prune?.messages && typeof state.prune.messages === "object";
70
+ const hasNudgeFormat = state?.nudges && typeof state.nudges === "object";
71
+ if (!state ||
72
+ !state.prune ||
73
+ !hasPruneTools ||
74
+ !hasPruneMessages ||
75
+ !state.stats ||
76
+ !hasNudgeFormat) {
77
+ logger.warn("Invalid session state file, ignoring", {
78
+ sessionId: sessionId,
79
+ });
80
+ return null;
81
+ }
82
+ const rawContextLimitAnchors = Array.isArray(state.nudges.contextLimitAnchors)
83
+ ? state.nudges.contextLimitAnchors
84
+ : [];
85
+ const validAnchors = rawContextLimitAnchors.filter((entry) => typeof entry === "string");
86
+ const dedupedAnchors = [...new Set(validAnchors)];
87
+ if (validAnchors.length !== rawContextLimitAnchors.length) {
88
+ logger.warn("Filtered out malformed contextLimitAnchors entries", {
89
+ sessionId: sessionId,
90
+ original: rawContextLimitAnchors.length,
91
+ valid: validAnchors.length,
92
+ });
93
+ }
94
+ state.nudges.contextLimitAnchors = dedupedAnchors;
95
+ const rawTurnNudgeAnchors = Array.isArray(state.nudges.turnNudgeAnchors)
96
+ ? state.nudges.turnNudgeAnchors
97
+ : [];
98
+ const validSoftAnchors = rawTurnNudgeAnchors.filter((entry) => typeof entry === "string");
99
+ const dedupedSoftAnchors = [...new Set(validSoftAnchors)];
100
+ if (validSoftAnchors.length !== rawTurnNudgeAnchors.length) {
101
+ logger.warn("Filtered out malformed turnNudgeAnchors entries", {
102
+ sessionId: sessionId,
103
+ original: rawTurnNudgeAnchors.length,
104
+ valid: validSoftAnchors.length,
105
+ });
106
+ }
107
+ state.nudges.turnNudgeAnchors = dedupedSoftAnchors;
108
+ const rawIterationNudgeAnchors = Array.isArray(state.nudges.iterationNudgeAnchors)
109
+ ? state.nudges.iterationNudgeAnchors
110
+ : [];
111
+ const validIterationAnchors = rawIterationNudgeAnchors.filter((entry) => typeof entry === "string");
112
+ const dedupedIterationAnchors = [...new Set(validIterationAnchors)];
113
+ if (validIterationAnchors.length !== rawIterationNudgeAnchors.length) {
114
+ logger.warn("Filtered out malformed iterationNudgeAnchors entries", {
115
+ sessionId: sessionId,
116
+ original: rawIterationNudgeAnchors.length,
117
+ valid: validIterationAnchors.length,
118
+ });
119
+ }
120
+ state.nudges.iterationNudgeAnchors = dedupedIterationAnchors;
121
+ logger.info("Loaded session state from disk", {
122
+ sessionId: sessionId,
123
+ });
124
+ return state;
125
+ }
126
+ catch (error) {
127
+ logger.warn("Failed to load session state", {
128
+ sessionId: sessionId,
129
+ error: error?.message,
130
+ });
131
+ return null;
132
+ }
133
+ }
134
+ export async function loadAllSessionStats(logger) {
135
+ const result = {
136
+ totalTokens: 0,
137
+ totalTools: 0,
138
+ totalMessages: 0,
139
+ sessionCount: 0,
140
+ };
141
+ try {
142
+ if (!existsSync(STORAGE_DIR)) {
143
+ return result;
144
+ }
145
+ const files = await fs.readdir(STORAGE_DIR);
146
+ const jsonFiles = files.filter((f) => f.endsWith(".json"));
147
+ for (const file of jsonFiles) {
148
+ try {
149
+ const filePath = join(STORAGE_DIR, file);
150
+ const content = await fs.readFile(filePath, "utf-8");
151
+ const state = JSON.parse(content);
152
+ if (state?.stats?.totalPruneTokens && state?.prune) {
153
+ result.totalTokens += state.stats.totalPruneTokens;
154
+ result.totalTools += state.prune.tools
155
+ ? Object.keys(state.prune.tools).length
156
+ : 0;
157
+ result.totalMessages += state.prune.messages?.byMessageId
158
+ ? Object.keys(state.prune.messages.byMessageId).length
159
+ : 0;
160
+ result.sessionCount++;
161
+ }
162
+ }
163
+ catch {
164
+ // Skip invalid files
165
+ }
166
+ }
167
+ logger.debug("Loaded all-time stats", result);
168
+ }
169
+ catch (error) {
170
+ logger.warn("Failed to load all-time stats", { error: error?.message });
171
+ }
172
+ return result;
173
+ }
174
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAgC3B,MAAM,WAAW,GAAG,IAAI,CACpB,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAC/D,UAAU,EACV,SAAS,EACT,QAAQ,EACR,KAAK,CACR,CAAA;AAED,KAAK,UAAU,gBAAgB;IAC3B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACpD,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IACzC,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,OAAO,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,YAA0B,EAC1B,MAAc,EACd,WAAoB;IAEpB,IAAI,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAM;QACV,CAAC;QAED,MAAM,gBAAgB,EAAE,CAAA;QAExB,MAAM,KAAK,GAA0B;YACjC,WAAW,EAAE,WAAW;YACxB,KAAK,EAAE;gBACH,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;gBACnD,QAAQ,EAAE;oBACN,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACxE,UAAU,EAAE,MAAM,CAAC,WAAW,CAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAC5D,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CACjD,CACJ;oBACD,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;oBACtE,uBAAuB,EAAE,MAAM,CAAC,WAAW,CACvC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CACtD;oBACD,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;iBACvD;aACJ;YACD,MAAM,EAAE;gBACJ,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC;gBACxE,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAClE,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,qBAAqB,CAAC;aAC/E;YACD,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACxC,CAAA;QAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAC9C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAE9C,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YACvC,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB;SACjD,CAAC,CAAA;IACN,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;YACzC,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,KAAK,EAAE,KAAK,EAAE,OAAO;SACxB,CAAC,CAAA;IACN,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,SAAiB,EACjB,MAAc;IAEd,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAE9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAA;QACf,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA0B,CAAA;QAE1D,MAAM,aAAa,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAA;QAClF,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAA;QAC3F,MAAM,cAAc,GAAG,KAAK,EAAE,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAA;QACxE,IACI,CAAC,KAAK;YACN,CAAC,KAAK,CAAC,KAAK;YACZ,CAAC,aAAa;YACd,CAAC,gBAAgB;YACjB,CAAC,KAAK,CAAC,KAAK;YACZ,CAAC,cAAc,EACjB,CAAC;YACC,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE;gBAChD,SAAS,EAAE,SAAS;aACvB,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;QACf,CAAC;QAED,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAC1E,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB;YAClC,CAAC,CAAC,EAAE,CAAA;QACR,MAAM,YAAY,GAAG,sBAAsB,CAAC,MAAM,CAC9C,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CACxD,CAAA;QACD,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QACjD,IAAI,YAAY,CAAC,MAAM,KAAK,sBAAsB,CAAC,MAAM,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE;gBAC9D,SAAS,EAAE,SAAS;gBACpB,QAAQ,EAAE,sBAAsB,CAAC,MAAM;gBACvC,KAAK,EAAE,YAAY,CAAC,MAAM;aAC7B,CAAC,CAAA;QACN,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG,cAAc,CAAA;QAEjD,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACpE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB;YAC/B,CAAC,CAAC,EAAE,CAAA;QACR,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAC/C,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CACxD,CAAA;QACD,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACzD,IAAI,gBAAgB,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE;gBAC3D,SAAS,EAAE,SAAS;gBACpB,QAAQ,EAAE,mBAAmB,CAAC,MAAM;gBACpC,KAAK,EAAE,gBAAgB,CAAC,MAAM;aACjC,CAAC,CAAA;QACN,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,gBAAgB,GAAG,kBAAkB,CAAA;QAElD,MAAM,wBAAwB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC;YAC9E,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB;YACpC,CAAC,CAAC,EAAE,CAAA;QACR,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,MAAM,CACzD,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CACxD,CAAA;QACD,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAA;QACnE,IAAI,qBAAqB,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC,sDAAsD,EAAE;gBAChE,SAAS,EAAE,SAAS;gBACpB,QAAQ,EAAE,wBAAwB,CAAC,MAAM;gBACzC,KAAK,EAAE,qBAAqB,CAAC,MAAM;aACtC,CAAC,CAAA;QACN,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,qBAAqB,GAAG,uBAAuB,CAAA;QAE5D,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;YAC1C,SAAS,EAAE,SAAS;SACvB,CAAC,CAAA;QAEF,OAAO,KAAK,CAAA;IAChB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;YACxC,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,KAAK,EAAE,OAAO;SACxB,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACf,CAAC;AACL,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAc;IACpD,MAAM,MAAM,GAAoB;QAC5B,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;KAClB,CAAA;IAED,IAAI,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAA;QACjB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;QAE1D,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;gBACxC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA0B,CAAA;gBAE1D,IAAI,KAAK,EAAE,KAAK,EAAE,gBAAgB,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;oBACjD,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAA;oBAClD,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK;wBAClC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM;wBACvC,CAAC,CAAC,CAAC,CAAA;oBACP,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW;wBACrD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM;wBACtD,CAAC,CAAC,CAAC,CAAA;oBACP,MAAM,CAAC,YAAY,EAAE,CAAA;gBACzB,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,qBAAqB;YACzB,CAAC;QACL,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,MAAM,CAAA;AACjB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { SessionState, WithParts } from "./types";
2
+ import type { Logger } from "../logger";
3
+ export declare const checkSession: (client: any, state: SessionState, logger: Logger, messages: WithParts[], manualModeDefault: boolean) => Promise<void>;
4
+ export declare function createSessionState(): SessionState;
5
+ export declare function resetSessionState(state: SessionState): void;
6
+ export declare function ensureSessionInitialized(client: any, state: SessionState, sessionId: string, logger: Logger, messages: WithParts[], manualModeEnabled: boolean): Promise<void>;
7
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAsB,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAcvC,eAAO,MAAM,YAAY,GACrB,QAAQ,GAAG,EACX,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,UAAU,SAAS,EAAE,EACrB,mBAAmB,OAAO,KAC3B,OAAO,CAAC,IAAI,CAwCd,CAAA;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAkCjD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAgC3D;AAED,wBAAsB,wBAAwB,CAC1C,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,EACrB,iBAAiB,EAAE,OAAO,GAC3B,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -0,0 +1,134 @@
1
+ import { loadSessionState, saveSessionState } from "./persistence";
2
+ import { isSubAgentSession, findLastCompactionTimestamp, countTurns, resetOnCompaction, createPruneMessagesState, loadPruneMessagesState, loadPruneMap, collectTurnNudgeAnchors, } from "./utils";
3
+ import { getLastUserMessage } from "../shared-utils";
4
+ export const checkSession = async (client, state, logger, messages, manualModeDefault) => {
5
+ const lastUserMessage = getLastUserMessage(messages);
6
+ if (!lastUserMessage) {
7
+ return;
8
+ }
9
+ const lastSessionId = lastUserMessage.info.sessionID;
10
+ if (state.sessionId === null || state.sessionId !== lastSessionId) {
11
+ logger.info(`Session changed: ${state.sessionId} -> ${lastSessionId}`);
12
+ try {
13
+ await ensureSessionInitialized(client, state, lastSessionId, logger, messages, manualModeDefault);
14
+ }
15
+ catch (err) {
16
+ logger.error("Failed to initialize session state", { error: err.message });
17
+ }
18
+ }
19
+ const lastCompactionTimestamp = findLastCompactionTimestamp(messages);
20
+ if (lastCompactionTimestamp > state.lastCompaction) {
21
+ state.lastCompaction = lastCompactionTimestamp;
22
+ resetOnCompaction(state);
23
+ logger.info("Detected compaction - reset stale state", {
24
+ timestamp: lastCompactionTimestamp,
25
+ });
26
+ saveSessionState(state, logger).catch((error) => {
27
+ logger.warn("Failed to persist state reset after compaction", {
28
+ error: error instanceof Error ? error.message : String(error),
29
+ });
30
+ });
31
+ }
32
+ state.currentTurn = countTurns(state, messages);
33
+ };
34
+ export function createSessionState() {
35
+ return {
36
+ sessionId: null,
37
+ isSubAgent: false,
38
+ manualMode: false,
39
+ compressPermission: undefined,
40
+ pendingManualTrigger: null,
41
+ prune: {
42
+ tools: new Map(),
43
+ messages: createPruneMessagesState(),
44
+ },
45
+ nudges: {
46
+ contextLimitAnchors: new Set(),
47
+ turnNudgeAnchors: new Set(),
48
+ iterationNudgeAnchors: new Set(),
49
+ },
50
+ stats: {
51
+ pruneTokenCounter: 0,
52
+ totalPruneTokens: 0,
53
+ },
54
+ toolParameters: new Map(),
55
+ subAgentResultCache: new Map(),
56
+ toolIdList: [],
57
+ messageIds: {
58
+ byRawId: new Map(),
59
+ byRef: new Map(),
60
+ nextRef: 1,
61
+ },
62
+ lastCompaction: 0,
63
+ currentTurn: 0,
64
+ variant: undefined,
65
+ modelContextLimit: undefined,
66
+ systemPromptTokens: undefined,
67
+ };
68
+ }
69
+ export function resetSessionState(state) {
70
+ state.sessionId = null;
71
+ state.isSubAgent = false;
72
+ state.manualMode = false;
73
+ state.compressPermission = undefined;
74
+ state.pendingManualTrigger = null;
75
+ state.prune = {
76
+ tools: new Map(),
77
+ messages: createPruneMessagesState(),
78
+ };
79
+ state.nudges = {
80
+ contextLimitAnchors: new Set(),
81
+ turnNudgeAnchors: new Set(),
82
+ iterationNudgeAnchors: new Set(),
83
+ };
84
+ state.stats = {
85
+ pruneTokenCounter: 0,
86
+ totalPruneTokens: 0,
87
+ };
88
+ state.toolParameters.clear();
89
+ state.subAgentResultCache.clear();
90
+ state.toolIdList = [];
91
+ state.messageIds = {
92
+ byRawId: new Map(),
93
+ byRef: new Map(),
94
+ nextRef: 1,
95
+ };
96
+ state.lastCompaction = 0;
97
+ state.currentTurn = 0;
98
+ state.variant = undefined;
99
+ state.modelContextLimit = undefined;
100
+ state.systemPromptTokens = undefined;
101
+ }
102
+ export async function ensureSessionInitialized(client, state, sessionId, logger, messages, manualModeEnabled) {
103
+ if (state.sessionId === sessionId) {
104
+ return;
105
+ }
106
+ // logger.info("session ID = " + sessionId)
107
+ // logger.info("Initializing session state", { sessionId: sessionId })
108
+ resetSessionState(state);
109
+ state.manualMode = manualModeEnabled ? "active" : false;
110
+ state.sessionId = sessionId;
111
+ const isSubAgent = await isSubAgentSession(client, sessionId);
112
+ state.isSubAgent = isSubAgent;
113
+ // logger.info("isSubAgent = " + isSubAgent)
114
+ state.lastCompaction = findLastCompactionTimestamp(messages);
115
+ state.currentTurn = countTurns(state, messages);
116
+ state.nudges.turnNudgeAnchors = collectTurnNudgeAnchors(messages);
117
+ const persisted = await loadSessionState(sessionId, logger);
118
+ if (persisted === null) {
119
+ return;
120
+ }
121
+ state.prune.tools = loadPruneMap(persisted.prune.tools);
122
+ state.prune.messages = loadPruneMessagesState(persisted.prune.messages);
123
+ state.nudges.contextLimitAnchors = new Set(persisted.nudges.contextLimitAnchors || []);
124
+ state.nudges.turnNudgeAnchors = new Set([
125
+ ...state.nudges.turnNudgeAnchors,
126
+ ...(persisted.nudges.turnNudgeAnchors || []),
127
+ ]);
128
+ state.nudges.iterationNudgeAnchors = new Set(persisted.nudges.iterationNudgeAnchors || []);
129
+ state.stats = {
130
+ pruneTokenCounter: persisted.stats?.pruneTokenCounter || 0,
131
+ totalPruneTokens: persisted.stats?.totalPruneTokens || 0,
132
+ };
133
+ }
134
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { SessionState, WithParts } from "./index";
2
+ import type { Logger } from "../logger";
3
+ import { PluginConfig } from "../config";
4
+ /**
5
+ * Sync tool parameters from session messages.
6
+ */
7
+ export declare function syncToolCache(state: SessionState, config: PluginConfig, logger: Logger, messages: WithParts[]): void;
8
+ /**
9
+ * Trim the tool parameters cache to prevent unbounded memory growth.
10
+ * Uses FIFO eviction - removes oldest entries first.
11
+ */
12
+ export declare function trimToolParametersCache(state: SessionState): void;
13
+ //# sourceMappingURL=tool-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAc,SAAS,EAAE,MAAM,SAAS,CAAA;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAMxC;;GAEG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,GACtB,IAAI,CA8DN;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAajE"}