thatgfsj-code 1.0.3 → 3.0.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 (184) hide show
  1. package/CHANGELOG.md +192 -0
  2. package/DEVELOPMENT.md +286 -0
  3. package/dist/app/index.d.ts +40 -3
  4. package/dist/app/index.d.ts.map +1 -1
  5. package/dist/app/index.js +87 -12
  6. package/dist/app/index.js.map +1 -1
  7. package/dist/cache/fingerprint.d.ts +49 -0
  8. package/dist/cache/fingerprint.d.ts.map +1 -0
  9. package/dist/cache/fingerprint.js +100 -0
  10. package/dist/cache/fingerprint.js.map +1 -0
  11. package/dist/cache/index.d.ts +15 -0
  12. package/dist/cache/index.d.ts.map +1 -0
  13. package/dist/cache/index.js +15 -0
  14. package/dist/cache/index.js.map +1 -0
  15. package/dist/cache/smartModel.d.ts +40 -0
  16. package/dist/cache/smartModel.d.ts.map +1 -0
  17. package/dist/cache/smartModel.js +43 -0
  18. package/dist/cache/smartModel.js.map +1 -0
  19. package/dist/cache/stats.d.ts +93 -0
  20. package/dist/cache/stats.d.ts.map +1 -0
  21. package/dist/cache/stats.js +155 -0
  22. package/dist/cache/stats.js.map +1 -0
  23. package/dist/cache/volatile.d.ts +32 -0
  24. package/dist/cache/volatile.d.ts.map +1 -0
  25. package/dist/cache/volatile.js +44 -0
  26. package/dist/cache/volatile.js.map +1 -0
  27. package/dist/cmd/index.d.ts +21 -0
  28. package/dist/cmd/index.d.ts.map +1 -1
  29. package/dist/cmd/index.js +155 -31
  30. package/dist/cmd/index.js.map +1 -1
  31. package/dist/config/index.d.ts.map +1 -1
  32. package/dist/config/index.js +8 -0
  33. package/dist/config/index.js.map +1 -1
  34. package/dist/config/types.d.ts +14 -0
  35. package/dist/config/types.d.ts.map +1 -1
  36. package/dist/llm/anthropic.d.ts +55 -5
  37. package/dist/llm/anthropic.d.ts.map +1 -1
  38. package/dist/llm/anthropic.js +172 -26
  39. package/dist/llm/anthropic.js.map +1 -1
  40. package/dist/llm/index.d.ts +26 -8
  41. package/dist/llm/index.d.ts.map +1 -1
  42. package/dist/llm/index.js +83 -15
  43. package/dist/llm/index.js.map +1 -1
  44. package/dist/llm/openai.d.ts +28 -8
  45. package/dist/llm/openai.d.ts.map +1 -1
  46. package/dist/llm/openai.js +58 -8
  47. package/dist/llm/openai.js.map +1 -1
  48. package/dist/llm/provider.d.ts +40 -8
  49. package/dist/llm/provider.d.ts.map +1 -1
  50. package/dist/llm/provider.js +8 -1
  51. package/dist/llm/provider.js.map +1 -1
  52. package/dist/prompts/index.d.ts +32 -0
  53. package/dist/prompts/index.d.ts.map +1 -1
  54. package/dist/prompts/index.js +33 -11
  55. package/dist/prompts/index.js.map +1 -1
  56. package/dist/session/index.d.ts +43 -3
  57. package/dist/session/index.d.ts.map +1 -1
  58. package/dist/session/index.js +114 -17
  59. package/dist/session/index.js.map +1 -1
  60. package/dist/skills/brainstorming.js +33 -33
  61. package/dist/skills/code-review.js +35 -35
  62. package/dist/skills/executing-plans.js +18 -18
  63. package/dist/skills/frontend-design.js +25 -25
  64. package/dist/skills/git-workflow.js +26 -26
  65. package/dist/skills/improve-architecture.js +28 -28
  66. package/dist/skills/neuroweave.js +37 -37
  67. package/dist/skills/playwright.js +62 -62
  68. package/dist/skills/prototype.js +20 -20
  69. package/dist/skills/subagent.js +19 -19
  70. package/dist/skills/supabase.js +34 -34
  71. package/dist/skills/systematic-debugging.js +34 -34
  72. package/dist/skills/tdd.js +29 -29
  73. package/dist/skills/triage.js +25 -25
  74. package/dist/skills/verification.js +22 -22
  75. package/dist/skills/writing-plans.js +32 -32
  76. package/dist/tools/nwt.js +16 -16
  77. package/dist/tui/app.d.ts.map +1 -1
  78. package/dist/tui/app.js +9 -2
  79. package/dist/tui/app.js.map +1 -1
  80. package/dist/tui/components/ChatList.d.ts.map +1 -1
  81. package/dist/tui/components/ChatList.js +4 -3
  82. package/dist/tui/components/ChatList.js.map +1 -1
  83. package/dist/tui/components/Header.d.ts +8 -0
  84. package/dist/tui/components/Header.d.ts.map +1 -1
  85. package/dist/tui/components/Header.js +17 -3
  86. package/dist/tui/components/Header.js.map +1 -1
  87. package/dist/tui/components/InitWizard.d.ts +12 -1
  88. package/dist/tui/components/InitWizard.d.ts.map +1 -1
  89. package/dist/tui/components/InitWizard.js +58 -3
  90. package/dist/tui/components/InitWizard.js.map +1 -1
  91. package/dist/tui/components/ToolCall.d.ts +1 -1
  92. package/dist/tui/components/ToolCall.d.ts.map +1 -1
  93. package/dist/tui/components/ToolCall.js +4 -4
  94. package/dist/tui/components/ToolCall.js.map +1 -1
  95. package/dist/tui/hooks/useChat.d.ts +22 -0
  96. package/dist/tui/hooks/useChat.d.ts.map +1 -1
  97. package/dist/tui/hooks/useChat.js +127 -50
  98. package/dist/tui/hooks/useChat.js.map +1 -1
  99. package/dist/tui/hooks/useCommands.d.ts.map +1 -1
  100. package/dist/tui/hooks/useCommands.js +78 -0
  101. package/dist/tui/hooks/useCommands.js.map +1 -1
  102. package/dist/types.d.ts +79 -6
  103. package/dist/types.d.ts.map +1 -1
  104. package/dist/types.js +7 -0
  105. package/dist/types.js.map +1 -1
  106. package/dist/utils/stableStringify.d.ts +21 -0
  107. package/dist/utils/stableStringify.d.ts.map +1 -0
  108. package/dist/utils/stableStringify.js +53 -0
  109. package/dist/utils/stableStringify.js.map +1 -0
  110. package/dist/utils/thinking.d.ts +59 -0
  111. package/dist/utils/thinking.d.ts.map +1 -0
  112. package/dist/utils/thinking.js +104 -0
  113. package/dist/utils/thinking.js.map +1 -0
  114. package/install.bat +63 -0
  115. package/install.ps1 +238 -0
  116. package/install.sh +113 -0
  117. package/package.json +7 -4
  118. package/src/app/index.ts +180 -108
  119. package/src/cache/fingerprint.ts +101 -0
  120. package/src/cache/index.ts +15 -0
  121. package/src/cache/smartModel.ts +52 -0
  122. package/src/cache/stats.ts +199 -0
  123. package/src/cache/volatile.ts +47 -0
  124. package/src/cmd/index.tsx +288 -160
  125. package/src/config/index.ts +156 -148
  126. package/src/config/providers.ts +234 -234
  127. package/src/config/types.ts +67 -53
  128. package/src/hooks/index.ts +111 -111
  129. package/src/llm/anthropic.ts +388 -243
  130. package/src/llm/gemini.ts +169 -169
  131. package/src/llm/index.ts +265 -200
  132. package/src/llm/openai.ts +243 -196
  133. package/src/llm/provider.ts +66 -34
  134. package/src/prompts/index.ts +260 -220
  135. package/src/session/compactor.ts +103 -103
  136. package/src/session/index.ts +181 -87
  137. package/src/session/message.ts +42 -42
  138. package/src/skills/brainstorming.ts +43 -43
  139. package/src/skills/code-review.ts +45 -45
  140. package/src/skills/executing-plans.ts +27 -27
  141. package/src/skills/frontend-design.ts +35 -35
  142. package/src/skills/git-workflow.ts +36 -36
  143. package/src/skills/improve-architecture.ts +38 -38
  144. package/src/skills/index.ts +136 -136
  145. package/src/skills/neuroweave.ts +47 -47
  146. package/src/skills/playwright.ts +72 -72
  147. package/src/skills/prototype.ts +30 -30
  148. package/src/skills/subagent.ts +28 -28
  149. package/src/skills/supabase.ts +44 -44
  150. package/src/skills/systematic-debugging.ts +44 -44
  151. package/src/skills/tdd.ts +39 -39
  152. package/src/skills/triage.ts +35 -35
  153. package/src/skills/verification.ts +31 -31
  154. package/src/skills/writing-plans.ts +42 -42
  155. package/src/tools/nwt.ts +598 -598
  156. package/src/tools/types.ts +122 -122
  157. package/src/tui/app.tsx +199 -186
  158. package/src/tui/components/ChatList.tsx +41 -32
  159. package/src/tui/components/ChatMessage.tsx +54 -54
  160. package/src/tui/components/Header.tsx +56 -28
  161. package/src/tui/components/InitWizard.tsx +217 -132
  162. package/src/tui/components/Markdown.tsx +35 -35
  163. package/src/tui/components/ModelSelector.tsx +87 -87
  164. package/src/tui/components/StatusBar.tsx +30 -30
  165. package/src/tui/components/Thinking.tsx +17 -17
  166. package/src/tui/components/ToolCall.tsx +102 -71
  167. package/src/tui/components/UserInput.tsx +131 -131
  168. package/src/tui/hooks/useChat.ts +287 -194
  169. package/src/tui/hooks/useCommands.ts +234 -154
  170. package/src/tui/index.ts +6 -6
  171. package/src/tui/welcome.ts +177 -177
  172. package/src/types.ts +104 -42
  173. package/src/utils/diff.ts +71 -71
  174. package/src/utils/project.ts +99 -99
  175. package/src/utils/stableStringify.ts +47 -0
  176. package/src/utils/thinking.ts +119 -0
  177. package/tests/cache/fingerprint.test.ts +75 -0
  178. package/tests/cache/stableStringify.test.ts +43 -0
  179. package/tests/cache/stats.test.ts +146 -0
  180. package/tests/cache/volatile.test.ts +75 -0
  181. package/tests/smoke-pollution.mjs +78 -0
  182. package/tests/smoke-thinking.mjs +110 -0
  183. package/tests/smoke-tool-stream.mjs +69 -0
  184. package/tests/smoke-tool.mjs +117 -0
