botmux 3.6.0 → 3.7.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 (177) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/riff-backend.d.ts +7 -6
  3. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/riff-backend.js +8 -7
  5. package/dist/adapters/backend/riff-backend.js.map +1 -1
  6. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  7. package/dist/adapters/backend/sandbox.js +5 -2
  8. package/dist/adapters/backend/sandbox.js.map +1 -1
  9. package/dist/adapters/cli/codex.d.ts.map +1 -1
  10. package/dist/adapters/cli/codex.js +15 -6
  11. package/dist/adapters/cli/codex.js.map +1 -1
  12. package/dist/adapters/cli/fs-policy.d.ts +62 -6
  13. package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
  14. package/dist/adapters/cli/fs-policy.js +70 -7
  15. package/dist/adapters/cli/fs-policy.js.map +1 -1
  16. package/dist/bot-registry.d.ts +13 -0
  17. package/dist/bot-registry.d.ts.map +1 -1
  18. package/dist/bot-registry.js +15 -7
  19. package/dist/bot-registry.js.map +1 -1
  20. package/dist/cli/daemon-lifecycle-env.d.ts +1 -1
  21. package/dist/cli/daemon-lifecycle-env.d.ts.map +1 -1
  22. package/dist/cli/daemon-lifecycle-env.js +12 -0
  23. package/dist/cli/daemon-lifecycle-env.js.map +1 -1
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +23 -7
  26. package/dist/cli.js.map +1 -1
  27. package/dist/core/command-handler.d.ts +7 -5
  28. package/dist/core/command-handler.d.ts.map +1 -1
  29. package/dist/core/command-handler.js +37 -21
  30. package/dist/core/command-handler.js.map +1 -1
  31. package/dist/core/cost-calculator.d.ts +3 -0
  32. package/dist/core/cost-calculator.d.ts.map +1 -1
  33. package/dist/core/cost-calculator.js.map +1 -1
  34. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  35. package/dist/core/dashboard-ipc-server.js +12 -9
  36. package/dist/core/dashboard-ipc-server.js.map +1 -1
  37. package/dist/core/dashboard-rows.d.ts.map +1 -1
  38. package/dist/core/dashboard-rows.js +1 -0
  39. package/dist/core/dashboard-rows.js.map +1 -1
  40. package/dist/core/initial-user-turn.d.ts +14 -0
  41. package/dist/core/initial-user-turn.d.ts.map +1 -0
  42. package/dist/core/initial-user-turn.js +65 -0
  43. package/dist/core/initial-user-turn.js.map +1 -0
  44. package/dist/core/maintenance.d.ts.map +1 -1
  45. package/dist/core/maintenance.js +6 -0
  46. package/dist/core/maintenance.js.map +1 -1
  47. package/dist/core/per-bot-env.d.ts.map +1 -1
  48. package/dist/core/per-bot-env.js +10 -0
  49. package/dist/core/per-bot-env.js.map +1 -1
  50. package/dist/core/plugins/pm2.d.ts.map +1 -1
  51. package/dist/core/plugins/pm2.js +4 -0
  52. package/dist/core/plugins/pm2.js.map +1 -1
  53. package/dist/core/session-discovery.d.ts +23 -0
  54. package/dist/core/session-discovery.d.ts.map +1 -1
  55. package/dist/core/session-discovery.js +162 -82
  56. package/dist/core/session-discovery.js.map +1 -1
  57. package/dist/core/session-manager.d.ts.map +1 -1
  58. package/dist/core/session-manager.js +23 -4
  59. package/dist/core/session-manager.js.map +1 -1
  60. package/dist/core/worker-pool.d.ts +2 -0
  61. package/dist/core/worker-pool.d.ts.map +1 -1
  62. package/dist/core/worker-pool.js +27 -4
  63. package/dist/core/worker-pool.js.map +1 -1
  64. package/dist/daemon.d.ts +18 -0
  65. package/dist/daemon.d.ts.map +1 -1
  66. package/dist/daemon.js +205 -39
  67. package/dist/daemon.js.map +1 -1
  68. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  69. package/dist/dashboard/bot-onboarding.js +29 -5
  70. package/dist/dashboard/bot-onboarding.js.map +1 -1
  71. package/dist/dashboard/bot-payload.js +3 -3
  72. package/dist/dashboard/bot-payload.js.map +1 -1
  73. package/dist/dashboard/web/bot-defaults-page.js +5 -5
  74. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  75. package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
  76. package/dist/dashboard/web/bot-onboarding.js +1 -1
  77. package/dist/dashboard/web/bot-onboarding.js.map +1 -1
  78. package/dist/dashboard/web/i18n.js +18 -18
  79. package/dist/dashboard/web/i18n.js.map +1 -1
  80. package/dist/dashboard-web/app.js +1 -1
  81. package/dist/dashboard-web/chunks/{bot-defaults-page-VQMPUJ4Y.js → bot-defaults-page-UKA7K4JV.js} +2 -2
  82. package/dist/dashboard-web/chunks/{chunk-NP4JUBGS.js → chunk-3QAUJXAS.js} +1 -1
  83. package/dist/dashboard-web/chunks/{chunk-JMRGZQDB.js → chunk-FLGXZJTD.js} +1 -1
  84. package/dist/dashboard-web/chunks/chunk-FNPGOZMX.js +1 -0
  85. package/dist/dashboard-web/chunks/{chunk-SNKATZWK.js → chunk-KQB42ML5.js} +4 -4
  86. package/dist/dashboard-web/chunks/{connectors-page-DOY4J3ZL.js → connectors-page-A77YAB5Y.js} +1 -1
  87. package/dist/dashboard-web/chunks/{groups-page-74TS2DIH.js → groups-page-RUZNVXQB.js} +1 -1
  88. package/dist/dashboard-web/chunks/{insights-page-AYCO65JC.js → insights-page-RF7U7RTA.js} +1 -1
  89. package/dist/dashboard-web/chunks/{monitor-room-YKYLTSAN.js → monitor-room-7IVIS75W.js} +1 -1
  90. package/dist/dashboard-web/chunks/{monitoring-page-QBIUNRBR.js → monitoring-page-5SSJRQZF.js} +1 -1
  91. package/dist/dashboard-web/chunks/{office-page-4PH2A26P.js → office-page-EOND3L5D.js} +1 -1
  92. package/dist/dashboard-web/chunks/{overview-page-H73D5UT4.js → overview-page-NISBVBBJ.js} +1 -1
  93. package/dist/dashboard-web/chunks/{roles-page-U4BTOQ7F.js → roles-page-BUMKD7Y4.js} +1 -1
  94. package/dist/dashboard-web/chunks/{schedules-page-RHRHX7R7.js → schedules-page-AVOOKLUH.js} +1 -1
  95. package/dist/dashboard-web/chunks/{sessions-page-VSC6AM5G.js → sessions-page-6HLSEAB7.js} +2 -2
  96. package/dist/dashboard-web/chunks/{settings-page-LF3RKM5P.js → settings-page-MJDZHQ4X.js} +1 -1
  97. package/dist/dashboard-web/chunks/{skills-page-SYOIGGXH.js → skills-page-5MW54PCC.js} +1 -1
  98. package/dist/dashboard-web/chunks/{team-federation-page-RMBLASTW.js → team-federation-page-2SNIMVXI.js} +1 -1
  99. package/dist/dashboard-web/chunks/{v3-page-XJXKKJRN.js → v3-page-W6SBXXQC.js} +1 -1
  100. package/dist/dashboard-web/chunks/{whiteboards-page-K3YVSTHJ.js → whiteboards-page-STC54KTP.js} +1 -1
  101. package/dist/dashboard-web/style.css +5 -0
  102. package/dist/dashboard.js +2 -2
  103. package/dist/dashboard.js.map +1 -1
  104. package/dist/desktop/main/dashboard-compat.js +1 -1
  105. package/dist/i18n/en.js +6 -6
  106. package/dist/i18n/en.js.map +1 -1
  107. package/dist/i18n/zh.js +6 -6
  108. package/dist/i18n/zh.js.map +1 -1
  109. package/dist/im/lark/card-builder.d.ts.map +1 -1
  110. package/dist/im/lark/card-builder.js +5 -4
  111. package/dist/im/lark/card-builder.js.map +1 -1
  112. package/dist/im/lark/card-handler.d.ts.map +1 -1
  113. package/dist/im/lark/card-handler.js +40 -7
  114. package/dist/im/lark/card-handler.js.map +1 -1
  115. package/dist/im/lark/client.d.ts.map +1 -1
  116. package/dist/im/lark/client.js +82 -1
  117. package/dist/im/lark/client.js.map +1 -1
  118. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  119. package/dist/im/lark/event-dispatcher.js +46 -12
  120. package/dist/im/lark/event-dispatcher.js.map +1 -1
  121. package/dist/im/lark/relay-target-routing.d.ts.map +1 -1
  122. package/dist/im/lark/relay-target-routing.js +12 -11
  123. package/dist/im/lark/relay-target-routing.js.map +1 -1
  124. package/dist/im/lark/reply-mode-command.d.ts.map +1 -1
  125. package/dist/im/lark/reply-mode-command.js +4 -3
  126. package/dist/im/lark/reply-mode-command.js.map +1 -1
  127. package/dist/index-daemon.js +6 -1
  128. package/dist/index-daemon.js.map +1 -1
  129. package/dist/mir-runner.js +1 -1
  130. package/dist/mir-runner.js.map +1 -1
  131. package/dist/services/bot-config-store.d.ts +1 -1
  132. package/dist/services/bot-config-store.d.ts.map +1 -1
  133. package/dist/services/bot-config-store.js +1 -1
  134. package/dist/services/bot-config-store.js.map +1 -1
  135. package/dist/services/card-prefs-store.js +8 -8
  136. package/dist/services/card-prefs-store.js.map +1 -1
  137. package/dist/services/chat-reply-mode-store.d.ts.map +1 -1
  138. package/dist/services/chat-reply-mode-store.js +16 -11
  139. package/dist/services/chat-reply-mode-store.js.map +1 -1
  140. package/dist/services/insight/types.d.ts +3 -1
  141. package/dist/services/insight/types.d.ts.map +1 -1
  142. package/dist/services/insight/types.js.map +1 -1
  143. package/dist/services/project-scanner.d.ts +4 -4
  144. package/dist/services/project-scanner.d.ts.map +1 -1
  145. package/dist/services/project-scanner.js +13 -5
  146. package/dist/services/project-scanner.js.map +1 -1
  147. package/dist/services/transcript-resolver.d.ts +4 -0
  148. package/dist/services/transcript-resolver.d.ts.map +1 -1
  149. package/dist/services/transcript-resolver.js +53 -5
  150. package/dist/services/transcript-resolver.js.map +1 -1
  151. package/dist/services/usage-ledger.d.ts.map +1 -1
  152. package/dist/services/usage-ledger.js +1 -0
  153. package/dist/services/usage-ledger.js.map +1 -1
  154. package/dist/setup/bot-config-editor.d.ts +37 -1
  155. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  156. package/dist/setup/bot-config-editor.js +61 -3
  157. package/dist/setup/bot-config-editor.js.map +1 -1
  158. package/dist/setup/setup-args.js +1 -1
  159. package/dist/setup/setup-args.js.map +1 -1
  160. package/dist/types.d.ts +20 -0
  161. package/dist/types.d.ts.map +1 -1
  162. package/dist/utils/allowed-users-apply.d.ts.map +1 -1
  163. package/dist/utils/allowed-users-apply.js +3 -2
  164. package/dist/utils/allowed-users-apply.js.map +1 -1
  165. package/dist/utils/child-env.d.ts +31 -2
  166. package/dist/utils/child-env.d.ts.map +1 -1
  167. package/dist/utils/child-env.js +61 -3
  168. package/dist/utils/child-env.js.map +1 -1
  169. package/dist/utils/file-lock.d.ts +10 -0
  170. package/dist/utils/file-lock.d.ts.map +1 -1
  171. package/dist/utils/file-lock.js +295 -53
  172. package/dist/utils/file-lock.js.map +1 -1
  173. package/dist/worker.js +52 -3
  174. package/dist/worker.js.map +1 -1
  175. package/dist/workflows/v3/run-envelope.d.ts +24 -24
  176. package/package.json +1 -1
  177. package/dist/dashboard-web/chunks/chunk-P327LXOT.js +0 -1
