@hflin/cclin 0.1.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 (200) hide show
  1. package/README.md +124 -0
  2. package/dist/index.d.ts +10 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +165 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/llm/client.d.ts +32 -0
  7. package/dist/llm/client.d.ts.map +1 -0
  8. package/dist/llm/client.js +280 -0
  9. package/dist/llm/client.js.map +1 -0
  10. package/dist/runtime/compaction.d.ts +49 -0
  11. package/dist/runtime/compaction.d.ts.map +1 -0
  12. package/dist/runtime/compaction.js +118 -0
  13. package/dist/runtime/compaction.js.map +1 -0
  14. package/dist/runtime/compaction.test.d.ts +7 -0
  15. package/dist/runtime/compaction.test.d.ts.map +1 -0
  16. package/dist/runtime/compaction.test.js +70 -0
  17. package/dist/runtime/compaction.test.js.map +1 -0
  18. package/dist/runtime/history.d.ts +34 -0
  19. package/dist/runtime/history.d.ts.map +1 -0
  20. package/dist/runtime/history.js +63 -0
  21. package/dist/runtime/history.js.map +1 -0
  22. package/dist/runtime/hooks.d.ts +54 -0
  23. package/dist/runtime/hooks.d.ts.map +1 -0
  24. package/dist/runtime/hooks.js +113 -0
  25. package/dist/runtime/hooks.js.map +1 -0
  26. package/dist/runtime/hooks.test.d.ts +7 -0
  27. package/dist/runtime/hooks.test.d.ts.map +1 -0
  28. package/dist/runtime/hooks.test.js +73 -0
  29. package/dist/runtime/hooks.test.js.map +1 -0
  30. package/dist/runtime/model-profile.d.ts +42 -0
  31. package/dist/runtime/model-profile.d.ts.map +1 -0
  32. package/dist/runtime/model-profile.js +84 -0
  33. package/dist/runtime/model-profile.js.map +1 -0
  34. package/dist/runtime/prompt.d.ts +38 -0
  35. package/dist/runtime/prompt.d.ts.map +1 -0
  36. package/dist/runtime/prompt.js +152 -0
  37. package/dist/runtime/prompt.js.map +1 -0
  38. package/dist/runtime/prompt.md +64 -0
  39. package/dist/runtime/prompt.test.d.ts +7 -0
  40. package/dist/runtime/prompt.test.d.ts.map +1 -0
  41. package/dist/runtime/prompt.test.js +38 -0
  42. package/dist/runtime/prompt.test.js.map +1 -0
  43. package/dist/runtime/react-loop.d.ts +82 -0
  44. package/dist/runtime/react-loop.d.ts.map +1 -0
  45. package/dist/runtime/react-loop.js +311 -0
  46. package/dist/runtime/react-loop.js.map +1 -0
  47. package/dist/runtime/react-loop.test.d.ts +7 -0
  48. package/dist/runtime/react-loop.test.d.ts.map +1 -0
  49. package/dist/runtime/react-loop.test.js +78 -0
  50. package/dist/runtime/react-loop.test.js.map +1 -0
  51. package/dist/runtime/session.d.ts +109 -0
  52. package/dist/runtime/session.d.ts.map +1 -0
  53. package/dist/runtime/session.js +252 -0
  54. package/dist/runtime/session.js.map +1 -0
  55. package/dist/runtime/skills.d.ts +36 -0
  56. package/dist/runtime/skills.d.ts.map +1 -0
  57. package/dist/runtime/skills.js +187 -0
  58. package/dist/runtime/skills.js.map +1 -0
  59. package/dist/runtime/skills.test.d.ts +7 -0
  60. package/dist/runtime/skills.test.d.ts.map +1 -0
  61. package/dist/runtime/skills.test.js +92 -0
  62. package/dist/runtime/skills.test.js.map +1 -0
  63. package/dist/tools/approval.d.ts +61 -0
  64. package/dist/tools/approval.d.ts.map +1 -0
  65. package/dist/tools/approval.js +119 -0
  66. package/dist/tools/approval.js.map +1 -0
  67. package/dist/tools/approval.test.d.ts +9 -0
  68. package/dist/tools/approval.test.d.ts.map +1 -0
  69. package/dist/tools/approval.test.js +112 -0
  70. package/dist/tools/approval.test.js.map +1 -0
  71. package/dist/tools/bash.d.ts +6 -0
  72. package/dist/tools/bash.d.ts.map +1 -0
  73. package/dist/tools/bash.js +58 -0
  74. package/dist/tools/bash.js.map +1 -0
  75. package/dist/tools/edit-file.d.ts +6 -0
  76. package/dist/tools/edit-file.d.ts.map +1 -0
  77. package/dist/tools/edit-file.js +58 -0
  78. package/dist/tools/edit-file.js.map +1 -0
  79. package/dist/tools/get-memory.d.ts +9 -0
  80. package/dist/tools/get-memory.d.ts.map +1 -0
  81. package/dist/tools/get-memory.js +56 -0
  82. package/dist/tools/get-memory.js.map +1 -0
  83. package/dist/tools/list-directory.d.ts +6 -0
  84. package/dist/tools/list-directory.d.ts.map +1 -0
  85. package/dist/tools/list-directory.js +68 -0
  86. package/dist/tools/list-directory.js.map +1 -0
  87. package/dist/tools/mcp-client.d.ts +74 -0
  88. package/dist/tools/mcp-client.d.ts.map +1 -0
  89. package/dist/tools/mcp-client.js +129 -0
  90. package/dist/tools/mcp-client.js.map +1 -0
  91. package/dist/tools/mcp-config.d.ts +31 -0
  92. package/dist/tools/mcp-config.d.ts.map +1 -0
  93. package/dist/tools/mcp-config.js +55 -0
  94. package/dist/tools/mcp-config.js.map +1 -0
  95. package/dist/tools/mcp-registry.d.ts +39 -0
  96. package/dist/tools/mcp-registry.d.ts.map +1 -0
  97. package/dist/tools/mcp-registry.js +88 -0
  98. package/dist/tools/mcp-registry.js.map +1 -0
  99. package/dist/tools/orchestrator.d.ts +52 -0
  100. package/dist/tools/orchestrator.d.ts.map +1 -0
  101. package/dist/tools/orchestrator.js +190 -0
  102. package/dist/tools/orchestrator.js.map +1 -0
  103. package/dist/tools/orchestrator.test.d.ts +8 -0
  104. package/dist/tools/orchestrator.test.d.ts.map +1 -0
  105. package/dist/tools/orchestrator.test.js +122 -0
  106. package/dist/tools/orchestrator.test.js.map +1 -0
  107. package/dist/tools/read-file.d.ts +6 -0
  108. package/dist/tools/read-file.d.ts.map +1 -0
  109. package/dist/tools/read-file.js +50 -0
  110. package/dist/tools/read-file.js.map +1 -0
  111. package/dist/tools/registry.d.ts +55 -0
  112. package/dist/tools/registry.d.ts.map +1 -0
  113. package/dist/tools/registry.js +75 -0
  114. package/dist/tools/registry.js.map +1 -0
  115. package/dist/tools/registry.test.d.ts +8 -0
  116. package/dist/tools/registry.test.d.ts.map +1 -0
  117. package/dist/tools/registry.test.js +100 -0
  118. package/dist/tools/registry.test.js.map +1 -0
  119. package/dist/tools/router.d.ts +62 -0
  120. package/dist/tools/router.d.ts.map +1 -0
  121. package/dist/tools/router.js +119 -0
  122. package/dist/tools/router.js.map +1 -0
  123. package/dist/tools/router.test.d.ts +7 -0
  124. package/dist/tools/router.test.d.ts.map +1 -0
  125. package/dist/tools/router.test.js +102 -0
  126. package/dist/tools/router.test.js.map +1 -0
  127. package/dist/tools/safety.d.ts +16 -0
  128. package/dist/tools/safety.d.ts.map +1 -0
  129. package/dist/tools/safety.js +81 -0
  130. package/dist/tools/safety.js.map +1 -0
  131. package/dist/tools/safety.test.d.ts +7 -0
  132. package/dist/tools/safety.test.d.ts.map +1 -0
  133. package/dist/tools/safety.test.js +104 -0
  134. package/dist/tools/safety.test.js.map +1 -0
  135. package/dist/tools/search-files.d.ts +9 -0
  136. package/dist/tools/search-files.d.ts.map +1 -0
  137. package/dist/tools/search-files.js +114 -0
  138. package/dist/tools/search-files.js.map +1 -0
  139. package/dist/tools/update-plan.d.ts +9 -0
  140. package/dist/tools/update-plan.d.ts.map +1 -0
  141. package/dist/tools/update-plan.js +99 -0
  142. package/dist/tools/update-plan.js.map +1 -0
  143. package/dist/tools/write-file.d.ts +6 -0
  144. package/dist/tools/write-file.d.ts.map +1 -0
  145. package/dist/tools/write-file.js +41 -0
  146. package/dist/tools/write-file.js.map +1 -0
  147. package/dist/tui/app.d.ts +31 -0
  148. package/dist/tui/app.d.ts.map +1 -0
  149. package/dist/tui/app.js +121 -0
  150. package/dist/tui/app.js.map +1 -0
  151. package/dist/tui/chatwidget/markdown_renderer.d.ts +20 -0
  152. package/dist/tui/chatwidget/markdown_renderer.d.ts.map +1 -0
  153. package/dist/tui/chatwidget/markdown_renderer.js +188 -0
  154. package/dist/tui/chatwidget/markdown_renderer.js.map +1 -0
  155. package/dist/tui/cjk_text.d.ts +25 -0
  156. package/dist/tui/cjk_text.d.ts.map +1 -0
  157. package/dist/tui/cjk_text.js +84 -0
  158. package/dist/tui/cjk_text.js.map +1 -0
  159. package/dist/tui/cjk_text.test.d.ts +2 -0
  160. package/dist/tui/cjk_text.test.d.ts.map +1 -0
  161. package/dist/tui/cjk_text.test.js +62 -0
  162. package/dist/tui/cjk_text.test.js.map +1 -0
  163. package/dist/tui/composer_input.d.ts +31 -0
  164. package/dist/tui/composer_input.d.ts.map +1 -0
  165. package/dist/tui/composer_input.js +184 -0
  166. package/dist/tui/composer_input.js.map +1 -0
  167. package/dist/tui/composer_input.test.d.ts +2 -0
  168. package/dist/tui/composer_input.test.d.ts.map +1 -0
  169. package/dist/tui/composer_input.test.js +87 -0
  170. package/dist/tui/composer_input.test.js.map +1 -0
  171. package/dist/tui/input.d.ts +21 -0
  172. package/dist/tui/input.d.ts.map +1 -0
  173. package/dist/tui/input.js +166 -0
  174. package/dist/tui/input.js.map +1 -0
  175. package/dist/tui/output.d.ts +17 -0
  176. package/dist/tui/output.d.ts.map +1 -0
  177. package/dist/tui/output.js +104 -0
  178. package/dist/tui/output.js.map +1 -0
  179. package/dist/tui/state/chat_timeline.d.ts +50 -0
  180. package/dist/tui/state/chat_timeline.d.ts.map +1 -0
  181. package/dist/tui/state/chat_timeline.js +129 -0
  182. package/dist/tui/state/chat_timeline.js.map +1 -0
  183. package/dist/tui/types.d.ts +45 -0
  184. package/dist/tui/types.d.ts.map +1 -0
  185. package/dist/tui/types.js +14 -0
  186. package/dist/tui/types.js.map +1 -0
  187. package/dist/types.d.ts +435 -0
  188. package/dist/types.d.ts.map +1 -0
  189. package/dist/types.js +8 -0
  190. package/dist/types.js.map +1 -0
  191. package/dist/utils/tokenizer.d.ts +21 -0
  192. package/dist/utils/tokenizer.d.ts.map +1 -0
  193. package/dist/utils/tokenizer.js +71 -0
  194. package/dist/utils/tokenizer.js.map +1 -0
  195. package/dist/utils/tokenizer.test.d.ts +7 -0
  196. package/dist/utils/tokenizer.test.d.ts.map +1 -0
  197. package/dist/utils/tokenizer.test.js +51 -0
  198. package/dist/utils/tokenizer.test.js.map +1 -0
  199. package/package.json +41 -0
  200. package/src/runtime/prompt.md +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat_timeline.js","sourceRoot":"","sources":["../../../src/tui/state/chat_timeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @file TUI 专用视图类型 — 与 runtime types 解耦。
