mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-10-15 00:17:27 +00:00
feat(skills): add skill self-evolution metrics
This commit is contained in:
1 parent
95fd1f8f2d
commit
f45bfa860c
41 files changed
+3008
-79
No files matched your search
@@ -2102,3 +2102,83 @@ CREATE INDEX IF NOT EXISTS idx_browser_cookies_scope_domain
|
||||
ON browser_cookies (tenant_id, user_id, agent_id, domain);
|
||||
CREATE INDEX IF NOT EXISTS idx_browser_cookies_expires_at
|
||||
ON browser_cookies (expires_at);
|
||||
|
||||
-- ============================================================
|
||||
-- Skill self-evolution (migration 000078 / SQLite schema 47)
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS skill_evolution_settings (
|
||||
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||||
skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,
|
||||
enabled INTEGER NOT NULL DEFAULT 0,
|
||||
mode VARCHAR(32) NOT NULL DEFAULT 'suggest_only',
|
||||
last_analyzed_at TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
||||
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
||||
PRIMARY KEY (tenant_id, skill_id),
|
||||
CHECK (mode IN ('suggest_only', 'auto_analyze'))
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_skill_evolution_settings_skill ON skill_evolution_settings(skill_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS skill_usage_metrics (
|
||||
id TEXT PRIMARY KEY,
|
||||
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||||
skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,
|
||||
skill_slug VARCHAR(255) NOT NULL,
|
||||
skill_version INTEGER NOT NULL DEFAULT 1,
|
||||
agent_id TEXT,
|
||||
user_id VARCHAR(255),
|
||||
session_key TEXT,
|
||||
trace_id TEXT,
|
||||
invocation_id TEXT,
|
||||
invocation_source VARCHAR(32) NOT NULL DEFAULT 'runtime',
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'started',
|
||||
failure_reason TEXT,
|
||||
tool_calls_count INTEGER NOT NULL DEFAULT 0,
|
||||
duration_ms INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
||||
CHECK (status IN ('started', 'succeeded', 'failed', 'abandoned'))
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_skill_usage_metrics_skill_created ON skill_usage_metrics(skill_id, created_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_skill_usage_metrics_tenant_created ON skill_usage_metrics(tenant_id, created_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_skill_usage_metrics_status ON skill_usage_metrics(skill_id, status, created_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_skill_usage_metrics_invocation ON skill_usage_metrics(invocation_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS skill_improvement_suggestions (
|
||||
id TEXT PRIMARY KEY,
|
||||
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||||
skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,
|
||||
skill_slug VARCHAR(255) NOT NULL,
|
||||
suggestion_type VARCHAR(64) NOT NULL,
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||||
reason TEXT NOT NULL DEFAULT '',
|
||||
evidence TEXT NOT NULL DEFAULT '{}',
|
||||
draft_patch TEXT NOT NULL DEFAULT '{}',
|
||||
target_file TEXT NOT NULL DEFAULT '',
|
||||
created_by_actor_type VARCHAR(32) NOT NULL DEFAULT '',
|
||||
created_by_actor_id VARCHAR(255) NOT NULL DEFAULT '',
|
||||
reviewed_by_actor_type VARCHAR(32) NOT NULL DEFAULT '',
|
||||
reviewed_by_actor_id VARCHAR(255) NOT NULL DEFAULT '',
|
||||
reviewed_at TEXT,
|
||||
applied_version INTEGER,
|
||||
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
||||
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
||||
CHECK (status IN ('pending', 'approved', 'rejected', 'applied'))
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_skill_suggestions_skill_status_created ON skill_improvement_suggestions(skill_id, status, created_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_skill_suggestions_tenant_created ON skill_improvement_suggestions(tenant_id, created_at DESC);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS skill_versions (
|
||||
id TEXT PRIMARY KEY,
|
||||
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||||
skill_id TEXT NOT NULL REFERENCES skills(id) ON DELETE CASCADE,
|
||||
version INTEGER NOT NULL,
|
||||
content_hash VARCHAR(64) NOT NULL DEFAULT '',
|
||||
changed_files TEXT NOT NULL DEFAULT '[]',
|
||||
created_by_actor_type VARCHAR(32) NOT NULL DEFAULT '',
|
||||
created_by_actor_id VARCHAR(255) NOT NULL DEFAULT '',
|
||||
created_from_suggestion_id TEXT REFERENCES skill_improvement_suggestions(id) ON DELETE SET NULL,
|
||||
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
||||
UNIQUE(skill_id, version)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_skill_versions_tenant_skill ON skill_versions(tenant_id, skill_id, version DESC);
|
||||
Reference in new issue
Block a user