@clawos-dev/clawd 0.2.511 → 0.2.513

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.
@@ -99,7 +99,7 @@ for ph in $(grep -oE '__[A-Z0-9_]+__' "$TMPL_RENDER" | sort -u); do
99
99
  # 读者往往是 agent——不给方向它就会去翻凭据、手动 export 或写回 config.env,
100
100
  # 正好把「值不落 persona 目录」这条纪律拆掉。
101
101
  echo " 如果你是手动跑这个脚本:凭据只注给 daemon 起的那个进程,手动跑必然缺。" >&2
102
- echo " 正确做法是改调 appBuilder:publish RPC 重跑;**不要**去找 key 手动 export,也不要写回 config.env。" >&2
102
+ echo " 正确做法是改调 clawd-app-builder 的 publish tool 重跑;**不要**去找 key 手动 export,也不要写回 config.env。" >&2
103
103
  echo " 确实是漏配(新增了占位符 / 换了实例):改 daemon 的凭据表(~/.clawd/secrets/),不是改模板。" >&2
104
104
  exit 1
105
105
  fi
@@ -22912,10 +22912,6 @@ var SessionFileSchema = external_exports.object({
22912
22912
  * 本机资源指针——mirror 上与 ownerPersonaId 同地点 strip(#750 防线)。
22913
22913
  */
22914
22914
  projectPath: external_exports.string().min(1).optional(),
22915
- // app-builder Project 反向索引(spec: superpowers/specs/2026-06-01-app-builder-project-picker-design.md)。
22916
- // 当此 session 绑定到某个 build 中的 project 时填写;name 与 projects/<name>/ 子目录同名,
22917
- // 受 projectNameSchema regex 约束。daemon session:resume 时校验该目录存在,不存在则拒。
22918
- appBuilderProject: external_exports.string().regex(/^[a-z][a-z0-9-]{0,39}$/).optional(),
22919
22915
  // listener-mode sub-session 的原始 chatId(owner-mode 不写;listener-scope 强制写入)。
22920
22916
  // 派生 sessionId 是单向 hash `${personaId}-${tokenHash12}-${chatHash8}`,必须保留原始 chatId
22921
22917
  // 才能让 alice 重连同一 sub-session(持久化在 alice localStorage 之外,由 daemon push 同步)。
@@ -23250,10 +23246,6 @@ var SessionCreateArgs = external_exports.object({
23250
23246
  // owner-mode persona session:传此字段时 daemon 自行派生 cwd 和启动参数,
23251
23247
  // 且按 ownerPersonaId 做 idempotent dedupe(每 persona 永远只有一个 owner session)
23252
23248
  ownerPersonaId: external_exports.string().min(1).optional(),
23253
- // 单栏默认 refactor (spec 2026-06-02):appBuilderProject 字段已从 SessionCreateArgs 砍掉。
23254
- // 绑定路径收敛到 appBuilder:createProject —— 先创建空 session(仅传 ownerPersonaId=persona-app-builder),
23255
- // 后通过 createProject RPC 创建 project 并 daemon 内部 mutate 写入 appBuilderProject。
23256
- // SessionFile schema 仍保留该字段供 daemon 内部 mutate(manager.update 内部调用通道)。
23257
23249
  /**
23258
23250
  * 新建会话选择的 project(spec 2026-08-17-projects-sidebar §4.2):
23259
23251
  * - 单独出现:daemon 以它为 cwd(等价传 cwd)
@@ -23340,9 +23332,6 @@ var SessionUpdateArgs = external_exports.object({
23340
23332
  // 从所有 sidebar 消费者视野消失(App.visibleSessions / buildSessionTree),用户看不见
23341
23333
  // 也删不掉,再被 sweepEphemeralOnStartup 静默删除——数据丢失级别的口子。
23342
23334
  ephemeral: external_exports.literal(false).optional()
23343
- // 注意:appBuilderProject 字段已从 patch 中砍掉(spec 2026-06-02-app-builder-single-pane-default-design)。
23344
- // 绑定单向不可变 —— 由 appBuilder:createProject 在 daemon 内部一次写入;UI / assistant 不再
23345
- // 通过 sessionUpdate 修改这个字段。SessionFile 仍保留 appBuilderProject 字段供 daemon 内部 mutate。
23346
23335
  })
23347
23336
  });
23348
23337
  var QueuedMessage = external_exports.object({
@@ -23689,188 +23678,6 @@ var InfoResponseSchema = external_exports.object({
23689
23678
  * 探测见 daemon/src/cli-probe/probe.ts。旧 daemon 不发 → undefined。 */
23690
23679
  globalCliVersion: external_exports.string().nullable().optional()
23691
23680
  });
23692
- var PROJECT_PORT_MIN = 6173;
23693
- var PROJECT_PORT_MAX = 6272;
23694
- var projectNameRegex = /^[a-z][a-z0-9-]{0,39}$/;
23695
- var ProjectMetadataSchema = external_exports.object({
23696
- name: external_exports.string().regex(projectNameRegex, {
23697
- message: "kebab-case, \u5C0F\u5199\u5B57\u6BCD\u5F00\u5934\uFF0C\u53EA\u5141\u8BB8\u5C0F\u5199\u5B57\u6BCD / \u6570\u5B57 / -\uFF0C\u6700\u957F 40 \u5B57\u7B26"
23698
- }),
23699
- port: external_exports.number().int().min(PROJECT_PORT_MIN).max(PROJECT_PORT_MAX),
23700
- createdAt: external_exports.string().datetime(),
23701
- /** dev server 启动命令(shell 字符串);占位符 $CLAWD_PREVIEW_PORT 替换 + env 注入 */
23702
- devCommand: external_exports.string().min(1),
23703
- /**
23704
- * 发布上线后的公网 URL(spec 2026-06-02-app-builder-single-pane-default-design §5.6.1)。
23705
- * assistant 跑完 publish.sh 后调 appBuilder:setProdUrl 写入;UI 读这个字段切预览栏到线上 URL,
23706
- * 取代旧 `<builder-preview url=... label="prod" />` marker 机制。
23707
- * 老 project 元数据无此字段(optional 兼容)。
23708
- */
23709
- prodUrl: external_exports.string().url().optional(),
23710
- /**
23711
- * dev server 就绪 stdout regex(spec 2026-06-02-app-builder-explicit-dev-server-control §2)。
23712
- * supervisor spawn 后会监听子进程 stdout,命中此 regex 视为 dev server 真 ready;
23713
- * 仅当 await ready 后才把 stage 切到 'running',避免 cold start race 导致 iframe 502。
23714
- * optional:缺省时 supervisor 用默认 /Local:\s+https?:\/\//(vite "Local: http://..." 输出)。
23715
- * 老板换非 vite 技术栈(Next.js "Ready in"、webpack "Compiled" 等)时自定义这个字段。
23716
- */
23717
- readyPattern: external_exports.string().optional(),
23718
- /**
23719
- * 发布上线脚手架化 (spec 2026-06-03-app-builder-publish-scaffold-design §5.1.4):
23720
- * in-flight 发布 job 的元数据。仅承载"in-flight"或"中断残骸"两种状态:
23721
- * - daemon spawn publish.sh + 收到第一个 ::stage::build marker 时写入
23722
- * - 每次 stage 切换更新 stage 字段
23723
- * - 成功 / 正常失败 / 用户 dismiss 时立即清掉
23724
- * - 只有 daemon 崩才会留残骸(子进程随 daemon 一起死)
23725
- * status 字段在 ProjectWithStatus 派生而不在这里 —— 本 schema 是落盘形态,
23726
- * "in-flight vs interrupted" 区分由 daemon 响应时实时拼 registry 状态得出。
23727
- */
23728
- publishJob: external_exports.object({
23729
- jobId: external_exports.string().min(1),
23730
- stage: external_exports.enum(["build", "deploy", "verify"]),
23731
- startedAt: external_exports.number().int().nonnegative()
23732
- }).optional()
23733
- });
23734
- var PROJECT_STAGE_VALUES = [
23735
- "install-pending",
23736
- // createProject 刚返回,scaffold 已完成(daemon 同步内联跑),等 assistant pnpm install
23737
- "installing",
23738
- // assistant pnpm install 中
23739
- "starting-dev-server",
23740
- // startDevServer 已调,supervisor spawn 子进程中(await ready 期间也在此 stage)
23741
- "running",
23742
- // dev server 跑起来了(supervisor stdout 命中 readyPattern + 端口已监听)
23743
- "stopped",
23744
- // 用户显式点"收起预览"停掉 / daemon 重启后默认;UI 渲染折叠条 + "展开预览"按钮
23745
- "failed"
23746
- // 某个阶段失败(stageReason 字段携带原因,含 dev server cold start timeout)
23747
- ];
23748
- var ProjectStageSchema = external_exports.enum(PROJECT_STAGE_VALUES);
23749
- var ProjectWithStatusSchema = ProjectMetadataSchema.extend({
23750
- isRunning: external_exports.boolean(),
23751
- boundSessionId: external_exports.string().nullable(),
23752
- /**
23753
- * 单栏 refactor stage fix (spec 2026-06-02 §5.6.2):daemon 内存维护的当前 stage。
23754
- * UI 据此切 PreviewPane spinner / iframe / error。
23755
- * optional 兼容启动后 daemon 还没有 stage 记录的 fresh project(按 isRunning 推断兜底)。
23756
- */
23757
- stage: ProjectStageSchema.optional(),
23758
- /** stage='failed' 时携带失败原因 */
23759
- stageReason: external_exports.string().optional(),
23760
- /**
23761
- * 发布上线脚手架化 (spec 2026-06-03-app-builder-publish-scaffold-design §5.1.3):
23762
- * ProjectMetadata.publishJob 的 status 派生版。daemon 响应时按以下规则实时拼装:
23763
- * - 落盘字段存在 + PublishJobRegistry 有匹配 jobId → 'in-flight'
23764
- * - 落盘字段存在 + Registry 无匹配(jobId 对不上或 entry 缺失)→ 'interrupted'(daemon 崩残骸)
23765
- * - 落盘字段不存在 → undefined(字段省略)
23766
- * UI 用 status 决定 PreviewPane 渲染分支(in-flight 三段 checklist / interrupted 恢复条)。
23767
- */
23768
- publishJob: external_exports.object({
23769
- jobId: external_exports.string().min(1),
23770
- stage: external_exports.enum(["build", "deploy", "verify"]),
23771
- startedAt: external_exports.number().int().nonnegative(),
23772
- status: external_exports.enum(["in-flight", "interrupted"])
23773
- }).optional()
23774
- });
23775
- var ListProjectsArgsSchema = external_exports.object({}).strict();
23776
- var ListProjectsResultSchema = external_exports.object({
23777
- projects: external_exports.array(ProjectWithStatusSchema)
23778
- }).strict();
23779
- var GetProjectArgsSchema = external_exports.object({
23780
- sessionId: external_exports.string().min(1)
23781
- }).strict();
23782
- var GetProjectResultSchema = external_exports.object({
23783
- /** session 未绑 project / project 不存在时为 null(UI 走单栏 / 折叠) */
23784
- project: ProjectWithStatusSchema.nullable()
23785
- }).strict();
23786
- var CreateProjectArgsSchema = external_exports.object({
23787
- /** 必填:caller session,daemon 自动绑过去(spec 2026-06-02 §3 invariant 1 Session ↔ 1 Project) */
23788
- sessionId: external_exports.string().min(1),
23789
- // .min(1):改造前手写校验是 `!f.name` 明确拒空串;空 name 会让 projectDir('')
23790
- // 落到 projects 根目录,scaffold 往根上铺模板。
23791
- name: external_exports.string().min(1)
23792
- }).strict();
23793
- var CreateProjectResultSchema = external_exports.object({
23794
- project: ProjectMetadataSchema
23795
- }).strict();
23796
- var DeleteProjectArgsSchema = external_exports.object({
23797
- name: external_exports.string()
23798
- }).strict();
23799
- var DeleteProjectResultSchema = external_exports.object({}).strict();
23800
- var UpdateProjectPortArgsSchema = external_exports.object({
23801
- name: external_exports.string(),
23802
- newPort: external_exports.number().int()
23803
- }).strict();
23804
- var UpdateProjectPortResultSchema = external_exports.object({
23805
- project: ProjectMetadataSchema
23806
- }).strict();
23807
- var SetProdUrlArgsSchema = external_exports.object({
23808
- name: external_exports.string().regex(projectNameRegex),
23809
- url: external_exports.string().url()
23810
- }).strict();
23811
- var SetProdUrlResultSchema = external_exports.object({
23812
- project: ProjectMetadataSchema
23813
- }).strict();
23814
- var StartDevServerArgsSchema = external_exports.object({
23815
- sessionId: external_exports.string().min(1),
23816
- force: external_exports.boolean().optional()
23817
- }).strict();
23818
- var StartDevServerResultSchema = external_exports.object({
23819
- project: ProjectMetadataSchema
23820
- }).strict();
23821
- var ASSISTANT_REPORTABLE_STAGES = [
23822
- "installing",
23823
- "failed"
23824
- ];
23825
- var ReportStageArgsSchema = external_exports.object({
23826
- sessionId: external_exports.string().min(1),
23827
- stage: external_exports.enum(ASSISTANT_REPORTABLE_STAGES),
23828
- /** stage='failed' 时必填的原因(一句话),其它 stage optional */
23829
- reason: external_exports.string().optional()
23830
- }).strict();
23831
- var ReportStageResultSchema = external_exports.object({
23832
- ok: external_exports.literal(true)
23833
- }).strict();
23834
- var StopDevServerArgsSchema = external_exports.object({
23835
- sessionId: external_exports.string().min(1)
23836
- }).strict();
23837
- var StopDevServerResultSchema = external_exports.object({
23838
- ok: external_exports.literal(true)
23839
- }).strict();
23840
- var AppBuilderProjectUpdatedEventSchema = external_exports.object({
23841
- type: external_exports.literal("appBuilder:project-updated"),
23842
- project: ProjectWithStatusSchema,
23843
- stage: ProjectStageSchema,
23844
- /** stage='failed' 时的失败原因 */
23845
- stageReason: external_exports.string().optional()
23846
- }).strict();
23847
- var PublishArgsSchema = external_exports.object({
23848
- name: external_exports.string().regex(projectNameRegex)
23849
- });
23850
- var PublishResultSchema = external_exports.object({
23851
- jobId: external_exports.string().min(1),
23852
- status: external_exports.enum(["started", "already-publishing"])
23853
- }).strict();
23854
- var DismissPublishJobArgsSchema = external_exports.object({
23855
- name: external_exports.string().regex(projectNameRegex)
23856
- });
23857
- var DismissPublishJobResultSchema = external_exports.object({
23858
- ok: external_exports.literal(true)
23859
- }).strict();
23860
- var AppBuilderPublishProgressEventSchema = external_exports.object({
23861
- type: external_exports.literal("appBuilder:publish-progress"),
23862
- name: external_exports.string().regex(projectNameRegex),
23863
- jobId: external_exports.string().min(1),
23864
- stage: external_exports.enum(["build", "deploy", "verify"]),
23865
- status: external_exports.enum(["started", "completed"])
23866
- }).strict();
23867
- var AppBuilderPublishFailedEventSchema = external_exports.object({
23868
- type: external_exports.literal("appBuilder:publish-failed"),
23869
- name: external_exports.string().regex(projectNameRegex),
23870
- jobId: external_exports.string().min(1),
23871
- stage: external_exports.enum(["build", "deploy", "verify", "unknown"]),
23872
- errorSummary: external_exports.string()
23873
- }).strict();
23874
23681
 
23875
23682
  // ../protocol/src/methods.ts
23876
23683
  var NO_ARGS = external_exports.object({});
@@ -23906,7 +23713,7 @@ var METHOD_DOCS = {
23906
23713
  args: SessionUpdateArgs
23907
23714
  },
23908
23715
  "session:delete": {
23909
- summary: "\u5220\u4F1A\u8BDD\uFF1A\u505C\u8FDB\u7A0B + \u5220 SessionFile\uFF0C\u5E76\u8054\u52A8\u6E05\u7406\u7ED1\u5B9A\u7684 app-builder project",
23716
+ summary: "\u5220\u4F1A\u8BDD\uFF1A\u505C\u8FDB\u7A0B + \u5220 SessionFile",
23910
23717
  args: SessionIdArgs
23911
23718
  },
23912
23719
  "session:send": {
@@ -24497,50 +24304,6 @@ var METHOD_DOCS = {
24497
24304
  "device:connections": {
24498
24305
  summary: '\u5217\u51FA\u672C daemon \u5F53\u524D\u6240\u6709 owner WS \u8FDE\u63A5\uFF08\u672C\u673A UI / \u624B\u673A / \u7B2C\u4E8C\u53F0\u684C\u9762\uFF09+ \u5404\u81EA clientInfo\u3002owner-only\uFF1Bguest \u8FDE\u63A5\u4E0D\u5728\u5217\uFF08\u4E0D\u662F"\u6211\u7684\u8BBE\u5907"\u4E14\u4E0D\u5411 UI \u6CC4\u9732 guest \u4FE1\u606F\uFF09',
24499
24306
  args: NO_ARGS
24500
- },
24501
- "appBuilder:listProjects": {
24502
- summary: "\u5217\u51FA app-builder project\uFF08\u542B dev server \u72B6\u6001\uFF09",
24503
- args: ListProjectsArgsSchema
24504
- },
24505
- "appBuilder:getProject": {
24506
- summary: "\u6309 sessionId \u53D6\u5355\u4E2A\u7ED1\u5B9A\u7684 project\uFF08\u542B status\uFF09",
24507
- args: GetProjectArgsSchema
24508
- },
24509
- "appBuilder:createProject": {
24510
- summary: "\u7ED9\u4F1A\u8BDD\u7ED1\u5B9A\u65B0 project\uFF1A\u6821\u9A8C\u540D + \u4ECE PROJECT_PORT_MIN..MAX \u6BB5\uFF08\u5F53\u524D 6173-6272\uFF09\u5206\u914D\u672A\u5360\u7528\u7AEF\u53E3\uFF08\u8DE8 user \u5168\u5C40\u552F\u4E00\uFF0C\u6C60\u6EE1\u62A5\u9519\uFF09+ \u5EFA\u76EE\u5F55\u5199\u5143\u6570\u636E + **\u540C\u6B65 scaffold**\uFF08spawn \u811A\u672C\u628A nestjs-react \u6A21\u677F\u62F7\u8FDB\u53BB\uFF1B\u5931\u8D25\u4F1A\u5220\u6389\u521A\u5EFA\u7684\u76EE\u5F55\u518D\u629B INTERNAL\uFF0C\u4E0D\u7559\u534A\u6210\u54C1\uFF09\u3002**\u88C5\u4F9D\u8D56\u548C\u8D77 dev server \u90FD\u4E0D\u5728\u8FD9\u91CC**\uFF1A\u843D\u5730 stage=install-pending\uFF0C\u8C03\u7528\u65B9\u81EA\u5DF1 pnpm install + appBuilder:reportStage + appBuilder:startDevServer",
24511
- args: CreateProjectArgsSchema
24512
- },
24513
- "appBuilder:deleteProject": {
24514
- summary: "\u505C dev server + \u5220 project \u76EE\u5F55\uFF08\u7ED1\u5B9A\u7684\u4F1A\u8BDD\u4E0D\u5728\u8FD9\u91CC\u5220\uFF09",
24515
- args: DeleteProjectArgsSchema
24516
- },
24517
- "appBuilder:updateProjectPort": {
24518
- summary: "\u6539 dev server \u7AEF\u53E3\uFF08\u6821\u9A8C\u5728 PROJECT_PORT_MIN..MAX \u6BB5\u5185\u3001\u5F53\u524D 6173-6272\uFF1B**\u649E\u8F66\u53EA\u67E5\u8C03\u7528\u65B9\u81EA\u5DF1\u540D\u4E0B\u7684 project**\uFF0C\u4E0D\u50CF createProject \u90A3\u6837\u8DE8 user \u67E5\uFF09\uFF1A\u505C\u65E7\u7AEF\u53E3 dev server + \u6539 .clawd-project.json + \u7F6E stage=stopped\u3002**\u4E0D\u81EA\u52A8\u62C9\u8D77\u65B0\u7AEF\u53E3\u7684 dev server**\u2014\u2014\u8981\u8D77\u5F97\u518D\u8C03 appBuilder:startDevServer\uFF08\u90A3\u6761\u624D\u8D70 readiness probe\uFF09",
24519
- args: UpdateProjectPortArgsSchema
24520
- },
24521
- "appBuilder:setProdUrl": {
24522
- summary: "\u53D1\u5E03\u4E0A\u7EBF\u540E\u56DE\u586B\u7EBF\u4E0A\u5730\u5740\u5230 .clawd-project.json",
24523
- args: SetProdUrlArgsSchema
24524
- },
24525
- "appBuilder:startDevServer": {
24526
- summary: "scaffold + \u4F9D\u8D56\u5B89\u88C5\u5B8C\u6210\u540E\u663E\u5F0F\u62C9\u8D77 dev server\uFF08createProject \u4E0D\u518D\u81EA\u52A8\u8D77\uFF09",
24527
- args: StartDevServerArgsSchema
24528
- },
24529
- "appBuilder:reportStage": {
24530
- summary: "\u4E0A\u62A5\u811A\u624B\u67B6\u9636\u6BB5\uFF08scaffolding / installing / failed \u7B49\uFF09\uFF0Cdaemon \u5E7F\u64AD\u5E27\u8BA9 UI \u5207 PreviewPane",
24531
- args: ReportStageArgsSchema
24532
- },
24533
- "appBuilder:stopDevServer": {
24534
- summary: "\u6536\u8D77\u9884\u89C8\uFF1A\u505C\u6389 dev server\uFF08\u5BF9\u79F0 startDevServer\uFF09",
24535
- args: StopDevServerArgsSchema
24536
- },
24537
- "appBuilder:publish": {
24538
- summary: "\u53D1\u5E03\u4E0A\u7EBF\uFF1A\u4E32\u884C\u5316 spawn publish.sh \u5E76\u5E7F\u64AD\u9636\u6BB5\u8FDB\u5EA6\u5E27\uFF1B\u540C project \u5DF2\u6709 in-flight job \u65F6\u8FD4\u56DE already-publishing",
24539
- args: PublishArgsSchema
24540
- },
24541
- "appBuilder:dismissPublishJob": {
24542
- summary: "\u53D6\u6D88 in-flight publish\uFF08SIGTERM \u5B50\u8FDB\u7A0B\uFF09\u6216\u6E05\u6389 daemon \u5D29\u6E83\u7559\u4E0B\u7684\u6B8B\u9AB8 publishJob \u5B57\u6BB5",
24543
- args: DismissPublishJobArgsSchema
24544
24307
  }
24545
24308
  };
24546
24309
  var METHOD_NAMES = Object.keys(METHOD_DOCS);