@sean.holung/minicode 0.2.2 → 0.2.4

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 (39) hide show
  1. package/README.md +20 -12
  2. package/dist/src/agent/config.js +14 -2
  3. package/dist/src/cli/args.js +31 -0
  4. package/dist/src/index.js +21 -2
  5. package/dist/src/indexer/code-map.js +52 -5
  6. package/dist/src/indexer/focus-tracker.js +63 -0
  7. package/dist/src/indexer/project-index.js +2 -2
  8. package/dist/src/serve/agent-bridge.js +233 -0
  9. package/dist/src/serve/openai-compat.js +144 -0
  10. package/dist/src/serve/server.js +251 -0
  11. package/dist/src/serve/types.js +2 -0
  12. package/dist/src/serve/websocket.js +28 -0
  13. package/dist/src/ui/cli-ink.js +22 -2
  14. package/dist/src/web/app.js +350 -0
  15. package/dist/src/web/index.html +49 -0
  16. package/dist/src/web/style.css +422 -0
  17. package/dist/tests/agent.test.js +62 -0
  18. package/dist/tests/cli-args.test.js +4 -2
  19. package/dist/tests/serve.integration.test.js +534 -0
  20. package/node_modules/@minicode/agent-sdk/dist/src/agent/agent.d.ts +30 -1
  21. package/node_modules/@minicode/agent-sdk/dist/src/agent/agent.d.ts.map +1 -1
  22. package/node_modules/@minicode/agent-sdk/dist/src/agent/agent.js +212 -8
  23. package/node_modules/@minicode/agent-sdk/dist/src/agent/agent.js.map +1 -1
  24. package/node_modules/@minicode/agent-sdk/dist/src/agent/types.d.ts +10 -0
  25. package/node_modules/@minicode/agent-sdk/dist/src/agent/types.d.ts.map +1 -1
  26. package/node_modules/@minicode/agent-sdk/dist/src/index.d.ts +1 -1
  27. package/node_modules/@minicode/agent-sdk/dist/src/index.d.ts.map +1 -1
  28. package/node_modules/@minicode/agent-sdk/dist/src/index.js.map +1 -1
  29. package/node_modules/@minicode/agent-sdk/dist/src/model/client.d.ts.map +1 -1
  30. package/node_modules/@minicode/agent-sdk/dist/src/model/client.js +2 -0
  31. package/node_modules/@minicode/agent-sdk/dist/src/model/client.js.map +1 -1
  32. package/node_modules/@minicode/agent-sdk/dist/src/session/session.d.ts +51 -1
  33. package/node_modules/@minicode/agent-sdk/dist/src/session/session.d.ts.map +1 -1
  34. package/node_modules/@minicode/agent-sdk/dist/src/session/session.js +210 -2
  35. package/node_modules/@minicode/agent-sdk/dist/src/session/session.js.map +1 -1
  36. package/node_modules/@minicode/agent-sdk/dist/tests/session.test.js +75 -0
  37. package/node_modules/@minicode/agent-sdk/dist/tests/session.test.js.map +1 -1
  38. package/node_modules/@minicode/agent-sdk/dist/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +5 -3
@@ -8,6 +8,18 @@ function estimateMessageTokens(message) {
8
8
  : 0;
9
9
  return Math.ceil(message.content.length / 4) + toolCallTokens;
10
10
  }
