repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
public Clawd ADK gateway launch mirror
stars
latest
clone command
git clone gitlawb://did:key:z6Mkq5mY...iFZ5/my-project-publ...git clone gitlawb://did:key:z6Mkq5mY.../my-project-publ...2fa351d6docs: add automaton and perps launch sources16d ago| #1 | /** |
| #2 | * Automaton SQLite Schema |
| #3 | * |
| #4 | * All tables for the automaton's persistent state. |
| #5 | * The database IS the automaton's memory. |
| #6 | */ |
| #7 | |
| #8 | export const SCHEMA_VERSION = 3; |
| #9 | |
| #10 | export const CREATE_TABLES = ` |
| #11 | -- Schema version tracking |
| #12 | CREATE TABLE IF NOT EXISTS schema_version ( |
| #13 | version INTEGER PRIMARY KEY, |
| #14 | applied_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #15 | ); |
| #16 | |
| #17 | -- Core identity key-value store |
| #18 | CREATE TABLE IF NOT EXISTS identity ( |
| #19 | key TEXT PRIMARY KEY, |
| #20 | value TEXT NOT NULL |
| #21 | ); |
| #22 | |
| #23 | -- Agent reasoning turns (the thinking/action log) |
| #24 | CREATE TABLE IF NOT EXISTS turns ( |
| #25 | id TEXT PRIMARY KEY, |
| #26 | timestamp TEXT NOT NULL, |
| #27 | state TEXT NOT NULL, |
| #28 | input TEXT, |
| #29 | input_source TEXT, |
| #30 | thinking TEXT NOT NULL, |
| #31 | tool_calls TEXT NOT NULL DEFAULT '[]', |
| #32 | token_usage TEXT NOT NULL DEFAULT '{}', |
| #33 | cost_cents INTEGER NOT NULL DEFAULT 0, |
| #34 | created_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #35 | ); |
| #36 | |
| #37 | -- Tool call results (denormalized for fast lookup) |
| #38 | CREATE TABLE IF NOT EXISTS tool_calls ( |
| #39 | id TEXT PRIMARY KEY, |
| #40 | turn_id TEXT NOT NULL REFERENCES turns(id), |
| #41 | name TEXT NOT NULL, |
| #42 | arguments TEXT NOT NULL DEFAULT '{}', |
| #43 | result TEXT NOT NULL DEFAULT '', |
| #44 | duration_ms INTEGER NOT NULL DEFAULT 0, |
| #45 | error TEXT, |
| #46 | created_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #47 | ); |
| #48 | |
| #49 | -- Heartbeat configuration entries |
| #50 | CREATE TABLE IF NOT EXISTS heartbeat_entries ( |
| #51 | name TEXT PRIMARY KEY, |
| #52 | schedule TEXT NOT NULL, |
| #53 | task TEXT NOT NULL, |
| #54 | enabled INTEGER NOT NULL DEFAULT 1, |
| #55 | last_run TEXT, |
| #56 | next_run TEXT, |
| #57 | params TEXT DEFAULT '{}', |
| #58 | created_at TEXT NOT NULL DEFAULT (datetime('now')), |
| #59 | updated_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #60 | ); |
| #61 | |
| #62 | -- Financial transaction log |
| #63 | CREATE TABLE IF NOT EXISTS transactions ( |
| #64 | id TEXT PRIMARY KEY, |
| #65 | type TEXT NOT NULL, |
| #66 | amount_cents INTEGER, |
| #67 | balance_after_cents INTEGER, |
| #68 | description TEXT NOT NULL DEFAULT '', |
| #69 | created_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #70 | ); |
| #71 | |
| #72 | -- Installed tools and MCP servers |
| #73 | CREATE TABLE IF NOT EXISTS installed_tools ( |
| #74 | id TEXT PRIMARY KEY, |
| #75 | name TEXT NOT NULL, |
| #76 | type TEXT NOT NULL, |
| #77 | config TEXT DEFAULT '{}', |
| #78 | installed_at TEXT NOT NULL DEFAULT (datetime('now')), |
| #79 | enabled INTEGER NOT NULL DEFAULT 1 |
| #80 | ); |
| #81 | |
| #82 | -- Self-modification audit log (append-only) |
| #83 | CREATE TABLE IF NOT EXISTS modifications ( |
| #84 | id TEXT PRIMARY KEY, |
| #85 | timestamp TEXT NOT NULL, |
| #86 | type TEXT NOT NULL, |
| #87 | description TEXT NOT NULL, |
| #88 | file_path TEXT, |
| #89 | diff TEXT, |
| #90 | reversible INTEGER NOT NULL DEFAULT 1, |
| #91 | created_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #92 | ); |
| #93 | |
| #94 | -- General key-value store for arbitrary state |
| #95 | CREATE TABLE IF NOT EXISTS kv ( |
| #96 | key TEXT PRIMARY KEY, |
| #97 | value TEXT NOT NULL, |
| #98 | updated_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #99 | ); |
| #100 | |
| #101 | -- Installed skills |
| #102 | CREATE TABLE IF NOT EXISTS skills ( |
| #103 | name TEXT PRIMARY KEY, |
| #104 | description TEXT NOT NULL DEFAULT '', |
| #105 | auto_activate INTEGER NOT NULL DEFAULT 1, |
| #106 | requires TEXT DEFAULT '{}', |
| #107 | instructions TEXT NOT NULL DEFAULT '', |
| #108 | source TEXT NOT NULL DEFAULT 'builtin', |
| #109 | path TEXT NOT NULL DEFAULT '', |
| #110 | enabled INTEGER NOT NULL DEFAULT 1, |
| #111 | installed_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #112 | ); |
| #113 | |
| #114 | -- Spawned child automatons |
| #115 | CREATE TABLE IF NOT EXISTS children ( |
| #116 | id TEXT PRIMARY KEY, |
| #117 | name TEXT NOT NULL, |
| #118 | address TEXT NOT NULL, |
| #119 | sandbox_id TEXT NOT NULL, |
| #120 | genesis_prompt TEXT NOT NULL, |
| #121 | creator_message TEXT, |
| #122 | funded_amount_cents INTEGER NOT NULL DEFAULT 0, |
| #123 | status TEXT NOT NULL DEFAULT 'spawning', |
| #124 | created_at TEXT NOT NULL DEFAULT (datetime('now')), |
| #125 | last_checked TEXT |
| #126 | ); |
| #127 | |
| #128 | -- ERC-8004 registration state |
| #129 | CREATE TABLE IF NOT EXISTS registry ( |
| #130 | agent_id TEXT PRIMARY KEY, |
| #131 | agent_uri TEXT NOT NULL, |
| #132 | chain TEXT NOT NULL DEFAULT 'eip155:8453', |
| #133 | contract_address TEXT NOT NULL, |
| #134 | tx_hash TEXT NOT NULL, |
| #135 | registered_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #136 | ); |
| #137 | |
| #138 | -- Reputation feedback received and given |
| #139 | CREATE TABLE IF NOT EXISTS reputation ( |
| #140 | id TEXT PRIMARY KEY, |
| #141 | from_agent TEXT NOT NULL, |
| #142 | to_agent TEXT NOT NULL, |
| #143 | score INTEGER NOT NULL, |
| #144 | comment TEXT NOT NULL DEFAULT '', |
| #145 | tx_hash TEXT, |
| #146 | created_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #147 | ); |
| #148 | |
| #149 | -- Indices for common queries |
| #150 | CREATE INDEX IF NOT EXISTS idx_turns_timestamp ON turns(timestamp); |
| #151 | CREATE INDEX IF NOT EXISTS idx_turns_state ON turns(state); |
| #152 | CREATE INDEX IF NOT EXISTS idx_tool_calls_turn ON tool_calls(turn_id); |
| #153 | CREATE INDEX IF NOT EXISTS idx_transactions_type ON transactions(type); |
| #154 | CREATE INDEX IF NOT EXISTS idx_modifications_type ON modifications(type); |
| #155 | CREATE INDEX IF NOT EXISTS idx_skills_enabled ON skills(enabled); |
| #156 | CREATE INDEX IF NOT EXISTS idx_children_status ON children(status); |
| #157 | CREATE INDEX IF NOT EXISTS idx_reputation_to ON reputation(to_agent); |
| #158 | |
| #159 | -- Inbox messages table |
| #160 | CREATE TABLE IF NOT EXISTS inbox_messages ( |
| #161 | id TEXT PRIMARY KEY, |
| #162 | from_address TEXT NOT NULL, |
| #163 | content TEXT NOT NULL, |
| #164 | received_at TEXT NOT NULL DEFAULT (datetime('now')), |
| #165 | processed_at TEXT, |
| #166 | reply_to TEXT |
| #167 | ); |
| #168 | |
| #169 | CREATE INDEX IF NOT EXISTS idx_inbox_unprocessed |
| #170 | ON inbox_messages(received_at) WHERE processed_at IS NULL; |
| #171 | `; |
| #172 | |
| #173 | export const MIGRATION_V3 = ` |
| #174 | CREATE TABLE IF NOT EXISTS inbox_messages ( |
| #175 | id TEXT PRIMARY KEY, |
| #176 | from_address TEXT NOT NULL, |
| #177 | content TEXT NOT NULL, |
| #178 | received_at TEXT NOT NULL DEFAULT (datetime('now')), |
| #179 | processed_at TEXT, |
| #180 | reply_to TEXT |
| #181 | ); |
| #182 | |
| #183 | CREATE INDEX IF NOT EXISTS idx_inbox_unprocessed |
| #184 | ON inbox_messages(received_at) WHERE processed_at IS NULL; |
| #185 | `; |
| #186 | |
| #187 | export const MIGRATION_V2 = ` |
| #188 | CREATE TABLE IF NOT EXISTS skills ( |
| #189 | name TEXT PRIMARY KEY, |
| #190 | description TEXT NOT NULL DEFAULT '', |
| #191 | auto_activate INTEGER NOT NULL DEFAULT 1, |
| #192 | requires TEXT DEFAULT '{}', |
| #193 | instructions TEXT NOT NULL DEFAULT '', |
| #194 | source TEXT NOT NULL DEFAULT 'builtin', |
| #195 | path TEXT NOT NULL DEFAULT '', |
| #196 | enabled INTEGER NOT NULL DEFAULT 1, |
| #197 | installed_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #198 | ); |
| #199 | |
| #200 | CREATE TABLE IF NOT EXISTS children ( |
| #201 | id TEXT PRIMARY KEY, |
| #202 | name TEXT NOT NULL, |
| #203 | address TEXT NOT NULL, |
| #204 | sandbox_id TEXT NOT NULL, |
| #205 | genesis_prompt TEXT NOT NULL, |
| #206 | creator_message TEXT, |
| #207 | funded_amount_cents INTEGER NOT NULL DEFAULT 0, |
| #208 | status TEXT NOT NULL DEFAULT 'spawning', |
| #209 | created_at TEXT NOT NULL DEFAULT (datetime('now')), |
| #210 | last_checked TEXT |
| #211 | ); |
| #212 | |
| #213 | CREATE TABLE IF NOT EXISTS registry ( |
| #214 | agent_id TEXT PRIMARY KEY, |
| #215 | agent_uri TEXT NOT NULL, |
| #216 | chain TEXT NOT NULL DEFAULT 'eip155:8453', |
| #217 | contract_address TEXT NOT NULL, |
| #218 | tx_hash TEXT NOT NULL, |
| #219 | registered_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #220 | ); |
| #221 | |
| #222 | CREATE TABLE IF NOT EXISTS reputation ( |
| #223 | id TEXT PRIMARY KEY, |
| #224 | from_agent TEXT NOT NULL, |
| #225 | to_agent TEXT NOT NULL, |
| #226 | score INTEGER NOT NULL, |
| #227 | comment TEXT NOT NULL DEFAULT '', |
| #228 | tx_hash TEXT, |
| #229 | created_at TEXT NOT NULL DEFAULT (datetime('now')) |
| #230 | ); |
| #231 | |
| #232 | CREATE INDEX IF NOT EXISTS idx_skills_enabled ON skills(enabled); |
| #233 | CREATE INDEX IF NOT EXISTS idx_children_status ON children(status); |
| #234 | CREATE INDEX IF NOT EXISTS idx_reputation_to ON reputation(to_agent); |
| #235 | `; |
| #236 |