botmux 2.86.0 → 2.88.0

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 (247) hide show
  1. package/README.en.md +27 -0
  2. package/README.md +27 -0
  3. package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/herdr-backend.js +12 -1
  5. package/dist/adapters/backend/herdr-backend.js.map +1 -1
  6. package/dist/adapters/backend/liveness-gate.d.ts +38 -0
  7. package/dist/adapters/backend/liveness-gate.d.ts.map +1 -0
  8. package/dist/adapters/backend/liveness-gate.js +53 -0
  9. package/dist/adapters/backend/liveness-gate.js.map +1 -0
  10. package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
  11. package/dist/adapters/backend/pty-backend.js +4 -1
  12. package/dist/adapters/backend/pty-backend.js.map +1 -1
  13. package/dist/adapters/backend/tmux-backend.d.ts +22 -1
  14. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  15. package/dist/adapters/backend/tmux-backend.js +124 -36
  16. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  17. package/dist/adapters/backend/tmux-pipe-backend.d.ts +20 -0
  18. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  19. package/dist/adapters/backend/tmux-pipe-backend.js +86 -20
  20. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  21. package/dist/adapters/backend/types.d.ts +9 -0
  22. package/dist/adapters/backend/types.d.ts.map +1 -1
  23. package/dist/adapters/backend/types.js.map +1 -1
  24. package/dist/adapters/backend/zellij-backend.js +1 -1
  25. package/dist/adapters/backend/zellij-backend.js.map +1 -1
  26. package/dist/adapters/backend/zellij-observe-backend.d.ts +13 -0
  27. package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -1
  28. package/dist/adapters/backend/zellij-observe-backend.js +51 -12
  29. package/dist/adapters/backend/zellij-observe-backend.js.map +1 -1
  30. package/dist/adapters/cli/codex.d.ts.map +1 -1
  31. package/dist/adapters/cli/codex.js +8 -5
  32. package/dist/adapters/cli/codex.js.map +1 -1
  33. package/dist/adapters/cli/shared-hints.d.ts +2 -1
  34. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  35. package/dist/adapters/cli/shared-hints.js +25 -3
  36. package/dist/adapters/cli/shared-hints.js.map +1 -1
  37. package/dist/adapters/cli/traex.d.ts.map +1 -1
  38. package/dist/adapters/cli/traex.js +4 -0
  39. package/dist/adapters/cli/traex.js.map +1 -1
  40. package/dist/adapters/cli/types.d.ts +6 -0
  41. package/dist/adapters/cli/types.d.ts.map +1 -1
  42. package/dist/bot-registry.d.ts +23 -0
  43. package/dist/bot-registry.d.ts.map +1 -1
  44. package/dist/bot-registry.js +9 -0
  45. package/dist/bot-registry.js.map +1 -1
  46. package/dist/cli.d.ts.map +1 -1
  47. package/dist/cli.js +368 -16
  48. package/dist/cli.js.map +1 -1
  49. package/dist/core/command-handler.d.ts.map +1 -1
  50. package/dist/core/command-handler.js +7 -5
  51. package/dist/core/command-handler.js.map +1 -1
  52. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  53. package/dist/core/dashboard-ipc-server.js +210 -5
  54. package/dist/core/dashboard-ipc-server.js.map +1 -1
  55. package/dist/core/dashboard-rows.d.ts +3 -0
  56. package/dist/core/dashboard-rows.d.ts.map +1 -1
  57. package/dist/core/dashboard-rows.js +4 -1
  58. package/dist/core/dashboard-rows.js.map +1 -1
  59. package/dist/core/maintenance.d.ts +18 -0
  60. package/dist/core/maintenance.d.ts.map +1 -1
  61. package/dist/core/maintenance.js +58 -30
  62. package/dist/core/maintenance.js.map +1 -1
  63. package/dist/core/per-bot-env.d.ts +38 -0
  64. package/dist/core/per-bot-env.d.ts.map +1 -0
  65. package/dist/core/per-bot-env.js +79 -0
  66. package/dist/core/per-bot-env.js.map +1 -0
  67. package/dist/core/session-activity.d.ts +1 -0
  68. package/dist/core/session-activity.d.ts.map +1 -1
  69. package/dist/core/session-activity.js +7 -4
  70. package/dist/core/session-activity.js.map +1 -1
  71. package/dist/core/session-create.d.ts +62 -0
  72. package/dist/core/session-create.d.ts.map +1 -0
  73. package/dist/core/session-create.js +131 -0
  74. package/dist/core/session-create.js.map +1 -0
  75. package/dist/core/session-manager.d.ts +43 -0
  76. package/dist/core/session-manager.d.ts.map +1 -1
  77. package/dist/core/session-manager.js +306 -8
  78. package/dist/core/session-manager.js.map +1 -1
  79. package/dist/core/skills/discovery.d.ts +7 -0
  80. package/dist/core/skills/discovery.d.ts.map +1 -1
  81. package/dist/core/skills/discovery.js +51 -0
  82. package/dist/core/skills/discovery.js.map +1 -1
  83. package/dist/core/trigger-session.d.ts.map +1 -1
  84. package/dist/core/trigger-session.js +5 -2
  85. package/dist/core/trigger-session.js.map +1 -1
  86. package/dist/core/update-check.d.ts +67 -0
  87. package/dist/core/update-check.d.ts.map +1 -0
  88. package/dist/core/update-check.js +159 -0
  89. package/dist/core/update-check.js.map +1 -0
  90. package/dist/core/worker-pool.d.ts.map +1 -1
  91. package/dist/core/worker-pool.js +82 -4
  92. package/dist/core/worker-pool.js.map +1 -1
  93. package/dist/daemon.d.ts.map +1 -1
  94. package/dist/daemon.js +40 -11
  95. package/dist/daemon.js.map +1 -1
  96. package/dist/dashboard/bot-payload.d.ts +2 -0
  97. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  98. package/dist/dashboard/bot-payload.js +2 -0
  99. package/dist/dashboard/bot-payload.js.map +1 -1
  100. package/dist/dashboard/session-cleanup.d.ts +30 -0
  101. package/dist/dashboard/session-cleanup.d.ts.map +1 -0
  102. package/dist/dashboard/session-cleanup.js +47 -0
  103. package/dist/dashboard/session-cleanup.js.map +1 -0
  104. package/dist/dashboard/skill-install-request.d.ts +10 -0
  105. package/dist/dashboard/skill-install-request.d.ts.map +1 -1
  106. package/dist/dashboard/skill-install-request.js +17 -0
  107. package/dist/dashboard/skill-install-request.js.map +1 -1
  108. package/dist/dashboard/web/app.d.ts.map +1 -1
  109. package/dist/dashboard/web/app.js +29 -1
  110. package/dist/dashboard/web/app.js.map +1 -1
  111. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  112. package/dist/dashboard/web/bot-defaults.js +82 -6
  113. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  114. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  115. package/dist/dashboard/web/i18n.js +312 -2
  116. package/dist/dashboard/web/i18n.js.map +1 -1
  117. package/dist/dashboard/web/insights.d.ts.map +1 -1
  118. package/dist/dashboard/web/insights.js +355 -30
  119. package/dist/dashboard/web/insights.js.map +1 -1
  120. package/dist/dashboard/web/sessions.d.ts +2 -0
  121. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  122. package/dist/dashboard/web/sessions.js +457 -30
  123. package/dist/dashboard/web/sessions.js.map +1 -1
  124. package/dist/dashboard/web/settings.d.ts.map +1 -1
  125. package/dist/dashboard/web/settings.js +289 -0
  126. package/dist/dashboard/web/settings.js.map +1 -1
  127. package/dist/dashboard/web/skills.d.ts.map +1 -1
  128. package/dist/dashboard/web/skills.js +183 -10
  129. package/dist/dashboard/web/skills.js.map +1 -1
  130. package/dist/dashboard/web/whiteboards.d.ts +2 -0
  131. package/dist/dashboard/web/whiteboards.d.ts.map +1 -0
  132. package/dist/dashboard/web/whiteboards.js +267 -0
  133. package/dist/dashboard/web/whiteboards.js.map +1 -0
  134. package/dist/dashboard-web/app.js +879 -591
  135. package/dist/dashboard-web/index.html +1 -0
  136. package/dist/dashboard-web/style.css +528 -8
  137. package/dist/dashboard.js +472 -5
  138. package/dist/dashboard.js.map +1 -1
  139. package/dist/global-config.d.ts +6 -0
  140. package/dist/global-config.d.ts.map +1 -1
  141. package/dist/global-config.js +12 -0
  142. package/dist/global-config.js.map +1 -1
  143. package/dist/i18n/en.d.ts.map +1 -1
  144. package/dist/i18n/en.js +21 -1
  145. package/dist/i18n/en.js.map +1 -1
  146. package/dist/i18n/zh.d.ts.map +1 -1
  147. package/dist/i18n/zh.js +21 -1
  148. package/dist/i18n/zh.js.map +1 -1
  149. package/dist/im/lark/card-builder.d.ts +4 -5
  150. package/dist/im/lark/card-builder.d.ts.map +1 -1
  151. package/dist/im/lark/card-builder.js +113 -11
  152. package/dist/im/lark/card-builder.js.map +1 -1
  153. package/dist/im/lark/card-handler.d.ts +3 -2
  154. package/dist/im/lark/card-handler.d.ts.map +1 -1
  155. package/dist/im/lark/card-handler.js +174 -14
  156. package/dist/im/lark/card-handler.js.map +1 -1
  157. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  158. package/dist/im/lark/event-dispatcher.js +19 -5
  159. package/dist/im/lark/event-dispatcher.js.map +1 -1
  160. package/dist/im/lark/grant-pending.d.ts.map +1 -1
  161. package/dist/im/lark/grant-pending.js +9 -2
  162. package/dist/im/lark/grant-pending.js.map +1 -1
  163. package/dist/index-daemon.js +5 -0
  164. package/dist/index-daemon.js.map +1 -1
  165. package/dist/platform/bind.d.ts +2 -0
  166. package/dist/platform/bind.d.ts.map +1 -0
  167. package/dist/platform/bind.js +91 -0
  168. package/dist/platform/bind.js.map +1 -0
  169. package/dist/platform/binding.d.ts +22 -0
  170. package/dist/platform/binding.d.ts.map +1 -0
  171. package/dist/platform/binding.js +33 -0
  172. package/dist/platform/binding.js.map +1 -0
  173. package/dist/platform/tunnel-client.d.ts +15 -0
  174. package/dist/platform/tunnel-client.d.ts.map +1 -0
  175. package/dist/platform/tunnel-client.js +193 -0
  176. package/dist/platform/tunnel-client.js.map +1 -0
  177. package/dist/services/bot-config-store.d.ts.map +1 -1
  178. package/dist/services/bot-config-store.js +20 -0
  179. package/dist/services/bot-config-store.js.map +1 -1
  180. package/dist/services/git-worktree.d.ts +10 -0
  181. package/dist/services/git-worktree.d.ts.map +1 -1
  182. package/dist/services/git-worktree.js +71 -26
  183. package/dist/services/git-worktree.js.map +1 -1
  184. package/dist/services/grant-prefs-store.d.ts +3 -0
  185. package/dist/services/grant-prefs-store.d.ts.map +1 -1
  186. package/dist/services/grant-prefs-store.js +17 -2
  187. package/dist/services/grant-prefs-store.js.map +1 -1
  188. package/dist/services/insight/claude-span-reader.d.ts.map +1 -1
  189. package/dist/services/insight/claude-span-reader.js +18 -2
  190. package/dist/services/insight/claude-span-reader.js.map +1 -1
  191. package/dist/services/insight/codex-span-reader.d.ts.map +1 -1
  192. package/dist/services/insight/codex-span-reader.js +17 -1
  193. package/dist/services/insight/codex-span-reader.js.map +1 -1
  194. package/dist/services/insight/report.d.ts.map +1 -1
  195. package/dist/services/insight/report.js +48 -6
  196. package/dist/services/insight/report.js.map +1 -1
  197. package/dist/services/insight/types.d.ts +9 -0
  198. package/dist/services/insight/types.d.ts.map +1 -1
  199. package/dist/services/insight/types.js.map +1 -1
  200. package/dist/services/resumable-session-discovery.d.ts.map +1 -1
  201. package/dist/services/resumable-session-discovery.js +21 -4
  202. package/dist/services/resumable-session-discovery.js.map +1 -1
  203. package/dist/services/skill-registry-store.d.ts +1 -0
  204. package/dist/services/skill-registry-store.d.ts.map +1 -1
  205. package/dist/services/skill-registry-store.js +32 -0
  206. package/dist/services/skill-registry-store.js.map +1 -1
  207. package/dist/services/whiteboard-store.d.ts +67 -0
  208. package/dist/services/whiteboard-store.d.ts.map +1 -0
  209. package/dist/services/whiteboard-store.js +450 -0
  210. package/dist/services/whiteboard-store.js.map +1 -0
  211. package/dist/services/worktree-slug-ai.d.ts.map +1 -1
  212. package/dist/services/worktree-slug-ai.js +3 -1
  213. package/dist/services/worktree-slug-ai.js.map +1 -1
  214. package/dist/setup/bot-config-editor.d.ts +8 -0
  215. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  216. package/dist/setup/bot-config-editor.js +9 -0
  217. package/dist/setup/bot-config-editor.js.map +1 -1
  218. package/dist/skills/definitions.d.ts.map +1 -1
  219. package/dist/skills/definitions.js +118 -0
  220. package/dist/skills/definitions.js.map +1 -1
  221. package/dist/types.d.ts +15 -0
  222. package/dist/types.d.ts.map +1 -1
  223. package/dist/utils/crash-log.d.ts +22 -0
  224. package/dist/utils/crash-log.d.ts.map +1 -0
  225. package/dist/utils/crash-log.js +37 -0
  226. package/dist/utils/crash-log.js.map +1 -0
  227. package/dist/utils/input-gate.d.ts +10 -0
  228. package/dist/utils/input-gate.d.ts.map +1 -1
  229. package/dist/utils/input-gate.js +7 -0
  230. package/dist/utils/input-gate.js.map +1 -1
  231. package/dist/utils/install-diagnostics.d.ts +52 -0
  232. package/dist/utils/install-diagnostics.d.ts.map +1 -0
  233. package/dist/utils/install-diagnostics.js +155 -0
  234. package/dist/utils/install-diagnostics.js.map +1 -0
  235. package/dist/utils/install-info.d.ts +4 -0
  236. package/dist/utils/install-info.d.ts.map +1 -1
  237. package/dist/utils/install-info.js +6 -0
  238. package/dist/utils/install-info.js.map +1 -1
  239. package/dist/utils/stdio-epipe-guard.d.ts +39 -0
  240. package/dist/utils/stdio-epipe-guard.d.ts.map +1 -0
  241. package/dist/utils/stdio-epipe-guard.js +67 -0
  242. package/dist/utils/stdio-epipe-guard.js.map +1 -0
  243. package/dist/worker.js +222 -26
  244. package/dist/worker.js.map +1 -1
  245. package/dist/workflows/daemon-spawn.d.ts +2 -0
  246. package/dist/workflows/daemon-spawn.d.ts.map +1 -1
  247. package/package.json +1 -1
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Per-bot environment variables (`bots.json` → `env`).
3
+ *
4
+ * A bot entry may declare `env: { KEY: value, ... }` to inject extra environment
5
+ * variables into THAT bot's CLI process — e.g. point one bot at a third-party
6
+ * Anthropic/OpenAI-compatible provider (GLM / Kimi / a self-hosted gateway) via
7
+ * `ANTHROPIC_BASE_URL` + `ANTHROPIC_AUTH_TOKEN`, set an `HTTPS_PROXY`, or flip a
8
+ * CLI-specific feature flag.
9
+ *
10
+ * IMPORTANT — injection layer: this env is delivered to the CLI **per session**,
11
+ * NOT into the daemon's own process env. Under the tmux/zellij backends every
12
+ * bot shares ONE backing server whose global env is captured from whichever
13
+ * pane starts it first; putting provider creds into that shared global would let
14
+ * bot A's base-url/token leak into bot B's panes (startup-order dependent). So
15
+ * the worker passes this env as `SpawnOpts.injectEnv`, and the persistent
16
+ * backends inject it via the per-pane `/usr/bin/env KEY=VAL` prefix (after rcfile
17
+ * load, authoritative for that pane only) — never into the shared server env.
18
+ * The pty backend, which has no shared server, merges it into the child env.
19
+ *
20
+ * This is NOT a secret vault: values live in `bots.json` and the process
21
+ * environment in plaintext, visible to local diagnostic tools.
22
+ *
23
+ * Caveat — file sandbox: when a session runs inside the bwrap file sandbox the
24
+ * CLI's env is carried via `bwrap --setenv` (not the backend's injectEnv path),
25
+ * so per-bot env may not reach a sandboxed CLI. The common provider use case
26
+ * (GLM etc.) doesn't run sandboxed; sandbox + per-bot env is a possible follow-up.
27
+ */
28
+ /** Whether `key` is botmux-controlled and therefore rejected from per-bot env. */
29
+ export declare function isReservedPerBotEnvKey(key: string): boolean;
30
+ /**
31
+ * Sanitize a raw `env` value (from bots.json / dashboard / a config command)
32
+ * into a clean `KEY -> string` map: drops anything that isn't a plain object,
33
+ * keys with an invalid env-var name or a botmux-reserved name, and values that
34
+ * aren't a string/number/boolean (primitives are stringified). Pure + total —
35
+ * always returns an object, never throws.
36
+ */
37
+ export declare function sanitizePerBotEnv(raw: unknown): Record<string, string>;
38
+ //# sourceMappingURL=per-bot-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"per-bot-env.d.ts","sourceRoot":"","sources":["../../src/core/per-bot-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAyBH,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAatE"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Per-bot environment variables (`bots.json` → `env`).
3
+ *
4
+ * A bot entry may declare `env: { KEY: value, ... }` to inject extra environment
5
+ * variables into THAT bot's CLI process — e.g. point one bot at a third-party
6
+ * Anthropic/OpenAI-compatible provider (GLM / Kimi / a self-hosted gateway) via
7
+ * `ANTHROPIC_BASE_URL` + `ANTHROPIC_AUTH_TOKEN`, set an `HTTPS_PROXY`, or flip a
8
+ * CLI-specific feature flag.
9
+ *
10
+ * IMPORTANT — injection layer: this env is delivered to the CLI **per session**,
11
+ * NOT into the daemon's own process env. Under the tmux/zellij backends every
12
+ * bot shares ONE backing server whose global env is captured from whichever
13
+ * pane starts it first; putting provider creds into that shared global would let
14
+ * bot A's base-url/token leak into bot B's panes (startup-order dependent). So
15
+ * the worker passes this env as `SpawnOpts.injectEnv`, and the persistent
16
+ * backends inject it via the per-pane `/usr/bin/env KEY=VAL` prefix (after rcfile
17
+ * load, authoritative for that pane only) — never into the shared server env.
18
+ * The pty backend, which has no shared server, merges it into the child env.
19
+ *
20
+ * This is NOT a secret vault: values live in `bots.json` and the process
21
+ * environment in plaintext, visible to local diagnostic tools.
22
+ *
23
+ * Caveat — file sandbox: when a session runs inside the bwrap file sandbox the
24
+ * CLI's env is carried via `bwrap --setenv` (not the backend's injectEnv path),
25
+ * so per-bot env may not reach a sandboxed CLI. The common provider use case
26
+ * (GLM etc.) doesn't run sandboxed; sandbox + per-bot env is a possible follow-up.
27
+ */
28
+ /** Valid POSIX-ish env var name: letter/underscore start, then word chars. */
29
+ const ENV_KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
30
+ /**
31
+ * Names botmux owns to route the session, locate the daemon, and carry bot
32
+ * creds — a per-bot `env` must never set these, or user config could hijack
33
+ * session identity, clobber the CLI data root (Seed/Relay), or shadow a
34
+ * botmux-managed flag. Mirrors the worker's injected/redacted keys
35
+ * (BOTMUX_INJECTED_ENV_KEYS + REDACTED_CHILD_ENV_KEYS); kept as a local literal
36
+ * so this stays a dependency-free leaf module. `LARK_APP_` covers both bare
37
+ * creds; `BOTMUX` prefix covers all session-routing keys.
38
+ */
39
+ const RESERVED_ENV_PREFIXES = ['BOTMUX', 'LARK_APP_'];
40
+ const RESERVED_ENV_KEYS = new Set([
41
+ '__OWNER_OPEN_ID',
42
+ 'SESSION_DATA_DIR',
43
+ 'IS_SANDBOX',
44
+ 'CLAUDECODE',
45
+ 'CLAUDE_CONFIG_DIR',
46
+ 'CLAUDE_CODE_RESUME_TOKEN_THRESHOLD',
47
+ 'CJADK_INTERACTIVE',
48
+ ]);
49
+ /** Whether `key` is botmux-controlled and therefore rejected from per-bot env. */
50
+ export function isReservedPerBotEnvKey(key) {
51
+ if (RESERVED_ENV_KEYS.has(key))
52
+ return true;
53
+ return RESERVED_ENV_PREFIXES.some((p) => key.startsWith(p));
54
+ }
55
+ /**
56
+ * Sanitize a raw `env` value (from bots.json / dashboard / a config command)
57
+ * into a clean `KEY -> string` map: drops anything that isn't a plain object,
58
+ * keys with an invalid env-var name or a botmux-reserved name, and values that
59
+ * aren't a string/number/boolean (primitives are stringified). Pure + total —
60
+ * always returns an object, never throws.
61
+ */
62
+ export function sanitizePerBotEnv(raw) {
63
+ const obj = raw && typeof raw === 'object' && !Array.isArray(raw)
64
+ ? raw
65
+ : {};
66
+ const out = {};
67
+ for (const [key, value] of Object.entries(obj)) {
68
+ if (!ENV_KEY_RE.test(key))
69
+ continue;
70
+ if (isReservedPerBotEnvKey(key))
71
+ continue;
72
+ if (typeof value === 'string')
73
+ out[key] = value;
74
+ else if (typeof value === 'number' || typeof value === 'boolean')
75
+ out[key] = String(value);
76
+ }
77
+ return out;
78
+ }
79
+ //# sourceMappingURL=per-bot-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"per-bot-env.js","sourceRoot":"","sources":["../../src/core/per-bot-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,8EAA8E;AAC9E,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAU,CAAC;AAC/D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS;IACxC,iBAAiB;IACjB,kBAAkB;IAClB,YAAY;IACZ,YAAY;IACZ,mBAAmB;IACnB,oCAAoC;IACpC,mBAAmB;CACpB,CAAC,CAAC;AAEH,kFAAkF;AAClF,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,MAAM,GAAG,GACP,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QACnD,CAAC,CAAE,GAA+B;QAClC,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,IAAI,sBAAsB,CAAC,GAAG,CAAC;YAAE,SAAS;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -7,6 +7,7 @@ export declare function markSessionActivity(ds: DaemonSession, at?: number): voi
7
7
  * blindly. */
