lantern-harness 0.0.0-stage → 0.1.1

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 (136) hide show
  1. package/CHANGELOG.md +155 -0
  2. package/LICENSE +21 -0
  3. package/README.md +107 -2
  4. package/builtin/session/README.md +21 -0
  5. package/builtin/session/bash-session.mjs +379 -0
  6. package/builtin/session/fs-observation-policy.mjs +38 -0
  7. package/builtin/session/lh-bash.mjs +778 -0
  8. package/builtin/session/lh-fs.mjs +1262 -0
  9. package/builtin/session/lh-nav-groups.mjs +717 -0
  10. package/builtin/session/lh-schedule.mjs +299 -0
  11. package/builtin/session/lh-spaces.mjs +423 -0
  12. package/builtin/session/lh-spill.mjs +138 -0
  13. package/builtin/session/lh-web.mjs +205 -0
  14. package/builtin/session/office-to-pdf.mjs +210 -0
  15. package/builtin/session/pwsh-session.mjs +376 -0
  16. package/builtin/session/sandbox-policy.mjs +116 -0
  17. package/builtin/session/session-runs.mjs +1352 -0
  18. package/builtin/session/skill-fs.mjs +148 -0
  19. package/builtin/session/space-context.mjs +70 -0
  20. package/builtin/session/space-layout.mjs +222 -0
  21. package/builtin/session/workspace-deps.mjs +63 -0
  22. package/cli/acp-server.mjs +185 -0
  23. package/cli/ai-testbench.mjs +5 -0
  24. package/cli/data-root.mjs +623 -0
  25. package/cli/ensure-dist.mjs +45 -0
  26. package/cli/headless.mjs +318 -0
  27. package/cli/jsonrpc-server.mjs +60 -0
  28. package/cli/lantern.mjs +981 -0
  29. package/cli/server.mjs +117 -0
  30. package/cli/spaces.mjs +995 -0
  31. package/cli/user-config.mjs +183 -0
  32. package/config/app.defaults.json +29 -0
  33. package/config/seeds//346/217/220/347/244/272/350/257/215/347/256/241/347/220/206//345/212/237/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/346/217/220/347/244/272/350/257/215v1.0.md +155 -0
  34. package/config/seeds//346/217/220/347/244/272/350/257/215/347/256/241/347/220/206//351/273/230/350/256/244/346/217/220/347/244/272/350/257/215.md +1 -0
  35. package/config/seeds//346/265/213/350/257/225/346/250/241/346/235/277/345/272/223//345/212/237/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212//345/212/237/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +65 -0
  36. package/config/seeds//346/265/213/350/257/225/346/250/241/346/235/277/345/272/223//345/212/237/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213//345/212/237/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/346/235/277.xlsx +0 -0
  37. package/config/seeds//346/265/213/350/257/225/346/250/241/346/235/277/345/272/223//346/200/247/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212//346/200/247/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +61 -0
  38. package/config/seeds//346/265/213/350/257/225/346/250/241/346/235/277/345/272/223//346/200/247/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213//346/200/247/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/346/235/277.md +42 -0
  39. package/config/seeds//346/265/213/350/257/225/346/250/241/346/235/277/345/272/223//346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212//346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +55 -0
  40. package/config/seeds//346/265/213/350/257/225/346/250/241/346/235/277/345/272/223//346/216/245/345/217/243/346/265/213/350/257/225/347/224/250/344/276/213//346/216/245/345/217/243/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/347/211/210.xlsx +0 -0
  41. package/config/seeds//346/265/213/350/257/225/346/250/241/346/235/277/345/272/223//350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/347/224/250/344/276/213//350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/346/235/277.md +37 -0
  42. package/config/seeds//347/237/245/350/257/206/345/272/223/347/256/241/347/220/206//345/212/237/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/347/274/226/345/206/231/350/247/204/350/214/203.md +174 -0
  43. package/dist/500.html +250 -0
  44. package/dist/_astro/Base.B9f_iFAZ.css +1 -0
  45. package/dist/_astro/Base.astro_astro_type_script_index_0_lang.lxEwQ1R4.js +1 -0
  46. package/dist/_astro/CaseGenerateApp.Br4uKjun.js +9 -0
  47. package/dist/_astro/CasesLibrary.CpPoVQ4P.js +1 -0
  48. package/dist/_astro/ChatApp.CYSPlSNP.js +258 -0
  49. package/dist/_astro/ClientRouter.astro_astro_type_script_index_0_lang.CO1cjG9V.js +1 -0
  50. package/dist/_astro/ConfirmDialog.BYz4HREM.js +1 -0
  51. package/dist/_astro/DocsFileBrowser.DkE26UTR.js +1 -0
  52. package/dist/_astro/ExcelFieldTags.B_XMwNNx.js +152 -0
  53. package/dist/_astro/KnowledgeLibrary.DZinlAWn.js +1 -0
  54. package/dist/_astro/NamePromptDialog.DGBlDH_k.js +1 -0
  55. package/dist/_astro/NavLibraries.EayBsg5g.js +1 -0
  56. package/dist/_astro/OverflowHint.lzmplP5j.js +1 -0
  57. package/dist/_astro/PluginsPage.BNzpPg2H.js +39 -0
  58. package/dist/_astro/PluginsPage.CY61glLU.js +1 -0
  59. package/dist/_astro/PromptsLibrary.DfrrCjs7.js +1 -0
  60. package/dist/_astro/RequirementsLibrary.Dt0Gj6Nr.js +1 -0
  61. package/dist/_astro/SearchableSelect.DMS2XmXc.js +1 -0
  62. package/dist/_astro/SelectDropdown.Dc7QaPbH.js +1 -0
  63. package/dist/_astro/SettingsDialog.DD-XOFEX.js +1 -0
  64. package/dist/_astro/SpaceSwitcher.Yy2w8MDF.js +7 -0
  65. package/dist/_astro/TemplatesLibrary.uK-SjK1z.js +1 -0
  66. package/dist/_astro/app-config.CpjKWnzM.js +1 -0
  67. package/dist/_astro/client.Be_SakrB.js +9 -0
  68. package/dist/_astro/i18n.BVvhz-vw.js +7 -0
  69. package/dist/_astro/jsx-runtime.BUXbF_vF.js +1 -0
  70. package/dist/_astro/lib.DJNDi_Ht.js +43 -0
  71. package/dist/_astro/listbox.DdDDDJ5Z.js +1 -0
  72. package/dist/_astro/llm.BZEzE0x2.js +7 -0
  73. package/dist/_astro/menu.CqkL87bV.js +1 -0
  74. package/dist/_astro/open-docs-in-session.D3JCwMWB.js +1 -0
  75. package/dist/_astro/page.Bx2KSkeL.js +1 -0
  76. package/dist/_astro/plugins.CrpY8UI9.js +1 -0
  77. package/dist/_astro/portal.C3KrUREL.js +5 -0
  78. package/dist/_astro/prefetch.GJhwodf8.js +1 -0
  79. package/dist/_astro/prompts-meta.F4wwkjUA.js +2 -0
  80. package/dist/_astro/react-dom.CqAxpHMt.js +1 -0
  81. package/dist/_astro/settings.BoQ0e0m1.js +2 -0
  82. package/dist/_astro/use-text-value.C0IDspmh.js +1 -0
  83. package/dist/_astro/use-tree-walker.oRTnhHS-.js +1 -0
  84. package/dist/_astro/useListAnim.CnbC_9MC.js +1 -0
  85. package/dist/apple-touch-icon.png +0 -0
  86. package/dist/brand-mark.png +0 -0
  87. package/dist/cases/generate/index.html +249 -0
  88. package/dist/cases/index.html +1 -0
  89. package/dist/cases/library/index.html +249 -0
  90. package/dist/changelog/index.html +1 -0
  91. package/dist/docs/changelog/index.html +364 -0
  92. package/dist/docs/index.html +1 -0
  93. package/dist/docs/install/index.html +312 -0
  94. package/dist/docs/manual/index.html +631 -0
  95. package/dist/favicon.png +0 -0
  96. package/dist/icon-192.png +0 -0
  97. package/dist/index.html +249 -0
  98. package/dist/knowledge/index.html +249 -0
  99. package/dist/knowledge//345/212/237/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/347/274/226/345/206/231/350/247/204/350/214/203/index.html +535 -0
  100. package/dist/plugins/index.html +249 -0
  101. package/dist/prompts/index.html +249 -0
  102. package/dist/raw/knowledge//345/212/237/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/347/274/226/345/206/231/350/247/204/350/214/203.md +168 -0
  103. package/dist/raw/templates//345/212/237/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212//345/212/237/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +58 -0
  104. package/dist/raw/templates//346/200/247/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212//346/200/247/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +54 -0
  105. package/dist/raw/templates//346/200/247/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213//346/200/247/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/346/235/277.md +35 -0
  106. package/dist/raw/templates//346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212//346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +48 -0
  107. package/dist/raw/templates//350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/347/224/250/344/276/213//350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/346/235/277.md +30 -0
  108. package/dist/requirements/index.html +249 -0
  109. package/dist/templates/c//345/212/237/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/index.html +1 -0
  110. package/dist/templates/c//345/212/237/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/index.html +1 -0
  111. package/dist/templates/c//346/200/247/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/index.html +1 -0
  112. package/dist/templates/c//346/200/247/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/index.html +1 -0
  113. package/dist/templates/c//346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212/index.html +1 -0
  114. package/dist/templates/c//346/216/245/345/217/243/346/265/213/350/257/225/347/224/250/344/276/213/index.html +1 -0
  115. package/dist/templates/c//350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/347/224/250/344/276/213/index.html +1 -0
  116. package/dist/templates/index.html +249 -0
  117. package/dist/templates//345/212/237/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212//345/212/237/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277/index.html +394 -0
  118. package/dist/templates//346/200/247/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212//346/200/247/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277/index.html +374 -0
  119. package/dist/templates//346/200/247/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213//346/200/247/350/203/275/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/346/235/277/index.html +336 -0
  120. package/dist/templates//346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212//346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277/index.html +363 -0
  121. package/dist/templates//350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/347/224/250/344/276/213//350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/346/235/277/index.html +338 -0
  122. package/docs//344/274/232/350/257/235/346/217/222/344/273/266.md +500 -0
  123. package/docs//345/205/250/345/261/200/346/217/222/344/273/266.md +1337 -0
  124. package/docs//345/256/211/350/243/205/346/211/213/345/206/214.md +110 -0
  125. package/docs//346/223/215/344/275/234/346/211/213/345/206/214.md +246 -0
  126. package/lh-plugins/lh-config.mjs +483 -0
  127. package/lh-plugins/lh-kb.mjs +206 -0
  128. package/lh-plugins/lh-memory.mjs +613 -0
  129. package/lh-plugins/lh-project-docs.mjs +875 -0
  130. package/lh-plugins/lh-resources.mjs +236 -0
  131. package/lh-plugins/session-log-deepseek.mjs +53 -0
  132. package/lh-plugins/session-persist.mjs +112 -0
  133. package/lh-plugins/session-query-sqlite.mjs +164 -0
  134. package/lh-plugins/storage-domain.mjs +82 -0
  135. package/package.json +124 -4
  136. package//347/251/272/351/227/264/346/261/240/.gitkeep +1 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,155 @@
