@sdsrs/codeagent 0.2.1 → 0.4.0

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 (167) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +18 -6
  3. package/dist/adapters/__tests__/code-graph.test.d.ts +2 -0
  4. package/dist/adapters/__tests__/code-graph.test.d.ts.map +1 -0
  5. package/dist/adapters/__tests__/code-graph.test.js +118 -0
  6. package/dist/adapters/__tests__/code-graph.test.js.map +1 -0
  7. package/dist/adapters/__tests__/memory.test.d.ts +2 -0
  8. package/dist/adapters/__tests__/memory.test.d.ts.map +1 -0
  9. package/dist/adapters/__tests__/memory.test.js +168 -0
  10. package/dist/adapters/__tests__/memory.test.js.map +1 -0
  11. package/dist/adapters/code-graph.d.ts +7 -1
  12. package/dist/adapters/code-graph.d.ts.map +1 -1
  13. package/dist/adapters/code-graph.js +69 -33
  14. package/dist/adapters/code-graph.js.map +1 -1
  15. package/dist/adapters/memory.d.ts +1 -1
  16. package/dist/adapters/memory.d.ts.map +1 -1
  17. package/dist/adapters/memory.js +23 -14
  18. package/dist/adapters/memory.js.map +1 -1
  19. package/dist/adapters/orchestration/gsd.d.ts +0 -0
  20. package/dist/adapters/orchestration/gsd.d.ts.map +1 -1
  21. package/dist/adapters/orchestration/gsd.js +18 -1
  22. package/dist/adapters/orchestration/gsd.js.map +1 -1
  23. package/dist/adapters/orchestration/interface.d.ts +0 -0
  24. package/dist/adapters/orchestration/interface.d.ts.map +0 -0
  25. package/dist/adapters/orchestration/interface.js +0 -0
  26. package/dist/adapters/orchestration/interface.js.map +0 -0
  27. package/dist/adapters/orchestration/superpowers.d.ts +0 -0
  28. package/dist/adapters/orchestration/superpowers.d.ts.map +0 -0
  29. package/dist/adapters/orchestration/superpowers.js +0 -0
  30. package/dist/adapters/orchestration/superpowers.js.map +0 -0
  31. package/dist/broker/__tests__/broker.test.d.ts +2 -0
  32. package/dist/broker/__tests__/broker.test.d.ts.map +1 -0
  33. package/dist/broker/__tests__/broker.test.js +207 -0
  34. package/dist/broker/__tests__/broker.test.js.map +1 -0
  35. package/dist/broker/__tests__/compressor.test.d.ts +2 -0
  36. package/dist/broker/__tests__/compressor.test.d.ts.map +1 -0
  37. package/dist/broker/__tests__/compressor.test.js +278 -0
  38. package/dist/broker/__tests__/compressor.test.js.map +1 -0
  39. package/dist/broker/__tests__/query-parser.test.d.ts +2 -0
  40. package/dist/broker/__tests__/query-parser.test.d.ts.map +1 -0
  41. package/dist/broker/__tests__/query-parser.test.js +101 -0
  42. package/dist/broker/__tests__/query-parser.test.js.map +1 -0
  43. package/dist/broker/broker.d.ts +1 -1
  44. package/dist/broker/broker.d.ts.map +1 -1
  45. package/dist/broker/broker.js +45 -29
  46. package/dist/broker/broker.js.map +1 -1
  47. package/dist/broker/compressor.d.ts +0 -0
  48. package/dist/broker/compressor.d.ts.map +1 -1
  49. package/dist/broker/compressor.js +82 -2
  50. package/dist/broker/compressor.js.map +1 -1
  51. package/dist/broker/context-pack.d.ts +3 -0
  52. package/dist/broker/context-pack.d.ts.map +1 -1
  53. package/dist/broker/context-pack.js +18 -0
  54. package/dist/broker/context-pack.js.map +1 -1
  55. package/dist/broker/query-parser.d.ts +0 -0
  56. package/dist/broker/query-parser.d.ts.map +0 -0
  57. package/dist/broker/query-parser.js +0 -0
  58. package/dist/broker/query-parser.js.map +0 -0
  59. package/dist/cli/commands/chat.d.ts +0 -0
  60. package/dist/cli/commands/chat.d.ts.map +1 -1
  61. package/dist/cli/commands/chat.js +14 -1
  62. package/dist/cli/commands/chat.js.map +1 -1
  63. package/dist/cli/commands/config.d.ts +1 -2
  64. package/dist/cli/commands/config.d.ts.map +1 -1
  65. package/dist/cli/commands/config.js +0 -0
  66. package/dist/cli/commands/config.js.map +0 -0
  67. package/dist/cli/commands/memory.d.ts +0 -0
  68. package/dist/cli/commands/memory.d.ts.map +0 -0
  69. package/dist/cli/commands/memory.js +0 -0
  70. package/dist/cli/commands/memory.js.map +0 -0
  71. package/dist/cli/commands/search.d.ts +0 -0
  72. package/dist/cli/commands/search.d.ts.map +1 -1
  73. package/dist/cli/commands/search.js +6 -2
  74. package/dist/cli/commands/search.js.map +1 -1
  75. package/dist/cli/commands/session.d.ts +0 -0
  76. package/dist/cli/commands/session.d.ts.map +0 -0
  77. package/dist/cli/commands/session.js +0 -0
  78. package/dist/cli/commands/session.js.map +0 -0
  79. package/dist/cli/index.d.ts +0 -0
  80. package/dist/cli/index.d.ts.map +0 -0
  81. package/dist/cli/index.js +6 -4
  82. package/dist/cli/index.js.map +1 -1
  83. package/dist/cli/tui/renderer.d.ts +0 -0
  84. package/dist/cli/tui/renderer.d.ts.map +0 -0
  85. package/dist/cli/tui/renderer.js +0 -0
  86. package/dist/cli/tui/renderer.js.map +0 -0
  87. package/dist/hooks/__tests__/stop.test.d.ts +2 -0
  88. package/dist/hooks/__tests__/stop.test.d.ts.map +1 -0
  89. package/dist/hooks/__tests__/stop.test.js +88 -0
  90. package/dist/hooks/__tests__/stop.test.js.map +1 -0
  91. package/dist/hooks/post-compact.d.ts +0 -0
  92. package/dist/hooks/post-compact.d.ts.map +0 -0
  93. package/dist/hooks/post-compact.js +8 -7
  94. package/dist/hooks/post-compact.js.map +1 -1
  95. package/dist/hooks/session-start.d.ts +0 -0
  96. package/dist/hooks/session-start.d.ts.map +0 -0
  97. package/dist/hooks/session-start.js +6 -5
  98. package/dist/hooks/session-start.js.map +1 -1
  99. package/dist/hooks/stop.d.ts +6 -0
  100. package/dist/hooks/stop.d.ts.map +1 -1
  101. package/dist/hooks/stop.js +59 -42
  102. package/dist/hooks/stop.js.map +1 -1
  103. package/dist/hooks/user-prompt.d.ts +0 -0
  104. package/dist/hooks/user-prompt.d.ts.map +0 -0
  105. package/dist/hooks/user-prompt.js +0 -0
  106. package/dist/hooks/user-prompt.js.map +0 -0
  107. package/dist/providers/__tests__/anthropic-api.test.d.ts +2 -0
  108. package/dist/providers/__tests__/anthropic-api.test.d.ts.map +1 -0
  109. package/dist/providers/__tests__/anthropic-api.test.js +113 -0
  110. package/dist/providers/__tests__/anthropic-api.test.js.map +1 -0
  111. package/dist/providers/__tests__/claude-sdk.test.d.ts +2 -0
  112. package/dist/providers/__tests__/claude-sdk.test.d.ts.map +1 -0
  113. package/dist/providers/__tests__/claude-sdk.test.js +121 -0
  114. package/dist/providers/__tests__/claude-sdk.test.js.map +1 -0
  115. package/dist/providers/anthropic-api.d.ts +1 -0
  116. package/dist/providers/anthropic-api.d.ts.map +1 -1
  117. package/dist/providers/anthropic-api.js +18 -12
  118. package/dist/providers/anthropic-api.js.map +1 -1
  119. package/dist/providers/claude-cli.d.ts +0 -0
  120. package/dist/providers/claude-cli.d.ts.map +1 -1
  121. package/dist/providers/claude-cli.js +4 -16
  122. package/dist/providers/claude-cli.js.map +1 -1
  123. package/dist/providers/claude-sdk.d.ts +3 -2
  124. package/dist/providers/claude-sdk.d.ts.map +1 -1
  125. package/dist/providers/claude-sdk.js +12 -11
  126. package/dist/providers/claude-sdk.js.map +1 -1
  127. package/dist/providers/interface.d.ts +1 -0
  128. package/dist/providers/interface.d.ts.map +1 -1
  129. package/dist/providers/interface.js +0 -0
  130. package/dist/providers/interface.js.map +0 -0
  131. package/dist/scripts/install-hooks.d.ts +2 -2
  132. package/dist/scripts/install-hooks.d.ts.map +0 -0
  133. package/dist/scripts/install-hooks.js +6 -9
  134. package/dist/scripts/install-hooks.js.map +1 -1
  135. package/dist/session/__tests__/manager.test.d.ts +2 -0
  136. package/dist/session/__tests__/manager.test.d.ts.map +1 -0
  137. package/dist/session/__tests__/manager.test.js +108 -0
  138. package/dist/session/__tests__/manager.test.js.map +1 -0
  139. package/dist/session/manager.d.ts +0 -0
  140. package/dist/session/manager.d.ts.map +1 -1
  141. package/dist/session/manager.js +2 -1
  142. package/dist/session/manager.js.map +1 -1
  143. package/dist/session/schema.d.ts +0 -0
  144. package/dist/session/schema.d.ts.map +1 -1
  145. package/dist/session/schema.js +2 -1
  146. package/dist/session/schema.js.map +1 -1
  147. package/dist/utils/__tests__/exec.test.d.ts +2 -0
  148. package/dist/utils/__tests__/exec.test.d.ts.map +1 -0
  149. package/dist/utils/__tests__/exec.test.js +104 -0
  150. package/dist/utils/__tests__/exec.test.js.map +1 -0
  151. package/dist/utils/__tests__/tokens.test.d.ts +2 -0
  152. package/dist/utils/__tests__/tokens.test.d.ts.map +1 -0
  153. package/dist/utils/__tests__/tokens.test.js +64 -0
  154. package/dist/utils/__tests__/tokens.test.js.map +1 -0
  155. package/dist/utils/exec.d.ts +16 -0
  156. package/dist/utils/exec.d.ts.map +1 -1
  157. package/dist/utils/exec.js +33 -3
  158. package/dist/utils/exec.js.map +1 -1
  159. package/dist/utils/tokens.d.ts +0 -0
  160. package/dist/utils/tokens.d.ts.map +0 -0
  161. package/dist/utils/tokens.js +0 -0
  162. package/dist/utils/tokens.js.map +0 -0
  163. package/package.json +1 -1
  164. package/src/skills/brainstorm.md +0 -0
  165. package/src/skills/remember.md +0 -0
  166. package/src/skills/review.md +0 -0
  167. package/src/skills/spec.md +0 -0