11
+ /**
12
+ * Summarize a tool result into a compact one-liner.
13
+ * Keeps the tool name and a brief excerpt of the output.
14
+ */
15
+ function summarizeToolResult(content, maxLen = 200) {
16
+ const firstLine = content.split("\n")[0] ?? "";
17
+ const lineCount = content.split("\n").length;
18
+ const excerpt = firstLine.length > maxLen
19
+ ? firstLine.slice(0, maxLen) + "..."
20
+ : firstLine;
21
+ return `[summary: ${excerpt} (${lineCount} lines, ${content.length} chars)]`;
22
+ }
11
23
  export class Session {
12
24
  id;
13
25
  createdAt;
@@ -40,19 +52,215 @@ export class Session {
40
52
  getTokenEstimate() {
41
53
  return this.messages.reduce((total, message) => total + estimateMessageTokens(message), 0);
42
54
  }
55
+ /**
56
+ * Progressive context eviction with three phases:
57
+ *
58
+ * Phase 1 — Shrink: Replace old tool result contents with compact summaries.
59
+ * Tool outputs are ephemeral (file contents, search results) — the model
60
+ * already extracted what it needed. Shrinking preserves the *fact* that a
61
+ * tool was called and a rough sense of the result, without the full payload.
62
+ *
63
+ * Phase 2 — Drop: Remove the oldest complete message chunks (assistant +
64
+ * tool results, or standalone messages) as before.
65
+ *
66
+ * Phase 3 — Emergency: If still over budget after dropping all removable
67
+ * messages, shrink tool results in the protected (recent) window too.
68
+ */
43
69
  trim(maxTokens, keepRecentMessages) {
44
70
  if (keepRecentMessages < 0) {
45
71
  return;
46
72
  }
73
+ // Phase 1: Shrink old tool results before dropping anything
74
+ if (this.getTokenEstimate() > maxTokens) {
75
+ const protectedStart = this.getProtectedStart(keepRecentMessages);
76
+ this.shrinkToolResults(0, protectedStart);
77
+ }
78
+ // Phase 2: Drop oldest chunks (existing behavior)
47
79
  while (this.getTokenEstimate() > maxTokens &&
48
80
  this.messages.length > keepRecentMessages) {
49
81
  const protectedStart = this.getProtectedStart(keepRecentMessages);
50
82
  if (protectedStart <= 0) {
51
- return;
83
+ break;
52
84
  }
53
85
  const removed = this.removeOldestChunk(protectedStart);
54
86
  if (!removed) {
55
- return;
87
+ break;
88
+ }
89
+ }
90
+ // Phase 3: If still over budget, shrink tool results in recent messages too
91
+ if (this.getTokenEstimate() > maxTokens) {
92
+ this.shrinkToolResults(0, this.messages.length);
93
+ }
94
+ }
95
+ /**
96
+ * Compact the conversation by summarizing old messages into a single
97
+ * context summary message. This preserves the *meaning* of prior exchanges
98
+ * while dramatically reducing token count.
99
+ *
100
+ * @param keepRecentMessages Number of recent messages to preserve verbatim.
101
+ * @returns CompactionResult with stats, or null if nothing to compact.
102
+ */
103
+ compact(keepRecentMessages) {
104
+ const protectedStart = this.getProtectedStart(keepRecentMessages);
105
+ if (protectedStart <= 0) {
106
+ return null;
107
+ }
108
+ const previousTokens = this.getTokenEstimate();
109
+ const oldMessages = this.messages.splice(0, protectedStart);
110
+ // Build a structured summary of the removed conversation
111
+ const summaryParts = [];
112
+ let currentExchange = [];
113
+ for (const msg of oldMessages) {
114
+ if (msg.role === "user") {
115
+ // Flush previous exchange
116
+ if (currentExchange.length > 0) {
117
+ summaryParts.push(currentExchange.join("\n"));
118
+ currentExchange = [];
119
+ }
120
+ const truncatedContent = msg.content.length > 300
121
+ ? msg.content.slice(0, 300) + "..."
122
+ : msg.content;
123
+ currentExchange.push(`- User asked: ${truncatedContent}`);
124
+ }
125
+ else if (msg.role === "assistant") {
126
+ const truncatedContent = msg.content.length > 300
127
+ ? msg.content.slice(0, 300) + "..."
128
+ : msg.content;
129
+ if (truncatedContent.length > 0) {
130
+ currentExchange.push(` Agent responded: ${truncatedContent}`);
131
+ }
132
+ if (msg.toolCalls?.length) {
133
+ const toolNames = msg.toolCalls.map((tc) => tc.name).join(", ");
134
+ currentExchange.push(` Agent called tools: ${toolNames}`);
135
+ }
136
+ }
137
+ else if (msg.role === "tool") {
138
+ // Just note what tool returned, not the full content
139
+ const brief = msg.content.length > 100
140
+ ? msg.content.slice(0, 100) + "..."
141
+ : msg.content;
142
+ currentExchange.push(` ${msg.toolName} returned: ${brief}`);
143
+ }
144
+ }
145
+ if (currentExchange.length > 0) {
146
+ summaryParts.push(currentExchange.join("\n"));
147
+ }
148
+ const summaryText = "[Conversation Summary — earlier messages were compacted to save context]\n" +
149
+ summaryParts.join("\n");
150
+ // Insert the summary as the first message (user role to maintain valid message ordering)
151
+ this.messages.unshift({
152
+ role: "user",
153
+ content: summaryText,
154
+ });
155
+ const newTokens = this.getTokenEstimate();
156
+ const summaryTokens = estimateMessageTokens(this.messages[0]);
157
+ return {
158
+ removedMessages: oldMessages.length,
159
+ summaryTokens,
160
+ previousTokens,
161
+ newTokens,
162
+ };
163
+ }
164
+ /**
165
+ * Compact the conversation using an LLM to produce a high-quality summary.
166
+ * The LLM can identify what matters (decisions, modified files, user intent)
167
+ * rather than blindly truncating. Falls back to mechanical compaction on error.
168
+ *
169
+ * @param keepRecentMessages Number of recent messages to preserve verbatim.
170
+ * @param modelClient The model client to use for the summarization call.
171
+ * @param compactionModel The model ID to use (e.g. "zai-org/glm-4.7-flash").
172
+ * @returns CompactionResult with stats, or null if nothing to compact.
173
+ */
174
+ async compactWithLlm(keepRecentMessages, modelClient, compactionModel) {
175
+ const protectedStart = this.getProtectedStart(keepRecentMessages);
176
+ if (protectedStart <= 0) {
177
+ return null;
178
+ }
179
+ const previousTokens = this.getTokenEstimate();
180
+ const oldMessages = this.messages.slice(0, protectedStart);
181
+ // Build a text representation of the old messages for the LLM to summarize
182
+ const conversationText = oldMessages
183
+ .map((msg) => {
184
+ if (msg.role === "user") {
185
+ return `User: ${msg.content}`;
186
+ }
187
+ else if (msg.role === "assistant") {
188
+ const toolInfo = msg.toolCalls?.length
189
+ ? `\n[Called tools: ${msg.toolCalls.map((tc) => tc.name).join(", ")}]`
190
+ : "";
191
+ return `Assistant: ${msg.content}${toolInfo}`;
192
+ }
193
+ else if (msg.role === "tool") {
194
+ const brief = msg.content.length > 500
195
+ ? msg.content.slice(0, 500) + "..."
196
+ : msg.content;
197
+ return `Tool (${msg.toolName}): ${brief}`;
198
+ }
199
+ return "";
200
+ })
201
+ .join("\n\n");
202
+ let summaryText;
203
+ try {
204
+ const response = await modelClient.chat({
205
+ model: compactionModel,
206
+ system: "You are a conversation summarizer. Produce a concise summary of the conversation below. " +
207
+ "Focus on preserving:\n" +
208
+ "- The user's overall goal and current task\n" +
209
+ "- Key decisions made and their rationale\n" +
210
+ "- Files that were read, created, or modified (with paths)\n" +
211
+ "- Important facts, constraints, or preferences stated by the user\n" +
212
+ "- Current state of progress (what's done, what's pending)\n\n" +
213
+ "Omit: verbose tool outputs, redundant information, intermediate reasoning that led nowhere.\n" +
214
+ "Format the summary as a structured, scannable document. Be concise but thorough.",
215
+ messages: [
216
+ {
217
+ role: "user",
218
+ content: `Summarize this conversation:\n\n${conversationText}`,
219
+ },
220
+ ],
221
+ tools: [],
222
+ maxTokens: 1500,
223
+ });
224
+ summaryText =
225
+ "[Conversation Summary — earlier messages were compacted using LLM summarization]\n" +
226
+ response.text;
227
+ }
228
+ catch {
229
+ // Fall back to mechanical compaction on any error
230
+ return this.compact(keepRecentMessages);
231
+ }
232
+ // Remove old messages and insert the summary
233
+ this.messages.splice(0, protectedStart);
234
+ this.messages.unshift({
235
+ role: "user",
236
+ content: summaryText,
237
+ });
238
+ const newTokens = this.getTokenEstimate();
239
+ const summaryTokens = estimateMessageTokens(this.messages[0]);
240
+ return {
241
+ removedMessages: oldMessages.length,
242
+ summaryTokens,
243
+ previousTokens,
244
+ newTokens,
245
+ };
246
+ }
247
+ /**
248
+ * Check whether compaction should be auto-triggered.
249
+ * Returns true when token usage exceeds the given threshold ratio.
250
+ */
251
+ shouldCompact(maxTokens, thresholdRatio = 0.8) {
252
+ return this.getTokenEstimate() > maxTokens * thresholdRatio;
253
+ }
254
+ /**
255
+ * Shrink tool result messages in the given range by replacing their
256
+ * content with a compact summary. Already-summarized messages are skipped.
257
+ */
258
+ shrinkToolResults(fromIndex, toIndex) {
259
+ for (let i = fromIndex; i < toIndex && i < this.messages.length; i++) {
260
+ const msg = this.messages[i];
261
+ if (msg?.role === "tool" &&
262
+ !msg.content.startsWith("[summary:")) {
263
+ msg.content = summarizeToolResult(msg.content);
56
264
  }
57
265
  }
58
266
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/session/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/session/session.ts"],"names":[],"mappings":"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"}
@@ -114,4 +114,79 @@ test("fromJSON roundtrips through JSON.stringify/parse", () => {
114
114
  assert.equal(restored.getMessages().length, 1);
115
115
  assert.equal(restored.getMessages()[0]?.content, "test");
116
116
  });
117
+ // --- LLM-based compaction tests ---
118
+ class FakeModelClient {
119
+ lastMessages = [];
120
+ responseText;
121
+ constructor(responseText = "Summary: user asked to fix a bug in app.ts") {
122
+ this.responseText = responseText;
123
+ }
124
+ async chat(params) {
125
+ this.lastMessages.push([...params.messages]);
126
+ return {
127
+ text: this.responseText,
128
+ toolCalls: [],
129
+ stopReason: "end_turn",
130
+ usage: { inputTokens: 100, outputTokens: 50 },
131
+ };
132
+ }
133
+ }
134
+ test("compactWithLlm uses LLM summary and preserves recent messages", async () => {
135
+ const session = new Session("llm-compact");
136
+ session.addMessage({ role: "user", content: "fix the bug in app.ts" });
137
+ session.addMessage({ role: "assistant", content: "I will read the file" });
138
+ session.addMessage({
139
+ role: "assistant",
140
+ content: "reading",
141
+ toolCalls: [{ id: "t1", name: "read_file", input: { path: "app.ts" } }],
142
+ });
143
+ session.addMessage({
144
+ role: "tool",
145
+ toolCallId: "t1",
146
+ toolName: "read_file",
147
+ content: "const x = 1;\nconst y = 2;",
148
+ });
149
+ session.addMessage({ role: "assistant", content: "I found the issue" });
150
+ session.addMessage({ role: "user", content: "great, fix it" });
151
+ const client = new FakeModelClient();
152
+ const result = await session.compactWithLlm(2, client, "test-haiku");
153
+ assert.ok(result);
154
+ assert.equal(result.removedMessages, 4);
155
+ const messages = session.getMessages();
156
+ // Summary + 2 preserved recent messages
157
+ assert.equal(messages.length, 3);
158
+ assert.equal(messages[0]?.role, "user");
159
+ assert.ok(messages[0]?.content.includes("LLM summarization"));
160
+ assert.ok(messages[0]?.content.includes("Summary: user asked to fix a bug"));
161
+ // Recent messages preserved
162
+ assert.equal(messages[1]?.content, "I found the issue");
163
+ assert.equal(messages[2]?.content, "great, fix it");
164
+ });
165
+ test("compactWithLlm returns null when nothing to compact", async () => {
166
+ const session = new Session("llm-empty");
167
+ session.addMessage({ role: "user", content: "hello" });
168
+ const client = new FakeModelClient();
169
+ const result = await session.compactWithLlm(5, client, "test-haiku");
170
+ assert.equal(result, null);
171
+ assert.equal(client.lastMessages.length, 0); // LLM should not be called
172
+ });
173
+ test("compactWithLlm falls back to mechanical compaction on error", async () => {
174
+ const session = new Session("llm-fallback");
175
+ session.addMessage({ role: "user", content: "first message" });
176
+ session.addMessage({ role: "assistant", content: "first response" });
177
+ session.addMessage({ role: "user", content: "second message" });
178
+ session.addMessage({ role: "assistant", content: "second response" });
179
+ const failingClient = {
180
+ async chat() {
181
+ throw new Error("API unavailable");
182
+ },
183
+ };
184
+ const result = await session.compactWithLlm(2, failingClient, "test-haiku");
185
+ assert.ok(result);
186
+ const messages = session.getMessages();
187
+ // Should fall back to mechanical compaction
188
+ assert.equal(messages[0]?.role, "user");
189
+ assert.ok(messages[0]?.content.includes("Conversation Summary"));
190
+ assert.ok(!messages[0]?.content.includes("LLM summarization"));
191
+ });
117
192
  //# sourceMappingURL=session.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../tests/session.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../tests/session.test.ts"],"names":[],"mappings":"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"}