@@ -8,14 +8,35 @@
8
8
  * Streaming: SSE with "event: ..." and "data: {...}" lines
9
9
  *
10
10
  * Key differences from OpenAI:
11
- * - System message is separate (top-level "system" field)
11
+ * - System message is separate (top-level "system" field, an array of blocks)
12
12
  * - No "system" role in messages array
13
13
  * - Tool use blocks have type "tool_use" with "input" (not "arguments")
14
14
  * - Tool results use role "tool_result" (not "tool")
15
+ *
16
+ * v3.0.0: prompt caching support
17
+ * - The top-level "system" field is now an array of content blocks. The
18
+ * last block carries cache_control: { type: 'ephemeral', ttl: '5m' }
19
+ * by default, so Anthropic caches the entire system prefix across rounds.
20
+ * The previous buildRequest silently dropped any system messages after
21
+ * the first (`find` + `system` string) — that bug is fixed here: we
22
+ * forward every system message and let the provider concatenate.
23
+ * - The last tool definition gets a cache_control marker too, so tool
24
+ * schemas are cached on subsequent rounds (Anthropic charges full price
25
+ * for uncached tool descriptions, which can be the largest single block
26
+ * in tool-heavy sessions).
27
+ * - The stream's trailing message_delta carries a `usage` object with
28
+ * cache_creation_input_tokens / cache_read_input_tokens. We yield a
29
+ * structured { type: 'usage' } chunk so the cache stats layer can
30
+ * record hit-rates.
31
+ * - JSON serialization uses stableStringify so the byte sequence of the
32
+ * request body is deterministic across rounds. Although Anthropic does
33
+ * not do byte-level prefix cache (it relies on its own fingerprint),
34
+ * deterministic serialization makes the on-the-wire body easy to diff
35
+ * when debugging cache misses.
15
36
  */
