chore: land tree view-state, vault, Pi module split, and repo hygiene
Persist PageTree expand state via control-plane view-state and align chevron/DOM with restored expansion; keep Sidex-style shallow page-tree scan and drop the unused recursive scanner that only added cargo noise. Add password vault workbench routes/runtime/skill/CLI, split page_ai_pi into a module package, and retire Hermes/ACP/OpenHub recycle + root harness evidence from the index while gitignoring recycle and local diag dumps. Archive superseded design/bugs docs under old/, point architecture at ARCHITECTURE.md, and refresh smokes for Pi S1–S7, vault, and editor regressions so the working tree can stay clean.
This commit is contained in:
@@ -38,7 +38,7 @@ const CAPABILITY_PACKS: &[MnoteCapabilityPack] = &[
|
||||
MnoteCapabilityPack {
|
||||
id: "mnote-knowledge-rag",
|
||||
title: "知识库问答",
|
||||
description: "通过当前知识库 provider 检索多本书、论文、PDF 和附件,并返回可回跳来源;默认 provider 是 RAGFlow。",
|
||||
description: "通过 LightRAG 知识库检索多本书、论文、PDF 和附件,并返回可回跳来源;默认 provider 是 LightRAG。",
|
||||
category: "knowledge",
|
||||
agent_ids: &["hermes", "reasonix"],
|
||||
read_only: true,
|
||||
@@ -128,6 +128,26 @@ const CAPABILITY_PACKS: &[MnoteCapabilityPack] = &[
|
||||
],
|
||||
content: include_str!("../../../../../skills/mnote-mindmap/SKILL.md"),
|
||||
},
|
||||
MnoteCapabilityPack {
|
||||
id: "mnote-vault",
|
||||
title: "密码箱 / AI 密码本",
|
||||
description: "密码箱与 AI 密码本使用约定:禁止通用文件工具读取 .mnote/vault;凭证经 vault API / 共享到 AI 密码本。",
|
||||
category: "security",
|
||||
agent_ids: &["hermes", "reasonix"],
|
||||
read_only: true,
|
||||
requires_context_refs: &["folder"],
|
||||
tool_names: &[
|
||||
"mnote.context.snapshot",
|
||||
"mnote.context.resolve_target",
|
||||
// P1 vault tools (when registered); skill remains discoverable before tools land.
|
||||
"mnote.vault.list",
|
||||
"mnote.vault.get",
|
||||
"mnote.vault.resolve",
|
||||
"mnote.vault.login",
|
||||
"mnote.vault.session",
|
||||
],
|
||||
content: include_str!("../../../../../skills/mnote-vault/SKILL.md"),
|
||||
},
|
||||
MnoteCapabilityPack {
|
||||
id: "mnote-chat-only",
|
||||
title: "纯聊天",
|
||||
@@ -361,6 +381,32 @@ mod tests {
|
||||
.any(|name| name == "mnote.mindmap.create_from_outline"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skill_registry_exposes_vault_skill_to_agents() {
|
||||
let reasonix_skills = skill_summaries_for_agent(Some("reasonix"));
|
||||
let hermes_skills = skill_summaries_for_agent(Some("hermes"));
|
||||
let skill = reasonix_skills
|
||||
.iter()
|
||||
.find(|skill| skill["id"] == "mnote-vault")
|
||||
.expect("reasonix should see vault skill");
|
||||
assert_eq!(skill["readOnly"], true);
|
||||
assert_eq!(skill["category"], "security");
|
||||
assert!(skill["toolNames"]
|
||||
.as_array()
|
||||
.expect("tool names")
|
||||
.iter()
|
||||
.any(|name| name == "mnote.vault.resolve"));
|
||||
assert!(hermes_skills
|
||||
.iter()
|
||||
.any(|skill| skill["id"] == "mnote-vault"));
|
||||
assert!(find_skill("mnote-vault", Some("chat_only")).is_none());
|
||||
let body = find_skill("mnote-vault", Some("hermes"))
|
||||
.expect("hermes can read vault skill")
|
||||
.content;
|
||||
assert!(body.contains(".mnote/vault"));
|
||||
assert!(body.contains("共享到 AI") || body.contains("AI 密码本"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skill_registry_retired_local_index_in_favor_of_lightrag() {
|
||||
let hermes_skills = skill_summaries_for_agent(Some("hermes"));
|
||||
|
||||
Reference in New Issue
Block a user