@sean.holung/minicode 0.3.11 → 0.4.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 (197) hide show
  1. package/README.md +5 -3
  2. package/dist/scripts/run-benchmarks.js +7 -1
  3. package/dist/src/benchmark/runner.js +66 -3
  4. package/dist/src/cli/benchmark-run.js +1 -1
  5. package/dist/src/index.js +1 -1
  6. package/dist/src/indexer/code-map.js +16 -1
  7. package/dist/src/serve/agent-bridge.js +1 -1
  8. package/dist/src/session/session-store.js +1 -1
  9. package/dist/src/shared/symbol-resolution.js +24 -3
  10. package/dist/src/tools/find-path.js +1 -1
  11. package/dist/src/tools/find-references.js +1 -1
  12. package/dist/src/tools/get-dependencies.js +1 -1
  13. package/dist/src/tools/post-edit-diagnostics.js +185 -0
  14. package/dist/src/tools/read-symbol.js +2 -2
  15. package/dist/src/tools/registry.js +18 -3
  16. package/dist/src/tools/search-code-map.js +101 -9
  17. package/dist/src/ui/cli-ink.js +1 -1
  18. package/dist/src/web/app.js +1 -1
  19. package/dist/src/web/favicon.ico +0 -0
  20. package/dist/src/web/favicon.svg +9 -0
  21. package/dist/src/web/index.html +2 -0
  22. package/dist/tests/agent.test.js +1 -1
  23. package/dist/tests/context-indicator.test.js +1 -1
  24. package/dist/tests/file-tools.test.js +2 -2
  25. package/dist/tests/focus-tracker.test.js +1 -1
  26. package/dist/tests/graph-onboarding.test.js +20 -0
  27. package/dist/tests/guardrails.test.js +1 -1
  28. package/dist/tests/indexer.test.js +59 -28
  29. package/dist/tests/model-client-openai.test.js +4 -3
  30. package/dist/tests/model-selection.test.js +1 -1
  31. package/dist/tests/package-metadata.test.js +9 -0
  32. package/dist/tests/python-plugin.test.js +3 -3
  33. package/dist/tests/read-symbol.test.js +84 -10
  34. package/dist/tests/reasoning-effort.test.js +1 -1
  35. package/dist/tests/search-code-map.test.js +132 -1
  36. package/dist/tests/serve.integration.test.js +1 -1
  37. package/dist/tests/session-store.test.js +1 -1
  38. package/dist/tests/session.test.js +1 -1
  39. package/dist/tests/symbol-resolution.test.js +57 -0
  40. package/dist/tests/system-prompt.test.js +1 -1
  41. package/dist/tests/tool-registry.test.js +1 -1
  42. package/node_modules/@sean.holung/minicode-sdk/LICENSE +201 -0
  43. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/README.md +43 -22
  44. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/agent.d.ts +10 -1
  45. package/node_modules/@sean.holung/minicode-sdk/dist/src/agent/agent.d.ts.map +1 -0
  46. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/agent.js +33 -10
  47. package/node_modules/@sean.holung/minicode-sdk/dist/src/agent/agent.js.map +1 -0
  48. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/index.d.ts +1 -1
  49. package/node_modules/@sean.holung/minicode-sdk/dist/src/index.d.ts.map +1 -0
  50. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/index.js +1 -1
  51. package/node_modules/@sean.holung/minicode-sdk/dist/src/index.js.map +1 -0
  52. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/mcp/client-registry.js +1 -1
  53. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/mcp/client-registry.js.map +1 -1
  54. package/node_modules/@sean.holung/minicode-sdk/dist/src/model/client.d.ts.map +1 -0
  55. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/model/client.js +73 -5
  56. package/node_modules/@sean.holung/minicode-sdk/dist/src/model/client.js.map +1 -0
  57. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/prompt/system-prompt.d.ts.map +1 -1
  58. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/prompt/system-prompt.js +1 -1
  59. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/prompt/system-prompt.js.map +1 -1
  60. package/node_modules/@sean.holung/minicode-sdk/dist/src/tools/edit-file-replacers.d.ts +59 -0
  61. package/node_modules/@sean.holung/minicode-sdk/dist/src/tools/edit-file-replacers.d.ts.map +1 -0
  62. package/node_modules/@sean.holung/minicode-sdk/dist/src/tools/edit-file-replacers.js +392 -0
  63. package/node_modules/@sean.holung/minicode-sdk/dist/src/tools/edit-file-replacers.js.map +1 -0
  64. package/node_modules/@sean.holung/minicode-sdk/dist/src/tools/edit-file.d.ts +19 -0
  65. package/node_modules/@sean.holung/minicode-sdk/dist/src/tools/edit-file.d.ts.map +1 -0
  66. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/edit-file.js +14 -25
  67. package/node_modules/@sean.holung/minicode-sdk/dist/src/tools/edit-file.js.map +1 -0
  68. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/read-file.d.ts.map +1 -1
  69. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/read-file.js +11 -5
  70. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/read-file.js.map +1 -1
  71. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/run-command.d.ts.map +1 -1
  72. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/run-command.js +3 -0
  73. package/node_modules/@sean.holung/minicode-sdk/dist/src/tools/run-command.js.map +1 -0
  74. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/search.d.ts.map +1 -1
  75. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/search.js +52 -25
  76. package/node_modules/@sean.holung/minicode-sdk/dist/src/tools/search.js.map +1 -0
  77. package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/package.json +6 -2
  78. package/node_modules/minicode-plugin-python/dist/src/index.d.ts +1 -1
  79. package/node_modules/minicode-plugin-python/dist/src/index.d.ts.map +1 -1
  80. package/node_modules/minicode-plugin-python/dist/tsconfig.tsbuildinfo +1 -1
  81. package/node_modules/minicode-plugin-python/package.json +2 -2
  82. package/package.json +4 -3
  83. package/node_modules/@minicode/agent-sdk/dist/src/agent/agent.d.ts.map +0 -1
  84. package/node_modules/@minicode/agent-sdk/dist/src/agent/agent.js.map +0 -1
  85. package/node_modules/@minicode/agent-sdk/dist/src/index.d.ts.map +0 -1
  86. package/node_modules/@minicode/agent-sdk/dist/src/index.js.map +0 -1
  87. package/node_modules/@minicode/agent-sdk/dist/src/model/client.d.ts.map +0 -1
  88. package/node_modules/@minicode/agent-sdk/dist/src/model/client.js.map +0 -1
  89. package/node_modules/@minicode/agent-sdk/dist/src/tools/edit-file.d.ts +0 -13
  90. package/node_modules/@minicode/agent-sdk/dist/src/tools/edit-file.d.ts.map +0 -1
  91. package/node_modules/@minicode/agent-sdk/dist/src/tools/edit-file.js.map +0 -1
  92. package/node_modules/@minicode/agent-sdk/dist/src/tools/run-command.js.map +0 -1
  93. package/node_modules/@minicode/agent-sdk/dist/src/tools/search.js.map +0 -1
  94. package/node_modules/@minicode/agent-sdk/dist/tests/agent.test.d.ts +0 -2
  95. package/node_modules/@minicode/agent-sdk/dist/tests/agent.test.d.ts.map +0 -1
  96. package/node_modules/@minicode/agent-sdk/dist/tests/agent.test.js +0 -569
  97. package/node_modules/@minicode/agent-sdk/dist/tests/agent.test.js.map +0 -1
  98. package/node_modules/@minicode/agent-sdk/dist/tests/file-tools.test.d.ts +0 -2
  99. package/node_modules/@minicode/agent-sdk/dist/tests/file-tools.test.d.ts.map +0 -1
  100. package/node_modules/@minicode/agent-sdk/dist/tests/file-tools.test.js +0 -131
  101. package/node_modules/@minicode/agent-sdk/dist/tests/file-tools.test.js.map +0 -1
  102. package/node_modules/@minicode/agent-sdk/dist/tests/guardrails.test.d.ts +0 -2
  103. package/node_modules/@minicode/agent-sdk/dist/tests/guardrails.test.d.ts.map +0 -1
  104. package/node_modules/@minicode/agent-sdk/dist/tests/guardrails.test.js +0 -54
  105. package/node_modules/@minicode/agent-sdk/dist/tests/guardrails.test.js.map +0 -1
  106. package/node_modules/@minicode/agent-sdk/dist/tests/mcp-client.integration.test.d.ts +0 -2
  107. package/node_modules/@minicode/agent-sdk/dist/tests/mcp-client.integration.test.d.ts.map +0 -1
  108. package/node_modules/@minicode/agent-sdk/dist/tests/mcp-client.integration.test.js +0 -64
  109. package/node_modules/@minicode/agent-sdk/dist/tests/mcp-client.integration.test.js.map +0 -1
  110. package/node_modules/@minicode/agent-sdk/dist/tests/mcp-client.test.d.ts +0 -2
  111. package/node_modules/@minicode/agent-sdk/dist/tests/mcp-client.test.d.ts.map +0 -1
  112. package/node_modules/@minicode/agent-sdk/dist/tests/mcp-client.test.js +0 -350
  113. package/node_modules/@minicode/agent-sdk/dist/tests/mcp-client.test.js.map +0 -1
  114. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-anthropic-structured-output.test.d.ts +0 -2
  115. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-anthropic-structured-output.test.d.ts.map +0 -1
  116. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-anthropic-structured-output.test.js +0 -211
  117. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-anthropic-structured-output.test.js.map +0 -1
  118. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-openai.test.d.ts +0 -2
  119. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-openai.test.d.ts.map +0 -1
  120. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-openai.test.js +0 -330
  121. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-openai.test.js.map +0 -1
  122. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-structured-output.test.d.ts +0 -2
  123. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-structured-output.test.d.ts.map +0 -1
  124. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-structured-output.test.js +0 -171
  125. package/node_modules/@minicode/agent-sdk/dist/tests/model-client-structured-output.test.js.map +0 -1
  126. package/node_modules/@minicode/agent-sdk/dist/tests/session.test.d.ts +0 -2
  127. package/node_modules/@minicode/agent-sdk/dist/tests/session.test.d.ts.map +0 -1
  128. package/node_modules/@minicode/agent-sdk/dist/tests/session.test.js +0 -226
  129. package/node_modules/@minicode/agent-sdk/dist/tests/session.test.js.map +0 -1
  130. package/node_modules/@minicode/agent-sdk/dist/tests/structured-output.test.d.ts +0 -2
  131. package/node_modules/@minicode/agent-sdk/dist/tests/structured-output.test.d.ts.map +0 -1
  132. package/node_modules/@minicode/agent-sdk/dist/tests/structured-output.test.js +0 -212
  133. package/node_modules/@minicode/agent-sdk/dist/tests/structured-output.test.js.map +0 -1
  134. package/node_modules/@minicode/agent-sdk/dist/tests/system-prompt.test.d.ts +0 -2
  135. package/node_modules/@minicode/agent-sdk/dist/tests/system-prompt.test.d.ts.map +0 -1
  136. package/node_modules/@minicode/agent-sdk/dist/tests/system-prompt.test.js +0 -76
  137. package/node_modules/@minicode/agent-sdk/dist/tests/system-prompt.test.js.map +0 -1
  138. package/node_modules/@minicode/agent-sdk/dist/tests/test-utils.d.ts +0 -3
  139. package/node_modules/@minicode/agent-sdk/dist/tests/test-utils.d.ts.map +0 -1
  140. package/node_modules/@minicode/agent-sdk/dist/tests/test-utils.js +0 -20
  141. package/node_modules/@minicode/agent-sdk/dist/tests/test-utils.js.map +0 -1
  142. package/node_modules/@minicode/agent-sdk/dist/tests/tool-factory-options.test.d.ts +0 -2
  143. package/node_modules/@minicode/agent-sdk/dist/tests/tool-factory-options.test.d.ts.map +0 -1
  144. package/node_modules/@minicode/agent-sdk/dist/tests/tool-factory-options.test.js +0 -72
  145. package/node_modules/@minicode/agent-sdk/dist/tests/tool-factory-options.test.js.map +0 -1
  146. package/node_modules/@minicode/agent-sdk/dist/tests/tool-registry.test.d.ts +0 -2
  147. package/node_modules/@minicode/agent-sdk/dist/tests/tool-registry.test.d.ts.map +0 -1
  148. package/node_modules/@minicode/agent-sdk/dist/tests/tool-registry.test.js +0 -69
  149. package/node_modules/@minicode/agent-sdk/dist/tests/tool-registry.test.js.map +0 -1
  150. package/node_modules/@minicode/agent-sdk/dist/tsconfig.tsbuildinfo +0 -1
  151. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/structured-output.d.ts +0 -0
  152. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/structured-output.d.ts.map +0 -0
  153. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/structured-output.js +0 -0
  154. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/structured-output.js.map +0 -0
  155. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/types.d.ts +0 -0
  156. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/types.d.ts.map +0 -0
  157. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/types.js +0 -0
  158. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/agent/types.js.map +0 -0
  159. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/indexer/focus-tracker.d.ts +0 -0
  160. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/indexer/focus-tracker.d.ts.map +0 -0
  161. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/indexer/focus-tracker.js +0 -0
  162. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/indexer/focus-tracker.js.map +0 -0
  163. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/indexer/types.d.ts +0 -0
  164. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/indexer/types.d.ts.map +0 -0
  165. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/indexer/types.js +0 -0
  166. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/indexer/types.js.map +0 -0
  167. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/mcp/client-registry.d.ts +0 -0
  168. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/mcp/client-registry.d.ts.map +0 -0
  169. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/model/client.d.ts +0 -0
  170. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/prompt/system-prompt.d.ts +0 -0
  171. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/safety/guardrails.d.ts +0 -0
  172. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/safety/guardrails.d.ts.map +0 -0
  173. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/safety/guardrails.js +0 -0
  174. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/safety/guardrails.js.map +0 -0
  175. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/session/session.d.ts +0 -0
  176. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/session/session.d.ts.map +0 -0
  177. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/session/session.js +0 -0
  178. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/session/session.js.map +0 -0
  179. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/helpers.d.ts +0 -0
  180. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/helpers.d.ts.map +0 -0
  181. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/helpers.js +0 -0
  182. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/helpers.js.map +0 -0
  183. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/list-files.d.ts +0 -0
  184. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/list-files.d.ts.map +0 -0
  185. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/list-files.js +0 -0
  186. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/list-files.js.map +0 -0
  187. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/read-file.d.ts +0 -0
  188. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/registry.d.ts +0 -0
  189. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/registry.d.ts.map +0 -0
  190. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/registry.js +0 -0
  191. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/registry.js.map +0 -0
  192. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/run-command.d.ts +0 -0
  193. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/search.d.ts +0 -0
  194. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/write-file.d.ts +0 -0
  195. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/write-file.d.ts.map +0 -0
  196. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/write-file.js +0 -0
  197. /package/node_modules/{@minicode/agent-sdk → @sean.holung/minicode-sdk}/dist/src/tools/write-file.js.map +0 -0