1
+ # 版本日志
2
+
3
+ ## [0.1.1] - 2026-10-18
4
+
5
+ ### 变更
6
+
7
+ - 产品定位从「测试工程师工作台」调整为通用 AI 工作台:README 功能表收敛为 AI 工作台 / 会话记忆 / 插件库三项,用例生成、测试模板库、知识库管理等能力统一由插件库开启;`package.json` 的 `description` 同步
8
+ - `package.json` 的 `keywords` 去掉 `qa` / `测试` / `测试工作台` / `测试用例` / `用例生成`,补上 `ai-workbench` / `local-first` / `byok` / `plugins` / `knowledge-base` / `prompt-library` / `memory`,并加入中文关键词便于站内检索
9
+
10
+ ### 修复
11
+
12
+ - 纯静态部署(GitHub Pages)没有本地服务时,侧栏顶部不再留一块空白:改为显示不可点击的「工作区不可用」占位;探测完成前保留骨架,避免首帧闪一下再变回空间名
13
+
14
+ ## [0.1.0] - 2026-10-17
15
+
16
+ Lantern Harness 首个版本:AI 工作台。一份进程里隔离多套项目数据,内容库、插件、会话记忆与本地工具开箱可用。
17
+
18
+ ### 新增
19
+
20
+ #### 安装与分发
21
+
22
+ - 一条命令安装:`npx lantern-harness`,运行后自动完成全局安装并得到全局命令 `lantern`
23
+ - npm 一体服务:全局命令 `lantern`(`-y` / `--dir` / `--pick` 选择数据目录)
24
+ - 升级与卸载:`lantern install [版本]`、`lantern uninstall`
25
+ - 源码开发:`pnpm dev`(含本地落盘 API,固定 `127.0.0.1:4321`)、`pnpm start`、静态 `preview`
26
+ - CLI:`ask`(可 `--tools`)、`rpc`(stdio JSON-RPC)、`acp`(轻量 ACP 子集);`space list` / `add` / `use` / `rename` / `copy` / `rm` / `export` / `import` / `discover`
27
+ - `lantern init`:交互选择数据空间(1 系统文件夹选择器 / 2 当前目录 / 3 自定义路径),写入本机配置;选中的文件夹里直接放置各空间(与「公共空间」同级),不会多出「空间池」这一层
28
+ - `lantern web` / `stop` / `restart` / `status` / `open`:后台启停与状态,默认使用 init 记住的数据空间;数据空间被移动 / 重命名 / 删除时提示重新初始化
29
+ - 排障与维护:`path` / `config` / `logs` / `doctor` / `help` / `version` / `list` / `install` / `uninstall` / `wipe`
30
+ - 帮助中心:操作手册 / 安装手册 / 版本日志三页,带侧边目录、上下页与文件浏览器;安装手册独立成篇(`docs/安装手册.md`)
31
+ - GitHub Pages 静态部署(`withastro/action`)
32
+ - 操作手册:`docs/操作手册.md`;规格:`docs/会话插件.md`、`docs/全局插件.md`
33
+ - 命令入口:`bin` 仅提供 `lantern`(`cli/lantern.mjs`);`npx lantern-harness` 会自动安装全局命令
34
+ - 本机配置落在 `~/.config/lantern-harness`(Windows `%APPDATA%/lantern-harness`);旧安装的 `ai-testbench` 目录首次启动自动复制过来(原目录保留作备份),已有数据空间与模型配置无需手动迁移
35
+
36
+ #### 多空间
37
+
38
+ - 数据空间:每个空间的需求 / 用例 / 提示词 / 知识库 / 模板、会话与配置互不影响;内建「公共空间」(标签「默认」)不可重命名或删除
39
+ - 侧栏空间切换器;「空间管理」支持新建、导入 zip、导出内容库 / 完整备份、复制、重命名、扫描纳入、移出列表、删除数据
40
+ - 「体积」按需统计各空间磁盘占用,结果以徽章显示在名称旁
41
+ - 新建空间时可填写提示词要求并生成「默认提示词」,写入该空间的提示词管理(不可删除);创建时必须填写该提示词
42
+ - 源码仓库 / npm 包自带「空间池」容器,避免与 `src` / `cli` 混放;界面路径隐去该段
43
+ - 空间池判定改用 CLI 新入口(`cli/lantern.mjs`,兼容旧 `cli/tbench.mjs`),避免包根被当成普通数据目录、把空间摊平到仓库根
44
+ - 同名空间合并时逐条目搬运且不覆盖;若源目录只剩撞名副本则整份删掉,仓库根不再残留重复的「公共空间」
45
+ - 种子内容放在 `config/seeds/`,插件启用、目录第一次出现时写入(默认提示词、用例编写规范、测试模板)
46
+ - 内容目录按插件开关懒建:全新数据空间只有 `.lantern/` 元数据,启用对应内容库插件后才出现 `用例管理/`、`知识库管理/` 等目录并补种子;旧版本铺出的空壳目录(只含 `.gitkeep`)启动时自动收起,有真实文件的目录不动
47
+ - 「扫描文件夹」把不是数据空间的普通文件夹列为候选,勾选确认后才纳入列表;纳入只登记、不写 `.lantern/space.json`、不铺目录不播种子(切换时才补运行时配置);`lantern space discover --adopt <文件夹>` 等价操作
48
+ - 空间元数据收到隐藏目录 `.lantern/`;文件夹内带清单,整体拷贝后可扫描重新纳入
49
+ - 隐藏元数据目录由 `.tb/` 改为 `.lantern/`(启动时自动搬迁,旧目录仍可识别);本机配置 / 会话 / 记忆从空间根下的 `.local/` 迁入,不覆盖已有文件
50
+ - 数据空间内容目录改为中文:`需求文档库` / `用例管理` / `提示词管理` / `知识库管理` / `测试模板库`;旧的英文目录启动时自动改名,目标已存在则不覆盖
51
+ - 提示词管理 / 知识库按空间隔离:新建空间只带「默认提示词」,不从公共空间同步其它文件;创建后自动切换到该空间
52
+ - 文档库「创建时间」按本空间里该文件的创建时间显示,不再沿用种子文件的拷贝时间
53
+ - 整个数据目录改名 / 搬移后,按空间清单身份自动重定位注册表路径,不再误报「空间目录不存在」;空间切换器里的长路径错误提示自动换行
54
+ - 插件页手动关闭的开关记在空间自己的本机状态里,内容目录自动识别不会把它重新打开;菜单全部关闭时侧栏占位骨架不再残留
55
+
56
+ #### 我的工作台
57
+
58
+ - BYOK 直连 OpenAI 兼容接口(DeepSeek / 通义千问 / OpenAI / 自定义);Key 仅存本机
59
+ - 模型提供商与 API Key 为本机全局(`~/.config/lantern-harness/models.json`),切换空间不再换一套模型
60
+ - 流式对话;思索 UI:`思考中…` / `正在分析请求` / `思考完成`;对话时间线折叠展示思考与工具步骤
61
+ - 会话统计(模型用时、工具用时、TTFT、TPS);用量展示;模型与 reasoning effort 选择;LLM 自动重试(429 / 5xx / 网络,最多 3 次)
62
+ - 访问权限:仅可查看 / 工作区内修改 / 完全权限,按会话独立
63
+ - 设置页的「权限」只作新会话默认值,不再回头改写已有会话;会话内权限菜单只改当前会话
64
+ - 权限显示:刷新后按会话自身记录恢复(不再回落成「仅可查看」)
65
+ - 附件:添加文件(多格式含 Excel / Word);粘贴图片;粘贴本地文件 / 路径 → 路径引用或附件卡片
66
+ - 斜杠与引用:`/` 插件、`@` 引用知识库 / 模板 / 工作区文档;输入栏「+」添加面板
67
+ - 多会话侧栏:置顶、重命名、归档、软删除、导出会话 JSON;空会话(无消息)切换时丢弃;LLM 短标题
68
+ - 多工作区:侧栏文件夹树;输入栏切换 / 添加本地文件夹
69
+ - 服务端会话回合 `/__tb_sessions/runs`:刷新 / 切页可重连;手动停止展示「已停止」
70
+ - DeepSeek DSML 工具调用解析加固,避免标签泄漏
71
+ - 思考模式多轮回传 `reasoning_content`,避免工具续轮 HTTP 400
72
+ - 流式回复不再静默吞掉错误:SSE 内 `error` 事件、`finish_reason: length`(输出被截断)、缺少结束标记的断流都会提示原因
73
+ - 工具轮上限由 5 提高到 100(浏览器流与服务端回合一致):以前调研类任务在 5 轮就被收口,看起来像「模型自动终止」
74
+ - 工具轮耗尽时会明确要求模型给出结论,不再让它继续输出工具调用标签后被过滤成空回复
75
+ - 「回合」Tab:轮次大纲;「从此处继续」截断到该轮并自动续写
76
+ - 会话搜索(含 sqlite 同步查询)
77
+ - 「在会话中打开」(用例 / 提示词 / 知识库):新建会话并挂路径卡片(不预填正文)
78
+ - 空会话居中欢迎(标志语「提灯的人不问路」);无消息时隐藏标题与「对话 / 回合 / 记忆」Tab
79
+ - 输入区随屏宽适配(最大约 1024px),默认高度与自动长高上限加大
80
+ - 内容区宽度按屏宽适配(大屏下不再过窄);配置项与文档页签切换加横向滑动过渡
81
+ - 主题:深色主题下切换路由不再闪白;插件页 Tab 补齐深色适配;设置弹层盖住侧栏展开 / 收起按钮
82
+ - 浏览器缓存按空间分键,切换后不会把上一空间的会话或列表画进新空间
83
+ - 悬浮气泡点击后立即收起,悬停超过约 3 秒也自动消失,不再停留在按钮上
84
+
85
+ #### 提问卡片
86
+
87
+ - `ask_user_question` 改为输入框上方的单题卡片(不占满屏):显示 `第 N 步 / 共 N 步`,可收起为标题行、可逐题翻页
88
+ - 单选题点选后自动进入下一步,多选停留本步;选项带序号,「(推荐)」收成徽标
89
+ - 支持直接输入序号作答(`1`、`1,3`、`第2`),也可写自由回答;非序号按文本回传模型
90
+ - 每题可「跳过」;关闭卡片即跳过剩余题,跳过前必须填写原因
91
+ - 回传模型的内容同时包含结构化 `answers` 与中文 `summary`,并明确「跳过 ≠ 批准实施」,避免按默认假设直接改代码
92
+
93
+ #### 内容库
94
+
95
+ - 用例管理、知识库管理、提示词管理、需求文档库、测试模板库;目录名与界面名称一致
96
+ - 需求文档库供生成用例时引用对照;测试模板库存放测试方案 / 用例 / 报告等模板
97
+ - 文件夹重命名与删除(目录非空时拦截并提示文件数)、文件重命名与双击打开、每行显示文件数、整树展开收起
98
+ - 用例管理 / 提示词管理 / 知识库管理改为平铺列表,卡片圆角与高度统一,左右分栏固定高度内部滚动
99
+ - 分页支持选择每页条数并记住;知识库管理支持按文件名 / 路径搜索与按修改时间 / 文件名排序
100
+ - 「生成用例」「生成提示词」「生成知识库」入口;生成测试用例侧栏可引用需求文档与测试模板
101
+ - 生成类抽屉:类型 / 分类删除改为行内二次确认
102
+ - 文档库单层目录列举上限由 800 提升至 5000
103
+ - 提示词管理 / 知识库各带一份种子内容入库(默认提示词、功能测试用例编写规范)
104
+ - 默认系统提示词改为通用工作台口吻(不再默认自居测试助手)
105
+
106
+ #### 插件
107
+
108
+ - 我的插件:会话默认 / 全局默认 / 扩展(可开关);网页搜索为会话默认(`web_search` / `web_fetch`);插件页铺满内容区
109
+ - 扩展插件按「内容库 / 生成能力 / 记忆与检索 / 开发工具」分类展示,标题带数量且可折叠;分类来自插件注册表的 `category` 字段
110
+ - 内容库 5 个:用例管理、提示词管理、知识库管理、需求文档库、测试模板库;生成能力 3 个:生成测试用例、生成提示词、生成知识库;记忆与检索 2 个:知识库检索、会话记忆;开发工具 1 个:插件开发
111
+ - 新建空间的插件全部默认关闭(含会话记忆 / 插件开发 / 知识库检索),侧栏默认只有「我的工作台」「帮助中心」,其余入口随插件开关出现;已有空间保持原开关
112
+ - 内容管理改为可开关的扩展插件:关闭后侧栏入口与对应「生成」入口一并隐藏,磁盘文件保留
113
+ - 铺骨架时播种的种子文件不触发插件自动开启;首次识别到用户放进空间的内容目录时自动打开对应管理插件,之后尊重手动关闭
114
+ - 未启用「知识库检索」时,「@」菜单只列工作区文件,并提示启用后才能引用知识库 / 测试模板库文档
115
+ - 工作台「/」与「+」的扩展插件列表只显示已启用项
116
+ - 「插件开发」:入口在 `+` 弹窗与 `/` 菜单,默认关闭,激活后是输入区胶囊;固定提示词先只读评估并用选择题确认形态 / 范围 / 命名入口 / 默认开关,用户明确确认后才改代码,完成的插件并入「扩展插件」
117
+ - 由「插件开发」新增的插件默认关闭(`defaultEnabled: false`,也不写进新建空间默认开启项),需在「我的插件」手动开启
118
+ - 移除「插件管理」入口与页面:插件开发已覆盖能力扩展,我的插件页只保留列表与开关
119
+ - 插件开发会话自动切到 harness 源码根并保持「工作区内修改」:`src / lh-plugins / config / docs` 都能直接改,`node_modules`、`dist`、`.git` 仍禁写;只对包根放行「空间上级目录」,其它上级目录仍禁止,且不会在侧栏「工作区」里多出一条
120
+ - 在已有内容的会话里进入插件开发不再自动新建会话(曾导致重复会话、像输入被吞)
121
+ - 侧栏可创建菜单分组(勾选条目,类似邮箱文件夹),默认不预置分组
122
+ - 侧栏菜单可拖拽排序并记住顺序;删除分组后组内项平铺到侧栏底部
123
+ - 分组落成空间里的真实文件夹:`<空间>/<分组名>/.group.json` 记录分组 id 与成员;组内菜单的内容目录一并搬进分组文件夹,取消分组搬回空间根,只靠目录结构也能还原
124
+ - 菜单行内三点按钮:顶层项可「选择分组 / 添加到分组 / 排序 / 选择图标」,分组内项为「取消分组 / 排序 / 选择图标」;分组行仍用功能图标(添加子分组 / 编辑分组)
125
+ - 排序弹层按入口决定范围:从分组内菜单打开时只列该分组的菜单,从顶层菜单打开时排侧栏顺序;移除侧栏底部「排序」入口
126
+ - 创建 / 编辑分组(含添加子分组)时只列出未加入其它分组的菜单
127
+ - 左侧导航「文档库」分组的收起状态按本机记忆,切换路由不再自动展开
128
+ - 侧栏每个菜单项都有图标,可在三点菜单的「选择图标」里更换
129
+ - 本地工具:`fs_*`、`fs_glob` / `fs_grep`、bash / pwsh(含 session 与 jobs)、`present`、office→pdf(有 LibreOffice 时)
130
+ - 注入:`agent-instructions`(AGENTS.md / CLAUDE.md)、`time-context`
131
+ - 交互:`todo_write`、`ask_user_question`、`plan-mode` / `submit_plan`
132
+ - 目标 / 定时 / 子代理 / workflow;软沙箱;spill 超大结果落盘;skill 加载
133
+ - 工作区变更追踪、依赖探测、子代理模型可选
134
+ - 全局提示气泡改为自定义组件,移除浏览器原生 `title` 悬停提示;仅文本被省略时才显示
135
+ - 全局提示气泡在弹窗关闭、锚点卸载 / 隐藏、锚点滚出视口、指针因布局变化离开锚点、切换窗口或标签页、指针移出窗口时都会自动收起;点击与 Escape 也可关闭,不再停留在页面上
136
+
137
+ #### 会话记忆
138
+
139
+ - 存储:`.lantern/local/memories/`(USER / MEMORY / KEY / project / daily + SUGGESTIONS)
140
+ - 工作台「记忆」Tab:指南、待确认记忆建议(角标)、项目日志、项目关键记忆 KEY.md、长期记忆 MEMORY.md、全局规则(文件卡片本地打开)、归档、设置
141
+ - 重要写入经待确认采纳后注入;项目日志可直写不注入
142
+
143
+ #### 工程与质量
144
+
145
+ - 产品名称改为 **Lantern Harness**,GitHub 仓库为 `lantern-harness`,npm 包名 `lantern-harness`
146
+ - 仓库内模块前缀统一为 `lh-`:`lh-plugins/`、`lh-*.mjs`(早期用过 `tb-` / `lb-`);仓库根不再放置内容库目录
147
+ - README 同步安装命令、常用命令与源码启动(含 clone / build / preview);插件规格与操作手册同步更新;npm 补充中英文 keywords
148
+ - ESLint(`src`)+ Prettier;`simple-git-hooks` + `lint-staged`
149
+ - 依赖:Astro 7 + Vite 8(Node 要求提升到 22.22+);`xlsx` 换成 SheetJS 官方 CDN 版 0.20.3,清理 npm 版 xlsx 的原型污染 / ReDoS 告警
150
+ - 轻量自测:`pnpm test`;类型检查 `pnpm typecheck`
151
+ - 开发服忽略打开内容库目录与空间元数据目录导致的整页热更新
152
+ - 文档与 CLI 统一 pnpm 优先:安装 / 卸载 / 版本列表优先调用 pnpm(未安装则回退 npm);README、安装手册、操作手册与贡献约定的开发命令改为 pnpm
153
+
154
+ [0.1.1]: https://www.npmjs.com/package/lantern-harness/v/0.1.1
155
+ [0.1.0]: https://www.npmjs.com/package/lantern-harness/v/0.1.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 yychuiyan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,108 @@
1
- # Temporary Holding Version
1
+ # Lantern Harness
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ > 提灯的人不问路。
4
+
5
+ AI 工作台:对话与插件工具、需求 / 用例 / 知识 / 提示词内容库、模板库、会话记忆,数据全部留在本机。
6
+
7
+ 仓库:[yychuiyan/lantern-harness](https://github.com/yychuiyan/lantern-harness) · 文档:[lantern.yychuiyan.com](https://lantern.yychuiyan.com/) · npm 包 `lantern-harness`,命令 `lantern` · [变更日志](https://lantern.yychuiyan.com/docs/changelog/)
8
+
9
+ ## 功能
10
+
11
+ | 模块 | 说明 |
12
+ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
13
+ | AI 工作台 | 多轮对话,流式输出,BYOK(自带密钥)直连模型;默认提示词按空间可改,可按插件挂载工具 |
14
+ | 会话记忆 | 五轨记忆(用户档案 / 全局事实 / 项目关键 / 项目日志 / 每日),待确认队列与工作台「记忆」Tab |
15
+ | 插件库 | 内置能力开关:内容库(需求 / 用例 / 提示词 / 知识库 / 模板)、生成能力、记忆与检索、开发工具;开启后侧栏出现对应入口,也可让模型推荐能力建议 |
16
+
17
+ 模型配置(BYOK)、内容目录约定、插件用法见 **[操作手册](https://lantern.yychuiyan.com/docs/manual/)**。
18
+
19
+ ## 快速开始
20
+
21
+ 两种用法任选其一。装好后都在侧栏「设置」配置 BYOK;默认打开 `http://127.0.0.1:4321/`。
22
+
23
+ ### 方式一:免安装方式(推荐)
24
+
25
+ 1、 安装:
26
+
27
+ ```bash
28
+ npx lantern-harness
29
+ ```
30
+
31
+ 执行后会安装全局短命令 `lantern`,之后用 `lantern init` / `lantern web` 操作即可。升级用 `lantern install`。
32
+
33
+ 2、 初始化数据空间(首次必做;可再次执行以更换数据空间):
34
+
35
+ ```bash
36
+ lantern init
37
+ ```
38
+
39
+ 按序号选择数据空间:
40
+
41
+ ```text
42
+ 选择数据目录:
43
+ 1) 打开系统文件夹选择器
44
+ 2) 当前目录(当前终端所在位置)
45
+ 3) 自定义路径(手输)
46
+ 请输入 1 / 2 / 3(默认 1):
47
+ ```
48
+
49
+ 3、 常用命令:
50
+
51
+ ```bash
52
+ lantern init # 选择并记住数据空间
53
+ lantern web # 启动本地 Web 服务
54
+ lantern stop # 停止服务
55
+ lantern restart # 重启服务
56
+ lantern status # 运行状态、端口、数据空间
57
+ lantern open # 在浏览器中打开工作台
58
+ lantern path # 显示当前数据空间路径
59
+ lantern config # 显示配置文件地址
60
+ lantern logs # 查看服务日志
61
+ lantern doctor # 检查运行环境与配置是否正常
62
+ lantern help # 显示操作命令列表
63
+ lantern version # 显示当前版本号
64
+ lantern list # 显示可安装的版本列表
65
+ lantern install # 安装/更新到最新版本
66
+ lantern install 0.1.x # 安装/更新到指定版本
67
+ lantern uninstall # 卸载本机 lantern 命令(保留数据空间)
68
+ lantern wipe # 删除当前数据空间(需确认;不可恢复)
69
+ lantern space list # 列出全部数据空间与当前项
70
+ lantern space add # 新建数据空间(--use 顺带设为当前)
71
+ lantern space use # 切换当前数据空间
72
+ lantern ask # 无界面单轮问答,lantern ask <提示词>
73
+ lantern rpc # 以 stdio JSON-RPC 暴露本地问答能力
74
+ lantern acp # 以 ACP 子集供外部编排驱动无 UI Agent
75
+ ```
76
+
77
+ 4、 插件默认值:
78
+
79
+ 新建空间的插件全部默认关闭,侧栏只有「我的工作台」「帮助中心」。所有扩展插件(内容库、生成能力、知识库检索、会话记忆、插件开发)都要在「插件」页按分类手动开启;由「插件开发」新增的插件同样默认关闭。
80
+
81
+ ### 方式二:源码启动
82
+
83
+ 适合改代码或二次开发。
84
+
85
+ 1、 克隆仓库到本地:
86
+
87
+ ```bash
88
+ git clone https://github.com/yychuiyan/lantern-harness.git
89
+ cd lantern-harness
90
+ ```
91
+
92
+ 2、 开发模式(热更新,含本地落盘 API):
93
+
94
+ ```bash
95
+ pnpm install
96
+ pnpm dev
97
+ ```
98
+
99
+ 3、 预览静态页(需先打包;无本地落盘):
100
+
101
+ ```bash
102
+ pnpm build
103
+ pnpm preview
104
+ ```
105
+
106
+ ## 许可证
107
+
108
+ [MIT](https://github.com/yychuiyan/lantern-harness/blob/main/LICENSE)
@@ -0,0 +1,21 @@
1
+ # 会话内置 Runner
2
+
3
+ 对应插件页「会话插件」里已落地的本机能力(默认开启、无扩展开关)。
4
+
5
+ | 文件 | 会话能力 | HTTP 前缀 |
6
+ | --- | --- | --- |
7
+ | `lh-fs.mjs` | `tool-fs` / `tool-working-directory` / `tool-fs-search` / `tool-skill` / `agent-instructions` / `present`(open)等 | `/__tb_fs` |
8
+ | `skill-fs.mjs` | `tool-skill` / `skill`(SKILL.md 发现与加载) | (被 lh-fs 调用) |
9
+ | `fs-observation-policy.mjs` | `fs-observation-policy`(跳过目录 / 读写与搜索上限) | (被 lh-fs 调用;health.observation) |
10
+ | `workspace-deps.mjs` | `workspace-dependencies` | `/__tb_fs/workspace-dependencies` |
11
+ | `office-to-pdf.mjs` | `office-to-pdf`(LibreOffice;否则 .extracted.md) | `/__tb_fs/office-to-pdf` |
12
+ | `lh-bash.mjs` | `tool-bash` / `tool-pwsh` / `tool-jobs` / 持久会话 | `/__tb_bash` · `/__tb_pwsh` · `*/session/*` |
13
+ | `sandbox-policy.mjs` | 软沙箱策略(黑名单 + 精简 env) | (被 lh-bash 调用) |
14
+ | `bash-session.mjs` | 持久 bash(node-pty 优先 / 管道回退) | (被 lh-bash 调用) |
15
+ | `pwsh-session.mjs` | 持久 pwsh(同上) | (被 lh-bash 调用) |
16
+ | `lh-web.mjs` | `tool-web` | `/__tb_web` |
17
+ | `session-runs.mjs` | 服务端会话回合(续跑 / 停止) | `/__tb_sessions/runs` |
18
+ | `lh-schedule.mjs` | 主机级 `schedule` / 会话 `tool-schedule` 落盘与 tick | `/__tb_schedule` |
19
+ | `lh-spill.mjs` | `spill-local` 过大内容落盘 | `/__tb_spill` |
20
+
21
+ 产品扩展与文档库中间件仍在仓库根目录 `lh-plugins/`(如 `lh-memory`、`lh-kb`、`lh-config`、`lh-project-docs`)。