)
如何编写little-coder自定义扩展pi扩展开发从入门到实战附代码模板【免费下载链接】little-coderA harness optimized to smaller LLMs项目地址: https://gitcode.com/gh_mirrors/li/little-coderlittle-coder 是一个专为小参数本地模型优化的编程智能体它基于 pi 框架构建内置了 30 多个 pi 扩展和 30 份技能文件。想要让 little-coder 听懂新的斜杠命令、学会新工具、或者加上你自己的行为守卫只需要编写一个 little-coder 自定义扩展——本文带你从零开始用最少的代码完成从安装到上线的全过程。1️⃣ 先搞懂little-coder 的扩展机制是什么little-coder 启动时会让 pi 以--no-extensions模式运行然后只加载自己内置的扩展集合。这样做有两个好处冷启动上下文保持在7k tokens左右完整加载的智能体通常要 20k你项目目录里的任何东西都无法在任务中途悄悄改变智能体行为而所有 little-coder 专属机制技能注入、权限门控、读取守卫等都是以.pi/extensions/下的 TypeScript 扩展形式实现的——你写的自定义扩展和它们走的是完全相同的路径。一个扩展本质上就是一个默认导出函数的模块该函数接收 pi 的ExtensionAPI对象然后你可以想做的事用的 API参考源码添加斜杠命令pi.registerCommand()clear-command/index.ts添加工具pi.registerTool()extra-tools/index.ts拦截/改写工具调用pi.on(tool_call)read-guard-edit/index.ts监听生命周期事件pi.on(session_start)等hello/index.ts官方扩展开发指南在 docs/extensions.md建议先通读一遍。2️⃣ 快速安装 little-coder3 种方式任选其一开始写扩展前先确保本机装好了 little-coder需要 Node.js ≥ 22.19# 方式一一行脚本安装 curl -fsSL https://raw.githubusercontent.com/itayinbarr/little-coder/main/install.sh | bash # 方式二npm 全局安装 npm install -g little-coder # 方式三bun 全局安装 bun add -g little-coder安装完成后在任意项目目录里运行little-coder即可启动。本文所有验证步骤都基于这个命令。3️⃣ 三种加载自定义扩展的方式按推荐顺序方式一用户扩展目录最常用✅把扩展文件放进~/.config/little-coder/extensions/ ├── telegram-bridge.ts ← 单文件扩展 ├── my-linter/ │ └── index.ts ← 或带 index.ts 的目录 └── notes.md ← 非扩展文件会被忽略你的扩展会在内置集合之后加载因此可以覆盖内置行为而不被遮蔽。详细规则见 docs/extensions.md。方式二环境变量指向任意位置如果扩展住在别的包里不想复制可以用LITTLE_CODER_EXTRA_EXTENSIONS指定路径LITTLE_CODER_EXTRA_EXTENSIONS/path/to/my-ext.js little-coder方式三放行 pi 自己的扩展little-coder --with-pi-extensions⚠️ 注意开启后扩展集合不再固定克隆的仓库也可能贡献扩展请谨慎使用。主题themes不受任何影响始终正常加载。4️⃣ 代码模板10 行写出你的第一个扩展把下面这段保存为~/.config/little-coder/extensions/hello.ts无需任何构建步骤TypeScript 直接被加载import type { ExtensionAPI } from earendil-works/pi-coding-agent; export default function (pi: ExtensionAPI) { pi.on(session_start, async (_event, ctx) { ctx.ui.notify(hello from my first extension!, info); }); }重启 little-coder你会在会话开始时看到通知弹窗。这个模式和内置的 hello/index.ts 如出一辙。进阶模板注册一个斜杠命令参考内置的 /clear 实现第 17–25 行export default function (pi: ExtensionAPI) { pi.registerCommand(hello, { description: Say hello, handler: async (args, ctx) { ctx.ui.notify(hello ${args || world}, info); }, }); }进阶模板给模型加一个新工具参考 extra-tools/index.ts 中glob工具的实现用pi.registerTool()声明名称、描述、参数TypeBox 定义并在execute里返回文本内容。5️⃣ 验证扩展是否加载成功在 little-coder 交互界面里输入/extensions◆ extensions (/extensions to close) bundled 32 loaded yours 1 loaded ~/.config/little-coder/extensions/hello.ts加载失败的扩展会在这里列出并在会话开始时弹出通知——不用再去翻 stderr 了。6️⃣ 两个容易踩的坑官方特别叮嘱不要每轮改写系统提示词。系统提示位于每次请求最前面改动它会使整个缓存前缀失效本地服务器会重新处理整段对话。正确做法从before_agent_start返回一条message共享工具.pi/extensions/_shared/inject.ts已封装好。渲染的每一行都要截断到终端宽度内。pi-tui 对溢出会直接抛错.pi/extensions/_shared/width.ts提供了truncateLineToWidth工具函数。7️⃣ 从哪学起按需求挑参考源码内置扩展都是小而自解释的每个文件开头都有注释说明为什么存在你的目标先看这个斜杠命令clear-command、update-notice新工具extra-tools、shell-session拦截/改写工具调用write-guard、permission-gate每轮注入上下文skill-inject先读 inject.ts热键 面板shortcuts-help、plan-mode模型提供方llama-cpp-provider比如 read-guard-edit/index.ts 演示了完整的事件守卫写法在tool_result里记录已读文件在tool_call里拦截未读先改的操作——约 90 行代码是事件层扩展的绝佳范例。8️⃣ 常见扩展问题排查指南症状解决扩展不加载在 TUI 里运行/extensions查看加载清单与失败原因全局pi install的包不生效默认被--no-extensions跳过请放入用户目录或加--with-pi-extensions升级 npm 包后自定义扩展还在吗在用户扩展目录独立于安装包升级不丢失想本地开发仓库本身git clone https://gitcode.com/gh_mirrors/li/little-coder→npm install→npm link然后直接改.pi/extensions/下代码写好了吗 把它放进~/.config/little-coder/extensions/重启 little-coder用/extensions确认——你的 little-coder 自定义扩展就上线了。更多细节请查阅 docs/extensions.md项目架构背景见 README.md。【免费下载链接】little-coderA harness optimized to smaller LLMs项目地址: https://gitcode.com/gh_mirrors/li/little-coder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考