# Autoforge
**Repository Path**: Tianyu201809/autoforge
## Basic Information
- **Project Name**: Autoforge
- **Description**: 自动化脚本执行平台,支持语言:Python、JavaScript
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-28
- **Last Updated**: 2026-07-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Autoforge
### 自动化脚本散落在各处,环境配置重复录入,运行结果难以追溯——Autoforge 把它们收进一个本机桌面工作台。
[](docs/v1.11.0.md)
[](LICENSE)
[快速开始](#install) · [看示例](#see-it-work) · [脚本开发](#脚本开发) · [版本说明](docs/v1.11.0.md) · [更新日志](docs/CHANGELOG.md)
---
> [!IMPORTANT]
> **本机运行,数据留在你的电脑上。**
>
> | 关注点 | 说明 |
> |--------|------|
> | 会执行什么 | 你导入的 JS / Python 脚本;可调用 Playwright 启动浏览器 |
> | 会写哪些文件 | `%APPDATA%/autoforge-development/`(dev)或 `autoforge-production/`(安装包/preview)下的 SQLite、脚本与依赖 |
> | 会访问网络吗 | 仅在安装 npm / pip 依赖或脚本自身发起请求时 |
> | Python | 调用你本机已安装的 Python 3.9+,应用不捆绑解释器 |
> | 如何卸载 | Windows「添加或删除程序」卸载 Autoforge;删除上述 `autoforge-*` 目录可清除全部数据 |
```bash
git clone && cd Autoforge && npm install && npm run dev
```
---
## The Problem
写自动化脚本不难,难的是**反复配置环境、找不到上次日志、定时任务和手动运行各跑一套**。Autoforge 把脚本当作可导入的「包」统一管理:一份清单声明需要什么变量,平台负责装依赖、跑任务、记历史。
如果你用过 cron + 手写 shell 的组合,核心思路类似——区别是 Autoforge 提供了可视化界面、多环境 Profile、实时日志,以及 JavaScript / Python 双语言运行时。
---
## See It Work
导入内置示例后,在详情 Tab 点击「运行」,确认对话框后终端面板会实时输出:
```
[INFO] 开始执行
[INFO] 环境变量 GREETING=Hello
[INFO] 运行参数 TARGET=Autoforge
[INFO] 执行完成
```
最小脚本包只需两个文件:
```
hello-world/
├── autoforge.json
└── index.mjs
```
```javascript
export async function run(ctx) {
ctx.log('INFO', `Hello ${ctx.params.TARGET ?? 'World'}`)
return { ok: true }
}
```
应用内 **开发指南** 可一键导入 `examples/hello-world/` 与 `examples/hello-world-py/`。
---
## Install
### 环境要求
- Node.js 18+
- Windows x64(当前主要目标平台)
- Python 3.9+(仅运行 Python 脚本时需要)
### 开发模式
```bash
git clone
cd Autoforge
npm install # postinstall 自动下载 Playwright 浏览器
npm run dev
```
### 打包安装程序
```bash
npm run dist:win # 输出至 release/
```
其他命令
| 命令 | 说明 |
|------|------|
| `npm run build` | 编译主进程、预加载与渲染进程 |
| `npm run preview` | 预览编译产物(使用 production 数据目录) |
| `npm run prod` | build + preview 快捷组合 |
| `npm run install:browsers` | 手动安装 Playwright 浏览器 |
| `npm run generate:icons` | 从 SVG 生成应用图标 |
---
## Getting Started
1. **启动应用** — `npm run dev` 或安装 `release/` 下的 NSIS 安装包
2. **导入示例** — 开发指南 → 导入 `hello-world`
3. **填写参数** — 详情 Tab 填写运行参数,配置 Tab 设置环境变量
4. **运行** — 点击「运行」,确认后在终端面板查看日志
5. **(可选)定时** — 详情 → 定时任务,填写 Cron 表达式
Python 脚本:先在 **设置 → Python** 检测并配置解释器路径,再导入 `hello-world-py`。
---
## 功能概览
- **双语言运行时** — JavaScript(主进程)与 Python(子进程),共用 `run(ctx)` 契约
- **脚本管理** — 导入、拖拽、分类、收藏、归档、分页、搜索与排序
- **多环境 Profile** — 开发 / 测试 / 生产等环境变量集
- **运行参数** — 文本、多类型字段与附件参数
- **运行与日志** — 一键运行 / 停止 / 重启;实时日志与进度回显
- **执行历史** — 按日汇总,点击查看详情弹窗
- **定时任务** — 六段 Cron,卡片显示执行周期
- **依赖管理** — 脚本级 + 全局 npm / pip 依赖,安装结果缓存
- **浏览器自动化** — 内置 Playwright;`ctx.sdk.browser.launch()`
- **界面** — 6 套皮肤、托盘、悬浮球、全局快捷键 `Ctrl+Shift+A`、小记面板;设置 / 执行历史 / 开发指南以居中弹窗呈现
环境变量 vs 运行参数
| | **环境变量 `env`** | **运行参数 `params`** |
|---|---|---|
| 用途 | 固定环境配置:账号、Token、API 地址 | 业务输入:订单号、日期范围、任务 ID |
| 变化频率 | 按环境长期固定 | 每次运行可能不同 |
| 配置位置 | 详情 → **配置** Tab | 详情 → **详情** Tab |
| 脚本内访问 | `ctx.env.KEY` | `ctx.params.KEY` |
**选用原则:** 换环境才变的值放 `env`;每次任务才变的值放 `params`。
---
## 脚本开发
### run(ctx) 上下文
```typescript
interface ScriptRunContext {
sessionId: string
scriptId: string
env: Record
params: Record
signal: AbortSignal
log: (level, message) => void
stage: (input) => void // 阶段回显
progress: (input) => void // 进度回显
sdk: {
browser: { launch: () => Promise }
paths: { userData: string; scriptDir: string }
}
}
```
入口函数支持 `run(ctx)`、`main(ctx)` 或 `default`(JS)。
### 导入方式
1. **脚本包目录** — 包含 `autoforge.json` 的文件夹
2. **单文件** — `.js` / `.mjs` / `.cjs` / `.py`,平台自动包装为脚本包
### 内置示例
| 示例 | 说明 |
|------|------|
| `examples/hello-world/` | JS 最小示例,演示 `env` 与 `params` |
| `examples/hello-world-py/` | Python 最小示例 |
| `examples/playwright-py/` | Python Playwright 浏览器自动化 |
完整字段说明见 [脚本包规范](docs/script-spec.md)(安装包内亦随附)。
---
## How It Works
Autoforge 是 Electron 桌面应用:**零内置脚本**,只做平台。用户脚本存放在 `userData/scripts/`,由执行引擎按生命周期(校验 → 装依赖 → 启动 → 运行 → 完成)调度。
架构与数据流
```
┌─────────────────────────────────────────────────────────┐
│ Renderer (Vue 3) │
│ Sidebar · ScriptCard · DetailPanel · LogConsole · … │
└────────────────────────┬────────────────────────────────┘
│ IPC
┌────────────────────────▼────────────────────────────────┐
│ Main Process │
│ script-runner · dependency-manager · scheduler · db │
└────────────────────────┬────────────────────────────────┘
│ import / spawn
┌────────────────────────▼────────────────────────────────┐
│ 用户脚本包 (userData/scripts/{id}/) │
└─────────────────────────────────────────────────────────┘
```
**本机数据目录**(v1.10+ 按启动方式隔离):
| 启动方式 | 目录(Windows) |
|----------|-----------------|
| `npm run dev` | `%APPDATA%/autoforge-development/` |
| 安装包 / `preview` | `%APPDATA%/autoforge-production/` |
```
autoforge-{development|production}/
├── autoforge.db # SQLite 持久化
├── scripts/{id}/ # 脚本包与依赖
├── runtime/ # 全局 npm 依赖
├── runtime-python/ # 全局 Python 依赖
└── script-inputs/ # 运行参数附件
```
详见 [架构说明](docs/architecture.md)。
---
## 技术栈
Electron 34 · Vue 3 · TypeScript · Tailwind CSS 4 · Playwright Core · sql.js · node-cron
---
## 文档
| 文档 | 内容 |
|------|------|
| [v1.11.0 版本说明](docs/v1.11.0.md) | 当前版本:功能弹窗、UI 优化 |
| [v1.10.0 版本说明](docs/v1.10.0.md) | 数据隔离、运行确认 |
| [v1.9.0 版本说明](docs/v1.9.0.md) | 功能基线 |
| [v1.0.0 版本说明](docs/v1.0.0.md) | 首个正式版基线 |
| [更新日志](docs/CHANGELOG.md) | 版本变更记录 |
| [架构说明](docs/architecture.md) | 模块职责、数据流、后续迭代方向 |
| [脚本包规范](docs/script-spec.md) | `autoforge.json` 完整字段 |
---
## FAQ
**脚本跑在沙箱里吗?** JavaScript 脚本在主进程 Node 环境运行;Python 脚本在独立子进程中运行。两者均无严格资源隔离,请只导入可信脚本。
**如何从 ScriptBox 迁移?** 旧版 `scriptbox.json` 仍可导入;v1.2+ 会自动将 JSON 数据迁移至 SQLite。
**Python 脚本需要什么?** 本机 Python 3.9+,在设置页配置路径。依赖通过 pip 安装至脚本 `.venv`。
---
## License
MIT