协作办公
需要在多个 Obsidian wiki vault…
当你要在多个 Obsidian wiki vault 之间切换、列出/查看/新建配置,或确认当前默认 vault 时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要在多个 Obsidian wiki 特定
解决思路
- 每次调用时先解析全局配置目录 CONFIG_DIR:如果 `$HOME/.obsidian-wiki` 是目录,且 `${XDG_CONFIG_HOME:-$HOME/.config}/obsidian-wiki` 不存在,则使用 `$HOME/.obsidian-wiki`;否则使用 `${XDG_CONFIG_HOME:-$HOME/.config}/obsidian-wiki`。可执行:`CONFIG_DIR="$( [[ -d "$HOME/.obsidian-wiki" && ! -e "${XDG_CONFIG_HOME:-$HOME/.config}/obsidian-wiki" ]] && echo "$HOME/.obsidian-wiki" || echo "${XDG_CONFIG_HOME:-$HOME/.config}/obsidian-wiki" )"`。
- 将每个 vault 视为 `$CONFIG_DIR/config.<name>` 下的完整配置文件;当前激活的 vault 由 `$CONFIG_DIR/config` 符号链接指向哪个文件决定。
- 切换 vault 时,重新指向 `$CONFIG_DIR/config` 符号链接。
- 区分持久切换与内联覆盖:`/wiki-switch <name>` 改变持久默认,影响未来所有请求;`@name` 仅对单次请求覆盖,不改变默认,且由 `llm-wiki/SKILL.md` 的 Config Resolution Protocol 处理,不由本 skill 处理。
- 按调用参数分派:`/wiki-switch <name>` 执行 Switch;`/wiki-switch list` 执行 List;`/wiki-switch show [name]` 执行 Show;`/wiki-switch new <name>` 执行 New;`/wiki-switch` 无参数按 List 处理;`@<name> …` 不归本 skill 管,由 Config Resolution Protocol 为单次调用解析 `$CONFIG_DIR/config.<name>` 且不重指符号链接。
- Switch 时先验证 `$CONFIG_DIR/config.<name>` 存在;若不存在,告诉用户该 vault 不存在,并列出可用 vault(执行 List)。
- 执行:`ln -sf "$CONFIG_DIR/config.<name>" "$CONFIG_DIR/config"`。
- 从新激活的配置中读取 `OBSIDIAN_VAULT_PATH`。
- 向用户确认,格式为:`Switched to vault: <name>` 和 `Vault path: <value of OBSIDIAN_VAULT_PATH from the config>`。
- List 时查找所有匹配 `$CONFIG_DIR/config.*` 的文件,排除 `config` 本身(它是符号链接)。
- 解析当前符号链接目标:`readlink "$CONFIG_DIR/config"`。
- 对每个配置文件读取第一条非空注释行(以 `#` 开头的行)作为该 vault 的人类可读描述;若没有注释,则回退使用文件名后缀作为标签。
- 展示列表,例如:`Vaults:`、` personal My personal research wiki ← active`、` work Work projects wiki`;并用 `← active` 标记当前激活项;如果符号链接损坏或 `config` 不存在,显示 `(none active)`。
- Show 时,如果给了 name,读取 `$CONFIG_DIR/config.<name>`。
- Show 时,如果没给 name,读取 `$CONFIG_DIR/config`(当前激活 vault)。
- 如果文件不存在,告诉用户并列出可用项。
- 原样打印文件内容;对包含 `API_KEY` 或 `SECRET` 的行做脱敏,值显示为 `***`。
- New 时先检查 `$CONFIG_DIR/config.<name>` 不存在;若已存在则中止。
- 复制当前激活配置:`cp "$CONFIG_DIR/config" "$CONFIG_DIR/config.<name>"`。
- 读取复制后的配置;配置文件使用 `# --- Section name ---` 注释头把字段分组,例如 `# --- Vault-specific ---`、`# --- Vault-independent ---`、`# --- Secrets ---`;根据这些 section 决定询问内容。
- 对标记为 "vault-specific"、"paths" 或类似 section 的字段,向用户询问新值。
- 对标记为 "vault-independent"、"global"、"shared" 或类似 section 的字段,保持原样复制,不改。
- 对标记为 "secrets" 的字段,询问新 vault 使用相同凭据还是不同凭据。
- 如果没有 section 头,则展示所有字段,让用户决定改哪些。
- 向用户询问 vault-specific 字段的更新值;把当前值作为可见默认值,用户只需提供不同的部分。
- 将更新后的值写入 `$CONFIG_DIR/config.<name>`。
- 更新顶部注释行以描述新 vault,例如 `# Obsidian Wiki — <name> vault`。
- 确认输出:`Created: $CONFIG_DIR/config.<name>`、`Run /wiki-switch <name> to activate it, then run wiki-setup to initialise the new vault.`。
- 不要自动切换;让用户决定何时激活。
适用边界 · 注意事项
- 当只想对单次请求访问另一个 vault、不想改变持久默认时,不要用本 skill;使用请求内的 `@name` 覆盖,它由 Config Resolution Protocol 处理。
- 不适用于非 Obsidian wiki 的配置切换,或没有按 `$CONFIG_DIR/config.<name>` 加 `$CONFIG_DIR/config` 符号链接组织的 vault 配置。