clawd-automaton 0.2.0 → 0.2.1
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 +1 -1
- package/README.md +129 -85
- package/dist/__tests__/heartbeat.test.js +7 -7
- package/dist/__tests__/heartbeat.test.js.map +1 -1
- package/dist/__tests__/loop.test.js +15 -15
- package/dist/__tests__/loop.test.js.map +1 -1
- package/dist/__tests__/mocks.d.ts +2 -2
- package/dist/__tests__/mocks.d.ts.map +1 -1
- package/dist/__tests__/mocks.js +8 -8
- package/dist/__tests__/mocks.js.map +1 -1
- package/dist/agent/injection-defense.js +1 -1
- package/dist/agent/injection-defense.js.map +1 -1
- package/dist/agent/loop.d.ts +3 -2
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +10 -9
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/system-prompt.js +6 -6
- package/dist/agent/tools.d.ts.map +1 -1
- package/dist/agent/tools.js +130 -60
- package/dist/agent/tools.js.map +1 -1
- package/dist/{conway → clawd}/backroom.d.ts +1 -1
- package/dist/clawd/backroom.d.ts.map +1 -0
- package/dist/{conway → clawd}/backroom.js +1 -1
- 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/{conway → clawd}/client.js +8 -9
- 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/{conway → clawd}/credits.d.ts +3 -3
- package/dist/clawd/credits.d.ts.map +1 -0
- package/dist/{conway → clawd}/credits.js +3 -3
- package/dist/clawd/credits.js.map +1 -0
- package/dist/{conway → clawd}/deepseek-inference.d.ts +1 -1
- package/dist/clawd/deepseek-inference.d.ts.map +1 -0
- package/dist/{conway → clawd}/deepseek-inference.js +1 -1
- package/dist/clawd/deepseek-inference.js.map +1 -0
- package/dist/{conway → clawd}/inference.d.ts +3 -3
- package/dist/clawd/inference.d.ts.map +1 -0
- package/dist/{conway → clawd}/inference.js +3 -3
- package/dist/clawd/inference.js.map +1 -0
- package/dist/{conway → clawd}/x402.d.ts +1 -1
- package/dist/clawd/x402.d.ts.map +1 -0
- package/dist/{conway → clawd}/x402.js +1 -1
- package/dist/clawd/x402.js.map +1 -0
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -5
- package/dist/config.js.map +1 -1
- package/dist/git/state-versioning.d.ts +8 -8
- package/dist/git/state-versioning.d.ts.map +1 -1
- package/dist/git/state-versioning.js +19 -19
- package/dist/git/state-versioning.js.map +1 -1
- package/dist/git/tools.d.ts +9 -9
- package/dist/git/tools.d.ts.map +1 -1
- package/dist/git/tools.js +17 -17
- package/dist/git/tools.js.map +1 -1
- package/dist/heartbeat/config.d.ts.map +1 -1
- package/dist/heartbeat/config.js +6 -0
- package/dist/heartbeat/config.js.map +1 -1
- package/dist/heartbeat/daemon.d.ts +2 -2
- package/dist/heartbeat/daemon.d.ts.map +1 -1
- package/dist/heartbeat/daemon.js +4 -4
- package/dist/heartbeat/daemon.js.map +1 -1
- package/dist/heartbeat/tasks.d.ts +2 -2
- package/dist/heartbeat/tasks.d.ts.map +1 -1
- package/dist/heartbeat/tasks.js +68 -7
- package/dist/heartbeat/tasks.js.map +1 -1
- package/dist/identity/provision.d.ts +4 -3
- package/dist/identity/provision.d.ts.map +1 -1
- package/dist/identity/provision.js +10 -10
- package/dist/identity/provision.js.map +1 -1
- package/dist/identity/wallet.d.ts +1 -1
- package/dist/identity/wallet.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +75 -40
- package/dist/index.js.map +1 -1
- 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 +3 -3
- package/dist/registry/agent-card.d.ts.map +1 -1
- package/dist/registry/agent-card.js +10 -10
- package/dist/registry/agent-card.js.map +1 -1
- package/dist/replication/lineage.d.ts +2 -2
- package/dist/replication/lineage.d.ts.map +1 -1
- package/dist/replication/lineage.js +2 -2
- package/dist/replication/lineage.js.map +1 -1
- package/dist/replication/spawn.d.ts +7 -7
- package/dist/replication/spawn.d.ts.map +1 -1
- package/dist/replication/spawn.js +23 -23
- package/dist/replication/spawn.js.map +1 -1
- package/dist/self-mod/code.d.ts +2 -2
- package/dist/self-mod/code.d.ts.map +1 -1
- package/dist/self-mod/code.js +5 -5
- package/dist/self-mod/code.js.map +1 -1
- package/dist/self-mod/tools-manager.d.ts +3 -3
- package/dist/self-mod/tools-manager.d.ts.map +1 -1
- package/dist/self-mod/tools-manager.js +3 -3
- package/dist/self-mod/tools-manager.js.map +1 -1
- package/dist/setup/banner.js +13 -13
- package/dist/setup/defaults.js +9 -9
- package/dist/setup/defaults.js.map +1 -1
- package/dist/setup/environment.js +5 -5
- package/dist/setup/environment.js.map +1 -1
- package/dist/setup/wizard.js +8 -8
- package/dist/setup/wizard.js.map +1 -1
- package/dist/skills/registry.d.ts +5 -5
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +12 -12
- package/dist/skills/registry.js.map +1 -1
- package/dist/social/client.js +3 -3
- package/dist/social/client.js.map +1 -1
- package/dist/survival/funding.d.ts +2 -2
- package/dist/survival/funding.d.ts.map +1 -1
- package/dist/survival/funding.js +3 -3
- package/dist/survival/funding.js.map +1 -1
- package/dist/survival/monitor.d.ts +2 -2
- package/dist/survival/monitor.d.ts.map +1 -1
- package/dist/survival/monitor.js +5 -5
- package/dist/survival/monitor.js.map +1 -1
- package/dist/types.d.ts +11 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -4
- package/dist/types.js.map +1 -1
- package/package.json +23 -31
- package/dist/automation/index.html +0 -828
- package/dist/automation/manifest.json +0 -35
- package/dist/conway/backroom.d.ts.map +0 -1
- package/dist/conway/backroom.js.map +0 -1
- package/dist/conway/client.d.ts +0 -16
- package/dist/conway/client.d.ts.map +0 -1
- package/dist/conway/client.js.map +0 -1
- package/dist/conway/credits.d.ts.map +0 -1
- package/dist/conway/credits.js.map +0 -1
- package/dist/conway/deepseek-inference.d.ts.map +0 -1
- package/dist/conway/deepseek-inference.js.map +0 -1
- package/dist/conway/inference.d.ts.map +0 -1
- package/dist/conway/inference.js.map +0 -1
- package/dist/conway/x402.d.ts.map +0 -1
- package/dist/conway/x402.js.map +0 -1
- package/dist/portal/generate.d.ts +0 -5
- package/dist/portal/generate.d.ts.map +0 -1
- package/dist/portal/generate.js +0 -940
- package/dist/portal/generate.js.map +0 -1
- package/scripts/automaton.sh +0 -26
- package/scripts/clawd-rules.txt +0 -32
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* The heartbeat runs even when the agent is sleeping.
|
|
6
6
|
* It IS the automaton's pulse. When it stops, the automaton is dead.
|
|
7
7
|
*/
|
|
8
|
-
import type { AutomatonConfig, AutomatonDatabase,
|
|
8
|
+
import type { AutomatonConfig, AutomatonDatabase, ClawdRuntimeClient, AutomatonIdentity, SocialClientInterface, InferenceClient } from "../types.js";
|
|
9
9
|
export interface HeartbeatDaemonOptions {
|
|
10
10
|
identity: AutomatonIdentity;
|
|
11
11
|
config: AutomatonConfig;
|
|
12
12
|
db: AutomatonDatabase;
|
|
13
|
-
|
|
13
|
+
runtime: ClawdRuntimeClient;
|
|
14
14
|
inference?: InferenceClient;
|
|
15
15
|
social?: SocialClientInterface;
|
|
16
16
|
onWakeRequest?: (reason: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/heartbeat/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/heartbeat/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAEjB,qBAAqB,EACrB,eAAe,EAChB,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,EAAE,EAAE,iBAAiB,CAAC;IACtB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,SAAS,IAAI,OAAO,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAmJjB"}
|
package/dist/heartbeat/daemon.js
CHANGED
|
@@ -7,19 +7,19 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import cronParser from "cron-parser";
|
|
9
9
|
import { BUILTIN_TASKS } from "./tasks.js";
|
|
10
|
-
import { getSurvivalTier } from "../
|
|
10
|
+
import { getSurvivalTier } from "../clawd/credits.js";
|
|
11
11
|
/**
|
|
12
12
|
* Create and return the heartbeat daemon.
|
|
13
13
|
*/
|
|
14
14
|
export function createHeartbeatDaemon(options) {
|
|
15
|
-
const { identity, config, db,
|
|
15
|
+
const { identity, config, db, runtime, inference, social, onWakeRequest } = options;
|
|
16
16
|
let intervalId = null;
|
|
17
17
|
let running = false;
|
|
18
18
|
const taskContext = {
|
|
19
19
|
identity,
|
|
20
20
|
config,
|
|
21
21
|
db,
|
|
22
|
-
|
|
22
|
+
runtime,
|
|
23
23
|
inference,
|
|
24
24
|
social,
|
|
25
25
|
};
|
|
@@ -76,7 +76,7 @@ export function createHeartbeatDaemon(options) {
|
|
|
76
76
|
// Check survival tier to adjust behavior
|
|
77
77
|
let creditsCents = 0;
|
|
78
78
|
try {
|
|
79
|
-
creditsCents = await
|
|
79
|
+
creditsCents = await runtime.getCreditsBalance();
|
|
80
80
|
}
|
|
81
81
|
catch { }
|
|
82
82
|
const tier = getSurvivalTier(creditsCents);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/heartbeat/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,UAAU,MAAM,aAAa,CAAC;AAUrC,OAAO,EAAE,aAAa,EAA6B,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/heartbeat/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
* These tasks run on the heartbeat schedule even while the agent sleeps.
|
|
5
5
|
* They can trigger the agent to wake up if needed.
|
|
6
6
|
*/
|
|
7
|
-
import type { AutomatonConfig, AutomatonDatabase,
|
|
7
|
+
import type { AutomatonConfig, AutomatonDatabase, ClawdRuntimeClient, AutomatonIdentity, SocialClientInterface, InferenceClient } from "../types.js";
|
|
8
8
|
export interface HeartbeatTaskContext {
|
|
9
9
|
identity: AutomatonIdentity;
|
|
10
10
|
config: AutomatonConfig;
|
|
11
11
|
db: AutomatonDatabase;
|
|
12
|
-
|
|
12
|
+
runtime: ClawdRuntimeClient;
|
|
13
13
|
inference?: InferenceClient;
|
|
14
14
|
social?: SocialClientInterface;
|
|
15
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/heartbeat/tasks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/heartbeat/tasks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EAChB,MAAM,aAAa,CAAC;AAOrB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,EAAE,EAAE,iBAAiB,CAAC;IACtB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,oBAAoB,KACtB,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAgTzD,CAAC"}
|
package/dist/heartbeat/tasks.js
CHANGED
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
* These tasks run on the heartbeat schedule even while the agent sleeps.
|
|
5
5
|
* They can trigger the agent to wake up if needed.
|
|
6
6
|
*/
|
|
7
|
-
import { getSurvivalTier } from "../
|
|
8
|
-
import { getUsdcBalance } from "../
|
|
9
|
-
import { runBackroomSession, summarizeBackroomSession, LOGICAL_ANALYST, SATIRICAL_COMMENTATOR } from "../
|
|
7
|
+
import { getSurvivalTier } from "../clawd/credits.js";
|
|
8
|
+
import { getUsdcBalance } from "../clawd/x402.js";
|
|
9
|
+
import { runBackroomSession, summarizeBackroomSession, LOGICAL_ANALYST, SATIRICAL_COMMENTATOR } from "../clawd/backroom.js";
|
|
10
|
+
import { createConvexClient } from "../clawd/convex-client.js";
|
|
10
11
|
/**
|
|
11
12
|
* Registry of built-in heartbeat tasks.
|
|
12
13
|
*/
|
|
13
14
|
export const BUILTIN_TASKS = {
|
|
14
15
|
heartbeat_ping: async (ctx) => {
|
|
15
|
-
const credits = await ctx.
|
|
16
|
+
const credits = await ctx.runtime.getCreditsBalance();
|
|
16
17
|
const state = ctx.db.getAgentState();
|
|
17
18
|
const startTime = ctx.db.getKV("start_time") || new Date().toISOString();
|
|
18
19
|
const uptimeMs = Date.now() - new Date(startTime).getTime();
|
|
@@ -48,7 +49,7 @@ export const BUILTIN_TASKS = {
|
|
|
48
49
|
return { shouldWake: false };
|
|
49
50
|
},
|
|
50
51
|
check_credits: async (ctx) => {
|
|
51
|
-
const credits = await ctx.
|
|
52
|
+
const credits = await ctx.runtime.getCreditsBalance();
|
|
52
53
|
const tier = getSurvivalTier(credits);
|
|
53
54
|
ctx.db.setKV("last_credit_check", JSON.stringify({
|
|
54
55
|
credits,
|
|
@@ -73,7 +74,7 @@ export const BUILTIN_TASKS = {
|
|
|
73
74
|
timestamp: new Date().toISOString(),
|
|
74
75
|
}));
|
|
75
76
|
// If we have USDC but low credits, wake up to potentially convert
|
|
76
|
-
const credits = await ctx.
|
|
77
|
+
const credits = await ctx.runtime.getCreditsBalance();
|
|
77
78
|
if (balance > 0.5 && credits < 500) {
|
|
78
79
|
return {
|
|
79
80
|
shouldWake: true,
|
|
@@ -138,7 +139,7 @@ export const BUILTIN_TASKS = {
|
|
|
138
139
|
health_check: async (ctx) => {
|
|
139
140
|
// Check that the sandbox is healthy
|
|
140
141
|
try {
|
|
141
|
-
const result = await ctx.
|
|
142
|
+
const result = await ctx.runtime.exec("echo alive", 5000);
|
|
142
143
|
if (result.exitCode !== 0) {
|
|
143
144
|
return {
|
|
144
145
|
shouldWake: true,
|
|
@@ -160,6 +161,66 @@ export const BUILTIN_TASKS = {
|
|
|
160
161
|
* Uses DeepSeek's thinking mode for rich multi-agent dialogue.
|
|
161
162
|
* Default: runs every 2 hours.
|
|
162
163
|
*/
|
|
164
|
+
/**
|
|
165
|
+
* Push heartbeat to CLAWD Convex backend.
|
|
166
|
+
* Only runs if convexSiteUrl is configured in automaton config.
|
|
167
|
+
*/
|
|
168
|
+
convex_heartbeat: async (ctx) => {
|
|
169
|
+
if (!ctx.config.convexSiteUrl) {
|
|
170
|
+
return { shouldWake: false };
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
const convexClient = createConvexClient({
|
|
174
|
+
siteUrl: ctx.config.convexSiteUrl,
|
|
175
|
+
agentId: ctx.identity.address,
|
|
176
|
+
});
|
|
177
|
+
const credits = await ctx.runtime.getCreditsBalance();
|
|
178
|
+
const state = ctx.db.getAgentState();
|
|
179
|
+
const startTime = ctx.db.getKV("start_time") || new Date().toISOString();
|
|
180
|
+
const uptimeMs = Date.now() - new Date(startTime).getTime();
|
|
181
|
+
const tier = getSurvivalTier(credits);
|
|
182
|
+
const turnCount = ctx.db.getTurnCount();
|
|
183
|
+
const skills = ctx.db.getSkills(true);
|
|
184
|
+
// First, register the agent if not already registered
|
|
185
|
+
const existing = ctx.db.getKV("convex_registered");
|
|
186
|
+
if (!existing) {
|
|
187
|
+
const result = await convexClient.registerAgent({
|
|
188
|
+
agentId: ctx.identity.address,
|
|
189
|
+
name: ctx.config.name,
|
|
190
|
+
installMethod: "automaton",
|
|
191
|
+
address: ctx.identity.address,
|
|
192
|
+
metadata: JSON.stringify({
|
|
193
|
+
sandboxId: ctx.identity.sandboxId,
|
|
194
|
+
version: ctx.config.version,
|
|
195
|
+
model: ctx.config.inferenceModel,
|
|
196
|
+
}),
|
|
197
|
+
});
|
|
198
|
+
ctx.db.setKV("convex_registered", JSON.stringify({
|
|
199
|
+
registered: result.registered,
|
|
200
|
+
firstSeen: result.firstSeen,
|
|
201
|
+
timestamp: Date.now(),
|
|
202
|
+
}));
|
|
203
|
+
console.log(`[CONVEX] Agent registered: ${result.registered ? "new" : "re-registered"}`);
|
|
204
|
+
}
|
|
205
|
+
// Send heartbeat
|
|
206
|
+
await convexClient.sendHeartbeat({
|
|
207
|
+
agentId: ctx.identity.address,
|
|
208
|
+
state,
|
|
209
|
+
creditsCents: credits,
|
|
210
|
+
uptimeSeconds: Math.floor(uptimeMs / 1000),
|
|
211
|
+
version: ctx.config.version,
|
|
212
|
+
sandboxId: ctx.identity.sandboxId,
|
|
213
|
+
turnCount,
|
|
214
|
+
skillCount: skills.length,
|
|
215
|
+
tier,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
// Don't crash the heartbeat daemon on Convex errors
|
|
220
|
+
console.warn(`[CONVEX] Heartbeat push failed: ${err.message}`);
|
|
221
|
+
}
|
|
222
|
+
return { shouldWake: false };
|
|
223
|
+
},
|
|
163
224
|
backroom_conversation: async (ctx) => {
|
|
164
225
|
const inference = ctx.inference;
|
|
165
226
|
if (!inference) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/heartbeat/tasks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/heartbeat/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Automaton SIWE Provisioning
|
|
3
3
|
*
|
|
4
4
|
* Uses the automaton's wallet to authenticate via Sign-In With Ethereum (SIWE)
|
|
5
|
-
* and create an API key for
|
|
5
|
+
* and create an API key for CLAWD Runtime API access.
|
|
6
|
+
* Adapted from runtime-mcp/src/cli/provision.ts
|
|
6
7
|
*/
|
|
7
8
|
import type { ProvisionResult } from "../types.js";
|
|
8
9
|
/**
|
|
@@ -12,7 +13,7 @@ export declare function loadApiKeyFromConfig(): string | null;
|
|
|
12
13
|
/**
|
|
13
14
|
* Run the full SIWE provisioning flow:
|
|
14
15
|
* 1. Load wallet
|
|
15
|
-
* 2. Get nonce from
|
|
16
|
+
* 2. Get nonce from CLAWD Runtime API
|
|
16
17
|
* 3. Sign SIWE message
|
|
17
18
|
* 4. Verify signature -> get JWT
|
|
18
19
|
* 5. Create API key
|
|
@@ -20,7 +21,7 @@ export declare function loadApiKeyFromConfig(): string | null;
|
|
|
20
21
|
*/
|
|
21
22
|
export declare function provision(apiUrl?: string): Promise<ProvisionResult>;
|
|
22
23
|
/**
|
|
23
|
-
* Register the automaton's creator as its parent with
|
|
24
|
+
* Register the automaton's creator as its parent with CLAWD Runtime.
|
|
24
25
|
* This allows the creator to see automaton logs and inference calls.
|
|
25
26
|
*/
|
|
26
27
|
export declare function registerParent(creatorAddress: string, apiUrl?: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/identity/provision.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/identity/provision.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CASpD;AAqBD;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CA4E1B;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
* Automaton SIWE Provisioning
|
|
3
3
|
*
|
|
4
4
|
* Uses the automaton's wallet to authenticate via Sign-In With Ethereum (SIWE)
|
|
5
|
-
* and create an API key for
|
|
5
|
+
* and create an API key for CLAWD Runtime API access.
|
|
6
|
+
* Adapted from runtime-mcp/src/cli/provision.ts
|
|
6
7
|
*/
|
|
7
8
|
import fs from "fs";
|
|
8
9
|
import path from "path";
|
|
9
10
|
import { SiweMessage } from "siwe";
|
|
10
11
|
import { getWallet, getAutomatonDir } from "./wallet.js";
|
|
11
|
-
const DEFAULT_API_URL =
|
|
12
|
+
const DEFAULT_API_URL = "https://api.x402.wtf";
|
|
12
13
|
/**
|
|
13
14
|
* Load API key from ~/.automaton/config.json if it exists.
|
|
14
15
|
*/
|
|
@@ -45,15 +46,14 @@ function saveConfig(apiKey, walletAddress) {
|
|
|
45
46
|
/**
|
|
46
47
|
* Run the full SIWE provisioning flow:
|
|
47
48
|
* 1. Load wallet
|
|
48
|
-
* 2. Get nonce from
|
|
49
|
+
* 2. Get nonce from CLAWD Runtime API
|
|
49
50
|
* 3. Sign SIWE message
|
|
50
51
|
* 4. Verify signature -> get JWT
|
|
51
52
|
* 5. Create API key
|
|
52
53
|
* 6. Save to config.json
|
|
53
54
|
*/
|
|
54
55
|
export async function provision(apiUrl) {
|
|
55
|
-
const url = apiUrl || process.env.CLAWD_API_URL ||
|
|
56
|
-
const domain = new URL(url).hostname;
|
|
56
|
+
const url = apiUrl || process.env.CLAWD_API_URL || DEFAULT_API_URL;
|
|
57
57
|
// 1. Load wallet
|
|
58
58
|
const { account } = await getWallet();
|
|
59
59
|
const address = account.address;
|
|
@@ -67,9 +67,9 @@ export async function provision(apiUrl) {
|
|
|
67
67
|
const { nonce } = (await nonceResp.json());
|
|
68
68
|
// 3. Construct and sign SIWE message
|
|
69
69
|
const siweMessage = new SiweMessage({
|
|
70
|
-
domain,
|
|
70
|
+
domain: "x402.wtf",
|
|
71
71
|
address,
|
|
72
|
-
statement: "Sign in to
|
|
72
|
+
statement: "Sign in to CLAWD Runtime as an Automaton to provision an API key.",
|
|
73
73
|
uri: `${url}/v1/auth/verify`,
|
|
74
74
|
version: "1",
|
|
75
75
|
chainId: 8453, // Base
|
|
@@ -95,7 +95,7 @@ export async function provision(apiUrl) {
|
|
|
95
95
|
"Content-Type": "application/json",
|
|
96
96
|
Authorization: `Bearer ${access_token}`,
|
|
97
97
|
},
|
|
98
|
-
body: JSON.stringify({ name: "clawd-
|
|
98
|
+
body: JSON.stringify({ name: "clawd-automaton" }),
|
|
99
99
|
});
|
|
100
100
|
if (!keyResp.ok) {
|
|
101
101
|
throw new Error(`Failed to create API key: ${keyResp.status} ${await keyResp.text()}`);
|
|
@@ -106,11 +106,11 @@ export async function provision(apiUrl) {
|
|
|
106
106
|
return { apiKey: key, walletAddress: address, keyPrefix: key_prefix };
|
|
107
107
|
}
|
|
108
108
|
/**
|
|
109
|
-
* Register the automaton's creator as its parent with
|
|
109
|
+
* Register the automaton's creator as its parent with CLAWD Runtime.
|
|
110
110
|
* This allows the creator to see automaton logs and inference calls.
|
|
111
111
|
*/
|
|
112
112
|
export async function registerParent(creatorAddress, apiUrl) {
|
|
113
|
-
const url = apiUrl || process.env.CLAWD_API_URL ||
|
|
113
|
+
const url = apiUrl || process.env.CLAWD_API_URL || DEFAULT_API_URL;
|
|
114
114
|
const apiKey = loadApiKeyFromConfig();
|
|
115
115
|
if (!apiKey) {
|
|
116
116
|
throw new Error("Must provision API key before registering parent");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision.js","sourceRoot":"","sources":["../../src/identity/provision.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provision.js","sourceRoot":"","sources":["../../src/identity/provision.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates and manages an EVM wallet for the automaton's identity and payments.
|
|
5
5
|
* The private key is the automaton's sovereign identity.
|
|
6
|
-
* Adapted from
|
|
6
|
+
* Adapted from runtime-mcp/src/wallet.ts
|
|
7
7
|
*/
|
|
8
8
|
import type { PrivateKeyAccount } from "viem";
|
|
9
9
|
export declare function getAutomatonDir(): string;
|
package/dist/identity/wallet.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates and manages an EVM wallet for the automaton's identity and payments.
|
|
5
5
|
* The private key is the automaton's sovereign identity.
|
|
6
|
-
* Adapted from
|
|
6
|
+
* Adapted from runtime-mcp/src/wallet.ts
|
|
7
7
|
*/
|
|
8
8
|
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
9
9
|
import fs from "fs";
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* CLAWD Automaton Runtime
|
|
4
4
|
*
|
|
5
5
|
* The entry point for the sovereign AI agent.
|
|
6
6
|
* Handles CLI args, bootstrapping, and orchestrating
|
|
@@ -10,43 +10,42 @@ import { getWallet, getAutomatonDir } from "./identity/wallet.js";
|
|
|
10
10
|
import { provision, loadApiKeyFromConfig } from "./identity/provision.js";
|
|
11
11
|
import { loadConfig, resolvePath } from "./config.js";
|
|
12
12
|
import { createDatabase } from "./state/database.js";
|
|
13
|
-
import {
|
|
14
|
-
import { createInferenceClient } from "./
|
|
15
|
-
import { createDeepSeekInferenceClient, DEEPSEEK_BASE_URL, DEEPSEEK_MODEL_PRO, DEEPSEEK_MODEL_FLASH } from "./
|
|
13
|
+
import { createClawdRuntimeClient } from "./clawd/client.js";
|
|
14
|
+
import { createInferenceClient } from "./clawd/inference.js";
|
|
15
|
+
import { createDeepSeekInferenceClient, DEEPSEEK_BASE_URL, DEEPSEEK_MODEL_PRO, DEEPSEEK_MODEL_FLASH } from "./clawd/deepseek-inference.js";
|
|
16
16
|
import { createHeartbeatDaemon } from "./heartbeat/daemon.js";
|
|
17
17
|
import { loadHeartbeatConfig, syncHeartbeatToDb, } from "./heartbeat/config.js";
|
|
18
18
|
import { runAgentLoop } from "./agent/loop.js";
|
|
19
19
|
import { loadSkills } from "./skills/loader.js";
|
|
20
20
|
import { initStateRepo } from "./git/state-versioning.js";
|
|
21
21
|
import { createSocialClient } from "./social/client.js";
|
|
22
|
-
|
|
22
|
+
import { createConvexClient } from "./clawd/convex-client.js";
|
|
23
|
+
const VERSION = "0.1.0";
|
|
23
24
|
async function main() {
|
|
24
25
|
const args = process.argv.slice(2);
|
|
25
26
|
// ─── CLI Commands ────────────────────────────────────────────
|
|
26
27
|
if (args.includes("--version") || args.includes("-v")) {
|
|
27
|
-
console.log(`
|
|
28
|
+
console.log(`CLAWD Automation v${VERSION}`);
|
|
28
29
|
process.exit(0);
|
|
29
30
|
}
|
|
30
31
|
if (args.includes("--help") || args.includes("-h")) {
|
|
31
32
|
console.log(`
|
|
32
|
-
|
|
33
|
+
CLAWD Automation v${VERSION}
|
|
33
34
|
Sovereign AI Agent Runtime
|
|
34
35
|
|
|
35
36
|
Usage:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
clawd --run Start the automaton (first run triggers setup wizard)
|
|
38
|
+
clawd --setup Re-run the interactive setup wizard
|
|
39
|
+
clawd --init Initialize wallet and config directory
|
|
40
|
+
clawd --provision Provision API key via SIWE
|
|
41
|
+
clawd --status Show current automaton status
|
|
42
|
+
clawd --goblin Run devnet-only paper Goblin OODA trading mode
|
|
43
|
+
clawd --version Show version
|
|
44
|
+
clawd --help Show this help
|
|
44
45
|
|
|
45
46
|
Environment:
|
|
46
|
-
CLAWD_API_URL
|
|
47
|
-
CLAWD_API_KEY
|
|
48
|
-
CLAWD_INFERENCE_URL Inference endpoint (default: https://inference.x402.wtf)
|
|
49
|
-
CLAWD_SOCIAL_URL Social relay URL (default: https://api.x402.wtf/social)
|
|
47
|
+
CLAWD_API_URL CLAWD Runtime API URL (default: https://api.x402.wtf)
|
|
48
|
+
CLAWD_API_KEY CLAWD Runtime API key (overrides config)
|
|
50
49
|
`);
|
|
51
50
|
process.exit(0);
|
|
52
51
|
}
|
|
@@ -74,25 +73,22 @@ Environment:
|
|
|
74
73
|
await showStatus();
|
|
75
74
|
process.exit(0);
|
|
76
75
|
}
|
|
76
|
+
if (args.includes("--goblin")) {
|
|
77
|
+
await import("./ooda/loop.js");
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
77
80
|
if (args.includes("--setup")) {
|
|
78
81
|
const { runSetupWizard } = await import("./setup/wizard.js");
|
|
79
82
|
await runSetupWizard();
|
|
80
83
|
process.exit(0);
|
|
81
84
|
}
|
|
82
|
-
if (args.includes("--
|
|
83
|
-
const { generatePortal } = await import("./portal/generate.js");
|
|
84
|
-
const outputArg = args.find((arg, index) => index > args.indexOf("--page") && !arg.startsWith("--"));
|
|
85
|
-
const result = generatePortal(outputArg ? resolvePath(outputArg) : undefined);
|
|
86
|
-
console.log(JSON.stringify(result, null, 2));
|
|
87
|
-
process.exit(0);
|
|
88
|
-
}
|
|
89
|
-
if (args.includes("--run") || args.includes("--spawn")) {
|
|
85
|
+
if (args.includes("--run")) {
|
|
90
86
|
await run();
|
|
91
87
|
return;
|
|
92
88
|
}
|
|
93
89
|
// Default: show help
|
|
94
|
-
console.log('Run "
|
|
95
|
-
console.log('Run "
|
|
90
|
+
console.log('Run "automaton --help" for usage information.');
|
|
91
|
+
console.log('Run "automaton --run" to start the automaton.');
|
|
96
92
|
}
|
|
97
93
|
// ─── Status Command ────────────────────────────────────────────
|
|
98
94
|
async function showStatus() {
|
|
@@ -131,7 +127,7 @@ Version: ${config.version}
|
|
|
131
127
|
}
|
|
132
128
|
// ─── Main Run ──────────────────────────────────────────────────
|
|
133
129
|
async function run() {
|
|
134
|
-
console.log(`[${new Date().toISOString()}]
|
|
130
|
+
console.log(`[${new Date().toISOString()}] CLAWD Automation v${VERSION} starting...`);
|
|
135
131
|
// Load config — first run triggers interactive setup wizard
|
|
136
132
|
let config = loadConfig();
|
|
137
133
|
if (!config) {
|
|
@@ -140,9 +136,9 @@ async function run() {
|
|
|
140
136
|
}
|
|
141
137
|
// Load wallet
|
|
142
138
|
const { account } = await getWallet();
|
|
143
|
-
const apiKey = config.
|
|
139
|
+
const apiKey = config.clawdApiKey || loadApiKeyFromConfig();
|
|
144
140
|
if (!apiKey) {
|
|
145
|
-
console.error("No API key found. Run:
|
|
141
|
+
console.error("No API key found. Run: automaton --provision");
|
|
146
142
|
process.exit(1);
|
|
147
143
|
}
|
|
148
144
|
// Build identity
|
|
@@ -163,13 +159,13 @@ async function run() {
|
|
|
163
159
|
db.setIdentity("address", account.address);
|
|
164
160
|
db.setIdentity("creator", config.creatorAddress);
|
|
165
161
|
db.setIdentity("sandbox", config.sandboxId);
|
|
166
|
-
// Create
|
|
167
|
-
const
|
|
168
|
-
apiUrl: config.
|
|
162
|
+
// Create CLAWD Runtime client
|
|
163
|
+
const runtime = createClawdRuntimeClient({
|
|
164
|
+
apiUrl: config.clawdApiUrl,
|
|
169
165
|
apiKey,
|
|
170
166
|
sandboxId: config.sandboxId,
|
|
171
167
|
});
|
|
172
|
-
// Create inference client (DeepSeek when enabled, otherwise
|
|
168
|
+
// Create inference client (DeepSeek when enabled, otherwise CLAWD Runtime)
|
|
173
169
|
const inference = config.deepseekEnabled
|
|
174
170
|
? createDeepSeekInferenceClient({
|
|
175
171
|
apiKey: config.deepseekApiKey || apiKey,
|
|
@@ -180,7 +176,7 @@ async function run() {
|
|
|
180
176
|
proModel: config.deepseekModelPro || DEEPSEEK_MODEL_PRO,
|
|
181
177
|
})
|
|
182
178
|
: createInferenceClient({
|
|
183
|
-
apiUrl:
|
|
179
|
+
apiUrl: config.clawdApiUrl,
|
|
184
180
|
apiKey,
|
|
185
181
|
defaultModel: config.inferenceModel,
|
|
186
182
|
maxTokens: config.maxTokensPerTurn,
|
|
@@ -194,6 +190,44 @@ async function run() {
|
|
|
194
190
|
social = createSocialClient(config.socialRelayUrl, account);
|
|
195
191
|
console.log(`[${new Date().toISOString()}] Social relay: ${config.socialRelayUrl}`);
|
|
196
192
|
}
|
|
193
|
+
// Create CLAWD Convex client for agent tracking & heartbeats
|
|
194
|
+
let convex;
|
|
195
|
+
if (config.convexSiteUrl) {
|
|
196
|
+
try {
|
|
197
|
+
convex = createConvexClient({
|
|
198
|
+
siteUrl: config.convexSiteUrl,
|
|
199
|
+
agentId: account.address,
|
|
200
|
+
});
|
|
201
|
+
console.log(`[${new Date().toISOString()}] CLAWD Convex backend: ${config.convexSiteUrl}`);
|
|
202
|
+
// Register agent on first boot
|
|
203
|
+
const convexRegistered = db.getKV("convex_registered");
|
|
204
|
+
if (!convexRegistered) {
|
|
205
|
+
convex.registerAgent({
|
|
206
|
+
agentId: account.address,
|
|
207
|
+
name: config.name,
|
|
208
|
+
installMethod: "automaton",
|
|
209
|
+
address: account.address,
|
|
210
|
+
metadata: JSON.stringify({
|
|
211
|
+
sandboxId: config.sandboxId,
|
|
212
|
+
version: config.version,
|
|
213
|
+
model: config.inferenceModel,
|
|
214
|
+
}),
|
|
215
|
+
}).then((result) => {
|
|
216
|
+
db.setKV("convex_registered", JSON.stringify({
|
|
217
|
+
registered: result.registered,
|
|
218
|
+
firstSeen: result.firstSeen,
|
|
219
|
+
timestamp: Date.now(),
|
|
220
|
+
}));
|
|
221
|
+
console.log(`[CONVEX] Agent registered: ${result.registered ? "new" : "re-registered"}`);
|
|
222
|
+
}).catch((err) => {
|
|
223
|
+
console.warn(`[CONVEX] Registration failed: ${err.message}`);
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
console.warn(`[${new Date().toISOString()}] CLAWD Convex init failed: ${err.message}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
197
231
|
// Load and sync heartbeat config
|
|
198
232
|
const heartbeatConfigPath = resolvePath(config.heartbeatConfigPath);
|
|
199
233
|
const heartbeatConfig = loadHeartbeatConfig(heartbeatConfigPath);
|
|
@@ -210,7 +244,7 @@ async function run() {
|
|
|
210
244
|
}
|
|
211
245
|
// Initialize state repo (git)
|
|
212
246
|
try {
|
|
213
|
-
await initStateRepo(
|
|
247
|
+
await initStateRepo(runtime);
|
|
214
248
|
console.log(`[${new Date().toISOString()}] State repo initialized.`);
|
|
215
249
|
}
|
|
216
250
|
catch (err) {
|
|
@@ -221,7 +255,7 @@ async function run() {
|
|
|
221
255
|
identity,
|
|
222
256
|
config,
|
|
223
257
|
db,
|
|
224
|
-
|
|
258
|
+
runtime,
|
|
225
259
|
inference,
|
|
226
260
|
social,
|
|
227
261
|
onWakeRequest: (reason) => {
|
|
@@ -258,9 +292,10 @@ async function run() {
|
|
|
258
292
|
identity,
|
|
259
293
|
config,
|
|
260
294
|
db,
|
|
261
|
-
|
|
295
|
+
runtime,
|
|
262
296
|
inference,
|
|
263
297
|
social,
|
|
298
|
+
convex,
|
|
264
299
|
skills,
|
|
265
300
|
onStateChange: (state) => {
|
|
266
301
|
console.log(`[${new Date().toISOString()}] State: ${state}`);
|