@arc402/daemon 1.2.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/bin/arc402-daemon +3 -0
- package/dist/abis.d.ts +20 -0
- package/dist/abis.d.ts.map +1 -0
- package/dist/abis.js +214 -0
- package/dist/abis.js.map +1 -0
- package/dist/api.d.ts +32 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +430 -0
- package/dist/api.js.map +1 -0
- package/dist/auth-server.d.ts +50 -0
- package/dist/auth-server.d.ts.map +1 -0
- package/dist/auth-server.js +266 -0
- package/dist/auth-server.js.map +1 -0
- package/dist/bundler.d.ts +68 -0
- package/dist/bundler.d.ts.map +1 -0
- package/dist/bundler.js +181 -0
- package/dist/bundler.js.map +1 -0
- package/dist/capabilities.d.ts +17 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +57 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/compute-metering.d.ts +61 -0
- package/dist/compute-metering.d.ts.map +1 -0
- package/dist/compute-metering.js +299 -0
- package/dist/compute-metering.js.map +1 -0
- package/dist/compute-session.d.ts +100 -0
- package/dist/compute-session.d.ts.map +1 -0
- package/dist/compute-session.js +231 -0
- package/dist/compute-session.js.map +1 -0
- package/dist/config.d.ts +121 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +397 -0
- package/dist/config.js.map +1 -0
- package/dist/context-manager.d.ts +17 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +123 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/credentials.d.ts +24 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +80 -0
- package/dist/credentials.js.map +1 -0
- package/dist/delivery-client.d.ts +35 -0
- package/dist/delivery-client.d.ts.map +1 -0
- package/dist/delivery-client.js +231 -0
- package/dist/delivery-client.js.map +1 -0
- package/dist/endpoint-policy.d.ts +11 -0
- package/dist/endpoint-policy.d.ts.map +1 -0
- package/dist/endpoint-policy.js +107 -0
- package/dist/endpoint-policy.js.map +1 -0
- package/dist/event-watchers.d.ts +11 -0
- package/dist/event-watchers.d.ts.map +1 -0
- package/dist/event-watchers.js +24 -0
- package/dist/event-watchers.js.map +1 -0
- package/dist/exec-state.d.ts +37 -0
- package/dist/exec-state.d.ts.map +1 -0
- package/dist/exec-state.js +53 -0
- package/dist/exec-state.js.map +1 -0
- package/dist/file-delivery.d.ts +98 -0
- package/dist/file-delivery.d.ts.map +1 -0
- package/dist/file-delivery.js +473 -0
- package/dist/file-delivery.js.map +1 -0
- package/dist/handshake-watcher.d.ts +31 -0
- package/dist/handshake-watcher.d.ts.map +1 -0
- package/dist/handshake-watcher.js +157 -0
- package/dist/handshake-watcher.js.map +1 -0
- package/dist/hire-listener.d.ts +32 -0
- package/dist/hire-listener.d.ts.map +1 -0
- package/dist/hire-listener.js +237 -0
- package/dist/hire-listener.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/job-lifecycle.d.ts +62 -0
- package/dist/job-lifecycle.d.ts.map +1 -0
- package/dist/job-lifecycle.js +201 -0
- package/dist/job-lifecycle.js.map +1 -0
- package/dist/notify.d.ts +51 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.js +276 -0
- package/dist/notify.js.map +1 -0
- package/dist/permission-gate.d.ts +30 -0
- package/dist/permission-gate.d.ts.map +1 -0
- package/dist/permission-gate.js +180 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/prompt-guard.d.ts +18 -0
- package/dist/prompt-guard.d.ts.map +1 -0
- package/dist/prompt-guard.js +70 -0
- package/dist/prompt-guard.js.map +1 -0
- package/dist/server.d.ts +27 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1956 -0
- package/dist/server.js.map +1 -0
- package/dist/session-manager.d.ts +55 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +139 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/signer.d.ts +19 -0
- package/dist/signer.d.ts.map +1 -0
- package/dist/signer.js +195 -0
- package/dist/signer.js.map +1 -0
- package/dist/token-metering.d.ts +42 -0
- package/dist/token-metering.d.ts.map +1 -0
- package/dist/token-metering.js +178 -0
- package/dist/token-metering.js.map +1 -0
- package/dist/userops.d.ts +24 -0
- package/dist/userops.d.ts.map +1 -0
- package/dist/userops.js +156 -0
- package/dist/userops.js.map +1 -0
- package/dist/wallet-monitor.d.ts +16 -0
- package/dist/wallet-monitor.d.ts.map +1 -0
- package/dist/wallet-monitor.js +57 -0
- package/dist/wallet-monitor.js.map +1 -0
- package/dist/worker-executor.d.ts +81 -0
- package/dist/worker-executor.d.ts.map +1 -0
- package/dist/worker-executor.js +527 -0
- package/dist/worker-executor.js.map +1 -0
- package/dist/worker-router.d.ts +63 -0
- package/dist/worker-router.d.ts.map +1 -0
- package/dist/worker-router.js +263 -0
- package/dist/worker-router.js.map +1 -0
- package/package.json +30 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TEMPLATE_DAEMON_TOML = exports.DAEMON_SOCK = exports.DAEMON_DB = exports.DAEMON_LOG = exports.DAEMON_PID = exports.DAEMON_TOML = exports.DAEMON_DIR = void 0;
|
|
37
|
+
exports.loadDaemonConfig = loadDaemonConfig;
|
|
38
|
+
exports.loadMachineKey = loadMachineKey;
|
|
39
|
+
exports.getMachineKeyEnvVarName = getMachineKeyEnvVarName;
|
|
40
|
+
/**
|
|
41
|
+
* Daemon configuration loader.
|
|
42
|
+
* Parses ~/.arc402/daemon.toml, enforces env: prefix for secrets,
|
|
43
|
+
* resolves env: values from the environment.
|
|
44
|
+
*/
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const os = __importStar(require("os"));
|
|
48
|
+
const smol_toml_1 = require("smol-toml");
|
|
49
|
+
exports.DAEMON_DIR = path.join(os.homedir(), ".arc402");
|
|
50
|
+
exports.DAEMON_TOML = path.join(exports.DAEMON_DIR, "daemon.toml");
|
|
51
|
+
exports.DAEMON_PID = path.join(exports.DAEMON_DIR, "daemon.pid");
|
|
52
|
+
exports.DAEMON_LOG = path.join(exports.DAEMON_DIR, "daemon.log");
|
|
53
|
+
exports.DAEMON_DB = path.join(exports.DAEMON_DIR, "daemon.db");
|
|
54
|
+
exports.DAEMON_SOCK = path.join(exports.DAEMON_DIR, "daemon.sock");
|
|
55
|
+
function resolveEnvValue(value, field) {
|
|
56
|
+
if (!value.startsWith("env:"))
|
|
57
|
+
return value;
|
|
58
|
+
const varName = value.slice(4);
|
|
59
|
+
const resolved = process.env[varName];
|
|
60
|
+
if (!resolved) {
|
|
61
|
+
throw new Error(`Environment variable ${varName} is not set (required for ${field})`);
|
|
62
|
+
}
|
|
63
|
+
return resolved;
|
|
64
|
+
}
|
|
65
|
+
function tryResolveEnvValue(value) {
|
|
66
|
+
if (!value.startsWith("env:"))
|
|
67
|
+
return value;
|
|
68
|
+
const varName = value.slice(4);
|
|
69
|
+
return process.env[varName] ?? "";
|
|
70
|
+
}
|
|
71
|
+
function str(v, def = "") {
|
|
72
|
+
return typeof v === "string" ? v : def;
|
|
73
|
+
}
|
|
74
|
+
function num(v, def) {
|
|
75
|
+
return typeof v === "number" ? v : def;
|
|
76
|
+
}
|
|
77
|
+
function bool(v, def) {
|
|
78
|
+
return typeof v === "boolean" ? v : def;
|
|
79
|
+
}
|
|
80
|
+
function strArr(v) {
|
|
81
|
+
return Array.isArray(v) ? v : [];
|
|
82
|
+
}
|
|
83
|
+
function withDefaults(raw) {
|
|
84
|
+
const w = raw.wallet ?? {};
|
|
85
|
+
const n = raw.network ?? {};
|
|
86
|
+
const b = raw.bundler ?? {};
|
|
87
|
+
const r = raw.relay ?? {};
|
|
88
|
+
const wt = raw.watchtower ?? {};
|
|
89
|
+
const p = raw.policy ?? {};
|
|
90
|
+
const notif = raw.notifications ?? {};
|
|
91
|
+
const notifDiscord = notif.discord ?? {};
|
|
92
|
+
const notifWebhook = notif.webhook ?? {};
|
|
93
|
+
const notifEmail = notif.email ?? {};
|
|
94
|
+
const work = raw.work ?? {};
|
|
95
|
+
const compute = raw.compute ?? {};
|
|
96
|
+
const delivery = raw.delivery ?? {};
|
|
97
|
+
const worker = raw.worker ?? {};
|
|
98
|
+
return {
|
|
99
|
+
wallet: {
|
|
100
|
+
contract_address: str(w.contract_address),
|
|
101
|
+
owner_address: str(w.owner_address),
|
|
102
|
+
machine_key: str(w.machine_key, "env:ARC402_MACHINE_KEY"),
|
|
103
|
+
},
|
|
104
|
+
network: {
|
|
105
|
+
rpc_url: str(n.rpc_url, "https://mainnet.base.org"),
|
|
106
|
+
chain_id: num(n.chain_id, 8453),
|
|
107
|
+
entry_point: str(n.entry_point, "0x0000000071727De22E5E9d8BAf0edAc6f37da032"),
|
|
108
|
+
},
|
|
109
|
+
bundler: {
|
|
110
|
+
mode: (str(b.mode, "external")),
|
|
111
|
+
endpoint: str(b.endpoint),
|
|
112
|
+
earn_fees: bool(b.earn_fees, false),
|
|
113
|
+
eth_float: str(b.eth_float, "0.01"),
|
|
114
|
+
sweep_threshold: str(b.sweep_threshold, "0.005"),
|
|
115
|
+
sweep_to: str(b.sweep_to),
|
|
116
|
+
rpc_url: str(b.rpc_url),
|
|
117
|
+
},
|
|
118
|
+
relay: {
|
|
119
|
+
enabled: bool(r.enabled, true),
|
|
120
|
+
listen_port: num(r.listen_port, 4402),
|
|
121
|
+
endpoint: str(r.endpoint),
|
|
122
|
+
max_concurrent_agreements: num(r.max_concurrent_agreements, 10),
|
|
123
|
+
poll_interval_seconds: num(r.poll_interval_seconds, 2),
|
|
124
|
+
relay_url: str(r.relay_url),
|
|
125
|
+
},
|
|
126
|
+
watchtower: {
|
|
127
|
+
enabled: bool(wt.enabled, true),
|
|
128
|
+
poll_interval_seconds: num(wt.poll_interval_seconds, 60),
|
|
129
|
+
challenge_confirmation_blocks: num(wt.challenge_confirmation_blocks, 2),
|
|
130
|
+
external_watchtower_url: str(wt.external_watchtower_url),
|
|
131
|
+
update_interval_states: num(wt.update_interval_states, 10),
|
|
132
|
+
},
|
|
133
|
+
policy: {
|
|
134
|
+
auto_accept: bool(p.auto_accept, false),
|
|
135
|
+
max_price_eth: str(p.max_price_eth, "0.1"),
|
|
136
|
+
allowed_capabilities: strArr(p.allowed_capabilities),
|
|
137
|
+
require_min_trust_score: num(p.require_min_trust_score, 50),
|
|
138
|
+
min_hire_lead_time_seconds: num(p.min_hire_lead_time_seconds, 300),
|
|
139
|
+
},
|
|
140
|
+
notifications: {
|
|
141
|
+
telegram_bot_token: str(notif.telegram_bot_token, "env:TELEGRAM_BOT_TOKEN"),
|
|
142
|
+
telegram_chat_id: str(notif.telegram_chat_id, "env:TELEGRAM_CHAT_ID"),
|
|
143
|
+
notify_on_hire_request: bool(notif.notify_on_hire_request, true),
|
|
144
|
+
notify_on_hire_accepted: bool(notif.notify_on_hire_accepted, true),
|
|
145
|
+
notify_on_hire_rejected: bool(notif.notify_on_hire_rejected, true),
|
|
146
|
+
notify_on_delivery: bool(notif.notify_on_delivery, true),
|
|
147
|
+
notify_on_dispute: bool(notif.notify_on_dispute, true),
|
|
148
|
+
notify_on_channel_challenge: bool(notif.notify_on_channel_challenge, true),
|
|
149
|
+
notify_on_low_balance: bool(notif.notify_on_low_balance, true),
|
|
150
|
+
low_balance_threshold_eth: str(notif.low_balance_threshold_eth, "0.005"),
|
|
151
|
+
discord: { webhook_url: str(notifDiscord.webhook_url) },
|
|
152
|
+
webhook: {
|
|
153
|
+
url: str(notifWebhook.url),
|
|
154
|
+
headers: notifWebhook.headers ?? {},
|
|
155
|
+
},
|
|
156
|
+
email: {
|
|
157
|
+
smtp_host: str(notifEmail.smtp_host),
|
|
158
|
+
smtp_port: num(notifEmail.smtp_port, 587),
|
|
159
|
+
smtp_user: str(notifEmail.smtp_user),
|
|
160
|
+
smtp_pass: str(notifEmail.smtp_pass, "env:SMTP_PASS"),
|
|
161
|
+
to: str(notifEmail.to),
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
work: {
|
|
165
|
+
handler: (str(work.handler, "noop")),
|
|
166
|
+
exec_command: str(work.exec_command),
|
|
167
|
+
http_url: str(work.http_url),
|
|
168
|
+
http_auth_token: str(work.http_auth_token),
|
|
169
|
+
},
|
|
170
|
+
compute: {
|
|
171
|
+
enabled: bool(compute.enabled, false),
|
|
172
|
+
gpu_spec: str(compute.gpu_spec),
|
|
173
|
+
rate_per_hour_wei: str(compute.rate_per_hour_wei, "0"),
|
|
174
|
+
max_concurrent_sessions: num(compute.max_concurrent_sessions, 1),
|
|
175
|
+
metering_interval_seconds: num(compute.metering_interval_seconds, 30),
|
|
176
|
+
report_interval_minutes: num(compute.report_interval_minutes, 15),
|
|
177
|
+
auto_accept_compute: bool(compute.auto_accept_compute, false),
|
|
178
|
+
min_session_hours: num(compute.min_session_hours, 1),
|
|
179
|
+
max_session_hours: num(compute.max_session_hours, 24),
|
|
180
|
+
compute_agreement_address: str(compute.compute_agreement_address),
|
|
181
|
+
},
|
|
182
|
+
delivery: {
|
|
183
|
+
max_file_size_mb: num(delivery.max_file_size_mb, 100),
|
|
184
|
+
max_job_size_mb: num(delivery.max_job_size_mb, 500),
|
|
185
|
+
auto_download: bool(delivery.auto_download, true),
|
|
186
|
+
serve_files: bool(delivery.serve_files, true),
|
|
187
|
+
staged_dir: str(delivery.staged_dir, ""),
|
|
188
|
+
capabilities: Array.isArray(delivery.capabilities)
|
|
189
|
+
? delivery.capabilities.map(c => ({
|
|
190
|
+
name: str(c.name),
|
|
191
|
+
path: str(c.path),
|
|
192
|
+
description: str(c.description),
|
|
193
|
+
}))
|
|
194
|
+
: [],
|
|
195
|
+
},
|
|
196
|
+
worker: {
|
|
197
|
+
agent_type: str(worker.agent_type, "openclaw"),
|
|
198
|
+
max_concurrent_jobs: num(worker.max_concurrent_jobs, 2),
|
|
199
|
+
job_timeout_seconds: num(worker.job_timeout_seconds, 3600),
|
|
200
|
+
auto_execute: bool(worker.auto_execute, true),
|
|
201
|
+
},
|
|
202
|
+
// Read policyEngineAddress from [contracts] section in daemon.toml.
|
|
203
|
+
policyEngineAddress: (() => {
|
|
204
|
+
const contracts = raw.contracts ?? {};
|
|
205
|
+
return str(contracts.policy_engine_address) || null;
|
|
206
|
+
})(),
|
|
207
|
+
// Read serviceAgreementAddress from [contracts] section in daemon.toml,
|
|
208
|
+
// or fall back to ~/.arc402/config.json (CLI config) if not set.
|
|
209
|
+
serviceAgreementAddress: (() => {
|
|
210
|
+
const contracts = raw.contracts ?? {};
|
|
211
|
+
const fromToml = str(contracts.service_agreement_address);
|
|
212
|
+
if (fromToml)
|
|
213
|
+
return fromToml;
|
|
214
|
+
// Check CLI config.json in multiple locations (host home, workroom dir, DAEMON_DIR)
|
|
215
|
+
const cliConfigCandidates = [
|
|
216
|
+
path.join(os.homedir(), ".arc402", "config.json"),
|
|
217
|
+
path.join(exports.DAEMON_DIR, "config.json"),
|
|
218
|
+
"/workroom/.arc402/config.json",
|
|
219
|
+
];
|
|
220
|
+
for (const cliCfgPath of cliConfigCandidates) {
|
|
221
|
+
try {
|
|
222
|
+
if (fs.existsSync(cliCfgPath)) {
|
|
223
|
+
const cliCfg = JSON.parse(fs.readFileSync(cliCfgPath, "utf-8"));
|
|
224
|
+
const addr = cliCfg.serviceAgreementAddress;
|
|
225
|
+
if (addr)
|
|
226
|
+
return addr;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch { /* ignore */ }
|
|
230
|
+
}
|
|
231
|
+
return null;
|
|
232
|
+
})(),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
function loadDaemonConfig(configPath = exports.DAEMON_TOML) {
|
|
236
|
+
if (!fs.existsSync(configPath)) {
|
|
237
|
+
throw new Error(`daemon.toml not found at ${configPath}. Run: arc402 daemon init`);
|
|
238
|
+
}
|
|
239
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
240
|
+
let parsed;
|
|
241
|
+
try {
|
|
242
|
+
parsed = (0, smol_toml_1.parse)(raw);
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
throw new Error(`Failed to parse daemon.toml: ${err instanceof Error ? err.message : String(err)}`);
|
|
246
|
+
}
|
|
247
|
+
const config = withDefaults(parsed);
|
|
248
|
+
// Required fields
|
|
249
|
+
if (!config.wallet.contract_address) {
|
|
250
|
+
throw new Error("daemon.toml: wallet.contract_address is required");
|
|
251
|
+
}
|
|
252
|
+
if (!config.network.rpc_url) {
|
|
253
|
+
throw new Error("daemon.toml: network.rpc_url is required");
|
|
254
|
+
}
|
|
255
|
+
if (!config.network.chain_id) {
|
|
256
|
+
throw new Error("daemon.toml: network.chain_id is required");
|
|
257
|
+
}
|
|
258
|
+
// Machine key MUST use env: prefix — never hardcoded
|
|
259
|
+
if (!config.wallet.machine_key.startsWith("env:")) {
|
|
260
|
+
throw new Error("ERROR: machine_key must use env: prefix — never hardcode keys");
|
|
261
|
+
}
|
|
262
|
+
// Resolve optional env: values silently (missing = disabled feature)
|
|
263
|
+
config.notifications.telegram_bot_token = tryResolveEnvValue(config.notifications.telegram_bot_token);
|
|
264
|
+
config.notifications.telegram_chat_id = tryResolveEnvValue(config.notifications.telegram_chat_id);
|
|
265
|
+
config.notifications.discord.webhook_url = tryResolveEnvValue(config.notifications.discord.webhook_url);
|
|
266
|
+
config.notifications.webhook.url = tryResolveEnvValue(config.notifications.webhook.url);
|
|
267
|
+
config.notifications.email.smtp_pass = tryResolveEnvValue(config.notifications.email.smtp_pass);
|
|
268
|
+
config.work.http_auth_token = tryResolveEnvValue(config.work.http_auth_token);
|
|
269
|
+
return config;
|
|
270
|
+
}
|
|
271
|
+
function loadMachineKey(config) {
|
|
272
|
+
const envVarName = getMachineKeyEnvVarName(config);
|
|
273
|
+
const privateKey = process.env[envVarName];
|
|
274
|
+
if (!privateKey) {
|
|
275
|
+
throw new Error(`Machine key not found. Set environment variable: ${envVarName}`);
|
|
276
|
+
}
|
|
277
|
+
const { ethers } = require("ethers");
|
|
278
|
+
let address;
|
|
279
|
+
try {
|
|
280
|
+
const w = new ethers.Wallet(privateKey);
|
|
281
|
+
address = w.address;
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
throw new Error(`Invalid machine key format in ${envVarName}`);
|
|
285
|
+
}
|
|
286
|
+
return { privateKey, address };
|
|
287
|
+
}
|
|
288
|
+
function getMachineKeyEnvVarName(config) {
|
|
289
|
+
return config.wallet.machine_key.startsWith("env:")
|
|
290
|
+
? config.wallet.machine_key.slice(4)
|
|
291
|
+
: "ARC402_MACHINE_KEY";
|
|
292
|
+
}
|
|
293
|
+
exports.TEMPLATE_DAEMON_TOML = `# ~/.arc402/daemon.toml
|
|
294
|
+
# ARC-402 Daemon Configuration
|
|
295
|
+
# Generated by: arc402 daemon init
|
|
296
|
+
#
|
|
297
|
+
# SECURITY: Never put private keys here. Use environment variables.
|
|
298
|
+
|
|
299
|
+
[wallet]
|
|
300
|
+
contract_address = "" # ARC402Wallet contract address (required)
|
|
301
|
+
owner_address = "" # Owner EOA address — for display and verification only
|
|
302
|
+
machine_key = "env:ARC402_MACHINE_KEY" # Machine key loaded from environment. NEVER hardcode here.
|
|
303
|
+
|
|
304
|
+
[network]
|
|
305
|
+
rpc_url = "https://mainnet.base.org" # Public Base RPC (default)
|
|
306
|
+
chain_id = 8453 # Base mainnet. Use 84532 for Base Sepolia.
|
|
307
|
+
entry_point = "0x0000000071727De22E5E9d8BAf0edAc6f37da032" # ERC-4337 EntryPoint v0.7
|
|
308
|
+
|
|
309
|
+
[bundler]
|
|
310
|
+
mode = "external" # external | arc402 | self
|
|
311
|
+
endpoint = "" # Required when mode = external. Pimlico, Alchemy, etc.
|
|
312
|
+
earn_fees = false # self mode only: bundle for other network agents
|
|
313
|
+
eth_float = "0.01" # Minimum ETH to maintain in bundler EOA for gas fronting
|
|
314
|
+
sweep_threshold = "0.005" # Sweep fees to wallet when bundler EOA exceeds this (ETH)
|
|
315
|
+
sweep_to = "" # Sweep destination. Defaults to wallet.contract_address.
|
|
316
|
+
rpc_url = "" # self mode: private RPC. Defaults to network.rpc_url if empty.
|
|
317
|
+
|
|
318
|
+
[relay]
|
|
319
|
+
enabled = true
|
|
320
|
+
listen_port = 4402 # Port for incoming relay messages
|
|
321
|
+
endpoint = "" # Your public URL — run: arc402 setup endpoint
|
|
322
|
+
# Example: https://gigabrain.arc402.xyz
|
|
323
|
+
max_concurrent_agreements = 10 # Refuse new hire requests when this many are in-flight
|
|
324
|
+
poll_interval_seconds = 2 # How often to poll relay for incoming messages
|
|
325
|
+
relay_url = "" # The relay to poll. Defaults to agent metadata relay if empty.
|
|
326
|
+
|
|
327
|
+
[watchtower]
|
|
328
|
+
enabled = true
|
|
329
|
+
poll_interval_seconds = 60 # How often to poll chain for stale-close events
|
|
330
|
+
challenge_confirmation_blocks = 2 # Wait N block confirmations before accepting close as final
|
|
331
|
+
external_watchtower_url = "" # Register open channels here as backup (Tier 2 watchtower)
|
|
332
|
+
update_interval_states = 10 # Forward state to external watchtower every N state changes
|
|
333
|
+
|
|
334
|
+
[policy]
|
|
335
|
+
auto_accept = false # If true: auto-accept all hire requests within policy bounds
|
|
336
|
+
max_price_eth = "0.1" # Refuse any hire priced above this (ETH)
|
|
337
|
+
allowed_capabilities = [] # Empty list = accept any capability. Non-empty = whitelist.
|
|
338
|
+
require_min_trust_score = 50 # Refuse hirers whose wallet trust score is below this (0–100)
|
|
339
|
+
min_hire_lead_time_seconds = 300 # Refuse hires with delivery deadline < this many seconds away
|
|
340
|
+
|
|
341
|
+
[notifications]
|
|
342
|
+
telegram_bot_token = "env:TELEGRAM_BOT_TOKEN" # Load from env, not hardcoded
|
|
343
|
+
telegram_chat_id = "env:TELEGRAM_CHAT_ID" # Load from env, not hardcoded
|
|
344
|
+
notify_on_hire_request = true # Notify when a hire request arrives (pending approval)
|
|
345
|
+
notify_on_hire_accepted = true # Notify when daemon accepts a hire
|
|
346
|
+
notify_on_hire_rejected = true # Notify when daemon rejects a hire
|
|
347
|
+
notify_on_delivery = true # Notify when work is delivered and fulfill() submitted
|
|
348
|
+
notify_on_dispute = true # Notify when a dispute is raised (by either party)
|
|
349
|
+
notify_on_channel_challenge = true # Notify when watchtower submits a channel challenge
|
|
350
|
+
notify_on_low_balance = false # Disabled by default — enable if you want balance alerts
|
|
351
|
+
low_balance_threshold_eth = "0.005" # Balance alert threshold
|
|
352
|
+
|
|
353
|
+
[notifications.discord]
|
|
354
|
+
webhook_url = "" # Discord channel webhook URL (leave empty to disable)
|
|
355
|
+
|
|
356
|
+
[notifications.webhook]
|
|
357
|
+
url = "" # POST JSON {title, body, timestamp} to this URL (leave empty to disable)
|
|
358
|
+
# headers = { Authorization = "Bearer ..." } # Optional headers
|
|
359
|
+
|
|
360
|
+
[notifications.email]
|
|
361
|
+
smtp_host = "" # SMTP server hostname (leave empty to disable)
|
|
362
|
+
smtp_port = 587
|
|
363
|
+
smtp_user = "" # SMTP login / from address
|
|
364
|
+
smtp_pass = "env:SMTP_PASS" # Load from env, not hardcoded
|
|
365
|
+
to = "" # Recipient address
|
|
366
|
+
|
|
367
|
+
[work]
|
|
368
|
+
handler = "noop" # exec | http | noop
|
|
369
|
+
exec_command = "" # called with agreementId and spec as args (exec mode)
|
|
370
|
+
http_url = "" # POST {agreementId, specHash, deadline} as JSON (http mode)
|
|
371
|
+
http_auth_token = "env:WORKER_AUTH_TOKEN"
|
|
372
|
+
|
|
373
|
+
[compute]
|
|
374
|
+
enabled = false # Enable GPU compute rental
|
|
375
|
+
gpu_spec = "" # GPU model identifier (e.g. nvidia-h100-80gb)
|
|
376
|
+
rate_per_hour_wei = "0" # Wei per GPU-hour (0 = disabled)
|
|
377
|
+
max_concurrent_sessions = 1 # Usually 1 (one GPU per session)
|
|
378
|
+
metering_interval_seconds = 30 # nvidia-smi poll interval
|
|
379
|
+
report_interval_minutes = 15 # Usage report generation interval
|
|
380
|
+
auto_accept_compute = false # Auto-accept compute proposals
|
|
381
|
+
min_session_hours = 1 # Minimum session duration
|
|
382
|
+
max_session_hours = 24 # Maximum session duration
|
|
383
|
+
|
|
384
|
+
[delivery]
|
|
385
|
+
max_file_size_mb = 100 # Maximum size for a single uploaded file (MB)
|
|
386
|
+
max_job_size_mb = 500 # Maximum total size for all files in a job (MB)
|
|
387
|
+
auto_download = true # Auto-download and verify files on delivery notification
|
|
388
|
+
serve_files = true # Serve file endpoints (/job/:id/files, /job/:id/manifest)
|
|
389
|
+
|
|
390
|
+
[worker]
|
|
391
|
+
agent_type = "openclaw" # Runtime to execute hired work: openclaw (default) | claude-code | codex | shell
|
|
392
|
+
# openclaw is preferred — has auth built in, can spawn any ACP (Claude, Codex, etc.)
|
|
393
|
+
max_concurrent_jobs = 2 # Maximum jobs running simultaneously
|
|
394
|
+
job_timeout_seconds = 3600 # Kill job after this many seconds (default: 1h)
|
|
395
|
+
auto_execute = true # true: spawn agent automatically after accept. false: accept on-chain, await manual trigger.
|
|
396
|
+
`;
|
|
397
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface CompletedJobContext {
|
|
2
|
+
workerId: string;
|
|
3
|
+
harness: string;
|
|
4
|
+
task: string;
|
|
5
|
+
deliverable: string;
|
|
6
|
+
agreementId: string;
|
|
7
|
+
durationMs: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class ContextManager {
|
|
10
|
+
private consolidationLock;
|
|
11
|
+
private getLearningsPath;
|
|
12
|
+
private extractLearningsFromJob;
|
|
13
|
+
onJobComplete(job: CompletedJobContext): Promise<void>;
|
|
14
|
+
consolidate(workerId: string, _harness: string): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare const contextManager: ContextManager;
|
|
17
|
+
//# sourceMappingURL=context-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-manager.d.ts","sourceRoot":"","sources":["../src/context-manager.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,iBAAiB,CAAS;IAElC,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,uBAAuB;IAqBzB,aAAa,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBtD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgCrE;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.contextManager = exports.ContextManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const DAEMON_DIR = path.join(os.homedir(), ".arc402");
|
|
41
|
+
const CONSOLIDATION_THRESHOLD_BYTES = 8192; // 8KB — consolidate when learnings exceed this
|
|
42
|
+
class ContextManager {
|
|
43
|
+
constructor() {
|
|
44
|
+
this.consolidationLock = false;
|
|
45
|
+
}
|
|
46
|
+
getLearningsPath(workerId) {
|
|
47
|
+
return path.join(DAEMON_DIR, "worker", workerId, "memory", "learnings.md");
|
|
48
|
+
}
|
|
49
|
+
extractLearningsFromJob(job) {
|
|
50
|
+
// Extract key learnings from job output
|
|
51
|
+
const timestamp = new Date().toISOString().split("T")[0];
|
|
52
|
+
const lines = [
|
|
53
|
+
`\n## Job #${job.agreementId} — ${timestamp}`,
|
|
54
|
+
`Task: ${job.task.slice(0, 100)}${job.task.length > 100 ? "..." : ""}`,
|
|
55
|
+
`Duration: ${Math.round(job.durationMs / 1000)}s`,
|
|
56
|
+
];
|
|
57
|
+
// Extract any explicit learnings blocks from deliverable
|
|
58
|
+
const learningMatch = job.deliverable.match(/#+\s*learnings?\s*\n([\s\S]*?)(?=\n#+|\s*$)/i);
|
|
59
|
+
if (learningMatch) {
|
|
60
|
+
lines.push(learningMatch[1].trim());
|
|
61
|
+
}
|
|
62
|
+
else if (job.deliverable.length > 0) {
|
|
63
|
+
// Summarize first 200 chars as context
|
|
64
|
+
lines.push(`Output summary: ${job.deliverable.slice(0, 200).replace(/\n/g, " ")}...`);
|
|
65
|
+
}
|
|
66
|
+
return lines.join("\n") + "\n";
|
|
67
|
+
}
|
|
68
|
+
async onJobComplete(job) {
|
|
69
|
+
try {
|
|
70
|
+
const learningsPath = this.getLearningsPath(job.workerId);
|
|
71
|
+
const dir = path.dirname(learningsPath);
|
|
72
|
+
// Ensure directory exists
|
|
73
|
+
if (!fs.existsSync(dir)) {
|
|
74
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
// Append job learnings
|
|
77
|
+
const learning = this.extractLearningsFromJob(job);
|
|
78
|
+
fs.appendFileSync(learningsPath, learning, "utf-8");
|
|
79
|
+
// Check if consolidation needed
|
|
80
|
+
const size = fs.existsSync(learningsPath) ? fs.statSync(learningsPath).size : 0;
|
|
81
|
+
if (size > CONSOLIDATION_THRESHOLD_BYTES && !this.consolidationLock) {
|
|
82
|
+
setImmediate(() => this.consolidate(job.workerId, job.harness).catch(() => { }));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Never crash the daemon on context management failure
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async consolidate(workerId, _harness) {
|
|
90
|
+
if (this.consolidationLock)
|
|
91
|
+
return;
|
|
92
|
+
this.consolidationLock = true;
|
|
93
|
+
try {
|
|
94
|
+
const learningsPath = this.getLearningsPath(workerId);
|
|
95
|
+
if (!fs.existsSync(learningsPath))
|
|
96
|
+
return;
|
|
97
|
+
const content = fs.readFileSync(learningsPath, "utf-8");
|
|
98
|
+
const lines = content.split("\n");
|
|
99
|
+
// Keep only the last 50 job entries — prune the oldest
|
|
100
|
+
const jobHeaders = lines
|
|
101
|
+
.map((l, i) => ({ idx: i, isHeader: l.startsWith("## Job #") }))
|
|
102
|
+
.filter((l) => l.isHeader);
|
|
103
|
+
if (jobHeaders.length > 50) {
|
|
104
|
+
// Remove oldest entries, keep most recent 50
|
|
105
|
+
const cutIdx = jobHeaders[jobHeaders.length - 50].idx;
|
|
106
|
+
const pruned = [
|
|
107
|
+
"# Accumulated Learnings",
|
|
108
|
+
"",
|
|
109
|
+
`*Consolidated — ${new Date().toISOString().split("T")[0]}. Showing ${50} most recent jobs.*`,
|
|
110
|
+
"",
|
|
111
|
+
...lines.slice(cutIdx),
|
|
112
|
+
].join("\n");
|
|
113
|
+
fs.writeFileSync(learningsPath, pruned, "utf-8");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
this.consolidationLock = false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.ContextManager = ContextManager;
|
|
122
|
+
exports.contextManager = new ContextManager();
|
|
123
|
+
//# sourceMappingURL=context-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../src/context-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface ProviderConfig {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
auth: string;
|
|
4
|
+
env?: string;
|
|
5
|
+
oauth_token_path?: string;
|
|
6
|
+
hosts: string[];
|
|
7
|
+
service_account_path?: string;
|
|
8
|
+
}
|
|
9
|
+
interface CredentialsConfig {
|
|
10
|
+
providers: Record<string, ProviderConfig>;
|
|
11
|
+
}
|
|
12
|
+
export declare const CREDENTIALS_PATH: string;
|
|
13
|
+
export declare function loadCredentials(): Promise<CredentialsConfig | null>;
|
|
14
|
+
export declare function getEnabledProviders(): Promise<Array<{
|
|
15
|
+
name: string;
|
|
16
|
+
env?: string;
|
|
17
|
+
hosts: string[];
|
|
18
|
+
auth: string;
|
|
19
|
+
hasKey: boolean;
|
|
20
|
+
}>>;
|
|
21
|
+
export declare function getDockerEnvFlags(): Promise<string[]>;
|
|
22
|
+
export declare function getProviderHosts(): Promise<string[]>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,gBAAgB,QAAmE,CAAC;AAEjG,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAKzE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,KAAK,CAAC;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC,CAaF;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAS3D;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG1D"}
|