@tarquinen/opencode-dcp 3.1.9 → 3.1.11

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 (151) hide show
  1. package/README.md +5 -0
  2. package/dist/index.d.ts +2 -5
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +7905 -76
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/compress/message.d.ts.map +1 -1
  7. package/dist/lib/compress/protected-content.d.ts +2 -0
  8. package/dist/lib/compress/protected-content.d.ts.map +1 -1
  9. package/dist/lib/compress/range.d.ts.map +1 -1
  10. package/dist/lib/config.d.ts +2 -0
  11. package/dist/lib/config.d.ts.map +1 -1
  12. package/dist/lib/hooks.d.ts +2 -10
  13. package/dist/lib/hooks.d.ts.map +1 -1
  14. package/dist/lib/messages/index.d.ts +1 -0
  15. package/dist/lib/messages/index.d.ts.map +1 -1
  16. package/dist/lib/messages/inject/utils.d.ts +7 -0
  17. package/dist/lib/messages/inject/utils.d.ts.map +1 -1
  18. package/dist/lib/messages/utils.d.ts +1 -1
  19. package/dist/lib/messages/utils.d.ts.map +1 -1
  20. package/dist/lib/state/state.d.ts.map +1 -1
  21. package/dist/lib/state/types.d.ts +0 -1
  22. package/dist/lib/state/types.d.ts.map +1 -1
  23. package/dist/lib/update.d.ts +22 -0
  24. package/dist/lib/update.d.ts.map +1 -0
  25. package/package.json +6 -5
  26. package/dist/lib/auth.js +0 -32
  27. package/dist/lib/auth.js.map +0 -1
  28. package/dist/lib/commands/compression-targets.js +0 -98
  29. package/dist/lib/commands/compression-targets.js.map +0 -1
  30. package/dist/lib/commands/context.js +0 -239
  31. package/dist/lib/commands/context.js.map +0 -1
  32. package/dist/lib/commands/decompress.js +0 -174
  33. package/dist/lib/commands/decompress.js.map +0 -1
  34. package/dist/lib/commands/help.js +0 -52
  35. package/dist/lib/commands/help.js.map +0 -1
  36. package/dist/lib/commands/index.js +0 -8
  37. package/dist/lib/commands/index.js.map +0 -1
  38. package/dist/lib/commands/manual.js +0 -75
  39. package/dist/lib/commands/manual.js.map +0 -1
  40. package/dist/lib/commands/recompress.js +0 -140
  41. package/dist/lib/commands/recompress.js.map +0 -1
  42. package/dist/lib/commands/stats.js +0 -97
  43. package/dist/lib/commands/stats.js.map +0 -1
  44. package/dist/lib/commands/sweep.js +0 -195
  45. package/dist/lib/commands/sweep.js.map +0 -1
  46. package/dist/lib/compress/index.js +0 -3
  47. package/dist/lib/compress/index.js.map +0 -1
  48. package/dist/lib/compress/message-utils.js +0 -179
  49. package/dist/lib/compress/message-utils.js.map +0 -1
  50. package/dist/lib/compress/message.js +0 -82
  51. package/dist/lib/compress/message.js.map +0 -1
  52. package/dist/lib/compress/pipeline.js +0 -41
  53. package/dist/lib/compress/pipeline.js.map +0 -1
  54. package/dist/lib/compress/protected-content.js +0 -106
  55. package/dist/lib/compress/protected-content.js.map +0 -1
  56. package/dist/lib/compress/range-utils.js +0 -199
  57. package/dist/lib/compress/range-utils.js.map +0 -1
  58. package/dist/lib/compress/range.js +0 -90
  59. package/dist/lib/compress/range.js.map +0 -1
  60. package/dist/lib/compress/search.js +0 -204
  61. package/dist/lib/compress/search.js.map +0 -1
  62. package/dist/lib/compress/state.js +0 -213
  63. package/dist/lib/compress/state.js.map +0 -1
  64. package/dist/lib/compress/timing.js +0 -42
  65. package/dist/lib/compress/timing.js.map +0 -1
  66. package/dist/lib/compress/types.js +0 -2
  67. package/dist/lib/compress/types.js.map +0 -1
  68. package/dist/lib/compress-permission.js +0 -10
  69. package/dist/lib/compress-permission.js.map +0 -1
  70. package/dist/lib/config.js +0 -760
  71. package/dist/lib/config.js.map +0 -1
  72. package/dist/lib/hooks.js +0 -245
  73. package/dist/lib/hooks.js.map +0 -1
  74. package/dist/lib/host-permissions.js +0 -58
  75. package/dist/lib/host-permissions.js.map +0 -1
  76. package/dist/lib/logger.js +0 -204
  77. package/dist/lib/logger.js.map +0 -1
  78. package/dist/lib/message-ids.js +0 -128
  79. package/dist/lib/message-ids.js.map +0 -1
  80. package/dist/lib/messages/index.js +0 -9
  81. package/dist/lib/messages/index.js.map +0 -1
  82. package/dist/lib/messages/inject/inject.js +0 -128
  83. package/dist/lib/messages/inject/inject.js.map +0 -1
  84. package/dist/lib/messages/inject/subagent-results.js +0 -58
  85. package/dist/lib/messages/inject/subagent-results.js.map +0 -1
  86. package/dist/lib/messages/inject/utils.js +0 -211
  87. package/dist/lib/messages/inject/utils.js.map +0 -1
  88. package/dist/lib/messages/priority.js +0 -65
  89. package/dist/lib/messages/priority.js.map +0 -1
  90. package/dist/lib/messages/prune.js +0 -180
  91. package/dist/lib/messages/prune.js.map +0 -1
  92. package/dist/lib/messages/query.js +0 -52
  93. package/dist/lib/messages/query.js.map +0 -1
  94. package/dist/lib/messages/reasoning-strip.js +0 -33
  95. package/dist/lib/messages/reasoning-strip.js.map +0 -1
  96. package/dist/lib/messages/shape.js +0 -39
  97. package/dist/lib/messages/shape.js.map +0 -1
  98. package/dist/lib/messages/sync.js +0 -93
  99. package/dist/lib/messages/sync.js.map +0 -1
  100. package/dist/lib/messages/utils.js +0 -146
  101. package/dist/lib/messages/utils.js.map +0 -1
  102. package/dist/lib/prompts/compress-message.js +0 -44
  103. package/dist/lib/prompts/compress-message.js.map +0 -1
  104. package/dist/lib/prompts/compress-range.js +0 -61
  105. package/dist/lib/prompts/compress-range.js.map +0 -1
  106. package/dist/lib/prompts/context-limit-nudge.js +0 -19
  107. package/dist/lib/prompts/context-limit-nudge.js.map +0 -1
  108. package/dist/lib/prompts/extensions/nudge.js +0 -35
  109. package/dist/lib/prompts/extensions/nudge.js.map +0 -1
  110. package/dist/lib/prompts/extensions/system.js +0 -30
  111. package/dist/lib/prompts/extensions/system.js.map +0 -1
  112. package/dist/lib/prompts/extensions/tool.js +0 -34
  113. package/dist/lib/prompts/extensions/tool.js.map +0 -1
  114. package/dist/lib/prompts/index.js +0 -18
  115. package/dist/lib/prompts/index.js.map +0 -1
  116. package/dist/lib/prompts/iteration-nudge.js +0 -7
  117. package/dist/lib/prompts/iteration-nudge.js.map +0 -1
  118. package/dist/lib/prompts/store.js +0 -358
  119. package/dist/lib/prompts/store.js.map +0 -1
  120. package/dist/lib/prompts/system.js +0 -34
  121. package/dist/lib/prompts/system.js.map +0 -1
  122. package/dist/lib/prompts/turn-nudge.js +0 -11
  123. package/dist/lib/prompts/turn-nudge.js.map +0 -1
  124. package/dist/lib/protected-patterns.js +0 -107
  125. package/dist/lib/protected-patterns.js.map +0 -1
  126. package/dist/lib/state/index.js +0 -5
  127. package/dist/lib/state/index.js.map +0 -1
  128. package/dist/lib/state/persistence.js +0 -172
  129. package/dist/lib/state/persistence.js.map +0 -1
  130. package/dist/lib/state/state.js +0 -143
  131. package/dist/lib/state/state.js.map +0 -1
  132. package/dist/lib/state/tool-cache.js +0 -69
  133. package/dist/lib/state/tool-cache.js.map +0 -1
  134. package/dist/lib/state/types.js +0 -2
  135. package/dist/lib/state/types.js.map +0 -1
  136. package/dist/lib/state/utils.js +0 -265
  137. package/dist/lib/state/utils.js.map +0 -1
  138. package/dist/lib/strategies/deduplication.js +0 -100
  139. package/dist/lib/strategies/deduplication.js.map +0 -1
  140. package/dist/lib/strategies/index.js +0 -3
  141. package/dist/lib/strategies/index.js.map +0 -1
  142. package/dist/lib/strategies/purge-errors.js +0 -62
  143. package/dist/lib/strategies/purge-errors.js.map +0 -1
  144. package/dist/lib/subagents/subagent-results.js +0 -52
  145. package/dist/lib/subagents/subagent-results.js.map +0 -1
  146. package/dist/lib/token-utils.js +0 -133
  147. package/dist/lib/token-utils.js.map +0 -1
  148. package/dist/lib/ui/notification.js +0 -243
  149. package/dist/lib/ui/notification.js.map +0 -1
  150. package/dist/lib/ui/utils.js +0 -256
  151. package/dist/lib/ui/utils.js.map +0 -1
