Token导航 LogoToken导航TokenDH.com
研究检索操作浏览器clawhub未标认证来源可访问clear审计通过

fable-dev寓言开发

Agent Skill

fable-dev 用于查找、检索和筛选相关信息,适合在 OpenClaw 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

3,272

周安装

135

GitHub Stars

公开资料未说明

下载量

1,069
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:fable-dev(寓言开发)
来源仓库:https://github.com/anoldgh/fable-dev
安装命令:
openclaw skills install fable-dev
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install fable-dev

简介

用于处理 Fable 代码库的开发和维护。

  • 适合修改、调试或扩展 Electron + React 应用。
  • 覆盖架构设计、编码规范和构建流程。fable-dev 属于研究检索类 Skill,可作为该场景下的辅助能力补充。
  • 使用时需确认项目结构和依赖版本兼容性。
  • 安装前建议检查维护状态和是否会触发本地命令执行。

SKILL.md

name
fable-dev
description
>

Fable Development Guide

Fable is a creative-writing desktop app: Electron + React 19 + Vite + TanStack Query + Plate.js frontend, Node.js + SQLite + custom indexed filesystem backend, Google ADK for AI features.

Critical Invariant

Every file can have children, not just folders. FileNode.children exists on ANY node regardless of category. A text document can contain child documents (chapters containing scenes). Never assume only folders have children.

parentId and siblingIndex are computed by buildFileTree() at runtime — never persist them.

Where Does My Code Go?

digraph code_placement {
    rankdir=TB;
    node [shape=diamond];
    "Used by both\
frontend & backend?" -> "src/shared/" [label="yes"];
    "Used by both\
frontend & backend?" -> "Runs in\
Node.js only?" [label="no"];
    "Runs in\
Node.js only?" -> "IPC handler?" [label="yes"];
    "Runs in\
Node.js only?" -> "React component\
or hook?" [label="no"];
    "IPC handler?" -> "src/backend/handlers/" [label="yes"];
    "IPC handler?" -> "src/backend/services/" [label="no"];
    "React component\
or hook?" -> "src/frontend/components/" [label="component"];
    "React component\
or hook?" -> "src/frontend/hooks/" [label="hook"];
    "React component\
or hook?" -> "src/frontend/services/" [label="service/singleton"];

    node [shape=box];
    "src/shared/" [style=filled, fillcolor="#e8f5e9"];
    "src/backend/handlers/" [style=filled, fillcolor="#e3f2fd"];
    "src/backend/services/" [style=filled, fillcolor="#e3f2fd"];
    "src/frontend/components/" [style=filled, fillcolor="#fff3e0"];
    "src/frontend/hooks/" [style=filled, fillcolor="#fff3e0"];
    "src/frontend/services/" [style=filled, fillcolor="#fff3e0"];
}

Shared code constraint: src/shared/ must NOT import browser APIs, Node.js APIs, or React.

How Do I Access / Mutate Data?

digraph data_access {
    rankdir=TB;
    node [shape=diamond];
    "Inside React\
component?" -> "Use query hooks" [label="yes"];
    "Inside React\
component?" -> "Use queryService\
singleton" [label="no\
(command, service)"];

    "Need to mutate\
file tree?" -> "queryService.mutations.*\
(optimistic updates)" [label="always"];
    "Need to read\
file content?" -> "readFileContent()\
helper (cache-first)" [label="preferred"];

    node [shape=box];
    "Use query hooks" [style=filled, fillcolor="#e8f5e9"];
    "Use queryService\
singleton" [style=filled, fillcolor="#e8f5e9"];
    "queryService.mutations.*\
(optimistic updates)" [style=filled, fillcolor="#fff3e0"];
    "readFileContent()\
helper (cache-first)" [style=filled, fillcolor="#fff3e0"];
}

**Never call window.api.* directly for tree mutations** — always go through queryService.mutations.* which handles optimistic updates and rollback.

Key Directories