16
- import type { ChatMessage, ChatResponse, ChatOptions } from '../types.js';
37
+ import type { ChatMessage, ChatResponse, ChatOptions, StreamChunk, Usage } from '../types.js';
17
38
  import type { Tool } from '../tools/types.js';
18
- import type { LLMProvider, StreamChunk, ProviderConfig } from './provider.js';
39
+ import type { LLMProvider, ProviderConfig } from './provider.js';
19
40
  export declare class AnthropicProvider implements LLMProvider {
20
41
  readonly name = "anthropic";
21
42
  protected config: ProviderConfig;
@@ -24,12 +45,41 @@ export declare class AnthropicProvider implements LLMProvider {
24
45
  chat(messages: ChatMessage[], options?: ChatOptions, tools?: Tool[]): Promise<ChatResponse>;
25
46
  chatStream(messages: ChatMessage[], options?: ChatOptions, tools?: Tool[]): AsyncGenerator<StreamChunk, ChatResponse>;
26
47
  /**
27
- * Build request body for Anthropic API
48
+ * Build request body for Anthropic API.
49
+ *
50
+ * v3.0.0 changes:
51
+ * 1. `system` is now an array of content blocks (was a single string).
52
+ * 2. ALL system messages are forwarded (the previous code used `find`
53
+ * and dropped every system message after the first, which broke
54
+ * `[Earlier conversation...]` summaries).
55
+ * 3. The LAST system block carries cache_control, marking the entire
56
+ * system prefix as cacheable.
57
+ * 4. The LAST tool definition carries cache_control, marking the entire
58
+ * tool list as cacheable.
59
+ * 5. Per-message cache_control markers are forwarded when set on
60
+ * ChatMessage (rare, but supports fine-grained breakpoints).
61
+ * 6. JSON.parse on tool arguments is wrapped in try/catch — interrupted
62
+ * streams can leave a half-parsed JSON string that previously
63
+ * crashed the entire buildRequest.
28
64
  */
29
65
  protected buildRequest(messages: ChatMessage[], stream: boolean, options?: ChatOptions, tools?: Tool[]): any;
30
66
  /**
31
- * Execute the HTTP request
67
+ * Execute the HTTP request.
68
+ *
69
+ * v3.0.0: serialization via stableStringify; also send the
70
+ * `anthropic-beta: prompt-caching-2024-07-31` header so the API returns
71
+ * cache_read_input_tokens / cache_creation_input_tokens in the streaming
72
+ * usage fields. Some relay stations do not forward this header — that is
73
+ * fine, the rest of the provider still works (just without cache stats).
32
74
  */
33
75
  protected doRequest(body: any): Promise<Response>;
76
+ /**
77
+ * Map Anthropic usage JSON to the canonical Usage shape. Anthropic reports
78
+ * input_tokens / output_tokens on the message_start event, and adds
79
+ * cache_creation_input_tokens / cache_read_input_tokens on message_delta.
80
+ * Either can arrive first depending on the streaming order, so we accept
81
+ * either and merge.
82
+ */
83
+ protected normalizeUsage(raw: any): Usage;
34
84
  }
35
85
  //# sourceMappingURL=anthropic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAY,MAAM,aAAa,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE9E,qBAAa,iBAAkB,YAAW,WAAW;IACnD,QAAQ,CAAC,IAAI,eAAe;IAC5B,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;gBAErB,MAAM,EAAE,cAAc;IAIlC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE;IAc1B,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAsC1F,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC;IAwF5H;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;IAwDtG;;OAEG;cACa,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;CAYxD"}
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAY,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACxG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMjE,qBAAa,iBAAkB,YAAW,WAAW;IACnD,QAAQ,CAAC,IAAI,eAAe;IAC5B,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;gBAErB,MAAM,EAAE,cAAc;IAIlC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE;IAc1B,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAkC1F,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC;IA6H5H;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;IAgGtG;;;;;;;;OAQG;cACa,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBvD;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK;CAS1C"}
@@ -8,11 +8,35 @@
8
8
  * Streaming: SSE with "event: ..." and "data: {...}" lines
9
9
  *
10
10
  * Key differences from OpenAI:
11
- * - System message is separate (top-level "system" field)
11
+ * - System message is separate (top-level "system" field, an array of blocks)
12
12
  * - No "system" role in messages array
13
13
  * - Tool use blocks have type "tool_use" with "input" (not "arguments")
14
14
  * - Tool results use role "tool_result" (not "tool")
15
+ *
16
+ * v3.0.0: prompt caching support
17
+ * - The top-level "system" field is now an array of content blocks. The
18
+ * last block carries cache_control: { type: 'ephemeral', ttl: '5m' }
19
+ * by default, so Anthropic caches the entire system prefix across rounds.
20
+ * The previous buildRequest silently dropped any system messages after
21
+ * the first (`find` + `system` string) — that bug is fixed here: we
22
+ * forward every system message and let the provider concatenate.
23
+ * - The last tool definition gets a cache_control marker too, so tool
24
+ * schemas are cached on subsequent rounds (Anthropic charges full price
25
+ * for uncached tool descriptions, which can be the largest single block
26
+ * in tool-heavy sessions).
27
+ * - The stream's trailing message_delta carries a `usage` object with
28
+ * cache_creation_input_tokens / cache_read_input_tokens. We yield a
29
+ * structured { type: 'usage' } chunk so the cache stats layer can
30
+ * record hit-rates.
31
+ * - JSON serialization uses stableStringify so the byte sequence of the
32
+ * request body is deterministic across rounds. Although Anthropic does
33
+ * not do byte-level prefix cache (it relies on its own fingerprint),
34
+ * deterministic serialization makes the on-the-wire body easy to diff
35
+ * when debugging cache misses.
15
36
  */
37
+ import { stableStringify } from '../utils/stableStringify.js';
38
+ /** Default TTL for cache_control breakpoints. '5m' is cheaper to write; '1h' is preferred when sessions are long. */
39
+ const DEFAULT_CACHE_TTL = '5m';
16
40
  export class AnthropicProvider {
17
41
  name = 'anthropic';
18
42
  config;
@@ -54,11 +78,7 @@ export class AnthropicProvider {
54
78
  return {
55
79
  content,
56
80
  role: 'assistant',
57
- usage: data.usage ? {
58
- prompt_tokens: data.usage.input_tokens || 0,
59
- completion_tokens: data.usage.output_tokens || 0,
60
- total_tokens: (data.usage.input_tokens || 0) + (data.usage.output_tokens || 0),
61
- } : undefined,
81
+ usage: data.usage ? this.normalizeUsage(data.usage) : undefined,
62
82
  tool_calls: toolCalls,
63
83
  };
64
84
  }
@@ -77,6 +97,8 @@ export class AnthropicProvider {
77
97
  const toolUseBlocks = new Map();
78
98
  let currentBlockIndex = -1;
79
99
  let currentBlockType = '';
100
+ // Anthropic attaches usage info to the trailing message_delta event.
101
+ let capturedUsage;
80
102
  try {
81
103
  while (true) {
82
104
  const { done, value } = await reader.read();
@@ -102,6 +124,12 @@ export class AnthropicProvider {
102
124
  input: '',
103
125
  });
104
126
  }
127
+ else if (currentBlockType === 'thinking') {
128
+ // Anthropic extended thinking: emit as structured thinking chunks.
129
+ // TUI / session layer decides whether to surface these.
130
+ // (We don't push to fullContent — compressThinking strips
131
+ // these blocks from persistence.)
132
+ }
105
133
  }
106
134
  // content_block_delta: incremental text or tool input
107
135
  if (data.type === 'content_block_delta') {
@@ -116,6 +144,26 @@ export class AnthropicProvider {
116
144
  buf.input += data.delta.partial_json || '';
117
145
  }
118
146
  }
147
+ else if (data.delta?.type === 'thinking_delta') {
148
+ if (data.delta.thinking) {
149
+ yield { type: 'thinking', content: data.delta.thinking };
150
+ }
151
+ }
152
+ }
153
+ // message_delta carries the final usage (cache hit/miss stats).
154
+ // Per Anthropic docs: usage is only attached on the message_delta
155
+ // event of the LAST chunk (after message_stop), unless the
156
+ // `anthropic-beta: prompt-caching-2024-07-31` header is sent.
157
+ if (data.type === 'message_delta' && data.usage) {
158
+ capturedUsage = this.normalizeUsage({
159
+ ...capturedUsage,
160
+ ...data.usage,
161
+ });
162
+ }
163
+ // message_start may carry the initial input_tokens + cache info
164
+ // when prompt caching is active.
165
+ if (data.type === 'message_start' && data.message?.usage) {
166
+ capturedUsage = this.normalizeUsage(data.message.usage);
119
167
  }
120
168
  }