8
8
  export declare function publishAttentionPatch(ds: DaemonSession): void;
9
9
  export declare function clearAgentAttention(ds: DaemonSession): boolean;
10
+ export declare function announceSessionRow(ds: DaemonSession): void;
10
11
  /** Announce a repo-selection-pending session to dashboard SSE subscribers.
11
12
  *
12
13
  * `session.spawned` is normally published when the worker process spawns —
@@ -1 +1 @@
1
- {"version":3,"file":"session-activity.d.ts","sourceRoot":"","sources":["../../src/core/session-activity.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,GAAE,MAAmB,GAAG,IAAI,CAWpF;AAED;;;;eAIe;AACf,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAgB7D;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAK9D;AAED;;;;;;;;2EAQ2E;AAC3E,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAMlE"}
1
+ {"version":3,"file":"session-activity.d.ts","sourceRoot":"","sources":["../../src/core/session-activity.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,GAAE,MAAmB,GAAG,IAAI,CAWpF;AAED;;;;eAIe;AACf,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAgB7D;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAK9D;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAK1D;AAED;;;;;;;;2EAQ2E;AAC3E,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAGlE"}
@@ -47,6 +47,12 @@ export function clearAgentAttention(ds) {
47
47
  publishAttentionPatch(ds);
48
48
  return true;
49
49
  }
50
+ export function announceSessionRow(ds) {
51
+ dashboardEventBus.publish({
52
+ type: 'session.spawned',
53
+ body: { session: composeRowFromActive(ds) },
54
+ });
55
+ }
50
56
  /** Announce a repo-selection-pending session to dashboard SSE subscribers.
51
57
  *
52
58
  * `session.spawned` is normally published when the worker process spawns —
@@ -59,9 +65,6 @@ export function clearAgentAttention(ds) {
59
65
  export function announcePendingRepoSession(ds) {
60
66
  if (!ds.pendingRepo)
61
67
  return;
62
- dashboardEventBus.publish({
63
- type: 'session.spawned',
64
- body: { session: composeRowFromActive(ds) },
65
- });
68
+ announceSessionRow(ds);
66
69
  }
67
70
  //# sourceMappingURL=session-activity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-activity.js","sourceRoot":"","sources":["../../src/core/session-activity.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,4EAA4E;AAC5E,OAAO,KAAK,YAAY,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,MAAM,UAAU,mBAAmB,CAAC,EAAiB,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;IAC5E,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,KAAK,GAAG,EAAE,CAAC;QACrC,EAAE,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC;QAC/B,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,iBAAiB,CAAC,OAAO,CAAC;QACxB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE;KACxE,CAAC,CAAC;AACL,CAAC;AAED;;;;eAIe;AACf,MAAM,UAAU,qBAAqB,CAAC,EAAiB;IACrD,iBAAiB,CAAC,OAAO,CAAC;QACxB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE;YACJ,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS;YAC/B,KAAK,EAAE;gBACL,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW;gBAC7B,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,eAAe;gBACrC,wEAAwE;gBACxE,sEAAsE;gBACtE,cAAc,EAAE,EAAE,CAAC,cAAc;oBAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE;oBAC9F,CAAC,CAAC,IAAI;aACT;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAiB;IACnD,IAAI,CAAC,EAAE,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IACrC,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC;IAC9B,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;2EAQ2E;AAC3E,MAAM,UAAU,0BAA0B,CAAC,EAAiB;IAC1D,IAAI,CAAC,EAAE,CAAC,WAAW;QAAE,OAAO;IAC5B,iBAAiB,CAAC,OAAO,CAAC;QACxB,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC,EAAE;KAC5C,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"session-activity.js","sourceRoot":"","sources":["../../src/core/session-activity.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,4EAA4E;AAC5E,OAAO,KAAK,YAAY,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,MAAM,UAAU,mBAAmB,CAAC,EAAiB,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;IAC5E,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,KAAK,GAAG,EAAE,CAAC;QACrC,EAAE,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC;QAC/B,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,iBAAiB,CAAC,OAAO,CAAC;QACxB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE;KACxE,CAAC,CAAC;AACL,CAAC;AAED;;;;eAIe;AACf,MAAM,UAAU,qBAAqB,CAAC,EAAiB;IACrD,iBAAiB,CAAC,OAAO,CAAC;QACxB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE;YACJ,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS;YAC/B,KAAK,EAAE;gBACL,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW;gBAC7B,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,eAAe;gBACrC,wEAAwE;gBACxE,sEAAsE;gBACtE,cAAc,EAAE,EAAE,CAAC,cAAc;oBAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE;oBAC9F,CAAC,CAAC,IAAI;aACT;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAiB;IACnD,IAAI,CAAC,EAAE,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IACrC,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC;IAC9B,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAiB;IAClD,iBAAiB,CAAC,OAAO,CAAC;QACxB,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC,EAAE;KAC5C,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;2EAQ2E;AAC3E,MAAM,UAAU,0BAA0B,CAAC,EAAiB;IAC1D,IAAI,CAAC,EAAE,CAAC,WAAW;QAAE,OAAO;IAC5B,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { type Locale } from '../i18n/index.js';
2
+ /** 协作模式:
3
+ * - 'all' 「一起开工」——每个被选 bot 各起一条会话、拿同一份内容。
4
+ * - 'lead' 「Lead 分配」——只有 lead bot 起会话,内容带编排上下文,由它决定何时
5
+ * 在群里 @ 拉起 sub bot。 */
6
+ export declare const CREATE_SESSION_MODES: readonly ["all", "lead"];
7
+ export type CreateSessionMode = (typeof CREATE_SESSION_MODES)[number];
8
+ /** 入列:建完后会话落在看板哪一列。
9
+ * - 'in_progress' 直接开跑(立即 forkWorker)。
10
+ * - 'backlog' 入待办池(parked,不起 CLI,等激活)。 */
11
+ export declare const CREATE_SESSION_COLUMNS: readonly ["in_progress", "backlog"];
12
+ export type CreateSessionColumn = (typeof CREATE_SESSION_COLUMNS)[number];
13
+ /** 单个 bot 在新群里扮演的角色,决定它的首轮 prompt 怎么包:
14
+ * - 'solo' 只有它一个 worker(单 bot,或 lead 模式下的 lead 且没 sub)。
15
+ * - 'lead' lead 分配模式的 lead,prompt 前置编排上下文(列出 sub bot)。
16
+ * - 'collab' 一起开工模式的并列 worker,prompt 前置一句「还有谁在一起干」。 */
17
+ export type SpawnRole = 'solo' | 'lead' | 'collab';
18
+ export declare const SPAWN_ROLES: readonly SpawnRole[];
19
+ export declare const CREATE_SESSION_CONTENT_MAX = 8000;
20
+ export interface Coworker {
21
+ name: string;
22
+ openId?: string;
23
+ }
24
+ export declare function normalizeCreateMode(value: unknown): CreateSessionMode | null;
25
+ export declare function normalizeCreateColumn(value: unknown): CreateSessionColumn | null;
26
+ /** 会话标题:取内容首个非空行,压空白、限长。空内容回退占位。 */
27
+ export declare function deriveSessionTitleFromContent(content: string): string;
28
+ /** Lead 分配模式下,prepend 到用户内容前的编排上下文块。列出群里可协作的 sub
29
+ * bot(名字 + open_id,便于 @),并交代「你是 lead、自行决定何时拉起谁」。 */
30
+ export declare function buildLeadDispatchPreamble(coworkers: Coworker[], locale?: Locale): string;
31
+ /** 一起开工模式下,prepend 一句「本群还有谁在并行干同一任务」的轻量提示。
32
+ * 没有其他 coworker 时返回空串(退化成 solo)。 */
33
+ export declare function buildCollabNote(coworkers: Coworker[], locale?: Locale): string;
34
+ /** 组装喂给 buildNewTopicPrompt 的「用户内容」——按角色在原始 content 前拼上
35
+ * lead 编排前言 / 协作提示。solo 原样返回。 */
36
+ export declare function composeSpawnUserContent(args: {
37
+ content: string;
38
+ role: SpawnRole;
39
+ coworkers?: Coworker[];
40
+ locale?: Locale;
41
+ }): string;
42
+ export interface SpawnRequest {
43
+ chatId: string;
44
+ content: string;
45
+ column: CreateSessionColumn;
46
+ role: SpawnRole;
47
+ coworkers: Coworker[];
48
+ ownerOpenId?: string;
49
+ ownerUnionId?: string;
50
+ title?: string;
51
+ }
52
+ export type ParseResult<T> = {
53
+ ok: true;
54
+ value: T;
55
+ } | {
56
+ ok: false;
57
+ error: string;
58
+ };
59
+ /** 校验 daemon /api/sessions/spawn 的请求体。content 去尾空白后不能为空、限长;
60
+ * chatId 必须是飞书群 id(oc_ 前缀);column/role 必须合法。 */
61
+ export declare function parseSpawnRequest(body: unknown): ParseResult<SpawnRequest>;
62
+ //# sourceMappingURL=session-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-create.d.ts","sourceRoot":"","sources":["../../src/core/session-create.ts"],"names":[],"mappings":"AAGA,OAAO,EAAK,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;iCAGiC;AACjC,eAAO,MAAM,oBAAoB,0BAA2B,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE;;+CAE+C;AAC/C,eAAO,MAAM,sBAAsB,qCAAsC,CAAC;AAC1E,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;;;wDAGwD;AACxD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AACnD,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAA+B,CAAC;AAE5E,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAG/C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAI5E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAIhF;AAQD,oCAAoC;AACpC,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIrE;AAQD;qDACqD;AACrD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxF;AAED;qCACqC;AACrC,wBAAgB,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED;kCACkC;AAClC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAWT;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAkBnF;iDACiD;AACjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,CA2B1E"}
@@ -0,0 +1,131 @@
1
+ // Dashboard「创建会话」的纯逻辑层:请求校验、列/模式归一化、lead 编排前言与
2
+ // 协作提示的 prompt 组装、会话标题推导。与 DOM / Lark API / 进程管理解耦,便于
3
+ // 单测。daemon 侧 /api/sessions/spawn 与 session-manager 的 spawn/activate 复用。
4
+ import { t } from '../i18n/index.js';
5
+ /** 协作模式:
6
+ * - 'all' 「一起开工」——每个被选 bot 各起一条会话、拿同一份内容。
7
+ * - 'lead' 「Lead 分配」——只有 lead bot 起会话,内容带编排上下文,由它决定何时
8
+ * 在群里 @ 拉起 sub bot。 */
9
+ export const CREATE_SESSION_MODES = ['all', 'lead'];
10
+ /** 入列:建完后会话落在看板哪一列。
11
+ * - 'in_progress' 直接开跑(立即 forkWorker)。
12
+ * - 'backlog' 入待办池(parked,不起 CLI,等激活)。 */
13
+ export const CREATE_SESSION_COLUMNS = ['in_progress', 'backlog'];
14
+ export const SPAWN_ROLES = ['solo', 'lead', 'collab'];
15
+ export const CREATE_SESSION_CONTENT_MAX = 8000;
16
+ const TITLE_MAX = 50;
17
+ export function normalizeCreateMode(value) {
18
+ return typeof value === 'string' && CREATE_SESSION_MODES.includes(value)
19
+ ? value
20
+ : null;
21
+ }
22
+ export function normalizeCreateColumn(value) {
23
+ return typeof value === 'string' && CREATE_SESSION_COLUMNS.includes(value)
24
+ ? value
25
+ : null;
26
+ }
27
+ function normalizeSpawnRole(value) {
28
+ return typeof value === 'string' && SPAWN_ROLES.includes(value)
29
+ ? value
30
+ : null;
31
+ }
32
+ /** 会话标题:取内容首个非空行,压空白、限长。空内容回退占位。 */
33
+ export function deriveSessionTitleFromContent(content) {
34
+ const firstLine = content.split(/\r?\n/).map(s => s.trim()).find(Boolean) ?? '';
35
+ if (!firstLine)
36
+ return t('cmd.createSession.untitled');
37
+ return firstLine.length > TITLE_MAX ? firstLine.slice(0, TITLE_MAX) + '…' : firstLine;
38
+ }
39
+ function coworkerListBlock(coworkers) {
40
+ return coworkers
41
+ .map(c => c.openId ? `- ${c.name} (open_id: ${c.openId})` : `- ${c.name}`)
42
+ .join('\n');
43
+ }
44
+ /** Lead 分配模式下,prepend 到用户内容前的编排上下文块。列出群里可协作的 sub
45
+ * bot(名字 + open_id,便于 @),并交代「你是 lead、自行决定何时拉起谁」。 */
46
+ export function buildLeadDispatchPreamble(coworkers, locale) {
47
+ const intro = t('cmd.createSession.lead_preamble_intro', undefined, locale);
48
+ const outro = t('cmd.createSession.lead_preamble_outro', undefined, locale);
49
+ const list = coworkers.length > 0
50
+ ? coworkerListBlock(coworkers)
51
+ : t('cmd.createSession.lead_preamble_no_subs', undefined, locale);
52
+ return `<botmux_lead_dispatch>\n${intro}\n${list}\n${outro}\n</botmux_lead_dispatch>`;
53
+ }
54
+ /** 一起开工模式下,prepend 一句「本群还有谁在并行干同一任务」的轻量提示。
55
+ * 没有其他 coworker 时返回空串(退化成 solo)。 */
56
+ export function buildCollabNote(coworkers, locale) {
57
+ const others = coworkers.filter(c => c.name);
58
+ if (others.length === 0)
59
+ return '';
60
+ const names = others.map(c => c.name).join('、');
61
+ return `<botmux_collab>${t('cmd.createSession.collab_note', { peers: names }, locale)}</botmux_collab>`;
62
+ }
63
+ /** 组装喂给 buildNewTopicPrompt 的「用户内容」——按角色在原始 content 前拼上
64
+ * lead 编排前言 / 协作提示。solo 原样返回。 */
65
+ export function composeSpawnUserContent(args) {
66
+ const { content, role, locale } = args;
67
+ const coworkers = args.coworkers ?? [];
68
+ if (role === 'lead') {
69
+ return `${buildLeadDispatchPreamble(coworkers, locale)}\n\n${content}`;
70
+ }
71
+ if (role === 'collab') {
72
+ const note = buildCollabNote(coworkers, locale);
73
+ return note ? `${note}\n\n${content}` : content;
74
+ }
75
+ return content;
76
+ }
77
+ function parseCoworkers(value) {
78
+ if (!Array.isArray(value))
79
+ return [];
80
+ const out = [];
81
+ for (const item of value) {
82
+ if (!item || typeof item !== 'object')
83
+ continue;
84
+ const name = item.name;
85
+ const openId = item.openId;
86
+ if (typeof name !== 'string' || !name.trim())
87
+ continue;
88
+ out.push({
89
+ name: name.trim(),
90
+ openId: typeof openId === 'string' && openId.trim() ? openId.trim() : undefined,
91
+ });
92
+ }
93
+ return out;
94
+ }
95
+ /** 校验 daemon /api/sessions/spawn 的请求体。content 去尾空白后不能为空、限长;
96
+ * chatId 必须是飞书群 id(oc_ 前缀);column/role 必须合法。 */
97
+ export function parseSpawnRequest(body) {
98
+ if (!body || typeof body !== 'object')
99
+ return { ok: false, error: 'bad_request' };
100
+ const b = body;
101
+ const chatId = typeof b.chatId === 'string' ? b.chatId.trim() : '';
102
+ if (!chatId.startsWith('oc_'))
103
+ return { ok: false, error: 'bad_chat_id' };
104
+ const rawContent = typeof b.content === 'string' ? b.content : '';
105
+ const content = rawContent.replace(/\s+$/u, '');
106
+ if (!content.trim())
107
+ return { ok: false, error: 'empty_content' };
108
+ if (content.length > CREATE_SESSION_CONTENT_MAX)
109
+ return { ok: false, error: 'content_too_long' };
110
+ const column = normalizeCreateColumn(b.column);
111
+ if (!column)
112
+ return { ok: false, error: 'bad_column' };
113
+ const role = normalizeSpawnRole(b.role);
114
+ if (!role)
115
+ return { ok: false, error: 'bad_role' };
116
+ const title = typeof b.title === 'string' && b.title.trim() ? b.title.trim().slice(0, 200) : undefined;
117
+ return {
118
+ ok: true,
119
+ value: {
120
+ chatId,
121
+ content,
122
+ column,
123
+ role,
124
+ coworkers: parseCoworkers(b.coworkers),
125
+ ownerOpenId: typeof b.ownerOpenId === 'string' && b.ownerOpenId.trim() ? b.ownerOpenId.trim() : undefined,
126
+ ownerUnionId: typeof b.ownerUnionId === 'string' && b.ownerUnionId.trim() ? b.ownerUnionId.trim() : undefined,
127
+ title,
128
+ },
129
+ };
130
+ }
131
+ //# sourceMappingURL=session-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-create.js","sourceRoot":"","sources":["../../src/core/session-create.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { expandHome } from './working-dir.js';
2
2
  import type { CliId } from '../adapters/cli/types.js';
