OpenClaw Evolution Plugin ้็จ Monorepo ๆถๆ๏ผๅ ๅซๅคไธช็ฌ็ซไฝๅๅๅทฅไฝ็ๅ ใ็ณป็ป้่ฟไบไปถ้ฉฑๅจๆถๆๅฎ็ฐ้ญ็ฏ่ฟๅๆต็จใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ OpenClaw Host Runtime โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ Plugin Protocol
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Plugin Runtime โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ Handshake โ โ Event Bridge โ โ Card Adapter โ โ
โ โ Manager โ โ โ โ โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโ โ
โ โ Compatibility โ โ
โ โ Manager โ โ
โ โโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ HTTP/WebSocket โ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Evolution Service โ โ Insight Console โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Event Store โ โ โ โ Dashboard โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Trigger Engine โ โ โ โ Evolution Funnel โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Candidate Extractor โ โ โ โ Candidate Review โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Evaluation Engine โ โ โ โ Skill Registry โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Card Manager โ โ โ โ Compatibility Status โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Skill Registry โ โ โ โ Avatar View โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ Events
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ OpenClaw Evolution System โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ Avatar โ โ State โ โ Animation โ โ
โ โ Manager โ โ Machine โ โ Protocol โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโ โ
โ โ Replay โ โ
โ โ Engine โ โ
โ โโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
/openclaw-evolution-plugin
โโโ packages/
โ โโโ plugin-runtime/ # ๆไปถ่ฟ่กๆถ
โ โ โโโ src/
โ โ โ โโโ core/
โ โ โ โ โโโ handshake.ts
โ โ โ โ โโโ event-bridge.ts
โ โ โ โ โโโ card-adapter.ts
โ โ โ โโโ compatibility/
โ โ โ โ โโโ manager.ts
โ โ โ โ โโโ adapter.ts
โ โ โ โ โโโ profiles/
โ โ โ โโโ plugin.ts
โ โ โโโ package.json
โ โ โโโ tsconfig.json
โ โ
โ โโโ evolution-service/ # ่ฟๅๆๅก
โ โ โโโ src/
โ โ โ โโโ api/
โ โ โ โ โโโ routes/
โ โ โ โ โ โโโ runtime.ts
โ โ โ โ โ โโโ events.ts
โ โ โ โ โ โโโ candidates.ts
โ โ โ โ โ โโโ evaluations.ts
โ โ โ โ โ โโโ cards.ts
โ โ โ โ โ โโโ skills.ts
โ โ โ โ โ โโโ insights.ts
โ โ โ โ โโโ server.ts
โ โ โ โโโ engines/
โ โ โ โ โโโ trigger.ts
โ โ โ โ โโโ extractor.ts
โ โ โ โ โโโ evaluator.ts
โ โ โ โ โโโ card-generator.ts
โ โ โ โโโ storage/
โ โ โ โ โโโ event-store.ts
โ โ โ โ โโโ candidate-store.ts
โ โ โ โ โโโ card-store.ts
โ โ โ โ โโโ skill-registry.ts
โ โ โ โโโ service.ts
โ โ โโโ package.json
โ โ โโโ tsconfig.json
โ โ
โ โโโ insight-console/ # ๆดๅฏๆงๅถๅฐ
โ โ โโโ src/
โ โ โ โโโ pages/
โ โ โ โ โโโ dashboard.tsx
โ โ โ โ โโโ funnel.tsx
โ โ โ โ โโโ candidates.tsx
โ โ โ โ โโโ evaluations.tsx
โ โ โ โ โโโ skills.tsx
โ โ โ โ โโโ compatibility.tsx
โ โ โ โ โโโ avatar.tsx
โ โ โ โโโ components/
โ โ โ โ โโโ cards/
โ โ โ โ โโโ charts/
โ โ โ โ โโโ avatar/
โ โ โ โโโ hooks/
โ โ โ โโโ api/
โ โ โ โโโ app.tsx
โ โ โโโ package.json
โ โ โโโ tsconfig.json
โ โ
โ โโโ evolution-engine/ # ่ฟๅๅผๆ
โ โ โโโ src/
โ โ โ โโโ avatar/
โ โ โ โ โโโ avatar.ts
โ โ โ โ โโโ stages.ts
โ โ โ โ โโโ mutations.ts
โ โ โ โโโ state-machine/
โ โ โ โ โโโ machine.ts
โ โ โ โ โโโ transitions.ts
โ โ โ โโโ animations/
โ โ โ โ โโโ protocol.ts
โ โ โ โ โโโ effects.ts
โ โ โ โโโ replay/
โ โ โ โ โโโ logger.ts
โ โ โ โ โโโ player.ts
โ โ โ โโโ engine.ts
โ โ โโโ package.json
โ โ โโโ tsconfig.json
โ โ
โ โโโ shared-types/ # ๅ
ฑไบซ็ฑปๅๅฎไน
โ โโโ src/
โ โ โโโ events/
โ โ โ โโโ runtime.ts
โ โ โ โโโ evolution.ts
โ โ โ โโโ avatar.ts
โ โ โโโ api/
โ โ โ โโโ requests.ts
โ โ โ โโโ responses.ts
โ โ โโโ models/
โ โ โ โโโ candidate.ts
โ โ โ โโโ card.ts
โ โ โ โโโ skill.ts
โ โ โ โโโ avatar.ts
โ โ โโโ index.ts
โ โโโ package.json
โ โโโ tsconfig.json
โ
โโโ docs/
โ โโโ PRD.md
โ โโโ ARCHITECTURE.md
โ โโโ EVENT_SCHEMA.md
โ โโโ COMPATIBILITY.md
โ โโโ EVOLUTION_SYSTEM.md
โ
โโโ examples/
โ โโโ plugin-manifest.json
โ โโโ event-payloads/
โ โโโ api-calls.sh
โ โโโ demo-scenarios/
โ
โโโ scripts/
โ โโโ setup.sh
โ โโโ build.sh
โ โโโ test.sh
โ โโโ dev.sh
โ
โโโ tests/
โ โโโ unit/
โ โโโ integration/
โ โโโ e2e/
โ
โโโ package.json # ๆ น package.json
โโโ pnpm-workspace.yaml
โโโ tsconfig.base.json
โโโ README.md
- ไธ OpenClaw ไธปๆบ่ฟ่กๆถ้ๆ
- ๅฎ็ฐๆไปถๅ่ฎฎ
- ๆกฅๆฅไบไปถๅฐ Evolution Service
- ๆธฒๆ่ฟๅๅก็
- ็ฎก็ๅ ผๅฎนๆง
// core/handshake.ts
export class HandshakeManager {
async performHandshake(hostInfo: HostInfo): Promise<HandshakeResult>
async negotiateCapabilities(hostCapabilities: string[]): Promise<string[]>
validateHostVersion(version: string): boolean
}
// core/event-bridge.ts
export class EventBridge {
onRuntimeEvent(event: RuntimeEvent): void
normalizeEvent(event: RawRuntimeEvent): NormalizedEvent
forwardEvent(event: NormalizedEvent): Promise<void>
startBatching(config: BatchingConfig): void
stopBatching(): void
}
// core/card-adapter.ts
export class CardAdapter {
renderCard(card: EvolutionCard): RenderResult
chooseBestRenderer(hostCapabilities: string[]): CardRenderer
fallbackToSidebar(card: EvolutionCard): RenderResult
fallbackToExternal(card: EvolutionCard): RenderResult
}
// compatibility/manager.ts
export class CompatibilityManager {
detectHostVersion(): HostInfo
loadCapabilityProfile(version: string): CapabilityProfile
selectAdapter(hostInfo: HostInfo): AdapterProfile
mapEvent(event: any, adapter: AdapterProfile): NormalizedEvent
getCompatibilityStatus(): CompatibilityStatus
}{
"name": "@openclaw/evolution-plugin",
"version": "0.1.0",
"displayName": "OpenClaw Evolution Plugin",
"description": "Evolution layer for OpenClaw",
"author": "OpenClaw Team",
"entry": "dist/plugin.js",
"minHostVersion": "1.0.0",
"maxHostVersion": "2.0.0",
"permissions": [
"read:conversations",
"read:events",
"write:cards",
"read:capabilities"
],
"capabilities": [
"inlineCards",
"eventStreaming",
"bidirectional"
],
"dependencies": [],
"settings": {
"serviceEndpoint": "http://localhost:3000",
"enableAutoEvaluation": false,
"cardExpiryHours": 72
}
}- ๆฅๆถๅๅญๅจไบไปถ
- ่ฟ่ก่งฆๅๅผๆ
- ็ๆๅ้ๆน่ฟ
- ๅ่ฐ่ฏไผฐ
- ็ฎก็ๅก็ๅๆ่ฝๆณจๅ่กจ
ๅๅฑๆถๆ:
API Layer (/routes)
โ
Service Layer (/engines)
โ
Storage Layer (/storage)
โ
Database (PostgreSQL / SQLite)
// engines/trigger.ts
export class TriggerEngine {
registerTrigger(trigger: Trigger): void
evaluateEvent(event: NormalizedEvent): TriggerMatch[]
checkThresholds(matches: TriggerMatch[]): boolean
}
// engines/extractor.ts
export class CandidateExtractor {
extractFromPattern(event: NormalizedEvent): Candidate[]
extractFromFeedback(event: NormalizedEvent): Candidate[]
extractFromCorrection(event: NormalizedEvent): Candidate[]
extractFromDiscovery(event: NormalizedEvent): Candidate[]
}
// engines/evaluator.ts
export class EvaluationEngine {
createEvaluationRun(candidateId: string): EvaluationRun
runEvaluation(runId: string): Promise<EvaluationResult>
runTests(candidate: Candidate): TestResult[]
validateSafety(candidate: Candidate): SafetyCheck[]
}
// engines/card-generator.ts
export class CardGenerator {
generateCard(candidate: Candidate): EvolutionCard
formatCardContent(candidate: Candidate): CardContent
chooseCardType(candidate: Candidate): CardType
}POST /v1/runtime/handshake
Request: { hostInfo, pluginInfo, capabilities }
Response: { sessionId, capabilities, config }
POST /v1/events
Request: NormalizedEvent[]
Response: { received, errors }
GET /v1/events?session_id=&type=&limit=
Response: NormalizedEvent[]
POST /v1/candidates
Request: { content, type, source }
Response: Candidate
GET /v1/candidates?status=&session_id=
Response: Candidate[]
POST /v1/evaluations/run
Request: { candidateId, testConfig }
Response: EvaluationRun
GET /v1/evaluations/:id
Response: EvaluationRun
GET /v1/cards?session_id=&status=
Response: EvolutionCard[]
POST /v1/cards/:id/decision
Request: { decision, notes }
Response: { updatedCard, nextActions }
POST /v1/skills/promote
Request: { candidateId, cardId }
Response: SkillRegistryItem
POST /v1/skills/rollback
Request: { skillId, toVersion }
Response: SkillRegistryItem
GET /v1/insights/dashboard
Response: DashboardMetrics
GET /v1/insights/funnel
Response: FunnelMetrics
GET /v1/insights/skills
Response: SkillsInsights
GET /v1/insights/compatibility
Response: CompatibilityReport
-- Events
CREATE TABLE events (
id UUID PRIMARY KEY,
session_id VARCHAR(255) NOT NULL,
type VARCHAR(100) NOT NULL,
data JSONB NOT NULL,
normalized_data JSONB,
created_at TIMESTAMP DEFAULT NOW(),
INDEX idx_session (session_id),
INDEX idx_type (type)
);
-- Candidates
CREATE TABLE candidates (
id UUID PRIMARY KEY,
session_id VARCHAR(255) NOT NULL,
type VARCHAR(50) NOT NULL,
source VARCHAR(50) NOT NULL,
content JSONB NOT NULL,
confidence DECIMAL(3,2),
status VARCHAR(50),
created_at TIMESTAMP DEFAULT NOW(),
INDEX idx_status (status),
INDEX idx_session (session_id)
);
-- Evaluation Runs
CREATE TABLE evaluation_runs (
id UUID PRIMARY KEY,
candidate_id UUID REFERENCES candidates(id),
status VARCHAR(50),
result JSONB,
started_at TIMESTAMP,
completed_at TIMESTAMP,
INDEX idx_candidate (candidate_id)
);
-- Cards
CREATE TABLE cards (
id UUID PRIMARY KEY,
session_id VARCHAR(255) NOT NULL,
type VARCHAR(50),
candidate_id UUID REFERENCES candidates(id),
content JSONB NOT NULL,
status VARCHAR(50),
decision JSONB,
created_at TIMESTAMP,
expires_at TIMESTAMP,
INDEX idx_session (session_id),
INDEX idx_status (status)
);
-- Skills Registry
CREATE TABLE skills_registry (
id UUID PRIMARY KEY,
type VARCHAR(50) NOT NULL,
name VARCHAR(255) NOT NULL,
content JSONB NOT NULL,
version INTEGER DEFAULT 1,
promoted_at TIMESTAMP,
rollback_version INTEGER,
INDEX idx_type (type),
INDEX idx_name (name)
);- ๆกๆถ: React 18
- ๆๅปบๅทฅๅ ท: Vite
- UI ๅบ: shadcn/ui + Tailwind CSS
- ็ถๆ็ฎก็: Zustand
- ๆฐๆฎ่ทๅ: React Query
- ่ทฏ็ฑ: React Router
// pages/dashboard.tsx
export function DashboardPage() {
const metrics = useDashboardMetrics()
return <DashboardView metrics={metrics} />
}
// pages/funnel.tsx
export function FunnelPage() {
const funnel = useFunnelMetrics()
return <FunnelView data={funnel} />
}
// pages/candidates.tsx
export function CandidatesPage() {
const { data, filters } = useCandidates()
return <CandidateList data={data} filters={filters} />
}
// pages/skills.tsx
export function SkillsPage() {
const skills = useSkillsRegistry()
return <SkillsRegistry skills={skills} />
}
// pages/avatar.tsx
export function AvatarPage() {
const avatar = useAvatar()
const mutations = useMutations()
return <AvatarView avatar={avatar} mutations={mutations} />
}components/
โโโ cards/
โ โโโ SkillCard.tsx
โ โโโ RuleCard.tsx
โ โโโ MemoryCard.tsx
โ โโโ CardRenderer.tsx
โโโ charts/
โ โโโ FunnelChart.tsx
โ โโโ TimelineChart.tsx
โ โโโ MetricsCard.tsx
โโโ avatar/
โ โโโ AvatarDisplay.tsx
โ โโโ StageBadge.tsx
โ โโโ MutationIndicator.tsx
โโโ layout/
โโโ Sidebar.tsx
โโโ Header.tsx
โโโ ConsoleLayout.tsx
// avatar/avatar.ts
export class OpenClawAvatar {
private currentStage: AvatarStage
private stageHistory: StageTransition[]
private activeMutations: Mutation[]
private stats: AvatarStats
initialize(): void
transitionTo(stage: AvatarStage): void
applyMutation(mutation: Mutation): void
triggerAnimation(type: AnimationType): void
getDisplayState(): AvatarDisplayState
}
// state-machine/machine.ts
export class AvatarStateMachine {
private states: StateMap
private transitions: TransitionMap
addState(stage: AvatarStage, config: StateConfig): void
addTransition(from: AvatarStage, to: AvatarStage, trigger: string): void
canTransition(from: AvatarStage, to: AvatarStage): boolean
executeTransition(from: AvatarStage, to: AvatarStage): void
}
// animations/protocol.ts
export interface AnimationProtocol {
triggerAnimation(event: AnimationEvent): void
cancelAnimation(animationId: string): void
getActiveAnimations(): Animation[]
}
// replay/logger.ts
export class ReplayLogger {
logEvent(event: EvolutionEvent): void
getReplay(sessionId: string): ReplaySession
exportReplay(sessionId: string): ReplayExport
} โโโโโโโโโโโ
โ base โ ๅๅง็ถๆ
โโโโโโฌโโโโโ
โ candidate_detected
โผ
โโโโโโโโโโโ
โawakened โ ้ฆๆฌกๆฃๆตๅฐๅ้ๆน่ฟ
โโโโโโฌโโโโโ
โ evaluation_passed
โผ
โโโโโโโโโโโ
โ learned โ ่ฏไผฐ้่ฟ
โโโโโโฌโโโโโ
โ skill_promoted
โผ
โโโโโโโโโโโ
โ evolved โ ๆ่ฝๆๅ
โโโโโโโโโโโ
interface AnimationEvent {
id: string
type: AnimationType
stage: AvatarStage
intensity: 'low' | 'medium' | 'high'
duration: number
metadata: Record<string, unknown>
}
type AnimationType =
| 'pulse' // ้ถๆฎตๅฟ่ทณ
| 'evaluating' // ่ฏไผฐไธญ
| 'activation' // ๆ่ฝๆฟๆดป
| 'mutation' // ็ชๅๅบ็จ
| 'transition' // ้ถๆฎต่ฝฌๆข็ญ็ฅๆจกๅผ - ๆ นๆฎไธปๆบ็ๆฌ้ๆฉไธๅ็้้ ๅจ็ญ็ฅ
้้ ๅจๆจกๅผ - ๅฐไธๅ็ๆฌ็ไบไปถๆจกๅผ่ฝฌๆขไธบๆฐ็ๆฌ
้็บงๆจกๅผ - ๅฝๅ่ฝไธๅฏ็จๆถๆไพๆฟไปฃๆนๆก
export class CompatibilityManager {
private hostVersion: string
private capabilityProfile: CapabilityProfile
private currentAdapter: AdapterProfile
detectHostVersion(): string
loadCapabilityProfile(version: string): CapabilityProfile
selectAdapter(hostInfo: HostInfo): AdapterProfile
mapEvent(event: any, adapter: AdapterProfile): NormalizedEvent
getBestRenderingMode(): RenderingMode
getCompatibilityStatus(): CompatibilityStatus
}
export interface AdapterProfile {
name: string
supportedHostVersions: SemVerRange[]
eventMapping: EventMapping
apiMapping: ApiMapping
degradedFeatures: string[]
fallbackStrategies: FallbackConfig
}
export interface EventMapping {
[originalEvent: string]: string | ((event: any) => NormalizedEvent)
}interface FallbackConfig {
cardRendering: {
primary: 'inline' | 'sidebar' | 'external'
fallbacks: RenderingMode[]
}
eventStreaming: {
primary: 'websocket' | 'polling'
fallbacks: StreamingMode[]
}
}
type RenderingMode =
| 'inline' // ๅ
่ๆธฒๆ
| 'sidebar' // ไพง่พนๆ
| 'console' // ๆงๅถๅฐ
| 'external' // ๅค้จ H5 ้กต้ข// ๆกๆๅ่ฎฎ
interface HandshakeRequest {
pluginInfo: PluginInfo
hostInfo?: HostInfo
requestedCapabilities: string[]
}
interface HandshakeResponse {
sessionId: string
grantedCapabilities: string[]
config: ServiceConfig
compatibility: CompatibilityStatus
}
// ไบไปถๆไบคๅ่ฎฎ
interface EventBatch {
sessionId: string
events: NormalizedEvent[]
metadata: {
batchId: string
timestamp: Date
count: number
}
}
// ๅก็ๆธฒๆๅ่ฎฎ
interface CardRenderRequest {
card: EvolutionCard
renderingContext: RenderingContext
}
interface CardRenderResult {
success: boolean
mode: RenderingMode
renderId?: string
fallbackUrl?: string
}// ๅก็ๆจ้ๅ่ฎฎ
interface CardPush {
card: EvolutionCard
urgency: 'low' | 'medium' | 'high'
expiresAt: Date
}
// ้
็ฝฎๆดๆฐๅ่ฎฎ
interface ConfigUpdate {
key: string
value: unknown
version: number
}
// ๅ
ผๅฎนๆง่ญฆๅๅ่ฎฎ
interface CompatibilityWarning {
level: 'info' | 'warning' | 'error'
message: string
affectedFeatures: string[]
recommendedAction: string
}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Developer Machine โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Plugin Dev โ โ Service Dev โ โ Console Dev โ โ
โ โ (Plugin RT) โ โ (API+DB) โ โ (Vite Dev Server) โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ User Environment โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ OpenClaw Desktop/App โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Plugin Runtime (Embedded) โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ HTTPS/WSS
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Evolution Service โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ API Server โ โ Worker โ โ Database โ โ
โ โ (Node.js) โ โ (Evaluation) โ โ (PostgreSQL) โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Insight Console โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Web Server (Static + SPA) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| ็ปไปถ | ๆๆฏ | ็็ฑ |
|---|---|---|
| Plugin Runtime | TypeScript | ็ฑปๅๅฎๅ จ๏ผๆไบ็ปดๆค |
| Evolution Service | Node.js + Express/Hono | ไธๆไปถๅ ฑไบซ็ฑปๅ๏ผๅผๆญฅๆง่ฝๅฅฝ |
| Database | PostgreSQL / SQLite | ็ไบง็จ PG๏ผๅผๅ็จ SQLite |
| Insight Console | React + Vite | ๅฟซ้ๅผๅ๏ผ็ญๆดๆฐ |
| UI Library | shadcn/ui + Tailwind | ็ฐไปฃๅ๏ผๅฏๅฎๅถ |
| State Management | Zustand | ่ฝป้๏ผ็ฑปๅๅฎๅ จ |
| Data Fetching | React Query | ็ผๅญ๏ผ้่ฏ๏ผไน่งๆดๆฐ |
| Monorepo Tool | pnpm workspaces | ๅฟซ้๏ผ่็็ฃ็็ฉบ้ด |
| Build Tool | tsup | ๅฟซ้ TypeScript ๆๅ |
| Testing | Vitest + Playwright | ็ปไธๆต่ฏๆกๆถ |
- HTTPS/WSS ๅ ๅฏ้ไฟก
- JWT ไผ่ฏ่ฎค่ฏ
- Rate Limiting
- CORS ้ ็ฝฎ
- ่พๅ ฅ้ช่ฏ (Zod schemas)
- ๆ้ๆๅฐๅๅๅ
- ๆฒ็ฎฑๆง่ก็ฏๅข
- ๆๆๆฐๆฎไธ่ฎฐๅฝ
- ๅก็ๅ ๅฎน่ฝฌไน
- ๆๆไฟกๆฏๅ ๅฏๅญๅจ
- ๅฎๆๆฐๆฎๆธ ็
- ็จๆทๆฐๆฎ้็ฆป
- ๅฎก่ฎกๆฅๅฟ
- ๆน้ๆไบค (batching)
- ๅผๆญฅๅค็้ๅ
- ไบไปถๅ็ผฉ
- ็ดขๅผไผๅ
- ๅๅบ็ผๅญ
- ๅ้กตๆฅ่ฏข
- ่ฟๆฅๆฑ
- CDN ้ๆ่ตๆบ
- ไปฃ็ ๅๅฒ
- ่ๆๆปๅจ
- ๅพ็ๆๅ ่ฝฝ
- ๆๅก็ซฏๆธฒๆ (ๅฏ้)
- ็ปๆๅๆฅๅฟ
- ๆฅๅฟ็บงๅซ็ฎก็
- ้่ฏฏ่ฟฝ่ธช
- API ๅๅบๆถ้ด
- ไบไปถๅค็้
- ๅก็ๅฑ็คบ็
- ่ฝฌๅ็
- ๆๅกๅฏ็จๆง
- ้่ฏฏ็้ๅผ
- ๆง่ฝไธ้
- Major: ไธๅ ผๅฎน็ API ๅๆด
- Minor: ๅๅๅ ผๅฎน็ๅ่ฝๆทปๅ
- Patch: ๅๅๅ ผๅฎน็้ฎ้ขไฟฎๅค
- ่ณๅฐๆฏๆๆๅ 2 ไธช Major ็ๆฌ
- ๆๅ 3 ไธชๆ้็ฅ Breaking Changes
- ๆไพ่ฟ็งปๆๅ
- ๅคๆไปถๅๅ
- ๅๅธๅผ่ฏไผฐ
- A/B ๆต่ฏๆกๆถ
- ้ซ็บงๅๆ
- ๆบๅจๅญฆไน ไผๅ
- ่ชๅจ็นๅพๅทฅ็จ
- ๅผบๅๅญฆไน ้ๆ
ๆๆกฃ็ๆฌ: 0.1.0 ๆๅๆดๆฐ: 2026-03-10 ็ปดๆค่ : OpenClaw Evolution Team