feat: complete web curriculum visuals

This commit is contained in:
Haoran
2026-05-25 22:37:07 +08:00
parent 956d8272ce
commit fdd7d2a851
155 changed files with 19086 additions and 3584 deletions

View File

@@ -1,5 +1,26 @@
import type { AgentLayer } from "@/types/agent-data";
export const VERSION_ORDER = [
"s01", "s02", "s03", "s04", "s05", "s06", "s07", "s08", "s09", "s10", "s11", "s12"
"s01",
"s02",
"s03",
"s04",
"s05",
"s06",
"s07",
"s08",
"s09",
"s10",
"s11",
"s12",
"s13",
"s14",
"s15",
"s16",
"s17",
"s18",
"s19",
"s20",
] as const;
export const LEARNING_PATH = VERSION_ORDER;
@@ -11,27 +32,200 @@ export const VERSION_META: Record<string, {
subtitle: string;
coreAddition: string;
keyInsight: string;
layer: "tools" | "planning" | "memory" | "concurrency" | "collaboration";
layer: AgentLayer;
prevVersion: string | null;
}> = {
s01: { title: "The Agent Loop", subtitle: "Bash is All You Need", coreAddition: "Single-tool agent loop", keyInsight: "The minimal agent kernel is a while loop + one tool", layer: "tools", prevVersion: null },
s02: { title: "Tools", subtitle: "One Handler Per Tool", coreAddition: "Tool dispatch map", keyInsight: "The loop stays the same; new tools register into the dispatch map", layer: "tools", prevVersion: "s01" },
s03: { title: "TodoWrite", subtitle: "Plan Before You Act", coreAddition: "TodoManager + nag reminder", keyInsight: "An agent without a plan drifts; list the steps first, then execute", layer: "planning", prevVersion: "s02" },
s04: { title: "Subagents", subtitle: "Clean Context Per Subtask", coreAddition: "Subagent spawn with isolated messages[]", keyInsight: "Subagents use independent messages[], keeping the main conversation clean", layer: "planning", prevVersion: "s03" },
s05: { title: "Skills", subtitle: "Load on Demand", coreAddition: "SkillLoader + two-layer injection", keyInsight: "Inject knowledge via tool_result when needed, not upfront in the system prompt", layer: "planning", prevVersion: "s04" },
s06: { title: "Compact", subtitle: "Three-Layer Compression", coreAddition: "micro-compact + auto-compact + archival", keyInsight: "Context will fill up; three-layer compression strategy enables infinite sessions", layer: "memory", prevVersion: "s05" },
s07: { title: "Tasks", subtitle: "Task Graph + Dependencies", coreAddition: "TaskManager with file-based state + dependency graph", keyInsight: "A file-based task graph with ordering, parallelism, and dependencies -- the coordination backbone for multi-agent work", layer: "planning", prevVersion: "s06" },
s08: { title: "Background Tasks", subtitle: "Background Threads + Notifications", coreAddition: "BackgroundManager + notification queue", keyInsight: "Run slow operations in the background; the agent keeps thinking ahead", layer: "concurrency", prevVersion: "s07" },
s09: { title: "Agent Teams", subtitle: "Teammates + Mailboxes", coreAddition: "TeammateManager + file-based mailbox", keyInsight: "When one agent can't finish, delegate to persistent teammates via async mailboxes", layer: "collaboration", prevVersion: "s08" },
s10: { title: "Team Protocols", subtitle: "Shared Communication Rules", coreAddition: "request_id correlation for two protocols", keyInsight: "One request-response pattern drives all team negotiation", layer: "collaboration", prevVersion: "s09" },
s11: { title: "Autonomous Agents", subtitle: "Scan Board, Claim Tasks", coreAddition: "Task board polling + timeout-based self-governance", keyInsight: "Teammates scan the board and claim tasks themselves; no need for the lead to assign each one", layer: "collaboration", prevVersion: "s10" },
s12: { title: "Worktree + Task Isolation", subtitle: "Isolate by Directory", coreAddition: "Composable worktree lifecycle + event stream over a shared task board", keyInsight: "Each works in its own directory; tasks manage goals, worktrees manage directories, bound by ID", layer: "collaboration", prevVersion: "s11" },
s01: {
title: "The Agent Loop",
subtitle: "One Loop Is All You Need",
coreAddition: "Minimal model/tool loop",
keyInsight: "The smallest useful agent is a loop that calls the model, runs tools, and feeds results back.",
layer: "tools",
prevVersion: null,
},
s02: {
title: "Tool Use",
subtitle: "Add a Tool, Add Just One Line",
coreAddition: "Tool dispatch map",
keyInsight: "The loop stays stable while capabilities register into a dispatch table.",
layer: "tools",
prevVersion: "s01",
},
s03: {
title: "Permission",
subtitle: "Check Permissions Before Execution",
coreAddition: "Permission gate",
keyInsight: "Dangerous actions need a harness decision point before the shell runs.",
layer: "tools",
prevVersion: "s02",
},
s04: {
title: "Hooks",
subtitle: "Hang on the Loop, Don't Write into It",
coreAddition: "Lifecycle hooks",
keyInsight: "Cross-cutting behavior belongs around the loop, not tangled inside it.",
layer: "tools",
prevVersion: "s03",
},
s05: {
title: "TodoWrite",
subtitle: "An Agent Without a Plan Drifts Off Course",
coreAddition: "Todo manager",
keyInsight: "Explicit plans keep long-running work visible and correctable.",
layer: "planning",
prevVersion: "s04",
},
s06: {
title: "Subagent",
subtitle: "Break Large Tasks into Small Ones with Clean Context",
coreAddition: "Isolated subtask context",
keyInsight: "Subagents give each subtask a clean message history while preserving the main thread.",
layer: "planning",
prevVersion: "s05",
},
s07: {
title: "Skill Loading",
subtitle: "Load Only When Needed",
coreAddition: "On-demand skill loader",
keyInsight: "Inject specialized knowledge only when the task actually needs it.",
layer: "planning",
prevVersion: "s06",
},
s08: {
title: "Context Compact",
subtitle: "Context Will Fill Up",
coreAddition: "Context compaction",
keyInsight: "Compression keeps the conversation usable when the context window gets crowded.",
layer: "memory",
prevVersion: "s07",
},
s09: {
title: "Memory",
subtitle: "Keep a Layer That Doesn't Lose Details",
coreAddition: "Durable memory layer",
keyInsight: "Some facts should survive summarization and future sessions.",
layer: "memory",
prevVersion: "s08",
},
s10: {
title: "System Prompt",
subtitle: "Assembled at Runtime, Never Hardcoded",
coreAddition: "Runtime prompt assembly",
keyInsight: "The system prompt is a generated product of policy, tools, skills, and context.",
layer: "planning",
prevVersion: "s09",
},
s11: {
title: "Error Recovery",
subtitle: "Errors Are the Start of a Retry",
coreAddition: "Retry strategy",
keyInsight: "A robust harness classifies failures and decides what kind of retry is worthwhile.",
layer: "planning",
prevVersion: "s10",
},
s12: {
title: "Task System",
subtitle: "Break Big Goals into Small Tasks",
coreAddition: "Task board",
keyInsight: "A task graph turns vague goals into ordered, observable work.",
layer: "collaboration",
prevVersion: "s11",
},
s13: {
title: "Background Tasks",
subtitle: "Slow Operations Go to the Background",
coreAddition: "Background execution",
keyInsight: "The agent can keep reasoning while slow work completes elsewhere.",
layer: "concurrency",
prevVersion: "s12",
},
s14: {
title: "Cron Scheduler",
subtitle: "Producing Work on a Schedule",
coreAddition: "Scheduled task creation",
keyInsight: "Recurring work should be created by the harness, not remembered by the model.",
layer: "concurrency",
prevVersion: "s13",
},
s15: {
title: "Agent Teams",
subtitle: "One Agent Isn't Enough, Form a Team",
coreAddition: "Teammate mailboxes",
keyInsight: "Persistent teammates let work continue in parallel without stuffing every thought into one context.",
layer: "collaboration",
prevVersion: "s14",
},
s16: {
title: "Team Protocols",
subtitle: "Teammates Need Agreements",
coreAddition: "Shared coordination protocols",
keyInsight: "Multi-agent systems need explicit message contracts, not vibes.",
layer: "collaboration",
prevVersion: "s15",
},
s17: {
title: "Autonomous Agents",
subtitle: "Check the Board, Claim the Task",
coreAddition: "Autonomous task claiming",
keyInsight: "Teammates become useful when they can discover and claim work themselves.",
layer: "collaboration",
prevVersion: "s16",
},
s18: {
title: "Worktree Isolation",
subtitle: "Separate Directories, No Conflicts",
coreAddition: "Worktree lifecycle",
keyInsight: "Parallel agents need isolated filesystems as much as isolated conversations.",
layer: "collaboration",
prevVersion: "s17",
},
s19: {
title: "MCP Tools",
subtitle: "External Tools, Standard Protocol",
coreAddition: "MCP tool bridge",
keyInsight: "External services can become agent tools through a standard discovery and call protocol.",
layer: "collaboration",
prevVersion: "s18",
},
s20: {
title: "Comprehensive Agent",
subtitle: "All Mechanisms, One Loop",
coreAddition: "Integrated harness",
keyInsight: "The final harness is still one loop, now surrounded by the systems that make it production-shaped.",
layer: "collaboration",
prevVersion: "s19",
},
};
export const LAYERS = [
{ id: "tools" as const, label: "Tools & Execution", color: "#3B82F6", versions: ["s01", "s02"] },
{ id: "planning" as const, label: "Planning & Coordination", color: "#10B981", versions: ["s03", "s04", "s05", "s07"] },
{ id: "memory" as const, label: "Memory Management", color: "#8B5CF6", versions: ["s06"] },
{ id: "concurrency" as const, label: "Concurrency", color: "#F59E0B", versions: ["s08"] },
{ id: "collaboration" as const, label: "Collaboration", color: "#EF4444", versions: ["s09", "s10", "s11", "s12"] },
{
id: "tools" as const,
label: "Tools & Execution",
color: "#3B82F6",
versions: ["s01", "s02", "s03", "s04"],
},
{
id: "planning" as const,
label: "Planning & Control",
color: "#10B981",
versions: ["s05", "s06", "s07", "s10", "s11"],
},
{
id: "memory" as const,
label: "Memory Management",
color: "#8B5CF6",
versions: ["s08", "s09"],
},
{
id: "concurrency" as const,
label: "Concurrency & Scheduling",
color: "#F59E0B",
versions: ["s13", "s14"],
},
{
id: "collaboration" as const,
label: "Multi-Agent Platform",
color: "#EF4444",
versions: ["s12", "s15", "s16", "s17", "s18", "s19", "s20"],
},
] as const;