@tuanhung303/opencode-acp 0.0.1

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 (159) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +79 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/commands/budget.d.ts +15 -0
  8. package/dist/lib/commands/budget.d.ts.map +1 -0
  9. package/dist/lib/commands/budget.js +120 -0
  10. package/dist/lib/commands/budget.js.map +1 -0
  11. package/dist/lib/commands/context.d.ts +49 -0
  12. package/dist/lib/commands/context.d.ts.map +1 -0
  13. package/dist/lib/commands/context.js +191 -0
  14. package/dist/lib/commands/context.js.map +1 -0
  15. package/dist/lib/commands/help.d.ts +15 -0
  16. package/dist/lib/commands/help.d.ts.map +1 -0
  17. package/dist/lib/commands/help.js +28 -0
  18. package/dist/lib/commands/help.js.map +1 -0
  19. package/dist/lib/commands/protected.d.ts +17 -0
  20. package/dist/lib/commands/protected.d.ts.map +1 -0
  21. package/dist/lib/commands/protected.js +50 -0
  22. package/dist/lib/commands/protected.js.map +1 -0
  23. package/dist/lib/commands/stats.d.ts +15 -0
  24. package/dist/lib/commands/stats.d.ts.map +1 -0
  25. package/dist/lib/commands/stats.js +64 -0
  26. package/dist/lib/commands/stats.js.map +1 -0
  27. package/dist/lib/commands/sweep.d.ts +23 -0
  28. package/dist/lib/commands/sweep.d.ts.map +1 -0
  29. package/dist/lib/commands/sweep.js +194 -0
  30. package/dist/lib/commands/sweep.js.map +1 -0
  31. package/dist/lib/config-schema.d.ts +119 -0
  32. package/dist/lib/config-schema.d.ts.map +1 -0
  33. package/dist/lib/config-schema.js +97 -0
  34. package/dist/lib/config-schema.js.map +1 -0
  35. package/dist/lib/config.d.ts +59 -0
  36. package/dist/lib/config.d.ts.map +1 -0
  37. package/dist/lib/config.js +426 -0
  38. package/dist/lib/config.js.map +1 -0
  39. package/dist/lib/hooks.d.ts +31 -0
  40. package/dist/lib/hooks.d.ts.map +1 -0
  41. package/dist/lib/hooks.js +230 -0
  42. package/dist/lib/hooks.js.map +1 -0
  43. package/dist/lib/logger.d.ts +55 -0
  44. package/dist/lib/logger.d.ts.map +1 -0
  45. package/dist/lib/logger.js +230 -0
  46. package/dist/lib/logger.js.map +1 -0
  47. package/dist/lib/messages/index.d.ts +3 -0
  48. package/dist/lib/messages/index.d.ts.map +1 -0
  49. package/dist/lib/messages/index.js +3 -0
  50. package/dist/lib/messages/index.js.map +1 -0
  51. package/dist/lib/messages/inject.d.ts +10 -0
  52. package/dist/lib/messages/inject.d.ts.map +1 -0
  53. package/dist/lib/messages/inject.js +10 -0
  54. package/dist/lib/messages/inject.js.map +1 -0
  55. package/dist/lib/messages/prune.d.ts +13 -0
  56. package/dist/lib/messages/prune.d.ts.map +1 -0
  57. package/dist/lib/messages/prune.js +173 -0
  58. package/dist/lib/messages/prune.js.map +1 -0
  59. package/dist/lib/messages/utils.d.ts +43 -0
  60. package/dist/lib/messages/utils.d.ts.map +1 -0
  61. package/dist/lib/messages/utils.js +262 -0
  62. package/dist/lib/messages/utils.js.map +1 -0
  63. package/dist/lib/prompts/discard-tool-spec.d.ts +2 -0
  64. package/dist/lib/prompts/discard-tool-spec.d.ts.map +1 -0
  65. package/dist/lib/prompts/discard-tool-spec.js +54 -0
  66. package/dist/lib/prompts/discard-tool-spec.js.map +1 -0
  67. package/dist/lib/prompts/extract-tool-spec.d.ts +2 -0
  68. package/dist/lib/prompts/extract-tool-spec.d.ts.map +1 -0
  69. package/dist/lib/prompts/extract-tool-spec.js +56 -0
  70. package/dist/lib/prompts/extract-tool-spec.js.map +1 -0
  71. package/dist/lib/prompts/index.d.ts +2 -0
  72. package/dist/lib/prompts/index.d.ts.map +1 -0
  73. package/dist/lib/prompts/index.js +29 -0
  74. package/dist/lib/prompts/index.js.map +1 -0
  75. package/dist/lib/prompts/restore-tool-spec.d.ts +2 -0
  76. package/dist/lib/prompts/restore-tool-spec.d.ts.map +1 -0
  77. package/dist/lib/prompts/restore-tool-spec.js +37 -0
  78. package/dist/lib/prompts/restore-tool-spec.js.map +1 -0
  79. package/dist/lib/prompts/system/both.d.ts +2 -0
  80. package/dist/lib/prompts/system/both.d.ts.map +1 -0
  81. package/dist/lib/prompts/system/both.js +65 -0
  82. package/dist/lib/prompts/system/both.js.map +1 -0
  83. package/dist/lib/prompts/system/discard.d.ts +2 -0
  84. package/dist/lib/prompts/system/discard.d.ts.map +1 -0
  85. package/dist/lib/prompts/system/discard.js +55 -0
  86. package/dist/lib/prompts/system/discard.js.map +1 -0
  87. package/dist/lib/prompts/system/extract.d.ts +2 -0
  88. package/dist/lib/prompts/system/extract.d.ts.map +1 -0
  89. package/dist/lib/prompts/system/extract.js +55 -0
  90. package/dist/lib/prompts/system/extract.js.map +1 -0
  91. package/dist/lib/protected-file-patterns.d.ts +12 -0
  92. package/dist/lib/protected-file-patterns.d.ts.map +1 -0
  93. package/dist/lib/protected-file-patterns.js +69 -0
  94. package/dist/lib/protected-file-patterns.js.map +1 -0
  95. package/dist/lib/safe-execute.d.ts +20 -0
  96. package/dist/lib/safe-execute.d.ts.map +1 -0
  97. package/dist/lib/safe-execute.js +38 -0
  98. package/dist/lib/safe-execute.js.map +1 -0
  99. package/dist/lib/shared-utils.d.ts +4 -0
  100. package/dist/lib/shared-utils.d.ts.map +1 -0
  101. package/dist/lib/shared-utils.js +14 -0
  102. package/dist/lib/shared-utils.js.map +1 -0
  103. package/dist/lib/state/index.d.ts +4 -0
  104. package/dist/lib/state/index.d.ts.map +1 -0
  105. package/dist/lib/state/index.js +4 -0
  106. package/dist/lib/state/index.js.map +1 -0
  107. package/dist/lib/state/persistence.d.ts +27 -0
  108. package/dist/lib/state/persistence.d.ts.map +1 -0
  109. package/dist/lib/state/persistence.js +165 -0
  110. package/dist/lib/state/persistence.js.map +1 -0
  111. package/dist/lib/state/state.d.ts +8 -0
  112. package/dist/lib/state/state.d.ts.map +1 -0
  113. package/dist/lib/state/state.js +166 -0
  114. package/dist/lib/state/state.js.map +1 -0
  115. package/dist/lib/state/tool-cache.d.ts +15 -0
  116. package/dist/lib/state/tool-cache.d.ts.map +1 -0
  117. package/dist/lib/state/tool-cache.js +99 -0
  118. package/dist/lib/state/tool-cache.js.map +1 -0
  119. package/dist/lib/state/types.d.ts +83 -0
  120. package/dist/lib/state/types.d.ts.map +1 -0
  121. package/dist/lib/state/types.js +2 -0
  122. package/dist/lib/state/types.js.map +1 -0
  123. package/dist/lib/state/utils.d.ts +2 -0
  124. package/dist/lib/state/utils.d.ts.map +1 -0
  125. package/dist/lib/state/utils.js +10 -0
  126. package/dist/lib/state/utils.js.map +1 -0
  127. package/dist/lib/strategies/deduplication.d.ts +11 -0
  128. package/dist/lib/strategies/deduplication.d.ts.map +1 -0
  129. package/dist/lib/strategies/deduplication.js +178 -0
  130. package/dist/lib/strategies/deduplication.js.map +1 -0
  131. package/dist/lib/strategies/index.d.ts +5 -0
  132. package/dist/lib/strategies/index.d.ts.map +1 -0
  133. package/dist/lib/strategies/index.js +5 -0
  134. package/dist/lib/strategies/index.js.map +1 -0
  135. package/dist/lib/strategies/purge-errors.d.ts +13 -0
  136. package/dist/lib/strategies/purge-errors.d.ts.map +1 -0
  137. package/dist/lib/strategies/purge-errors.js +62 -0
  138. package/dist/lib/strategies/purge-errors.js.map +1 -0
  139. package/dist/lib/strategies/supersede-writes.d.ts +13 -0
  140. package/dist/lib/strategies/supersede-writes.d.ts.map +1 -0
  141. package/dist/lib/strategies/supersede-writes.js +90 -0
  142. package/dist/lib/strategies/supersede-writes.js.map +1 -0
  143. package/dist/lib/strategies/tools.d.ts +15 -0
  144. package/dist/lib/strategies/tools.d.ts.map +1 -0
  145. package/dist/lib/strategies/tools.js +288 -0
  146. package/dist/lib/strategies/tools.js.map +1 -0
  147. package/dist/lib/strategies/utils.d.ts +11 -0
  148. package/dist/lib/strategies/utils.d.ts.map +1 -0
  149. package/dist/lib/strategies/utils.js +75 -0
  150. package/dist/lib/strategies/utils.js.map +1 -0
  151. package/dist/lib/ui/notification.d.ts +12 -0
  152. package/dist/lib/ui/notification.d.ts.map +1 -0
  153. package/dist/lib/ui/notification.js +81 -0
  154. package/dist/lib/ui/notification.js.map +1 -0
  155. package/dist/lib/ui/utils.d.ts +10 -0
  156. package/dist/lib/ui/utils.d.ts.map +1 -0
  157. package/dist/lib/ui/utils.js +113 -0
  158. package/dist/lib/ui/utils.js.map +1 -0
  159. package/package.json +62 -0
