botmux 2.9.0 → 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.
- package/README.en.md +140 -76
- package/README.md +134 -75
- package/dist/adapters/backend/pty-backend.d.ts +6 -0
- package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
- package/dist/adapters/backend/pty-backend.js +10 -0
- package/dist/adapters/backend/pty-backend.js.map +1 -1
- package/dist/adapters/backend/session-backend-selector.d.ts +11 -0
- package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -0
- package/dist/adapters/backend/session-backend-selector.js +26 -0
- package/dist/adapters/backend/session-backend-selector.js.map +1 -0
- package/dist/adapters/backend/tmux-backend.d.ts +80 -3
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +301 -49
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +100 -0
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -0
- package/dist/adapters/backend/tmux-pipe-backend.js +473 -0
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -0
- package/dist/adapters/cli/aiden.d.ts.map +1 -1
- package/dist/adapters/cli/aiden.js +5 -0
- package/dist/adapters/cli/aiden.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts +40 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +470 -49
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/coco.d.ts.map +1 -1
- package/dist/adapters/cli/coco.js +191 -9
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +94 -17
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +2 -2
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +7 -5
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +38 -1
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/autostart.d.ts +14 -0
- package/dist/autostart.d.ts.map +1 -0
- package/dist/autostart.js +357 -0
- package/dist/autostart.js.map +1 -0
- package/dist/bot-registry.d.ts +29 -3
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +91 -12
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/arg-utils.d.ts +11 -0
- package/dist/cli/arg-utils.d.ts.map +1 -0
- package/dist/cli/arg-utils.js +25 -0
- package/dist/cli/arg-utils.js.map +1 -0
- package/dist/cli/create-group-resolver.d.ts +32 -0
- package/dist/cli/create-group-resolver.d.ts.map +1 -0
- package/dist/cli/create-group-resolver.js +70 -0
- package/dist/cli/create-group-resolver.js.map +1 -0
- package/dist/cli/quoted-render.d.ts +30 -0
- package/dist/cli/quoted-render.d.ts.map +1 -0
- package/dist/cli/quoted-render.js +29 -0
- package/dist/cli/quoted-render.js.map +1 -0
- package/dist/cli.js +916 -272
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -8
- package/dist/config.js.map +1 -1
- package/dist/core/command-handler.d.ts +43 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +167 -64
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-events.d.ts +57 -0
- package/dist/core/dashboard-events.d.ts.map +1 -0
- package/dist/core/dashboard-events.js +23 -0
- package/dist/core/dashboard-events.js.map +1 -0
- package/dist/core/dashboard-ipc-server.d.ts +43 -0
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -0
- package/dist/core/dashboard-ipc-server.js +481 -0
- package/dist/core/dashboard-ipc-server.js.map +1 -0
- package/dist/core/dashboard-locate.d.ts +20 -0
- package/dist/core/dashboard-locate.d.ts.map +1 -0
- package/dist/core/dashboard-locate.js +26 -0
- package/dist/core/dashboard-locate.js.map +1 -0
- package/dist/core/dashboard-rows.d.ts +31 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -0
- package/dist/core/dashboard-rows.js +65 -0
- package/dist/core/dashboard-rows.js.map +1 -0
- package/dist/core/inherit-peer.d.ts +14 -0
- package/dist/core/inherit-peer.d.ts.map +1 -0
- package/dist/core/inherit-peer.js +32 -0
- package/dist/core/inherit-peer.js.map +1 -0
- package/dist/core/scheduler.d.ts +24 -0
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +93 -2
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/session-activity.d.ts +3 -0
- package/dist/core/session-activity.d.ts.map +1 -0
- package/dist/core/session-activity.js +20 -0
- package/dist/core/session-activity.js.map +1 -0
- package/dist/core/session-discovery.d.ts +39 -0
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +114 -21
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.d.ts +72 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +396 -106
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/types.d.ts +27 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +14 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +72 -3
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +459 -38
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +601 -309
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/aggregator.d.ts +41 -0
- package/dist/dashboard/aggregator.d.ts.map +1 -0
- package/dist/dashboard/aggregator.js +125 -0
- package/dist/dashboard/aggregator.js.map +1 -0
- package/dist/dashboard/auth.d.ts +23 -0
- package/dist/dashboard/auth.d.ts.map +1 -0
- package/dist/dashboard/auth.js +66 -0
- package/dist/dashboard/auth.js.map +1 -0
- package/dist/dashboard/operator-selector.d.ts +20 -0
- package/dist/dashboard/operator-selector.d.ts.map +1 -0
- package/dist/dashboard/operator-selector.js +39 -0
- package/dist/dashboard/operator-selector.js.map +1 -0
- package/dist/dashboard/registry.d.ts +35 -0
- package/dist/dashboard/registry.d.ts.map +1 -0
- package/dist/dashboard/registry.js +74 -0
- package/dist/dashboard/registry.js.map +1 -0
- package/dist/dashboard/web/app.d.ts +2 -0
- package/dist/dashboard/web/app.d.ts.map +1 -0
- package/dist/dashboard/web/app.js +45 -0
- package/dist/dashboard/web/app.js.map +1 -0
- package/dist/dashboard/web/bot-defaults.d.ts +2 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -0
- package/dist/dashboard/web/bot-defaults.js +201 -0
- package/dist/dashboard/web/bot-defaults.js.map +1 -0
- package/dist/dashboard/web/groups.d.ts +16 -0
- package/dist/dashboard/web/groups.d.ts.map +1 -0
- package/dist/dashboard/web/groups.js +584 -0
- package/dist/dashboard/web/groups.js.map +1 -0
- package/dist/dashboard/web/schedules.d.ts +2 -0
- package/dist/dashboard/web/schedules.d.ts.map +1 -0
- package/dist/dashboard/web/schedules.js +105 -0
- package/dist/dashboard/web/schedules.js.map +1 -0
- package/dist/dashboard/web/sessions.d.ts +2 -0
- package/dist/dashboard/web/sessions.d.ts.map +1 -0
- package/dist/dashboard/web/sessions.js +374 -0
- package/dist/dashboard/web/sessions.js.map +1 -0
- package/dist/dashboard/web/store.d.ts +23 -0
- package/dist/dashboard/web/store.d.ts.map +1 -0
- package/dist/dashboard/web/store.js +82 -0
- package/dist/dashboard/web/store.js.map +1 -0
- package/dist/dashboard-web/app.js +263 -0
- package/dist/dashboard-web/index.html +23 -0
- package/dist/dashboard-web/style.css +93 -0
- package/dist/dashboard.d.ts +2 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +639 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/im/lark/card-builder.d.ts +18 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +70 -9
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +123 -109
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +36 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +119 -13
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +92 -8
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +410 -89
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/forwarded-renderer.d.ts +23 -0
- package/dist/im/lark/forwarded-renderer.d.ts.map +1 -0
- package/dist/im/lark/forwarded-renderer.js +105 -0
- package/dist/im/lark/forwarded-renderer.js.map +1 -0
- package/dist/im/lark/md-card.d.ts +73 -0
- package/dist/im/lark/md-card.d.ts.map +1 -0
- package/dist/im/lark/md-card.js +332 -0
- package/dist/im/lark/md-card.js.map +1 -0
- package/dist/im/lark/merge-forward.d.ts +32 -0
- package/dist/im/lark/merge-forward.d.ts.map +1 -0
- package/dist/im/lark/merge-forward.js +110 -0
- package/dist/im/lark/merge-forward.js.map +1 -0
- package/dist/im/lark/message-parser.d.ts +9 -3
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +48 -13
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/quote-hint.d.ts +18 -0
- package/dist/im/lark/quote-hint.d.ts.map +1 -0
- package/dist/im/lark/quote-hint.js +23 -0
- package/dist/im/lark/quote-hint.js.map +1 -0
- package/dist/services/bridge-fallback-gate.d.ts +42 -0
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -0
- package/dist/services/bridge-fallback-gate.js +12 -0
- package/dist/services/bridge-fallback-gate.js.map +1 -0
- package/dist/services/bridge-rotation-policy.d.ts +139 -0
- package/dist/services/bridge-rotation-policy.d.ts.map +1 -0
- package/dist/services/bridge-rotation-policy.js +125 -0
- package/dist/services/bridge-rotation-policy.js.map +1 -0
- package/dist/services/bridge-turn-queue.d.ts +154 -0
- package/dist/services/bridge-turn-queue.d.ts.map +1 -0
- package/dist/services/bridge-turn-queue.js +316 -0
- package/dist/services/bridge-turn-queue.js.map +1 -0
- package/dist/services/chat-first-seen-store.d.ts +27 -0
- package/dist/services/chat-first-seen-store.d.ts.map +1 -0
- package/dist/services/chat-first-seen-store.js +114 -0
- package/dist/services/chat-first-seen-store.js.map +1 -0
- package/dist/services/claude-transcript.d.ts +268 -0
- package/dist/services/claude-transcript.d.ts.map +1 -0
- package/dist/services/claude-transcript.js +798 -0
- package/dist/services/claude-transcript.js.map +1 -0
- package/dist/services/coco-transcript.d.ts +35 -0
- package/dist/services/coco-transcript.d.ts.map +1 -0
- package/dist/services/coco-transcript.js +192 -0
- package/dist/services/coco-transcript.js.map +1 -0
- package/dist/services/codex-bridge-queue.d.ts +56 -0
- package/dist/services/codex-bridge-queue.d.ts.map +1 -0
- package/dist/services/codex-bridge-queue.js +150 -0
- package/dist/services/codex-bridge-queue.js.map +1 -0
- package/dist/services/codex-transcript.d.ts +84 -0
- package/dist/services/codex-transcript.d.ts.map +1 -0
- package/dist/services/codex-transcript.js +298 -0
- package/dist/services/codex-transcript.js.map +1 -0
- package/dist/services/group-creator.d.ts +23 -0
- package/dist/services/group-creator.d.ts.map +1 -0
- package/dist/services/group-creator.js +75 -0
- package/dist/services/group-creator.js.map +1 -0
- package/dist/services/groups-store.d.ts +98 -0
- package/dist/services/groups-store.d.ts.map +1 -0
- package/dist/services/groups-store.js +213 -0
- package/dist/services/groups-store.js.map +1 -0
- package/dist/services/oncall-store.d.ts +80 -8
- package/dist/services/oncall-store.d.ts.map +1 -1
- package/dist/services/oncall-store.js +265 -55
- package/dist/services/oncall-store.js.map +1 -1
- package/dist/services/project-scanner.d.ts +1 -2
- package/dist/services/project-scanner.d.ts.map +1 -1
- package/dist/services/project-scanner.js +118 -68
- package/dist/services/project-scanner.js.map +1 -1
- package/dist/services/schedule-store.d.ts +5 -0
- package/dist/services/schedule-store.d.ts.map +1 -1
- package/dist/services/schedule-store.js +77 -1
- package/dist/services/schedule-store.js.map +1 -1
- package/dist/services/session-store.d.ts +22 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +62 -4
- package/dist/services/session-store.js.map +1 -1
- package/dist/setup/bots-store.d.ts +3 -0
- package/dist/setup/bots-store.d.ts.map +1 -0
- package/dist/setup/bots-store.js +24 -0
- package/dist/setup/bots-store.js.map +1 -0
- package/dist/setup/detect-platform.d.ts +14 -0
- package/dist/setup/detect-platform.d.ts.map +1 -0
- package/dist/setup/detect-platform.js +139 -0
- package/dist/setup/detect-platform.js.map +1 -0
- package/dist/setup/ensure-fonts.d.ts +13 -0
- package/dist/setup/ensure-fonts.d.ts.map +1 -0
- package/dist/setup/ensure-fonts.js +225 -0
- package/dist/setup/ensure-fonts.js.map +1 -0
- package/dist/setup/ensure-tmux.d.ts +60 -0
- package/dist/setup/ensure-tmux.d.ts.map +1 -0
- package/dist/setup/ensure-tmux.js +236 -0
- package/dist/setup/ensure-tmux.js.map +1 -0
- package/dist/setup/index.d.ts +9 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +46 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/lark-scopes.json +301 -0
- package/dist/setup/register-app.d.ts +52 -0
- package/dist/setup/register-app.d.ts.map +1 -0
- package/dist/setup/register-app.js +91 -0
- package/dist/setup/register-app.js.map +1 -0
- package/dist/setup/verify-permissions.d.ts +115 -0
- package/dist/setup/verify-permissions.d.ts.map +1 -0
- package/dist/setup/verify-permissions.js +207 -0
- package/dist/setup/verify-permissions.js.map +1 -0
- package/dist/skills/definitions.d.ts +4 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +133 -19
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/installer.d.ts +3 -1
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +18 -3
- package/dist/skills/installer.js.map +1 -1
- package/dist/types.d.ts +44 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +6 -0
- package/dist/utils/bot-routing.d.ts.map +1 -0
- package/dist/utils/bot-routing.js +50 -0
- package/dist/utils/bot-routing.js.map +1 -0
- package/dist/utils/file-lock.d.ts +2 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +114 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/font-installer.js +1 -1
- package/dist/utils/font-installer.js.map +1 -1
- package/dist/utils/idle-detector.d.ts +6 -0
- package/dist/utils/idle-detector.d.ts.map +1 -1
- package/dist/utils/idle-detector.js +25 -4
- package/dist/utils/idle-detector.js.map +1 -1
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +60 -8
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/render-dimensions.d.ts +48 -0
- package/dist/utils/render-dimensions.d.ts.map +1 -0
- package/dist/utils/render-dimensions.js +55 -0
- package/dist/utils/render-dimensions.js.map +1 -0
- package/dist/utils/screen-analyzer.d.ts.map +1 -1
- package/dist/utils/screen-analyzer.js +24 -0
- package/dist/utils/screen-analyzer.js.map +1 -1
- package/dist/utils/screenshot-renderer.d.ts.map +1 -1
- package/dist/utils/screenshot-renderer.js +67 -23
- package/dist/utils/screenshot-renderer.js.map +1 -1
- package/dist/utils/terminal-renderer.d.ts +16 -0
- package/dist/utils/terminal-renderer.d.ts.map +1 -1
- package/dist/utils/terminal-renderer.js +40 -23
- package/dist/utils/terminal-renderer.js.map +1 -1
- package/dist/utils/transient-snapshot.d.ts +28 -0
- package/dist/utils/transient-snapshot.d.ts.map +1 -0
- package/dist/utils/transient-snapshot.js +96 -0
- package/dist/utils/transient-snapshot.js.map +1 -0
- package/dist/worker.js +2220 -83
- package/dist/worker.js.map +1 -1
- package/package.json +12 -5
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Small argv helpers used by botmux subcommands. Lives in a side-effect-free
|
|
3
|
+
* module so tests can import them without triggering cli.ts's top-level
|
|
4
|
+
* dispatcher switch.
|
|
5
|
+
*/
|
|
6
|
+
/** Pick the first positional (non-flag, non-flag-value) token from `args`.
|
|
7
|
+
* Skips both `--name` flags AND their following value tokens, so
|
|
8
|
+
* `cmd --session-id <uuid> om_xxx` correctly returns `om_xxx`. Flags that
|
|
9
|
+
* take values must be passed in `flagsWithValue` to avoid eating their args. */
|
|
10
|
+
export function firstPositional(args, flagsWithValue) {
|
|
11
|
+
for (let i = 0; i < args.length; i++) {
|
|
12
|
+
const a = args[i];
|
|
13
|
+
if (flagsWithValue.includes(a)) {
|
|
14
|
+
i++;
|
|
15
|
+
continue;
|
|
16
|
+
} // --flag value
|
|
17
|
+
if (flagsWithValue.some(f => a.startsWith(f + '=')))
|
|
18
|
+
continue; // --flag=value
|
|
19
|
+
if (a.startsWith('-'))
|
|
20
|
+
continue; // unknown flag / boolean
|
|
21
|
+
return a;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=arg-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arg-utils.js","sourceRoot":"","sources":["../../src/cli/arg-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;iFAGiF;AACjF,MAAM,UAAU,eAAe,CAAC,IAAc,EAAE,cAAwB;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC,CAAY,eAAe;QAC7E,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAAE,SAAS,CAAC,eAAe;QAC9E,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAA8B,yBAAyB;QACvF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bot ref resolver for `botmux create-group`. Pure function, no I/O — testable
|
|
3
|
+
* in isolation by passing in mock bot configs + bot-info entries.
|
|
4
|
+
*
|
|
5
|
+
* Resolution order for each ref:
|
|
6
|
+
* 1. Exact `larkAppId` match
|
|
7
|
+
* 2. `botName` from bots-info.json (case-insensitive)
|
|
8
|
+
* 3. `cliId` from bots.json (case-insensitive) — fallback when botName is
|
|
9
|
+
* unknown (bots-info.json gets populated by daemon at startup)
|
|
10
|
+
*
|
|
11
|
+
* Multiple matches by name → take the first in `botConfigs` order (= bots.json
|
|
12
|
+
* traversal order, the user's deployment intent). Same ref repeated → dedup,
|
|
13
|
+
* keeping first occurrence. Unresolvable ref → reported in `invalid` list.
|
|
14
|
+
*/
|
|
15
|
+
export interface BotConfigForResolve {
|
|
16
|
+
larkAppId: string;
|
|
17
|
+
cliId: string;
|
|
18
|
+
}
|
|
19
|
+
export interface BotInfoForResolve {
|
|
20
|
+
larkAppId: string;
|
|
21
|
+
botName: string | null;
|
|
22
|
+
}
|
|
23
|
+
export interface ResolvedBots {
|
|
24
|
+
/** Resolved larkAppIds in input order, deduped. First element is creator. */
|
|
25
|
+
larkAppIds: string[];
|
|
26
|
+
/** Refs that couldn't be matched to any bot. */
|
|
27
|
+
invalid: string[];
|
|
28
|
+
/** Warnings about ambiguous name → first match picked. */
|
|
29
|
+
ambiguousWarnings: string[];
|
|
30
|
+
}
|
|
31
|
+
export declare function resolveBotRefs(refs: string[], botConfigs: BotConfigForResolve[], botInfo: BotInfoForResolve[]): ResolvedBots;
|
|
32
|
+
//# sourceMappingURL=create-group-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-group-resolver.d.ts","sourceRoot":"","sources":["../../src/cli/create-group-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gDAAgD;IAChD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,EAAE,mBAAmB,EAAE,EACjC,OAAO,EAAE,iBAAiB,EAAE,GAC3B,YAAY,CA2Dd"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bot ref resolver for `botmux create-group`. Pure function, no I/O — testable
|
|
3
|
+
* in isolation by passing in mock bot configs + bot-info entries.
|
|
4
|
+
*
|
|
5
|
+
* Resolution order for each ref:
|
|
6
|
+
* 1. Exact `larkAppId` match
|
|
7
|
+
* 2. `botName` from bots-info.json (case-insensitive)
|
|
8
|
+
* 3. `cliId` from bots.json (case-insensitive) — fallback when botName is
|
|
9
|
+
* unknown (bots-info.json gets populated by daemon at startup)
|
|
10
|
+
*
|
|
11
|
+
* Multiple matches by name → take the first in `botConfigs` order (= bots.json
|
|
12
|
+
* traversal order, the user's deployment intent). Same ref repeated → dedup,
|
|
13
|
+
* keeping first occurrence. Unresolvable ref → reported in `invalid` list.
|
|
14
|
+
*/
|
|
15
|
+
export function resolveBotRefs(refs, botConfigs, botInfo) {
|
|
16
|
+
const out = [];
|
|
17
|
+
const seen = new Set();
|
|
18
|
+
const invalid = [];
|
|
19
|
+
const ambiguousWarnings = [];
|
|
20
|
+
for (const ref of refs) {
|
|
21
|
+
const trimmed = ref.trim();
|
|
22
|
+
if (!trimmed)
|
|
23
|
+
continue;
|
|
24
|
+
let matchedAppId;
|
|
25
|
+
let ambiguousLabel;
|
|
26
|
+
// 1. Exact larkAppId
|
|
27
|
+
const byAppId = botConfigs.find(c => c.larkAppId === trimmed);
|
|
28
|
+
if (byAppId) {
|
|
29
|
+
matchedAppId = byAppId.larkAppId;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// 2. botName (case-insensitive). bots-info.json is merge-written by
|
|
33
|
+
// multiple daemons and its order is NOT guaranteed to match bots.json.
|
|
34
|
+
// Spec says "重名取 bots.json 中第一个", so we walk botConfigs in
|
|
35
|
+
// deployment order and pick the first whose appId appears in the
|
|
36
|
+
// set of name-matched entries.
|
|
37
|
+
const lower = trimmed.toLowerCase();
|
|
38
|
+
const nameMatchSet = new Set(botInfo.filter(b => b.botName?.toLowerCase() === lower).map(b => b.larkAppId));
|
|
39
|
+
const byNameAll = botConfigs.filter(c => nameMatchSet.has(c.larkAppId));
|
|
40
|
+
if (byNameAll.length > 0) {
|
|
41
|
+
matchedAppId = byNameAll[0].larkAppId;
|
|
42
|
+
if (byNameAll.length > 1)
|
|
43
|
+
ambiguousLabel = `botName "${trimmed}"`;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// 3. cliId fallback — relies on botConfigs order which IS bots.json
|
|
47
|
+
// order (loadBotConfigs preserves file traversal order).
|
|
48
|
+
const byCliIdAll = botConfigs.filter(c => c.cliId.toLowerCase() === lower);
|
|
49
|
+
if (byCliIdAll.length > 0) {
|
|
50
|
+
matchedAppId = byCliIdAll[0].larkAppId;
|
|
51
|
+
if (byCliIdAll.length > 1)
|
|
52
|
+
ambiguousLabel = `cliId "${trimmed}"`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (!matchedAppId) {
|
|
57
|
+
invalid.push(trimmed);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (seen.has(matchedAppId))
|
|
61
|
+
continue;
|
|
62
|
+
seen.add(matchedAppId);
|
|
63
|
+
out.push(matchedAppId);
|
|
64
|
+
if (ambiguousLabel) {
|
|
65
|
+
ambiguousWarnings.push(`${ambiguousLabel} matches multiple bots in bots.json — picked first (${matchedAppId}).`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { larkAppIds: out, invalid, ambiguousWarnings };
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=create-group-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-group-resolver.js","sourceRoot":"","sources":["../../src/cli/create-group-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAqBH,MAAM,UAAU,cAAc,CAC5B,IAAc,EACd,UAAiC,EACjC,OAA4B;IAE5B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,IAAI,YAAgC,CAAC;QACrC,IAAI,cAAkC,CAAC;QAEvC,qBAAqB;QACrB,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;QAC9D,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,oEAAoE;YACpE,0EAA0E;YAC1E,8DAA8D;YAC9D,oEAAoE;YACpE,kCAAkC;YAClC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAC9E,CAAC;YACF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACxE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;oBAAE,cAAc,GAAG,YAAY,OAAO,GAAG,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,oEAAoE;gBACpE,4DAA4D;gBAC5D,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;gBAC3E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACvC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;wBAAE,cAAc,GAAG,UAAU,OAAO,GAAG,CAAC;gBACnE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvB,IAAI,cAAc,EAAE,CAAC;YACnB,iBAAiB,CAAC,IAAI,CACpB,GAAG,cAAc,uDAAuD,YAAY,IAAI,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure-function render pipeline for `botmux quoted`. Extracted so unit tests
|
|
3
|
+
* can exercise the wire-up (numberer sharing, extraResources merging) without
|
|
4
|
+
* spinning up the CLI dispatcher or hitting Lark APIs.
|
|
5
|
+
*/
|
|
6
|
+
import type { LarkMessage } from '../types.js';
|
|
7
|
+
import { createImgNumberer, type MessageResource } from '../im/lark/message-parser.js';
|
|
8
|
+
/** Subset of expandMergeForward used here — accepts the parsed message and a
|
|
9
|
+
* numberer, mutates parsed.content to the rendered tree, returns extra
|
|
10
|
+
* resources from sub-messages. Dependency-injected so tests can stub it. */
|
|
11
|
+
export type ExpandMergeForwardFn = (larkAppId: string, messageId: string, parsed: LarkMessage, numberer: ReturnType<typeof createImgNumberer>) => Promise<{
|
|
12
|
+
extraResources: MessageResource[];
|
|
13
|
+
}>;
|
|
14
|
+
export interface RenderedQuotedMessage extends LarkMessage {
|
|
15
|
+
resources: MessageResource[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Render a single quoted message into the JSON shape `botmux quoted` emits.
|
|
19
|
+
*
|
|
20
|
+
* Invariants this preserves:
|
|
21
|
+
* - Image and file counters in `[图片 N]` / `[文件 N]` placeholders align
|
|
22
|
+
* 1:1 with the indices of the matching-type entries in `resources`
|
|
23
|
+
* (independent counters, mirrors `formatAttachmentsHint`).
|
|
24
|
+
* - For merge_forward messages, sub-message images/files are appended to
|
|
25
|
+
* `resources` and rendered inside the forwarded-XML tree using the same
|
|
26
|
+
* numberer, so placeholders inside the XML keep aligning with the
|
|
27
|
+
* overall list.
|
|
28
|
+
*/
|
|
29
|
+
export declare function renderQuotedMessage(larkAppId: string, rawMessage: any, expandMergeForward: ExpandMergeForwardFn): Promise<RenderedQuotedMessage>;
|
|
30
|
+
//# sourceMappingURL=quoted-render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quoted-render.d.ts","sourceRoot":"","sources":["../../src/cli/quoted-render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAGL,iBAAiB,EACjB,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AAEtC;;6EAE6E;AAC7E,MAAM,MAAM,oBAAoB,GAAG,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAC3C,OAAO,CAAC;IAAE,cAAc,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAAC;AAEpD,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,GAAG,EACf,kBAAkB,EAAE,oBAAoB,GACvC,OAAO,CAAC,qBAAqB,CAAC,CAchC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { parseApiMessage, extractResources, createImgNumberer, } from '../im/lark/message-parser.js';
|
|
2
|
+
/**
|
|
3
|
+
* Render a single quoted message into the JSON shape `botmux quoted` emits.
|
|
4
|
+
*
|
|
5
|
+
* Invariants this preserves:
|
|
6
|
+
* - Image and file counters in `[图片 N]` / `[文件 N]` placeholders align
|
|
7
|
+
* 1:1 with the indices of the matching-type entries in `resources`
|
|
8
|
+
* (independent counters, mirrors `formatAttachmentsHint`).
|
|
9
|
+
* - For merge_forward messages, sub-message images/files are appended to
|
|
10
|
+
* `resources` and rendered inside the forwarded-XML tree using the same
|
|
11
|
+
* numberer, so placeholders inside the XML keep aligning with the
|
|
12
|
+
* overall list.
|
|
13
|
+
*/
|
|
14
|
+
export async function renderQuotedMessage(larkAppId, rawMessage, expandMergeForward) {
|
|
15
|
+
const numberer = createImgNumberer();
|
|
16
|
+
// Order: extractResources first so top-level keys get their numbers, then
|
|
17
|
+
// parseApiMessage reuses them when rendering text content. Calling them in
|
|
18
|
+
// the other order leaves resources unnumbered when extractTextContent runs
|
|
19
|
+
// first (it only consults the cache, doesn't create entries for resources
|
|
20
|
+
// that haven't been declared yet via extractResources).
|
|
21
|
+
const resources = extractResources(rawMessage.msg_type ?? '', rawMessage.body?.content ?? '', numberer);
|
|
22
|
+
const parsed = parseApiMessage(rawMessage, numberer);
|
|
23
|
+
if (parsed.msgType === 'merge_forward') {
|
|
24
|
+
const { extraResources } = await expandMergeForward(larkAppId, parsed.messageId, parsed, numberer);
|
|
25
|
+
resources.push(...extraResources);
|
|
26
|
+
}
|
|
27
|
+
return { ...parsed, resources };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=quoted-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quoted-render.js","sourceRoot":"","sources":["../../src/cli/quoted-render.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,8BAA8B,CAAC;AAgBtC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,UAAe,EACf,kBAAwC;IAExC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,wDAAwD;IACxD,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxG,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;QACvC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnG,SAAS,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC"}
|