botmux 2.9.1 → 2.9.2

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 (330) hide show
  1. package/README.en.md +140 -76
  2. package/README.md +134 -75
  3. package/dist/adapters/backend/pty-backend.d.ts +6 -0
  4. package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
  5. package/dist/adapters/backend/pty-backend.js +10 -0
  6. package/dist/adapters/backend/pty-backend.js.map +1 -1
  7. package/dist/adapters/backend/session-backend-selector.d.ts +11 -0
  8. package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -0
  9. package/dist/adapters/backend/session-backend-selector.js +26 -0
  10. package/dist/adapters/backend/session-backend-selector.js.map +1 -0
  11. package/dist/adapters/backend/tmux-backend.d.ts +80 -3
  12. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  13. package/dist/adapters/backend/tmux-backend.js +301 -49
  14. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  15. package/dist/adapters/backend/tmux-pipe-backend.d.ts +100 -0
  16. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -0
  17. package/dist/adapters/backend/tmux-pipe-backend.js +473 -0
  18. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -0
  19. package/dist/adapters/cli/aiden.d.ts.map +1 -1
  20. package/dist/adapters/cli/aiden.js +5 -0
  21. package/dist/adapters/cli/aiden.js.map +1 -1
  22. package/dist/adapters/cli/claude-code.d.ts +40 -1
  23. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  24. package/dist/adapters/cli/claude-code.js +470 -49
  25. package/dist/adapters/cli/claude-code.js.map +1 -1
  26. package/dist/adapters/cli/coco.d.ts.map +1 -1
  27. package/dist/adapters/cli/coco.js +191 -9
  28. package/dist/adapters/cli/coco.js.map +1 -1
  29. package/dist/adapters/cli/codex.d.ts.map +1 -1
  30. package/dist/adapters/cli/codex.js +94 -17
  31. package/dist/adapters/cli/codex.js.map +1 -1
  32. package/dist/adapters/cli/shared-hints.d.ts +2 -2
  33. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  34. package/dist/adapters/cli/shared-hints.js +7 -5
  35. package/dist/adapters/cli/shared-hints.js.map +1 -1
  36. package/dist/adapters/cli/types.d.ts +38 -1
  37. package/dist/adapters/cli/types.d.ts.map +1 -1
  38. package/dist/autostart.d.ts +14 -0
  39. package/dist/autostart.d.ts.map +1 -0
  40. package/dist/autostart.js +357 -0
  41. package/dist/autostart.js.map +1 -0
  42. package/dist/bot-registry.d.ts +29 -3
  43. package/dist/bot-registry.d.ts.map +1 -1
  44. package/dist/bot-registry.js +91 -12
  45. package/dist/bot-registry.js.map +1 -1
  46. package/dist/cli/arg-utils.d.ts +11 -0
  47. package/dist/cli/arg-utils.d.ts.map +1 -0
  48. package/dist/cli/arg-utils.js +25 -0
  49. package/dist/cli/arg-utils.js.map +1 -0
  50. package/dist/cli/create-group-resolver.d.ts +32 -0
  51. package/dist/cli/create-group-resolver.d.ts.map +1 -0
  52. package/dist/cli/create-group-resolver.js +70 -0
  53. package/dist/cli/create-group-resolver.js.map +1 -0
  54. package/dist/cli/quoted-render.d.ts +30 -0
  55. package/dist/cli/quoted-render.d.ts.map +1 -0
  56. package/dist/cli/quoted-render.js +29 -0
  57. package/dist/cli/quoted-render.js.map +1 -0
  58. package/dist/cli.js +916 -272
  59. package/dist/cli.js.map +1 -1
  60. package/dist/config.d.ts +6 -0
  61. package/dist/config.d.ts.map +1 -1
  62. package/dist/config.js +18 -8
  63. package/dist/config.js.map +1 -1
  64. package/dist/core/command-handler.d.ts +43 -0
  65. package/dist/core/command-handler.d.ts.map +1 -1
  66. package/dist/core/command-handler.js +167 -64
  67. package/dist/core/command-handler.js.map +1 -1
  68. package/dist/core/dashboard-events.d.ts +57 -0
  69. package/dist/core/dashboard-events.d.ts.map +1 -0
  70. package/dist/core/dashboard-events.js +23 -0
  71. package/dist/core/dashboard-events.js.map +1 -0
  72. package/dist/core/dashboard-ipc-server.d.ts +43 -0
  73. package/dist/core/dashboard-ipc-server.d.ts.map +1 -0
  74. package/dist/core/dashboard-ipc-server.js +481 -0
  75. package/dist/core/dashboard-ipc-server.js.map +1 -0
  76. package/dist/core/dashboard-locate.d.ts +20 -0
  77. package/dist/core/dashboard-locate.d.ts.map +1 -0
  78. package/dist/core/dashboard-locate.js +26 -0
  79. package/dist/core/dashboard-locate.js.map +1 -0
  80. package/dist/core/dashboard-rows.d.ts +31 -0
  81. package/dist/core/dashboard-rows.d.ts.map +1 -0
  82. package/dist/core/dashboard-rows.js +65 -0
  83. package/dist/core/dashboard-rows.js.map +1 -0
  84. package/dist/core/inherit-peer.d.ts +14 -0
  85. package/dist/core/inherit-peer.d.ts.map +1 -0
  86. package/dist/core/inherit-peer.js +32 -0
  87. package/dist/core/inherit-peer.js.map +1 -0
  88. package/dist/core/scheduler.d.ts +24 -0
  89. package/dist/core/scheduler.d.ts.map +1 -1
  90. package/dist/core/scheduler.js +93 -2
  91. package/dist/core/scheduler.js.map +1 -1
  92. package/dist/core/session-activity.d.ts +3 -0
  93. package/dist/core/session-activity.d.ts.map +1 -0
  94. package/dist/core/session-activity.js +20 -0
  95. package/dist/core/session-activity.js.map +1 -0
  96. package/dist/core/session-discovery.d.ts +39 -0
  97. package/dist/core/session-discovery.d.ts.map +1 -1
  98. package/dist/core/session-discovery.js +114 -21
  99. package/dist/core/session-discovery.js.map +1 -1
  100. package/dist/core/session-manager.d.ts +72 -0
  101. package/dist/core/session-manager.d.ts.map +1 -1
  102. package/dist/core/session-manager.js +396 -106
  103. package/dist/core/session-manager.js.map +1 -1
  104. package/dist/core/types.d.ts +27 -2
  105. package/dist/core/types.d.ts.map +1 -1
  106. package/dist/core/types.js +14 -3
  107. package/dist/core/types.js.map +1 -1
  108. package/dist/core/worker-pool.d.ts +72 -3
  109. package/dist/core/worker-pool.d.ts.map +1 -1
  110. package/dist/core/worker-pool.js +459 -38
  111. package/dist/core/worker-pool.js.map +1 -1
  112. package/dist/daemon.d.ts.map +1 -1
  113. package/dist/daemon.js +601 -309
  114. package/dist/daemon.js.map +1 -1
  115. package/dist/dashboard/aggregator.d.ts +41 -0
  116. package/dist/dashboard/aggregator.d.ts.map +1 -0
  117. package/dist/dashboard/aggregator.js +125 -0
  118. package/dist/dashboard/aggregator.js.map +1 -0
  119. package/dist/dashboard/auth.d.ts +23 -0
  120. package/dist/dashboard/auth.d.ts.map +1 -0
  121. package/dist/dashboard/auth.js +66 -0
  122. package/dist/dashboard/auth.js.map +1 -0
  123. package/dist/dashboard/operator-selector.d.ts +20 -0
  124. package/dist/dashboard/operator-selector.d.ts.map +1 -0
  125. package/dist/dashboard/operator-selector.js +39 -0
  126. package/dist/dashboard/operator-selector.js.map +1 -0
  127. package/dist/dashboard/registry.d.ts +35 -0
  128. package/dist/dashboard/registry.d.ts.map +1 -0
  129. package/dist/dashboard/registry.js +74 -0
  130. package/dist/dashboard/registry.js.map +1 -0
  131. package/dist/dashboard/web/app.d.ts +2 -0
  132. package/dist/dashboard/web/app.d.ts.map +1 -0
  133. package/dist/dashboard/web/app.js +45 -0
  134. package/dist/dashboard/web/app.js.map +1 -0
  135. package/dist/dashboard/web/bot-defaults.d.ts +2 -0
  136. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -0
  137. package/dist/dashboard/web/bot-defaults.js +201 -0
  138. package/dist/dashboard/web/bot-defaults.js.map +1 -0
  139. package/dist/dashboard/web/groups.d.ts +16 -0
  140. package/dist/dashboard/web/groups.d.ts.map +1 -0
  141. package/dist/dashboard/web/groups.js +584 -0
  142. package/dist/dashboard/web/groups.js.map +1 -0
  143. package/dist/dashboard/web/schedules.d.ts +2 -0
  144. package/dist/dashboard/web/schedules.d.ts.map +1 -0
  145. package/dist/dashboard/web/schedules.js +105 -0
  146. package/dist/dashboard/web/schedules.js.map +1 -0
  147. package/dist/dashboard/web/sessions.d.ts +2 -0
  148. package/dist/dashboard/web/sessions.d.ts.map +1 -0
  149. package/dist/dashboard/web/sessions.js +374 -0
  150. package/dist/dashboard/web/sessions.js.map +1 -0
  151. package/dist/dashboard/web/store.d.ts +23 -0
  152. package/dist/dashboard/web/store.d.ts.map +1 -0
  153. package/dist/dashboard/web/store.js +82 -0
  154. package/dist/dashboard/web/store.js.map +1 -0
  155. package/dist/dashboard-web/app.js +263 -0
  156. package/dist/dashboard-web/index.html +23 -0
  157. package/dist/dashboard-web/style.css +93 -0
  158. package/dist/dashboard.d.ts +2 -0
  159. package/dist/dashboard.d.ts.map +1 -0
  160. package/dist/dashboard.js +639 -0
  161. package/dist/dashboard.js.map +1 -0
  162. package/dist/im/lark/card-builder.d.ts +18 -1
  163. package/dist/im/lark/card-builder.d.ts.map +1 -1
  164. package/dist/im/lark/card-builder.js +70 -9
  165. package/dist/im/lark/card-builder.js.map +1 -1
  166. package/dist/im/lark/card-handler.d.ts.map +1 -1
  167. package/dist/im/lark/card-handler.js +123 -109
  168. package/dist/im/lark/card-handler.js.map +1 -1
  169. package/dist/im/lark/client.d.ts +35 -0
  170. package/dist/im/lark/client.d.ts.map +1 -1
  171. package/dist/im/lark/client.js +114 -11
  172. package/dist/im/lark/client.js.map +1 -1
  173. package/dist/im/lark/event-dispatcher.d.ts +88 -6
  174. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  175. package/dist/im/lark/event-dispatcher.js +398 -62
  176. package/dist/im/lark/event-dispatcher.js.map +1 -1
  177. package/dist/im/lark/forwarded-renderer.d.ts +23 -0
  178. package/dist/im/lark/forwarded-renderer.d.ts.map +1 -0
  179. package/dist/im/lark/forwarded-renderer.js +105 -0
  180. package/dist/im/lark/forwarded-renderer.js.map +1 -0
  181. package/dist/im/lark/md-card.d.ts +73 -0
  182. package/dist/im/lark/md-card.d.ts.map +1 -0
  183. package/dist/im/lark/md-card.js +332 -0
  184. package/dist/im/lark/md-card.js.map +1 -0
  185. package/dist/im/lark/merge-forward.d.ts +32 -0
  186. package/dist/im/lark/merge-forward.d.ts.map +1 -0
  187. package/dist/im/lark/merge-forward.js +110 -0
  188. package/dist/im/lark/merge-forward.js.map +1 -0
  189. package/dist/im/lark/message-parser.d.ts +9 -3
  190. package/dist/im/lark/message-parser.d.ts.map +1 -1
  191. package/dist/im/lark/message-parser.js +48 -13
  192. package/dist/im/lark/message-parser.js.map +1 -1
  193. package/dist/im/lark/quote-hint.d.ts +18 -0
  194. package/dist/im/lark/quote-hint.d.ts.map +1 -0
  195. package/dist/im/lark/quote-hint.js +23 -0
  196. package/dist/im/lark/quote-hint.js.map +1 -0
  197. package/dist/services/bridge-fallback-gate.d.ts +42 -0
  198. package/dist/services/bridge-fallback-gate.d.ts.map +1 -0
  199. package/dist/services/bridge-fallback-gate.js +12 -0
  200. package/dist/services/bridge-fallback-gate.js.map +1 -0
  201. package/dist/services/bridge-rotation-policy.d.ts +139 -0
  202. package/dist/services/bridge-rotation-policy.d.ts.map +1 -0
  203. package/dist/services/bridge-rotation-policy.js +125 -0
  204. package/dist/services/bridge-rotation-policy.js.map +1 -0
  205. package/dist/services/bridge-turn-queue.d.ts +154 -0
  206. package/dist/services/bridge-turn-queue.d.ts.map +1 -0
  207. package/dist/services/bridge-turn-queue.js +316 -0
  208. package/dist/services/bridge-turn-queue.js.map +1 -0
  209. package/dist/services/chat-first-seen-store.d.ts +27 -0
  210. package/dist/services/chat-first-seen-store.d.ts.map +1 -0
  211. package/dist/services/chat-first-seen-store.js +114 -0
  212. package/dist/services/chat-first-seen-store.js.map +1 -0
  213. package/dist/services/claude-transcript.d.ts +268 -0
  214. package/dist/services/claude-transcript.d.ts.map +1 -0
  215. package/dist/services/claude-transcript.js +798 -0
  216. package/dist/services/claude-transcript.js.map +1 -0
  217. package/dist/services/coco-transcript.d.ts +35 -0
  218. package/dist/services/coco-transcript.d.ts.map +1 -0
  219. package/dist/services/coco-transcript.js +192 -0
  220. package/dist/services/coco-transcript.js.map +1 -0
  221. package/dist/services/codex-bridge-queue.d.ts +56 -0
  222. package/dist/services/codex-bridge-queue.d.ts.map +1 -0
  223. package/dist/services/codex-bridge-queue.js +150 -0
  224. package/dist/services/codex-bridge-queue.js.map +1 -0
  225. package/dist/services/codex-transcript.d.ts +84 -0
  226. package/dist/services/codex-transcript.d.ts.map +1 -0
  227. package/dist/services/codex-transcript.js +298 -0
  228. package/dist/services/codex-transcript.js.map +1 -0
  229. package/dist/services/group-creator.d.ts +23 -0
  230. package/dist/services/group-creator.d.ts.map +1 -0
  231. package/dist/services/group-creator.js +75 -0
  232. package/dist/services/group-creator.js.map +1 -0
  233. package/dist/services/groups-store.d.ts +98 -0
  234. package/dist/services/groups-store.d.ts.map +1 -0
  235. package/dist/services/groups-store.js +213 -0
  236. package/dist/services/groups-store.js.map +1 -0
  237. package/dist/services/oncall-store.d.ts +80 -8
  238. package/dist/services/oncall-store.d.ts.map +1 -1
  239. package/dist/services/oncall-store.js +265 -55
  240. package/dist/services/oncall-store.js.map +1 -1
  241. package/dist/services/project-scanner.d.ts +1 -2
  242. package/dist/services/project-scanner.d.ts.map +1 -1
  243. package/dist/services/project-scanner.js +118 -68
  244. package/dist/services/project-scanner.js.map +1 -1
  245. package/dist/services/schedule-store.d.ts +5 -0
  246. package/dist/services/schedule-store.d.ts.map +1 -1
  247. package/dist/services/schedule-store.js +77 -1
  248. package/dist/services/schedule-store.js.map +1 -1
  249. package/dist/services/session-store.d.ts +22 -0
  250. package/dist/services/session-store.d.ts.map +1 -1
  251. package/dist/services/session-store.js +62 -4
  252. package/dist/services/session-store.js.map +1 -1
  253. package/dist/setup/bots-store.d.ts +3 -0
  254. package/dist/setup/bots-store.d.ts.map +1 -0
  255. package/dist/setup/bots-store.js +24 -0
  256. package/dist/setup/bots-store.js.map +1 -0
  257. package/dist/setup/detect-platform.d.ts +14 -0
  258. package/dist/setup/detect-platform.d.ts.map +1 -0
  259. package/dist/setup/detect-platform.js +139 -0
  260. package/dist/setup/detect-platform.js.map +1 -0
  261. package/dist/setup/ensure-fonts.d.ts +13 -0
  262. package/dist/setup/ensure-fonts.d.ts.map +1 -0
  263. package/dist/setup/ensure-fonts.js +225 -0
  264. package/dist/setup/ensure-fonts.js.map +1 -0
  265. package/dist/setup/ensure-tmux.d.ts +60 -0
  266. package/dist/setup/ensure-tmux.d.ts.map +1 -0
  267. package/dist/setup/ensure-tmux.js +236 -0
  268. package/dist/setup/ensure-tmux.js.map +1 -0
  269. package/dist/setup/index.d.ts +9 -0
  270. package/dist/setup/index.d.ts.map +1 -0
  271. package/dist/setup/index.js +46 -0
  272. package/dist/setup/index.js.map +1 -0
  273. package/dist/setup/lark-scopes.json +301 -0
  274. package/dist/setup/register-app.d.ts +52 -0
  275. package/dist/setup/register-app.d.ts.map +1 -0
  276. package/dist/setup/register-app.js +91 -0
  277. package/dist/setup/register-app.js.map +1 -0
  278. package/dist/setup/verify-permissions.d.ts +115 -0
  279. package/dist/setup/verify-permissions.d.ts.map +1 -0
  280. package/dist/setup/verify-permissions.js +207 -0
  281. package/dist/setup/verify-permissions.js.map +1 -0
  282. package/dist/skills/definitions.d.ts +4 -0
  283. package/dist/skills/definitions.d.ts.map +1 -1
  284. package/dist/skills/definitions.js +133 -19
  285. package/dist/skills/definitions.js.map +1 -1
  286. package/dist/skills/installer.d.ts +3 -1
  287. package/dist/skills/installer.d.ts.map +1 -1
  288. package/dist/skills/installer.js +18 -3
  289. package/dist/skills/installer.js.map +1 -1
  290. package/dist/types.d.ts +44 -0
  291. package/dist/types.d.ts.map +1 -1
  292. package/dist/utils/bot-routing.d.ts +6 -0
  293. package/dist/utils/bot-routing.d.ts.map +1 -0
  294. package/dist/utils/bot-routing.js +50 -0
  295. package/dist/utils/bot-routing.js.map +1 -0
  296. package/dist/utils/file-lock.d.ts +2 -0
  297. package/dist/utils/file-lock.d.ts.map +1 -0
  298. package/dist/utils/file-lock.js +114 -0
  299. package/dist/utils/file-lock.js.map +1 -0
  300. package/dist/utils/font-installer.js +1 -1
  301. package/dist/utils/font-installer.js.map +1 -1
  302. package/dist/utils/idle-detector.d.ts +6 -0
  303. package/dist/utils/idle-detector.d.ts.map +1 -1
  304. package/dist/utils/idle-detector.js +25 -4
  305. package/dist/utils/idle-detector.js.map +1 -1
  306. package/dist/utils/logger.d.ts +10 -0
  307. package/dist/utils/logger.d.ts.map +1 -1
  308. package/dist/utils/logger.js +60 -8
  309. package/dist/utils/logger.js.map +1 -1
  310. package/dist/utils/render-dimensions.d.ts +48 -0
  311. package/dist/utils/render-dimensions.d.ts.map +1 -0
  312. package/dist/utils/render-dimensions.js +55 -0
  313. package/dist/utils/render-dimensions.js.map +1 -0
  314. package/dist/utils/screen-analyzer.d.ts.map +1 -1
  315. package/dist/utils/screen-analyzer.js +24 -0
  316. package/dist/utils/screen-analyzer.js.map +1 -1
  317. package/dist/utils/screenshot-renderer.d.ts.map +1 -1
  318. package/dist/utils/screenshot-renderer.js +67 -23
  319. package/dist/utils/screenshot-renderer.js.map +1 -1
  320. package/dist/utils/terminal-renderer.d.ts +16 -0
  321. package/dist/utils/terminal-renderer.d.ts.map +1 -1
  322. package/dist/utils/terminal-renderer.js +40 -23
  323. package/dist/utils/terminal-renderer.js.map +1 -1
  324. package/dist/utils/transient-snapshot.d.ts +28 -0
  325. package/dist/utils/transient-snapshot.d.ts.map +1 -0
  326. package/dist/utils/transient-snapshot.js +96 -0
  327. package/dist/utils/transient-snapshot.js.map +1 -0
  328. package/dist/worker.js +2220 -83
  329. package/dist/worker.js.map +1 -1
  330. package/package.json +12 -5
