# PortablePilot **Repository Path**: codekpy/portable-pilot ## Basic Information - **Project Name**: PortablePilot - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-25 - **Last Updated**: 2026-09-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PortablePilot 便携媒体处理 + AI Agent 桌面应用(Windows 优先)。 上半身是媒体工作台(视频 / 音频 / 图片:转换 / 剪辑 / 合并 / 压缩 / 提取 / GIF / 音量 / 变速 / 水印 / 相机 RAW 解码 / 元信息读写 等), 另带文档处理(PDF 合并拆分压缩转图、图片转 PDF、Word→PDF);下半身是能调用**全部软件能力**的 AI 助手(DeepSeek 为主,可扩展技能 / 插件 / MCP / 窗口操作 / 流程编排)。 > 技术栈:Tauri 2 · React 19 · TypeScript · Vite · Tailwind v4 · shadcn/ui · Rust(SQLite / rusqlite) > 当前状态:**M4.5**(媒体工作台 + 文档域 + AI Agent + 窗口/UIA 操作 + 技能系统 + 便携 Python + ppt-master);里程碑见 [plan.md](plan.md),进度见 [tasks.md](tasks.md)。 > 品牌:**PortablePilot**(2026-09-25 由开发代号 AllInOnceAgent 更名);目录名与内部包名沿用历史代号,不影响用户可见名称。 ## 快速开始 | 目的 | 命令 | |---|---| | 开发(热更新 + Tauri 窗口) | `.\dev.cmd` 或 `.\tools.ps1 dev` | | 打包安装包(NSIS + MSI) | `.\build.cmd` 或 `.\tools.ps1 build`(先关闭运行中的 PortablePilot.exe) | | 类型检查 / 静态检查 / 单测 | `npm run typecheck` · `npm run lint` · `npm test` | | Rust 单测 | `cargo test --lib`(建议在 `src-tauri/` 下,经 `tools.ps1` 固定环境变量) | 开发端口随机 5173–5372(`ALLINONCE_DEV_PORT` 可固定),避免与本机其他 Vite 项目冲突。 ## 依赖安装约定(本机) `node_modules` 是指向 `G:\npm-global\allinonceagent\node_modules` 的 junction,**不要在项目内直接 `npm install`**(会覆盖 junction)。标准流程: ```powershell New-Item -ItemType Directory -Force G:\npm-global\allinonceagent Copy-Item .\package.json G:\npm-global\allinonceagent\ Set-Location G:\npm-global\allinonceagent; npm install # 之后把 package-lock.json 拷回项目;node_modules 用 junction 指回: New-Item -ItemType Junction -Path J:\kzhcode\AllInOnceAgent\node_modules -Target G:\npm-global\allinonceagent\node_modules ``` Cargo 缓存与工具链固定在 G 盘(`tools.ps1` 已内置 `CARGO_HOME` / `RUSTUP_HOME`)。 ## ffmpeg 放置 把 `ffmpeg.exe` / `ffprobe.exe`(Windows build)放到**应用 exe 同级目录**或项目根目录(开发期探测), 也可放在数据目录 `runtime/ffmpeg/`。程序按优先级自动探测,支持在设置中手动指定。二进制不入库(见 `.gitignore`)。 ## 文档处理 - **PDF 全套**(内嵌 Python 脚本):合并 / 拆分 / 压缩 / 转图片 / 提取文字;图片转 PDF;docx 提取文字。 首次使用在「文档」页(或设置页)点「安装处理组件」:若未用内嵌 Python,会**先自动装内嵌运行时(约 11MB,与系统 Python 隔离)**, 再从清华镜像装处理组件(含 PDF / Word / RAW / 元信息库,约 60MB),之后离线可用。 - **Word → PDF**(高保真)需要 **LibreOffice**(免费):可在「设置 → 文档处理环境」点「下载免安装版」—— 从清华镜像下载官方安装包(约 356MB)并用系统 `msiexec /a` 解压到数据目录 `runtime/libreoffice/`(**无需管理员权限**); 也可自行安装(自动探测默认安装目录),或把便携版放到 exe 同级 `libreoffice/`、`libreoffice/program/` 或数据目录 `runtime/libreoffice/`,或在设置页手动指定 `soffice.exe`。 - 脚本位于 `src-tauri/resources/doc/scripts/`(随包分发,可自行扩充;约定见该目录 README)。 发布版会把脚本与依赖清单**编译期内嵌**进 exe(首次使用释放到数据目录 `runtime/doc/`),因此**单 exe 拷贝**的便携用法也能正常执行文档任务。 新增脚本时需同步登记到 `src-tauri/src/doc/scripts.rs` 的 `EMBEDDED_SCRIPTS`(有单测把关)。 ## 图片处理(含相机 RAW 与元信息) 媒体工作台「图片」页签除 ffmpeg 图片操作外,还提供(基于内嵌 Python,首次需安装处理组件): - **RAW 转图片**:解码 CR2 / CR3 / NEF / NRW / ARW / SR2 / DNG / RAF / ORF / RW2 / PEF / SRW / X3F 等相机原始格式 (LibRaw)→ PNG / JPEG / TIFF;可选 JPEG 质量、最长边缩放、半尺寸快速模式。 - **读取元信息**:读取 JPEG / PNG / WebP / TIFF 与相机 RAW 的 EXIF(相机、镜头、拍摄参数、GPS,最多 300 个标签), 结果直接展示在右侧面板;AI 也可用 `image_meta_read` 调用。 - **修改元信息**:写入作者 / 版权 / 描述 / 拍摄时间,或一键**清除全部元信息**(隐私); JPEG 为字节级 EXIF 修改(不重编码、无画质损失),PNG / WebP / TIFF 用 Pillow 保留原有标签另存。 ## 流程库(宏录制 + 参数化重放) 把反复要做的多步操作沉淀成「流程」,下次换几个文件一键重放(M5 一期): - **录制**:流程库页点「开始录制」后照常使用软件(媒体转码 / 文档处理 / 图片 RAW / 元信息写入 / 系统工具等都会入册), 回来点「停止录制」再「另存」即可;录制期间的状态存在内存中,切换页面不丢。 - **编辑**:步骤可上下移 / 删除 / 用 JSON 精修参数;重复的路径、目录等可点「提为参数」变成 `${参数}` 占位符 (默认值=当前值),参数可改名、可取消(恢复成默认值文本)。 - **运行**:参数表单填「本次运行」值 →「运行流程」按顺序执行;高风险步骤(删除、脚本、窗口输入等)执行前逐个确认; 执行日志实时显示,执行历史(含每步结果)落库可回看。 - **AI 可调用**:AI 用 `flow_list` 查看流程、`flow_run(id, params)` 运行你把复杂任务沉淀成的流程。 ## 目录结构 ``` src/ # 前端(React) capabilities/ # 能力即工具:ToolSpec 统一契约(M1 落地注册表) components/ui/ # shadcn/ui 原语 lib/ # 工具函数 styles/ # Tailwind v4 入口与主题令牌 src-tauri/ # Tauri 2 + Rust src/ # commands / db / paths / state(media / ai / win 等模块随里程碑添加) resources/skills/ # 内置技能源包(ppt-master.zip,编译期内嵌进程序,运行时解压到数据目录) docs/ # 需求原文等文档 ``` ## 品牌与命名 - 产品 / 安装包 / 窗口名:**PortablePilot**(2026-09-25 由开发代号 AllInOnceAgent 更名)。 - Tauri identifier:`com.portablepilot.desktop`;旧数据目录 `com.allinonceagent.app` 在新目录为空时自动续用(不丢配置/密钥/历史任务)。 - 本机目录名、内部包名(npm / cargo)与 `G:\npm-global\allinonceagent` 等基础设施路径仍沿用历史代号,不影响用户可见名称。 建议公开仓库名:**`portablepilot`**;副标题可用: > A portable AI pilot for media, documents, skills and tools. 正式创建仓库前建议核验 GitHub 仓库名、域名和商标可用性。 ## 致谢与第三方资源 本项目特别致谢 **ppt-master** skill。它为本项目提供了多格式资料处理、SVG 页面生成、模板/图表资源以及 SVG → PPTX 导出的工作流基础;PortablePilot 将其作为独立的内置技能包集成,资源位于 `src-tauri/resources/skills/ppt-master.zip`,运行时按需解压使用。 集成时尽量保留了 `ppt-master` 的原始目录结构、脚本、模板、参考资料和工作流文档。`ppt-master` 与 PortablePilot 核心代码边界保持独立;使用它时请遵守其原始文档和上游许可要求。 > 分发方式:`ppt-master.zip` 在构建时**编译期内嵌**进程序,首次运行自动解压到数据目录(`runtime/builtin-skills/`)——因此**单文件便携版也能直接使用内置技能**,无需额外拷贝资源目录。 > **公开发布前核查:** 当前随包资源目录未附带独立的 `LICENSE` 或 `NOTICE` 文件。发布开源仓库和安装包前,请确认 `ppt-master` 及其内含模板、图标、参考资料和脚本的再分发许可,补充对应的版权/许可说明,并按要求保留上游声明。 ## 文档索引 - [plan.md](plan.md) — 总体规划(架构 / 里程碑 / 扩展性设计 / 决策记录) - [tasks.md](tasks.md) — 任务进度跟踪 - [AGENTS.md](AGENTS.md) — 给 AI / Coding Agent 的项目约定(改代码前先读) - [docs/需求.md](docs/需求.md) — 原始需求描述