3
+ import { type CreateSessionColumn, type SpawnRole, type Coworker } from './session-create.js';
3
4
  import type { BackendType } from '../adapters/backend/types.js';
4
5
  import type { LarkAttachment, LarkMention, ScheduledTask } from '../types.js';
5
6
  import type { MessageResource } from '../im/lark/message-parser.js';
@@ -59,6 +60,7 @@ export declare function renderCursorSenderNote(cliId: CliId | undefined, hasSend
59
60
  */
60
61
  export declare function renderBufferedSenderBlock(sender: ResolvedSender | undefined, cliId: CliId | undefined, locale?: Locale): string;
61
62
  export declare function formatAttachmentsHint(attachments?: LarkAttachment[], locale?: Locale): string;
63
+ export declare function ensureSessionWhiteboard(ds: DaemonSession): void;
62
64
  export declare function buildNewTopicPrompt(userMessage: string, sessionId: string, cliId: CliId, cliPathOverride?: string, attachments?: LarkAttachment[], mentions?: LarkMention[], availableBots?: Array<{
63
65
  name: string;
64
66
  displayName: string;
@@ -69,6 +71,7 @@ export declare function buildNewTopicPrompt(userMessage: string, sessionId: stri
69
71
  }, locale?: Locale, sender?: ResolvedSender, opts?: {
70
72
  larkAppId?: string;
71
73
  chatId?: string;
74
+ whiteboardId?: string;
72
75
  }): string;
73
76
  /**
74
77
  * Build the content for a follow-up message (thread reply to an active session).
@@ -85,6 +88,7 @@ export declare function buildFollowUpContent(content: string, sessionId: string,
85
88
  sender?: ResolvedSender;
86
89
  larkAppId?: string;
87
90
  chatId?: string;
91
+ whiteboardId?: string;
88
92
  }): string;
89
93
  /**
90
94
  * Build raw input content for adopt-bridge mode.
@@ -216,4 +220,43 @@ export declare function resumeSession(sessionId: string, activeSessions: Map<str
216
220
  activeSessionId?: string;
217
221
  }>;
218
222
  export declare function executeScheduledTask(task: ScheduledTask, activeSessions: Map<string, DaemonSession>, refreshCliVersion: (...args: any[]) => boolean): Promise<void>;
223
+ export interface SpawnDashboardSessionArgs {
224
+ larkAppId: string;
225
+ /** 新建的飞书群(chat-scope 锚点)。 */
226
+ chatId: string;
227
+ /** 用户在弹框里写的原始任务内容。 */
228
+ content: string;
229
+ /** in_progress=立即开跑;backlog=入待办池(parked,不起 CLI)。 */
230
+ column: CreateSessionColumn;
231
+ /** 本 bot 在群里的角色,决定首轮 prompt 怎么包(lead 编排 / collab 并列 / solo)。 */
232
+ role: SpawnRole;
233
+ /** 群里其它可协作的 bot(lead 用来列 sub bot、collab 用来提示同伴)。 */
234
+ coworkers?: Coworker[];
235
+ /** 会话标题,缺省取内容首行。 */
236
+ title?: string;
237
+ /** 是否在群里发一条可见的任务横幅(只由 creator/lead 那一次 spawn 发,避免 N 个 bot 重复刷屏)。 */
238
+ postBanner?: boolean;
239
+ /** 会话归属人 open_id(本 bot 作用域);缺省回退本 bot 首个 allowedUser。 */
240
+ ownerOpenId?: string;
241
+ ownerUnionId?: string;
242
+ }
243
+ /** 在新建的飞书群里为某个 bot 拉起一条 chat-scope 会话(dashboard「创建会话」用)。
244
+ * column='in_progress' → 立即 forkWorker 把内容当首轮发给 CLI;
245
+ * column='backlog' → 入待办池(parked:worker:null + session.queued + queuedPrompt),
246
+ * 等被激活(拖到进行中 / 点开始 / 群里来消息)再起 CLI。
247
+ * 与调度器 new-topic spawn 同构,差别只在「可暂存不起」与角色包装。 */
248
+ export declare function spawnDashboardSession(activeSessions: Map<string, DaemonSession>, refreshCliVersion: ((...args: any[]) => boolean) | undefined, args: SpawnDashboardSessionArgs): Promise<{
249
+ ok: true;
250
+ sessionId: string;
251
+ } | {
252
+ ok: false;
253
+ error: string;
254
+ }>;
255
+ /** 激活一条 parked(待办池)会话:把暂存的 queuedPrompt 当首轮发给 CLI,清掉 queued
256
+ * 标记。供「拖到进行中」「点开始」「群里来第一条消息」三个入口复用。已起过的会话
257
+ * (worker 在或 hasHistory)直接返回 already_active,幂等。 */
258
+ export declare function activateQueuedSession(ds: DaemonSession): Promise<{
259
+ ok: boolean;
260
+ error?: string;
261
+ }>;
219
262
  //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}