3
+ *
4
+ * 这些类型仅用于 UI 渲染层,不影响 runtime 逻辑。
5
+ * 参考 memo-code/packages/tui/src/types.ts 设计。
6
+ */
7
+ export declare const TOOL_STATUS: {
8
+ readonly PENDING: "pending";
9
+ readonly EXECUTING: "executing";
10
+ readonly SUCCESS: "success";
11
+ readonly ERROR: "error";
12
+ };
13
+ export type ToolStatus = (typeof TOOL_STATUS)[keyof typeof TOOL_STATUS];
14
+ export type ToolAction = {
15
+ tool: string;
16
+ input: unknown;
17
+ };
18
+ /** 单步视图(一次 LLM → 工具调用周期)。 */
19
+ export type StepView = {
20
+ index: number;
21
+ assistantText: string;
22
+ thinking?: string;
23
+ action?: ToolAction;
24
+ observation?: string;
25
+ toolStatus?: ToolStatus;
26
+ };
27
+ /** 单轮对话视图。 */
28
+ export type TurnView = {
29
+ index: number;
30
+ userInput: string;
31
+ steps: StepView[];
32
+ status?: 'running' | 'ok' | 'error' | 'cancelled';
33
+ errorMessage?: string;
34
+ finalText?: string;
35
+ sequence?: number;
36
+ };
37
+ export type SystemMessageTone = 'info' | 'warning' | 'error';
38
+ export type SystemMessage = {
39
+ id: string;
40
+ title: string;
41
+ content: string;
42
+ sequence: number;
43
+ tone?: SystemMessageTone;
44
+ };
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,eAAO,MAAM,WAAW;;;;;CAKd,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAA;AAIvE,MAAM,MAAM,UAAU,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;CACjB,CAAA;AAID,6BAA6B;AAC7B,MAAM,MAAM,QAAQ,GAAG;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,UAAU,CAAA;CAC1B,CAAA;AAID,cAAc;AACd,MAAM,MAAM,QAAQ,GAAG;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,WAAW,CAAA;IACjD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAID,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AAE5D,MAAM,MAAM,aAAa,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,iBAAiB,CAAA;CAC3B,CAAA"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @file TUI 专用视图类型 — 与 runtime types 解耦。
3
+ *
4
+ * 这些类型仅用于 UI 渲染层,不影响 runtime 逻辑。
5
+ * 参考 memo-code/packages/tui/src/types.ts 设计。
6
+ */
7
+ // ─── 工具状态 ─────────────────────────────────────────────────────────────
8
+ export const TOOL_STATUS = {
9
+ PENDING: 'pending',
10
+ EXECUTING: 'executing',
11
+ SUCCESS: 'success',
12
+ ERROR: 'error',
13
+ };
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yEAAyE;AAEzE,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACR,CAAA"}
@@ -0,0 +1,435 @@
1
+ /**
2
+ * @file cclin agent 核心类型定义。
3
+ *
4
+ * Phase 1:仅包含 LLM 交互类型。
5
+ * 后续阶段将扩展(工具、钩子、会话等)。
6
+ */
7
+ /** 对话角色。 */
8
+ export type Role = 'system' | 'user' | 'assistant' | 'tool';
9
+ /** 助手发出的结构化工具调用(OpenAI tool_calls 格式)。 */
10
+ export type AssistantToolCall = {
11
+ id: string;
12
+ type: 'function';
13
+ function: {
14
+ name: string;
15
+ arguments: string;
16
+ };
17
+ };
18
+ /**
19
+ * 模型侧消息(按 role 区分的联合类型)。
20
+ *
21
+ * 使用 OpenAI chat-completion 消息格式,以便:
22
+ * 1. 可直接通过这些类型构建历史记录数组。
23
+ * 2. 以最少的映射转换为 OpenAI SDK 参数。
24
+ */
25
+ export type ChatMessage = {
26
+ role: 'system';
27
+ content: string;
28
+ } | {
29
+ role: 'user';
30
+ content: string;
31
+ } | {
32
+ role: 'assistant';
33
+ content: string;
34
+ /** DeepSeek 思考链(保留用于后续轮次)。 */
35
+ reasoning_content?: string;
36
+ /** 结构化工具调用列表(如有)。 */
37
+ tool_calls?: AssistantToolCall[];
38
+ } | {
39
+ role: 'tool';
40
+ content: string;
41
+ /** 对应 assistant.tool_calls[*].id。 */
42
+ tool_call_id: string;
43
+ /** 工具名称(用于调试)。 */
44
+ name?: string;
45
+ };
46
+ /** Token 用量统计。 */
47
+ export type TokenUsage = {
48
+ prompt: number;
49
+ completion: number;
50
+ total: number;
51
+ };
52
+ /** 文本内容块。 */
53
+ export type TextBlock = {
54
+ type: 'text';
55
+ text: string;
56
+ };
57
+ /** 工具调用请求块。 */
58
+ export type ToolUseBlock = {
59
+ type: 'tool_use';
60
+ id: string;
61
+ name: string;
62
+ input: unknown;
63
+ };
64
+ /** LLM 响应中的内容块。 */
65
+ export type ContentBlock = TextBlock | ToolUseBlock;
66
+ /** 结构化的 LLM 响应。 */
67
+ export type LLMResponse = {
68
+ content: ContentBlock[];
69
+ reasoning_content?: string;
70
+ stop_reason: 'end_turn' | 'tool_use' | 'max_tokens' | 'stop_sequence';
71
+ usage?: Partial<TokenUsage>;
72
+ };
73
+ /**
74
+ * LLM 调用函数签名。
75
+ *
76
+ * 接收对话历史,返回结构化响应。
77
+ * `onChunk` 保留用于后续流式支持。
78
+ */
79
+ export type CallLLM = (messages: ChatMessage[], onChunk?: (chunk: string) => void) => Promise<LLMResponse>;
80
+ /**
81
+ * 解析后的助手响应(action / final 二选一)。
82
+ *
83
+ * - `action`:工具调用请求,包含工具名和输入参数。
84
+ * - `final`:最终文本回答。
85
+ * - `thinking`:思考内容(当 action/final 混合了思考文本时)。
86
+ */
87
+ export type ParsedAssistant = {
88
+ /** 工具调用:工具名 + 输入参数(第一个工具,保持向后兼容)。 */
89
+ action?: {
90
+ tool: string;
91
+ input: unknown;
92
+ };
93
+ /** 所有工具调用列表(Phase 3+,支持多工具并行调用)。 */
94
+ actions?: Array<{
95
+ tool: string;
96
+ input: unknown;
97
+ }>;
98
+ /** 最终回答文本。 */
99
+ final?: string;
100
+ /** 思考内容(混合输出时提取)。 */
101
+ thinking?: string;
102
+ };
103
+ /**
104
+ * 单步调试记录,用于回放和可观测性。
105
+ *
106
+ * 每次 LLM 调用 → 解析 → 工具执行为一个 step。
107
+ */
108
+ export type AgentStepTrace = {
109
+ /** 步骤索引,从 0 开始。 */
110
+ index: number;
111
+ /** LLM 原始输出文本。 */
112
+ assistantText: string;
113
+ /** 解析后的 action/final 结构。 */
114
+ parsed: ParsedAssistant;
115
+ /** 工具执行结果(如有)。 */
116
+ observation?: string;
117
+ /** 本步骤的实际工具调用数量。 */
118
+ toolCallCount?: number;
119
+ /** 本步骤 token 统计。 */
120
+ tokenUsage?: Partial<TokenUsage>;
121
+ };
122
+ /** 单轮对话的状态码。 */
123
+ export type TurnStatus = 'ok' | 'error' | 'cancelled';
124
+ /**
125
+ * 单轮对话的执行结果。
126
+ *
127
+ * 包含最终输出、所有步骤轨迹、状态和 token 统计。
128
+ */
129
+ export type TurnResult = {
130
+ /** 最终输出文本。 */
131
+ finalText: string;
132
+ /** 步骤轨迹数组。 */
133
+ steps: AgentStepTrace[];
134
+ /** 运行状态。 */
135
+ status: TurnStatus;
136
+ /** 错误信息(若有)。 */
137
+ errorMessage?: string;
138
+ /** 本轮 token 统计。 */
139
+ tokenUsage?: Partial<TokenUsage>;
140
+ };
141
+ /**
142
+ * 工具执行函数签名。
143
+ *
144
+ * Phase 2 使用 mock 实现,Phase 3 替换为真实工具注册表。
145
+ */
146
+ export type ExecuteTool = (toolName: string, toolInput: unknown) => Promise<string>;
147
+ /** JSON Schema 子集,用于描述工具输入参数。 */
148
+ export type ToolInputSchema = {
149
+ type: 'object';
150
+ properties: Record<string, {
151
+ type: string;
152
+ description?: string;
153
+ items?: {
154
+ type: string;
155
+ };
156
+ enum?: string[];
157
+ default?: unknown;
158
+ }>;
159
+ required?: string[];
160
+ };
161
+ /** 工具执行结果。 */
162
+ export type ToolResult = {
163
+ /** 输出文本。 */
164
+ output: string;
165
+ /** 是否为错误结果。 */
166
+ isError?: boolean;
167
+ };
168
+ /**
169
+ * 工具定义接口。
170
+ *
171
+ * 每个工具通过此接口描述自身:
172
+ * - name / description:用于 LLM 理解工具用途
173
+ * - inputSchema:JSON Schema 描述参数格式
174
+ * - execute:实际执行逻辑
175
+ * - isMutating:是否修改外部状态(用于安全分级)
176
+ */
177
+ export type ToolDefinition = {
178
+ /** 工具唯一名称。 */
179
+ name: string;
180
+ /** 工具描述(给 LLM 阅读)。 */
181
+ description: string;
182
+ /** 输入参数的 JSON Schema 描述。 */
183
+ inputSchema: ToolInputSchema;
184
+ /** 是否会修改外部状态(文件、进程等)。 */
185
+ isMutating: boolean;
186
+ /** 执行工具。 */
187
+ execute: (input: Record<string, unknown>) => Promise<ToolResult>;
188
+ };
189
+ /** 审批策略:always=每次询问, once=同指纹本轮只问一次, session=整个会话有效。 */
190
+ export type ApprovalPolicy = 'always' | 'once' | 'session';
191
+ /** 用户审批决定。 */
192
+ export type ApprovalDecision = 'approve' | 'deny';
193
+ /** 审批检查结果(联合类型)。 */
194
+ export type ApprovalCheckResult = {
195
+ needsApproval: false;
196
+ } | {
197
+ needsApproval: true;
198
+ fingerprint: string;
199
+ reason: string;
200
+ toolName: string;
201
+ input: unknown;
202
+ };
203
+ /** 审批请求(传给 UI 回调)。 */
204
+ export type ApprovalRequest = {
205
+ toolName: string;
206
+ input: unknown;
207
+ fingerprint: string;
208
+ reason: string;
209
+ };
210
+ /** 审批回调钩子。 */
211
+ export type ApprovalHooks = {
212
+ /** 请求用户审批,返回用户决定。 */
213
+ requestApproval?: (request: ApprovalRequest) => Promise<ApprovalDecision>;
214
+ };
215
+ /** 工具调用请求。 */
216
+ export type ToolAction = {
217
+ id: string;
218
+ name: string;
219
+ input: unknown;
220
+ };
221
+ /** 单个工具执行状态。 */
222
+ export type ToolActionStatus = 'success' | 'approval_denied' | 'tool_not_found' | 'input_invalid' | 'execution_failed';
223
+ /** 单个工具执行结果。 */
224
+ export type ToolActionResult = {
225
+ actionId: string;
226
+ tool: string;
227
+ status: ToolActionStatus;
228
+ success: boolean;
229
+ observation: string;
230
+ durationMs: number;
231
+ };
232
+ /** 批量工具执行结果。 */
233
+ export type ToolExecutionResult = {
234
+ results: ToolActionResult[];
235
+ combinedObservation: string;
236
+ hasRejection: boolean;
237
+ };
238
+ /** Token 计数器接口。 */
239
+ export type TokenCounter = {
240
+ /** 使用的 tokenizer 模型名。 */
241
+ model: string;
242
+ /** 计算纯文本的 token 数。 */
243
+ countText: (text: string) => number;
244
+ /** 计算消息数组的 token 数(含 ChatML 开销)。 */
245
+ countMessages: (messages: ChatMessage[]) => number;
246
+ /** 释放 tokenizer 资源。 */
247
+ dispose: () => void;
248
+ };
249
+ /** 压缩触发原因。 */
250
+ export type CompactReason = 'auto' | 'manual';
251
+ /** 压缩结果状态。 */
252
+ export type CompactStatus = 'success' | 'skipped' | 'failed';
253
+ /** 压缩执行结果。 */
254
+ export type CompactResult = {
255
+ /** 触发原因。 */
256
+ reason: CompactReason;
257
+ /** 执行状态。 */
258
+ status: CompactStatus;
259
+ /** 压缩前 token 数。 */
260
+ beforeTokens: number;
261
+ /** 压缩后 token 数。 */
262
+ afterTokens: number;
263
+ /** 阈值 token 数。 */
264
+ thresholdTokens: number;
265
+ /** 缩减百分比。 */
266
+ reductionPercent: number;
267
+ /** 生成的摘要文本(成功时)。 */
268
+ summary?: string;
269
+ /** 错误信息(失败时)。 */
270
+ errorMessage?: string;
271
+ };
272
+ /** 通用 Hook 回调签名(支持同步/异步)。 */
273
+ export type AgentHookHandler<Payload> = (payload: Payload) => Promise<void> | void;
274
+ /** Turn 开始时的 Hook 负载。 */
275
+ export type TurnStartHookPayload = {
276
+ sessionId: string;
277
+ turn: number;
278
+ input: string;
279
+ history: ChatMessage[];
280
+ };
281
+ /** 工具调用(action)时的 Hook 负载。 */
282
+ export type ActionHookPayload = {
283
+ sessionId: string;
284
+ turn: number;
285
+ step: number;
286
+ action: {
287
+ tool: string;
288
+ input: unknown;
289
+ };
290
+ thinking?: string;
291
+ history: ChatMessage[];
292
+ };
293
+ /** 工具执行结果(observation)的 Hook 负载。 */
294
+ export type ObservationHookPayload = {
295
+ sessionId: string;
296
+ turn: number;
297
+ step: number;
298
+ tool: string;
299
+ observation: string;
300
+ history: ChatMessage[];
301
+ };
302
+ /** 最终回答的 Hook 负载。 */
303
+ export type FinalHookPayload = {
304
+ sessionId: string;
305
+ turn: number;
306
+ finalText: string;
307
+ status: TurnStatus;
308
+ steps: AgentStepTrace[];
309
+ turnUsage: Partial<TokenUsage>;
310
+ };
311
+ /** 上下文 token 使用量报告的 Hook 负载。 */
312
+ export type ContextUsageHookPayload = {
313
+ sessionId: string;
314
+ turn: number;
315
+ step: number;
316
+ promptTokens: number;
317
+ contextWindow: number;
318
+ thresholdTokens: number;
319
+ usagePercent: number;
320
+ };
321
+ /** 上下文压缩完成的 Hook 负载。 */
322
+ export type ContextCompactedHookPayload = {
323
+ sessionId: string;
324
+ turn: number;
325
+ reason: CompactReason;
326
+ status: CompactStatus;
327
+ beforeTokens: number;
328
+ afterTokens: number;
329
+ thresholdTokens: number;
330
+ reductionPercent: number;
331
+ summary?: string;
332
+ errorMessage?: string;
333
+ };
334
+ /** 审批请求发出的 Hook 负载。 */
335
+ export type ApprovalHookPayload = {
336
+ sessionId: string;
337
+ turn: number;
338
+ step: number;
339
+ request: ApprovalRequest;
340
+ };
341
+ /** 审批结果返回的 Hook 负载。 */
342
+ export type ApprovalResponseHookPayload = {
343
+ sessionId: string;
344
+ turn: number;
345
+ step: number;
346
+ fingerprint: string;
347
+ decision: ApprovalDecision;
348
+ };
349
+ /** 标题生成的 Hook 负载(预留)。 */
350
+ export type TitleGeneratedHookPayload = {
351
+ sessionId: string;
352
+ turn: number;
353
+ title: string;
354
+ originalPrompt: string;
355
+ };
356
+ /** Hook 集合:一次性注入的生命周期监听器。 */
357
+ export type AgentHooks = {
358
+ onTurnStart?: AgentHookHandler<TurnStartHookPayload>;
359
+ onAction?: AgentHookHandler<ActionHookPayload>;
360
+ onObservation?: AgentHookHandler<ObservationHookPayload>;
361
+ onFinal?: AgentHookHandler<FinalHookPayload>;
362
+ onContextUsage?: AgentHookHandler<ContextUsageHookPayload>;
363
+ onContextCompacted?: AgentHookHandler<ContextCompactedHookPayload>;
364
+ onApprovalRequest?: AgentHookHandler<ApprovalHookPayload>;
365
+ onApprovalResponse?: AgentHookHandler<ApprovalResponseHookPayload>;
366
+ onTitleGenerated?: AgentHookHandler<TitleGeneratedHookPayload>;
367
+ };
368
+ /** 中间件:带可选名称的 Hook 集合,支持批量注册多个。 */
369
+ export type AgentMiddleware = AgentHooks & {
370
+ name?: string;
371
+ };
372
+ /** 工具来源标识。 */
373
+ export type ToolSource = 'native' | 'mcp';
374
+ /** MCP Server 配置(stdio 传输)。 */
375
+ export type MCPServerConfig = {
376
+ /** 启动命令(如 'node', 'npx')。 */
377
+ command: string;
378
+ /** 命令参数列表。 */
379
+ args?: string[];
380
+ /** 环境变量覆盖(会与 process.env 合并)。 */
381
+ env?: Record<string, string>;
382
+ };
383
+ /** MCP 配置文件的完整格式。 */
384
+ export type MCPConfigFile = {
385
+ mcpServers?: Record<string, MCPServerConfig>;
386
+ };
387
+ /** MCP 工具定义(继承 ToolDefinition,增加来源信息)。 */
388
+ export type McpToolDefinition = ToolDefinition & {
389
+ /** 工具来源。 */
390
+ source: 'mcp';
391
+ /** 所属 MCP Server 名称。 */
392
+ serverName: string;
393
+ /** 在 MCP Server 上的原始工具名。 */
394
+ originalName: string;
395
+ };
396
+ /**
397
+ * 工具查询接口(ToolOrchestrator 的依赖抽象)。
398
+ *
399
+ * 让 ToolOrchestrator 同时支持 ToolRegistry 和 ToolRouter。
400
+ */
401
+ export type ToolQueryable = {
402
+ /** 根据工具名获取工具定义。 */
403
+ get(name: string): ToolDefinition | undefined;
404
+ };
405
+ /** 历史事件类型标识。 */
406
+ export type HistoryEventType = 'turn_start' | 'action' | 'observation' | 'final' | 'compact' | 'error';
407
+ /** 单条历史事件(写入 JSONL)。 */
408
+ export type HistoryEvent = {
409
+ /** ISO 时间戳。 */
410
+ ts: string;
411
+ /** 会话 ID。 */
412
+ sessionId: string;
413
+ /** 事件类型。 */
414
+ type: HistoryEventType;
415
+ /** 所属 turn 序号。 */
416
+ turn?: number;
417
+ /** 所属 step 序号。 */
418
+ step?: number;
419
+ /** 事件内容。 */
420
+ content?: string;
421
+ /** 角色。 */
422
+ role?: Role;
423
+ /** 扩展元数据。 */
424
+ meta?: Record<string, unknown>;
425
+ };
426
+ /** 历史写入接口。 */
427
+ export type HistorySink = {
428
+ /** 追加一条事件。 */
429
+ append(event: HistoryEvent): Promise<void>;
430
+ /** 刷新缓冲区。 */
431
+ flush(): Promise<void>;
432
+ /** 关闭并释放资源。 */
433
+ close(): Promise<void>;
434
+ };
435
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file cclin agent 核心类型定义。
3
+ *
4
+ * Phase 1:仅包含 LLM 交互类型。
5
+ * 后续阶段将扩展(工具、钩子、会话等)。
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @file Token 计数器 — 基于 gpt-tokenizer 的本地 token 估算。
3
+ *
4
+ * Phase 6:为上下文压缩提供精确的 token 计数能力。
5
+ *
6
+ * 设计决策:
7
+ * - 使用 gpt-tokenizer(纯 JS 实现)而非 @dqbd/tiktoken(需要 WASM)
8
+ * - 按 ChatML 格式估算消息 token(每条消息 +4 overhead)
9
+ * - 支持 assistant 含 tool_calls 和 reasoning_content 的复杂消息
10
+ */
11
+ import type { TokenCounter } from '../types.js';
12
+ /**
13
+ * 创建 Token 计数器。
14
+ *
15
+ * 返回的 TokenCounter 对象提供:
16
+ * - countText:单段文本的 token 数
17
+ * - countMessages:消息数组的 token 数(含 ChatML 开销)
18
+ * - dispose:释放资源(当前为空操作,保留接口一致性)
19
+ */
20
+ export declare function createTokenCounter(): TokenCounter;
21
+ //# sourceMappingURL=tokenizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/utils/tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,aAAa,CAAA;AAgC5D;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAuBjD"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @file Token 计数器 — 基于 gpt-tokenizer 的本地 token 估算。
3
+ *
4
+ * Phase 6:为上下文压缩提供精确的 token 计数能力。
5
+ *
6
+ * 设计决策:
7
+ * - 使用 gpt-tokenizer(纯 JS 实现)而非 @dqbd/tiktoken(需要 WASM)
8
+ * - 按 ChatML 格式估算消息 token(每条消息 +4 overhead)
9
+ * - 支持 assistant 含 tool_calls 和 reasoning_content 的复杂消息
10
+ */
11
+ import { encode } from 'gpt-tokenizer';
12
+ /** 每条消息的 ChatML 包装开销(role + 分隔符)。 */
13
+ const TOKENS_PER_MESSAGE = 4;
14
+ /** 助手回复的起始标记开销。 */
15
+ const TOKENS_FOR_ASSISTANT_PRIMING = 2;
16
+ /**
17
+ * 将 ChatMessage 转换为用于 token 计数的文本负载。
18
+ *
19
+ * 不同 role 的消息结构不同,需要按实际发送给 API 的格式估算:
20
+ * - assistant:可能含 reasoning_content 和 tool_calls
21
+ * - tool:包含 tool_call_id 和 name
22
+ * - system / user:直接取 content
23
+ */
24
+ function messagePayloadForCounting(message) {
25
+ if (message.role === 'assistant') {
26
+ const reasoning = message.reasoning_content
27
+ ? `\n${message.reasoning_content}`
28
+ : '';
29
+ if (message.tool_calls?.length) {
30
+ return `${message.content}${reasoning}\n${JSON.stringify(message.tool_calls)}`;
31
+ }
32
+ return `${message.content}${reasoning}`;
33
+ }
34
+ if (message.role === 'tool') {
35
+ return `${message.content}\n${message.tool_call_id}\n${message.name ?? ''}`;
36
+ }
37
+ return message.content;
38
+ }
39
+ /**
40
+ * 创建 Token 计数器。
41
+ *
42
+ * 返回的 TokenCounter 对象提供:
43
+ * - countText:单段文本的 token 数
44
+ * - countMessages:消息数组的 token 数(含 ChatML 开销)
45
+ * - dispose:释放资源(当前为空操作,保留接口一致性)
46
+ */
47
+ export function createTokenCounter() {
48
+ const countText = (text) => {
49
+ if (!text)
50
+ return 0;
51
+ return encode(text).length;
52
+ };
53
+ const countMessages = (messages) => {
54
+ if (!messages.length)
55
+ return 0;
56
+ let total = 0;
57
+ for (const message of messages) {
58
+ total += TOKENS_PER_MESSAGE;
59
+ total += countText(messagePayloadForCounting(message));
60
+ }
61
+ total += TOKENS_FOR_ASSISTANT_PRIMING;
62
+ return total;
63
+ };
64
+ return {
65
+ model: 'cl100k_base',
66
+ countText,
67
+ countMessages,
68
+ dispose: () => { },
69
+ };
70
+ }
71
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/utils/tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAGtC,qCAAqC;AACrC,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAE5B,mBAAmB;AACnB,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAEtC;;;;;;;GAOG;AACH,SAAS,yBAAyB,CAAC,OAAoB;IACnD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB;YACvC,CAAC,CAAC,KAAK,OAAO,CAAC,iBAAiB,EAAE;YAClC,CAAC,CAAC,EAAE,CAAA;QACR,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAC7B,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAA;QAClF,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3C,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAA;IAC/E,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAA;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB;IAC9B,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE;QACvC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAA;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;IAC9B,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,CAAC,QAAuB,EAAU,EAAE;QACtD,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,CAAC,CAAA;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,KAAK,IAAI,kBAAkB,CAAA;YAC3B,KAAK,IAAI,SAAS,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAA;QAC1D,CAAC;QACD,KAAK,IAAI,4BAA4B,CAAA;QACrC,OAAO,KAAK,CAAA;IAChB,CAAC,CAAA;IAED,OAAO;QACH,KAAK,EAAE,aAAa;QACpB,SAAS;QACT,aAAa;QACb,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;KACpB,CAAA;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @file Unit tests for token counter (Phase 6).
3
+ *
4
+ * Tests: createTokenCounter (countText, countMessages)
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=tokenizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.test.d.ts","sourceRoot":"","sources":["../../src/utils/tokenizer.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}