@getworkle/cli 0.2.6 → 0.2.8
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/dist/cli.js +95 -18
- package/dist/cli.js.map +1 -1
- package/package.json +4 -5
package/dist/cli.js
CHANGED
|
@@ -21367,6 +21367,7 @@ var AgentService = class _AgentService {
|
|
|
21367
21367
|
scheduler;
|
|
21368
21368
|
relayClient = null;
|
|
21369
21369
|
unsubscribeRelay = null;
|
|
21370
|
+
relaySendFn = null;
|
|
21370
21371
|
/** Map of agentId -> agent stub (for name lookups). */
|
|
21371
21372
|
agentMap = /* @__PURE__ */ new Map();
|
|
21372
21373
|
/** Map of agentId -> pulled config (for schedule + runtime settings). */
|
|
@@ -21396,6 +21397,55 @@ var AgentService = class _AgentService {
|
|
|
21396
21397
|
return;
|
|
21397
21398
|
}
|
|
21398
21399
|
console.log("[agents] Starting AgentService...");
|
|
21400
|
+
await this.syncConfigsAndSchedules();
|
|
21401
|
+
const relayUrl = deriveRelayUrl(this.apiUrl);
|
|
21402
|
+
this.relayClient = new RelayClient(relayUrl, this.instanceId, this.token);
|
|
21403
|
+
this.unsubscribeRelay = this.relayClient.onMessage((msg) => {
|
|
21404
|
+
this.handleRelayMessage(msg);
|
|
21405
|
+
});
|
|
21406
|
+
await this.relayClient.connect();
|
|
21407
|
+
console.log("[agents] Connected to relay");
|
|
21408
|
+
this.running = true;
|
|
21409
|
+
console.log("[agents] AgentService running");
|
|
21410
|
+
}
|
|
21411
|
+
/**
|
|
21412
|
+
* Start embedded inside SyncService — no own relay connection.
|
|
21413
|
+
* Relay messages are forwarded via ingestRelayMessage().
|
|
21414
|
+
* Progress frames are sent via the provided sendFn.
|
|
21415
|
+
*/
|
|
21416
|
+
async startEmbedded(sendFn) {
|
|
21417
|
+
if (this.running) {
|
|
21418
|
+
console.log("[agents] AgentService already running");
|
|
21419
|
+
return;
|
|
21420
|
+
}
|
|
21421
|
+
console.log("[agents] Starting AgentService (embedded)...");
|
|
21422
|
+
this.relaySendFn = sendFn;
|
|
21423
|
+
await this.syncConfigsAndSchedules();
|
|
21424
|
+
this.running = true;
|
|
21425
|
+
console.log("[agents] AgentService running (embedded \u2014 relay via SyncService)");
|
|
21426
|
+
}
|
|
21427
|
+
/**
|
|
21428
|
+
* Handle a relay message forwarded from SyncService.
|
|
21429
|
+
*/
|
|
21430
|
+
ingestRelayMessage(msg) {
|
|
21431
|
+
this.handleRelayMessage(msg);
|
|
21432
|
+
}
|
|
21433
|
+
/**
|
|
21434
|
+
* Send a message to the relay — uses own RelayClient in standalone mode,
|
|
21435
|
+
* or the injected sendFn in embedded mode.
|
|
21436
|
+
*/
|
|
21437
|
+
sendRelay(msg) {
|
|
21438
|
+
if (this.relaySendFn) {
|
|
21439
|
+
this.relaySendFn(msg);
|
|
21440
|
+
} else if (this.relayClient?.connected) {
|
|
21441
|
+
this.relayClient.send(msg);
|
|
21442
|
+
}
|
|
21443
|
+
}
|
|
21444
|
+
isRelayConnected() {
|
|
21445
|
+
if (this.relaySendFn) return true;
|
|
21446
|
+
return this.relayClient?.connected ?? false;
|
|
21447
|
+
}
|
|
21448
|
+
async syncConfigsAndSchedules() {
|
|
21399
21449
|
const stubs = await this.materializer.listAgents();
|
|
21400
21450
|
console.log(`[agents] Found ${stubs.length} claude_code agent(s)`);
|
|
21401
21451
|
const configs = [];
|
|
@@ -21424,16 +21474,7 @@ var AgentService = class _AgentService {
|
|
|
21424
21474
|
`[agents] Materialized ${materialized.length} agent config(s)`
|
|
21425
21475
|
);
|
|
21426
21476
|
}
|
|
21427
|
-
const relayUrl = deriveRelayUrl(this.apiUrl);
|
|
21428
|
-
this.relayClient = new RelayClient(relayUrl, this.instanceId, this.token);
|
|
21429
|
-
this.unsubscribeRelay = this.relayClient.onMessage((msg) => {
|
|
21430
|
-
this.handleRelayMessage(msg);
|
|
21431
|
-
});
|
|
21432
|
-
await this.relayClient.connect();
|
|
21433
|
-
console.log("[agents] Connected to relay");
|
|
21434
21477
|
this.refreshSchedules();
|
|
21435
|
-
this.running = true;
|
|
21436
|
-
console.log("[agents] AgentService running");
|
|
21437
21478
|
}
|
|
21438
21479
|
/**
|
|
21439
21480
|
* Trigger an agent run. Prevents concurrent runs of the same agent.
|
|
@@ -21446,8 +21487,8 @@ var AgentService = class _AgentService {
|
|
|
21446
21487
|
console.log(
|
|
21447
21488
|
`[agents] Agent ${agentId} is already running \u2014 skipping trigger`
|
|
21448
21489
|
);
|
|
21449
|
-
if (executionId && this.
|
|
21450
|
-
this.
|
|
21490
|
+
if (executionId && this.isRelayConnected()) {
|
|
21491
|
+
this.sendRelay({
|
|
21451
21492
|
type: "agent.result",
|
|
21452
21493
|
payload: {
|
|
21453
21494
|
agentId,
|
|
@@ -21466,8 +21507,8 @@ var AgentService = class _AgentService {
|
|
|
21466
21507
|
}
|
|
21467
21508
|
const runExecutionId = executionId ?? randomUUID();
|
|
21468
21509
|
const sendProgressPart = (part, sessionId) => {
|
|
21469
|
-
if (this.
|
|
21470
|
-
this.
|
|
21510
|
+
if (this.isRelayConnected()) {
|
|
21511
|
+
this.sendRelay({
|
|
21471
21512
|
type: "agent.progress",
|
|
21472
21513
|
payload: {
|
|
21473
21514
|
agentId,
|
|
@@ -21673,8 +21714,8 @@ var AgentService = class _AgentService {
|
|
|
21673
21714
|
this.activeRuns.set(agentId, runPromise);
|
|
21674
21715
|
try {
|
|
21675
21716
|
const result = await runPromise;
|
|
21676
|
-
if (this.
|
|
21677
|
-
this.
|
|
21717
|
+
if (this.isRelayConnected()) {
|
|
21718
|
+
this.sendRelay({
|
|
21678
21719
|
type: "agent.result",
|
|
21679
21720
|
payload: {
|
|
21680
21721
|
agentId,
|
|
@@ -21691,8 +21732,8 @@ var AgentService = class _AgentService {
|
|
|
21691
21732
|
} catch (err) {
|
|
21692
21733
|
const error46 = err instanceof Error ? err.message : String(err);
|
|
21693
21734
|
sendProgressPart({ type: "error", message: error46 });
|
|
21694
|
-
if (this.
|
|
21695
|
-
this.
|
|
21735
|
+
if (this.isRelayConnected()) {
|
|
21736
|
+
this.sendRelay({
|
|
21696
21737
|
type: "agent.result",
|
|
21697
21738
|
payload: {
|
|
21698
21739
|
agentId,
|
|
@@ -22162,6 +22203,10 @@ async function stageCliForDaemon(currentCliPath) {
|
|
|
22162
22203
|
throw new Error("Cannot determine the current CLI path for daemon install.");
|
|
22163
22204
|
}
|
|
22164
22205
|
await setupClawDirectory();
|
|
22206
|
+
const isNpxCache = currentCliPath.includes("/_npx/") || currentCliPath.includes("\\_npx\\");
|
|
22207
|
+
if (!isNpxCache) {
|
|
22208
|
+
return currentCliPath;
|
|
22209
|
+
}
|
|
22165
22210
|
await fs7.copyFile(currentCliPath, STAGED_CLI_PATH);
|
|
22166
22211
|
await fs7.chmod(STAGED_CLI_PATH, 448).catch(() => {
|
|
22167
22212
|
});
|
|
@@ -23082,6 +23127,22 @@ var SyncService = class {
|
|
|
23082
23127
|
unsubscribeEvents = null;
|
|
23083
23128
|
unsubscribeRelayMessages = null;
|
|
23084
23129
|
running = false;
|
|
23130
|
+
externalMessageHandler = null;
|
|
23131
|
+
/**
|
|
23132
|
+
* Register a handler for relay messages that SyncService doesn't handle
|
|
23133
|
+
* (e.g. agent.trigger, agent.cancel, agent.config.updated).
|
|
23134
|
+
* Must be called before start().
|
|
23135
|
+
*/
|
|
23136
|
+
onRelayMessage(handler) {
|
|
23137
|
+
this.externalMessageHandler = handler;
|
|
23138
|
+
}
|
|
23139
|
+
/**
|
|
23140
|
+
* Send a message through the relay WebSocket connection.
|
|
23141
|
+
* Used by AgentService in embedded mode to send progress/result frames.
|
|
23142
|
+
*/
|
|
23143
|
+
sendRelayMessage(msg) {
|
|
23144
|
+
this.relayClient?.send(msg);
|
|
23145
|
+
}
|
|
23085
23146
|
get isRunning() {
|
|
23086
23147
|
return this.running;
|
|
23087
23148
|
}
|
|
@@ -23177,7 +23238,12 @@ var SyncService = class {
|
|
|
23177
23238
|
);
|
|
23178
23239
|
}
|
|
23179
23240
|
this.unsubscribeRelayMessages = this.relayClient.onMessage((msg) => {
|
|
23180
|
-
if (msg.type !== "rpc.request")
|
|
23241
|
+
if (msg.type !== "rpc.request") {
|
|
23242
|
+
if (this.externalMessageHandler) {
|
|
23243
|
+
this.externalMessageHandler(msg);
|
|
23244
|
+
}
|
|
23245
|
+
return;
|
|
23246
|
+
}
|
|
23181
23247
|
const rpcId = typeof msg.id === "string" ? msg.id : null;
|
|
23182
23248
|
const method = typeof msg.method === "string" ? msg.method : null;
|
|
23183
23249
|
const params = msg.params && typeof msg.params === "object" ? msg.params : {};
|
|
@@ -23677,9 +23743,11 @@ program2.command("start").description("Start the Workle Claw sync service").opti
|
|
|
23677
23743
|
console.log(color.dim("Starting sync service... (Ctrl+C to stop)\n"));
|
|
23678
23744
|
const processManager = new ProcessManager();
|
|
23679
23745
|
const syncService = new SyncService();
|
|
23746
|
+
let agentService = null;
|
|
23680
23747
|
let weSpawnedGateway = false;
|
|
23681
23748
|
const shutdown = () => {
|
|
23682
23749
|
console.log("\n" + color.dim("Shutting down..."));
|
|
23750
|
+
agentService?.stop();
|
|
23683
23751
|
syncService.stop();
|
|
23684
23752
|
if (weSpawnedGateway) {
|
|
23685
23753
|
void processManager.stop().then(() => {
|
|
@@ -23702,6 +23770,15 @@ program2.command("start").description("Start the Workle Claw sync service").opti
|
|
|
23702
23770
|
weSpawnedGateway = true;
|
|
23703
23771
|
}
|
|
23704
23772
|
await syncService.start();
|
|
23773
|
+
try {
|
|
23774
|
+
agentService = await createAgentService();
|
|
23775
|
+
syncService.onRelayMessage((msg) => agentService.ingestRelayMessage(msg));
|
|
23776
|
+
await agentService.startEmbedded((msg) => syncService.sendRelayMessage(msg));
|
|
23777
|
+
} catch (err) {
|
|
23778
|
+
console.error(
|
|
23779
|
+
color.dim(`[agents] AgentService failed to start: ${err instanceof Error ? err.message : String(err)}`)
|
|
23780
|
+
);
|
|
23781
|
+
}
|
|
23705
23782
|
console.log(color.green("\u2713 Running"));
|
|
23706
23783
|
console.log(color.dim(" Press Ctrl+C to stop\n"));
|
|
23707
23784
|
} catch (err) {
|