@clawos-dev/clawd 0.2.114 → 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 +74 -6
- 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;
|
|
@@ -42359,6 +42415,18 @@ function buildAppBuilderHandlers(deps) {
|
|
|
42359
42415
|
if (devServerLifecycle.isRunning(projectName)) {
|
|
42360
42416
|
await devServerLifecycle.stopForProject(projectName);
|
|
42361
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
|
+
});
|
|
42429
|
+
}
|
|
42362
42430
|
await setStageAndBroadcast(projectName, "stopped");
|
|
42363
42431
|
return { response: { ok: true } };
|
|
42364
42432
|
};
|
|
@@ -42521,7 +42589,7 @@ function buildMethodHandlers(deps) {
|
|
|
42521
42589
|
|
|
42522
42590
|
// src/app-builder/project-store.ts
|
|
42523
42591
|
var import_node_fs29 = require("fs");
|
|
42524
|
-
var
|
|
42592
|
+
var import_node_child_process8 = require("child_process");
|
|
42525
42593
|
var import_node_path41 = require("path");
|
|
42526
42594
|
init_protocol();
|
|
42527
42595
|
var PROJECTS_DIR = "projects";
|
|
@@ -42621,7 +42689,7 @@ var ProjectStore = class {
|
|
|
42621
42689
|
async scaffold(name, template = DEFAULT_TEMPLATE) {
|
|
42622
42690
|
const scriptPath = (0, import_node_path41.join)(this.personaRoot, SCAFFOLD_SCRIPT_REL);
|
|
42623
42691
|
return await new Promise((resolve6, reject) => {
|
|
42624
|
-
const child = (0,
|
|
42692
|
+
const child = (0, import_node_child_process8.spawn)("bash", [scriptPath, name, template], {
|
|
42625
42693
|
cwd: this.personaRoot,
|
|
42626
42694
|
env: { ...process.env, PATH: process.env.PATH ?? "" },
|
|
42627
42695
|
stdio: ["ignore", "pipe", "pipe"]
|
|
@@ -42690,7 +42758,7 @@ var ProjectStore = class {
|
|
|
42690
42758
|
};
|
|
42691
42759
|
|
|
42692
42760
|
// src/app-builder/dev-server-supervisor.ts
|
|
42693
|
-
var
|
|
42761
|
+
var import_node_child_process9 = require("child_process");
|
|
42694
42762
|
var import_node_events2 = require("events");
|
|
42695
42763
|
var DEFAULT_READY_PATTERN = /Local:\s+https?:\/\//;
|
|
42696
42764
|
var DevServerSupervisor = class extends import_node_events2.EventEmitter {
|
|
@@ -42727,7 +42795,7 @@ var DevServerSupervisor = class extends import_node_events2.EventEmitter {
|
|
|
42727
42795
|
tunnelHost: args.tunnelHost,
|
|
42728
42796
|
devCommand: cmd
|
|
42729
42797
|
});
|
|
42730
|
-
const child = (0,
|
|
42798
|
+
const child = (0, import_node_child_process9.spawn)("sh", ["-c", cmd], {
|
|
42731
42799
|
cwd: args.cwd,
|
|
42732
42800
|
env,
|
|
42733
42801
|
stdio: "pipe",
|
|
@@ -43099,7 +43167,7 @@ function computeGrantForFrame(method, frame) {
|
|
|
43099
43167
|
}
|
|
43100
43168
|
|
|
43101
43169
|
// src/extension/runtime.ts
|
|
43102
|
-
var
|
|
43170
|
+
var import_node_child_process10 = require("child_process");
|
|
43103
43171
|
var import_node_path42 = __toESM(require("path"), 1);
|
|
43104
43172
|
var import_promises10 = require("timers/promises");
|
|
43105
43173
|
|
|
@@ -43207,7 +43275,7 @@ var Runtime = class {
|
|
|
43207
43275
|
CLAWOS_EXT_PORT: String(port),
|
|
43208
43276
|
CLAWOS_EXT_ID: extId
|
|
43209
43277
|
};
|
|
43210
|
-
const child = (0,
|
|
43278
|
+
const child = (0, import_node_child_process10.spawn)("sh", ["-c", cmd], {
|
|
43211
43279
|
cwd: dir,
|
|
43212
43280
|
env,
|
|
43213
43281
|
stdio: ["ignore", "pipe", "pipe"],
|
package/package.json
CHANGED