@clawos-dev/clawd 0.2.108-beta.206.f2600cc → 0.2.108-beta.207.1de9acd

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 +38 -2
  2. package/package.json +1 -1
package/dist/cli.cjs CHANGED
@@ -4924,7 +4924,11 @@ var init_schemas = __esm({
4924
4924
  effort: external_exports.string().optional(),
4925
4925
  cwd: external_exports.string().optional(),
4926
4926
  // 用户在 Edit modal 选择的 icon 标识;UI 端做 enum 兜底
4927
- iconKey: external_exports.string().optional()
4927
+ iconKey: external_exports.string().optional(),
4928
+ // app-builder picker 在当前 session 内切 project 时写入(spec 2026-06-01-app-builder-project-picker-design)。
4929
+ // daemon session:update handler 检测此字段变化时停旧 project dev server + 起新 project dev server。
4930
+ // 设为空字符串 '' 表示解绑(picker 不暴露解绑入口,但 schema 允许)。
4931
+ appBuilderProject: external_exports.string().regex(/^[a-z][a-z0-9-]{0,39}$/).or(external_exports.literal("")).optional()
4928
4932
  })
4929
4933
  });
4930
4934
  SessionSendArgs = external_exports.object({
@@ -39487,7 +39491,34 @@ function buildSessionHandlers(deps) {
39487
39491
  const update = async (frame, _client, ctx) => {
39488
39492
  const args = SessionUpdateArgs.parse(frame);
39489
39493
  ensureSessionAccess(ctx, args.sessionId, "send");
39494
+ const prevFile = manager.findOwnedSession(args.sessionId);
39495
+ const prevProject = prevFile?.appBuilderProject ?? null;
39496
+ const nextProject = args.patch.appBuilderProject ?? prevProject;
39490
39497
  const { response, broadcast } = manager.update(args);
39498
+ if (deps.devServerLifecycle && deps.appBuilderStore && args.patch.appBuilderProject !== void 0) {
39499
+ const lifecycle = deps.devServerLifecycle;
39500
+ const projectStore = deps.appBuilderStore;
39501
+ const tunnelUrl = deps.getTunnelUrl?.() ?? null;
39502
+ try {
39503
+ if (prevProject && prevProject !== nextProject) {
39504
+ await lifecycle.stopForSession(args.sessionId);
39505
+ }
39506
+ if (nextProject && nextProject !== "" && nextProject !== prevProject) {
39507
+ const projects = await projectStore.list();
39508
+ const target = projects.find((p2) => p2.name === nextProject);
39509
+ if (target) {
39510
+ lifecycle.startForSession({
39511
+ sessionId: args.sessionId,
39512
+ projectName: nextProject,
39513
+ cwd: projectStore.projectDir(nextProject),
39514
+ port: target.port,
39515
+ tunnelHost: tunnelUrl ? new URL(tunnelUrl.replace(/^wss?:\/\//i, "https://")).host : null
39516
+ });
39517
+ }
39518
+ }
39519
+ } catch {
39520
+ }
39521
+ }
39491
39522
  return { response: { type: "session:info", ...response }, broadcast };
39492
39523
  };
39493
39524
  const del = async (frame, _client, ctx) => {
@@ -41526,7 +41557,12 @@ async function uninstall(deps) {
41526
41557
  // src/handlers/index.ts
41527
41558
  function buildMethodHandlers(deps) {
41528
41559
  return {
41529
- ...buildSessionHandlers(deps),
41560
+ ...buildSessionHandlers({
41561
+ ...deps,
41562
+ devServerLifecycle: deps.devServerLifecycle,
41563
+ appBuilderStore: deps.appBuilderStore,
41564
+ getTunnelUrl: deps.getTunnelUrl
41565
+ }),
41530
41566
  ...buildPermissionHandlers(deps),
41531
41567
  ...buildHistoryHandlers(deps),
41532
41568
  ...buildWorkspaceHandlers(deps),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawos-dev/clawd",
3
- "version": "0.2.108-beta.206.f2600cc",
3
+ "version": "0.2.108-beta.207.1de9acd",
4
4
  "description": "Standalone clawd daemon — Claude Code (and future Codex) session server over WebSocket",
5
5
  "type": "module",
6
6
  "license": "MIT",