@@ -58,11 +58,13 @@ export { validateWorkingDir };
58
58
  * 1. Build candidate absolute paths — absolute / `~` taken as-is; relative or
59
59
  * bare names resolved against each scan dir, then the daemon cwd (mirrors
60
60
  * how the card's project list is rooted).
61
- * 2. Prefer a candidate matching a scanned git project (carries a branch label).
62
- * 3. For a bare name, also match a scanned project by basename (covers projects
63
- * nested deeper than the scan-dir top level).
64
- * 4. Fall back to any existing directory — lenient like `/cd`, whose trust model
65
- * is "owner explicitly chose a dir"; the CLI already runs with full FS access.
61
+ * 2. Return the first directly existing candidate, describing its git ref
62
+ * without scanning unrelated roots. This is lenient like `/cd`, whose trust
63
+ * model is "owner explicitly chose a dir"; the CLI already runs with full
64
+ * FS access.
65
+ * 3. Only for a bare name that did not directly resolve, scan projects and
66
+ * match by basename (covers projects nested deeper than the scan-dir top
67
+ * level).
66
68
  * Returns null when nothing resolves to an existing directory.
67
69
  */
68
70
  export declare function resolveRepoSelection(repoArg: string, scanDirs: string[]): {
@@ -1 +1 @@
1
- {"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../src/core/command-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../src/core/command-handler.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ import { logger } from '../utils/logger.js';
25
25
  import { scheduleTimeZone } from '../utils/timezone.js';
26
26
  import { killWorker, suspendWorker, forkWorker, forkAdoptWorker, adoptSandboxBlocked, getCurrentCliVersion, postFreshStreamingCard, postPrivateSnapshotCard, resolvePrivateCardAudience, deliverEphemeralOrReply, deliverWritableTerminalCardTo, requestSessionRestart } from './worker-pool.js';
27
27
  import { expandHome, getSessionWorkingDir, getProjectScanDirs, rememberLastCliInput, buildNewTopicCliInput, ensureSessionWhiteboard, getAvailableBots, } from './session-manager.js';
28
+ import { markInitialUserTurnPending } from './initial-user-turn.js';
28
29
  import { discoverSlashCommandsForAdapter, listMcpServerNames, supportsFilesystemCommandDiscovery } from './command-discovery.js';
29
30
  import { validateWorkingDir } from './working-dir.js';
30
31
  import { repinSessionWorkingDir } from './session-cwd.js';
@@ -158,16 +159,16 @@ export { validateWorkingDir };
158
159
  * 1. Build candidate absolute paths — absolute / `~` taken as-is; relative or
159
160
  * bare names resolved against each scan dir, then the daemon cwd (mirrors
160
161
  * how the card's project list is rooted).
161
- * 2. Prefer a candidate matching a scanned git project (carries a branch label).
162
- * 3. For a bare name, also match a scanned project by basename (covers projects
163
- * nested deeper than the scan-dir top level).
164
- * 4. Fall back to any existing directory — lenient like `/cd`, whose trust model
165
- * is "owner explicitly chose a dir"; the CLI already runs with full FS access.
162
+ * 2. Return the first directly existing candidate, describing its git ref
163
+ * without scanning unrelated roots. This is lenient like `/cd`, whose trust
164
+ * model is "owner explicitly chose a dir"; the CLI already runs with full
165
+ * FS access.
166
+ * 3. Only for a bare name that did not directly resolve, scan projects and
167
+ * match by basename (covers projects nested deeper than the scan-dir top
168
+ * level).
166
169
  * Returns null when nothing resolves to an existing directory.
167
170
  */
168
171
  export function resolveRepoSelection(repoArg, scanDirs) {
169
- const existingScanDirs = scanDirs.filter((d) => existsSync(d));
170
- const projects = existingScanDirs.length > 0 ? scanMultipleProjects(existingScanDirs) : [];
171
172
  const isExplicitPath = repoArg.startsWith('/') ||
172
173
  repoArg.startsWith('~') ||
173
174
  repoArg.startsWith('.') ||
@@ -181,20 +182,9 @@ export function resolveRepoSelection(repoArg, scanDirs) {
181
182
  candidates.push(resolve(d, repoArg));
182
183
  candidates.push(resolve(expandHome(repoArg))); // daemon-cwd fallback (matches /cd)
183
184
  }
184
- // 1) Exact scanned-project match preferred, gives the "name (branch)" label.
185
- for (const cand of candidates) {
186
- const proj = projects.find((p) => resolve(p.path) === cand);
187
- if (proj)
188
- return { path: proj.path, displayName: `${proj.name} (${proj.branch})` };
189
- }
190
- // 2) Bare name → match a scanned project by basename.
191
- if (!isExplicitPath) {
192
- const byName = projects.find((p) => p.name === repoArg);
193
- if (byName)
194
- return { path: byName.path, displayName: `${byName.name} (${byName.branch})` };
195
- }
196
- // 3) Lenient fallback: any existing directory. Label it with a git ref when
197
- // it's a repo (covers explicit paths outside the scan roots), else basename.
185
+ // Direct candidates must win before any recursive scan. Besides avoiding
186
+ // unnecessary traversal (especially a legacy HOME fallback), describing just
187
+ // the selected directory preserves the same "name (branch)" label for repos.
198
188
  for (const cand of candidates) {
199
189
  try {
200
190
  if (!statSync(cand).isDirectory())
@@ -208,6 +198,16 @@ export function resolveRepoSelection(repoArg, scanDirs) {
208
198
  ? { path: cand, displayName: `${desc.name} (${desc.branch})` }
209
199
  : { path: cand, displayName: basename(cand) };
210
200
  }
201
+ // Explicit and relative paths have no basename-search semantics: when their
202
+ // concrete candidates do not exist, a recursive project scan cannot resolve
203
+ // them. Bare names alone may refer to a repo nested below a scan root.
204
+ if (isExplicitPath)
205
+ return null;
206
+ const existingScanDirs = scanDirs.filter((d) => existsSync(d));
207
+ const projects = existingScanDirs.length > 0 ? scanMultipleProjects(existingScanDirs) : [];
208
+ const byName = projects.find((p) => p.name === repoArg);
209
+ if (byName)
210
+ return { path: byName.path, displayName: `${byName.name} (${byName.branch})` };
211
211
  return null;
212
212
  }
213
213
  /**
@@ -1242,6 +1242,7 @@ export async function handleCommand(cmd, rootId, message, deps, larkAppId) {
1242
1242
  sessionId: ds.session.sessionId,
1243
1243
  cliSessionId: ds.session.cliSessionId,
1244
1244
  cwd: ds.session.workingDir,
1245
+ larkAppId: ds.larkAppId ?? ds.session.larkAppId,
1245
1246
  }, { detail: 'summary' });
1246
1247
  await sessionReply(rootId, formatInsightCard(report, loc));
1247
1248
  break;
@@ -1394,6 +1395,11 @@ export async function handleCommand(cmd, rootId, message, deps, larkAppId) {
1394
1395
  const hasBufferedInput = pendingPrompt.trim().length > 0 ||
1395
1396
  (ds.pendingAttachments?.length ?? 0) > 0 ||
1396
1397
  (ds.pendingFollowUps?.length ?? 0) > 0;
1398
+ // Nothing to submit at all (bare `/repo`: the message IS the command).
1399
+ // The CLI boots idle, so the user's NEXT real message is its first
1400
+ // turn and must carry the full new-topic opening — see
1401
+ // markInitialUserTurnPending below.
1402
+ const emptyStart = !pendingRawInput && !hasBufferedInput;
1397
1403
  if (hasBufferedInput)
1398
1404
  ensureSessionWhiteboard(ds);
1399
1405
  const wrappedInput = hasBufferedInput
@@ -1445,6 +1451,12 @@ export async function handleCommand(cmd, rootId, message, deps, larkAppId) {
1445
1451
  if (pendingRawInput || hasBufferedInput) {
1446
1452
  rememberLastCliInput(ds, pendingRawInput ?? pendingPrompt, pendingRawInput ?? wrappedInput);
1447
1453
  }
1454
+ // Durable, one-shot: the CLI is up but has never received a real user
1455
+ // turn, so the next business message must be built as a NEW TOPIC
1456
+ // (routing + built-in skill discovery + identity), not a follow-up.
1457
+ // Set after the fork so a throwing fork leaves the session untouched.
1458
+ if (emptyStart)
1459
+ markInitialUserTurnPending(ds);
1448
1460
  ds.pendingPrompt = undefined;
1449
1461
  ds.pendingCodexAppText = undefined;
1450
1462
  ds.pendingCodexAppApplicationContext = undefined;
@@ -1557,6 +1569,10 @@ export async function handleCommand(cmd, rootId, message, deps, larkAppId) {
1557
1569
  sessionStore.updateSession(ds.session);
1558
1570
  ds.hasHistory = false;
1559
1571
  forkWorker(ds, '', false);
1572
+ // Brand-new CLI in a brand-new session record: it has never seen the
1573
+ // botmux opening context either, so the next real business message
1574
+ // is its new-topic first turn (same invariant as the pending path).
1575
+ markInitialUserTurnPending(ds);
1560
1576
  try {
1561
1577
  await sessionReply(rootId, t('cmd.repo.switched_to', { name: displayName }, loc));
1562
1578
  }