121
169
  catch {
@@ -141,16 +189,60 @@ export class AnthropicProvider {
141
189
  if (toolCalls.length > 0) {
142
190
  yield { type: 'tool_calls', toolCalls };
143
191
  }
144
- return { content: fullContent, role: 'assistant', tool_calls: toolCalls.length > 0 ? toolCalls : undefined };
192
+ if (capturedUsage) {
193
+ yield { type: 'usage', usage: capturedUsage };
194
+ }
195
+ return {
196
+ content: fullContent,
197
+ role: 'assistant',
198
+ usage: capturedUsage,
199
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
200
+ };
145
201
  }
146
202
  /**
147
- * Build request body for Anthropic API
203
+ * Build request body for Anthropic API.
204
+ *
205
+ * v3.0.0 changes:
206
+ * 1. `system` is now an array of content blocks (was a single string).
207
+ * 2. ALL system messages are forwarded (the previous code used `find`
208
+ * and dropped every system message after the first, which broke
209
+ * `[Earlier conversation...]` summaries).
210
+ * 3. The LAST system block carries cache_control, marking the entire
211
+ * system prefix as cacheable.
212
+ * 4. The LAST tool definition carries cache_control, marking the entire
213
+ * tool list as cacheable.
214
+ * 5. Per-message cache_control markers are forwarded when set on
215
+ * ChatMessage (rare, but supports fine-grained breakpoints).
216
+ * 6. JSON.parse on tool arguments is wrapped in try/catch — interrupted
217
+ * streams can leave a half-parsed JSON string that previously
218
+ * crashed the entire buildRequest.
148
219
  */
149
220
  buildRequest(messages, stream, options, tools) {
150
- // Anthropic uses separate system message
151
- const systemMsg = messages.find(m => m.role === 'system');
221
+ // 1) Collect ALL system messages, in order, as content blocks. The
222
+ // final block (and only the final block, per Anthropic convention)
223
+ // carries the cache_control marker.
224
+ const systemMessages = messages.filter(m => m.role === 'system');
225
+ const cacheTtl = (this.config.cache?.ttl) || DEFAULT_CACHE_TTL;
226
+ const cacheEnabled = this.config.cache?.enabled !== false; // default on for Anthropic
227
+ const systemBlocks = systemMessages.length === 0 ? undefined : systemMessages.map((m, i, arr) => {
228
+ const isLast = i === arr.length - 1;
229
+ // ChatMessage.content may be string | ContentBlock[] (the latter used
230
+ // for multimodal user messages). System messages are always plain
231
+ // strings in our codebase, but be defensive and handle both shapes.
232
+ const text = typeof m.content === 'string'
233
+ ? m.content
234
+ : m.content
235
+ .filter(b => b.type === 'text')
236
+ .map(b => b.text)
237
+ .join('');
238
+ const block = { type: 'text', text };
239
+ if (isLast && cacheEnabled) {
240
+ block.cache_control = { type: 'ephemeral', ttl: cacheTtl };
241
+ }
242
+ return block;
243
+ });
244
+ // 2) Convert non-system messages to Anthropic wire format.
152
245
  const nonSystemMsgs = messages.filter(m => m.role !== 'system');
153
- // Convert messages to Anthropic format
154
246
  const anthropicMessages = nonSystemMsgs.map(m => {
155
247
  if (m.role === 'tool') {
156
248
  // Tool result message
@@ -170,47 +262,101 @@ export class AnthropicProvider {
170
262
  blocks.push({ type: 'text', text: m.content });
171
263
  }
172
264
  for (const tc of m.tool_calls) {
265
+ // Robust parse: aborted streams can leave a half-formed JSON
266
+ // string. Fall back to {} so the request still goes through and
267
+ // the model can re-request with corrected args.
268
+ let parsedArgs = {};
269
+ try {
270
+ parsedArgs = JSON.parse(tc.function.arguments || '{}');
271
+ }
272
+ catch {
273
+ parsedArgs = {};
274
+ }
173
275
  blocks.push({
174
276
  type: 'tool_use',
175
277
  id: tc.id,
176
278
  name: tc.function.name,
177
- input: JSON.parse(tc.function.arguments || '{}'),
279
+ input: parsedArgs,
178
280
  });
179
281
  }
180
282
  return { role: 'assistant', content: blocks };
181
283
  }
182
- return {
284
+ // Forward per-message cache_control if the caller attached one
285
+ // (e.g. an inline breakpoint for a particular user message).
286
+ const baseContent = typeof m.content === 'string' ? m.content : m.content;
287
+ const msg = {
183
288
  role: m.role === 'assistant' ? 'assistant' : 'user',
184
- content: m.content,
289
+ content: baseContent,
185
290
  };
291
+ if (m.cache_control) {
292
+ msg.cache_control = m.cache_control;
293
+ }
294
+ return msg;
186
295
  });
187
296
  const body = {
188
297
  model: this.config.model,
189
298
  max_tokens: options?.maxTokens ?? this.config.maxTokens ?? 4096,
190
299
  temperature: options?.temperature ?? this.config.temperature,
191
- ...(systemMsg && { system: systemMsg.content }),
300
+ ...(systemBlocks ? { system: systemBlocks } : {}),
192
301
  messages: anthropicMessages,
193
302
  stream,
194
303
  };
304
+ // 3) Tools. Attach cache_control only to the LAST tool so Anthropic
305
+ // caches the entire tool list as a single breakpoint.
195
306
  if (tools && tools.length > 0) {
196
- body.tools = this.buildTools(tools);
307
+ const toolDefs = this.buildTools(tools);
308
+ if (cacheEnabled) {
309
+ toolDefs[toolDefs.length - 1].cache_control = { type: 'ephemeral', ttl: cacheTtl };
310
+ }
311
+ body.tools = toolDefs;
197
312
  }
198
313
  return body;
199
314
  }
200
315
  /**
201
- * Execute the HTTP request
316
+ * Execute the HTTP request.
317
+ *
318
+ * v3.0.0: serialization via stableStringify; also send the
319
+ * `anthropic-beta: prompt-caching-2024-07-31` header so the API returns
320
+ * cache_read_input_tokens / cache_creation_input_tokens in the streaming
321
+ * usage fields. Some relay stations do not forward this header — that is
322
+ * fine, the rest of the provider still works (just without cache stats).
202
323
  */
203
324
  async doRequest(body) {
204
325
  const url = `${this.config.baseUrl}/messages`;
205
- return fetch(url, {
206
- method: 'POST',
207
- headers: {
208
- 'Content-Type': 'application/json',
209
- 'x-api-key': this.config.apiKey,
210
- 'anthropic-version': '2023-06-01',
211
- },
212
- body: JSON.stringify(body),
213
- });
326
+ const controller = new AbortController();
327
+ const timeout = setTimeout(() => controller.abort(), 60000); // 60s
328
+ try {
329
+ return await fetch(url, {
330
+ method: 'POST',
331
+ headers: {
332
+ 'Content-Type': 'application/json',
333
+ 'x-api-key': this.config.apiKey,
334
+ 'anthropic-version': '2023-06-01',
335
+ 'anthropic-beta': 'prompt-caching-2024-07-31',
336
+ },
337
+ body: stableStringify(body),
338
+ signal: controller.signal,
339
+ });
340
+ }
341
+ finally {
342
+ clearTimeout(timeout);
343
+ }
344
+ }
345
+ /**
346
+ * Map Anthropic usage JSON to the canonical Usage shape. Anthropic reports
347
+ * input_tokens / output_tokens on the message_start event, and adds
348
+ * cache_creation_input_tokens / cache_read_input_tokens on message_delta.
349
+ * Either can arrive first depending on the streaming order, so we accept
350
+ * either and merge.
351
+ */
352
+ normalizeUsage(raw) {
353
+ return {
354
+ prompt_tokens: raw.input_tokens || 0,
355
+ completion_tokens: raw.output_tokens || 0,
356
+ total_tokens: (raw.input_tokens || 0) + (raw.output_tokens || 0),
357
+ cache_creation_input_tokens: raw.cache_creation_input_tokens,
358
+ cache_read_input_tokens: raw.cache_read_input_tokens,
359
+ };
214
360
  }
215
361
  }
216
362
  //# sourceMappingURL=anthropic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,qHAAqH;AACrH,MAAM,iBAAiB,GAAgB,IAAI,CAAC;AAE5C,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,WAAW,CAAC;IAClB,MAAM,CAAiB;IAEjC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,WAAW,IAAI;gBAChC,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,MAAM,CAAC,WAAW,CAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CACjF;gBACD,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACnE;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAuB,EAAE,OAAqB,EAAE,KAAc;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,uBAAuB;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7E,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE5D,qBAAqB;QACrB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;QACpF,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC1E,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;aACnC;SACF,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO;YACL,OAAO;YACP,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/D,UAAU,EAAE,SAAS;SACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CAAC,QAAuB,EAAE,OAAqB,EAAE,KAAc;QAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,wBAAwB;QACxB,MAAM,aAAa,GAA6D,IAAI,GAAG,EAAE,CAAC;QAC1F,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,qEAAqE;QACrE,IAAI,aAAgC,CAAC;QAErC,IAAI,CAAC;YACH,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBAExD,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAE1C,yCAAyC;wBACzC,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;4BACxC,iBAAiB,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;4BACpC,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC;4BAClD,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;gCACpC,aAAa,CAAC,GAAG,CAAC,iBAAiB,EAAE;oCACnC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE;oCAC/B,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE;oCACnC,KAAK,EAAE,EAAE;iCACV,CAAC,CAAC;4BACL,CAAC;iCAAM,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;gCAC3C,mEAAmE;gCACnE,wDAAwD;gCACxD,0DAA0D;gCAC1D,kCAAkC;4BACpC,CAAC;wBACH,CAAC;wBAED,sDAAsD;wBACtD,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;4BACxC,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;gCACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gCAC7B,WAAW,IAAI,IAAI,CAAC;gCACpB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;4BACxC,CAAC;iCAAM,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,kBAAkB,EAAE,CAAC;gCACnD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gCACjD,IAAI,GAAG,EAAE,CAAC;oCACR,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;gCAC7C,CAAC;4BACH,CAAC;iCAAM,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,gBAAgB,EAAE,CAAC;gCACjD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oCACxB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gCAC3D,CAAC;4BACH,CAAC;wBACH,CAAC;wBAED,gEAAgE;wBAChE,kEAAkE;wBAClE,2DAA2D;wBAC3D,8DAA8D;wBAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;4BAChD,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;gCAClC,GAAG,aAAa;gCAChB,GAAG,IAAI,CAAC,KAAK;6BACd,CAAC,CAAC;wBACL,CAAC;wBAED,gEAAgE;wBAChE,iCAAiC;wBACjC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;4BACzD,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBAC1D,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,oBAAoB;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,wCAAwC;QACxC,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACvB,SAAS,CAAC,IAAI,CAAC;oBACb,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE;iBACnD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QAC1C,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;QAChD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACzD,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACO,YAAY,CAAC,QAAuB,EAAE,MAAe,EAAE,OAAqB,EAAE,KAAc;QACpG,mEAAmE;QACnE,sEAAsE;QACtE,uCAAuC;QACvC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,iBAAiB,CAAC;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC,2BAA2B;QAEtF,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;YAC9F,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACpC,sEAAsE;YACtE,kEAAkE;YAClE,oEAAoE;YACpE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;gBACxC,CAAC,CAAC,CAAC,CAAC,OAAO;gBACX,CAAC,CAAC,CAAC,CAAC,OAAO;qBACN,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;qBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAS,CAAC,IAAI,CAAC;qBACzB,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,KAAK,GAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC1C,IAAI,MAAM,IAAI,YAAY,EAAE,CAAC;gBAC3B,KAAK,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;YAC7D,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,2DAA2D;QAC3D,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAChE,MAAM,iBAAiB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC9C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACtB,sBAAsB;gBACtB,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,aAAa;4BACnB,WAAW,EAAE,CAAC,CAAC,YAAY;4BAC3B,OAAO,EAAE,CAAC,CAAC,OAAO;yBACnB,CAAC;iBACH,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,oCAAoC;gBACpC,MAAM,MAAM,GAAU,EAAE,CAAC;gBACzB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjD,CAAC;gBACD,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;oBAC9B,6DAA6D;oBAC7D,gEAAgE;oBAChE,gDAAgD;oBAChD,IAAI,UAAU,GAAY,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,UAAU,GAAG,EAAE,CAAC;oBAAC,CAAC;oBAC1F,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,UAAU;wBAChB,EAAE,EAAE,EAAE,CAAC,EAAE;wBACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;wBACtB,KAAK,EAAE,UAAU;qBAClB,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAChD,CAAC;YACD,+DAA+D;YAC/D,6DAA6D;YAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1E,MAAM,GAAG,GAAQ;gBACf,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;gBACnD,OAAO,EAAE,WAAW;aACrB,CAAC;YACF,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;gBACpB,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;YACtC,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAQ;YAChB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;YAC/D,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;YAC5D,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,QAAQ,EAAE,iBAAiB;YAC3B,MAAM;SACP,CAAC;QAEF,oEAAoE;QACpE,yDAAyD;QACzD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,YAAY,EAAE,CAAC;gBACjB,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;YACrF,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACxB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,SAAS,CAAC,IAAS;QACjC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM;QAEnE,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE;gBACtB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;oBAC/B,mBAAmB,EAAE,YAAY;oBACjC,gBAAgB,EAAE,2BAA2B;iBAC9C;gBACD,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;gBAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACO,cAAc,CAAC,GAAQ;QAC/B,OAAO;YACL,aAAa,EAAE,GAAG,CAAC,YAAY,IAAI,CAAC;YACpC,iBAAiB,EAAE,GAAG,CAAC,aAAa,IAAI,CAAC;YACzC,YAAY,EAAE,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;YAChE,2BAA2B,EAAE,GAAG,CAAC,2BAA2B;YAC5D,uBAAuB,EAAE,GAAG,CAAC,uBAAuB;SACrD,CAAC;IACJ,CAAC;CACF"}
@@ -1,30 +1,48 @@
1
1
  /**
2
2
  * LLM Service - Factory for creating providers
3
3
  * Supports all providers + custom relay stations (中转站)
4
+ *
5
+ * v3.0.0+: streaming protocol migrated to structured StreamChunk
6
+ * - chatStream yields { type: 'text' | 'tool_calls' | 'thinking' | 'usage' }
7
+ * - Tool call execution is now part of the agent loop; consumers see
8
+ * { type: 'tool_calls', toolCalls } for dispatch and { type: 'text', content }
9
+ * for model output. The legacy @@TOOL@@ sentinel-string protocol is GONE.
10
+ * - Usage / cache stats are emitted as the final { type: 'usage' } chunk,
11
+ * which the TUI cache stats store consumes.
4
12
  */
5
- import type { ChatMessage, ChatResponse, ChatOptions } from '../types.js';
13
+ import type { ChatMessage, ChatResponse, ChatOptions, StreamChunk } from '../types.js';
6
14
  import type { Tool } from '../tools/types.js';
7
15
  import type { LLMProvider } from './provider.js';
8
- import type { AIConfig } from '../config/types.js';
16
+ import type { AIConfig, Config } from '../config/types.js';
9
17
  export declare class LLMService {
10
18
  private provider;
11
19
  private tools;
12
20
  private apiKey;
13
21
  constructor(provider: LLMProvider, apiKey: string);
14
- static fromConfig(config: AIConfig): LLMService;
22
+ static fromConfig(config: AIConfig & {
23
+ cache?: Config['cache'];
24
+ }): LLMService;
15
25
  registerTools(tools: Tool[]): void;
16
26
  getProviderName(): string;
17
27
  hasApiKey(): boolean;
18
28
  chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
19
29
  /**
20
- * Streaming chat with agent loop (tool call support)
21
- * - Streams text to the user
22
- * - Detects structured tool calls from the API
23
- * - Executes tools and loops back for more
30
+ * Streaming chat with agent loop (tool call support).
31
+ *
32
+ * Structured chunk protocol (replaces the @@TOOL@@ sentinel strings):
33
+ * { type: 'text', content: string } model output, accumulate + render
34
+ * { type: 'tool_calls', toolCalls: ToolCall[] } dispatch tools, results will
35
+ * be folded into the next request
36
+ * { type: 'thinking', content: string } reasoning text (consumers may
37
+ * display in debug mode)
38
+ * { type: 'usage', usage: Usage } cache hit/miss + token counts;
39
+ * emitted on the final round
40
+ *
41
+ * Returns the final ChatResponse of the agent loop when done.
24
42
  */
25
43
  chatStream(messages: ChatMessage[], options?: ChatOptions & {
26
44
  maxIterations?: number;
27
- }): AsyncGenerator<string, ChatResponse>;
45
+ }): AsyncGenerator<StreamChunk, ChatResponse>;
28
46
  private truncateArgs;
29
47
  private getNoKeyMessage;
30
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAY,MAAM,aAAa,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAMjE,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM;IAKjD,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU;IA6B/C,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAMlC,eAAe,IAAI,MAAM;IACzB,SAAS,IAAI,OAAO;IAEd,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAMjF;;;;;OAKG;IACI,UAAU,CACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACjD,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;IA0FvC,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,eAAe;CAYxB;AAED,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAY,WAAW,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,oBAAoB,CAAC;AAMzE,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM;IAKjD,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;KAAE,GAAG,UAAU;IAgC7E,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAMlC,eAAe,IAAI,MAAM;IACzB,SAAS,IAAI,OAAO;IAEd,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAMjF;;;;;;;;;;;;;OAaG;IACI,UAAU,CACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACjD,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC;IAwI5C,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,eAAe;CAYxB;AAED,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}