DirectoryWhat to find
src/types.tsAll shared types (FileNode, FileMetadata, ChatSession, Agent, etc.)
src/shared/Code shared by both processes (graph, agentFlow, toolDescriptors, search)
src/backend/handlers/IPC handlers: file, project, agent, agentFlow
src/backend/services/IndexedFsService, UserDataService, ReferenceIndexService, agent/
src/backend/services/agent/AI system: AdkRunner, ToolFactory, providers, ChatDatabaseService
src/frontend/components/All React components (chat/, graph/, fileViewer/, collectionViewer/)
src/frontend/services/commandInfra/VS Code-style commands, keybindings, context keys
src/frontend/services/query/TanStack Query: queryService, mutations, treeTransformations
src/frontend/hooks/Custom hooks: useFileTree, useChat, useAgentFlowRun, etc.
src/frontend/styles/plate/Plate.js editor plugins and kits
src/locales/{en,zh-CN}/i18n translations (8 namespaces)
e2e/Playwright E2E tests
electron/preload.tsIPC bridge — window.api.* definitions
src/global.d.tsTypeScript declarations for Window.api

Common Task Recipes

Read references/recipes.md for detailed step-by-step procedures including:

  • Adding a new IPC channel (5-step checklist)
  • Adding a new command (5-step checklist)
  • Adding a new file subType (8-step checklist)
  • Adding a new agent tool (6-step checklist)
  • Adding a new sidebar panel or editor handler
  • Adding i18n strings

Architecture at a Glance

Read references/architecture.md for the full breakdown. Key mental model:

Frontend (React) --window.api.*--> Preload --IPC--> Backend handlers --> Services --> Disk
                 <--transport push events--  <--IPC--  ProjectManager <-- IndexedFsService events
  • State: TanStack Query is single source of truth. staleTime: Infinity everywhere.
  • File tree: Event-driven push from backend, never polled. useFileTree sets up listener.
  • Mutations: createTreeMutation factory: optimistic update -> IPC call -> rollback on error.
  • Commands: VS Code-style CommandService + ContextService + KeybindingService.
  • Editor routing: ContentViewer dispatches by subType first, then category.
  • AI: Google ADK with multi-provider LLM registry. See references/agent-system.md.

i18n Checklist

  • 8 namespaces: common, fileExplorer, chat, project, editor, agentBuilder, graph, agentDefinition
  • In components: const { t } = useTranslation("namespace")
  • Outside React: import i18n from "@/src/i18n/i18n"; i18n.t("ns:key")
  • Always add keys to BOTH en and zh-CN

Build, Lint & Test

npm run dev:electron     # Dev mode (Vite + Electron)
npm run build            # Production build
npm run check            # Lint + format + TypeScript check
npm run test:e2e         # Playwright E2E tests (headless)
npm run test:e2e:headed  # E2E with visible browser
  • Path alias: @/* maps to repo root
  • Formatting: Prettier (double quotes, 4-space indent, semicolons)
  • Always run E2E tests you wrote before committing

Pitfalls

  1. Any node can have children — not just folders
  2. parentId/siblingIndex are derived — never persist
  3. Tree mutations must be puretreeTransformations.ts returns new arrays, never mutate
  4. Always add i18n to BOTH localesen and zh-CN
  5. Toolbar renders via portal#file-toolbar-portal in TopBar, not inside editor DOM
  6. Input elements suppress keybindingsuseKeybindings checks event.target tag
  7. subType controls routing — checked before category in ContentViewer
  8. Binary files use base64 over IPC — text uses UTF-8
  9. STRUCTURAL_FILE_CHANGES control broadcasts — content "update" does NOT re-push tree
  10. Add Window.api types — update src/global.d.ts when adding IPC channels
  11. Shared code is process-agnosticsrc/shared/ cannot import browser or Node APIs
  12. Tool descriptors are sharedtoolDescriptors.ts serves both UI commands and LLM agents
  13. Every user-facing data element needs a tooltip

References

ReferenceUse when
references/architecture.mdUnderstanding layers, IPC channels, backend services, frontend providers
references/command-system.mdWorking with commands, keybindings, context keys, when clauses
references/workspace-structure.mdOn-disk file layout, metadata schema, storage guidelines
references/agent-system.mdAI features: providers, streaming, tools, planning mode, chat persistence
references/recipes.mdStep-by-step procedures for common development tasks

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

94.94%
按下载量换算1,015

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills