@mmteam/jsllm 0.1.13 → 0.1.14

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 (3) hide show
  1. package/index.cjs +49707 -0
  2. package/package.json +3 -14
  3. package/types.d.ts +295 -0
package/package.json CHANGED
@@ -1,20 +1,9 @@
1
1
  {
2
2
  "name": "@mmteam/jsllm",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "description": "MM Team LLM library (providers + chat/session runner)",
5
- "type": "module",
6
- "main": "./dist/index.cjs",
7
- "types": "./dist/types.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/types.d.ts",
11
- "require": "./dist/index.cjs"
12
- }
13
- },
14
- "files": [
15
- "dist"
16
- ],
17
- "sideEffects": false,
5
+ "main": "./index.cjs",
6
+ "types": "./types.d.ts",
18
7
  "engines": {
19
8
  "node": ">=20.0.0"
20
9
  }
package/types.d.ts ADDED
@@ -0,0 +1,295 @@
1
+ // Generated by dts-bundle-generator v9.5.1
2
+
3
+ /**
4
+ * @packageDocumentation
5
+ *
6
+ * `@mmteam/jsllm` 对外仅暴露少量稳定 API(会话引擎 + 单轮生成)与必要类型。
7
+ *
8
+ * 说明:
9
+ * - 本包以 CommonJS 方式导出(`require('@mmteam/jsllm')`)。
10
+ * - 更详细的参数、类型与中文注释请参考发布包中的 `dist/types.d.ts`。
11
+ */
12
+ /**
13
+ * 供应商 API 协议类型。
14
+ * - `"openai"`:OpenAI 兼容协议(可对接 OpenAI、兼容网关、qwen* 等)
15
+ * - `"gemini"`:Gemini SDK 协议
16
+ */
17
+ export type JsLlmProviderApiType = "gemini" | "openai";
18
+ /**
19
+ * 通用 thinking 配置(公共字段)。
20
+ *
21
+ * 注意:是否生效取决于供应商/模型;qwen* 场景下会映射到 OpenAI compatible 的扩展字段。
22
+ */
23
+ export type JsLlmThinkingOptions = {
24
+ /**
25
+ * thinking 开关。
26
+ * - 允许 boolean/number/string 以兼容历史配置与不同服务端接受的类型
27
+ */
28
+ enabled?: boolean | number | string;
29
+ /**
30
+ * thinking 预算(tokens)。
31
+ * - 允许 number/string 以兼容不同服务端入参要求
32
+ */
33
+ budgetTokens?: number | string;
34
+ };
35
+ /**
36
+ * qwen 模型私有字段(仅 qwen* providerName 生效)。
37
+ *
38
+ * 优先级:qwen 私有字段 > thinking 公共字段。
39
+ */
40
+ export type JsLlmQwenOptions = {
41
+ /**
42
+ * Qwen/DashScope OpenAI compatible 扩展字段:`enable_thinking`
43
+ */
44
+ enable_thinking?: boolean | number | string;
45
+ /**
46
+ * Qwen/DashScope OpenAI compatible 扩展字段:`thinking_budget`
47
+ */
48
+ thinking_budget?: number | string;
49
+ };
50
+ /**
51
+ * 初始化 LLM 配置(下游项目通常由配置文件/环境变量拼装得到)。
52
+ *
53
+ * 关键约定:
54
+ * - `providerName` 用于做部分模型/供应商的策略判断(例如 `qwen*` 前缀)。
55
+ * - `temperature` 若不合法(非有限数字或不在 [0,2])将不会下发给供应商,从而使用供应商默认值。
56
+ */
57
+ export type JsLlmInitOptions = {
58
+ /**
59
+ * 供应商名称(用于标识与部分策略判断)。
60
+ * - qwen* 判断规则:以 `qwen` 前缀(不区分大小写)命名时视为 qwen 模式(例如 `qwen1`、`qwen-local`)。
61
+ */
62
+ providerName: string;
63
+ /**
64
+ * 协议类型:`openai` 或 `gemini`。
65
+ */
66
+ apiType: JsLlmProviderApiType;
67
+ /**
68
+ * 供应商 API Key。
69
+ */
70
+ apiKey: string;
71
+ /**
72
+ * 可选:自定义 API baseUrl(常用于反向代理/兼容网关)。
73
+ * - OpenAI compatible:例如 `https://your-gateway.example.com/v1`
74
+ * - Gemini:默认通常为 `https://generativelanguage.googleapis.com`;仅代理/国内环境需要设置
75
+ */
76
+ baseUrl?: string;
77
+ /**
78
+ * 可选:API 版本(当前主要用于 Gemini)。
79
+ * - 预览模型建议显式配置,例如 `v1beta`
80
+ */
81
+ apiVersion?: string;
82
+ /**
83
+ * 模型名称(不同供应商的模型命名规则不同)。
84
+ */
85
+ model: string;
86
+ /**
87
+ * 可选:采样温度。
88
+ * - 合法范围:[0,2]
89
+ * - 不传/不合法:不下发给供应商(使用供应商默认值)
90
+ */
91
+ temperature?: number;
92
+ /**
93
+ * 通用 thinking 配置(公共字段)。
94
+ */
95
+ thinking?: JsLlmThinkingOptions;
96
+ /**
97
+ * qwen 私有字段(仅 qwen* providerName 生效)。
98
+ */
99
+ qwen?: JsLlmQwenOptions;
100
+ };
101
+ /**
102
+ * 对话消息角色。
103
+ */
104
+ export type JsLlmChatMessageRole = "system" | "user" | "assistant" | "tool";
105
+ /**
106
+ * 工具调用结构(OpenAI compatible 常见)。
107
+ * - `arguments` 必须是 JSON 字符串(例如 `{"command":"ls -la"}`)
108
+ */
109
+ export type JsLlmChatToolCall = {
110
+ id: string;
111
+ name: string;
112
+ arguments: string;
113
+ };
114
+ /**
115
+ * 对话消息结构。
116
+ */
117
+ export type JsLlmChatMessage = {
118
+ /**
119
+ * 消息角色。
120
+ */
121
+ role: JsLlmChatMessageRole;
122
+ /**
123
+ * 消息正文文本。
124
+ */
125
+ content: string;
126
+ /**
127
+ * tool message 对应的 tool_call_id(OpenAI 兼容协议)。
128
+ */
129
+ toolCallId?: string;
130
+ /**
131
+ * system/tool 消息可选名称(例如 agentLabel / tool 名称)。
132
+ */
133
+ name?: string;
134
+ /**
135
+ * assistant 触发的工具调用列表(OpenAI 兼容协议)。
136
+ */
137
+ toolCalls?: JsLlmChatToolCall[];
138
+ };
139
+ /**
140
+ * `chatInSession` 实时输出事件(用于应用侧接收流式信息)。
141
+ *
142
+ * 关键约定:
143
+ * - `messageFileName/thinkFileName` 与会话目录落盘文件名一致(例如 `0005-O-AS-140236.txt` / `0005-O-AS-140236.think`)。
144
+ * - `*_soFar` 字段表示“当前轮已输出的累计内容”(便于增量渲染)。
145
+ */
146
+ export type JsLlmChatCliOutputEvent = {
147
+ type: "assistant_start";
148
+ sessionDir: string;
149
+ sessionName: string;
150
+ seq: number;
151
+ direction: "O";
152
+ role: "assistant";
153
+ messageFileName: string;
154
+ messageFilePath: string;
155
+ thinkFileName: string;
156
+ thinkFilePath: string;
157
+ attempt: number;
158
+ } | {
159
+ type: "assistant_text";
160
+ sessionDir: string;
161
+ sessionName: string;
162
+ seq: number;
163
+ direction: "O";
164
+ role: "assistant";
165
+ messageFileName: string;
166
+ messageFilePath: string;
167
+ chunkText: string;
168
+ textSoFar: string;
169
+ attempt: number;
170
+ } | {
171
+ type: "assistant_think";
172
+ sessionDir: string;
173
+ sessionName: string;
174
+ seq: number;
175
+ direction: "O";
176
+ role: "assistant";
177
+ thinkFileName: string;
178
+ thinkFilePath: string;
179
+ chunkThink: string;
180
+ thinkSoFar: string;
181
+ attempt: number;
182
+ } | {
183
+ type: "assistant_tool_call";
184
+ sessionDir: string;
185
+ sessionName: string;
186
+ seq: number;
187
+ direction: "O";
188
+ role: "assistant";
189
+ messageFileName: string;
190
+ messageFilePath: string;
191
+ toolCall: JsLlmChatToolCall;
192
+ toolCallsSoFar: JsLlmChatToolCall[];
193
+ attempt: number;
194
+ } | {
195
+ type: "assistant_end";
196
+ sessionDir: string;
197
+ sessionName: string;
198
+ seq: number;
199
+ direction: "O";
200
+ role: "assistant";
201
+ messageFileName: string;
202
+ messageFilePath: string;
203
+ thinkFileName: string;
204
+ thinkFilePath: string;
205
+ text: string;
206
+ think: string;
207
+ toolCalls: JsLlmChatToolCall[];
208
+ usage?: {
209
+ promptTokens?: number;
210
+ completionTokens?: number;
211
+ totalTokens?: number;
212
+ };
213
+ attempt: number;
214
+ };
215
+ /**
216
+ * `chatInSession` 入参(会话引擎)。
217
+ */
218
+ export type JsLlmRunChatCliOptions = {
219
+ /**
220
+ * 初始化 LLM 配置。
221
+ */
222
+ init: JsLlmInitOptions;
223
+ /**
224
+ * 可选:用于会话 front matter 的 user 字段。
225
+ */
226
+ user?: string;
227
+ /**
228
+ * 可选:全局 agent 名称或路径(按 `public/agents` 规则解析)。
229
+ */
230
+ globalAgent?: string;
231
+ /**
232
+ * 工作区根目录:
233
+ * - 用于解析 `public/agents/*` 的系统提示词与 agent 文件
234
+ * - 也是内置 `shell` 工具的执行 cwd
235
+ */
236
+ workspaceRoot: string;
237
+ /**
238
+ * 会话落盘根目录:
239
+ * - 会在其下创建 `YYYYMMDD_HHMMSS/` 会话目录与 `latest` 软链
240
+ */
241
+ sessionRootDir: string;
242
+ /**
243
+ * 可选:用户输入消息(优先级最高)。
244
+ * - 未提供时,在 stdin 非 TTY 的情况下读取 stdin
245
+ */
246
+ messageArg?: string;
247
+ /**
248
+ * 可选:系统提示词。
249
+ * - 内联文本:直接传字符串
250
+ * - 引用文件/agent:以 `@` 开头,例如 `@公共智能体` 或 `@./path/to/prompt.txt`
251
+ */
252
+ systemPrompt?: string;
253
+ /**
254
+ * 可选:指定会话目录名(相对于 `sessionRootDir` 的相对子目录)。
255
+ */
256
+ sessionArg?: string;
257
+ /**
258
+ * 是否将输出写入控制台(stdout/stderr)。
259
+ * - 默认 true(保持 CLI 行为)
260
+ */
261
+ consoleOutput?: boolean;
262
+ /**
263
+ * 实时输出回调:用于获取流式 text/think/tool_call 等事件,便于应用侧渲染/采集。
264
+ */
265
+ onEvent?: (event: JsLlmChatCliOutputEvent) => void | Promise<void>;
266
+ };
267
+ /**
268
+ * 会话模式聊天(落盘 + 工具循环 + 流式输出)。
269
+ *
270
+ * 多轮会话通过“会话目录落盘 + 下次加载历史”实现;详见 README 与 `dist/types.d.ts` 注释说明。
271
+ */
272
+ export declare const chatInSession: (options: JsLlmRunChatCliOptions) => Promise<void>;
273
+ /**
274
+ * 单轮文本生成(不落盘、不启用工具)。
275
+ *
276
+ * @example
277
+ * ```js
278
+ * const { chatDirectText } = require("@mmteam/jsllm");
279
+ *
280
+ * const text = await chatDirectText(
281
+ * {
282
+ * providerName: "gemini",
283
+ * apiType: "gemini",
284
+ * apiKey: process.env.GEMINI_API_KEY,
285
+ * model: "gemini-1.5-pro",
286
+ * apiVersion: "v1beta",
287
+ * },
288
+ * [{ role: "user", content: "Summarize: ..." }],
289
+ * );
290
+ * console.log(text);
291
+ * ```
292
+ */
293
+ export declare const chatDirectText: (init: JsLlmInitOptions, messages: JsLlmChatMessage[]) => Promise<string>;
294
+
295
+ export {};