@@ -1,11 +0,0 @@
1
- export const TURN_NUDGE = `<dcp-system-reminder>
2
- Evaluate the conversation for compressible ranges.
3
-
4
- If any messages are cleanly closed and unlikely to be needed again, use the compress tool on them.
5
- If direction has shifted, compress earlier ranges that are now less relevant.
6
-
7
- The goal is to filter noise and distill key information so context accumulation stays under control.
8
- Keep active context uncompressed.
9
- </dcp-system-reminder>
10
- `;
11
- //# sourceMappingURL=turn-nudge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turn-nudge.js","sourceRoot":"","sources":["../../../lib/prompts/turn-nudge.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;CASzB,CAAA"}
@@ -1,107 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"protected-patterns.js","sourceRoot":"","sources":["../../lib/protected-patterns.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export * from "./persistence";
2
- export * from "./types";
3
- export * from "./state";
4
- export * from "./tool-cache";
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
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;AACvB,cAAc,cAAc,CAAA"}
@@ -1,172 +0,0 @@
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
- import { serializePruneMessagesState } from "./utils";
11
- const STORAGE_DIR = join(process.env.XDG_DATA_HOME || join(homedir(), ".local", "share"), "opencode", "storage", "plugin", "dcp");
12
- async function ensureStorageDir() {
13
- if (!existsSync(STORAGE_DIR)) {
14
- await fs.mkdir(STORAGE_DIR, { recursive: true });
15
- }
16
- }
17
- function getSessionFilePath(sessionId) {
18
- return join(STORAGE_DIR, `${sessionId}.json`);
19
- }
20
- async function writePersistedSessionState(sessionId, state, logger) {
21
- await ensureStorageDir();
22
- const filePath = getSessionFilePath(sessionId);
23
- const content = JSON.stringify(state, null, 2);
24
- await fs.writeFile(filePath, content, "utf-8");
25
- logger.info("Saved session state to disk", {
26
- sessionId,
27
- totalTokensSaved: state.stats.totalPruneTokens,
28
- });
29
- }
30
- export async function saveSessionState(sessionState, logger, sessionName) {
31
- try {
32
- if (!sessionState.sessionId) {
33
- return;
34
- }
35
- const state = {
36
- sessionName: sessionName,
37
- prune: {
38
- tools: Object.fromEntries(sessionState.prune.tools),
39
- messages: serializePruneMessagesState(sessionState.prune.messages),
40
- },
41
- nudges: {
42
- contextLimitAnchors: Array.from(sessionState.nudges.contextLimitAnchors),
43
- turnNudgeAnchors: Array.from(sessionState.nudges.turnNudgeAnchors),
44
- iterationNudgeAnchors: Array.from(sessionState.nudges.iterationNudgeAnchors),
45
- },
46
- stats: sessionState.stats,
47
- lastUpdated: new Date().toISOString(),
48
- };
49
- await writePersistedSessionState(sessionState.sessionId, state, logger);
50
- }
51
- catch (error) {
52
- logger.error("Failed to save session state", {
53
- sessionId: sessionState.sessionId,
54
- error: error?.message,
55
- });
56
- }
57
- }
58
- export async function loadSessionState(sessionId, logger) {
59
- try {
60
- const filePath = getSessionFilePath(sessionId);
61
- if (!existsSync(filePath)) {
62
- return null;
63
- }
64
- const content = await fs.readFile(filePath, "utf-8");
65
- const state = JSON.parse(content);
66
- const hasPruneTools = state?.prune?.tools && typeof state.prune.tools === "object";
67
- const hasPruneMessages = state?.prune?.messages && typeof state.prune.messages === "object";
68
- const hasNudgeFormat = state?.nudges && typeof state.nudges === "object";
69
- if (!state ||
70
- !state.prune ||
71
- !hasPruneTools ||
72
- !hasPruneMessages ||
73
- !state.stats ||
74
- !hasNudgeFormat) {
75
- logger.warn("Invalid session state file, ignoring", {
76
- sessionId: sessionId,
77
- });
78
- return null;
79
- }
80
- const rawContextLimitAnchors = Array.isArray(state.nudges.contextLimitAnchors)
81
- ? state.nudges.contextLimitAnchors
82
- : [];
83
- const validAnchors = rawContextLimitAnchors.filter((entry) => typeof entry === "string");
84
- const dedupedAnchors = [...new Set(validAnchors)];
85
- if (validAnchors.length !== rawContextLimitAnchors.length) {
86
- logger.warn("Filtered out malformed contextLimitAnchors entries", {
87
- sessionId: sessionId,
88
- original: rawContextLimitAnchors.length,
89
- valid: validAnchors.length,
90
- });
91
- }
92
- state.nudges.contextLimitAnchors = dedupedAnchors;
93
- const rawTurnNudgeAnchors = Array.isArray(state.nudges.turnNudgeAnchors)
94
- ? state.nudges.turnNudgeAnchors
95
- : [];
96
- const validSoftAnchors = rawTurnNudgeAnchors.filter((entry) => typeof entry === "string");
97
- const dedupedSoftAnchors = [...new Set(validSoftAnchors)];
98
- if (validSoftAnchors.length !== rawTurnNudgeAnchors.length) {
99
- logger.warn("Filtered out malformed turnNudgeAnchors entries", {
100
- sessionId: sessionId,
101
- original: rawTurnNudgeAnchors.length,
102
- valid: validSoftAnchors.length,
103
- });
104
- }
105
- state.nudges.turnNudgeAnchors = dedupedSoftAnchors;
106
- const rawIterationNudgeAnchors = Array.isArray(state.nudges.iterationNudgeAnchors)
107
- ? state.nudges.iterationNudgeAnchors
108
- : [];
109
- const validIterationAnchors = rawIterationNudgeAnchors.filter((entry) => typeof entry === "string");
110
- const dedupedIterationAnchors = [...new Set(validIterationAnchors)];
111
- if (validIterationAnchors.length !== rawIterationNudgeAnchors.length) {
112
- logger.warn("Filtered out malformed iterationNudgeAnchors entries", {
113
- sessionId: sessionId,
114
- original: rawIterationNudgeAnchors.length,
115
- valid: validIterationAnchors.length,
116
- });
117
- }
118
- state.nudges.iterationNudgeAnchors = dedupedIterationAnchors;
119
- logger.info("Loaded session state from disk", {
120
- sessionId: sessionId,
121
- });
122
- return state;
123
- }
124
- catch (error) {
125
- logger.warn("Failed to load session state", {
126
- sessionId: sessionId,
127
- error: error?.message,
128
- });
129
- return null;
130
- }
131
- }
132
- export async function loadAllSessionStats(logger) {
133
- const result = {
134
- totalTokens: 0,
135
- totalTools: 0,
136
- totalMessages: 0,
137
- sessionCount: 0,
138
- };
139
- try {
140
- if (!existsSync(STORAGE_DIR)) {
141
- return result;
142
- }
143
- const files = await fs.readdir(STORAGE_DIR);
144
- const jsonFiles = files.filter((f) => f.endsWith(".json"));
145
- for (const file of jsonFiles) {
146
- try {
147
- const filePath = join(STORAGE_DIR, file);
148
- const content = await fs.readFile(filePath, "utf-8");
149
- const state = JSON.parse(content);
150
- if (state?.stats?.totalPruneTokens && state?.prune) {
151
- result.totalTokens += state.stats.totalPruneTokens;
152
- result.totalTools += state.prune.tools
153
- ? Object.keys(state.prune.tools).length
154
- : 0;
155
- result.totalMessages += state.prune.messages?.byMessageId
156
- ? Object.keys(state.prune.messages.byMessageId).length
157
- : 0;
158
- result.sessionCount++;
159
- }
160
- }
161
- catch {
162
- // Skip invalid files
163
- }
164
- }
165
- logger.debug("Loaded all-time stats", result);
166
- }
167
- catch (error) {
168
- logger.warn("Failed to load all-time stats", { error: error?.message });
169
- }
170
- return result;
171
- }
172
- //# sourceMappingURL=persistence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"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"}
@@ -1,143 +0,0 @@
1
- import { applyPendingCompressionDurations } from "../compress/timing";
2
- import { loadSessionState, saveSessionState } from "./persistence";
3
- import { isSubAgentSession, findLastCompactionTimestamp, countTurns, resetOnCompaction, createPruneMessagesState, loadPruneMessagesState, loadPruneMap, collectTurnNudgeAnchors, } from "./utils";
4
- import { getLastUserMessage } from "../messages/query";
5
- export const checkSession = async (client, state, logger, messages, manualModeDefault) => {
6
- const lastUserMessage = getLastUserMessage(messages);
7
- if (!lastUserMessage) {
8
- return;
9
- }
10
- const lastSessionId = lastUserMessage.info.sessionID;
11
- if (state.sessionId === null || state.sessionId !== lastSessionId) {
12
- logger.info(`Session changed: ${state.sessionId} -> ${lastSessionId}`);
13
- try {
14
- await ensureSessionInitialized(client, state, lastSessionId, logger, messages, manualModeDefault);
15
- }
16
- catch (err) {
17
- logger.error("Failed to initialize session state", { error: err.message });
18
- }
19
- }
20
- const lastCompactionTimestamp = findLastCompactionTimestamp(messages);
21
- if (lastCompactionTimestamp > state.lastCompaction) {
22
- state.lastCompaction = lastCompactionTimestamp;
23
- resetOnCompaction(state);
24
- logger.info("Detected compaction - reset stale state", {
25
- timestamp: lastCompactionTimestamp,
26
- });
27
- saveSessionState(state, logger).catch((error) => {
28
- logger.warn("Failed to persist state reset after compaction", {
29
- error: error instanceof Error ? error.message : String(error),
30
- });
31
- });
32
- }
33
- state.currentTurn = countTurns(state, messages);
34
- };
35
- export function createSessionState() {
36
- return {
37
- sessionId: null,
38
- isSubAgent: false,
39
- manualMode: false,
40
- compressPermission: undefined,
41
- pendingManualTrigger: null,
42
- prune: {
43
- tools: new Map(),
44
- messages: createPruneMessagesState(),
45
- },
46
- nudges: {
47
- contextLimitAnchors: new Set(),
48
- turnNudgeAnchors: new Set(),
49
- iterationNudgeAnchors: new Set(),
50
- },
51
- stats: {
52
- pruneTokenCounter: 0,
53
- totalPruneTokens: 0,
54
- },
55
- compressionTiming: {
56
- startsByCallId: new Map(),
57
- pendingByCallId: new Map(),
58
- },
59
- toolParameters: new Map(),
60
- subAgentResultCache: new Map(),
61
- toolIdList: [],
62
- messageIds: {
63
- byRawId: new Map(),
64
- byRef: new Map(),
65
- nextRef: 1,
66
- },
67
- lastCompaction: 0,
68
- currentTurn: 0,
69
- variant: undefined,
70
- modelContextLimit: undefined,
71
- systemPromptTokens: undefined,
72
- };
73
- }
74
- export function resetSessionState(state) {
75
- state.sessionId = null;
76
- state.isSubAgent = false;
77
- state.manualMode = false;
78
- state.compressPermission = undefined;
79
- state.pendingManualTrigger = null;
80
- state.prune = {
81
- tools: new Map(),
82
- messages: createPruneMessagesState(),
83
- };
84
- state.nudges = {
85
- contextLimitAnchors: new Set(),
86
- turnNudgeAnchors: new Set(),
87
- iterationNudgeAnchors: new Set(),
88
- };
89
- state.stats = {
90
- pruneTokenCounter: 0,
91
- totalPruneTokens: 0,
92
- };
93
- state.toolParameters.clear();
94
- state.subAgentResultCache.clear();
95
- state.toolIdList = [];
96
- state.messageIds = {
97
- byRawId: new Map(),
98
- byRef: new Map(),
99
- nextRef: 1,
100
- };
101
- state.lastCompaction = 0;
102
- state.currentTurn = 0;
103
- state.variant = undefined;
104
- state.modelContextLimit = undefined;
105
- state.systemPromptTokens = undefined;
106
- }
107
- export async function ensureSessionInitialized(client, state, sessionId, logger, messages, manualModeEnabled) {
108
- if (state.sessionId === sessionId) {
109
- return;
110
- }
111
- // logger.info("session ID = " + sessionId)
112
- // logger.info("Initializing session state", { sessionId: sessionId })
113
- resetSessionState(state);
114
- state.manualMode = manualModeEnabled ? "active" : false;
115
- state.sessionId = sessionId;
116
- const isSubAgent = await isSubAgentSession(client, sessionId);
117
- state.isSubAgent = isSubAgent;
118
- // logger.info("isSubAgent = " + isSubAgent)
119
- state.lastCompaction = findLastCompactionTimestamp(messages);
120
- state.currentTurn = countTurns(state, messages);
121
- state.nudges.turnNudgeAnchors = collectTurnNudgeAnchors(messages);
122
- const persisted = await loadSessionState(sessionId, logger);
123
- if (persisted === null) {
124
- return;
125
- }
126
- state.prune.tools = loadPruneMap(persisted.prune.tools);
127
- state.prune.messages = loadPruneMessagesState(persisted.prune.messages);
128
- state.nudges.contextLimitAnchors = new Set(persisted.nudges.contextLimitAnchors || []);
129
- state.nudges.turnNudgeAnchors = new Set([
130
- ...state.nudges.turnNudgeAnchors,
131
- ...(persisted.nudges.turnNudgeAnchors || []),
132
- ]);
133
- state.nudges.iterationNudgeAnchors = new Set(persisted.nudges.iterationNudgeAnchors || []);
134
- state.stats = {
135
- pruneTokenCounter: persisted.stats?.pruneTokenCounter || 0,
136
- totalPruneTokens: persisted.stats?.totalPruneTokens || 0,
137
- };
138
- const applied = applyPendingCompressionDurations(state);
139
- if (applied > 0) {
140
- await saveSessionState(state, logger);
141
- }
142
- }
143
- //# sourceMappingURL=state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"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"}
@@ -1,69 +0,0 @@
1
- import { isMessageCompacted } from "./utils";
2
- import { countToolTokens } from "../token-utils";
3
- const MAX_TOOL_CACHE_SIZE = 1000;
4
- /**
5
- * Sync tool parameters from session messages.
6
- */
7
- export function syncToolCache(state, config, logger, messages) {
8
- try {
9
- logger.info("Syncing tool parameters from OpenCode messages");
10
- let turnCounter = 0;
11
- for (const msg of messages) {
12
- if (isMessageCompacted(state, msg)) {
13
- continue;
14
- }
15
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
16
- for (const part of parts) {
17
- if (part.type === "step-start") {
18
- turnCounter++;
19
- continue;
20
- }
21
- if (part.type !== "tool" || !part.callID) {
22
- continue;
23
- }
24
- const turnProtectionEnabled = config.turnProtection.enabled;
25
- const turnProtectionTurns = config.turnProtection.turns;
26
- const isProtectedByTurn = turnProtectionEnabled &&
27
- turnProtectionTurns > 0 &&
28
- state.currentTurn - turnCounter < turnProtectionTurns;
29
- if (state.toolParameters.has(part.callID)) {
30
- continue;
31
- }
32
- if (isProtectedByTurn) {
33
- continue;
34
- }
35
- const tokenCount = countToolTokens(part);
36
- state.toolParameters.set(part.callID, {
37
- tool: part.tool,
38
- parameters: part.state?.input ?? {},
39
- status: part.state.status,
40
- error: part.state.status === "error" ? part.state.error : undefined,
41
- turn: turnCounter,
42
- tokenCount,
43
- });
44
- logger.info(`Cached tool id: ${part.callID} (turn ${turnCounter}${tokenCount !== undefined ? `, ${tokenCount} tokens` : ""})`);
45
- }
46
- }
47
- logger.info(`Synced cache - size: ${state.toolParameters.size}, currentTurn: ${state.currentTurn}`);
48
- trimToolParametersCache(state);
49
- }
50
- catch (error) {
51
- logger.warn("Failed to sync tool parameters from OpenCode", {
52
- error: error instanceof Error ? error.message : String(error),
53
- });
54
- }
55
- }
56
- /**
57
- * Trim the tool parameters cache to prevent unbounded memory growth.
58
- * Uses FIFO eviction - removes oldest entries first.
59
- */
60
- export function trimToolParametersCache(state) {
61
- if (state.toolParameters.size <= MAX_TOOL_CACHE_SIZE) {
62
- return;
63
- }
64
- const keysToRemove = Array.from(state.toolParameters.keys()).slice(0, state.toolParameters.size - MAX_TOOL_CACHE_SIZE);
65
- for (const key of keysToRemove) {
66
- state.toolParameters.delete(key);
67
- }
68
- }
69
- //# sourceMappingURL=tool-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/state/types.ts"],"names":[],"mappings":""}