@@ -0,0 +1,230 @@
1
+ import { syncToolCache } from "./state/tool-cache";
2
+ import { deduplicate, supersedeWrites, purgeErrors } from "./strategies";
3
+ import { prune, injectHashesIntoToolOutputs } from "./messages";
4
+ import { checkSession, ensureSessionInitialized } from "./state";
5
+ import { loadPrompt } from "./prompts";
6
+ import { handleStatsCommand } from "./commands/stats";
7
+ import { handleContextCommand } from "./commands/context";
8
+ import { handleHelpCommand } from "./commands/help";
9
+ import { handleSweepCommand } from "./commands/sweep";
10
+ import { handleProtectedCommand } from "./commands/protected";
11
+ import { handleBudgetCommand } from "./commands/budget";
12
+ import { safeExecute } from "./safe-execute";
13
+ import { sendUnifiedNotification } from "./ui/notification";
14
+ import { getCurrentParams } from "./strategies/utils";
15
+ import { saveSessionState } from "./state/persistence";
16
+ const INTERNAL_AGENT_SIGNATURES = [
17
+ "You are a title generator",
18
+ "You are a helpful AI assistant tasked with summarizing conversations",
19
+ "Summarize what was done in this conversation",
20
+ ];
21
+ export function createSystemPromptHandler(state, logger, config) {
22
+ return async (_input, output) => {
23
+ if (state.isSubAgent) {
24
+ return;
25
+ }
26
+ const systemText = output.system.join("\n");
27
+ if (INTERNAL_AGENT_SIGNATURES.some((sig) => systemText.includes(sig))) {
28
+ logger.info("Skipping ACP system prompt injection for internal agent");
29
+ return;
30
+ }
31
+ const discardEnabled = config.tools.discard.enabled;
32
+ const extractEnabled = config.tools.extract.enabled;
33
+ let promptName;
34
+ if (discardEnabled && extractEnabled) {
35
+ promptName = "system/system-prompt-both";
36
+ }
37
+ else if (discardEnabled) {
38
+ promptName = "system/system-prompt-discard";
39
+ }
40
+ else if (extractEnabled) {
41
+ promptName = "system/system-prompt-extract";
42
+ }
43
+ else {
44
+ return;
45
+ }
46
+ const syntheticPrompt = loadPrompt(promptName);
47
+ output.system.push(syntheticPrompt);
48
+ };
49
+ }
50
+ export function createChatMessageTransformHandler(client, state, logger, config) {
51
+ return async (input, output) => {
52
+ await checkSession(client, state, logger, output.messages);
53
+ if (state.isSubAgent) {
54
+ return;
55
+ }
56
+ const initialMessageCount = output.messages.length;
57
+ logger.debug("Transform starting", {
58
+ messageCount: initialMessageCount,
59
+ prunedToolIds: state.prune.toolIds.length,
60
+ });
61
+ // Detect new user message
62
+ const lastUserMessage = [...output.messages].reverse().find((m) => m.info.role === "user");
63
+ if (lastUserMessage && lastUserMessage.info.id !== state.lastUserMessageId) {
64
+ state.lastUserMessageId = lastUserMessage.info.id;
65
+ logger.info(`New user message detected (id: ${lastUserMessage.info.id})`);
66
+ }
67
+ syncToolCache(state, config, logger, output.messages);
68
+ // Inject hashes into tool outputs (before any pruning)
69
+ safeExecute(() => injectHashesIntoToolOutputs(state, config, output.messages, logger), logger, "injectHashesIntoToolOutputs");
70
+ // Run pruning strategies with error boundaries to prevent crashes
71
+ safeExecute(() => deduplicate(state, logger, config, output.messages), logger, "deduplicate");
72
+ safeExecute(() => supersedeWrites(state, logger, config, output.messages), logger, "supersedeWrites");
73
+ safeExecute(() => purgeErrors(state, logger, config, output.messages), logger, "purgeErrors");
74
+ safeExecute(() => prune(state, logger, config, output.messages), logger, "prune");
75
+ // NOTE: insertPruneToolContext removed - hashes are now embedded in tool outputs
76
+ logger.debug("Transform complete", {
77
+ initialMessageCount,
78
+ finalMessageCount: output.messages.length,
79
+ messagesAdded: output.messages.length - initialMessageCount,
80
+ lastMessageRole: output.messages[output.messages.length - 1]?.info.role,
81
+ });
82
+ if (state.sessionId) {
83
+ await logger.saveContext(state.sessionId, output.messages);
84
+ }
85
+ };
86
+ }
87
+ export function createCommandExecuteHandler(client, state, logger, config, workingDirectory) {
88
+ return async (input, _output) => {
89
+ if (!config.commands.enabled) {
90
+ return;
91
+ }
92
+ if (input.command === "acp") {
93
+ const args = (input.arguments || "").trim().split(/\s+/).filter(Boolean);
94
+ const subcommand = args[0]?.toLowerCase() || "";
95
+ const _subArgs = args.slice(1);
96
+ const messagesResponse = await client.session.messages({
97
+ path: { id: input.sessionID },
98
+ });
99
+ const messages = (messagesResponse.data || messagesResponse);
100
+ if (subcommand === "context") {
101
+ await handleContextCommand({
102
+ client,
103
+ state,
104
+ logger,
105
+ sessionId: input.sessionID,
106
+ messages,
107
+ });
108
+ throw new Error("__ACP_CONTEXT_HANDLED__");
109
+ }
110
+ if (subcommand === "stats") {
111
+ await handleStatsCommand({
112
+ client,
113
+ state,
114
+ logger,
115
+ sessionId: input.sessionID,
116
+ messages,
117
+ });
118
+ throw new Error("__ACP_STATS_HANDLED__");
119
+ }
120
+ if (subcommand === "sweep") {
121
+ await handleSweepCommand({
122
+ client,
123
+ state,
124
+ config,
125
+ logger,
126
+ sessionId: input.sessionID,
127
+ messages,
128
+ args: _subArgs,
129
+ workingDirectory,
130
+ });
131
+ throw new Error("__ACP_SWEEP_HANDLED__");
132
+ }
133
+ if (subcommand === "protected") {
134
+ await handleProtectedCommand({
135
+ client,
136
+ state,
137
+ config,
138
+ logger,
139
+ sessionId: input.sessionID,
140
+ messages,
141
+ });
142
+ throw new Error("__ACP_PROTECTED_HANDLED__");
143
+ }
144
+ if (subcommand === "budget") {
145
+ await handleBudgetCommand({
146
+ client,
147
+ state,
148
+ logger,
149
+ sessionId: input.sessionID,
150
+ messages,
151
+ });
152
+ throw new Error("__ACP_BUDGET_HANDLED__");
153
+ }
154
+ await handleHelpCommand({
155
+ client,
156
+ state,
157
+ logger,
158
+ sessionId: input.sessionID,
159
+ messages,
160
+ });
161
+ throw new Error("__ACP_HELP_HANDLED__");
162
+ }
163
+ };
164
+ }
165
+ /**
166
+ * Handler for tool.execute.after hook.
167
+ * Runs lightweight pruning strategies immediately after each tool execution
168
+ * to keep context clean throughout the conversation.
169
+ */
170
+ export function createToolExecuteAfterHandler(client, state, logger, config, workingDirectory) {
171
+ return async (input, _output) => {
172
+ if (!config.enabled) {
173
+ return;
174
+ }
175
+ if (!config.autoPruneAfterTool) {
176
+ return;
177
+ }
178
+ if (state.isSubAgent) {
179
+ return;
180
+ }
181
+ const sessionId = input.sessionID;
182
+ try {
183
+ // Fetch current messages
184
+ const messagesResponse = await client.session.messages({
185
+ path: { id: sessionId },
186
+ });
187
+ const messages = messagesResponse.data || messagesResponse;
188
+ // Ensure session is initialized
189
+ await ensureSessionInitialized(client, state, sessionId, logger, messages);
190
+ // Sync tool cache to pick up the just-executed tool
191
+ syncToolCache(state, config, logger, messages);
192
+ // Store initial prune count to detect changes
193
+ const initialPruneCount = state.prune.toolIds.length;
194
+ // Run lightweight strategies
195
+ safeExecute(() => deduplicate(state, logger, config, messages), logger, "deduplicate");
196
+ safeExecute(() => supersedeWrites(state, logger, config, messages), logger, "supersedeWrites");
197
+ safeExecute(() => purgeErrors(state, logger, config, messages), logger, "purgeErrors");
198
+ // Apply pruning
199
+ safeExecute(() => prune(state, logger, config, messages), logger, "prune");
200
+ // Check if anything was pruned
201
+ const newPruneCount = state.prune.toolIds.length;
202
+ const newlyPrunedCount = newPruneCount - initialPruneCount;
203
+ if (newlyPrunedCount > 0) {
204
+ // Get the newly pruned IDs
205
+ const newlyPrunedIds = state.prune.toolIds.slice(-newlyPrunedCount);
206
+ // Collect metadata for notification
207
+ const toolMetadata = new Map();
208
+ for (const callId of newlyPrunedIds) {
209
+ const toolParameters = state.toolParameters.get(callId);
210
+ if (toolParameters) {
211
+ toolMetadata.set(callId, toolParameters);
212
+ }
213
+ }
214
+ const currentParams = getCurrentParams(state, messages, logger);
215
+ // Send simplified notification
216
+ await sendUnifiedNotification(client, logger, config, state, sessionId, newlyPrunedIds, toolMetadata, undefined, currentParams, workingDirectory, undefined, { simplified: true });
217
+ // Save state
218
+ await saveSessionState(state, logger);
219
+ logger.debug(`Auto-pruned ${newlyPrunedCount} tool(s) after ${input.tool}`, {
220
+ toolName: input.tool,
221
+ prunedCount: newlyPrunedCount,
222
+ });
223
+ }
224
+ }
225
+ catch (error) {
226
+ logger.error("Error in tool.execute.after handler", { error: error.message });
227
+ }
228
+ };
229
+ }
230
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../lib/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export interface LogEntry {
2
+ timestamp: string;
3
+ level: "INFO" | "DEBUG" | "WARN" | "ERROR";
4
+ component: string;
5
+ message: string;
6
+ correlationId?: string;
7
+ data?: Record<string, unknown>;
8
+ }
9
+ export type LogFormat = "text" | "json";
10
+ export declare class Logger {
11
+ private logDir;
12
+ enabled: boolean;
13
+ private format;
14
+ private correlationId;
15
+ constructor(enabled: boolean, format?: LogFormat);
16
+ /**
17
+ * Set a correlation ID for tracing related log entries.
18
+ * Typically set to sessionId at the start of a session.
19
+ */
20
+ setCorrelationId(id: string): void;
21
+ /**
22
+ * Get the current correlation ID.
23
+ */
24
+ getCorrelationId(): string | undefined;
25
+ /**
26
+ * Set the log output format.
27
+ */
28
+ setFormat(format: LogFormat): void;
29
+ private ensureLogDir;
30
+ private formatData;
31
+ private getCallerFile;
32
+ private write;
33
+ info(message: string, data?: any): Promise<void>;
34
+ debug(message: string, data?: any): Promise<void>;
35
+ warn(message: string, data?: any): Promise<void>;
36
+ error(message: string, data?: any): Promise<void>;
37
+ /**
38
+ * Strips unnecessary metadata from messages for cleaner debug logs.
39
+ *
40
+ * Removed:
41
+ * - All IDs (id, sessionID, messageID, parentID, callID on parts)
42
+ * - summary, path, cost, model, agent, mode, finish, providerID, modelID
43
+ * - step-start and step-finish parts entirely
44
+ * - snapshot fields
45
+ * - ignored text parts
46
+ *
47
+ * Kept:
48
+ * - role, time (created only), tokens (input, output, reasoning, cache)
49
+ * - text, reasoning, tool parts with content
50
+ * - tool calls with: tool, callID, input, output
51
+ */
52
+ private minimizeForDebug;
53
+ saveContext(sessionId: string, messages: any[]): Promise<void>;
54
+ }
55
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAA;AAEvC,qBAAa,MAAM;IACf,OAAO,CAAC,MAAM,CAAQ;IACf,OAAO,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,aAAa,CAAoB;gBAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,SAAkB;IAOxD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAItC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;YAIpB,YAAY;IAM1B,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,aAAa;YAuBP,KAAK;IA4CnB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAKhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAKjC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAKhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAKjC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,gBAAgB;IAsElB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE;CAevD"}
@@ -0,0 +1,230 @@
1
+ import { writeFile, mkdir } from "fs/promises";
2
+ import { join } from "path";
3
+ import { existsSync } from "fs";
4
+ import { homedir } from "os";
5
+ export class Logger {
6
+ logDir;
7
+ enabled;
8
+ format;
9
+ correlationId;
10
+ constructor(enabled, format = "text") {
11
+ this.enabled = enabled;
12
+ this.format = format;
13
+ const opencodeConfigDir = join(homedir(), ".config", "opencode");
14
+ this.logDir = join(opencodeConfigDir, "logs", "acp");
15
+ }
16
+ /**
17
+ * Set a correlation ID for tracing related log entries.
18
+ * Typically set to sessionId at the start of a session.
19
+ */
20
+ setCorrelationId(id) {
21
+ this.correlationId = id;
22
+ }
23
+ /**
24
+ * Get the current correlation ID.
25
+ */
26
+ getCorrelationId() {
27
+ return this.correlationId;
28
+ }
29
+ /**
30
+ * Set the log output format.
31
+ */
32
+ setFormat(format) {
33
+ this.format = format;
34
+ }
35
+ async ensureLogDir() {
36
+ if (!existsSync(this.logDir)) {
37
+ await mkdir(this.logDir, { recursive: true });
38
+ }
39
+ }
40
+ formatData(data) {
41
+ if (!data)
42
+ return "";
43
+ const parts = [];
44
+ for (const [key, value] of Object.entries(data)) {
45
+ if (value === undefined || value === null)
46
+ continue;
47
+ // Format arrays compactly
48
+ if (Array.isArray(value)) {
49
+ if (value.length === 0)
50
+ continue;
51
+ parts.push(`${key}=[${value.slice(0, 3).join(",")}${value.length > 3 ? `...+${value.length - 3}` : ""}]`);
52
+ }
53
+ else if (typeof value === "object") {
54
+ const str = JSON.stringify(value);
55
+ if (str.length < 50) {
56
+ parts.push(`${key}=${str}`);
57
+ }
58
+ }
59
+ else {
60
+ parts.push(`${key}=${value}`);
61
+ }
62
+ }
63
+ return parts.join(" ");
64
+ }
65
+ getCallerFile(skipFrames = 3) {
66
+ const originalPrepareStackTrace = Error.prepareStackTrace;
67
+ try {
68
+ const err = new Error();
69
+ Error.prepareStackTrace = (_, stack) => stack;
70
+ const stack = err.stack;
71
+ Error.prepareStackTrace = originalPrepareStackTrace;
72
+ // Skip specified number of frames to get to actual caller
73
+ for (let i = skipFrames; i < stack.length; i++) {
74
+ const filename = stack[i]?.getFileName();
75
+ if (filename && !filename.includes("/logger.")) {
76
+ // Extract just the filename without path and extension
77
+ const match = filename.match(/([^/\\]+)\.[tj]s$/);
78
+ return match?.[1] ?? filename;
79
+ }
80
+ }
81
+ return "unknown";
82
+ }
83
+ catch {
84
+ return "unknown";
85
+ }
86
+ }
87
+ async write(level, component, message, data) {
88
+ if (!this.enabled)
89
+ return;
90
+ try {
91
+ await this.ensureLogDir();
92
+ const timestamp = new Date().toISOString();
93
+ let logLine;
94
+ if (this.format === "json") {
95
+ // Structured JSON format for production debugging
96
+ const entry = {
97
+ timestamp,
98
+ level,
99
+ component,
100
+ message,
101
+ ...(this.correlationId && { correlationId: this.correlationId }),
102
+ ...(data && { data }),
103
+ };
104
+ logLine = JSON.stringify(entry) + "\n";
105
+ }
106
+ else {
107
+ // Human-readable text format
108
+ const dataStr = this.formatData(data);
109
+ const correlationStr = this.correlationId
110
+ ? `[${this.correlationId.slice(0, 8)}] `
111
+ : "";
112
+ logLine = `${timestamp} ${level.padEnd(5)} ${correlationStr}${component}: ${message}${dataStr ? " | " + dataStr : ""}\n`;
113
+ }
114
+ const dailyLogDir = join(this.logDir, "daily");
115
+ if (!existsSync(dailyLogDir)) {
116
+ await mkdir(dailyLogDir, { recursive: true });
117
+ }
118
+ const logFile = join(dailyLogDir, `${new Date().toISOString().split("T")[0]}.log`);
119
+ await writeFile(logFile, logLine, { flag: "a" });
120
+ }
121
+ catch (error) { }
122
+ }
123
+ info(message, data) {
124
+ const component = this.getCallerFile(2);
125
+ return this.write("INFO", component, message, data);
126
+ }
127
+ debug(message, data) {
128
+ const component = this.getCallerFile(2);
129
+ return this.write("DEBUG", component, message, data);
130
+ }
131
+ warn(message, data) {
132
+ const component = this.getCallerFile(2);
133
+ return this.write("WARN", component, message, data);
134
+ }
135
+ error(message, data) {
136
+ const component = this.getCallerFile(2);
137
+ return this.write("ERROR", component, message, data);
138
+ }
139
+ /**
140
+ * Strips unnecessary metadata from messages for cleaner debug logs.
141
+ *
142
+ * Removed:
143
+ * - All IDs (id, sessionID, messageID, parentID, callID on parts)
144
+ * - summary, path, cost, model, agent, mode, finish, providerID, modelID
145
+ * - step-start and step-finish parts entirely
146
+ * - snapshot fields
147
+ * - ignored text parts
148
+ *
149
+ * Kept:
150
+ * - role, time (created only), tokens (input, output, reasoning, cache)
151
+ * - text, reasoning, tool parts with content
152
+ * - tool calls with: tool, callID, input, output
153
+ */
154
+ minimizeForDebug(messages) {
155
+ return messages.map((msg) => {
156
+ const minimized = {
157
+ role: msg.info?.role,
158
+ };
159
+ if (msg.info?.time?.created) {
160
+ minimized.time = msg.info.time.created;
161
+ }
162
+ if (msg.info?.tokens) {
163
+ minimized.tokens = {
164
+ input: msg.info.tokens.input,
165
+ output: msg.info.tokens.output,
166
+ reasoning: msg.info.tokens.reasoning,
167
+ cache: msg.info.tokens.cache,
168
+ };
169
+ }
170
+ if (msg.parts) {
171
+ minimized.parts = msg.parts
172
+ .map((part) => {
173
+ if (part.type === "step-start" || part.type === "step-finish") {
174
+ return null;
175
+ }
176
+ if (part.type === "text") {
177
+ if (part.ignored)
178
+ return null;
179
+ return { type: "text", text: part.text };
180
+ }
181
+ if (part.type === "reasoning") {
182
+ return {
183
+ type: "reasoning",
184
+ text: part.text,
185
+ };
186
+ }
187
+ if (part.type === "tool") {
188
+ const toolPart = {
189
+ type: "tool",
190
+ tool: part.tool,
191
+ callID: part.callID,
192
+ };
193
+ if (part.state?.status) {
194
+ toolPart.status = part.state.status;
195
+ }
196
+ if (part.state?.input) {
197
+ toolPart.input = part.state.input;
198
+ }
199
+ if (part.state?.output) {
200
+ toolPart.output = part.state.output;
201
+ }
202
+ if (part.state?.error) {
203
+ toolPart.error = part.state.error;
204
+ }
205
+ return toolPart;
206
+ }
207
+ return null;
208
+ })
209
+ .filter(Boolean);
210
+ }
211
+ return minimized;
212
+ });
213
+ }
214
+ async saveContext(sessionId, messages) {
215
+ if (!this.enabled)
216
+ return;
217
+ try {
218
+ const contextDir = join(this.logDir, "context", sessionId);
219
+ if (!existsSync(contextDir)) {
220
+ await mkdir(contextDir, { recursive: true });
221
+ }
222
+ const minimized = this.minimizeForDebug(messages);
223
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
224
+ const contextFile = join(contextDir, `${timestamp}.json`);
225
+ await writeFile(contextFile, JSON.stringify(minimized, null, 2));
226
+ }
227
+ catch (error) { }
228
+ }
229
+ }
230
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAa5B,MAAM,OAAO,MAAM;IACP,MAAM,CAAQ;IACf,OAAO,CAAS;IACf,MAAM,CAAW;IACjB,aAAa,CAAoB;IAEzC,YAAY,OAAgB,EAAE,SAAoB,MAAM;QACpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;QAChE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACxD,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,EAAU;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACZ,OAAO,IAAI,CAAC,aAAa,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAiB;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAEO,KAAK,CAAC,YAAY;QACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,IAAU;QACzB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAA;QAEpB,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAQ;YAEnD,0BAA0B;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAQ;gBAChC,KAAK,CAAC,IAAI,CACN,GAAG,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAChG,CAAA;YACL,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;gBACjC,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;oBAClB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAA;gBAC/B,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAA;YACjC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAEO,aAAa,CAAC,aAAqB,CAAC;QACxC,MAAM,yBAAyB,GAAG,KAAK,CAAC,iBAAiB,CAAA;QACzD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAA;YACvB,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAA;YAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAqC,CAAA;YACvD,KAAK,CAAC,iBAAiB,GAAG,yBAAyB,CAAA;YAEnD,0DAA0D;YAC1D,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAA;gBACxC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC7C,uDAAuD;oBACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;oBACjD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAA;gBACjC,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAA;QACpB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAA;QACpB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,KAAK,CACf,KAA0C,EAC1C,SAAiB,EACjB,OAAe,EACf,IAAU;QAEV,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEzB,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;YAEzB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YAE1C,IAAI,OAAe,CAAA;YACnB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACzB,kDAAkD;gBAClD,MAAM,KAAK,GAAa;oBACpB,SAAS;oBACT,KAAK;oBACL,SAAS;oBACT,OAAO;oBACP,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;oBAChE,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;iBACxB,CAAA;gBACD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;YAC1C,CAAC;iBAAM,CAAC;gBACJ,6BAA6B;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBACrC,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa;oBACrC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI;oBACxC,CAAC,CAAC,EAAE,CAAA;gBACR,OAAO,GAAG,GAAG,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,cAAc,GAAG,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAA;YAC5H,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC9C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3B,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACjD,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAClF,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAU;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAU;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACxD,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACK,gBAAgB,CAAC,QAAe;QACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACxB,MAAM,SAAS,GAAQ;gBACnB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI;aACvB,CAAA;YAED,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC1B,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;YAC1C,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACnB,SAAS,CAAC,MAAM,GAAG;oBACf,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;oBAC5B,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;oBAC9B,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;oBACpC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;iBAC/B,CAAA;YACL,CAAC;YAED,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACZ,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;qBACtB,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;oBACf,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;wBAC5D,OAAO,IAAI,CAAA;oBACf,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACvB,IAAI,IAAI,CAAC,OAAO;4BAAE,OAAO,IAAI,CAAA;wBAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;oBAC5C,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBAC5B,OAAO;4BACH,IAAI,EAAE,WAAW;4BACjB,IAAI,EAAE,IAAI,CAAC,IAAI;yBAClB,CAAA;oBACL,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACvB,MAAM,QAAQ,GAAQ;4BAClB,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,MAAM,EAAE,IAAI,CAAC,MAAM;yBACtB,CAAA;wBAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;4BACrB,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;wBACvC,CAAC;wBACD,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;4BACpB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA;wBACrC,CAAC;wBACD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;4BACrB,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;wBACvC,CAAC;wBACD,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;4BACpB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA;wBACrC,CAAC;wBAED,OAAO,QAAQ,CAAA;oBACnB,CAAC;oBAED,OAAO,IAAI,CAAA;gBACf,CAAC,CAAC;qBACD,MAAM,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC;YAED,OAAO,SAAS,CAAA;QACpB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,QAAe;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEzB,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;YAC1D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAChD,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;YACjD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,OAAO,CAAC,CAAA;YACzD,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IACtB,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ export { prune, injectHashesIntoToolOutputs } from "./prune";
2
+ export { insertPruneToolContext } from "./inject";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { prune, injectHashesIntoToolOutputs } from "./prune";
2
+ export { insertPruneToolContext } from "./inject";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { SessionState, WithParts } from "../state";
2
+ import type { Logger } from "../logger";
3
+ import type { PluginConfig } from "../config";
4
+ /**
5
+ * @deprecated This function is no longer used. Hash-based discarding embeds
6
+ * hashes directly into tool outputs instead of injecting a prunable-tools list.
7
+ * Kept for backward compatibility but does nothing.
8
+ */
9
+ export declare const insertPruneToolContext: (_state: SessionState, _config: PluginConfig, _logger: Logger, _messages: WithParts[]) => void;
10
+ //# sourceMappingURL=inject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../../lib/messages/inject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAC/B,QAAQ,YAAY,EACpB,SAAS,YAAY,EACrB,SAAS,MAAM,EACf,WAAW,SAAS,EAAE,KACvB,IAGF,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @deprecated This function is no longer used. Hash-based discarding embeds
3
+ * hashes directly into tool outputs instead of injecting a prunable-tools list.
4
+ * Kept for backward compatibility but does nothing.
5
+ */
6
+ export const insertPruneToolContext = (_state, _config, _logger, _messages) => {
7
+ // No-op: Hash-based discarding doesn't need list injection.
8
+ // Hashes are embedded directly into tool outputs via injectHashesIntoToolOutputs()
9
+ };
10
+ //# sourceMappingURL=inject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../lib/messages/inject.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAClC,MAAoB,EACpB,OAAqB,EACrB,OAAe,EACf,SAAsB,EAClB,EAAE;IACN,4DAA4D;IAC5D,mFAAmF;AACvF,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { SessionState, WithParts } from "../state";
2
+ import type { Logger } from "../logger";
3
+ import type { PluginConfig } from "../config";
4
+ /**
5
+ * Injects hash identifiers into tool outputs for hash-based discarding.
6
+ * Format: #x_xxxxx#\n<original output>
7
+ *
8
+ * This allows agents to reference tools by their stable hash when discarding,
9
+ * eliminating the need for a separate prunable-tools list.
10
+ */
11
+ export declare const injectHashesIntoToolOutputs: (state: SessionState, config: PluginConfig, messages: WithParts[], logger: Logger) => void;
12
+ export declare const prune: (state: SessionState, logger: Logger, config: PluginConfig, messages: WithParts[]) => void;
13
+ //# sourceMappingURL=prune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../../lib/messages/prune.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAM7C;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GACpC,OAAO,YAAY,EACnB,QAAQ,YAAY,EACpB,UAAU,SAAS,EAAE,EACrB,QAAQ,MAAM,KACf,IA8CF,CAAA;AAoDD,eAAO,MAAM,KAAK,GACd,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,QAAQ,YAAY,EACpB,UAAU,SAAS,EAAE,KACtB,IAIF,CAAA"}