@clawos-dev/clawd 0.2.114-beta.231.042ed43 → 0.2.115-beta.232.54af528
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.cjs +81 -11
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -42096,6 +42096,62 @@ function buildExtensionHandlers(deps) {
|
|
|
42096
42096
|
};
|
|
42097
42097
|
}
|
|
42098
42098
|
|
|
42099
|
+
// src/app-builder/kill-port.ts
|
|
42100
|
+
var import_node_child_process7 = require("child_process");
|
|
42101
|
+
async function killPortOccupants(port, logger) {
|
|
42102
|
+
let pids;
|
|
42103
|
+
try {
|
|
42104
|
+
pids = await listPidsOnPort(port);
|
|
42105
|
+
} catch (err) {
|
|
42106
|
+
logger?.warn("app-builder.kill-port.lsof-failed", {
|
|
42107
|
+
port,
|
|
42108
|
+
error: err instanceof Error ? err.message : String(err)
|
|
42109
|
+
});
|
|
42110
|
+
return;
|
|
42111
|
+
}
|
|
42112
|
+
if (pids.length === 0) {
|
|
42113
|
+
logger?.info("app-builder.kill-port.no-occupants", { port });
|
|
42114
|
+
return;
|
|
42115
|
+
}
|
|
42116
|
+
for (const pid of pids) {
|
|
42117
|
+
try {
|
|
42118
|
+
process.kill(pid, "SIGKILL");
|
|
42119
|
+
logger?.info("app-builder.kill-port-occupant", { port, pid });
|
|
42120
|
+
} catch (err) {
|
|
42121
|
+
const code = err.code;
|
|
42122
|
+
if (code !== "ESRCH") {
|
|
42123
|
+
logger?.warn("app-builder.kill-port-occupant.failed", {
|
|
42124
|
+
port,
|
|
42125
|
+
pid,
|
|
42126
|
+
error: err instanceof Error ? err.message : String(err)
|
|
42127
|
+
});
|
|
42128
|
+
}
|
|
42129
|
+
}
|
|
42130
|
+
}
|
|
42131
|
+
}
|
|
42132
|
+
function listPidsOnPort(port) {
|
|
42133
|
+
return new Promise((resolve6, reject) => {
|
|
42134
|
+
(0, import_node_child_process7.execFile)(
|
|
42135
|
+
"lsof",
|
|
42136
|
+
["-ti", `:${port}`],
|
|
42137
|
+
{ timeout: 3e3 },
|
|
42138
|
+
(err, stdout) => {
|
|
42139
|
+
if (err && err.code === "ENOENT") {
|
|
42140
|
+
reject(new Error("lsof not found in PATH"));
|
|
42141
|
+
return;
|
|
42142
|
+
}
|
|
42143
|
+
const text = (stdout ?? "").toString().trim();
|
|
42144
|
+
if (!text) {
|
|
42145
|
+
resolve6([]);
|
|
42146
|
+
return;
|
|
42147
|
+
}
|
|
42148
|
+
const list = text.split("\n").map((s) => Number(s.trim())).filter((n) => Number.isInteger(n) && n > 0);
|
|
42149
|
+
resolve6(list);
|
|
42150
|
+
}
|
|
42151
|
+
);
|
|
42152
|
+
});
|
|
42153
|
+
}
|
|
42154
|
+
|
|
42099
42155
|
// src/handlers/app-builder.ts
|
|
42100
42156
|
init_protocol();
|
|
42101
42157
|
var DEV_SERVER_READY_TIMEOUT_MS = 3e4;
|
|
@@ -42351,12 +42407,26 @@ function buildAppBuilderHandlers(deps) {
|
|
|
42351
42407
|
`session ${f.sessionId} is not bound to any project; cannot stop dev server`
|
|
42352
42408
|
);
|
|
42353
42409
|
}
|
|
42354
|
-
|
|
42355
|
-
|
|
42356
|
-
|
|
42410
|
+
deps.logger?.info("app-builder.stop-dev-server.called", {
|
|
42411
|
+
name: projectName,
|
|
42412
|
+
sessionId: f.sessionId,
|
|
42413
|
+
isRunning: devServerLifecycle.isRunning(projectName)
|
|
42414
|
+
});
|
|
42415
|
+
if (devServerLifecycle.isRunning(projectName)) {
|
|
42416
|
+
await devServerLifecycle.stopForProject(projectName);
|
|
42417
|
+
}
|
|
42418
|
+
try {
|
|
42419
|
+
const projects = await store.list();
|
|
42420
|
+
const meta = projects.find((p2) => p2.name === projectName);
|
|
42421
|
+
if (meta) {
|
|
42422
|
+
await killPortOccupants(meta.port, deps.logger);
|
|
42423
|
+
}
|
|
42424
|
+
} catch (err) {
|
|
42425
|
+
deps.logger?.warn("app-builder.stop-dev-server.kill-port-skipped", {
|
|
42426
|
+
name: projectName,
|
|
42427
|
+
error: err instanceof Error ? err.message : String(err)
|
|
42428
|
+
});
|
|
42357
42429
|
}
|
|
42358
|
-
deps.logger?.info("app-builder.stop-dev-server.called", { name: projectName, sessionId: f.sessionId });
|
|
42359
|
-
await devServerLifecycle.stopForProject(projectName);
|
|
42360
42430
|
await setStageAndBroadcast(projectName, "stopped");
|
|
42361
42431
|
return { response: { ok: true } };
|
|
42362
42432
|
};
|
|
@@ -42519,7 +42589,7 @@ function buildMethodHandlers(deps) {
|
|
|
42519
42589
|
|
|
42520
42590
|
// src/app-builder/project-store.ts
|
|
42521
42591
|
var import_node_fs29 = require("fs");
|
|
42522
|
-
var
|
|
42592
|
+
var import_node_child_process8 = require("child_process");
|
|
42523
42593
|
var import_node_path41 = require("path");
|
|
42524
42594
|
init_protocol();
|
|
42525
42595
|
var PROJECTS_DIR = "projects";
|
|
@@ -42619,7 +42689,7 @@ var ProjectStore = class {
|
|
|
42619
42689
|
async scaffold(name, template = DEFAULT_TEMPLATE) {
|
|
42620
42690
|
const scriptPath = (0, import_node_path41.join)(this.personaRoot, SCAFFOLD_SCRIPT_REL);
|
|
42621
42691
|
return await new Promise((resolve6, reject) => {
|
|
42622
|
-
const child = (0,
|
|
42692
|
+
const child = (0, import_node_child_process8.spawn)("bash", [scriptPath, name, template], {
|
|
42623
42693
|
cwd: this.personaRoot,
|
|
42624
42694
|
env: { ...process.env, PATH: process.env.PATH ?? "" },
|
|
42625
42695
|
stdio: ["ignore", "pipe", "pipe"]
|
|
@@ -42688,7 +42758,7 @@ var ProjectStore = class {
|
|
|
42688
42758
|
};
|
|
42689
42759
|
|
|
42690
42760
|
// src/app-builder/dev-server-supervisor.ts
|
|
42691
|
-
var
|
|
42761
|
+
var import_node_child_process9 = require("child_process");
|
|
42692
42762
|
var import_node_events2 = require("events");
|
|
42693
42763
|
var DEFAULT_READY_PATTERN = /Local:\s+https?:\/\//;
|
|
42694
42764
|
var DevServerSupervisor = class extends import_node_events2.EventEmitter {
|
|
@@ -42725,7 +42795,7 @@ var DevServerSupervisor = class extends import_node_events2.EventEmitter {
|
|
|
42725
42795
|
tunnelHost: args.tunnelHost,
|
|
42726
42796
|
devCommand: cmd
|
|
42727
42797
|
});
|
|
42728
|
-
const child = (0,
|
|
42798
|
+
const child = (0, import_node_child_process9.spawn)("sh", ["-c", cmd], {
|
|
42729
42799
|
cwd: args.cwd,
|
|
42730
42800
|
env,
|
|
42731
42801
|
stdio: "pipe",
|
|
@@ -43097,7 +43167,7 @@ function computeGrantForFrame(method, frame) {
|
|
|
43097
43167
|
}
|
|
43098
43168
|
|
|
43099
43169
|
// src/extension/runtime.ts
|
|
43100
|
-
var
|
|
43170
|
+
var import_node_child_process10 = require("child_process");
|
|
43101
43171
|
var import_node_path42 = __toESM(require("path"), 1);
|
|
43102
43172
|
var import_promises10 = require("timers/promises");
|
|
43103
43173
|
|
|
@@ -43205,7 +43275,7 @@ var Runtime = class {
|
|
|
43205
43275
|
CLAWOS_EXT_PORT: String(port),
|
|
43206
43276
|
CLAWOS_EXT_ID: extId
|
|
43207
43277
|
};
|
|
43208
|
-
const child = (0,
|
|
43278
|
+
const child = (0, import_node_child_process10.spawn)("sh", ["-c", cmd], {
|
|
43209
43279
|
cwd: dir,
|
|
43210
43280
|
env,
|
|
43211
43281
|
stdio: ["ignore", "pipe", "pipe"],
|
package/package.json
CHANGED