@clawos-dev/clawd 0.2.110 → 0.2.111

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.
Files changed (2) hide show
  1. package/dist/cli.cjs +57 -10
  2. package/package.json +1 -1
package/dist/cli.cjs CHANGED
@@ -39495,6 +39495,15 @@ function buildSessionHandlers(deps) {
39495
39495
  const prevProject = prevFile?.appBuilderProject ?? null;
39496
39496
  const nextProject = args.patch.appBuilderProject ?? prevProject;
39497
39497
  const { response, broadcast } = manager.update(args);
39498
+ if (args.patch.appBuilderProject !== void 0) {
39499
+ deps.logger?.info("session-update.appBuilderProject", {
39500
+ sessionId: args.sessionId,
39501
+ prevProject,
39502
+ nextProject,
39503
+ hasLifecycle: !!deps.devServerLifecycle,
39504
+ hasStore: !!deps.appBuilderStore
39505
+ });
39506
+ }
39498
39507
  if (deps.devServerLifecycle && deps.appBuilderStore && args.patch.appBuilderProject !== void 0) {
39499
39508
  const lifecycle = deps.devServerLifecycle;
39500
39509
  const projectStore = deps.appBuilderStore;
@@ -39506,6 +39515,13 @@ function buildSessionHandlers(deps) {
39506
39515
  if (nextProject && nextProject !== "" && nextProject !== prevProject) {
39507
39516
  const projects = await projectStore.list();
39508
39517
  const target = projects.find((p2) => p2.name === nextProject);
39518
+ deps.logger?.info("session-update.start-dev-server", {
39519
+ sessionId: args.sessionId,
39520
+ projectName: nextProject,
39521
+ targetFound: !!target,
39522
+ projectCwd: target ? projectStore.projectDir(nextProject) : null,
39523
+ tunnelUrl
39524
+ });
39509
39525
  if (target) {
39510
39526
  lifecycle.startForSession({
39511
39527
  sessionId: args.sessionId,
@@ -39516,7 +39532,11 @@ function buildSessionHandlers(deps) {
39516
39532
  });
39517
39533
  }
39518
39534
  }
39519
- } catch {
39535
+ } catch (err) {
39536
+ deps.logger?.warn("session-update.lifecycle-failed", {
39537
+ sessionId: args.sessionId,
39538
+ error: err instanceof Error ? err.message : String(err)
39539
+ });
39520
39540
  }
39521
39541
  }
39522
39542
  return { response: { type: "session:info", ...response }, broadcast };
@@ -41561,7 +41581,8 @@ function buildMethodHandlers(deps) {
41561
41581
  ...deps,
41562
41582
  devServerLifecycle: deps.devServerLifecycle,
41563
41583
  appBuilderStore: deps.appBuilderStore,
41564
- getTunnelUrl: deps.getTunnelUrl
41584
+ getTunnelUrl: deps.getTunnelUrl,
41585
+ logger: deps.logger
41565
41586
  }),
41566
41587
  ...buildPermissionHandlers(deps),
41567
41588
  ...buildHistoryHandlers(deps),
@@ -41715,6 +41736,13 @@ var import_node_events2 = require("events");
41715
41736
  var DevServerSupervisor = class extends import_node_events2.EventEmitter {
41716
41737
  running = /* @__PURE__ */ new Map();
41717
41738
  // key: sessionId
41739
+ logger = { warn: () => {
41740
+ }, info: () => {
41741
+ } };
41742
+ /** daemon entry 启动后注入 logger,让 child 输出走 clawd.log */
41743
+ setLogger(logger) {
41744
+ this.logger = logger;
41745
+ }
41718
41746
  startForSession(args) {
41719
41747
  if (this.running.has(args.sessionId)) return;
41720
41748
  const augmentedPath = [
@@ -41730,20 +41758,38 @@ var DevServerSupervisor = class extends import_node_events2.EventEmitter {
41730
41758
  CLAWD_TUNNEL_HOST: args.tunnelHost ?? "",
41731
41759
  CLAWD_PREVIEW_PORT: String(args.port)
41732
41760
  };
41733
- const tag = `[dev-server ${args.projectName}@${args.port}]`;
41761
+ this.logger.info("dev-server.start", {
41762
+ projectName: args.projectName,
41763
+ port: args.port,
41764
+ cwd: args.cwd,
41765
+ sessionId: args.sessionId,
41766
+ tunnelHost: args.tunnelHost
41767
+ });
41734
41768
  const child = (0, import_node_child_process7.spawn)("pnpm", ["dev"], { cwd: args.cwd, env, stdio: "pipe", shell: true });
41735
41769
  const entry = { ...args, process: child };
41736
41770
  this.running.set(args.sessionId, entry);
41737
41771
  child.stdout?.on("data", (chunk) => {
41738
- process.stderr.write(`${tag} ${chunk}`);
41772
+ this.logger.info("dev-server.stdout", {
41773
+ projectName: args.projectName,
41774
+ port: args.port,
41775
+ chunk: chunk.toString().trimEnd()
41776
+ });
41739
41777
  });
41740
41778
  child.stderr?.on("data", (chunk) => {
41741
- process.stderr.write(`${tag} ${chunk}`);
41779
+ this.logger.warn("dev-server.stderr", {
41780
+ projectName: args.projectName,
41781
+ port: args.port,
41782
+ chunk: chunk.toString().trimEnd()
41783
+ });
41742
41784
  });
41743
41785
  child.on("error", (err) => {
41744
41786
  this.running.delete(args.sessionId);
41745
- process.stderr.write(`${tag} spawn failed: ${err.message}
41746
- `);
41787
+ this.logger.warn("dev-server.spawn-failed", {
41788
+ projectName: args.projectName,
41789
+ port: args.port,
41790
+ error: err.message,
41791
+ code: err.code
41792
+ });
41747
41793
  this.emit("devServer:failed", {
41748
41794
  sessionId: args.sessionId,
41749
41795
  projectName: args.projectName,
@@ -41753,9 +41799,8 @@ var DevServerSupervisor = class extends import_node_events2.EventEmitter {
41753
41799
  });
41754
41800
  child.on("exit", (code) => {
41755
41801
  this.running.delete(args.sessionId);
41802
+ this.logger.info("dev-server.exit", { projectName: args.projectName, port: args.port, code });
41756
41803
  if (code !== 0 && code !== null) {
41757
- process.stderr.write(`${tag} exited with code ${code}
41758
- `);
41759
41804
  this.emit("devServer:failed", {
41760
41805
  sessionId: args.sessionId,
41761
41806
  projectName: args.projectName,
@@ -42541,6 +42586,7 @@ async function startDaemon(config) {
42541
42586
  import_node_path45.default.join(config.dataDir, "personas/persona-app-builder")
42542
42587
  );
42543
42588
  const devServerSupervisor = new DevServerSupervisor();
42589
+ devServerSupervisor.setLogger(logger);
42544
42590
  const appBuilderPortRange = [];
42545
42591
  for (let p2 = PROJECT_PORT_MIN; p2 <= PROJECT_PORT_MAX; p2++) appBuilderPortRange.push(p2);
42546
42592
  const effectivePreviewPorts = Array.from(
@@ -42624,7 +42670,8 @@ async function startDaemon(config) {
42624
42670
  // app-builder
42625
42671
  appBuilderStore,
42626
42672
  deleteSessionsByProject,
42627
- devServerLifecycle: devServerSupervisor
42673
+ devServerLifecycle: devServerSupervisor,
42674
+ logger
42628
42675
  });
42629
42676
  const authResolver = new AuthContextResolver({
42630
42677
  ownerToken: resolvedAuthToken
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawos-dev/clawd",
3
- "version": "0.2.110",
3
+ "version": "0.2.111",
4
4
  "description": "Standalone clawd daemon — Claude Code (and future Codex) session server over WebSocket",
5
5
  "type": "module",
6
6
  "license": "MIT",