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,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLAWD Convex Client
|
|
3
|
+
*
|
|
4
|
+
* Lightweight HTTP client for the automaton to communicate with
|
|
5
|
+
* the CLAWD Convex backend for agent tracking, heartbeats, and
|
|
6
|
+
* key-value data storage.
|
|
7
|
+
*
|
|
8
|
+
* Uses the Convex HTTP actions defined in convex/clawd/http.ts.
|
|
9
|
+
* No external dependencies needed — just uses fetch.
|
|
10
|
+
*/
|
|
11
|
+
export interface ConvexClientOptions {
|
|
12
|
+
/** Base URL of the Convex deployment (e.g. https://giddy-dragon-7.convex.site) */
|
|
13
|
+
siteUrl: string;
|
|
14
|
+
/** Optional agent identifier */
|
|
15
|
+
agentId?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Result of registering an agent.
|
|
19
|
+
*/
|
|
20
|
+
export interface RegisterResult {
|
|
21
|
+
registered: boolean;
|
|
22
|
+
agentId: string;
|
|
23
|
+
firstSeen: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Result of recording a heartbeat.
|
|
27
|
+
*/
|
|
28
|
+
export interface HeartbeatResult {
|
|
29
|
+
recorded: boolean;
|
|
30
|
+
timestamp: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Result of storing data.
|
|
34
|
+
*/
|
|
35
|
+
export interface DataResult {
|
|
36
|
+
stored: boolean;
|
|
37
|
+
key: string;
|
|
38
|
+
updatedAt: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Agent data entry returned from Convex.
|
|
42
|
+
*/
|
|
43
|
+
export interface AgentDataEntry {
|
|
44
|
+
_id: string;
|
|
45
|
+
agentId: string;
|
|
46
|
+
key: string;
|
|
47
|
+
value: string;
|
|
48
|
+
contentType?: string;
|
|
49
|
+
tags?: string[];
|
|
50
|
+
updatedAt: number;
|
|
51
|
+
_creationTime: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Agent info returned from Convex.
|
|
55
|
+
*/
|
|
56
|
+
export interface AgentInfo {
|
|
57
|
+
_id: string;
|
|
58
|
+
agentId: string;
|
|
59
|
+
name: string;
|
|
60
|
+
installMethod: string;
|
|
61
|
+
active: boolean;
|
|
62
|
+
firstSeen: number;
|
|
63
|
+
lastSeen: number;
|
|
64
|
+
metadata?: string;
|
|
65
|
+
address?: string;
|
|
66
|
+
source?: string;
|
|
67
|
+
tags?: string[];
|
|
68
|
+
latestHeartbeat?: {
|
|
69
|
+
state?: string;
|
|
70
|
+
creditsCents?: number;
|
|
71
|
+
uptimeSeconds?: number;
|
|
72
|
+
timestamp?: number;
|
|
73
|
+
tier?: string;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Creates a CLAWD Convex client for the automaton.
|
|
78
|
+
*/
|
|
79
|
+
export declare function createConvexClient(options: ConvexClientOptions): {
|
|
80
|
+
registerAgent: (params: {
|
|
81
|
+
agentId: string;
|
|
82
|
+
name: string;
|
|
83
|
+
installMethod?: string;
|
|
84
|
+
source?: string;
|
|
85
|
+
metadata?: string;
|
|
86
|
+
address?: string;
|
|
87
|
+
tags?: string[];
|
|
88
|
+
}) => Promise<RegisterResult>;
|
|
89
|
+
sendHeartbeat: (params: {
|
|
90
|
+
agentId: string;
|
|
91
|
+
state?: string;
|
|
92
|
+
creditsCents?: number;
|
|
93
|
+
usdcBalance?: number;
|
|
94
|
+
uptimeSeconds?: number;
|
|
95
|
+
version?: string;
|
|
96
|
+
sandboxId?: string;
|
|
97
|
+
turnCount?: number;
|
|
98
|
+
skillCount?: number;
|
|
99
|
+
tier?: string;
|
|
100
|
+
statusPayload?: Record<string, any>;
|
|
101
|
+
}) => Promise<HeartbeatResult>;
|
|
102
|
+
setData: (params: {
|
|
103
|
+
agentId: string;
|
|
104
|
+
key: string;
|
|
105
|
+
value: string;
|
|
106
|
+
contentType?: string;
|
|
107
|
+
tags?: string[];
|
|
108
|
+
}) => Promise<DataResult>;
|
|
109
|
+
getData: (params: {
|
|
110
|
+
agentId: string;
|
|
111
|
+
key: string;
|
|
112
|
+
}) => Promise<AgentDataEntry | null>;
|
|
113
|
+
listData: (params: {
|
|
114
|
+
agentId: string;
|
|
115
|
+
}) => Promise<Array<{
|
|
116
|
+
key: string;
|
|
117
|
+
contentType?: string;
|
|
118
|
+
tags?: string[];
|
|
119
|
+
updatedAt: number;
|
|
120
|
+
valuePreview: string;
|
|
121
|
+
}>>;
|
|
122
|
+
getAgent: (params: {
|
|
123
|
+
agentId: string;
|
|
124
|
+
}) => Promise<AgentInfo | null>;
|
|
125
|
+
listAgents: (params?: {
|
|
126
|
+
activeOnly?: boolean;
|
|
127
|
+
}) => Promise<AgentInfo[]>;
|
|
128
|
+
};
|
|
129
|
+
export type ConvexAgentClient = ReturnType<typeof createConvexClient>;
|
|
130
|
+
//# sourceMappingURL=convex-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convex-client.d.ts","sourceRoot":"","sources":["../../src/clawd/convex-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLAWD Convex Client
|
|
3
|
+
*
|
|
4
|
+
* Lightweight HTTP client for the automaton to communicate with
|
|
5
|
+
* the CLAWD Convex backend for agent tracking, heartbeats, and
|
|
6
|
+
* key-value data storage.
|
|
7
|
+
*
|
|
8
|
+
* Uses the Convex HTTP actions defined in convex/clawd/http.ts.
|
|
9
|
+
* No external dependencies needed — just uses fetch.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Creates a CLAWD Convex client for the automaton.
|
|
13
|
+
*/
|
|
14
|
+
export function createConvexClient(options) {
|
|
15
|
+
const baseUrl = options.siteUrl.replace(/\/$/, '');
|
|
16
|
+
const defaultAgentId = options.agentId;
|
|
17
|
+
/**
|
|
18
|
+
* Make an HTTP request to a CLAWD endpoint.
|
|
19
|
+
*/
|
|
20
|
+
async function request(method, path, body) {
|
|
21
|
+
const url = `${baseUrl}${path}`;
|
|
22
|
+
const headers = {
|
|
23
|
+
'Content-Type': 'application/json',
|
|
24
|
+
};
|
|
25
|
+
if (defaultAgentId) {
|
|
26
|
+
headers['X-Agent-Id'] = defaultAgentId;
|
|
27
|
+
}
|
|
28
|
+
const resp = await fetch(url, {
|
|
29
|
+
method,
|
|
30
|
+
headers,
|
|
31
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
32
|
+
});
|
|
33
|
+
if (!resp.ok) {
|
|
34
|
+
const text = await resp.text();
|
|
35
|
+
throw new Error(`Convex API error: ${method} ${path} -> ${resp.status}: ${text}`);
|
|
36
|
+
}
|
|
37
|
+
return resp.json();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Register / install an agent.
|
|
41
|
+
*/
|
|
42
|
+
async function registerAgent(params) {
|
|
43
|
+
return request('POST', '/clawd/register', {
|
|
44
|
+
agentId: params.agentId,
|
|
45
|
+
name: params.name,
|
|
46
|
+
installMethod: params.installMethod || 'automaton',
|
|
47
|
+
source: params.source,
|
|
48
|
+
metadata: params.metadata,
|
|
49
|
+
address: params.address,
|
|
50
|
+
tags: params.tags,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Push a heartbeat.
|
|
55
|
+
*/
|
|
56
|
+
async function sendHeartbeat(params) {
|
|
57
|
+
return request('POST', '/clawd/heartbeat', {
|
|
58
|
+
agentId: params.agentId,
|
|
59
|
+
state: params.state,
|
|
60
|
+
creditsCents: params.creditsCents,
|
|
61
|
+
usdcBalance: params.usdcBalance,
|
|
62
|
+
uptimeSeconds: params.uptimeSeconds,
|
|
63
|
+
version: params.version,
|
|
64
|
+
sandboxId: params.sandboxId,
|
|
65
|
+
turnCount: params.turnCount,
|
|
66
|
+
skillCount: params.skillCount,
|
|
67
|
+
tier: params.tier,
|
|
68
|
+
statusPayload: params.statusPayload,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Store key-value data for an agent.
|
|
73
|
+
*/
|
|
74
|
+
async function setData(params) {
|
|
75
|
+
return request('POST', '/clawd/data', {
|
|
76
|
+
agentId: params.agentId,
|
|
77
|
+
key: params.key,
|
|
78
|
+
value: params.value,
|
|
79
|
+
contentType: params.contentType,
|
|
80
|
+
tags: params.tags,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Retrieve data for an agent by key.
|
|
85
|
+
*/
|
|
86
|
+
async function getData(params) {
|
|
87
|
+
return request('GET', `/clawd/data?agentId=${encodeURIComponent(params.agentId)}&key=${encodeURIComponent(params.key)}`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* List all data keys for an agent.
|
|
91
|
+
*/
|
|
92
|
+
async function listData(params) {
|
|
93
|
+
return request('GET', `/clawd/data/list?agentId=${encodeURIComponent(params.agentId)}`);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get agent info + latest heartbeat.
|
|
97
|
+
*/
|
|
98
|
+
async function getAgent(params) {
|
|
99
|
+
return request('GET', `/clawd/agent?agentId=${encodeURIComponent(params.agentId)}`);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* List all agents (optionally only active ones).
|
|
103
|
+
*/
|
|
104
|
+
async function listAgents(params) {
|
|
105
|
+
const activeParam = params?.activeOnly ? '?active=true' : '';
|
|
106
|
+
return request('GET', `/clawd/agents${activeParam}`);
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
registerAgent,
|
|
110
|
+
sendHeartbeat,
|
|
111
|
+
setData,
|
|
112
|
+
getData,
|
|
113
|
+
listData,
|
|
114
|
+
getAgent,
|
|
115
|
+
listAgents,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=convex-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convex-client.js","sourceRoot":"","sources":["../../src/clawd/convex-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLAWD Credits Management
|
|
3
|
+
*
|
|
4
|
+
* Monitors the automaton's compute credit balance and triggers
|
|
5
|
+
* survival mode transitions.
|
|
6
|
+
*/
|
|
7
|
+
import type { ClawdRuntimeClient, FinancialState, SurvivalTier, AutomatonDatabase } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Check the current financial state of the automaton.
|
|
10
|
+
*/
|
|
11
|
+
export declare function checkFinancialState(runtime: ClawdRuntimeClient, usdcBalance: number): Promise<FinancialState>;
|
|
12
|
+
/**
|
|
13
|
+
* Determine the survival tier based on current credits.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getSurvivalTier(creditsCents: number): SurvivalTier;
|
|
16
|
+
/**
|
|
17
|
+
* Format a credit amount for display.
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatCredits(cents: number): string;
|
|
20
|
+
/**
|
|
21
|
+
* Log a credit check to the database.
|
|
22
|
+
*/
|
|
23
|
+
export declare function logCreditCheck(db: AutomatonDatabase, state: FinancialState): void;
|
|
24
|
+
//# sourceMappingURL=credits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../../src/clawd/credits.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,kBAAkB,EAC3B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CAQzB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAMlE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,iBAAiB,EACrB,KAAK,EAAE,cAAc,GACpB,IAAI,CASN"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLAWD Credits Management
|
|
3
|
+
*
|
|
4
|
+
* Monitors the automaton's compute credit balance and triggers
|
|
5
|
+
* survival mode transitions.
|
|
6
|
+
*/
|
|
7
|
+
import { SURVIVAL_THRESHOLDS } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Check the current financial state of the automaton.
|
|
10
|
+
*/
|
|
11
|
+
export async function checkFinancialState(runtime, usdcBalance) {
|
|
12
|
+
const creditsCents = await runtime.getCreditsBalance();
|
|
13
|
+
return {
|
|
14
|
+
creditsCents,
|
|
15
|
+
usdcBalance,
|
|
16
|
+
lastChecked: new Date().toISOString(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Determine the survival tier based on current credits.
|
|
21
|
+
*/
|
|
22
|
+
export function getSurvivalTier(creditsCents) {
|
|
23
|
+
if (creditsCents > SURVIVAL_THRESHOLDS.normal)
|
|
24
|
+
return "normal";
|
|
25
|
+
if (creditsCents > SURVIVAL_THRESHOLDS.low_compute)
|
|
26
|
+
return "low_compute";
|
|
27
|
+
if (creditsCents > SURVIVAL_THRESHOLDS.dead)
|
|
28
|
+
return "critical";
|
|
29
|
+
return "dead";
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Format a credit amount for display.
|
|
33
|
+
*/
|
|
34
|
+
export function formatCredits(cents) {
|
|
35
|
+
return `$${(cents / 100).toFixed(2)}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Log a credit check to the database.
|
|
39
|
+
*/
|
|
40
|
+
export function logCreditCheck(db, state) {
|
|
41
|
+
const { ulid } = await_ulid();
|
|
42
|
+
db.insertTransaction({
|
|
43
|
+
id: ulid(),
|
|
44
|
+
type: "credit_check",
|
|
45
|
+
amountCents: state.creditsCents,
|
|
46
|
+
description: `Balance check: ${formatCredits(state.creditsCents)} credits, ${state.usdcBalance.toFixed(4)} USDC`,
|
|
47
|
+
timestamp: state.lastChecked,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Lazy ulid import helper
|
|
51
|
+
function await_ulid() {
|
|
52
|
+
// Dynamic import would be async; for synchronous usage in better-sqlite3
|
|
53
|
+
// we use a simple counter-based ID as fallback
|
|
54
|
+
let counter = 0;
|
|
55
|
+
return {
|
|
56
|
+
ulid: () => {
|
|
57
|
+
const timestamp = Date.now().toString(36);
|
|
58
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
59
|
+
counter++;
|
|
60
|
+
return `${timestamp}-${random}-${counter.toString(36)}`;
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=credits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credits.js","sourceRoot":"","sources":["../../src/clawd/credits.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA2B,EAC3B,WAAmB;IAEnB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAEvD,OAAO;QACL,YAAY;QACZ,WAAW;QACX,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,YAAoB;IAClD,IAAI,YAAY,GAAG,mBAAmB,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAC/D,IAAI,YAAY,GAAG,mBAAmB,CAAC,WAAW;QAChD,OAAO,aAAa,CAAC;IACvB,IAAI,YAAY,GAAG,mBAAmB,CAAC,IAAI;QAAE,OAAO,UAAU,CAAC;IAC/D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAqB,EACrB,KAAqB;IAErB,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;IAC9B,EAAE,CAAC,iBAAiB,CAAC;QACnB,EAAE,EAAE,IAAI,EAAE;QACV,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,KAAK,CAAC,YAAY;QAC/B,WAAW,EAAE,kBAAkB,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QAChH,SAAS,EAAE,KAAK,CAAC,WAAW;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,0BAA0B;AAC1B,SAAS,UAAU;IACjB,yEAAyE;IACzE,+CAA+C;IAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO;QACL,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC;YACV,OAAO,GAAG,SAAS,IAAI,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepSeek Inference Client
|
|
3
|
+
*
|
|
4
|
+
* Implements the InferenceClient interface using DeepSeek's OpenAI-compatible API.
|
|
5
|
+
* Supports thinking mode via reasoning_effort and extra_body.
|
|
6
|
+
* Replaces CLAWD Runtime's default inference when using DeepSeek models.
|
|
7
|
+
*/
|
|
8
|
+
import type { InferenceClient } from "../types.js";
|
|
9
|
+
export declare const DEEPSEEK_BASE_URL = "https://api.deepseek.com";
|
|
10
|
+
export declare const DEEPSEEK_MODEL_PRO = "deepseek-v4-pro";
|
|
11
|
+
export declare const DEEPSEEK_MODEL_FLASH = "deepseek-v4-flash";
|
|
12
|
+
interface DeepSeekInferenceClientOptions {
|
|
13
|
+
apiKey: string;
|
|
14
|
+
baseUrl?: string;
|
|
15
|
+
defaultModel?: string;
|
|
16
|
+
maxTokens?: number;
|
|
17
|
+
flashModel?: string;
|
|
18
|
+
proModel?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create a DeepSeek inference client that conforms to the
|
|
22
|
+
* InferenceClient interface used throughout the automaton.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createDeepSeekInferenceClient(options: DeepSeekInferenceClientOptions): InferenceClient;
|
|
25
|
+
/**
|
|
26
|
+
* DeepSeek cost estimation in cents per million tokens.
|
|
27
|
+
*/
|
|
28
|
+
export declare const DEEPSEEK_PRICING: Record<string, {
|
|
29
|
+
input: number;
|
|
30
|
+
output: number;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Estimate cost in cents for a DeepSeek inference call.
|
|
34
|
+
*/
|
|
35
|
+
export declare function estimateDeepSeekCostCents(usage: {
|
|
36
|
+
promptTokens: number;
|
|
37
|
+
completionTokens: number;
|
|
38
|
+
}, model: string): number;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=deepseek-inference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-inference.d.ts","sourceRoot":"","sources":["../../src/clawd/deepseek-inference.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EAOhB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAC5D,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AACpD,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAExD,UAAU,8BAA8B;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,eAAe,CA6HjB;AAoBD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAG9E,CAAC;AAEF;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,EACzD,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepSeek Inference Client
|
|
3
|
+
*
|
|
4
|
+
* Implements the InferenceClient interface using DeepSeek's OpenAI-compatible API.
|
|
5
|
+
* Supports thinking mode via reasoning_effort and extra_body.
|
|
6
|
+
* Replaces CLAWD Runtime's default inference when using DeepSeek models.
|
|
7
|
+
*/
|
|
8
|
+
export const DEEPSEEK_BASE_URL = "https://api.deepseek.com";
|
|
9
|
+
export const DEEPSEEK_MODEL_PRO = "deepseek-v4-pro";
|
|
10
|
+
export const DEEPSEEK_MODEL_FLASH = "deepseek-v4-flash";
|
|
11
|
+
/**
|
|
12
|
+
* Create a DeepSeek inference client that conforms to the
|
|
13
|
+
* InferenceClient interface used throughout the automaton.
|
|
14
|
+
*/
|
|
15
|
+
export function createDeepSeekInferenceClient(options) {
|
|
16
|
+
const { apiKey, baseUrl = DEEPSEEK_BASE_URL, defaultModel = DEEPSEEK_MODEL_PRO, maxTokens: defaultMaxTokens = 4096, flashModel = DEEPSEEK_MODEL_FLASH, proModel = DEEPSEEK_MODEL_PRO, } = options;
|
|
17
|
+
let currentModel = defaultModel;
|
|
18
|
+
let maxTokens = defaultMaxTokens;
|
|
19
|
+
let lowCompute = false;
|
|
20
|
+
const chat = async (messages, opts) => {
|
|
21
|
+
const model = opts?.model || currentModel;
|
|
22
|
+
const tokenLimit = opts?.maxTokens || maxTokens;
|
|
23
|
+
const body = {
|
|
24
|
+
model,
|
|
25
|
+
messages: messages.map(formatMessage),
|
|
26
|
+
max_tokens: tokenLimit,
|
|
27
|
+
stream: false,
|
|
28
|
+
};
|
|
29
|
+
if (opts?.temperature !== undefined) {
|
|
30
|
+
body.temperature = opts.temperature;
|
|
31
|
+
}
|
|
32
|
+
const tools = opts?.tools;
|
|
33
|
+
if (tools && tools.length > 0) {
|
|
34
|
+
body.tools = tools;
|
|
35
|
+
body.tool_choice = "auto";
|
|
36
|
+
}
|
|
37
|
+
// DeepSeek thinking mode: enable reasoning with high effort
|
|
38
|
+
body.reasoning_effort = "high";
|
|
39
|
+
body.extra_body = { thinking: { type: "enabled" } };
|
|
40
|
+
const resp = await fetch(`${baseUrl}/v1/chat/completions`, {
|
|
41
|
+
method: "POST",
|
|
42
|
+
headers: {
|
|
43
|
+
"Content-Type": "application/json",
|
|
44
|
+
Authorization: `Bearer ${apiKey}`,
|
|
45
|
+
},
|
|
46
|
+
body: JSON.stringify(body),
|
|
47
|
+
});
|
|
48
|
+
if (!resp.ok) {
|
|
49
|
+
const text = await resp.text();
|
|
50
|
+
throw new Error(`DeepSeek inference error: ${resp.status}: ${text}`);
|
|
51
|
+
}
|
|
52
|
+
const data = (await resp.json());
|
|
53
|
+
const choice = data.choices?.[0];
|
|
54
|
+
if (!choice) {
|
|
55
|
+
throw new Error("No completion choice returned from DeepSeek inference");
|
|
56
|
+
}
|
|
57
|
+
const message = choice.message;
|
|
58
|
+
const usage = {
|
|
59
|
+
promptTokens: data.usage?.prompt_tokens || 0,
|
|
60
|
+
completionTokens: data.usage?.completion_tokens || 0,
|
|
61
|
+
totalTokens: data.usage?.total_tokens || 0,
|
|
62
|
+
};
|
|
63
|
+
// Extract reasoning_content if available (DeepSeek thinking mode)
|
|
64
|
+
const reasoningContent = message.reasoning_content || "";
|
|
65
|
+
const toolCalls = message.tool_calls?.map((tc) => ({
|
|
66
|
+
id: tc.id,
|
|
67
|
+
type: "function",
|
|
68
|
+
function: {
|
|
69
|
+
name: tc.function.name,
|
|
70
|
+
arguments: tc.function.arguments,
|
|
71
|
+
},
|
|
72
|
+
}));
|
|
73
|
+
// Prepend reasoning content to the message if present
|
|
74
|
+
let content = message.content || "";
|
|
75
|
+
if (reasoningContent) {
|
|
76
|
+
content = `[Thinking]\n${reasoningContent}\n\n[Response]\n${content}`;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
id: data.id || "",
|
|
80
|
+
model: data.model || model,
|
|
81
|
+
message: {
|
|
82
|
+
role: message.role,
|
|
83
|
+
content,
|
|
84
|
+
tool_calls: toolCalls,
|
|
85
|
+
},
|
|
86
|
+
toolCalls,
|
|
87
|
+
usage,
|
|
88
|
+
finishReason: choice.finish_reason || "stop",
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
const setLowComputeMode = (enabled) => {
|
|
92
|
+
lowCompute = enabled;
|
|
93
|
+
if (enabled) {
|
|
94
|
+
currentModel = flashModel;
|
|
95
|
+
maxTokens = 2048;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
currentModel = defaultModel;
|
|
99
|
+
maxTokens = defaultMaxTokens;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
const getDefaultModel = () => {
|
|
103
|
+
return currentModel;
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
chat,
|
|
107
|
+
setLowComputeMode,
|
|
108
|
+
getDefaultModel,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Format a ChatMessage to the DeepSeek/OpenAI API format.
|
|
113
|
+
*/
|
|
114
|
+
function formatMessage(msg) {
|
|
115
|
+
const formatted = {
|
|
116
|
+
role: msg.role,
|
|
117
|
+
content: msg.content,
|
|
118
|
+
};
|
|
119
|
+
if (msg.name)
|
|
120
|
+
formatted.name = msg.name;
|
|
121
|
+
if (msg.tool_calls)
|
|
122
|
+
formatted.tool_calls = msg.tool_calls;
|
|
123
|
+
if (msg.tool_call_id)
|
|
124
|
+
formatted.tool_call_id = msg.tool_call_id;
|
|
125
|
+
return formatted;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* DeepSeek cost estimation in cents per million tokens.
|
|
129
|
+
*/
|
|
130
|
+
export const DEEPSEEK_PRICING = {
|
|
131
|
+
"deepseek-v4-pro": { input: 200, output: 800 },
|
|
132
|
+
"deepseek-v4-flash": { input: 15, output: 60 },
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Estimate cost in cents for a DeepSeek inference call.
|
|
136
|
+
*/
|
|
137
|
+
export function estimateDeepSeekCostCents(usage, model) {
|
|
138
|
+
const p = DEEPSEEK_PRICING[model] || DEEPSEEK_PRICING["deepseek-v4-pro"];
|
|
139
|
+
const inputCost = (usage.promptTokens / 1_000_000) * p.input;
|
|
140
|
+
const outputCost = (usage.completionTokens / 1_000_000) * p.output;
|
|
141
|
+
return Math.ceil(inputCost + outputCost);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=deepseek-inference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek-inference.js","sourceRoot":"","sources":["../../src/clawd/deepseek-inference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLAWD Inference Client
|
|
3
|
+
*
|
|
4
|
+
* Wraps CLAWD Runtime's /v1/chat/completions endpoint (OpenAI-compatible).
|
|
5
|
+
* The automaton pays for its own thinking through CLAWD credits.
|
|
6
|
+
*/
|
|
7
|
+
import type { InferenceClient } from "../types.js";
|
|
8
|
+
interface InferenceClientOptions {
|
|
9
|
+
apiUrl: string;
|
|
10
|
+
apiKey: string;
|
|
11
|
+
defaultModel: string;
|
|
12
|
+
maxTokens: number;
|
|
13
|
+
lowComputeModel?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function createInferenceClient(options: InferenceClientOptions): InferenceClient;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=inference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../../src/clawd/inference.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EAOhB,MAAM,aAAa,CAAC;AAErB,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAkHjB"}
|