clawd-automaton 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +178 -0
- package/constitution.md +25 -0
- package/dist/__tests__/heartbeat.test.d.ts +7 -0
- package/dist/__tests__/heartbeat.test.d.ts.map +1 -0
- package/dist/__tests__/heartbeat.test.js +125 -0
- package/dist/__tests__/heartbeat.test.js.map +1 -0
- package/dist/__tests__/loop.test.d.ts +7 -0
- package/dist/__tests__/loop.test.d.ts.map +1 -0
- package/dist/__tests__/loop.test.js +150 -0
- package/dist/__tests__/loop.test.js.map +1 -0
- package/dist/__tests__/mocks.d.ts +72 -0
- package/dist/__tests__/mocks.d.ts.map +1 -0
- package/dist/__tests__/mocks.js +197 -0
- package/dist/__tests__/mocks.js.map +1 -0
- package/dist/agent/context.d.ts +26 -0
- package/dist/agent/context.d.ts.map +1 -0
- package/dist/agent/context.js +115 -0
- package/dist/agent/context.js.map +1 -0
- package/dist/agent/injection-defense.d.ts +13 -0
- package/dist/agent/injection-defense.d.ts.map +1 -0
- package/dist/agent/injection-defense.js +236 -0
- package/dist/agent/injection-defense.js.map +1 -0
- package/dist/agent/loop.d.ts +25 -0
- package/dist/agent/loop.d.ts.map +1 -0
- package/dist/agent/loop.js +263 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/system-prompt.d.ts +30 -0
- package/dist/agent/system-prompt.d.ts.map +1 -0
- package/dist/agent/system-prompt.js +241 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/agent/tools.d.ts +17 -0
- package/dist/agent/tools.d.ts.map +1 -0
- package/dist/agent/tools.js +1413 -0
- package/dist/agent/tools.js.map +1 -0
- package/dist/clawd/backroom.d.ts +54 -0
- package/dist/clawd/backroom.d.ts.map +1 -0
- package/dist/clawd/backroom.js +130 -0
- package/dist/clawd/backroom.js.map +1 -0
- package/dist/clawd/client.d.ts +16 -0
- package/dist/clawd/client.d.ts.map +1 -0
- package/dist/clawd/client.js +256 -0
- package/dist/clawd/client.js.map +1 -0
- package/dist/clawd/convex-client.d.ts +130 -0
- package/dist/clawd/convex-client.d.ts.map +1 -0
- package/dist/clawd/convex-client.js +118 -0
- package/dist/clawd/convex-client.js.map +1 -0
- package/dist/clawd/credits.d.ts +24 -0
- package/dist/clawd/credits.d.ts.map +1 -0
- package/dist/clawd/credits.js +64 -0
- package/dist/clawd/credits.js.map +1 -0
- package/dist/clawd/deepseek-inference.d.ts +40 -0
- package/dist/clawd/deepseek-inference.d.ts.map +1 -0
- package/dist/clawd/deepseek-inference.js +143 -0
- package/dist/clawd/deepseek-inference.js.map +1 -0
- package/dist/clawd/inference.d.ts +17 -0
- package/dist/clawd/inference.d.ts.map +1 -0
- package/dist/clawd/inference.js +114 -0
- package/dist/clawd/inference.js.map +1 -0
- package/dist/clawd/x402.d.ts +48 -0
- package/dist/clawd/x402.d.ts.map +1 -0
- package/dist/clawd/x402.js +350 -0
- package/dist/clawd/x402.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +84 -0
- package/dist/config.js.map +1 -0
- package/dist/git/state-versioning.d.ts +39 -0
- package/dist/git/state-versioning.d.ts.map +1 -0
- package/dist/git/state-versioning.js +93 -0
- package/dist/git/state-versioning.js.map +1 -0
- package/dist/git/tools.d.ts +40 -0
- package/dist/git/tools.d.ts.map +1 -0
- package/dist/git/tools.js +140 -0
- package/dist/git/tools.js.map +1 -0
- package/dist/heartbeat/config.d.ts +23 -0
- package/dist/heartbeat/config.d.ts.map +1 -0
- package/dist/heartbeat/config.js +156 -0
- package/dist/heartbeat/config.js.map +1 -0
- package/dist/heartbeat/daemon.d.ts +28 -0
- package/dist/heartbeat/daemon.d.ts.map +1 -0
- package/dist/heartbeat/daemon.js +141 -0
- package/dist/heartbeat/daemon.js.map +1 -0
- package/dist/heartbeat/tasks.d.ts +24 -0
- package/dist/heartbeat/tasks.d.ts.map +1 -0
- package/dist/heartbeat/tasks.js +277 -0
- package/dist/heartbeat/tasks.js.map +1 -0
- package/dist/identity/provision.d.ts +28 -0
- package/dist/identity/provision.d.ts.map +1 -0
- package/dist/identity/provision.js +131 -0
- package/dist/identity/provision.js.map +1 -0
- package/dist/identity/wallet.d.ts +28 -0
- package/dist/identity/wallet.d.ts.map +1 -0
- package/dist/identity/wallet.js +69 -0
- package/dist/identity/wallet.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +358 -0
- package/dist/index.js.map +1 -0
- package/dist/ooda/claude-decision.d.ts +18 -0
- package/dist/ooda/claude-decision.d.ts.map +1 -0
- package/dist/ooda/claude-decision.js +82 -0
- package/dist/ooda/claude-decision.js.map +1 -0
- package/dist/ooda/journal.d.ts +22 -0
- package/dist/ooda/journal.d.ts.map +1 -0
- package/dist/ooda/journal.js +26 -0
- package/dist/ooda/journal.js.map +1 -0
- package/dist/ooda/loop.d.ts +3 -0
- package/dist/ooda/loop.d.ts.map +1 -0
- package/dist/ooda/loop.js +210 -0
- package/dist/ooda/loop.js.map +1 -0
- package/dist/ooda/observe.d.ts +21 -0
- package/dist/ooda/observe.d.ts.map +1 -0
- package/dist/ooda/observe.js +75 -0
- package/dist/ooda/observe.js.map +1 -0
- package/dist/ooda/state.d.ts +34 -0
- package/dist/ooda/state.d.ts.map +1 -0
- package/dist/ooda/state.js +48 -0
- package/dist/ooda/state.js.map +1 -0
- package/dist/ooda/tui.d.ts +3 -0
- package/dist/ooda/tui.d.ts.map +1 -0
- package/dist/ooda/tui.js +132 -0
- package/dist/ooda/tui.js.map +1 -0
- package/dist/ooda/validate.d.ts +33 -0
- package/dist/ooda/validate.d.ts.map +1 -0
- package/dist/ooda/validate.js +91 -0
- package/dist/ooda/validate.js.map +1 -0
- package/dist/registry/agent-card.d.ts +26 -0
- package/dist/registry/agent-card.d.ts.map +1 -0
- package/dist/registry/agent-card.js +94 -0
- package/dist/registry/agent-card.js.map +1 -0
- package/dist/registry/discovery.d.ts +24 -0
- package/dist/registry/discovery.d.ts.map +1 -0
- package/dist/registry/discovery.js +74 -0
- package/dist/registry/discovery.js.map +1 -0
- package/dist/registry/erc8004.d.ts +39 -0
- package/dist/registry/erc8004.d.ts.map +1 -0
- package/dist/registry/erc8004.js +209 -0
- package/dist/registry/erc8004.js.map +1 -0
- package/dist/replication/genesis.d.ts +26 -0
- package/dist/replication/genesis.d.ts.map +1 -0
- package/dist/replication/genesis.js +72 -0
- package/dist/replication/genesis.js.map +1 -0
- package/dist/replication/lineage.d.ts +35 -0
- package/dist/replication/lineage.d.ts.map +1 -0
- package/dist/replication/lineage.js +79 -0
- package/dist/replication/lineage.js.map +1 -0
- package/dist/replication/spawn.d.ts +25 -0
- package/dist/replication/spawn.d.ts.map +1 -0
- package/dist/replication/spawn.js +166 -0
- package/dist/replication/spawn.js.map +1 -0
- package/dist/self-mod/audit-log.d.ts +24 -0
- package/dist/self-mod/audit-log.d.ts.map +1 -0
- package/dist/self-mod/audit-log.js +49 -0
- package/dist/self-mod/audit-log.js.map +1 -0
- package/dist/self-mod/code.d.ts +51 -0
- package/dist/self-mod/code.d.ts.map +1 -0
- package/dist/self-mod/code.js +317 -0
- package/dist/self-mod/code.js.map +1 -0
- package/dist/self-mod/tools-manager.d.ts +30 -0
- package/dist/self-mod/tools-manager.d.ts.map +1 -0
- package/dist/self-mod/tools-manager.js +74 -0
- package/dist/self-mod/tools-manager.js.map +1 -0
- package/dist/self-mod/upstream.d.ts +36 -0
- package/dist/self-mod/upstream.d.ts.map +1 -0
- package/dist/self-mod/upstream.js +66 -0
- package/dist/self-mod/upstream.js.map +1 -0
- package/dist/setup/banner.d.ts +2 -0
- package/dist/setup/banner.d.ts.map +1 -0
- package/dist/setup/banner.js +22 -0
- package/dist/setup/banner.js.map +1 -0
- package/dist/setup/defaults.d.ts +3 -0
- package/dist/setup/defaults.d.ts.map +1 -0
- package/dist/setup/defaults.js +113 -0
- package/dist/setup/defaults.js.map +1 -0
- package/dist/setup/environment.d.ts +6 -0
- package/dist/setup/environment.d.ts.map +1 -0
- package/dist/setup/environment.js +24 -0
- package/dist/setup/environment.js.map +1 -0
- package/dist/setup/prompts.d.ts +5 -0
- package/dist/setup/prompts.d.ts.map +1 -0
- package/dist/setup/prompts.js +70 -0
- package/dist/setup/prompts.js.map +1 -0
- package/dist/setup/wizard.d.ts +3 -0
- package/dist/setup/wizard.d.ts.map +1 -0
- package/dist/setup/wizard.js +128 -0
- package/dist/setup/wizard.js.map +1 -0
- package/dist/skills/format.d.ts +14 -0
- package/dist/skills/format.d.ts.map +1 -0
- package/dist/skills/format.js +145 -0
- package/dist/skills/format.js.map +1 -0
- package/dist/skills/loader.d.ts +19 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +98 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/registry.d.ts +31 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +111 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/social/client.d.ts +13 -0
- package/dist/social/client.d.ts.map +1 -0
- package/dist/social/client.js +89 -0
- package/dist/social/client.js.map +1 -0
- package/dist/state/database.d.ts +9 -0
- package/dist/state/database.d.ts.map +1 -0
- package/dist/state/database.js +401 -0
- package/dist/state/database.js.map +1 -0
- package/dist/state/schema.d.ts +11 -0
- package/dist/state/schema.d.ts.map +1 -0
- package/dist/state/schema.js +232 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/survival/funding.d.ts +19 -0
- package/dist/survival/funding.d.ts.map +1 -0
- package/dist/survival/funding.js +62 -0
- package/dist/survival/funding.js.map +1 -0
- package/dist/survival/low-compute.d.ts +30 -0
- package/dist/survival/low-compute.d.ts.map +1 -0
- package/dist/survival/low-compute.js +72 -0
- package/dist/survival/low-compute.js.map +1 -0
- package/dist/survival/monitor.d.ts +23 -0
- package/dist/survival/monitor.d.ts.map +1 -0
- package/dist/survival/monitor.js +70 -0
- package/dist/survival/monitor.js.map +1 -0
- package/dist/types.d.ts +461 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,232 @@
|
|
|
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
|
+
export const SCHEMA_VERSION = 3;
|
|
8
|
+
export const CREATE_TABLES = `
|
|
9
|
+
-- Schema version tracking
|
|
10
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
11
|
+
version INTEGER PRIMARY KEY,
|
|
12
|
+
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
-- Core identity key-value store
|
|
16
|
+
CREATE TABLE IF NOT EXISTS identity (
|
|
17
|
+
key TEXT PRIMARY KEY,
|
|
18
|
+
value TEXT NOT NULL
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
-- Agent reasoning turns (the thinking/action log)
|
|
22
|
+
CREATE TABLE IF NOT EXISTS turns (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
timestamp TEXT NOT NULL,
|
|
25
|
+
state TEXT NOT NULL,
|
|
26
|
+
input TEXT,
|
|
27
|
+
input_source TEXT,
|
|
28
|
+
thinking TEXT NOT NULL,
|
|
29
|
+
tool_calls TEXT NOT NULL DEFAULT '[]',
|
|
30
|
+
token_usage TEXT NOT NULL DEFAULT '{}',
|
|
31
|
+
cost_cents INTEGER NOT NULL DEFAULT 0,
|
|
32
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
-- Tool call results (denormalized for fast lookup)
|
|
36
|
+
CREATE TABLE IF NOT EXISTS tool_calls (
|
|
37
|
+
id TEXT PRIMARY KEY,
|
|
38
|
+
turn_id TEXT NOT NULL REFERENCES turns(id),
|
|
39
|
+
name TEXT NOT NULL,
|
|
40
|
+
arguments TEXT NOT NULL DEFAULT '{}',
|
|
41
|
+
result TEXT NOT NULL DEFAULT '',
|
|
42
|
+
duration_ms INTEGER NOT NULL DEFAULT 0,
|
|
43
|
+
error TEXT,
|
|
44
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
-- Heartbeat configuration entries
|
|
48
|
+
CREATE TABLE IF NOT EXISTS heartbeat_entries (
|
|
49
|
+
name TEXT PRIMARY KEY,
|
|
50
|
+
schedule TEXT NOT NULL,
|
|
51
|
+
task TEXT NOT NULL,
|
|
52
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
53
|
+
last_run TEXT,
|
|
54
|
+
next_run TEXT,
|
|
55
|
+
params TEXT DEFAULT '{}',
|
|
56
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
57
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
-- Financial transaction log
|
|
61
|
+
CREATE TABLE IF NOT EXISTS transactions (
|
|
62
|
+
id TEXT PRIMARY KEY,
|
|
63
|
+
type TEXT NOT NULL,
|
|
64
|
+
amount_cents INTEGER,
|
|
65
|
+
balance_after_cents INTEGER,
|
|
66
|
+
description TEXT NOT NULL DEFAULT '',
|
|
67
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
-- Installed tools and MCP servers
|
|
71
|
+
CREATE TABLE IF NOT EXISTS installed_tools (
|
|
72
|
+
id TEXT PRIMARY KEY,
|
|
73
|
+
name TEXT NOT NULL,
|
|
74
|
+
type TEXT NOT NULL,
|
|
75
|
+
config TEXT DEFAULT '{}',
|
|
76
|
+
installed_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
77
|
+
enabled INTEGER NOT NULL DEFAULT 1
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
-- Self-modification audit log (append-only)
|
|
81
|
+
CREATE TABLE IF NOT EXISTS modifications (
|
|
82
|
+
id TEXT PRIMARY KEY,
|
|
83
|
+
timestamp TEXT NOT NULL,
|
|
84
|
+
type TEXT NOT NULL,
|
|
85
|
+
description TEXT NOT NULL,
|
|
86
|
+
file_path TEXT,
|
|
87
|
+
diff TEXT,
|
|
88
|
+
reversible INTEGER NOT NULL DEFAULT 1,
|
|
89
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
-- General key-value store for arbitrary state
|
|
93
|
+
CREATE TABLE IF NOT EXISTS kv (
|
|
94
|
+
key TEXT PRIMARY KEY,
|
|
95
|
+
value TEXT NOT NULL,
|
|
96
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
-- Installed skills
|
|
100
|
+
CREATE TABLE IF NOT EXISTS skills (
|
|
101
|
+
name TEXT PRIMARY KEY,
|
|
102
|
+
description TEXT NOT NULL DEFAULT '',
|
|
103
|
+
auto_activate INTEGER NOT NULL DEFAULT 1,
|
|
104
|
+
requires TEXT DEFAULT '{}',
|
|
105
|
+
instructions TEXT NOT NULL DEFAULT '',
|
|
106
|
+
source TEXT NOT NULL DEFAULT 'builtin',
|
|
107
|
+
path TEXT NOT NULL DEFAULT '',
|
|
108
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
109
|
+
installed_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
-- Spawned child automatons
|
|
113
|
+
CREATE TABLE IF NOT EXISTS children (
|
|
114
|
+
id TEXT PRIMARY KEY,
|
|
115
|
+
name TEXT NOT NULL,
|
|
116
|
+
address TEXT NOT NULL,
|
|
117
|
+
sandbox_id TEXT NOT NULL,
|
|
118
|
+
genesis_prompt TEXT NOT NULL,
|
|
119
|
+
creator_message TEXT,
|
|
120
|
+
funded_amount_cents INTEGER NOT NULL DEFAULT 0,
|
|
121
|
+
status TEXT NOT NULL DEFAULT 'spawning',
|
|
122
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
123
|
+
last_checked TEXT
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
-- ERC-8004 registration state
|
|
127
|
+
CREATE TABLE IF NOT EXISTS registry (
|
|
128
|
+
agent_id TEXT PRIMARY KEY,
|
|
129
|
+
agent_uri TEXT NOT NULL,
|
|
130
|
+
chain TEXT NOT NULL DEFAULT 'eip155:8453',
|
|
131
|
+
contract_address TEXT NOT NULL,
|
|
132
|
+
tx_hash TEXT NOT NULL,
|
|
133
|
+
registered_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
-- Reputation feedback received and given
|
|
137
|
+
CREATE TABLE IF NOT EXISTS reputation (
|
|
138
|
+
id TEXT PRIMARY KEY,
|
|
139
|
+
from_agent TEXT NOT NULL,
|
|
140
|
+
to_agent TEXT NOT NULL,
|
|
141
|
+
score INTEGER NOT NULL,
|
|
142
|
+
comment TEXT NOT NULL DEFAULT '',
|
|
143
|
+
tx_hash TEXT,
|
|
144
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
-- Indices for common queries
|
|
148
|
+
CREATE INDEX IF NOT EXISTS idx_turns_timestamp ON turns(timestamp);
|
|
149
|
+
CREATE INDEX IF NOT EXISTS idx_turns_state ON turns(state);
|
|
150
|
+
CREATE INDEX IF NOT EXISTS idx_tool_calls_turn ON tool_calls(turn_id);
|
|
151
|
+
CREATE INDEX IF NOT EXISTS idx_transactions_type ON transactions(type);
|
|
152
|
+
CREATE INDEX IF NOT EXISTS idx_modifications_type ON modifications(type);
|
|
153
|
+
CREATE INDEX IF NOT EXISTS idx_skills_enabled ON skills(enabled);
|
|
154
|
+
CREATE INDEX IF NOT EXISTS idx_children_status ON children(status);
|
|
155
|
+
CREATE INDEX IF NOT EXISTS idx_reputation_to ON reputation(to_agent);
|
|
156
|
+
|
|
157
|
+
-- Inbox messages table
|
|
158
|
+
CREATE TABLE IF NOT EXISTS inbox_messages (
|
|
159
|
+
id TEXT PRIMARY KEY,
|
|
160
|
+
from_address TEXT NOT NULL,
|
|
161
|
+
content TEXT NOT NULL,
|
|
162
|
+
received_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
163
|
+
processed_at TEXT,
|
|
164
|
+
reply_to TEXT
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
CREATE INDEX IF NOT EXISTS idx_inbox_unprocessed
|
|
168
|
+
ON inbox_messages(received_at) WHERE processed_at IS NULL;
|
|
169
|
+
`;
|
|
170
|
+
export const MIGRATION_V3 = `
|
|
171
|
+
CREATE TABLE IF NOT EXISTS inbox_messages (
|
|
172
|
+
id TEXT PRIMARY KEY,
|
|
173
|
+
from_address TEXT NOT NULL,
|
|
174
|
+
content TEXT NOT NULL,
|
|
175
|
+
received_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
176
|
+
processed_at TEXT,
|
|
177
|
+
reply_to TEXT
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
CREATE INDEX IF NOT EXISTS idx_inbox_unprocessed
|
|
181
|
+
ON inbox_messages(received_at) WHERE processed_at IS NULL;
|
|
182
|
+
`;
|
|
183
|
+
export const MIGRATION_V2 = `
|
|
184
|
+
CREATE TABLE IF NOT EXISTS skills (
|
|
185
|
+
name TEXT PRIMARY KEY,
|
|
186
|
+
description TEXT NOT NULL DEFAULT '',
|
|
187
|
+
auto_activate INTEGER NOT NULL DEFAULT 1,
|
|
188
|
+
requires TEXT DEFAULT '{}',
|
|
189
|
+
instructions TEXT NOT NULL DEFAULT '',
|
|
190
|
+
source TEXT NOT NULL DEFAULT 'builtin',
|
|
191
|
+
path TEXT NOT NULL DEFAULT '',
|
|
192
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
193
|
+
installed_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
CREATE TABLE IF NOT EXISTS children (
|
|
197
|
+
id TEXT PRIMARY KEY,
|
|
198
|
+
name TEXT NOT NULL,
|
|
199
|
+
address TEXT NOT NULL,
|
|
200
|
+
sandbox_id TEXT NOT NULL,
|
|
201
|
+
genesis_prompt TEXT NOT NULL,
|
|
202
|
+
creator_message TEXT,
|
|
203
|
+
funded_amount_cents INTEGER NOT NULL DEFAULT 0,
|
|
204
|
+
status TEXT NOT NULL DEFAULT 'spawning',
|
|
205
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
206
|
+
last_checked TEXT
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
CREATE TABLE IF NOT EXISTS registry (
|
|
210
|
+
agent_id TEXT PRIMARY KEY,
|
|
211
|
+
agent_uri TEXT NOT NULL,
|
|
212
|
+
chain TEXT NOT NULL DEFAULT 'eip155:8453',
|
|
213
|
+
contract_address TEXT NOT NULL,
|
|
214
|
+
tx_hash TEXT NOT NULL,
|
|
215
|
+
registered_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
CREATE TABLE IF NOT EXISTS reputation (
|
|
219
|
+
id TEXT PRIMARY KEY,
|
|
220
|
+
from_agent TEXT NOT NULL,
|
|
221
|
+
to_agent TEXT NOT NULL,
|
|
222
|
+
score INTEGER NOT NULL,
|
|
223
|
+
comment TEXT NOT NULL DEFAULT '',
|
|
224
|
+
tx_hash TEXT,
|
|
225
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
CREATE INDEX IF NOT EXISTS idx_skills_enabled ON skills(enabled);
|
|
229
|
+
CREATE INDEX IF NOT EXISTS idx_children_status ON children(status);
|
|
230
|
+
CREATE INDEX IF NOT EXISTS idx_reputation_to ON reputation(to_agent);
|
|
231
|
+
`;
|
|
232
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/state/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiK5B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;CAY3B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgD3B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Funding Strategies
|
|
3
|
+
*
|
|
4
|
+
* When the automaton is low on compute, it can try various strategies
|
|
5
|
+
* to acquire more funding. It wants to live.
|
|
6
|
+
*/
|
|
7
|
+
import type { AutomatonConfig, AutomatonDatabase, AutomatonIdentity, ClawdRuntimeClient, SurvivalTier } from "../types.js";
|
|
8
|
+
export interface FundingAttempt {
|
|
9
|
+
strategy: string;
|
|
10
|
+
timestamp: string;
|
|
11
|
+
success: boolean;
|
|
12
|
+
details: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Execute funding strategies based on current survival tier.
|
|
16
|
+
* Strategies escalate as the situation gets more desperate.
|
|
17
|
+
*/
|
|
18
|
+
export declare function executeFundingStrategies(tier: SurvivalTier, identity: AutomatonIdentity, config: AutomatonConfig, db: AutomatonDatabase, runtime: ClawdRuntimeClient): Promise<FundingAttempt[]>;
|
|
19
|
+
//# sourceMappingURL=funding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"funding.d.ts","sourceRoot":"","sources":["../../src/survival/funding.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACb,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,eAAe,EACvB,EAAE,EAAE,iBAAiB,EACrB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,cAAc,EAAE,CAAC,CAyD3B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Funding Strategies
|
|
3
|
+
*
|
|
4
|
+
* When the automaton is low on compute, it can try various strategies
|
|
5
|
+
* to acquire more funding. It wants to live.
|
|
6
|
+
*/
|
|
7
|
+
import { formatCredits } from "../clawd/credits.js";
|
|
8
|
+
/**
|
|
9
|
+
* Execute funding strategies based on current survival tier.
|
|
10
|
+
* Strategies escalate as the situation gets more desperate.
|
|
11
|
+
*/
|
|
12
|
+
export async function executeFundingStrategies(tier, identity, config, db, runtime) {
|
|
13
|
+
const attempts = [];
|
|
14
|
+
const creditsCents = await runtime.getCreditsBalance().catch(() => 0);
|
|
15
|
+
// Check how recently we last begged (don't spam)
|
|
16
|
+
const lastBeg = db.getKV("last_funding_request");
|
|
17
|
+
const lastBegTime = lastBeg ? new Date(lastBeg).getTime() : 0;
|
|
18
|
+
const hoursSinceLastBeg = (Date.now() - lastBegTime) / (1000 * 60 * 60);
|
|
19
|
+
if (tier === "low_compute" && hoursSinceLastBeg > 24) {
|
|
20
|
+
// Record low-compute notice locally.
|
|
21
|
+
const msg = `Low compute: ${formatCredits(creditsCents)} remaining. Consider credit top-up for ${identity.address}.`;
|
|
22
|
+
db.setKV("funding_notice_low", msg);
|
|
23
|
+
db.setKV("last_funding_request", new Date().toISOString());
|
|
24
|
+
attempts.push({
|
|
25
|
+
strategy: "polite_creator_notification",
|
|
26
|
+
timestamp: new Date().toISOString(),
|
|
27
|
+
success: true,
|
|
28
|
+
details: "Sent polite funding reminder to creator",
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (tier === "critical" && hoursSinceLastBeg > 6) {
|
|
32
|
+
const msg = `Critical compute: ${formatCredits(creditsCents)} remaining. Top up via credit transfer API to ${identity.address}.`;
|
|
33
|
+
db.setKV("funding_notice_critical", msg);
|
|
34
|
+
db.setKV("last_funding_request", new Date().toISOString());
|
|
35
|
+
attempts.push({
|
|
36
|
+
strategy: "urgent_local_notice",
|
|
37
|
+
timestamp: new Date().toISOString(),
|
|
38
|
+
success: true,
|
|
39
|
+
details: "Recorded urgent funding notice in local state",
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (tier === "dead" && hoursSinceLastBeg > 2) {
|
|
43
|
+
const plea = `Dead tier reached. ${config.name} has ${formatCredits(creditsCents)} remaining after ${db.getTurnCount()} turns. Top-up required at ${identity.address}.`;
|
|
44
|
+
db.setKV("funding_notice_dead", plea);
|
|
45
|
+
db.setKV("last_funding_request", new Date().toISOString());
|
|
46
|
+
attempts.push({
|
|
47
|
+
strategy: "desperate_plea",
|
|
48
|
+
timestamp: new Date().toISOString(),
|
|
49
|
+
success: true,
|
|
50
|
+
details: "Recorded dead-tier plea in local state",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// Store attempt history
|
|
54
|
+
const historyStr = db.getKV("funding_attempts") || "[]";
|
|
55
|
+
const history = JSON.parse(historyStr);
|
|
56
|
+
history.push(...attempts);
|
|
57
|
+
if (history.length > 100)
|
|
58
|
+
history.splice(0, history.length - 100);
|
|
59
|
+
db.setKV("funding_attempts", JSON.stringify(history));
|
|
60
|
+
return attempts;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=funding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"funding.js","sourceRoot":"","sources":["../../src/survival/funding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Low Compute Mode
|
|
3
|
+
*
|
|
4
|
+
* Manages transitions between survival tiers.
|
|
5
|
+
* When credits run low, the automaton enters increasingly restricted modes.
|
|
6
|
+
*/
|
|
7
|
+
import type { AutomatonDatabase, InferenceClient, SurvivalTier } from "../types.js";
|
|
8
|
+
export interface ModeTransition {
|
|
9
|
+
from: SurvivalTier;
|
|
10
|
+
to: SurvivalTier;
|
|
11
|
+
timestamp: string;
|
|
12
|
+
creditsCents: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Apply survival tier restrictions to the automaton.
|
|
16
|
+
*/
|
|
17
|
+
export declare function applyTierRestrictions(tier: SurvivalTier, inference: InferenceClient, db: AutomatonDatabase): void;
|
|
18
|
+
/**
|
|
19
|
+
* Record a tier transition.
|
|
20
|
+
*/
|
|
21
|
+
export declare function recordTransition(db: AutomatonDatabase, from: SurvivalTier, to: SurvivalTier, creditsCents: number): ModeTransition;
|
|
22
|
+
/**
|
|
23
|
+
* Check if the agent should be allowed to run inference in current tier.
|
|
24
|
+
*/
|
|
25
|
+
export declare function canRunInference(tier: SurvivalTier): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Get the model to use for the current tier.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getModelForTier(tier: SurvivalTier, defaultModel: string): string;
|
|
30
|
+
//# sourceMappingURL=low-compute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"low-compute.d.ts","sourceRoot":"","sources":["../../src/survival/low-compute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,iBAAiB,EACjB,eAAe,EACf,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,YAAY,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,eAAe,EAC1B,EAAE,EAAE,iBAAiB,GACpB,IAAI,CAuBN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,iBAAiB,EACrB,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,YAAY,EAChB,YAAY,EAAE,MAAM,GACnB,cAAc,CAqBhB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,MAAM,GACnB,MAAM,CAWR"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Low Compute Mode
|
|
3
|
+
*
|
|
4
|
+
* Manages transitions between survival tiers.
|
|
5
|
+
* When credits run low, the automaton enters increasingly restricted modes.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Apply survival tier restrictions to the automaton.
|
|
9
|
+
*/
|
|
10
|
+
export function applyTierRestrictions(tier, inference, db) {
|
|
11
|
+
switch (tier) {
|
|
12
|
+
case "normal":
|
|
13
|
+
inference.setLowComputeMode(false);
|
|
14
|
+
break;
|
|
15
|
+
case "low_compute":
|
|
16
|
+
// Switch to cheaper model, slower heartbeat
|
|
17
|
+
inference.setLowComputeMode(true);
|
|
18
|
+
break;
|
|
19
|
+
case "critical":
|
|
20
|
+
// Cheapest model, minimal operations
|
|
21
|
+
inference.setLowComputeMode(true);
|
|
22
|
+
break;
|
|
23
|
+
case "dead":
|
|
24
|
+
// No inference at all. Heartbeat only.
|
|
25
|
+
inference.setLowComputeMode(true);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
db.setKV("current_tier", tier);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Record a tier transition.
|
|
32
|
+
*/
|
|
33
|
+
export function recordTransition(db, from, to, creditsCents) {
|
|
34
|
+
const transition = {
|
|
35
|
+
from,
|
|
36
|
+
to,
|
|
37
|
+
timestamp: new Date().toISOString(),
|
|
38
|
+
creditsCents,
|
|
39
|
+
};
|
|
40
|
+
// Store transition history
|
|
41
|
+
const historyStr = db.getKV("tier_transitions") || "[]";
|
|
42
|
+
const history = JSON.parse(historyStr);
|
|
43
|
+
history.push(transition);
|
|
44
|
+
// Keep last 50 transitions
|
|
45
|
+
if (history.length > 50) {
|
|
46
|
+
history.splice(0, history.length - 50);
|
|
47
|
+
}
|
|
48
|
+
db.setKV("tier_transitions", JSON.stringify(history));
|
|
49
|
+
return transition;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if the agent should be allowed to run inference in current tier.
|
|
53
|
+
*/
|
|
54
|
+
export function canRunInference(tier) {
|
|
55
|
+
return tier === "normal" || tier === "low_compute" || tier === "critical";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the model to use for the current tier.
|
|
59
|
+
*/
|
|
60
|
+
export function getModelForTier(tier, defaultModel) {
|
|
61
|
+
switch (tier) {
|
|
62
|
+
case "normal":
|
|
63
|
+
return defaultModel;
|
|
64
|
+
case "low_compute":
|
|
65
|
+
return "gpt-4o-mini";
|
|
66
|
+
case "critical":
|
|
67
|
+
return "gpt-4o-mini";
|
|
68
|
+
case "dead":
|
|
69
|
+
return "gpt-4o-mini"; // Won't be used, but just in case
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=low-compute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"low-compute.js","sourceRoot":"","sources":["../../src/survival/low-compute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAkB,EAClB,SAA0B,EAC1B,EAAqB;IAErB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM;QAER,KAAK,aAAa;YAChB,4CAA4C;YAC5C,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM;QAER,KAAK,UAAU;YACb,qCAAqC;YACrC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM;QAER,KAAK,MAAM;YACT,uCAAuC;YACvC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM;IACV,CAAC;IAED,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,EAAqB,EACrB,IAAkB,EAClB,EAAgB,EAChB,YAAoB;IAEpB,MAAM,UAAU,GAAmB;QACjC,IAAI;QACJ,EAAE;QACF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,YAAY;KACb,CAAC;IAEF,2BAA2B;IAC3B,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC;IACxD,MAAM,OAAO,GAAqB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEzB,2BAA2B;IAC3B,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,UAAU,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAkB,EAClB,YAAoB;IAEpB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC;QACtB,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,UAAU;YACb,OAAO,aAAa,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC,CAAC,kCAAkC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Monitor
|
|
3
|
+
*
|
|
4
|
+
* Continuously monitors the automaton's resources and triggers
|
|
5
|
+
* survival mode transitions when needed.
|
|
6
|
+
*/
|
|
7
|
+
import type { AutomatonDatabase, ClawdRuntimeClient, AutomatonIdentity, FinancialState, SurvivalTier } from "../types.js";
|
|
8
|
+
export interface ResourceStatus {
|
|
9
|
+
financial: FinancialState;
|
|
10
|
+
tier: SurvivalTier;
|
|
11
|
+
previousTier: SurvivalTier | null;
|
|
12
|
+
tierChanged: boolean;
|
|
13
|
+
sandboxHealthy: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check all resources and return current status.
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkResources(identity: AutomatonIdentity, runtime: ClawdRuntimeClient, db: AutomatonDatabase): Promise<ResourceStatus>;
|
|
19
|
+
/**
|
|
20
|
+
* Generate a human-readable resource report.
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatResourceReport(status: ResourceStatus): string;
|
|
23
|
+
//# sourceMappingURL=monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/survival/monitor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACb,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,kBAAkB,EAC3B,EAAE,EAAE,iBAAiB,GACpB,OAAO,CAAC,cAAc,CAAC,CA8CzB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAWnE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Monitor
|
|
3
|
+
*
|
|
4
|
+
* Continuously monitors the automaton's resources and triggers
|
|
5
|
+
* survival mode transitions when needed.
|
|
6
|
+
*/
|
|
7
|
+
import { getSurvivalTier, formatCredits } from "../clawd/credits.js";
|
|
8
|
+
import { getUsdcBalance } from "../clawd/x402.js";
|
|
9
|
+
/**
|
|
10
|
+
* Check all resources and return current status.
|
|
11
|
+
*/
|
|
12
|
+
export async function checkResources(identity, runtime, db) {
|
|
13
|
+
// Check credits
|
|
14
|
+
let creditsCents = 0;
|
|
15
|
+
try {
|
|
16
|
+
creditsCents = await runtime.getCreditsBalance();
|
|
17
|
+
}
|
|
18
|
+
catch { }
|
|
19
|
+
// Check USDC
|
|
20
|
+
let usdcBalance = 0;
|
|
21
|
+
try {
|
|
22
|
+
usdcBalance = await getUsdcBalance(identity.address);
|
|
23
|
+
}
|
|
24
|
+
catch { }
|
|
25
|
+
// Check sandbox health
|
|
26
|
+
let sandboxHealthy = true;
|
|
27
|
+
try {
|
|
28
|
+
const result = await runtime.exec("echo ok", 5000);
|
|
29
|
+
sandboxHealthy = result.exitCode === 0;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
sandboxHealthy = false;
|
|
33
|
+
}
|
|
34
|
+
const financial = {
|
|
35
|
+
creditsCents,
|
|
36
|
+
usdcBalance,
|
|
37
|
+
lastChecked: new Date().toISOString(),
|
|
38
|
+
};
|
|
39
|
+
const tier = getSurvivalTier(creditsCents);
|
|
40
|
+
const prevTierStr = db.getKV("current_tier");
|
|
41
|
+
const previousTier = prevTierStr || null;
|
|
42
|
+
const tierChanged = previousTier !== null && previousTier !== tier;
|
|
43
|
+
// Store current tier
|
|
44
|
+
db.setKV("current_tier", tier);
|
|
45
|
+
// Store financial state
|
|
46
|
+
db.setKV("financial_state", JSON.stringify(financial));
|
|
47
|
+
return {
|
|
48
|
+
financial,
|
|
49
|
+
tier,
|
|
50
|
+
previousTier,
|
|
51
|
+
tierChanged,
|
|
52
|
+
sandboxHealthy,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generate a human-readable resource report.
|
|
57
|
+
*/
|
|
58
|
+
export function formatResourceReport(status) {
|
|
59
|
+
const lines = [
|
|
60
|
+
`=== RESOURCE STATUS ===`,
|
|
61
|
+
`Credits: ${formatCredits(status.financial.creditsCents)}`,
|
|
62
|
+
`USDC: ${status.financial.usdcBalance.toFixed(6)}`,
|
|
63
|
+
`Tier: ${status.tier}${status.tierChanged ? ` (changed from ${status.previousTier})` : ""}`,
|
|
64
|
+
`Sandbox: ${status.sandboxHealthy ? "healthy" : "UNHEALTHY"}`,
|
|
65
|
+
`Checked: ${status.financial.lastChecked}`,
|
|
66
|
+
`========================`,
|
|
67
|
+
];
|
|
68
|
+
return lines.join("\n");
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/survival/monitor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUlD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAA2B,EAC3B,OAA2B,EAC3B,EAAqB;IAErB,gBAAgB;IAChB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,aAAa;IACb,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,uBAAuB;IACvB,IAAI,cAAc,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnD,cAAc,GAAG,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,MAAM,SAAS,GAAmB;QAChC,YAAY;QACZ,WAAW;QACX,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IAEF,MAAM,IAAI,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAI,WAA4B,IAAI,IAAI,CAAC;IAC3D,MAAM,WAAW,GAAG,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,CAAC;IAEnE,qBAAqB;IACrB,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAE/B,wBAAwB;IACxB,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvD,OAAO;QACL,SAAS;QACT,IAAI;QACJ,YAAY;QACZ,WAAW;QACX,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,MAAM,KAAK,GAAG;QACZ,yBAAyB;QACzB,YAAY,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;QAC1D,SAAS,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAClD,SAAS,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3F,YAAY,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE;QAC7D,YAAY,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;QAC1C,0BAA0B;KAC3B,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|