@mmteam/jsllm 0.1.7 → 0.1.13

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 (2) hide show
  1. package/README.md +37 -11
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -27,10 +27,10 @@ npm i @mmteam/jsllm
27
27
  ### CommonJS(推荐)
28
28
  ```js
29
29
  const path = require("node:path");
30
- const { runChatCliSession } = require("@mmteam/jsllm");
30
+ const { chatInSession } = require("@mmteam/jsllm");
31
31
 
32
32
  async function main() {
33
- await runChatCliSession({
33
+ await chatInSession({
34
34
  init: {
35
35
  providerName: "openai",
36
36
  apiType: "openai",
@@ -59,7 +59,7 @@ main().catch((err) => {
59
59
  ```js
60
60
  import { createRequire } from "node:module";
61
61
  const require = createRequire(import.meta.url);
62
- const { streamChatText } = require("@mmteam/jsllm");
62
+ const { chatDirectText } = require("@mmteam/jsllm");
63
63
  ```
64
64
 
65
65
  ## API
@@ -68,7 +68,7 @@ const { streamChatText } = require("@mmteam/jsllm");
68
68
  详细参数、类型与中文说明:请参考 `node_modules/@mmteam/jsllm/dist/types.d.ts`(本仓库构建产物对应 `projects/jsllm/codex-zf/dist/types.d.ts`)。
69
69
 
70
70
  ### 如何选择?
71
- | 能力 | `streamChatText` | `runChatCliSession` |
71
+ | 能力 | `chatDirectText` | `chatInSession` |
72
72
  |---|---|---|
73
73
  | 目标 | 单轮生成(返回文本) | 会话引擎(落盘 + 工具循环 + 流式输出) |
74
74
  | 输入 | 调用方提供 `messages` | `messageArg` 或 stdin;并自动加载会话历史 |
@@ -76,12 +76,12 @@ const { streamChatText } = require("@mmteam/jsllm");
76
76
  | 工具 | 不启用、不执行 | 内置 `shell`(模型触发时执行并回填) |
77
77
  | 适用场景 | 摘要/改写/分类等一次性生成;你自管存储 | CLI/交互式场景;需要可追溯、可续写会话 |
78
78
 
79
- ### `streamChatText(init, messages): Promise<string>`
79
+ ### `chatDirectText(init, messages): Promise<string>`
80
80
  - 用途:不落盘、不启用工具的“单轮文本生成”,返回最终聚合文本
81
81
  - 示例:
82
82
  ```js
83
- const { streamChatText } = require("@mmteam/jsllm");
84
- const text = await streamChatText(
83
+ const { chatDirectText } = require("@mmteam/jsllm");
84
+ const text = await chatDirectText(
85
85
  {
86
86
  providerName: "gemini",
87
87
  apiType: "gemini",
@@ -95,12 +95,14 @@ const text = await streamChatText(
95
95
  console.log(text);
96
96
  ```
97
97
 
98
- ### `runChatCliSession(options): Promise<void>`
98
+ ### `chatInSession(options): Promise<void>`
99
99
  - 用途:执行一次“CLI 式会话主循环”(会话落盘 + 流式输出 + 工具循环)
100
100
  - 重要参数:
101
101
  - `workspaceRoot`:工作区根目录(用于解析 `public/agents`,以及工具执行 cwd)
102
102
  - `sessionRootDir`:会话根目录(会在其下创建会话目录与 `latest` 软链)
103
103
  - `systemPrompt`:支持内联文本或 `@` 引用文件/agent 名称(见下方说明)
104
+ - `consoleOutput`:是否写入 stdout/stderr(默认 `true`)
105
+ - `onEvent`:实时输出回调(区分正常回复 text 与 think,并携带与落盘一致的文件名/路径)
104
106
 
105
107
  ## 供应商与配置
106
108
 
@@ -150,7 +152,7 @@ init: {
150
152
  }
151
153
  ```
152
154
 
153
- ## 会话落盘说明(`runChatCliSession`)
155
+ ## 会话落盘说明(`chatInSession`)
154
156
  - 会话根目录:由 `sessionRootDir` 指定
155
157
  - 会话目录:`YYYYMMDD_HHMMSS/`
156
158
  - `latest`:会话根目录下的软链,指向最近一次有效会话目录
@@ -158,7 +160,31 @@ init: {
158
160
  - 消息文件:按序号落盘,支持恢复历史继续会话
159
161
  - `.think`:当模型输出 reasoning/think 时,会额外落盘同名 `.think` 文件
160
162
 
161
- ## systemPrompt / globalAgent(`runChatCliSession`)
163
+ ## 实时回调(`chatInSession.onEvent`)
164
+ 你可以通过 `onEvent` 在应用侧接收流式输出,并区分正常回复与 think(事件中携带与落盘一致的文件名):
165
+ ```js
166
+ await chatInSession({
167
+ /* ... */,
168
+ consoleOutput: false,
169
+ onEvent(e) {
170
+ if (e.type === "assistant_text") {
171
+ // e.textSoFar:当前轮累计的“正常回复”
172
+ }
173
+ if (e.type === "assistant_think") {
174
+ // e.thinkSoFar:当前轮累计的 think/reasoning
175
+ }
176
+ },
177
+ });
178
+ ```
179
+
180
+ ## 多轮会话(`chatInSession`)
181
+ `chatInSession` 的多轮能力通过“会话目录落盘 + 下次加载历史”实现:每次调用会读取目标会话目录的历史消息并继续追加写入。
182
+
183
+ - 默认续写上一会话(推荐):多次调用时保持相同的 `sessionRootDir`,且不传 `sessionArg`,库会自动复用 `latest` 指向的会话目录。
184
+ - 固定到指定会话:传入 `sessionArg: "my-session"`(相对 `sessionRootDir` 的相对子目录),每次调用都使用同一个值,即可稳定续写同一会话。
185
+ - systemPrompt 建议:同一会话通常只在“第一轮”设置 `systemPrompt`;后续轮次不再传(或改用 `sessionArg` 固定会话),避免触发创建新会话导致上下文断裂。
186
+
187
+ ## systemPrompt / globalAgent(`chatInSession`)
162
188
  - `systemPrompt` 支持两种形式:
163
189
  - 内联文本:直接传字符串
164
190
  - 引用文件/agent:以 `@` 开头,例如 `@公共智能体` 或 `@./path/to/prompt.txt`
@@ -169,7 +195,7 @@ init: {
169
195
  - `MCHAT_DEBUG`:Gemini provider debug 输出(`true/1` 开启)
170
196
 
171
197
  ## 安全说明(工具)
172
- `runChatCliSession` 内置 `shell` 工具:当模型触发工具调用时,会在 `workspaceRoot` 下通过 `bash -lc` 执行命令并回填输出。请仅在可信环境中使用,并确保运行账号权限可控。
198
+ `chatInSession` 内置 `shell` 工具:当模型触发工具调用时,会在 `workspaceRoot` 下通过 `bash -lc` 执行命令并回填输出。请仅在可信环境中使用,并确保运行账号权限可控。
173
199
 
174
200
  ## 开发
175
201
  > 下述为仓库开发者使用;下游项目不需要执行 build。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmteam/jsllm",
3
- "version": "0.1.7",
3
+ "version": "0.1.13",
4
4
  "description": "MM Team LLM library (providers + chat/session runner)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",