@@ -0,0 +1,301 @@
1
+ {
2
+ "scopes": {
3
+ "tenant": [
4
+ "ai:llpp:task_execute",
5
+ "application:application:self_manage",
6
+ "application:bot.menu:write",
7
+ "audio_video_ai:meeting_assistance",
8
+ "auth:user_access_token:read",
9
+ "board:whiteboard:node:create",
10
+ "board:whiteboard:node:delete",
11
+ "board:whiteboard:node:read",
12
+ "board:whiteboard:node:update",
13
+ "calendar:calendar.acl:create",
14
+ "calendar:calendar.acl:delete",
15
+ "calendar:calendar.acl:read",
16
+ "calendar:calendar.event:create",
17
+ "calendar:calendar.event:delete",
18
+ "calendar:calendar.event:read",
19
+ "calendar:calendar.event:reply",
20
+ "calendar:calendar.event:update",
21
+ "calendar:calendar.free_busy:read",
22
+ "calendar:calendar:create",
23
+ "calendar:calendar:delete",
24
+ "calendar:calendar:read",
25
+ "calendar:calendar:subscribe",
26
+ "calendar:calendar:update",
27
+ "cardkit:card:read",
28
+ "cardkit:card:write",
29
+ "comment_sdk:comment_sdk",
30
+ "component:url_preview",
31
+ "contact:contact.base:readonly",
32
+ "contact:user.base:readonly",
33
+ "contact:user.email:readonly",
34
+ "contact:user.employee_id:readonly",
35
+ "contact:user.id:readonly",
36
+ "directory:employee.base.external_id:read",
37
+ "directory:employee.work.job_number:read",
38
+ "directory:job_title.status:read",
39
+ "docs:document.comment:create",
40
+ "docs:document.comment:delete",
41
+ "docs:document.comment:read",
42
+ "docs:document.comment:update",
43
+ "docs:document.comment:write_only",
44
+ "docs:document.content:read",
45
+ "docs:document.media:download",
46
+ "docs:document.media:upload",
47
+ "docs:document.subscription",
48
+ "docs:document.subscription:read",
49
+ "docs:document:copy",
50
+ "docs:document:export",
51
+ "docs:document:import",
52
+ "docs:event.document_deleted:read",
53
+ "docs:event.document_edited:read",
54
+ "docs:event.document_opened:read",
55
+ "docs:event:subscribe",
56
+ "docs:permission.member:auth",
57
+ "docs:permission.member:create",
58
+ "docs:permission.member:delete",
59
+ "docs:permission.member:retrieve",
60
+ "docs:permission.member:transfer",
61
+ "docs:permission.member:update",
62
+ "docs:permission.setting:read",
63
+ "docs:permission.setting:readonly",
64
+ "docs:permission.setting:write_only",
65
+ "docs_tool:docs_tool",
66
+ "document_ai:document:chunking",
67
+ "document_ai:kie:llm",
68
+ "docx:document.block:convert",
69
+ "docx:document:create",
70
+ "docx:document:readonly",
71
+ "docx:document:write_only",
72
+ "drive:drive.metadata:readonly",
73
+ "drive:drive.search:readonly",
74
+ "drive:drive:version",
75
+ "drive:drive:version:readonly",
76
+ "drive:file.like:readonly",
77
+ "drive:file.meta.sec_label.read_only",
78
+ "drive:file:download",
79
+ "drive:file:favorite",
80
+ "drive:file:favorite:readonly",
81
+ "drive:file:upload",
82
+ "drive:file:view_record:readonly",
83
+ "event:failed_event:readonly",
84
+ "event:ip_list",
85
+ "im:app_feed_card:write",
86
+ "im:chat.access_event.bot_p2p_chat:read",
87
+ "im:chat.announcement:read",
88
+ "im:chat.announcement:write_only",
89
+ "im:chat.chat_pins:read",
90
+ "im:chat.chat_pins:write_only",
91
+ "im:chat.collab_plugins:read",
92
+ "im:chat.collab_plugins:write_only",
93
+ "im:chat.managers:write_only",
94
+ "im:chat.members:bot_access",
95
+ "im:chat.members:read",
96
+ "im:chat.members:write_only",
97
+ "im:chat.menu_tree:read",
98
+ "im:chat.menu_tree:write_only",
99
+ "im:chat.moderation:read",
100
+ "im:chat.tabs:read",
101
+ "im:chat.tabs:write_only",
102
+ "im:chat.top_notice:write_only",
103
+ "im:chat.widgets:read",
104
+ "im:chat.widgets:write_only",
105
+ "im:chat:create",
106
+ "im:chat:delete",
107
+ "im:chat:moderation:write_only",
108
+ "im:chat:operate_as_owner",
109
+ "im:chat:read",
110
+ "im:chat:update",
111
+ "im:message",
112
+ "im:message.group_at_msg.include_bot:readonly",
113
+ "im:message.group_at_msg:readonly",
114
+ "im:message.group_msg",
115
+ "im:message.p2p_msg:readonly",
116
+ "im:message.pins:read",
117
+ "im:message.pins:write_only",
118
+ "im:message.reactions:read",
119
+ "im:message.reactions:write_only",
120
+ "im:message:readonly",
121
+ "im:message:recall",
122
+ "im:message:send_as_bot",
123
+ "im:message:send_multi_depts",
124
+ "im:message:send_multi_users",
125
+ "im:message:send_sys_msg",
126
+ "im:message:update",
127
+ "im:resource",
128
+ "im:url_preview.update",
129
+ "im:user_agent:read",
130
+ "optical_char_recognition:image",
131
+ "sheets:spreadsheet.meta:read",
132
+ "sheets:spreadsheet.meta:write_only",
133
+ "sheets:spreadsheet:create",
134
+ "sheets:spreadsheet:read",
135
+ "sheets:spreadsheet:write_only",
136
+ "slides:presentation:create",
137
+ "slides:presentation:read",
138
+ "slides:presentation:update",
139
+ "slides:presentation:write_only",
140
+ "space:document.event:read",
141
+ "space:document:create",
142
+ "space:document:delete",
143
+ "space:document:move",
144
+ "space:document:retrieve",
145
+ "space:document:shortcut",
146
+ "space:folder:create",
147
+ "speech_to_text:speech",
148
+ "task:task:read",
149
+ "task:task:write",
150
+ "task:tasklist:read",
151
+ "task:tasklist:write",
152
+ "translation:text",
153
+ "wiki:member:create",
154
+ "wiki:member:retrieve",
155
+ "wiki:member:update",
156
+ "wiki:node:copy",
157
+ "wiki:node:create",
158
+ "wiki:node:move",
159
+ "wiki:node:read",
160
+ "wiki:node:retrieve",
161
+ "wiki:node:update",
162
+ "wiki:setting:read",
163
+ "wiki:setting:write_only",
164
+ "wiki:space:read",
165
+ "wiki:space:retrieve",
166
+ "wiki:space:write_only",
167
+ "wiki:wiki:readonly"
168
+ ],
169
+ "user": [
170
+ "board:whiteboard:node:create",
171
+ "board:whiteboard:node:delete",
172
+ "board:whiteboard:node:read",
173
+ "board:whiteboard:node:update",
174
+ "calendar:calendar.acl:create",
175
+ "calendar:calendar.acl:delete",
176
+ "calendar:calendar.acl:read",
177
+ "calendar:calendar.event:create",
178
+ "calendar:calendar.event:delete",
179
+ "calendar:calendar.event:read",
180
+ "calendar:calendar.event:reply",
181
+ "calendar:calendar.event:update",
182
+ "calendar:calendar.free_busy:read",
183
+ "calendar:calendar:create",
184
+ "calendar:calendar:delete",
185
+ "calendar:calendar:read",
186
+ "calendar:calendar:subscribe",
187
+ "calendar:calendar:update",
188
+ "comment_sdk:comment_sdk",
189
+ "contact:contact.base:readonly",
190
+ "contact:user.employee_id:readonly",
191
+ "docs:component",
192
+ "docs:document.comment:create",
193
+ "docs:document.comment:read",
194
+ "docs:document.comment:update",
195
+ "docs:document.comment:write_only",
196
+ "docs:document.content:read",
197
+ "docs:document.media:download",
198
+ "docs:document.media:upload",
199
+ "docs:document.subscription",
200
+ "docs:document.subscription:read",
201
+ "docs:document:copy",
202
+ "docs:document:export",
203
+ "docs:document:import",
204
+ "docs:event.document_deleted:read",
205
+ "docs:event.document_edited:read",
206
+ "docs:event.document_opened:read",
207
+ "docs:event:subscribe",
208
+ "docs:permission.member:apply",
209
+ "docs:permission.member:auth",
210
+ "docs:permission.member:create",
211
+ "docs:permission.member:delete",
212
+ "docs:permission.member:retrieve",
213
+ "docs:permission.member:transfer",
214
+ "docs:permission.member:update",
215
+ "docs:permission.setting:read",
216
+ "docs:permission.setting:readonly",
217
+ "docs:permission.setting:write_only",
218
+ "docs_tool:docs_tool",
219
+ "docx:document.block:convert",
220
+ "docx:document:create",
221
+ "docx:document:readonly",
222
+ "docx:document:write_only",
223
+ "drive:drive.metadata:readonly",
224
+ "drive:drive.search:readonly",
225
+ "drive:drive:version",
226
+ "drive:drive:version:readonly",
227
+ "drive:file.like:readonly",
228
+ "drive:file.meta.sec_label.read_only",
229
+ "drive:file:download",
230
+ "drive:file:favorite",
231
+ "drive:file:favorite:readonly",
232
+ "drive:file:upload",
233
+ "drive:file:view_record:readonly",
234
+ "event:ip_list",
235
+ "im:chat.access_event.bot_p2p_chat:read",
236
+ "im:chat.announcement:read",
237
+ "im:chat.announcement:write_only",
238
+ "im:chat.chat_pins:read",
239
+ "im:chat.chat_pins:write_only",
240
+ "im:chat.collab_plugins:read",
241
+ "im:chat.collab_plugins:write_only",
242
+ "im:chat.managers:write_only",
243
+ "im:chat.members:read",
244
+ "im:chat.members:write_only",
245
+ "im:chat.moderation:read",
246
+ "im:chat.tabs:read",
247
+ "im:chat.tabs:write_only",
248
+ "im:chat.top_notice:write_only",
249
+ "im:chat:delete",
250
+ "im:chat:moderation:write_only",
251
+ "im:chat:read",
252
+ "im:chat:update",
253
+ "im:message",
254
+ "im:message.group_msg:get_as_user",
255
+ "im:message.p2p_msg:get_as_user",
256
+ "im:message.pins:read",
257
+ "im:message.pins:write_only",
258
+ "im:message.reactions:read",
259
+ "im:message.reactions:write_only",
260
+ "im:message.urgent.status:write",
261
+ "im:message:readonly",
262
+ "im:message:recall",
263
+ "im:message:update",
264
+ "im:special_focus",
265
+ "offline_access",
266
+ "search:docs:read",
267
+ "search:message",
268
+ "sheets:spreadsheet.meta:read",
269
+ "sheets:spreadsheet.meta:write_only",
270
+ "sheets:spreadsheet:create",
271
+ "sheets:spreadsheet:read",
272
+ "sheets:spreadsheet:write_only",
273
+ "slides:presentation:create",
274
+ "slides:presentation:read",
275
+ "slides:presentation:update",
276
+ "slides:presentation:write_only",
277
+ "space:document.event:read",
278
+ "space:document:create",
279
+ "space:document:delete",
280
+ "space:document:move",
281
+ "space:document:retrieve",
282
+ "space:document:shortcut",
283
+ "space:folder:create",
284
+ "wiki:member:create",
285
+ "wiki:member:retrieve",
286
+ "wiki:member:update",
287
+ "wiki:node:copy",
288
+ "wiki:node:create",
289
+ "wiki:node:move",
290
+ "wiki:node:read",
291
+ "wiki:node:retrieve",
292
+ "wiki:node:update",
293
+ "wiki:setting:read",
294
+ "wiki:setting:write_only",
295
+ "wiki:space:read",
296
+ "wiki:space:retrieve",
297
+ "wiki:space:write_only",
298
+ "wiki:wiki:readonly"
299
+ ]
300
+ }
301
+ }
@@ -0,0 +1,52 @@
1
+ export type RegisterBrand = 'feishu' | 'lark';
2
+ export type RegisterAppOk = {
3
+ ok: true;
4
+ appId: string;
5
+ appSecret: string;
6
+ brand: RegisterBrand;
7
+ /**
8
+ * 扫码人的 open_id (飞书 device flow `request_user_info=open_id tenant_brand`
9
+ * 字段返回). 给 setup 用作 `allowedUsers` 默认值, 省掉用户手动输入"我自己"
10
+ * 这一步. 没拿到时为 undefined (理论上不会, 但接口可能改).
11
+ */
12
+ userOpenId?: string;
13
+ };
14
+ export type RegisterAppErr = {
15
+ ok: false;
16
+ /**
17
+ * - `aborted`: 用户 Ctrl-C / 主动取消
18
+ * - `expired`: 二维码过期 (默认 10 分钟)
19
+ * - `denied`: 用户在浏览器里拒绝
20
+ * - `network`: 网络错误 / 端点不可达
21
+ * - `unknown`: 其它 (含 SDK 抛非预期错误)
22
+ */
23
+ error: 'aborted' | 'expired' | 'denied' | 'network' | 'unknown';
24
+ /** 给用户看的简短错误描述, 不含 secret. */
25
+ message: string;
26
+ };
27
+ export type RegisterAppResult = RegisterAppOk | RegisterAppErr;
28
+ export interface RegisterAppOptions {
29
+ /** 取消信号 (Ctrl-C 时填充). */
30
+ signal?: AbortSignal;
31
+ /**
32
+ * 渲染前回调, 测试时可注入静默打印. 默认在 stdout 打印二维码 + 链接.
33
+ */
34
+ onQRCodeReady?: (info: {
35
+ url: string;
36
+ expireIn: number;
37
+ }) => void;
38
+ /** 状态变更回调, 主要用于"已切换到 Lark 域名"提示. */
39
+ onStatusChange?: (info: {
40
+ status: string;
41
+ interval?: number;
42
+ }) => void;
43
+ }
44
+ /**
45
+ * 尝试扫码建应用. 任何失败都返回 RegisterAppErr (不抛), 调用方可以回退手动粘.
46
+ *
47
+ * Secret 安全约束:
48
+ * - SDK 返回的 client_secret 只放进返回值, 不打印, 不写日志
49
+ * - 错误链里只放错误 code / 阶段, 不带 secret
50
+ */
51
+ export declare function tryRegisterApp(opts?: RegisterAppOptions): Promise<RegisterAppResult>;
52
+ //# sourceMappingURL=register-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-app.d.ts","sourceRoot":"","sources":["../../src/setup/register-app.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,KAAK,CAAC;IACV;;;;;;OAMG;IACH,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAChE,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,cAAc,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAClE,oCAAoC;IACpC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACxE;AAiBD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmD9F"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * 飞书扫码建应用 — 对接 `@larksuiteoapi/node-sdk` 的 `registerApp`.
3
+ *
4
+ * 走 OAuth 2.0 Device Flow (RFC 8628):
5
+ * 1. SDK 向 `accounts.feishu.cn/oauth/v1/app/registration` 发 `action=begin`
6
+ * 请求 (`archetype=PersonalAgent`), 拿到 device_code + 二维码 URL
7
+ * 2. 在终端渲染二维码 + 链接, 等用户扫码
8
+ * 3. SDK 轮询同端点 `action=poll` 直到拿到 client_id + client_secret
9
+ * (=AppID + AppSecret)
10
+ *
11
+ * 注意:
12
+ * - 这个端点 archetype 写死 `PersonalAgent`, 但实测 PersonalAgent 应用是
13
+ * 可以挂 bot 能力的 (`zarazhangrui/feishu-claude-code-bridge` 在用).
14
+ * - 建出来的应用 **没有** 声明 botmux 需要的 scope, 用户仍要在开放平台
15
+ * 「权限管理 → 批量导入/导出权限」粘贴 ~/.botmux/lark-scopes.json (setup
16
+ * 末尾会自动写一份) 一次性提交审批. 事件订阅 + bot 能力维护者实测默认
17
+ * 配好, 收不到消息时见 README 的 fallback 自查清单.
18
+ * - secret 永远不打印; 错误只暴露 error code / 阶段标签, 不暴露 secret.
19
+ */
20
+ import { registerApp } from '@larksuiteoapi/node-sdk';
21
+ import qrcode from 'qrcode-terminal';
22
+ function defaultPrintQRCode(info) {
23
+ const mins = Math.max(1, Math.round(info.expireIn / 60));
24
+ process.stderr.write('\n请用飞书 App 扫码完成应用创建:\n\n');
25
+ qrcode.generate(info.url, { small: true }, (qr) => process.stderr.write(qr + '\n'));
26
+ process.stderr.write(`\n二维码有效期约 ${mins} 分钟。也可在浏览器打开:\n ${info.url}\n\n`);
27
+ }
28
+ function defaultPrintStatus(info) {
29
+ if (info.status === 'domain_switched') {
30
+ process.stderr.write('识别到国际版租户, 已切换到 larksuite.com 域名继续轮询。\n');
31
+ }
32
+ else if (info.status === 'slow_down' && info.interval) {
33
+ process.stderr.write(`轮询过快, 间隔自动调整到 ${info.interval}s。\n`);
34
+ }
35
+ }
36
+ /**
37
+ * 尝试扫码建应用. 任何失败都返回 RegisterAppErr (不抛), 调用方可以回退手动粘.
38
+ *
39
+ * Secret 安全约束:
40
+ * - SDK 返回的 client_secret 只放进返回值, 不打印, 不写日志
41
+ * - 错误链里只放错误 code / 阶段, 不带 secret
42
+ */
43
+ export async function tryRegisterApp(opts = {}) {
44
+ const onQR = opts.onQRCodeReady ?? defaultPrintQRCode;
45
+ const onStatus = opts.onStatusChange ?? defaultPrintStatus;
46
+ try {
47
+ const result = await registerApp({
48
+ signal: opts.signal,
49
+ source: 'botmux',
50
+ onQRCodeReady: onQR,
51
+ onStatusChange: onStatus,
52
+ });
53
+ if (!result.client_id || !result.client_secret) {
54
+ return {
55
+ ok: false,
56
+ error: 'unknown',
57
+ message: 'SDK 返回的 client_id/client_secret 为空',
58
+ };
59
+ }
60
+ const brand = result.user_info?.tenant_brand === 'lark' ? 'lark' : 'feishu';
61
+ const userOpenId = typeof result.user_info?.open_id === 'string' && result.user_info.open_id.startsWith('ou_')
62
+ ? result.user_info.open_id
63
+ : undefined;
64
+ return {
65
+ ok: true,
66
+ appId: result.client_id,
67
+ appSecret: result.client_secret,
68
+ brand,
69
+ userOpenId,
70
+ };
71
+ }
72
+ catch (err) {
73
+ // SDK 抛 LarkChannelError, code 字段对齐 RFC 8628 的 device flow 错误
74
+ const code = err?.code ?? '';
75
+ const rawMsg = err?.message ?? String(err);
76
+ // SDK 不会把 secret 放进 message, 但保险起见再过一次
77
+ const safeMsg = rawMsg.replace(/[a-zA-Z0-9_-]{30,}/g, '***');
78
+ if (code === 'abort')
79
+ return { ok: false, error: 'aborted', message: '用户取消扫码' };
80
+ if (code === 'expired_token')
81
+ return { ok: false, error: 'expired', message: '二维码已过期, 请重试' };
82
+ if (code === 'access_denied')
83
+ return { ok: false, error: 'denied', message: '用户在浏览器里拒绝授权' };
84
+ // 网络层错误 (axios) — 没固定 code, 看 message
85
+ if (/ETIMEDOUT|ECONNREFUSED|ENOTFOUND|ECONNRESET|network/i.test(rawMsg)) {
86
+ return { ok: false, error: 'network', message: `网络错误: ${safeMsg}` };
87
+ }
88
+ return { ok: false, error: 'unknown', message: safeMsg };
89
+ }
90
+ }
91
+ //# sourceMappingURL=register-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-app.js","sourceRoot":"","sources":["../../src/setup/register-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ export type Brand = 'feishu' | 'lark';
2
+ export interface RequiredScope {
3
+ /** 飞书 scope 名 (`im:message` 等) */
4
+ name: string;
5
+ /** 给用户看的中文说明 */
6
+ desc: string;
7
+ /**
8
+ * `critical` = 不开通 botmux 核心功能无法工作 (收发消息).
9
+ * 非 critical 的 scope 缺失只 WARN, 不阻断启动.
10
+ */
11
+ critical: boolean;
12
+ }
13
+ /**
14
+ * botmux 运行所需的 scope. 这里**只用于检测/提示**, 不用于自动申请——飞书
15
+ * `scope.apply` 只能提交"已声明但未授权"的, 没法给应用 manifest 加新声明.
16
+ * scope 选择必须用户去开放平台勾.
17
+ */
18
+ export declare const BOTMUX_REQUIRED_SCOPES: RequiredScope[];
19
+ export interface RemainingStep {
20
+ title: string;
21
+ /** 飞书开放平台深链, 用户点了直接到对应页 */
22
+ url: string;
23
+ }
24
+ export declare function buildScopeDeepLink(appId: string, scopeName: string, brand?: Brand): string;
25
+ export declare function buildEventSubDeepLink(appId: string, brand?: Brand): string;
26
+ export declare function buildAppHomeDeepLink(appId: string, brand?: Brand): string;
27
+ export type CredentialValidation = {
28
+ ok: true;
29
+ tenantAccessToken: string;
30
+ tokenExpiresIn: number;
31
+ } | {
32
+ ok: false;
33
+ error: 'invalid_credentials' | 'network' | 'unknown';
34
+ message: string;
35
+ };
36
+ /**
37
+ * 用 AppID/Secret 取一次 tenant_access_token, 验证凭证可用.
38
+ *
39
+ * Secret 不进 error.message: 错误信息只来自飞书返回的 msg 字段或 axios 错误类型.
40
+ *
41
+ * Codex review #3: 加 AbortController + 总超时. 网络半挂时 `botmux setup` /
42
+ * `botmux start` 不能无限卡住; 超时归类为 network, 这样 setup 走"凭证校验失败
43
+ * 不写盘" 路径, start 走"network 只 WARN 继续"路径.
44
+ */
45
+ export declare function validateCredentials(appId: string, appSecret: string, brand?: Brand, opts?: {
46
+ budgetMs?: number;
47
+ signal?: AbortSignal;
48
+ }): Promise<CredentialValidation>;
49
+ export type ScopeCheckResult = {
50
+ ok: true;
51
+ granted: string[];
52
+ missingCritical: RequiredScope[];
53
+ missingOptional: RequiredScope[];
54
+ } | {
55
+ ok: false;
56
+ /**
57
+ * - `need_self_manage`: 调 scope.list 被拒, 应用缺 `application:application:self_manage`
58
+ * (鸡生蛋: 没这个 scope 就查不到 scope 列表)
59
+ * - `network` / `unknown`: 其它失败
60
+ */
61
+ error: 'need_self_manage' | 'network' | 'unknown';
62
+ message: string;
63
+ };
64
+ /**
65
+ * 列出应用的 scope grant 状态, 比对 BOTMUX_REQUIRED_SCOPES.
66
+ *
67
+ * **不在主路径使用** — 待 spike 用真实/可复现 mock 证明 grant_status 含义和
68
+ * 状态闭环后再启用. 当前主路径只输出"剩余步骤 + 深链", 不做 grant_status 判定.
69
+ *
70
+ * scope.list 返回 shape (SDK type):
71
+ * `{ data: { scopes: [{ scope_name, grant_status, scope_type }] } }`
72
+ * grant_status 含义未在官方文档明确, 但社区 SDK / 实测一般约定:
73
+ * 1 = 已申请未生效, 2 = 已生效. 启用前 spike 务必确认这个映射.
74
+ */
75
+ export declare function checkRequiredScopes(appId: string, appSecret: string, brand?: Brand): Promise<ScopeCheckResult>;
76
+ /**
77
+ * 触发管理员审批 (把"已声明但未授权"的 scope 提交).
78
+ *
79
+ * **不在主路径使用** — 见模块顶部注释. 文档表明它无法添加新 scope 到 manifest,
80
+ * 所以即使调成功也不能绕过"用户去开放平台勾 scope". 留作 spike 验证状态闭环
81
+ * 后的可选自动触发能力.
82
+ *
83
+ * 文档/SDK 显示无请求体. 错误码:
84
+ * - 212001: 剩余权限为高敏, 无法申请
85
+ * - 212002: 无可申请的 scope (manifest 全部已授权或为空)
86
+ * - 212003: 申请次数超限 (同租户同版本 > 10 次)
87
+ * - 212004: 重复申请
88
+ */
89
+ export interface ApplyScopesResult {
90
+ /**
91
+ * - `submitted`: 申请已提交 (code=0). 是否被管理员审批通过需另查 `scope.list`.
92
+ * - `nothing_to_apply`: 212002, manifest 没有"已声明但未授权"的 scope.
93
+ * - `already_applied`: 212004, 重复申请.
94
+ * - `over_limit`: 212003, 同租户同版本 > 10 次申请.
95
+ * - `super_scope_only`: 212001, 剩余为高敏权限不可申请.
96
+ * - `timeout`: 调用本身没在 budgetMs 内返回.
97
+ * - `error`: 其它失败.
98
+ */
99
+ status: 'submitted' | 'nothing_to_apply' | 'already_applied' | 'over_limit' | 'super_scope_only' | 'timeout' | 'error';
100
+ code?: number;
101
+ msg?: string;
102
+ }
103
+ export declare function applyScopesUnverified(appId: string, appSecret: string, opts?: {
104
+ brand?: Brand;
105
+ budgetMs?: number;
106
+ signal?: AbortSignal;
107
+ }): Promise<ApplyScopesResult>;
108
+ /**
109
+ * setup 后 "还要手动点的步骤" 结构化数据. 跟 cli.ts 的 printRemainingSteps + README
110
+ * "5 分钟快速接入" 一致: 主线就两步 (权限申请 + 按需重定向 URL); PersonalAgent
111
+ * 应用默认订阅事件 + bot 能力, 不在主线提示, 收不到消息时见 README 的 fallback
112
+ * 自查清单.
113
+ */
114
+ export declare function buildRemainingSteps(appId: string, brand?: Brand): RemainingStep[];
115
+ //# sourceMappingURL=verify-permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-permissions.d.ts","sourceRoot":"","sources":["../../src/setup/verify-permissions.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAAa,EAQjD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGpG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGpF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGnF;AAID,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,KAAgB,EACvB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACrD,OAAO,CAAC,oBAAoB,CAAC,CA0D/B;AAID,MAAM,MAAM,gBAAgB,GACxB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV;;;;OAIG;IACH,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,KAAgB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAiC3B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,MAAM,EACF,WAAW,GACX,kBAAkB,GAClB,iBAAiB,GACjB,YAAY,GACZ,kBAAkB,GAClB,SAAS,GACT,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACpE,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,aAAa,EAAE,CAa3F"}