@@ -8,15 +8,16 @@
8
8
  * Runs once per session. Can be slower than UserPromptSubmit (5s budget).
9
9
  */
10
10
  import { ContextBroker } from '../broker/broker.js';
11
- import { execQuiet } from '../utils/exec.js';
11
+ import { execQuietAsync } from '../utils/exec.js';
12
12
  import { truncateToTokenBudget } from '../utils/tokens.js';
13
13
  async function main() {
14
14
  const repoRoot = process.cwd();
15
15
  const broker = new ContextBroker(repoRoot);
16
- // Get session context (repo map + orchestration state)
17
- const pack = await broker.buildSessionContext();
18
- // Also get recent memory summary
19
- const recentMem = execQuiet('claude-mem-lite', ['search', '', '--limit', '5'], { timeout: 2000 });
16
+ // Run session context and recent memory in parallel
17
+ const [pack, recentMem] = await Promise.all([
18
+ broker.buildSessionContext(),
19
+ execQuietAsync('claude-mem-lite', ['timeline', '--limit', '5'], { timeout: 2000 }),
20
+ ]);
20
21
  const sections = [];
21
22
  // Repo overview
22
23
  if (pack.repoSummary) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE3C,uDAAuD;IACvD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAEhD,iCAAiC;IACjC,MAAM,SAAS,GAAG,SAAS,CACzB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EACjD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;IAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,gBAAgB;IAChB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,wBAAwB,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,IAAI,CAAC,YAAY;QAAE,SAAS,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,UAAU;QAAE,SAAS,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,mBAAmB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,kBAAkB;IAClB,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,qBAAqB,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wBAAwB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,CACtE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE3C,oDAAoD;IACpD,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,MAAM,CAAC,mBAAmB,EAAE;QAC5B,cAAc,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACnF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,gBAAgB;IAChB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,wBAAwB,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,IAAI,CAAC,YAAY;QAAE,SAAS,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,UAAU;QAAE,SAAS,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,mBAAmB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,kBAAkB;IAClB,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,qBAAqB,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wBAAwB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,CACtE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -7,5 +7,11 @@
7
7
  *
8
8
  * Extracts: file modifications, error resolutions, architecture decisions.
9
9
  */
10
+ interface MemoryCandidate {
11
+ type: string;
12
+ title: string;
13
+ body: string;
14
+ }
15
+ export declare function extractMemories(summary: string): MemoryCandidate[];
10
16
  export {};
11
17
  //# sourceMappingURL=stop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAyCH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAoElE"}
@@ -8,7 +8,7 @@
8
8
  * Extracts: file modifications, error resolutions, architecture decisions.
9
9
  */
10
10
  import fs from 'node:fs';
11
- import { execSafe } from '../utils/exec.js';
11
+ import { execSafeAsync } from '../utils/exec.js';
12
12
  async function main() {
13
13
  // Read input from stdin
14
14
  let input = {};
@@ -26,65 +26,82 @@ async function main() {
26
26
  }
27
27
  // Extract potential memories using simple heuristics
28
28
  const memories = extractMemories(summary);
29
- // Save each memory
30
- for (const mem of memories) {
31
- execSafe('claude-mem-lite', ['save', '--type', mem.type, '--title', mem.title, '--body', mem.body], { timeout: 3000 });
32
- }
29
+ // Save all memories in parallel
30
+ await Promise.allSettled(memories.map((mem) => execSafeAsync('claude-mem-lite', ['save', '--type', mem.type, '--title', mem.title, '--body', mem.body], { timeout: 3000 })));
33
31
  }
34
- function extractMemories(summary) {
32
+ export function extractMemories(summary) {
35
33
  const memories = [];
36
- // Detect bug fixes
34
+ // Split on sentence boundaries (period/Chinese period followed by whitespace and uppercase/CJK)
35
+ // More conservative than splitting on every period (avoids breaking on file paths, versions)
36
+ const sentences = summary.split(/(?<=[.。])\s+(?=[A-Z\u4e00-\u9fff])/);
37
+ // Detect bug fixes — search across sentences
37
38
  const bugPatterns = [
38
- /(?:fixed|resolved|debugged|solved)\s+(.+?)(?:\.|$)/i,
39
- /(?:bug|error|issue)\s*(?:was|:)\s*(.+?)(?:\.|$)/i,
40
- /(?:修复|解决|排查)\s*[了]?\s*(.+?)(?:。|$)/i,
39
+ /(?:fixed|resolved|debugged|solved)\s+(.+)/i,
40
+ /(?:bug|error|issue)\s*(?:was|:)\s*(.+)/i,
41
+ /(?:修复|解决|排查)\s*[了]?\s*(.+)/i,
41
42
  ];
42
- for (const pattern of bugPatterns) {
43
- const match = pattern.exec(summary);
44
- if (match?.[1]) {
45
- memories.push({
46
- type: 'bugfix',
47
- title: match[1].trim().slice(0, 100),
48
- body: `Extracted from session summary: ${match[0].trim()}`,
49
- });
50
- break; // One bug memory per session max
43
+ for (const sentence of sentences) {
44
+ if (memories.some((m) => m.type === 'bugfix'))
45
+ break;
46
+ for (const pattern of bugPatterns) {
47
+ const match = pattern.exec(sentence);
48
+ if (match?.[1]) {
49
+ memories.push({
50
+ type: 'bugfix',
51
+ title: match[1].trim().slice(0, 100),
52
+ body: `Session discovery: ${sentence.trim().slice(0, 300)}`,
53
+ });
54
+ break;
55
+ }
51
56
  }
52
57
  }
53
58
  // Detect architecture decisions
54
59
  const decisionPatterns = [
55
- /(?:decided|chose|selected|went with)\s+(.+?)(?:\.|$)/i,
56
- /(?:决定|选择|采用)\s*[了]?\s*(.+?)(?:。|$)/i,
60
+ /(?:decided|chose|selected|went with)\s+(.+)/i,
61
+ /(?:决定|选择|采用)\s*[了]?\s*(.+)/i,
57
62
  ];
58
- for (const pattern of decisionPatterns) {
59
- const match = pattern.exec(summary);
60
- if (match?.[1]) {
61
- memories.push({
62
- type: 'decision',
63
- title: match[1].trim().slice(0, 100),
64
- body: `Extracted from session summary: ${match[0].trim()}`,
65
- });
63
+ for (const sentence of sentences) {
64
+ if (memories.some((m) => m.type === 'decision'))
66
65
  break;
66
+ for (const pattern of decisionPatterns) {
67
+ const match = pattern.exec(sentence);
68
+ if (match?.[1]) {
69
+ memories.push({
70
+ type: 'decision',
71
+ title: match[1].trim().slice(0, 100),
72
+ body: `Session discovery: ${sentence.trim().slice(0, 300)}`,
73
+ });
74
+ break;
75
+ }
67
76
  }
68
77
  }
69
78
  // Detect discoveries
70
79
  const discoveryPatterns = [
71
- /(?:discovered|found out|learned|realized)\s+(.+?)(?:\.|$)/i,
72
- /(?:发现|了解到|学到)\s*[了]?\s*(.+?)(?:。|$)/i,
80
+ /(?:discovered|found out|learned|realized)\s+(.+)/i,
81
+ /(?:发现|了解到|学到)\s*[了]?\s*(.+)/i,
73
82
  ];
74
- for (const pattern of discoveryPatterns) {
75
- const match = pattern.exec(summary);
76
- if (match?.[1]) {
77
- memories.push({
78
- type: 'discovery',
79
- title: match[1].trim().slice(0, 100),
80
- body: `Extracted from session summary: ${match[0].trim()}`,
81
- });
83
+ for (const sentence of sentences) {
84
+ if (memories.some((m) => m.type === 'discovery'))
82
85
  break;
86
+ for (const pattern of discoveryPatterns) {
87
+ const match = pattern.exec(sentence);
88
+ if (match?.[1]) {
89
+ memories.push({
90
+ type: 'discovery',
91
+ title: match[1].trim().slice(0, 100),
92
+ body: `Session discovery: ${sentence.trim().slice(0, 300)}`,
93
+ });
94
+ break;
95
+ }
83
96
  }
84
97
  }
85
98
  return memories;
86
99
  }
87
- main().catch(() => {
88
- process.exit(0);
89
- });
100
+ // Only run when executed directly (not when imported for testing)
101
+ const isMain = import.meta.url === new URL(process.argv[1] ?? '', 'file://').href;
102
+ if (isMain) {
103
+ main().catch(() => {
104
+ process.exit(0);
105
+ });
106
+ }
90
107
  //# sourceMappingURL=stop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=anthropic-api.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-api.test.d.ts","sourceRoot":"","sources":["../../../src/providers/__tests__/anthropic-api.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,113 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ // Mock the Anthropic SDK
3
+ vi.mock('@anthropic-ai/sdk', () => {
4
+ return {
5
+ default: vi.fn().mockImplementation(() => ({
6
+ messages: {
7
+ stream: vi.fn(),
8
+ },
9
+ })),
10
+ };
11
+ });
12
+ import { AnthropicAPIProvider } from '../anthropic-api.js';
13
+ function createMockStream(text, usage = { input_tokens: 100, output_tokens: 50 }) {
14
+ const events = [
15
+ { type: 'content_block_delta', delta: { type: 'text_delta', text } },
16
+ ];
17
+ return {
18
+ [Symbol.asyncIterator]: async function* () {
19
+ for (const e of events)
20
+ yield e;
21
+ },
22
+ finalMessage: async () => ({
23
+ usage,
24
+ model: 'claude-sonnet-4-20250514',
25
+ }),
26
+ };
27
+ }
28
+ describe('AnthropicAPIProvider', () => {
29
+ let provider;
30
+ beforeEach(() => {
31
+ vi.clearAllMocks();
32
+ provider = new AnthropicAPIProvider({ apiKey: 'test-key' });
33
+ });
34
+ it('starts a session with api- prefix', async () => {
35
+ const handle = await provider.startSession();
36
+ expect(handle.sessionId).toMatch(/^api-/);
37
+ });
38
+ it('streams text from API response', async () => {
39
+ const handle = await provider.startSession();
40
+ // Get the mock client from the provider
41
+ const client = provider.client;
42
+ client.messages.stream.mockReturnValue(createMockStream('Hello from API'));
43
+ const events = [];
44
+ for await (const event of provider.sendTurn(handle, { userMessage: 'hello' })) {
45
+ events.push(event);
46
+ }
47
+ expect(events.find((e) => e.type === 'text')).toBeDefined();
48
+ expect(events.find((e) => e.type === 'text').content).toBe('Hello from API');
49
+ const done = events.find((e) => e.type === 'done');
50
+ expect(done).toBeDefined();
51
+ expect(done.metadata?.inputTokens).toBe(100);
52
+ expect(done.metadata?.outputTokens).toBe(50);
53
+ });
54
+ it('maintains message history per session', async () => {
55
+ const handle = await provider.startSession();
56
+ const client = provider.client;
57
+ // First turn
58
+ client.messages.stream.mockReturnValue(createMockStream('First response'));
59
+ for await (const _ of provider.sendTurn(handle, { userMessage: 'first' })) { /* consume */ }
60
+ // Second turn — should include history
61
+ client.messages.stream.mockReturnValue(createMockStream('Second response'));
62
+ for await (const _ of provider.sendTurn(handle, { userMessage: 'second' })) { /* consume */ }
63
+ // Check that the second call included history
64
+ const calls = client.messages.stream.mock.calls;
65
+ expect(calls).toHaveLength(2);
66
+ expect(calls[1][0].messages).toHaveLength(4); // user, assistant, user, assistant accumulated
67
+ });
68
+ it('uses per-session model', async () => {
69
+ const handle1 = await provider.startSession({ model: 'claude-opus-4-6' });
70
+ const handle2 = await provider.startSession({ model: 'claude-haiku-4-5-20251001' });
71
+ const client = provider.client;
72
+ client.messages.stream.mockReturnValue(createMockStream('r'));
73
+ for await (const _ of provider.sendTurn(handle1, { userMessage: 'x' })) { /* consume */ }
74
+ expect(client.messages.stream.mock.calls[0][0].model).toBe('claude-opus-4-6');
75
+ client.messages.stream.mockReturnValue(createMockStream('r'));
76
+ for await (const _ of provider.sendTurn(handle2, { userMessage: 'x' })) { /* consume */ }
77
+ expect(client.messages.stream.mock.calls[1][0].model).toBe('claude-haiku-4-5-20251001');
78
+ });
79
+ it('handles API errors gracefully', async () => {
80
+ const handle = await provider.startSession();
81
+ const client = provider.client;
82
+ client.messages.stream.mockImplementation(() => {
83
+ throw new Error('Rate limited');
84
+ });
85
+ const events = [];
86
+ for await (const event of provider.sendTurn(handle, { userMessage: 'test' })) {
87
+ events.push(event);
88
+ }
89
+ expect(events[0].type).toBe('error');
90
+ expect(events[0].content).toContain('Rate limited');
91
+ });
92
+ it('cleans up on endSession', async () => {
93
+ const handle = await provider.startSession();
94
+ await provider.endSession(handle);
95
+ // Verify internal maps are cleaned
96
+ const history = provider.messageHistory;
97
+ const models = provider.sessionModels;
98
+ expect(history.has(handle.sessionId)).toBe(false);
99
+ expect(models.has(handle.sessionId)).toBe(false);
100
+ });
101
+ it('caps message history at 50', async () => {
102
+ const handle = await provider.startSession();
103
+ const client = provider.client;
104
+ // Simulate 30 turns (60 messages)
105
+ for (let i = 0; i < 30; i++) {
106
+ client.messages.stream.mockReturnValue(createMockStream(`r${i}`));
107
+ for await (const _ of provider.sendTurn(handle, { userMessage: `m${i}` })) { /* consume */ }
108
+ }
109
+ const history = provider.messageHistory;
110
+ expect(history.get(handle.sessionId).length).toBeLessThanOrEqual(50);
111
+ });
112
+ });
113
+ //# sourceMappingURL=anthropic-api.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-api.test.js","sourceRoot":"","sources":["../../../src/providers/__tests__/anthropic-api.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=claude-sdk.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-sdk.test.d.ts","sourceRoot":"","sources":["../../../src/providers/__tests__/claude-sdk.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,121 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { ClaudeSDKProvider } from '../claude-sdk.js';
3
+ // Mock the Agent SDK — query() returns an async generator
4
+ vi.mock('@anthropic-ai/claude-agent-sdk', () => ({
5
+ query: vi.fn(),
6
+ }));
7
+ import { query } from '@anthropic-ai/claude-agent-sdk';
8
+ const mockQuery = vi.mocked(query);
9
+ function createMockQuery(messages) {
10
+ const gen = (async function* () {
11
+ for (const msg of messages)
12
+ yield msg;
13
+ })();
14
+ return Object.assign(gen, {
15
+ close: vi.fn(),
16
+ interrupt: vi.fn(),
17
+ rewindFiles: vi.fn(),
18
+ setPermissionMode: vi.fn(),
19
+ setModel: vi.fn(),
20
+ initializationResult: vi.fn(),
21
+ supportedCommands: vi.fn(),
22
+ supportedModels: vi.fn(),
23
+ supportedAgents: vi.fn(),
24
+ mcpServerStatus: vi.fn(),
25
+ reconnectMcpServer: vi.fn(),
26
+ toggleMcpServer: vi.fn(),
27
+ setMcpServers: vi.fn(),
28
+ streamInput: vi.fn(),
29
+ stopTask: vi.fn(),
30
+ });
31
+ }
32
+ describe('ClaudeSDKProvider', () => {
33
+ let provider;
34
+ beforeEach(() => {
35
+ vi.clearAllMocks();
36
+ provider = new ClaudeSDKProvider();
37
+ });
38
+ it('starts a session with sdk- prefix ID', async () => {
39
+ const handle = await provider.startSession();
40
+ expect(handle.sessionId).toMatch(/^sdk-/);
41
+ });
42
+ it('resumes a session preserving provider ID', async () => {
43
+ const handle = await provider.resumeSession('prev-session-123');
44
+ expect(handle.providerSessionId).toBe('prev-session-123');
45
+ });
46
+ it('streams text events from assistant messages', async () => {
47
+ const q = createMockQuery([
48
+ { type: 'system', session_id: 'real-id-123' },
49
+ {
50
+ type: 'assistant',
51
+ message: {
52
+ content: [{ type: 'text', text: 'Hello world' }],
53
+ },
54
+ },
55
+ { type: 'result', subtype: 'success', result: 'Done', total_cost_usd: 0.01 },
56
+ ]);
57
+ mockQuery.mockReturnValue(q);
58
+ const handle = await provider.startSession();
59
+ const events = [];
60
+ for await (const event of provider.sendTurn(handle, { userMessage: 'hi' })) {
61
+ events.push(event);
62
+ }
63
+ expect(events).toContainEqual({ type: 'text', content: 'Hello world' });
64
+ expect(events.find((e) => e.type === 'done')).toBeDefined();
65
+ expect(handle.providerSessionId).toBe('real-id-123');
66
+ });
67
+ it('streams tool_use events', async () => {
68
+ const q = createMockQuery([
69
+ {
70
+ type: 'assistant',
71
+ message: {
72
+ content: [{ type: 'tool_use', name: 'Read', id: 'tool-1', input: { file: 'foo.ts' } }],
73
+ },
74
+ },
75
+ { type: 'result', subtype: 'success', result: '' },
76
+ ]);
77
+ mockQuery.mockReturnValue(q);
78
+ const handle = await provider.startSession();
79
+ const events = [];
80
+ for await (const event of provider.sendTurn(handle, { userMessage: 'read foo' })) {
81
+ events.push(event);
82
+ }
83
+ const toolEvent = events.find((e) => e.type === 'tool_use');
84
+ expect(toolEvent).toBeDefined();
85
+ expect(toolEvent.content).toContain('Read');
86
+ });
87
+ it('handles error results', async () => {
88
+ const q = createMockQuery([
89
+ { type: 'result', subtype: 'error_api', errors: ['API rate limited'] },
90
+ ]);
91
+ mockQuery.mockReturnValue(q);
92
+ const handle = await provider.startSession();
93
+ const events = [];
94
+ for await (const event of provider.sendTurn(handle, { userMessage: 'test' })) {
95
+ events.push(event);
96
+ }
97
+ expect(events.find((e) => e.type === 'error')).toBeDefined();
98
+ });
99
+ it('yields error when query() throws', async () => {
100
+ mockQuery.mockImplementation(() => { throw new Error('SDK unavailable'); });
101
+ const handle = await provider.startSession();
102
+ const events = [];
103
+ for await (const event of provider.sendTurn(handle, { userMessage: 'test' })) {
104
+ events.push(event);
105
+ }
106
+ expect(events[0].type).toBe('error');
107
+ expect(events[0].content).toContain('SDK unavailable');
108
+ });
109
+ it('cleans up on endSession', async () => {
110
+ const q = createMockQuery([]);
111
+ mockQuery.mockReturnValue(q);
112
+ const handle = await provider.startSession();
113
+ // Consume the turn to register the query
114
+ for await (const _event of provider.sendTurn(handle, { userMessage: 'x' })) {
115
+ // consume
116
+ }
117
+ await provider.endSession(handle);
118
+ // Should not throw
119
+ });
120
+ });
121
+ //# sourceMappingURL=claude-sdk.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-sdk.test.js","sourceRoot":"","sources":["../../../src/providers/__tests__/claude-sdk.test.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ export declare class AnthropicAPIProvider implements AgentProvider {
13
13
  private client;
14
14
  private defaultModel;
15
15
  private sessionModels;
16
+ private sessionMaxTokens;
16
17
  private messageHistory;
17
18
  constructor(opts?: {
18
19
  apiKey?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-api.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic-api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,QAAQ,CAAC,IAAI,mBAAmB;IAChC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,cAAc,CAA6E;gBAEvF,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAOhD,YAAY,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAO5D,aAAa,CACjB,iBAAiB,EAAE,MAAM,EACzB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,aAAa,CAAC;IAQlB,QAAQ,CACb,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS,GACf,aAAa,CAAC,SAAS,CAAC;IAoErB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAIvD"}
1
+ {"version":3,"file":"anthropic-api.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic-api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,QAAQ,CAAC,IAAI,mBAAmB;IAChC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,cAAc,CAA6E;gBAEvF,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAOhD,YAAY,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAQ5D,aAAa,CACjB,iBAAiB,EAAE,MAAM,EACzB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,aAAa,CAAC;IASlB,QAAQ,CACb,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS,GACf,aAAa,CAAC,SAAS,CAAC;IAoErB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAKvD"}
@@ -15,6 +15,7 @@ export class AnthropicAPIProvider {
15
15
  client;
16
16
  defaultModel;
17
17
  sessionModels = new Map();
18
+ sessionMaxTokens = new Map();
18
19
  messageHistory = new Map();
19
20
  constructor(opts) {
20
21
  this.client = new Anthropic({
@@ -27,45 +28,49 @@ export class AnthropicAPIProvider {
27
28
  this.messageHistory.set(sessionId, []);
28
29
  if (opts.model)
29
30
  this.sessionModels.set(sessionId, opts.model);
31
+ if (opts.maxOutputTokens != null)
32
+ this.sessionMaxTokens.set(sessionId, opts.maxOutputTokens);
30
33
  return { sessionId };
31
34
  }
32
35
  async resumeSession(providerSessionId, opts = {}) {
33
36
  if (opts.model)
34
37
  this.sessionModels.set(providerSessionId, opts.model);
38
+ if (opts.maxOutputTokens != null)
39
+ this.sessionMaxTokens.set(providerSessionId, opts.maxOutputTokens);
35
40
  if (!this.messageHistory.has(providerSessionId)) {
36
41
  this.messageHistory.set(providerSessionId, []);
37
42
  }
38
43
  return { sessionId: providerSessionId, providerSessionId };
39
44
  }
40
45
  async *sendTurn(handle, input) {
41
- // Build message with context
42
- let userMessage = input.userMessage;
46
+ // Build dynamic system prompt with context
47
+ let systemPrompt = input.systemPrompt || 'You are a helpful coding assistant with deep project context.';
43
48
  if (input.contextPack && hasContent(input.contextPack)) {
44
49
  const contextStr = formatContextPack(input.contextPack);
45
50
  if (contextStr) {
46
- userMessage = `${contextStr}\n\n${input.userMessage}`;
51
+ systemPrompt = `${systemPrompt}\n\n${contextStr}`;
47
52
  }
48
53
  }
49
54
  // Get or create message history (cap at 50 messages to prevent unbounded growth)
50
55
  const MAX_HISTORY = 50;
56
+ const TRIM_TARGET = 40; // Trim to 40 so we don't re-trim every turn at cap
51
57
  let history = this.messageHistory.get(handle.sessionId) || [];
52
58
  if (history.length >= MAX_HISTORY) {
53
- // Keep room for new user + assistant messages, ensure we start on a user message
54
- const keepCount = MAX_HISTORY - 2;
55
- let startIdx = history.length - keepCount;
56
- // Ensure trimmed history starts with a user message (even indices are user)
57
- if (startIdx >= 0 && history[startIdx]?.role !== 'user') {
59
+ // Trim to TRIM_TARGET, ensure we start on a user message
60
+ let startIdx = history.length - TRIM_TARGET;
61
+ while (startIdx < history.length && history[startIdx]?.role !== 'user') {
58
62
  startIdx++;
59
63
  }
60
64
  history = history.slice(startIdx);
65
+ this.messageHistory.set(handle.sessionId, history);
61
66
  }
62
- history.push({ role: 'user', content: userMessage });
67
+ // Store only raw user message in history (no context injection)
68
+ history.push({ role: 'user', content: input.userMessage });
63
69
  try {
64
- // Stream the response
65
70
  const stream = this.client.messages.stream({
66
71
  model: this.sessionModels.get(handle.sessionId) || this.defaultModel,
67
- max_tokens: 4096,
68
- system: input.systemPrompt || 'You are a helpful coding assistant with deep project context.',
72
+ max_tokens: this.sessionMaxTokens.get(handle.sessionId) || 4096,
73
+ system: systemPrompt,
69
74
  messages: history,
70
75
  });
71
76
  let fullResponse = '';
@@ -100,6 +105,7 @@ export class AnthropicAPIProvider {
100
105
  async endSession(handle) {
101
106
  this.messageHistory.delete(handle.sessionId);
102
107
  this.sessionModels.delete(handle.sessionId);
108
+ this.sessionMaxTokens.delete(handle.sessionId);
103
109
  }
104
110
  }
105
111
  //# sourceMappingURL=anthropic-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-api.js","sourceRoot":"","sources":["../../src/providers/anthropic-api.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AASvD;;;;;;;;GAQG;AACH,MAAM,OAAO,oBAAoB;IACtB,IAAI,GAAG,eAAe,CAAC;IACxB,MAAM,CAAY;IAClB,YAAY,CAAS;IACrB,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,cAAc,GAAG,IAAI,GAAG,EAAkE,CAAC;IAEnG,YAAY,IAA0C;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;SACtD,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,IAAI,EAAE,KAAK,IAAI,0BAA0B,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAoB,EAAE;QACvC,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QAC1D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,iBAAyB,EACzB,OAAoB,EAAE;QAEtB,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,CAAC,QAAQ,CACb,MAAqB,EACrB,KAAgB;QAEhB,6BAA6B;QAC7B,IAAI,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACpC,IAAI,KAAK,CAAC,WAAW,IAAI,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACvD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACxD,IAAI,UAAU,EAAE,CAAC;gBACf,WAAW,GAAG,GAAG,UAAU,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;QAED,iFAAiF;QACjF,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;YAClC,iFAAiF;YACjF,MAAM,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC;YAClC,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAC1C,4EAA4E;YAC5E,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxD,QAAQ,EAAE,CAAC;YACb,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,YAAY;gBACpE,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,YAAY,IAAI,+DAA+D;gBAC7F,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YAEH,IAAI,YAAY,GAAG,EAAE,CAAC;YAEtB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,IACE,KAAK,CAAC,IAAI,KAAK,qBAAqB;oBACpC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EACjC,CAAC;oBACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAClD,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAEnD,MAAM;gBACJ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,YAAY;gBACrB,QAAQ,EAAE;oBACR,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY;oBAC5C,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa;oBAC9C,KAAK,EAAE,YAAY,CAAC,KAAK;iBAC1B;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM;gBACJ,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAqB;QACpC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;CACF"}
1
+ {"version":3,"file":"anthropic-api.js","sourceRoot":"","sources":["../../src/providers/anthropic-api.ts"],"names":[],"mappings":"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"}
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"claude-cli.d.ts","sourceRoot":"","sources":["../../src/providers/claude-cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB;;;;;;GAMG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,IAAI,gBAAgB;IAEvB,YAAY,CAAC,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAM7D,aAAa,CACjB,iBAAiB,EAAE,MAAM,EACzB,KAAK,GAAE,WAAgB,GACtB,OAAO,CAAC,aAAa,CAAC;IAOlB,QAAQ,CACb,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS,GACf,aAAa,CAAC,SAAS,CAAC;IAsDrB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxD"}
1
+ {"version":3,"file":"claude-cli.d.ts","sourceRoot":"","sources":["../../src/providers/claude-cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB;;;;;;GAMG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,IAAI,gBAAgB;IAEvB,YAAY,CAAC,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAM7D,aAAa,CACjB,iBAAiB,EAAE,MAAM,EACzB,KAAK,GAAE,WAAgB,GACtB,OAAO,CAAC,aAAa,CAAC;IAOlB,QAAQ,CACb,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS,GACf,aAAa,CAAC,SAAS,CAAC;IA0CrB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxD"}