@@ -1,569 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { test } from "node:test";
3
- import { CodingAgent } from "../src/agent/agent.js";
4
- import { ToolRegistry } from "../src/tools/registry.js";
5
- import { createTestAgentConfig } from "./test-utils.js";
6
- class SequenceModelClient {
7
- responses;
8
- constructor(responses) {
9
- this.responses = [...responses];
10
- }
11
- async chat(params) {
12
- void params;
13
- const next = this.responses.shift();
14
- if (!next) {
15
- throw new Error("No queued model response.");
16
- }
17
- return next;
18
- }
19
- }
20
- class RepeatingModelClient {
21
- async chat(params) {
22
- void params;
23
- return {
24
- text: "running tool",
25
- toolCalls: [{ id: "tool-1", name: "echo_tool", input: { value: "same" } }],
26
- stopReason: "tool_use",
27
- usage: { inputTokens: 1, outputTokens: 1 },
28
- };
29
- }
30
- }
31
- function createEchoTool() {
32
- return {
33
- name: "echo_tool",
34
- description: "Echoes a value",
35
- inputSchema: {
36
- type: "object",
37
- properties: {
38
- value: { type: "string" },
39
- },
40
- required: ["value"],
41
- },
42
- execute: async (input) => `echo:${String(input.value)}`,
43
- };
44
- }
45
- test("agent executes tool calls and returns final assistant text", async () => {
46
- const responses = [
47
- {
48
- text: "I will use a tool first.",
49
- toolCalls: [{ id: "tool-1", name: "echo_tool", input: { value: "ok" } }],
50
- stopReason: "tool_use",
51
- usage: { inputTokens: 10, outputTokens: 8 },
52
- },
53
- {
54
- text: "Done. Change applied.",
55
- toolCalls: [],
56
- stopReason: "end_turn",
57
- usage: { inputTokens: 12, outputTokens: 6 },
58
- },
59
- ];
60
- const agent = new CodingAgent({
61
- config: createTestAgentConfig("/tmp"),
62
- modelClient: new SequenceModelClient(responses),
63
- toolRegistry: new ToolRegistry([createEchoTool()]),
64
- });
65
- const { text } = await agent.runTurn("Make a change");
66
- assert.equal(text, "Done. Change applied.");
67
- const messages = agent.getSession().getMessages();
68
- assert.equal(messages.length, 4);
69
- assert.equal(messages[0]?.role, "user");
70
- assert.equal(messages[1]?.role, "assistant");
71
- assert.equal(messages[2]?.role, "tool");
72
- assert.equal(messages[3]?.role, "assistant");
73
- });
74
- test("agent stops on repeated identical tool calls", async () => {
75
- const agent = new CodingAgent({
76
- config: createTestAgentConfig("/tmp"),
77
- modelClient: new RepeatingModelClient(),
78
- toolRegistry: new ToolRegistry([createEchoTool()]),
79
- });
80
- const { text } = await agent.runTurn("Do something");
81
- assert.match(text, /repeated identical tool calls/);
82
- });
83
- test("agent returns usage totals across steps", async () => {
84
- const responses = [
85
- {
86
- text: "Step 1",
87
- toolCalls: [{ id: "tool-1", name: "echo_tool", input: { value: "a" } }],
88
- stopReason: "tool_use",
89
- usage: { inputTokens: 100, outputTokens: 50 },
90
- },
91
- {
92
- text: "Final answer.",
93
- toolCalls: [],
94
- stopReason: "end_turn",
95
- usage: { inputTokens: 200, outputTokens: 75 },
96
- },
97
- ];
98
- const agent = new CodingAgent({
99
- config: createTestAgentConfig("/tmp"),
100
- modelClient: new SequenceModelClient(responses),
101
- toolRegistry: new ToolRegistry([createEchoTool()]),
102
- });
103
- const result = await agent.runTurn("Count tokens");
104
- assert.equal(result.usage?.inputTokens, 300);
105
- assert.equal(result.usage?.outputTokens, 125);
106
- });
107
- test("agent emits UiUpdate events", async () => {
108
- const responses = [
109
- {
110
- text: "thinking about it",
111
- toolCalls: [{ id: "tool-1", name: "echo_tool", input: { value: "hi" } }],
112
- stopReason: "tool_use",
113
- usage: { inputTokens: 1, outputTokens: 1 },
114
- },
115
- {
116
- text: "Done.",
117
- toolCalls: [],
118
- stopReason: "end_turn",
119
- usage: { inputTokens: 1, outputTokens: 1 },
120
- },
121
- ];
122
- const events = [];
123
- const agent = new CodingAgent({
124
- config: createTestAgentConfig("/tmp"),
125
- modelClient: new SequenceModelClient(responses),
126
- toolRegistry: new ToolRegistry([createEchoTool()]),
127
- onUiUpdate: (event) => events.push(event),
128
- });
129
- await agent.runTurn("Test events");
130
- const types = events.map((e) => e.type);
131
- assert.ok(types.includes("step"));
132
- assert.ok(types.includes("thinking"));
133
- assert.ok(types.includes("tool_call_start"));
134
- assert.ok(types.includes("tool_call_end"));
135
- });
136
- test("agent returns fallback text when model returns empty response", async () => {
137
- const responses = [
138
- {
139
- text: "",
140
- toolCalls: [],
141
- stopReason: "end_turn",
142
- usage: { inputTokens: 1, outputTokens: 0 },
143
- },
144
- ];
145
- const agent = new CodingAgent({
146
- config: createTestAgentConfig("/tmp"),
147
- modelClient: new SequenceModelClient(responses),
148
- toolRegistry: new ToolRegistry([createEchoTool()]),
149
- });
150
- const { text } = await agent.runTurn("Hello");
151
- assert.match(text, /no response or tool calls/);
152
- });
153
- test("agent respects maxSteps limit", async () => {
154
- const config = createTestAgentConfig("/tmp");
155
- config.maxSteps = 2;
156
- let callCount = 0;
157
- const infiniteClient = {
158
- async chat() {
159
- callCount += 1;
160
- return {
161
- text: `step ${callCount}`,
162
- toolCalls: [{ id: `tool-${callCount}`, name: "echo_tool", input: { value: String(callCount) } }],
163
- stopReason: "tool_use",
164
- usage: { inputTokens: 1, outputTokens: 1 },
165
- };
166
- },
167
- };
168
- const agent = new CodingAgent({
169
- config,
170
- modelClient: infiniteClient,
171
- toolRegistry: new ToolRegistry([createEchoTool()]),
172
- });
173
- const { text } = await agent.runTurn("Go forever");
174
- assert.match(text, /turn call limit/);
175
- assert.match(text, /Type "continue"/);
176
- assert.match(text, /maxSteps/);
177
- assert.equal(callCount, 2);
178
- });
179
- test("agent accepts getCodeMap callback", async () => {
180
- let capturedSystem = "";
181
- const spyClient = {
182
- async chat(params) {
183
- capturedSystem = params.system;
184
- return {
185
- text: "Done.",
186
- toolCalls: [],
187
- stopReason: "end_turn",
188
- usage: { inputTokens: 1, outputTokens: 1 },
189
- };
190
- },
191
- };
192
- const agent = new CodingAgent({
193
- config: createTestAgentConfig("/tmp"),
194
- modelClient: spyClient,
195
- toolRegistry: new ToolRegistry([createEchoTool()]),
196
- getCodeMap: () => ({
197
- text: "# Code Map\n- MyClass",
198
- shownCount: 1,
199
- totalCount: 1,
200
- }),
201
- });
202
- await agent.runTurn("Show code map");
203
- assert.ok(capturedSystem.includes("[Project Code Map]"));
204
- assert.ok(capturedSystem.includes("MyClass"));
205
- });
206
- test("agent omits code map when getCodeMap not provided", async () => {
207
- let capturedSystem = "";
208
- const spyClient = {
209
- async chat(params) {
210
- capturedSystem = params.system;
211
- return {
212
- text: "Done.",
213
- toolCalls: [],
214
- stopReason: "end_turn",
215
- usage: { inputTokens: 1, outputTokens: 1 },
216
- };
217
- },
218
- };
219
- const agent = new CodingAgent({
220
- config: createTestAgentConfig("/tmp"),
221
- modelClient: spyClient,
222
- toolRegistry: new ToolRegistry([createEchoTool()]),
223
- });
224
- await agent.runTurn("Hello");
225
- assert.ok(!capturedSystem.includes("[Project Code Map]"));
226
- });
227
- test("beforeToolCall: allow lets the tool run normally", async () => {
228
- const responses = [
229
- {
230
- text: "Calling tool",
231
- toolCalls: [{ id: "tool-1", name: "echo_tool", input: { value: "ok" } }],
232
- stopReason: "tool_use",
233
- usage: { inputTokens: 1, outputTokens: 1 },
234
- },
235
- {
236
- text: "Done.",
237
- toolCalls: [],
238
- stopReason: "end_turn",
239
- usage: { inputTokens: 1, outputTokens: 1 },
240
- },
241
- ];
242
- const seen = [];
243
- const agent = new CodingAgent({
244
- config: createTestAgentConfig("/tmp"),
245
- modelClient: new SequenceModelClient(responses),
246
- toolRegistry: new ToolRegistry([createEchoTool()]),
247
- beforeToolCall: async ({ name }) => {
248
- seen.push(name);
249
- return { outcome: "allow" };
250
- },
251
- });
252
- await agent.runTurn("Hello");
253
- assert.deepEqual(seen, ["echo_tool"]);
254
- const messages = agent.getSession().getMessages();
255
- const toolMsg = messages.find((m) => m.role === "tool");
256
- assert.ok(toolMsg);
257
- assert.equal(toolMsg.role === "tool" && toolMsg.content, "echo:ok", "tool result should be the actual output, not a deny message");
258
- });
259
- test("beforeToolCall: deny short-circuits and feeds reason back to the model", async () => {
260
- const responses = [
261
- {
262
- text: "Calling tool",
263
- toolCalls: [
264
- { id: "tool-1", name: "echo_tool", input: { value: "secret" } },
265
- ],
266
- stopReason: "tool_use",
267
- usage: { inputTokens: 1, outputTokens: 1 },
268
- },
269
- {
270
- text: "Sorry, I can't proceed without permission.",
271
- toolCalls: [],
272
- stopReason: "end_turn",
273
- usage: { inputTokens: 1, outputTokens: 1 },
274
- },
275
- ];
276
- let executed = 0;
277
- const tool = {
278
- name: "echo_tool",
279
- description: "echo",
280
- inputSchema: { type: "object", properties: {}, required: [] },
281
- execute: async () => {
282
- executed += 1;
283
- return "should not run";
284
- },
285
- };
286
- const agent = new CodingAgent({
287
- config: createTestAgentConfig("/tmp"),
288
- modelClient: new SequenceModelClient(responses),
289
- toolRegistry: new ToolRegistry([tool]),
290
- beforeToolCall: async () => ({
291
- outcome: "deny",
292
- reason: "user clicked deny",
293
- }),
294
- });
295
- await agent.runTurn("Hello");
296
- assert.equal(executed, 0, "underlying tool should never have been called");
297
- const toolMsg = agent
298
- .getSession()
299
- .getMessages()
300
- .find((m) => m.role === "tool");
301
- assert.ok(toolMsg);
302
- assert.match(toolMsg.role === "tool" ? toolMsg.content : "", /denied by user.*user clicked deny/, "model should see the denial reason as the tool's result");
303
- });
304
- test("beforeToolCall: hook receives the tool name and full input payload", async () => {
305
- const responses = [
306
- {
307
- text: "Calling tool",
308
- toolCalls: [
309
- { id: "tool-1", name: "echo_tool", input: { value: "hello world" } },
310
- ],
311
- stopReason: "tool_use",
312
- usage: { inputTokens: 1, outputTokens: 1 },
313
- },
314
- {
315
- text: "Done.",
316
- toolCalls: [],
317
- stopReason: "end_turn",
318
- usage: { inputTokens: 1, outputTokens: 1 },
319
- },
320
- ];
321
- const captured = [];
322
- const agent = new CodingAgent({
323
- config: createTestAgentConfig("/tmp"),
324
- modelClient: new SequenceModelClient(responses),
325
- toolRegistry: new ToolRegistry([createEchoTool()]),
326
- beforeToolCall: async (toolCall) => {
327
- captured.push({ name: toolCall.name, input: toolCall.input });
328
- return { outcome: "allow" };
329
- },
330
- });
331
- await agent.runTurn("Hello");
332
- assert.equal(captured.length, 1, "hook was invoked once");
333
- assert.equal(captured[0].name, "echo_tool");
334
- assert.deepEqual(captured[0].input, { value: "hello world" });
335
- });
336
- function createSummarizerClient(captured) {
337
- return {
338
- async chat(params) {
339
- captured.push(params.model);
340
- return {
341
- text: "Summary",
342
- toolCalls: [],
343
- stopReason: "end_turn",
344
- usage: { inputTokens: 10, outputTokens: 5 },
345
- };
346
- },
347
- };
348
- }
349
- function seedCompactableSession(agent) {
350
- // keepRecentMessages defaults to 2 in this helper's caller; seed 10
351
- // messages so there's something to summarize.
352
- for (let i = 0; i < 5; i += 1) {
353
- agent.getSession().addMessage({ role: "user", content: `msg ${i}` });
354
- agent.getSession().addMessage({ role: "assistant", content: `reply ${i}` });
355
- }
356
- }
357
- test("compactContext defaults to LLM compaction with the agent's primary model", async () => {
358
- const captured = [];
359
- const agent = new CodingAgent({
360
- config: {
361
- ...createTestAgentConfig("/tmp"),
362
- model: "primary-model",
363
- keepRecentMessages: 2,
364
- },
365
- modelClient: createSummarizerClient(captured),
366
- toolRegistry: new ToolRegistry([]),
367
- });
368
- seedCompactableSession(agent);
369
- const result = await agent.compactContext();
370
- assert.ok(result, "compactContext should produce a result");
371
- assert.equal(result.method, "llm");
372
- assert.deepEqual(captured, ["primary-model"], "summarizer should have been called with the agent's primary model");
373
- });
374
- test("compactContext uses compactionModel override when set", async () => {
375
- const captured = [];
376
- const agent = new CodingAgent({
377
- config: {
378
- ...createTestAgentConfig("/tmp"),
379
- model: "primary-model",
380
- compactionModel: "cheap-summarizer",
381
- keepRecentMessages: 2,
382
- },
383
- modelClient: createSummarizerClient(captured),
384
- toolRegistry: new ToolRegistry([]),
385
- });
386
- seedCompactableSession(agent);
387
- await agent.compactContext();
388
- assert.deepEqual(captured, ["cheap-summarizer"], "compactionModel override should win over the primary model");
389
- });
390
- test("agent passes cacheableSystem: true by default and accumulates cachedInputTokens across steps", async () => {
391
- const cacheableSystemFlags = [];
392
- const stepResponses = [
393
- {
394
- text: "Step 1",
395
- toolCalls: [{ id: "t1", name: "echo_tool", input: { value: "a" } }],
396
- stopReason: "tool_use",
397
- usage: { inputTokens: 100, outputTokens: 20, cachedInputTokens: 80 },
398
- },
399
- {
400
- text: "Final",
401
- toolCalls: [],
402
- stopReason: "end_turn",
403
- usage: { inputTokens: 110, outputTokens: 10, cachedInputTokens: 95 },
404
- },
405
- ];
406
- const client = {
407
- async chat(params) {
408
- cacheableSystemFlags.push(params.cacheableSystem);
409
- const next = stepResponses.shift();
410
- if (!next)
411
- throw new Error("ran out of queued responses");
412
- return next;
413
- },
414
- };
415
- const agent = new CodingAgent({
416
- config: createTestAgentConfig("/tmp"),
417
- modelClient: client,
418
- toolRegistry: new ToolRegistry([createEchoTool()]),
419
- });
420
- const result = await agent.runTurn("Hello");
421
- assert.deepEqual(cacheableSystemFlags, [true, true], "agent should default to cacheableSystem: true on every step when enableDynamicPrompt is off");
422
- assert.equal(result.usage?.cachedInputTokens, 175, "should sum 80 + 95 across the turn");
423
- assert.equal(result.usage?.inputTokens, 210);
424
- });
425
- test("agent passes cacheableSystem: false when enableDynamicPrompt is enabled", async () => {
426
- const cacheableSystemFlags = [];
427
- const client = {
428
- async chat(params) {
429
- cacheableSystemFlags.push(params.cacheableSystem);
430
- return {
431
- text: "Done",
432
- toolCalls: [],
433
- stopReason: "end_turn",
434
- usage: { inputTokens: 50, outputTokens: 5 },
435
- };
436
- },
437
- };
438
- const agent = new CodingAgent({
439
- config: { ...createTestAgentConfig("/tmp"), enableDynamicPrompt: true },
440
- modelClient: client,
441
- toolRegistry: new ToolRegistry([createEchoTool()]),
442
- });
443
- await agent.runTurn("Hello");
444
- assert.deepEqual(cacheableSystemFlags, [false], "dynamic prompts rebuild the system on every step, so caching it would just burn cache writes");
445
- });
446
- test("agent omits cachedInputTokens when no step reported any", async () => {
447
- const client = {
448
- async chat() {
449
- return {
450
- text: "Done",
451
- toolCalls: [],
452
- stopReason: "end_turn",
453
- usage: { inputTokens: 50, outputTokens: 5 },
454
- };
455
- },
456
- };
457
- const agent = new CodingAgent({
458
- config: createTestAgentConfig("/tmp"),
459
- modelClient: client,
460
- toolRegistry: new ToolRegistry([createEchoTool()]),
461
- });
462
- const result = await agent.runTurn("Hello");
463
- assert.equal(result.usage?.cachedInputTokens, undefined, "no cache hits should mean no cachedInputTokens field on the totals");
464
- });
465
- test("buildSystemPrompt override replaces the default builder", async () => {
466
- let capturedSystem = "";
467
- const spyClient = {
468
- async chat(params) {
469
- capturedSystem = params.system;
470
- return {
471
- text: "ok",
472
- toolCalls: [],
473
- stopReason: "end_turn",
474
- usage: { inputTokens: 1, outputTokens: 1 },
475
- };
476
- },
477
- };
478
- const agent = new CodingAgent({
479
- config: createTestAgentConfig("/tmp"),
480
- modelClient: spyClient,
481
- toolRegistry: new ToolRegistry([createEchoTool()]),
482
- buildSystemPrompt: () => "CUSTOM PROMPT — nothing else",
483
- });
484
- await agent.runTurn("Hello");
485
- assert.equal(capturedSystem, "CUSTOM PROMPT — nothing else");
486
- assert.ok(!capturedSystem.includes("[Identity]"), "default coding-agent identity should not appear when overridden");
487
- });
488
- test("buildSystemPrompt override receives config, tools, and codeMap context", async () => {
489
- const seenCtx = [];
490
- const spyClient = {
491
- async chat() {
492
- return {
493
- text: "ok",
494
- toolCalls: [],
495
- stopReason: "end_turn",
496
- usage: { inputTokens: 1, outputTokens: 1 },
497
- };
498
- },
499
- };
500
- const agent = new CodingAgent({
501
- config: { ...createTestAgentConfig("/some/workspace"), enableDynamicPrompt: true },
502
- modelClient: spyClient,
503
- toolRegistry: new ToolRegistry([createEchoTool()]),
504
- getCodeMap: () => ({ text: "# map", shownCount: 1, totalCount: 1 }),
505
- buildSystemPrompt: (ctx) => {
506
- seenCtx.push({
507
- workspaceRoot: ctx.config.workspaceRoot,
508
- toolNames: ctx.tools.map((t) => t.name),
509
- hasCodeMap: ctx.codeMap !== undefined,
510
- });
511
- return "x";
512
- },
513
- });
514
- await agent.runTurn("Hi");
515
- assert.equal(seenCtx.length, 1);
516
- assert.equal(seenCtx[0].workspaceRoot, "/some/workspace");
517
- assert.deepEqual(seenCtx[0].toolNames, ["echo_tool"]);
518
- assert.equal(seenCtx[0].hasCodeMap, true);
519
- });
520
- test("buildSystemPrompt override may return a Promise (async builder)", async () => {
521
- let capturedSystem = "";
522
- const spyClient = {
523
- async chat(params) {
524
- capturedSystem = params.system;
525
- return {
526
- text: "ok",
527
- toolCalls: [],
528
- stopReason: "end_turn",
529
- usage: { inputTokens: 1, outputTokens: 1 },
530
- };
531
- },
532
- };
533
- const agent = new CodingAgent({
534
- config: createTestAgentConfig("/tmp"),
535
- modelClient: spyClient,
536
- toolRegistry: new ToolRegistry([createEchoTool()]),
537
- buildSystemPrompt: async () => {
538
- // Simulate fetching context async (e.g. RAG, git status, on-disk prefs).
539
- await new Promise((resolve) => setTimeout(resolve, 5));
540
- return "ASYNC PROMPT";
541
- },
542
- });
543
- await agent.runTurn("Hello");
544
- assert.equal(capturedSystem, "ASYNC PROMPT");
545
- });
546
- test("getSystemPromptSuffix still appends after the buildSystemPrompt override", async () => {
547
- let capturedSystem = "";
548
- const spyClient = {
549
- async chat(params) {
550
- capturedSystem = params.system;
551
- return {
552
- text: "ok",
553
- toolCalls: [],
554
- stopReason: "end_turn",
555
- usage: { inputTokens: 1, outputTokens: 1 },
556
- };
557
- },
558
- };
559
- const agent = new CodingAgent({
560
- config: createTestAgentConfig("/tmp"),
561
- modelClient: spyClient,
562
- toolRegistry: new ToolRegistry([createEchoTool()]),
563
- buildSystemPrompt: () => "BASE",
564
- getSystemPromptSuffix: () => "EXTRA",
565
- });
566
- await agent.runTurn("Hello");
567
- assert.equal(capturedSystem, "BASE\n\nEXTRA", "suffix should append regardless of which builder produced the base");
568
- });
569
- //# sourceMappingURL=agent.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.test.js","sourceRoot":"","sources":["../../tests/agent.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=file-tools.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-tools.test.d.ts","sourceRoot":"","sources":["../../tests/file-tools.test.ts"],"names":[],"mappings":""}