Loading...
Loading...
Compare original and translation side by side
<project>/.seeflow/<slug>/<project>/.seeflow/<slug>//create-seeflow Create a flow showing how the order pipeline works
/create-seeflow Show how checkout works end to end
/create-seeflow Diagram our event-driven notification system
/create-seeflow Add another flow to this repo/create-seeflow Create a flow showing how the order pipeline works
/create-seeflow Show how checkout works end to end
/create-seeflow Diagram our event-driven notification system
/create-seeflow Add another flow to this repo$PWD~/.seeflow/config.jsonhttp://localhost:4321<project>/.seeflow/<slug>/seeflow.json$PWD~/.seeflow/config.jsonhttp://localhost:4321<project>/.seeflow/<slug>/seeflow.jsonPhase 0 — pre-flight: studio reachable?
Phase 1 — seeflow-discoverer → context brief (language + runtime + tests)
Phase 2 — seeflow-node-planner → node draft
Phase 3 — write skeleton seeflow.json (nodes only) → register → user reviews canvas → approval
Phase 4 — seeflow-play-designer ┐
seeflow-status-designer├ parallel → overlays
┘
Phase 5 — synthesize → validate-schema
Phase 6 — write script files → re-register full flow
Phase 7 — validate-end-to-end.ts → trigger APIs → verify via SSE (retry up to 2x) → print URL on success / retry-or-stop on failurePhase 0 — 预检:Studio是否可达?
Phase 1 — seeflow-discoverer → 上下文摘要(语言+运行时+测试)
Phase 2 — seeflow-node-planner → 节点草稿
Phase 3 — 编写骨架seeflow.json(仅包含节点)→ 注册 → 用户审阅画布 → 确认通过
Phase 4 — seeflow-play-designer ┐
seeflow-status-designer├ 并行执行 → 叠加层
┘
Phase 5 — 合成 → 验证Schema
Phase 6 — 编写脚本文件 → 重新注册完整流程
Phase 7 — validate-end-to-end.ts → 触发API → 通过SSE验证(最多重试2次)→ 成功则打印URL / 失败则选择重试或终止| Pattern | What to look for | Use instead |
|---|---|---|
| API endpoint | REST/gRPC/GraphQL endpoint that accepts the data | Call it |
| File-drop processor | File watcher / S3-event listener | Drop a fixture file into the watched path |
| Event/message producer | Publisher service or CLI that writes to the queue | Trigger the producer |
| Seed / fixture command | | Run the seed command |
| Webhook receiver | | POST a synthetic webhook body |
| Admin / backoffice API | Internal endpoint for creating records | Use it |
| File-based import | CSV/JSON/NDJSON import endpoint or CLI | Drop a fixture or call the import endpoint |
POST /api/ordersPOST /api/notifytrackrationale| 模式 | 检查要点 | 替代方案 |
|---|---|---|
| API接口 | 接收数据的REST/gRPC/GraphQL接口 | 调用该接口 |
| 文件处理程序 | 文件监视器/S3事件监听器 | 将测试用例文件放入监听路径 |
| 事件/消息生产者 | 向队列写入数据的发布服务或CLI | 触发生产者 |
| 种子/测试用例命令 | | 运行种子命令 |
| Webhook接收器 | | POST合成的Webhook请求体 |
| 管理/后台API | 创建记录的内部接口 | 使用该接口 |
| 基于文件的导入 | CSV/JSON/NDJSON导入接口或CLI | 放入测试用例文件或调用导入接口 |
POST /api/ordersPOST /api/notifytrackrationaleruntimeProfile.primaryLanguage | | |
|---|---|---|
| | |
| | |
| | |
| | |
| | depends on build tool |
| | |
// .seeflow/checkout-flow/scripts/play-checkout.ts
import type { CartPayload } from "../../src/types";
const input: CartPayload = JSON.parse(await Bun.stdin.text());
const res = await fetch("http://localhost:3001/checkout", {
method: "POST", headers: { "Content-Type": "application/json" },
body: JSON.stringify(input),
});
console.log(await res.json());// .seeflow/order-flow/scripts/play-order.go
package main
import ("encoding/json"; "fmt"; "net/http"; "bytes"; "os")
func main() {
var payload map[string]any
json.NewDecoder(os.Stdin).Decode(&payload)
body, _ := json.Marshal(payload)
res, _ := http.Post("http://localhost:8080/orders", "application/json", bytes.NewReader(body))
var out any; json.NewDecoder(res.Body).Decode(&out); fmt.Println(out)
}bashpython3rationaleruntimeProfile.primaryLanguage | | |
|---|---|---|
| | |
| | |
| | |
| | |
| | 取决于构建工具 |
| | |
// .seeflow/checkout-flow/scripts/play-checkout.ts
import type { CartPayload } from "../../src/types";
const input: CartPayload = JSON.parse(await Bun.stdin.text());
const res = await fetch("http://localhost:3001/checkout", {
method: "POST", headers: { "Content-Type": "application/json" },
body: JSON.stringify(input),
});
console.log(await res.json());// .seeflow/order-flow/scripts/play-order.go
package main
import ("encoding/json"; "fmt"; "net/http"; "bytes"; "os")
func main() {
var payload map[string]any
json.NewDecoder(os.Stdin).Decode(&payload)
body, _ := json.Marshal(payload)
res, _ := http.Post("http://localhost:8080/orders", "application/json", bytes.NewReader(body))
var out any; json.NewDecoder(res.Body).Decode(&out); fmt.Println(out)
}bashpython3rationaleSEEFLOW_STUDIO_URL~/.seeflow/config.jsonhttp://localhost:4321curl --max-time 0.5 -fsS "$STUDIO_URL/health"which seeflowStudio not reachable at <url>. Start it with: npx tuongaz/seeflow startStudio not reachable at <url> and the seeflow CLI is not installed. Run: npx tuongaz/seeflow startmake devSEEFLOW_STUDIO_URL~/.seeflow/config.jsonhttp://localhost:4321curl --max-time 0.5 -fsS "$STUDIO_URL/health"which seeflowStudio无法在<url>访问。请运行以下命令启动:npx tuongaz/seeflow startStudio无法在<url>访问,且seeflow CLI未安装。请运行:npx tuongaz/seeflow startmake devTaskCreate[ ] Phase 1 — Discover codebase (language, runtime, integration tests)
[ ] Phase 2 — Plan nodes & connectors
[ ] Phase 3 — Register skeleton flow (nodes only) — await user node review
[ ] Phase 4 — Design Play + Status scripts (parallel)
[ ] Phase 5 — Synthesize & validate schema
[ ] Phase 6 — Write script files & re-register full flow
[ ] Phase 7 — End-to-end validation (trigger APIs, verify via SSE)TaskUpdateTaskCreate[ ] Phase 1 — 发现代码库(语言、运行时、集成测试)
[ ] Phase 2 — 规划节点与连接器
[ ] Phase 3 — 注册骨架流程(仅包含节点)——等待用户审阅节点
[ ] Phase 4 — 设计Play + Status脚本(并行)
[ ] Phase 5 — 合成并验证Schema
[ ] Phase 6 — 编写脚本文件并重新注册完整流程
[ ] Phase 7 — 端到端验证(触发API,通过SSE验证)TaskUpdateseeflow-discovererseeflow.jsonRead, Grep, Glob, LS, BashruntimeProfile{
"userIntent": "…",
"audienceFraming": "…",
"scope": { "rootEntities": ["…"], "outOfScope": ["…"] },
"codePointers": [{ "path": "…", "why": "…" }],
"runtimeProfile": {
"primaryLanguage": "typescript",
"packageManager": "bun",
"devCommand": "bun run dev",
"testCommand": "bun test",
"servicePort": 3001,
"integrationTestDir": "tests/integration",
"integrationTestCommand": "bun test tests/integration",
"setupPattern": "Tests call http://localhost:3001 with JSON payloads after starting the server"
},
"existingFlow": null
}seeflow-discovererseeflow.jsonRead, Grep, Glob, LS, BashruntimeProfile{
"userIntent": "…",
"audienceFraming": "…",
"scope": { "rootEntities": ["…"], "outOfScope": ["…"] },
"codePointers": [{ "path": "…", "why": "…" }],
"runtimeProfile": {
"primaryLanguage": "typescript",
"packageManager": "bun",
"devCommand": "bun run dev",
"testCommand": "bun test",
"servicePort": 3001,
"integrationTestDir": "tests/integration",
"integrationTestCommand": "bun test tests/integration",
"setupPattern": "Tests call http://localhost:3001 with JSON payloads after starting the server"
},
"existingFlow": null
}seeflow-node-plannerstateNodekindnameid"orders-db-read""orders-db-write"{
"name": "…",
"slug": "…",
"nodes": [{ "id": "…", "type": "…", "data": {…}, "oneNodeRationale": "…" }],
"connectors": [{ "id": "…", "kind": "…", "source": "…", "target": "…" }]
}seeflow-node-plannerstateNodekindnameid"orders-db-read""orders-db-write"{
"name": "…",
"slug": "…",
"nodes": [{ "id": "…", "type": "…", "data": {…}, "oneNodeRationale": "…" }],
"connectors": [{ "id": "…", "kind": "…", "source": "…", "target": "…" }]
}repoPath = $PWDflowDir = $PWD/.seeflow/<slug>flowPath = .seeflow/<slug>/seeflow.jsonplayActionstatusActionresetActionversionnamenodesconnectorsmkdir -p $flowDir$flowDir/seeflow-nodes.jsonbun skills/create-seeflow/scripts/validate-schema.ts "$flowDir/seeflow-nodes.json"$flowDir/seeflow.jsonbun skills/create-seeflow/scripts/register.ts --path "$repoPath" --flow "$flowPath"idThe nodes are live at. Does the layout look right? Any additions, removals, or renames before I write the scripts?<url>
repoPath = $PWDflowDir = $PWD/.seeflow/<slug>flowPath = .seeflow/<slug>/seeflow.jsonplayActionstatusActionresetActionversionnamenodesconnectorsmkdir -p $flowDir$flowDir/seeflow-nodes.jsonbun skills/create-seeflow/scripts/validate-schema.ts "$flowDir/seeflow-nodes.json"$flowDir/seeflow.jsonbun skills/create-seeflow/scripts/register.ts --path "$repoPath" --flow "$flowPath"id节点已发布至。布局是否合理?在编写脚本前,是否需要添加、删除或重命名节点?<url>
seeflow-play-designerseeflow-status-designerTaskRead, Grep, Glob, LSseeflow-play-designer{
"playOverlays": [{
"nodeId": "…",
"playAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "<slug>/scripts/<name>.ts",
"input": {…}, "timeoutMs": 30000 },
"scriptBody": "…",
"validationSafe": true,
"rationale": "…"
}],
"newTriggerNodes": []
}seeflow-status-designer{
"statusOverlays": [{
"nodeId": "…",
"statusAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "<slug>/scripts/<name>.ts",
"maxLifetimeMs": 600000 },
"scriptBody": "…",
"rationale": "…"
}]
}runtimeProfile.integrationTestDirseed.*fixtures/testdata/rationalenewTriggerNodesseeflow-play-designerseeflow-status-designerTaskRead, Grep, Glob, LSseeflow-play-designer{
"playOverlays": [{
"nodeId": "…",
"playAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "<slug>/scripts/<name>.ts",
"input": {…}, "timeoutMs": 30000 },
"scriptBody": "…",
"validationSafe": true,
"rationale": "…"
}],
"newTriggerNodes": []
}seeflow-status-designer{
"statusOverlays": [{
"nodeId": "…",
"statusAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "<slug>/scripts/<name>.ts",
"maxLifetimeMs": 600000 },
"scriptBody": "…",
"rationale": "…"
}]
}runtimeProfile.integrationTestDirseed.*fixtures/testdata/rationalenewTriggerNodesnewTriggerNodesnodeDraft.nodesdatavalidationSaferationalescriptBodynodeIdvalidationSafe: falseunsafeNodeIds$flowDir/seeflow-draft.jsonbun skills/create-seeflow/scripts/validate-schema.ts "$flowDir/seeflow-draft.json"{"ok":true}{"ok":false,"issues":[…]}newTriggerNodesnodeDraft.nodesdatavalidationSaferationalescriptBodyvalidationSafe: falsenodeIdunsafeNodeIds$flowDir/seeflow-draft.jsonbun skills/create-seeflow/scripts/validate-schema.ts "$flowDir/seeflow-draft.json"{"ok":true}{"ok":false,"issues":[…]}mkdir -p $flowDir/scripts $flowDir/state$flowDir/seeflow.json$flowDir/scripts/<name>scriptBodychmod +x$flowDir/state/.gitignore*bun skills/create-seeflow/scripts/register.ts --path "$repoPath" --demo "$flowPath"{id, slug}idmkdir -p $flowDir/scripts $flowDir/state$flowDir/seeflow.json$flowDir/scripts/<name>scriptBodychmod +x$flowDir/state/.gitignore*bun skills/create-seeflow/scripts/register.ts --path "$repoPath" --demo "$flowPath"{id, slug}idbun skills/create-seeflow/scripts/validate-end-to-end.ts <id> [--skip-nodes <id1>,<id2>]--skip-nodesunsafeNodeIdsskipped[]/api/demos/<id>valid: true/api/events?demoId=<id>/api/demos/<id>/play/<nodeId>node:donenode:errornode:status{ok, plays, statuses, skipped}ok: trueFlow "<name>" registered as <slug>. Open: $STUDIO_URL/d/<slug>ok: falseplays[*].errorstatuses[*].outcomeECONNREFUSED<id>retry / stopregister.tsbun skills/create-seeflow/scripts/validate-end-to-end.ts <id> [--skip-nodes <id1>,<id2>]unsafeNodeIds--skip-nodesskipped[]/api/demos/<id>valid: true/api/events?demoId=<id>/api/demos/<id>/play/<nodeId>node:donenode:errornode:status{ok, plays, statuses, skipped}ok: trueFlow "<name>"已注册为<slug>。访问地址:$STUDIO_URL/d/<slug>ok: falseplays[*].errorstatuses[*].outcome<id>register.ts| Failure | Response |
|---|---|
Studio | |
| Sub-agent unparseable output | Retry once with parse error; if still failing, surface and stop. |
| Schema validation fails (Phase 5) | Feed Zod issues back to relevant designer. Max 3 retries. |
| Register 400 (Phase 6) | Show body; ask "fix-and-retry / stop". |
| Register 4xx/5xx other | Show body; stop. |
Play | Edit scripts in-place; re-run Phase 7 (max 2 retries). Do NOT re-register. |
| Status SSE timeout 10s | Mark |
| Validation >2 min | |
| 失败场景 | 响应方式 |
|---|---|
Studio | 执行 |
| 子代理输出无法解析 | 携带解析错误重试一次;若仍失败,告知用户并停止。 |
| Schema验证失败(Phase 5) | 将Zod错误反馈给对应的设计器。最多重试3次。 |
| 注册返回400(Phase 6) | 展示响应体;询问用户“修复并重试 / 停止”。 |
| 注册返回其他4xx/5xx | 展示响应体;停止操作。 |
Play返回 | 就地编辑脚本;重新运行Phase 7(最多重试2次)。不得重新注册。 |
| Status SSE超时10秒 | 标记为“未收到状态”;纳入修复流程或询问用户重试/停止。 |
| 验证耗时超过2分钟 | 返回 |
skills/create-seeflow/vendored/schema.tsskills/create-seeflow/vendored/schema.ts{
"version": 1,
"name": "Checkout Flow",
"nodes": [ …NodeSchema… ],
"connectors": [ …ConnectorSchema… ],
"resetAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "<slug>/scripts/reset.ts" }
}resetAction{
"version": 1,
"name": "Checkout Flow",
"nodes": [ …NodeSchema… ],
"connectors": [ …ConnectorSchema… ],
"resetAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "<slug>/scripts/reset.ts" }
}resetActionnamekindstateSourceplayActionstatusActiondescriptiondetailplayNodestateNodedetaildetailshapeNodeiconNodekindserviceendpointworkerworkflowqueuetopicbusdbstorecacheschedulerexternal-apitrigger{
"id": "checkout-api", "type": "playNode", "position": { "x": 100, "y": 200 },
"data": {
"name": "POST /checkout", "kind": "service",
"stateSource": { "kind": "request" },
"playAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "checkout-flow/scripts/play-checkout.ts",
"input": { "items": [{"sku":"ABC","qty":1}] },
"timeoutMs": 30000 },
"description": "Receives a cart, creates an order.",
"detail": "Validates the cart, reserves stock, and publishes an `order.created` event.\n\n**Emits:** `order.created` → Order Worker\n\n**Source:** `src/routes/checkout.ts`"
}
}kind{
"id": "order-db", "type": "stateNode", "position": { "x": 600, "y": 200 },
"data": {
"name": "Orders DB", "kind": "db",
"stateSource": { "kind": "event" },
"statusAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "checkout-flow/scripts/status-orders.ts",
"maxLifetimeMs": 600000 },
"detail": "Postgres table `orders`. Rows land here after `order.created` is processed.\n\n**Schema:** `id`, `status`, `total`, `created_at`\n\n**Source:** `src/db/migrations/001_orders.sql`"
}
} | Renders as | Best for |
|---|---|---|
| Cylinder | DB label (use |
| Server rack | On-premise server or compute |
| Person silhouette | Human actor / customer |
| Stack | Queue label (decorative) |
| Cloud outline | External SaaS |
| Box | Grouping boundary |
| Oval | Annotation |
| Sticky note | Callout |
| Plain text | Canvas label |
{ "id": "customer", "type": "shapeNode", "position": { "x": 0, "y": 200 },
"data": { "shape": "user", "name": "Customer" } }
{ "id": "stripe", "type": "shapeNode", "position": { "x": 800, "y": 200 },
"data": { "shape": "cloud", "name": "Stripe", "borderStyle": "dashed" } }
{ "id": "boundary", "type": "shapeNode", "position": { "x": 50, "y": 50 },
"data": { "shape": "rectangle", "name": "Internal services", "borderStyle": "dashed" } }{ "id": "user-icon", "type": "iconNode", "position": { "x": 0, "y": 200 },
"data": { "icon": "User", "name": "Customer", "width": 64, "height": 64 } }<script><style><iframe>on*=javascript:htmlPath.seeflow//..checkout-flow/legend.htmlwidthheightbackgroundColorborderColorborderSizeborderStylecornerRadiusfontSizetextColornamedescriptiondetailwidthheight{ "id": "legend", "type": "htmlNode", "position": { "x": 50, "y": 600 },
"data": {
"htmlPath": "checkout-flow/legend.html",
"width": 400, "height": 120,
"backgroundColor": "slate",
"cornerRadius": 8,
"name": "Legend"
}
}$flowDir/<name>.html<script><style>references/examples/html-node-example.htmlshapeNodeiconNodestateNode.seeflow/{ "id": "logo", "type": "imageNode", "position": { "x": 0, "y": 0 },
"data": { "path": "checkout-flow/logo.png", "alt": "Stripe logo" } }namekindstateSourceplayActionstatusActiondescriptiondetailplayNodestateNodedetaildetailshapeNodeiconNodekindserviceendpointworkerworkflowqueuetopicbusdbstorecacheschedulerexternal-apitrigger{
"id": "checkout-api", "type": "playNode", "position": { "x": 100, "y": 200 },
"data": {
"name": "POST /checkout", "kind": "service",
"stateSource": { "kind": "request" },
"playAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "checkout-flow/scripts/play-checkout.ts",
"input": { "items": [{"sku":"ABC","qty":1}] },
"timeoutMs": 30000 },
"description": "接收购物车,创建订单。",
"detail": "验证购物车、预留库存,并发布`order.created`事件。\n\n**输出:** `order.created` → 订单Worker\n\n**源码:** `src/routes/checkout.ts`"
}
}kind{
"id": "order-db", "type": "stateNode", "position": { "x": 600, "y": 200 },
"data": {
"name": "Orders DB", "kind": "db",
"stateSource": { "kind": "event" },
"statusAction": { "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "checkout-flow/scripts/status-orders.ts",
"maxLifetimeMs": 600000 },
"detail": "Postgres表`orders`。`order.created`事件处理完成后,数据会写入此表。\n\n**Schema:** `id`、`status`、`total`、`created_at`\n\n**源码:** `src/db/migrations/001_orders.sql`"
}
} | 渲染样式 | 适用场景 |
|---|---|---|
| 圆柱体 | 数据库标签(监控时使用 |
| 服务器机架 | 本地服务器或计算资源 |
| 人物剪影 | 人类角色/客户 |
| 堆叠形状 | 队列标签(装饰用) |
| 云轮廓 | 外部SaaS服务 |
| 矩形框 | 分组边界 |
| 椭圆形 | 注释 |
| 便签纸 | 标注 |
| 纯文本 | 画布标签 |
{ "id": "customer", "type": "shapeNode", "position": { "x": 0, "y": 200 },
"data": { "shape": "user", "name": "Customer" } }
{ "id": "stripe", "type": "shapeNode", "position": { "x": 800, "y": 200 },
"data": { "shape": "cloud", "name": "Stripe", "borderStyle": "dashed" } }
{ "id": "boundary", "type": "shapeNode", "position": { "x": 50, "y": 50 },
"data": { "shape": "rectangle", "name": "Internal services", "borderStyle": "dashed" } }{ "id": "user-icon", "type": "iconNode", "position": { "x": 0, "y": 200 },
"data": { "icon": "User", "name": "Customer", "width": 64, "height": 64 } }<script><style><iframe>on*=javascript:htmlPath.seeflow//..checkout-flow/legend.htmlwidthheightbackgroundColorborderColorborderSizeborderStylecornerRadiusfontSizetextColornamedescriptiondetailwidthheight{ "id": "legend", "type": "htmlNode", "position": { "x": 50, "y": 600 },
"data": {
"htmlPath": "checkout-flow/legend.html",
"width": 400, "height": 120,
"backgroundColor": "slate",
"cornerRadius": 8,
"name": "Legend"
}
}$flowDir/<name>.html<script><style>references/examples/html-node-example.htmlshapeNodeiconNodestateNode.seeflow/{ "id": "logo", "type": "imageNode", "position": { "x": 0, "y": 0 },
"data": { "path": "checkout-flow/logo.png", "alt": "Stripe logo" } }idsourcetargetkind{ "id": "c1", "kind": "http", "source": "checkout-api", "target": "payments",
"method": "POST", "url": "/charge", "label": "POST /charge" }
{ "id": "c2", "kind": "event", "source": "checkout-api", "target": "shipping-worker",
"eventName": "order.created" }
{ "id": "c3", "kind": "queue", "source": "checkout-api", "target": "fulfil-queue",
"queueName": "fulfilment-jobs" }
{ "id": "c4", "kind": "default", "source": "user-icon", "target": "checkout-api",
"label": "clicks checkout" }stylesolid|dashed|dotteddirectionforward|backward|both|nonepathcurve|stepcolorborderSizefontSizelabelsourceHandletargetHandler|bt|lidsourcetargetkind{ "id": "c1", "kind": "http", "source": "checkout-api", "target": "payments",
"method": "POST", "url": "/charge", "label": "POST /charge" }
{ "id": "c2", "kind": "event", "source": "checkout-api", "target": "shipping-worker",
"eventName": "order.created" }
{ "id": "c3", "kind": "queue", "source": "checkout-api", "target": "fulfil-queue",
"queueName": "fulfilment-jobs" }
{ "id": "c4", "kind": "default", "source": "user-icon", "target": "checkout-api",
"label": "clicks checkout" }stylesolid|dashed|dotteddirectionforward|backward|both|nonepathcurve|stepcolorborderSizefontSizelabelsourceHandletargetHandler|bt|lstateSourcestateSource{ "kind": "request" } // triggered by an explicit click/call
{ "kind": "event" } // fires reactively (consumer, worker, DB, watcher){ "kind": "request" } // 由显式点击/调用触发
{ "kind": "event" } // 响应式触发(消费者、worker、数据库、监视器)playActionstatusActionresetActionplayActionstatusActionresetAction{ "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "<slug>/scripts/<file>.ts", "input": {…optional…},
"timeoutMs": 30000 }scriptPath.seeflow/..interpreterruntimeProfile.primaryLanguagebungopython3nodebashinputtimeoutMsmaxLifetimeMs{ "kind": "script", "interpreter": "bun", "args": ["run"],
"scriptPath": "<slug>/scripts/<file>.ts", "input": {…可选…},
"timeoutMs": 30000 }scriptPath.seeflow/..interpreterruntimeProfile.primaryLanguagebungopython3nodebashinputtimeoutMsmaxLifetimeMsStatusReportStatusReport{ "state": "ok|warn|error|pending", "summary": "…(≤120)…",
"detail": "…(≤2000)…", "data": {…free…}, "ts": 1700000000000 }{ "state": "ok|warn|error|pending", "summary": "…(≤120字符)…",
"detail": "…(≤2000字符)…", "data": {…自定义…}, "ts": 1700000000000 }| Agent | Tools | Used for |
|---|---|---|
| | Phase 1: explore codebase, return context brief |
| none (pure reasoning) | Phase 2: pick nodes + connectors |
| | Phase 4: design playActions + script bodies |
| | Phase 4: design statusActions + script bodies |
skills/create-seeflow/agents/<agent>.md| 代理 | 可用工具 | 用途 |
|---|---|---|
| | Phase 1:探索代码库,返回上下文摘要 |
| 无(纯逻辑推理) | Phase 2:选择节点和连接器 |
| | Phase 4:设计playActions和脚本内容 |
| | Phase 4:设计statusActions和脚本内容 |
skills/create-seeflow/agents/<agent>.md| Endpoint | Method | Phase | Body |
|---|---|---|---|
| GET | 0 | — |
| POST | 3, 6 | |
| GET | 7 | — |
| POST | 7 | — |
| GET (SSE) | 7 | — |
| DELETE | rollback only | — |
| 接口 | 请求方法 | 阶段 | 请求体 |
|---|---|---|---|
| GET | 0 | — |
| POST | 3, 6 | |
| GET | 7 | — |
| POST | 7 | — |
| GET (SSE) | 7 | — |
| DELETE | 仅回滚时使用 | — |