一键导入
awaitly-visualizer
Workflow visualization patterns for awaitly. Use when wiring event capture, renderers, collectors, time-travel, and export URLs in code.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Workflow visualization patterns for awaitly. Use when wiring event capture, renderers, collectors, time-travel, and export URLs in code.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Core patterns for awaitly: typed async workflows with automatic error inference. Use when writing workflows, migrating from try/catch, or debugging Result types.
Static analysis for awaitly workflows - complexity, paths, visualization. Optimized for coding agents.
| name | awaitly-visualizer |
| description | Workflow visualization patterns for awaitly. Use when wiring event capture, renderers, collectors, time-travel, and export URLs in code. |
| user-invocable | true |
Use awaitly-visualizer to capture workflow events and render workflow state (ASCII, Mermaid, JSON, logger, flowchart), plus export URLs and post-hoc visualization.
Core model:
onEvent) and decision events (emit for trackIf/trackSwitch).workflow.run(...).Step events may include optional metadata (domain, intent, owner, etc.) when step options are set; renderers and diagnostics can surface this.
onEvent at workflow creation or run config to viz.handleEvent, collector.handleEvent, or combineEventHandlers(...).workflow.run(fn, { onEvent: viz.handleEvent }).viz.render*() expecting updates unless events were captured.visualizeEvents(events, options).workflow.run(...) / workflow.runWithState(...).workflow(...)).createLiveVisualizer in browser code.createLiveVisualizer is Node-only.export.default, orviz.toUrl(..., { provider: ... }) / toSvgUrl / toPngUrl / toPdfUrl."mermaid-ink" unless package types confirm other providers support PDF.trackIf / trackSwitch, agents MUST pass emit: viz.handleDecisionEvent (or collector equivalent) to capture decisions.emit when expecting visualization output.import { createWorkflow } from "awaitly/workflow";
import { createVisualizer } from "awaitly-visualizer";
const viz = createVisualizer({ workflowName: "checkout" });
const workflow = createWorkflow("checkout", deps, { onEvent: viz.handleEvent });
const result = await workflow.run(async ({ step, deps }) => {
const user = await step("fetchUser", () => deps.fetchUser("1"));
return user;
});
const ascii = viz.render();
const mermaid = viz.renderAs("mermaid");
import { createEventCollector, visualizeEvents } from "awaitly-visualizer";
const collector = createEventCollector({ workflowName: "checkout" });
const workflow = createWorkflow("checkout", deps, { onEvent: collector.handleEvent });
await workflow.run(async ({ step }) => {
await step("op", () => deps.op());
});
const events = collector.getEvents();
const ascii = visualizeEvents(events, { workflowName: "checkout" });
const flow = collector.visualizeAs("flowchart"); // consult OutputFormat types
import { createVisualizer, combineEventHandlers } from "awaitly-visualizer";
const viz = createVisualizer({ workflowName: "checkout" });
const workflow = createWorkflow("checkout", deps, {
onEvent: combineEventHandlers(viz.handleEvent, (e) => console.log(e.type)),
});
import { trackIf } from "awaitly-visualizer";
await workflow.run(async ({ step }) => {
const decision = trackIf("discount-check", hasCoupon, {
emit: viz.handleDecisionEvent,
});
if (decision.then) {
await step("applyDiscount", () => deps.applyDiscount());
}
});
NOTE:
trackIfsignature may vary over time; consult package types. Invariant: use a stable string label and passemit.
await workflow.run(
async ({ step, deps }) => {
await step("op", () => deps.op());
},
{ onEvent: viz.handleEvent }
);
const viz = createVisualizer({
workflowName: "checkout",
export: { default: { provider: "mermaid-ink" } },
});
const svg = viz.toSvgUrl();
const png = viz.toPngUrl();
const pdf = viz.toPdfUrl(); // Mermaid.ink
| See | Rewrite to |
|---|---|
workflow(...) with visualizer wiring | workflow.run(...) and keep onEvent wiring on create/run config. |
Decision tracker without emit | Add emit: viz.handleDecisionEvent (or collector handler). |
viz.toPdfUrl({ provider: "kroki" }) | Use Mermaid.ink provider for PDF. |
Browser code calling createLiveVisualizer() | Replace with createVisualizer() + renderer output in UI. |
| Manual event array + ad hoc render logic | Use createEventCollector() or visualizeEvents(events, options). |
| Rendering before events are captured | Execute workflow (or feed events) first; for pre-captured events use visualizeEvents(events, options). |
Guaranteed core (use without checking types):
createVisualizer(options?)viz.handleEvent(event)viz.handleDecisionEvent(event) (when using decision trackers)viz.render()viz.renderAs(format) (supported formats are typed)viz.reset()combineEventHandlers(...)createEventCollector(options?)collector.handleEvent(event)collector.getEvents()Advanced / optional (MUST consult package types before use):
viz.handleScopeEvent(event)viz.onUpdate(cb)viz.getIR()collector.getWorkflowEvents, collector.getDecisionEvents, collector.clear, collector.visualize, collector.visualizeAs)htmlRenderer, renderToHTML, generateInteractiveHTML)createLiveVisualizer() (Node-only)