@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.
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/commands/budget.d.ts +15 -0
- package/dist/lib/commands/budget.d.ts.map +1 -0
- package/dist/lib/commands/budget.js +120 -0
- package/dist/lib/commands/budget.js.map +1 -0
- package/dist/lib/commands/context.d.ts +49 -0
- package/dist/lib/commands/context.d.ts.map +1 -0
- package/dist/lib/commands/context.js +191 -0
- package/dist/lib/commands/context.js.map +1 -0
- package/dist/lib/commands/help.d.ts +15 -0
- package/dist/lib/commands/help.d.ts.map +1 -0
- package/dist/lib/commands/help.js +28 -0
- package/dist/lib/commands/help.js.map +1 -0
- package/dist/lib/commands/protected.d.ts +17 -0
- package/dist/lib/commands/protected.d.ts.map +1 -0
- package/dist/lib/commands/protected.js +50 -0
- package/dist/lib/commands/protected.js.map +1 -0
- package/dist/lib/commands/stats.d.ts +15 -0
- package/dist/lib/commands/stats.d.ts.map +1 -0
- package/dist/lib/commands/stats.js +64 -0
- package/dist/lib/commands/stats.js.map +1 -0
- package/dist/lib/commands/sweep.d.ts +23 -0
- package/dist/lib/commands/sweep.d.ts.map +1 -0
- package/dist/lib/commands/sweep.js +194 -0
- package/dist/lib/commands/sweep.js.map +1 -0
- package/dist/lib/config-schema.d.ts +119 -0
- package/dist/lib/config-schema.d.ts.map +1 -0
- package/dist/lib/config-schema.js +97 -0
- package/dist/lib/config-schema.js.map +1 -0
- package/dist/lib/config.d.ts +59 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +426 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/hooks.d.ts +31 -0
- package/dist/lib/hooks.d.ts.map +1 -0
- package/dist/lib/hooks.js +230 -0
- package/dist/lib/hooks.js.map +1 -0
- package/dist/lib/logger.d.ts +55 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +230 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/messages/index.d.ts +3 -0
- package/dist/lib/messages/index.d.ts.map +1 -0
- package/dist/lib/messages/index.js +3 -0
- package/dist/lib/messages/index.js.map +1 -0
- package/dist/lib/messages/inject.d.ts +10 -0
- package/dist/lib/messages/inject.d.ts.map +1 -0
- package/dist/lib/messages/inject.js +10 -0
- package/dist/lib/messages/inject.js.map +1 -0
- package/dist/lib/messages/prune.d.ts +13 -0
- package/dist/lib/messages/prune.d.ts.map +1 -0
- package/dist/lib/messages/prune.js +173 -0
- package/dist/lib/messages/prune.js.map +1 -0
- package/dist/lib/messages/utils.d.ts +43 -0
- package/dist/lib/messages/utils.d.ts.map +1 -0
- package/dist/lib/messages/utils.js +262 -0
- package/dist/lib/messages/utils.js.map +1 -0
- package/dist/lib/prompts/discard-tool-spec.d.ts +2 -0
- package/dist/lib/prompts/discard-tool-spec.d.ts.map +1 -0
- package/dist/lib/prompts/discard-tool-spec.js +54 -0
- package/dist/lib/prompts/discard-tool-spec.js.map +1 -0
- package/dist/lib/prompts/extract-tool-spec.d.ts +2 -0
- package/dist/lib/prompts/extract-tool-spec.d.ts.map +1 -0
- package/dist/lib/prompts/extract-tool-spec.js +56 -0
- package/dist/lib/prompts/extract-tool-spec.js.map +1 -0
- package/dist/lib/prompts/index.d.ts +2 -0
- package/dist/lib/prompts/index.d.ts.map +1 -0
- package/dist/lib/prompts/index.js +29 -0
- package/dist/lib/prompts/index.js.map +1 -0
- package/dist/lib/prompts/restore-tool-spec.d.ts +2 -0
- package/dist/lib/prompts/restore-tool-spec.d.ts.map +1 -0
- package/dist/lib/prompts/restore-tool-spec.js +37 -0
- package/dist/lib/prompts/restore-tool-spec.js.map +1 -0
- package/dist/lib/prompts/system/both.d.ts +2 -0
- package/dist/lib/prompts/system/both.d.ts.map +1 -0
- package/dist/lib/prompts/system/both.js +65 -0
- package/dist/lib/prompts/system/both.js.map +1 -0
- package/dist/lib/prompts/system/discard.d.ts +2 -0
- package/dist/lib/prompts/system/discard.d.ts.map +1 -0
- package/dist/lib/prompts/system/discard.js +55 -0
- package/dist/lib/prompts/system/discard.js.map +1 -0
- package/dist/lib/prompts/system/extract.d.ts +2 -0
- package/dist/lib/prompts/system/extract.d.ts.map +1 -0
- package/dist/lib/prompts/system/extract.js +55 -0
- package/dist/lib/prompts/system/extract.js.map +1 -0
- package/dist/lib/protected-file-patterns.d.ts +12 -0
- package/dist/lib/protected-file-patterns.d.ts.map +1 -0
- package/dist/lib/protected-file-patterns.js +69 -0
- package/dist/lib/protected-file-patterns.js.map +1 -0
- package/dist/lib/safe-execute.d.ts +20 -0
- package/dist/lib/safe-execute.d.ts.map +1 -0
- package/dist/lib/safe-execute.js +38 -0
- package/dist/lib/safe-execute.js.map +1 -0
- package/dist/lib/shared-utils.d.ts +4 -0
- package/dist/lib/shared-utils.d.ts.map +1 -0
- package/dist/lib/shared-utils.js +14 -0
- package/dist/lib/shared-utils.js.map +1 -0
- package/dist/lib/state/index.d.ts +4 -0
- package/dist/lib/state/index.d.ts.map +1 -0
- package/dist/lib/state/index.js +4 -0
- package/dist/lib/state/index.js.map +1 -0
- package/dist/lib/state/persistence.d.ts +27 -0
- package/dist/lib/state/persistence.d.ts.map +1 -0
- package/dist/lib/state/persistence.js +165 -0
- package/dist/lib/state/persistence.js.map +1 -0
- package/dist/lib/state/state.d.ts +8 -0
- package/dist/lib/state/state.d.ts.map +1 -0
- package/dist/lib/state/state.js +166 -0
- package/dist/lib/state/state.js.map +1 -0
- package/dist/lib/state/tool-cache.d.ts +15 -0
- package/dist/lib/state/tool-cache.d.ts.map +1 -0
- package/dist/lib/state/tool-cache.js +99 -0
- package/dist/lib/state/tool-cache.js.map +1 -0
- package/dist/lib/state/types.d.ts +83 -0
- package/dist/lib/state/types.d.ts.map +1 -0
- package/dist/lib/state/types.js +2 -0
- package/dist/lib/state/types.js.map +1 -0
- package/dist/lib/state/utils.d.ts +2 -0
- package/dist/lib/state/utils.d.ts.map +1 -0
- package/dist/lib/state/utils.js +10 -0
- package/dist/lib/state/utils.js.map +1 -0
- package/dist/lib/strategies/deduplication.d.ts +11 -0
- package/dist/lib/strategies/deduplication.d.ts.map +1 -0
- package/dist/lib/strategies/deduplication.js +178 -0
- package/dist/lib/strategies/deduplication.js.map +1 -0
- package/dist/lib/strategies/index.d.ts +5 -0
- package/dist/lib/strategies/index.d.ts.map +1 -0
- package/dist/lib/strategies/index.js +5 -0
- package/dist/lib/strategies/index.js.map +1 -0
- package/dist/lib/strategies/purge-errors.d.ts +13 -0
- package/dist/lib/strategies/purge-errors.d.ts.map +1 -0
- package/dist/lib/strategies/purge-errors.js +62 -0
- package/dist/lib/strategies/purge-errors.js.map +1 -0
- package/dist/lib/strategies/supersede-writes.d.ts +13 -0
- package/dist/lib/strategies/supersede-writes.d.ts.map +1 -0
- package/dist/lib/strategies/supersede-writes.js +90 -0
- package/dist/lib/strategies/supersede-writes.js.map +1 -0
- package/dist/lib/strategies/tools.d.ts +15 -0
- package/dist/lib/strategies/tools.d.ts.map +1 -0
- package/dist/lib/strategies/tools.js +288 -0
- package/dist/lib/strategies/tools.js.map +1 -0
- package/dist/lib/strategies/utils.d.ts +11 -0
- package/dist/lib/strategies/utils.d.ts.map +1 -0
- package/dist/lib/strategies/utils.js +75 -0
- package/dist/lib/strategies/utils.js.map +1 -0
- package/dist/lib/ui/notification.d.ts +12 -0
- package/dist/lib/ui/notification.d.ts.map +1 -0
- package/dist/lib/ui/notification.js +81 -0
- package/dist/lib/ui/notification.js.map +1 -0
- package/dist/lib/ui/utils.d.ts +10 -0
- package/dist/lib/ui/utils.d.ts.map +1 -0
- package/dist/lib/ui/utils.js +113 -0
- package/dist/lib/ui/utils.js.map +1 -0
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|