@mortiseai/stem 0.0.25 → 0.0.27
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.
- package/README.md +54 -33
- package/dist/cli.mjs +1045 -1009
- package/dist/daemon.mjs +800 -765
- package/dist/mcp.mjs +800 -765
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -117,12 +117,17 @@ stem --telemetry-url ws://127.0.0.1:8123/ws/manual
|
|
|
117
117
|
- 平台与模型目录来自 `.mstem/llms.json`(见下节)
|
|
118
118
|
- 解析优先级(**`llms.json` 的 `default` 是唯一的持久来源,settings 不参与模型选择**):
|
|
119
119
|
|
|
120
|
-
`/fast`
|
|
120
|
+
`/fast` 开启且选中模型与 `roles.fast` 目标均声明能力 > **会话级覆盖**(`--model` 启动参数 / 会话内 `/model`,同一个槽)> `llms.json` 的 `default`(工程层 `.mstem/<scope>/` > 用户层 `~/.mstem[/tenant/<code>]/`)> env `STEM_DEF_LLM_MODEL` > 首平台首模型
|
|
121
121
|
|
|
122
122
|
- `/model <ref>` 是**会话级**的:与 `--model` 写同一个槽,**不落盘**,退出即失效,后写胜出
|
|
123
123
|
- `/model default` 清掉该槽(连 `--model` 启动参数一起撤销),回落 `llms.json` 的 `default`
|
|
124
124
|
- **要改持久默认模型,就改 `llms.json` 的 `default`** —— 没有别的持久化入口
|
|
125
125
|
- `/model current` 可查看当前模型与来源
|
|
126
|
+
- `/fast [on|off]` 默认关闭,仅当前选中模型在 `llms.json` 声明有效 `fast_service_tier` 时可用;不带参数时切换。该字段只声明能力,不会自动开启 fast
|
|
127
|
+
- 能力配置按模型级 > 平台级解析:模型未配置则继承平台,模型显式 `false` 禁用。未声明能力时,包括 OpenAI 官方端点,均不默认申请 `priority`;手动输入 `/fast` 会提示不可用且不修改开关
|
|
128
|
+
- OpenAI 协议请求在 fast 生效后发送配置的 `service_tier`。如果配置了 `roles.fast`,只有选中模型和目标模型均声明能力时才切换;目标无能力时保持当前模型。`/fast off` 同时撤销服务档位和模型切换
|
|
129
|
+
- Footer 仅在有能力时显示 `快速模式 : 关闭` / `快速模式 : 开启`;无能力时整个片段及分隔符隐藏,补全和 `/help` 也隐藏 `/fast`。额度与 fast 均不显示时,整行隐藏
|
|
130
|
+
- 保存的 `fast.enabled: true` 只是一项偏好:切到无能力模型或删除能力声明后不生效;切回支持的模型后恢复。`roles.fast` 不能绕过此检查
|
|
126
131
|
|
|
127
132
|
### 模型目录 · `.mstem/llms.json`
|
|
128
133
|
|
|
@@ -133,7 +138,7 @@ stem --telemetry-url ws://127.0.0.1:8123/ws/manual
|
|
|
133
138
|
- `authHeader`:缺省 anthropic → `x-api-key`、openai → `bearer`
|
|
134
139
|
- `context`:支持 `'200k'` / `'1M'` / 数字;`pricing` 单位 USD/1M tokens(供 `/cost` 分账)
|
|
135
140
|
- `vision`:该模型是否支持图片理解(布尔);未声明视为能力未知
|
|
136
|
-
- `default`:全局默认模型;`roles.fast`:`/fast`
|
|
141
|
+
- `default`:全局默认模型;`roles.fast`:`/fast` 可选的快速模型(不配时已声明的 `fast_service_tier` 仍可独立生效)
|
|
137
142
|
|
|
138
143
|
**per-model 深度思考开关与强度**—— 控制这个模型默认是否思考,以及 OpenAI 推理模型的原生强度:
|
|
139
144
|
|
|
@@ -336,12 +341,22 @@ MCP server 清单只从当前工程读取:`<cwd>/.mstem/platform/mcp.json`;租
|
|
|
336
341
|
|
|
337
342
|
#### 快速开始
|
|
338
343
|
|
|
344
|
+
Chrome 回归测试默认关闭。要让当前工程每次启动 Stem 后都允许按需使用浏览器,在 `.mstem/<scope>/settings.local.json` 写入:
|
|
345
|
+
|
|
346
|
+
```json
|
|
347
|
+
{
|
|
348
|
+
"chrome": { "enabled": true }
|
|
349
|
+
}
|
|
339
350
|
```
|
|
351
|
+
|
|
352
|
+
缺失 `chrome.enabled` 或值不是布尔 `true` 时均按关闭处理。完成配置后:
|
|
353
|
+
|
|
354
|
+
```text
|
|
340
355
|
/chrome setup # 写入当前工程 .mstem/<scope>/mcp.json
|
|
341
|
-
/chrome
|
|
356
|
+
/chrome on # 本次运行立即开启并连接(首次会用 npx 拉包,约 30–60 秒)
|
|
342
357
|
```
|
|
343
358
|
|
|
344
|
-
然后直接说「打开 example.com,告诉我页面标题」即可。`/chrome
|
|
359
|
+
然后直接说「打开 example.com,告诉我页面标题」即可。`/chrome on` 会立即刷新
|
|
345
360
|
动态工具目录,下一条普通请求生效,无需退出或重启 CLI。
|
|
346
361
|
|
|
347
362
|
当请求包含打开页面、点击、截图、控制台或 DOM 复测等浏览器意图时,Stem 会先检查
|
|
@@ -357,7 +372,8 @@ MCP server 清单只从当前工程读取:`<cwd>/.mstem/platform/mcp.json`;租
|
|
|
357
372
|
|---|---|
|
|
358
373
|
| `/chrome` | 状态卡:配置来源、命令行、连接状态、本机 Chrome、Node 版本。**不发起连接** |
|
|
359
374
|
| `/chrome setup [flags]` | 幂等合并写入 mcp.json(保留同级其他 server) |
|
|
360
|
-
| `/chrome connect` |
|
|
375
|
+
| `/chrome on` / `/chrome connect` | 覆盖默认状态,在本次 Stem 运行中开启、断开重连并刷新工具目录 |
|
|
376
|
+
| `/chrome off` / `/chrome close` | 覆盖默认状态,在本次 Stem 运行中关闭浏览器并隐藏工具 |
|
|
361
377
|
| `/chrome tools [过滤词]` | 列出工具(人读版) |
|
|
362
378
|
| `/chrome remove` | 从所属配置层删除条目 |
|
|
363
379
|
|
|
@@ -401,7 +417,7 @@ MCP server 清单只从当前工程读取:`<cwd>/.mstem/platform/mcp.json`;租
|
|
|
401
417
|
|
|
402
418
|
#### 权限
|
|
403
419
|
|
|
404
|
-
动态注册后每个浏览器动作都是独立工具名,可精确配规则(
|
|
420
|
+
动态注册后每个浏览器动作都是独立工具名,可精确配规则(写在当前项目 `.mstem/platform/settings.local.json`):
|
|
405
421
|
|
|
406
422
|
```json
|
|
407
423
|
{
|
|
@@ -446,7 +462,9 @@ MCP server 清单只从当前工程读取:`<cwd>/.mstem/platform/mcp.json`;租
|
|
|
446
462
|
- `logic/core/permission-logic/source/permissionRules.ts` — 工具名尾 `*` 前缀匹配
|
|
447
463
|
- `logic/core/system-prompt-logic/source/systemPrompt.ts` — `buildBrowserPromptSection()`,仅在工具池真有浏览器工具时注入「先取快照拿 uid、再按 uid 操作」的用法约定
|
|
448
464
|
|
|
449
|
-
|
|
465
|
+
`chrome.enabled` 是未执行运行期命令时的基准状态。运行中可用 `/chrome off` 主动关闭 Stem 托管的浏览器并暂停浏览器工具,配置不会删除;用 `/chrome on` 即可重新连接,无需重启 Stem。一旦执行 `on/off`,其进程内覆盖会保持到本次 Stem 退出,下次启动重新读取 settings。`/chrome close`、`/chrome disconnect` 与 `off` 等价,原有 `/chrome connect` 与 `on` 等价。
|
|
466
|
+
|
|
467
|
+
自检脚本 `bun scripts/smoke-chrome-mcp.ts`(不需要 Chrome、不需要联网)覆盖截图直通、动态注册、运行期开关、连接失败 TTL、配置写入器与权限通配。
|
|
450
468
|
|
|
451
469
|
### 阿里百炼联网搜索 · `/bailian`
|
|
452
470
|
|
|
@@ -526,10 +544,9 @@ Stem 的三种核心业务模式:
|
|
|
526
544
|
|---|---|---|
|
|
527
545
|
| Group 数据(session/causal/distill/evolve) | `<cwd>/.mstem/platform/<kind>/` | `<cwd>/.mstem/H/<kind>/` |
|
|
528
546
|
| 用户空间(--user 时的全部数据,见下节) | `<cwd>/mstem-storage/platform/<user>/` | `<cwd>/mstem-storage/H/<user>/` |
|
|
529
|
-
| 家目录状态(projects/
|
|
547
|
+
| 家目录状态(projects/memory;输入历史为进程内内存,不落盘) | `~/.mstem/...` | `~/.mstem/H/...` |
|
|
530
548
|
| 项目级共享产物(plan 与 wiki 同级、不插作用域段) | `<存储根>/plans/` | `<存储根>/plans/` |
|
|
531
|
-
|
|
|
532
|
-
| 项目配置(settings/skills/plugins/agents/workflows/hooks/mcp/llms/memory) | `<cwd>/.mstem/platform/...` | `<cwd>/.mstem/H/...` |
|
|
549
|
+
| 项目配置(settings/keybindings/skills/plugins/agents/workflows/hooks/mcp/llms/memory) | `<cwd>/.mstem/platform/...` | `<cwd>/.mstem/H/...` |
|
|
533
550
|
| debug 日志 | `<cwd>/logs/<YYYY-MM-DD>/<HH-MM-SS-sessionId>/` | 同左(统一按日期/会话归档;sessionId 唯一) |
|
|
534
551
|
|
|
535
552
|
- **env 覆盖 × 租户**:目录形根只有两个 env(`STEM_STORAGE_DIR` 重定向存储根、
|
|
@@ -627,7 +644,7 @@ Stem 的三种核心业务模式:
|
|
|
627
644
|
|
|
628
645
|
完整参数清单以 `stem --help` 输出为准。
|
|
629
646
|
|
|
630
|
-
### 运行时开关 · `.mstem
|
|
647
|
+
### 运行时开关 · 当前项目 `.mstem` 的 `env` 段
|
|
631
648
|
|
|
632
649
|
CLI 子进程的运行时开关统一放 settings 级联的 **`env` 段**(不再使用 `.env`):
|
|
633
650
|
入口启动时把 `env` 对象逐 key 注入 `process.env`,**仅补缺不覆盖** — shell
|
|
@@ -636,11 +653,15 @@ CLI 子进程的运行时开关统一放 settings 级联的 **`env` 段**(不再
|
|
|
636
653
|
|
|
637
654
|
层级(高层同 key 覆盖低层):
|
|
638
655
|
|
|
639
|
-
1. `<cwd>/.mstem/settings.local.json` — 个人项目级(应 gitignore)
|
|
640
|
-
2. `<cwd>/.mstem/settings.json` — 团队项目级(随仓库提交)
|
|
641
|
-
|
|
656
|
+
1. `<cwd>/.mstem/platform/settings.local.json` — 个人项目级(应 gitignore)
|
|
657
|
+
2. `<cwd>/.mstem/platform/settings.json` — 团队项目级(随仓库提交)
|
|
658
|
+
|
|
659
|
+
租户模式改用 `.mstem/tenant/<code>/`,`--user` 会话覆盖只保存在进程内。
|
|
660
|
+
不读取或重建 `~/.mstem.json`,也不回落到 `~/.mstem/` 的配置与扩展。
|
|
661
|
+
新增设置默认写当前作用域的 `settings.local.json`;已有设置写回所属项目层。
|
|
662
|
+
`STEM_SETTINGS_PATH` 可显式替换 local 文件,`STEM_DIR` 可重定向项目配置根。
|
|
642
663
|
|
|
643
|
-
示例 `.mstem/settings.local.json`:
|
|
664
|
+
示例 `.mstem/platform/settings.local.json`:
|
|
644
665
|
|
|
645
666
|
```json
|
|
646
667
|
{
|
|
@@ -696,12 +717,12 @@ CLI 子进程的运行时开关统一放 settings 级联的 **`env` 段**(不再
|
|
|
696
717
|
|
|
697
718
|
## LLM Wiki · `/stem-wiki`
|
|
698
719
|
|
|
699
|
-
> 三层知识体系的完整指南与使用用例:`MSTEM-WIKI.md`(沉淀)· `MSTEM-ONTO.md`(治理)· `MSTEM-
|
|
720
|
+
> 三层知识体系的完整指南与使用用例:`MSTEM-WIKI.md`(沉淀)· `MSTEM-ONTO.md`(治理)· `MSTEM-CASE.md`(度量)。本节及后两节为速查。
|
|
700
721
|
|
|
701
722
|
参考 [nashsu/llm_wiki](https://github.com/nashsu/llm_wiki)(Karpathy「LLM Wiki」模式):与 RAG 每次从零检索不同,agent **增量构建并维护一份持久化、互链的 Markdown 知识库** —— 你负责策展(`purpose.md` 写目标、`schema.md` 定结构、丢源文件),agent 负责维护(ingest / query / lint)。
|
|
702
723
|
|
|
703
724
|
- **独立作用域**:wiki 不挂 platform/tenant/user。一份 wiki = 一个业务场景,可有多份;统一注册在存储根 `mstem-storage/wiki/wikis.json`(与 `platform/`、`tenant/` 同级;随 `STEM_STORAGE_DIR`/`storage.dir` 走),缺省每份落 `mstem-storage/wiki/<name>/`,`--dir` 可指到任意目录(如项目内)。
|
|
704
|
-
- **会话挂载**:`/stem-wiki <name>` 只按已注册名称把 wiki 挂进当前会话(不接受路径);之后 import/query/lint 都作用于它。wiki / onto /
|
|
725
|
+
- **会话挂载**:`/stem-wiki <name>` 只按已注册名称把 wiki 挂进当前会话(不接受路径);之后 import/query/lint 都作用于它。wiki / onto / case 各有独立挂载槽,底栏和 session meta 同时保存三者,`--resume` / `/resume` 分别恢复。
|
|
705
726
|
- **目录布局**与 llm_wiki 桌面端一致,可用 Obsidian 直接打开:`purpose.md` · `schema.md` · `raw/sources/` · `wiki/{index,log,overview}.md + entities/ concepts/ sources/ queries/ comparisons/ synthesis/(+模板目录)` · `.llm-wiki/{reviews,converted,analysis,ingest-cache.json,search-index.json}`。
|
|
706
727
|
|
|
707
728
|
```bash
|
|
@@ -763,29 +784,29 @@ agent 侧配套工具(MCP 同样暴露为 `tool_ontology_*`):`OntologySchema`(tr
|
|
|
763
784
|
|
|
764
785
|
---
|
|
765
786
|
|
|
766
|
-
## 黄金用例集 · `/stem-
|
|
787
|
+
## 黄金用例集 · `/stem-case`
|
|
767
788
|
|
|
768
|
-
三条命令的职责边界:**`/stem-wiki` 沉淀 · `/stem-onto` 治理 · `/stem-
|
|
789
|
+
三条命令的职责边界:**`/stem-wiki` 沉淀 · `/stem-onto` 治理 · `/stem-case` 度量**。三者拥有独立目录、注册表、会话挂载槽与写门;跨空间读取只使用会话当前挂载的协作者。黄金用例集(Golden Use Cases)默认 10 条,配比正例 50% / 错例 30% / 边界 20%,只依赖人的 KnowHow,**可以先于任何页面与本体存在**;缺 Wiki / Ontology 时解析与结构分明确降级为 n/a。
|
|
769
790
|
|
|
770
|
-
- **独立空间**:`<存储根>/
|
|
791
|
+
- **独立空间**:`<存储根>/case/<name>/case/{README.md, cases/<g-NNNN>.md}` + `.llm-wiki/case/{runs/, derived/, latest.json}`;注册表 `case/cases.json`,用 `/stem-case <name>` 挂载。
|
|
771
792
|
- **用例**:`kind`(positive: lookup / relation / aggregate;negative: false-premise / stale / misattribution;edge: multi-hop / alias / cross-class / ambiguous)、`question`、`mode`(answer / refute / abstain / list)、`mustContain` / `mustNotContain`、`entities` / `relations` / `classes`、`weight`,正文 `## Rationale`。
|
|
772
793
|
- **打分(确定性优先)**:字面分(mustContain 命中 ×6 + mustNotContain 无违反 ×4)+ 模式一致性(从回答检测 refute / abstain / list;不符封顶 3 分)+ 结构分(已解析的实体 / 关系在 KB 中命中率;无本体时报告标 `n/a`,不给假低分);open 题可用 `--judge` 让 agent 自评。**负例通过率单独列**,防止"全答对但都顺着说"。每条失败带归因码:`missingPage / missingClass / missingRelation / wrongAnswer / followedFalsePremise / overAbstain` —— 前三种直接就是建设清单。
|
|
773
794
|
|
|
774
795
|
```bash
|
|
775
|
-
/stem-
|
|
776
|
-
/stem-
|
|
777
|
-
/stem-
|
|
778
|
-
/stem-
|
|
779
|
-
/stem-
|
|
780
|
-
/stem-
|
|
781
|
-
/stem-
|
|
782
|
-
/stem-
|
|
783
|
-
/stem-
|
|
796
|
+
/stem-case list · /stem-case create <name> [--dir p] · /stem-case <name> · /stem-case detach · /stem-case remove <name> [--purge]
|
|
797
|
+
/stem-case init [--name 名称] [--n 10] [--ratio 5/3/2] [--wiki 名称] [--no-interview] # 未挂自身空间时自动创建;缺 Wiki 时建同名协作 Wiki
|
|
798
|
+
/stem-case import <文件|目录> [--analyze] [--max N] # 合规 md/json/csv 直接导入;普通外部资料自动分析后生成 case
|
|
799
|
+
/stem-case cases [--kind k] · /stem-case show <id> · /stem-case add [提示] · /stem-case status
|
|
800
|
+
/stem-case check # 配比 + 期望解析:resolved / unresolved 两栏,unresolved 即待建清单
|
|
801
|
+
/stem-case derive [--apply] # 待建清单 → 本体提案草案 + 页面待办;--apply 让 agent 经 OntologyPropose / WikiReview 落成正式项
|
|
802
|
+
/stem-case run [--judge] [--kind k] # agent 逐题用 WikiSearch / OntologyGraph 作答 → CaseScore score(确定性打分 + 归因)→ 全部打完自动收尾
|
|
803
|
+
/stem-case report [runId] [--finish] # 套件分 / 按 kind 通过率 / 归因分布 / 逐题明细 / 与上次 run 对比 / 是否已过期(页面或本体变了)
|
|
804
|
+
/stem-case evolve <目标分> <最大轮数> # run → 修根因(补页 / 提案 / 改标注)→ 再 run,直到达标(prompt 驱动循环;不改用例凑分)
|
|
784
805
|
```
|
|
785
806
|
|
|
786
|
-
三种起步顺序都支持:用例先行(init/import → derive → `/stem-onto init` + merge → `/stem-wiki import` → run)、知识先行(基于类树 + 访谈生成 → run)、交替演化(evolve)。`/stem-onto status` 与 system prompt 会显示最近分数与最弱 kind,引导 import / classify 优先补短板。agent 工具:`
|
|
807
|
+
三种起步顺序都支持:用例先行(init/import → derive → `/stem-onto init` + merge → `/stem-wiki import` → run)、知识先行(基于类树 + 访谈生成 → run)、交替演化(evolve)。`/stem-onto status` 与 system prompt 会显示最近分数与最弱 kind,引导 import / classify 优先补短板。agent 工具:`CaseScore`(list / get / add / score / status;MCP `tool_case_score`)。prompt 指令块可用 `.mstem/skills/case-<init|import|add|run|derive|evolve>/SKILL.md` 覆盖。
|
|
787
808
|
|
|
788
|
-
**独立面板**:`run` / `evolve` 发起后,输入框上方出现黄金用例面板(`src/stem-ui/
|
|
809
|
+
**独立面板**:`run` / `evolve` 发起后,输入框上方出现黄金用例面板(`src/stem-ui/CasePanel.tsx`,数据源 `stem-utils/casePanelStore`):逐题 ✓/✗/spinner、每题分数条与归因、套件分、按 kind 汇总、evolve 的轮次轨迹(R1 → R2 …);Agent 每次调 `CaseScore score` 即时刷新;Ctrl+C / Esc 标记中断并冻结为快照;`/stem-case hide` 关闭。它与洞察模式(`/stem-causal` / `/stem-distill` / `/stem-evolve` 的 InsightPanel)**零耦合**——自有 store、自有组件、自有生命周期,不新增 InsightMode。
|
|
789
810
|
|
|
790
811
|
---
|
|
791
812
|
|
|
@@ -821,8 +842,8 @@ mstem-storage/ # 存储根(STEM_STORAGE_DIR)
|
|
|
821
842
|
|
|
822
843
|
- 四个作用域(platform / platform+user / tenant / tenant+user)两两绝对隔离,详见「多租户隔离」「用户隔离」两节
|
|
823
844
|
- 会话聊天文件默认落 `.mstem/platform/session/<sessionId>.jsonl`;`--user` 时落 `mstem-storage/platform/<用户ID>/session/`
|
|
824
|
-
- settings
|
|
825
|
-
-
|
|
845
|
+
- settings 级联:会话覆盖 > 当前 `.mstem/<scope>/settings.local.json` > `settings.json`;不读取家目录配置。
|
|
846
|
+
- 新增设置写当前项目 `settings.local.json`,已有设置写回所属项目层;取消设置会清除项目两层中的该项。
|
|
826
847
|
- 骨架补齐与配置播种统一走 `./update_pro.sh`(幂等,绝不覆盖已有文件,见「空间初始化」节)
|
|
827
848
|
|
|
828
849
|
---
|