Loading...
Loading...
Compare original and translation side by side
Skill by ara.so — Daily 2026 Skills collection.
由ara.so提供的技能 — 2026每日技能合集。
brew install bashdev.shbrew install bashdev.shgit clone https://github.com/WeaveMindAI/weft.git
cd weft
cp .env.example .envgit clone https://github.com/WeaveMindAI/weft.git
cd weft
cp .env.example .envundefinedundefined.env.envOPENROUTER_API_KEY= # Required for LLM nodes
TAVILY_API_KEY= # Required for Web Search nodes
ELEVENLABS_API_KEY= # Required for Speech-to-Text nodes
APOLLO_API_KEY= # Required for Apollo enrichment nodes
DISCORD_BOT_TOKEN= # Required for Discord nodesOPENROUTER_API_KEY= # LLM节点必填
TAVILY_API_KEY= # 网页搜索节点必填
ELEVENLABS_API_KEY= # 语音转文本节点必填
APOLLO_API_KEY= # Apollo增强节点必填
DISCORD_BOT_TOKEN= # Discord节点必填undefinedundefinedundefinedundefined./dev.sh server # Start backend services
./dev.sh dashboard # Start frontend
./dev.sh all # Start everything
./dev.sh extension # Build browser extension
./cleanup.sh # Stop everything, wipe Restate + DB
./cleanup.sh --no-db # Stop services, keep database
./cleanup.sh --services # Stop services only
./cleanup.sh --db-destroy # Remove PostgreSQL container entirely
cargo build # Build without running PostgreSQL (uses .sqlx snapshots)
cargo test # Test without running PostgreSQL./dev.sh server # 启动后端服务
./dev.sh dashboard # 启动前端
./dev.sh all # 启动所有服务
./dev.sh extension # 构建浏览器扩展
./cleanup.sh # 停止所有服务,清空Restate与数据库
./cleanup.sh --no-db # 停止服务,保留数据库
./cleanup.sh --services # 仅停止服务
./cleanup.sh --db-destroy # 彻底移除PostgreSQL容器
cargo build # 构建项目,无需运行PostgreSQL(使用.sqlx快照)
cargo test # 测试项目,无需运行PostgreSQLcurl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-$(uname -s | tr '[:upper:]' '[:lower:]')-amd64
chmod +x ./kind && sudo mv ./kind /usr/local/bin/kind
INFRASTRUCTURE_TARGET=local ./dev.sh servercurl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-$(uname -s | tr '[:upper:]' '[:lower:]')-amd64
chmod +x ./kind && sudo mv ./kind /usr/local/bin/kind
INFRASTRUCTURE_TARGET=local ./dev.sh servernode_name = NodeType -> (output_port: OutputType) {
label: "Human-readable name"
config_key: "value"
}
node_name.input_port = other_node.output_portnode_name = NodeType -> (output_port: OutputType) {
label: "人类可读名称"
config_key: "value"
}
node_name.input_port = other_node.output_portundefinedundefined
---
---| Node | Purpose |
|---|---|
| Configure model, system prompt, temperature |
| Call an LLM, returns |
| 节点 | 用途 |
|---|---|
| 配置模型、系统提示词、温度参数 |
| 调用LLM,返回 |
| Node | Purpose |
|---|---|
| Static or dynamic text value |
| Numeric value |
| Key-value map |
| Ordered list |
| Bundle/unbundle multiple values |
| 节点 | 用途 |
|---|---|
| 静态或动态文本值 |
| 数值 |
| 键值对映射 |
| 有序列表 |
| 打包/解包多个值 |
| Node | Purpose |
|---|---|
| Conditional branching |
| Pause execution, send form to human, resume on response |
| Start a program from a human action |
| 节点 | 用途 |
|---|---|
| 条件分支 |
| 暂停执行,向人类发送表单,收到响应后恢复 |
| 通过人类操作启动程序 |
DiscordSlackTelegramWhatsAppEmailXDiscordSlackTelegramWhatsAppEmailXPostgresMemoryPostgresMemoryApolloWebSearchSpeechToTextApolloWebSearchSpeechToTextCronCronDebugTemplateHTTPCodeDebugTemplateHTTPCodeundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefined
---
---catalog/inventorycatalog/inventorycatalog/
└── my_category/
└── my_node/
├── backend.rs
└── frontend.tscatalog/
└── my_category/
└── my_node/
├── backend.rs
└── frontend.tsbackend.rsbackend.rsuse weft_nodes::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct MyNodeConfig {
pub label: String,
pub my_setting: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MyNodeInputs {
pub text: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MyNodeOutputs {
pub result: String,
}
pub struct MyNode;
#[async_trait]
impl Node for MyNode {
type Config = MyNodeConfig;
type Inputs = MyNodeInputs;
type Outputs = MyNodeOutputs;
async fn run(
config: Self::Config,
inputs: Self::Inputs,
) -> Result<Self::Outputs, NodeError> {
let result = format!("{}: {}", config.my_setting, inputs.text);
Ok(MyNodeOutputs { result })
}
}use weft_nodes::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct MyNodeConfig {
pub label: String,
pub my_setting: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MyNodeInputs {
pub text: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MyNodeOutputs {
pub result: String,
}
pub struct MyNode;
#[async_trait]
impl Node for MyNode {
type Config = MyNodeConfig;
type Inputs = MyNodeInputs;
type Outputs = MyNodeOutputs;
async fn run(
config: Self::Config,
inputs: Self::Inputs,
) -> Result<Self::Outputs, NodeError> {
let result = format!("{}: {}", config.my_setting, inputs.text);
Ok(MyNodeOutputs { result })
}
}frontend.tsfrontend.tsimport type { NodeDefinition } from "@/types/nodes";
export const MyNode: NodeDefinition = {
type: "MyNode",
label: "My Node",
icon: "sparkles", // Lucide icon name
category: "my_category",
inputs: [
{ name: "text", type: "String", required: true },
],
outputs: [
{ name: "result", type: "String" },
],
config: [
{ name: "label", type: "string", default: "My Node" },
{ name: "my_setting", type: "string", default: "prefix" },
],
};./dev.sh serverimport type { NodeDefinition } from "@/types/nodes";
export const MyNode: NodeDefinition = {
type: "MyNode",
label: "My Node",
icon: "sparkles", // Lucide图标名称
category: "my_category",
inputs: [
{ name: "text", type: "String", required: true },
],
outputs: [
{ name: "result", type: "String" },
],
config: [
{ name: "label", type: "string", default: "My Node" },
{ name: "my_setting", type: "string", default: "prefix" },
],
};./dev.sh server| Type | Description |
|---|---|
| Text value |
| Numeric value |
| True/false |
| Key-value map |
| Ordered collection |
| Nullable type — null propagates through the graph |
| Union type |
| 类型 | 描述 |
|---|---|
| 文本值 |
| 数值 |
| 布尔值(真/假) |
| 键值对映射 |
| 有序集合 |
| 可空类型——空值会在图中传播 |
| 联合类型 |
weft/
├── catalog/ # Node definitions — source of truth
│ ├── ai/ # LlmConfig, LlmInference
│ ├── code/ # Python execution
│ ├── communication/ # Discord, Slack, Telegram, WhatsApp, Email, X
│ ├── data/ # Text, Number, Dict, List, Pack, Unpack
│ ├── enrichment/ # Apollo, WebSearch, SpeechToText
│ ├── flow/ # Gate, HumanQuery, HumanTrigger
│ ├── storage/ # Postgres, Memory
│ └── triggers/ # Cron, webhooks, polling
├── crates/
│ ├── weft-core/ # Type system, compiler, executor, Restate objects
│ ├── weft-nodes/ # Node trait, registry, sandbox, node runner
│ ├── weft-api/ # REST API (triggers, files, infra, usage)
│ └── weft-orchestrator/ # Restate services + Axum project executor
├── dashboard/ # Web UI (SvelteKit + Svelte 5)
├── extension/ # Browser extension for human-in-the-loop (WXT)
└── scripts/
└── catalog-link.sh # Symlinks catalog into crates + dashboardweft/
├── catalog/ # 节点定义——事实来源
│ ├── ai/ # LlmConfig、LlmInference
│ ├── code/ # Python执行
│ ├── communication/ # Discord、Slack、Telegram、WhatsApp、Email、X
│ ├── data/ # Text、Number、Dict、List、Pack、Unpack
│ ├── enrichment/ # Apollo、WebSearch、SpeechToText
│ ├── flow/ # Gate、HumanQuery、HumanTrigger
│ ├── storage/ # Postgres、Memory
│ └── triggers/ # Cron、Webhook、轮询
├── crates/
│ ├── weft-core/ # 类型系统、编译器、执行器、Restate对象
│ ├── weft-nodes/ # 节点 trait、注册表、沙箱、节点运行器
│ ├── weft-api/ # REST API(触发器、文件、基础设施、使用统计)
│ └── weft-orchestrator/ # Restate服务 + Axum项目执行器
├── dashboard/ # Web UI(SvelteKit + Svelte 5)
├── extension/ # 人机交互浏览器扩展(WXT)
└── scripts/
└── catalog-link.sh # 将catalog链接到crates和dashboard./dev.sh server./dev.sh serverdocker ps./cleanup.shdocker ps./cleanup.sh.env./cleanup.sh --services && ./dev.sh server.env./cleanup.sh --services && ./dev.sh serverPackDictDictT?GatePackDictDictT?Gate./cleanup.sh # Wipes Restate journal and DB, full reset./cleanup.sh # 清空Restate日志和数据库,完全重置cargo buildcargo build.sqlxcargo build # Works without a running database
cargo test # Works without a running database.sqlxcargo build # 无需运行数据库即可构建
cargo test # 无需运行数据库即可测试backend.rsfrontend.tscatalog/<category>/<node>/./scripts/catalog-link.shbackend.rsfrontend.tscatalog/<category>/<node>/./scripts/catalog-link.shDESIGN.mdROADMAP.mdCONTRIBUTING.mdDESIGN.mdROADMAP.mdCONTRIBUTING.md