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.
- 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 +35 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +114 -11
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +88 -6
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +398 -62
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"claude-transcript.js","sourceRoot":"","sources":["../../src/services/claude-transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface CocoBridgeEvent {
|
|
2
|
+
/** Synthetic uuid for dedup: `<absPath>:<byteOffset>` of the line start. */
|
|
3
|
+
uuid: string;
|
|
4
|
+
/** Wall-clock ms parsed from `created_at`, falling back to Date.now(). */
|
|
5
|
+
timestampMs: number;
|
|
6
|
+
/** 'user' starts a pending Lark turn; 'assistant_final' closes it. */
|
|
7
|
+
kind: 'user' | 'assistant_final';
|
|
8
|
+
/** Message text. */
|
|
9
|
+
text: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CocoDrainResult {
|
|
12
|
+
events: CocoBridgeEvent[];
|
|
13
|
+
newOffset: number;
|
|
14
|
+
pendingTail: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function cocoEventsPathForSession(sessionId: string): string;
|
|
17
|
+
/** Find which CoCo session a running CoCo process is bound to by scanning
|
|
18
|
+
* its open file handles. Unlike Codex (which keeps its rollout fd open
|
|
19
|
+
* continuously), CoCo opens-writes-closes `events.jsonl` per event, so we
|
|
20
|
+
* look for ANY open file under the session dir — `session.log` and
|
|
21
|
+
* `traces.jsonl` are held open for the session's lifetime and reveal the
|
|
22
|
+
* same `<sid>` segment.
|
|
23
|
+
*
|
|
24
|
+
* Linux: `/proc/<pid>/fd` 快路径,procfs 会把 unlinked-but-open 的 fd 标
|
|
25
|
+
* ` (deleted)`,跳过它们以免读到失效 inode(曾被 e2e 清理触发)。
|
|
26
|
+
* macOS / BSD: `lsof -p <pid> -Fn` 兜底。macOS 上 lsof 不给 deleted 标记,
|
|
27
|
+
* 但 worker 端在 `codexBridgeAttach` 之前还有 `existsSync(sessionDir)` 的
|
|
28
|
+
* 二次校验,所以这里不会让一个失效 sid 跑死循环。 */
|
|
29
|
+
export declare function findCocoSessionByPid(pid: number): {
|
|
30
|
+
sessionId: string;
|
|
31
|
+
eventsPath: string;
|
|
32
|
+
} | undefined;
|
|
33
|
+
/** Increment-read a CoCo events.jsonl from `fromOffset`. */
|
|
34
|
+
export declare function drainCocoEvents(path: string, fromOffset: number): CocoDrainResult;
|
|
35
|
+
//# sourceMappingURL=coco-transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coco-transcript.d.ts","sourceRoot":"","sources":["../../src/services/coco-transcript.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAC;IACjC,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;;;;;;;;iCAWiC;AACjC,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,GACV;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAmCvD;AAcD,4DAA4D;AAC5D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,CA6DjF"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reader for CoCo's per-session events JSONL.
|
|
3
|
+
*
|
|
4
|
+
* CoCo (Rust, 用 `dirs` crate 选 cache dir) 的会话路径按平台分叉:
|
|
5
|
+
* Linux: ~/.cache/coco/sessions/<sessionId>/events.jsonl
|
|
6
|
+
* macOS: ~/Library/Caches/coco/sessions/<sessionId>/events.jsonl
|
|
7
|
+
* Windows 这里不考虑(botmux 跟 tmux 强绑,跑不了 Windows)。
|
|
8
|
+
*
|
|
9
|
+
* The bridge fallback only needs the original user prompt and the final
|
|
10
|
+
* assistant message. Those appear as event objects containing
|
|
11
|
+
* `message.message.role === "user" | "assistant"`. CoCo also writes
|
|
12
|
+
* additional user-shaped system reminders; we intentionally keep only
|
|
13
|
+
* user messages whose `extra.is_original_user_input === true` so a Lark
|
|
14
|
+
* turn fingerprints against the user's prompt, not injected context.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, statSync, openSync, readSync, closeSync, readdirSync, readlinkSync } from 'node:fs';
|
|
17
|
+
import { execSync } from 'node:child_process';
|
|
18
|
+
import { homedir, platform } from 'node:os';
|
|
19
|
+
import { join } from 'node:path';
|
|
20
|
+
// macOS 上 Rust `dirs` crate 把 cache 放在 ~/Library/Caches/,跟 Linux 的
|
|
21
|
+
// ~/.cache 不同。这里硬编码两条平台路径,对不上的话 adopt 完全读不到
|
|
22
|
+
// events.jsonl(user-visible: Lark 收不到模型回复)。
|
|
23
|
+
const COCO_SESSIONS_ROOT = platform() === 'darwin'
|
|
24
|
+
? join(homedir(), 'Library', 'Caches', 'coco', 'sessions')
|
|
25
|
+
: join(homedir(), '.cache', 'coco', 'sessions');
|
|
26
|
+
const SESSION_UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
27
|
+
const IS_LINUX = platform() === 'linux';
|
|
28
|
+
// substring anchor —— 同时匹配 Linux 的 `/.cache/coco/sessions/` 和 macOS 的
|
|
29
|
+
// `/Library/Caches/coco/sessions/` 两种路径形态。anchor 后紧跟一段 UUID 才认
|
|
30
|
+
// 账(matchCocoSessionPath 里 SESSION_UUID_RE 校验),避免误命中。
|
|
31
|
+
const COCO_SESSIONS_ANCHOR = '/coco/sessions/';
|
|
32
|
+
export function cocoEventsPathForSession(sessionId) {
|
|
33
|
+
return join(COCO_SESSIONS_ROOT, sessionId, 'events.jsonl');
|
|
34
|
+
}
|
|
35
|
+
/** Find which CoCo session a running CoCo process is bound to by scanning
|
|
36
|
+
* its open file handles. Unlike Codex (which keeps its rollout fd open
|
|
37
|
+
* continuously), CoCo opens-writes-closes `events.jsonl` per event, so we
|
|
38
|
+
* look for ANY open file under the session dir — `session.log` and
|
|
39
|
+
* `traces.jsonl` are held open for the session's lifetime and reveal the
|
|
40
|
+
* same `<sid>` segment.
|
|
41
|
+
*
|
|
42
|
+
* Linux: `/proc/<pid>/fd` 快路径,procfs 会把 unlinked-but-open 的 fd 标
|
|
43
|
+
* ` (deleted)`,跳过它们以免读到失效 inode(曾被 e2e 清理触发)。
|
|
44
|
+
* macOS / BSD: `lsof -p <pid> -Fn` 兜底。macOS 上 lsof 不给 deleted 标记,
|
|
45
|
+
* 但 worker 端在 `codexBridgeAttach` 之前还有 `existsSync(sessionDir)` 的
|
|
46
|
+
* 二次校验,所以这里不会让一个失效 sid 跑死循环。 */
|
|
47
|
+
export function findCocoSessionByPid(pid) {
|
|
48
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
49
|
+
return undefined;
|
|
50
|
+
if (IS_LINUX) {
|
|
51
|
+
const fdDir = `/proc/${pid}/fd`;
|
|
52
|
+
if (existsSync(fdDir)) {
|
|
53
|
+
let entries;
|
|
54
|
+
try {
|
|
55
|
+
entries = readdirSync(fdDir);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
for (const fd of entries) {
|
|
61
|
+
let target;
|
|
62
|
+
try {
|
|
63
|
+
target = readlinkSync(join(fdDir, fd));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
// procfs 标 deleted 的 fd 跳过 —— 后面 lsof 路径上没这个保护,因
|
|
69
|
+
// 为 macOS lsof 不给标记;worker 端 sessionDir existsSync 兜底。
|
|
70
|
+
if (target.endsWith(' (deleted)'))
|
|
71
|
+
continue;
|
|
72
|
+
const hit = matchCocoSessionPath(target);
|
|
73
|
+
if (hit)
|
|
74
|
+
return hit;
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
let out;
|
|
80
|
+
try {
|
|
81
|
+
out = execSync(`lsof -p ${pid} -Fn`, {
|
|
82
|
+
encoding: 'utf-8',
|
|
83
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
for (const line of out.split('\n')) {
|
|
90
|
+
if (!line.startsWith('n/'))
|
|
91
|
+
continue;
|
|
92
|
+
const target = line.slice(1);
|
|
93
|
+
const hit = matchCocoSessionPath(target);
|
|
94
|
+
if (hit)
|
|
95
|
+
return hit;
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
function matchCocoSessionPath(target) {
|
|
100
|
+
const idx = target.indexOf(COCO_SESSIONS_ANCHOR);
|
|
101
|
+
if (idx < 0)
|
|
102
|
+
return undefined;
|
|
103
|
+
const sid = target.slice(idx + COCO_SESSIONS_ANCHOR.length).split('/')[0];
|
|
104
|
+
if (!sid || !SESSION_UUID_RE.test(sid))
|
|
105
|
+
return undefined;
|
|
106
|
+
return { sessionId: sid, eventsPath: cocoEventsPathForSession(sid) };
|
|
107
|
+
}
|
|
108
|
+
function messageText(content) {
|
|
109
|
+
return typeof content === 'string' ? content : '';
|
|
110
|
+
}
|
|
111
|
+
/** Increment-read a CoCo events.jsonl from `fromOffset`. */
|
|
112
|
+
export function drainCocoEvents(path, fromOffset) {
|
|
113
|
+
if (!existsSync(path))
|
|
114
|
+
return { events: [], newOffset: 0, pendingTail: '' };
|
|
115
|
+
let size;
|
|
116
|
+
try {
|
|
117
|
+
size = statSync(path).size;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return { events: [], newOffset: fromOffset, pendingTail: '' };
|
|
121
|
+
}
|
|
122
|
+
let start = fromOffset;
|
|
123
|
+
if (size < start)
|
|
124
|
+
start = 0;
|
|
125
|
+
if (size === start)
|
|
126
|
+
return { events: [], newOffset: start, pendingTail: '' };
|
|
127
|
+
const len = size - start;
|
|
128
|
+
const buf = Buffer.alloc(len);
|
|
129
|
+
const fd = openSync(path, 'r');
|
|
130
|
+
try {
|
|
131
|
+
readSync(fd, buf, 0, len, start);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
closeSync(fd);
|
|
135
|
+
}
|
|
136
|
+
const text = buf.toString('utf8');
|
|
137
|
+
const lastNl = text.lastIndexOf('\n');
|
|
138
|
+
const completeText = lastNl >= 0 ? text.slice(0, lastNl + 1) : '';
|
|
139
|
+
const pendingTail = lastNl >= 0 ? text.slice(lastNl + 1) : text;
|
|
140
|
+
const newOffset = start + Buffer.byteLength(completeText, 'utf8');
|
|
141
|
+
const events = [];
|
|
142
|
+
let cursor = start;
|
|
143
|
+
for (const line of completeText.split('\n')) {
|
|
144
|
+
if (line.length === 0) {
|
|
145
|
+
cursor += 1;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const lineStart = cursor;
|
|
149
|
+
cursor += Buffer.byteLength(line, 'utf8') + 1;
|
|
150
|
+
let obj;
|
|
151
|
+
try {
|
|
152
|
+
obj = JSON.parse(line);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const msg = obj?.message?.message;
|
|
158
|
+
if (!msg || typeof msg !== 'object')
|
|
159
|
+
continue;
|
|
160
|
+
const ts = typeof obj.created_at === 'string' ? Date.parse(obj.created_at) : NaN;
|
|
161
|
+
const timestampMs = Number.isFinite(ts) ? ts : Date.now();
|
|
162
|
+
if (msg.role === 'user') {
|
|
163
|
+
if (msg.extra?.is_original_user_input !== true)
|
|
164
|
+
continue;
|
|
165
|
+
const content = messageText(msg.content);
|
|
166
|
+
if (!content)
|
|
167
|
+
continue;
|
|
168
|
+
events.push({ uuid: `${path}:${lineStart}`, timestampMs, kind: 'user', text: content });
|
|
169
|
+
}
|
|
170
|
+
else if (msg.role === 'assistant') {
|
|
171
|
+
// CoCo emits two assistant shapes per turn:
|
|
172
|
+
// - finish_reason:'tool_calls' — mid-turn "thinking out loud" before
|
|
173
|
+
// a tool call. Sometimes carries visible text (e.g. "Let me run
|
|
174
|
+
// the tests..."). Treating these as final would close the
|
|
175
|
+
// pending Lark turn early with mid-turn narration; the actual
|
|
176
|
+
// `stop` message that follows would then drop on the floor
|
|
177
|
+
// because the queue's collecting slot is already cleared.
|
|
178
|
+
// - finish_reason:'stop' — the model's terminal answer. This is
|
|
179
|
+
// what the bridge fallback should forward.
|
|
180
|
+
// Only the latter becomes assistant_final; everything else is skipped.
|
|
181
|
+
const finishReason = msg.response_meta?.finish_reason;
|
|
182
|
+
if (finishReason !== 'stop')
|
|
183
|
+
continue;
|
|
184
|
+
const content = messageText(msg.content);
|
|
185
|
+
if (!content)
|
|
186
|
+
continue;
|
|
187
|
+
events.push({ uuid: `${path}:${lineStart}`, timestampMs, kind: 'assistant_final', text: content });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return { events, newOffset, pendingTail };
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=coco-transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coco-transcript.js","sourceRoot":"","sources":["../../src/services/coco-transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { CodexBridgeEvent } from './codex-transcript.js';
|
|
2
|
+
export interface CodexPendingTurn {
|
|
3
|
+
turnId: string;
|
|
4
|
+
started: boolean;
|
|
5
|
+
contentFingerprint?: string;
|
|
6
|
+
/** Wall-clock millis when mark() was called. The emit gate uses this as
|
|
7
|
+
* the lower bound of the "did `botmux send` happen for this turn?"
|
|
8
|
+
* window. Optional only for legacy / test-injected turns. */
|
|
9
|
+
markTimeMs?: number;
|
|
10
|
+
/** Set once an assistant_final event closes this turn. */
|
|
11
|
+
finalText?: string;
|
|
12
|
+
/** Set when this turn was synthesised from a user_message that didn't
|
|
13
|
+
* match any pending Lark fingerprint. Adopt-only. The worker emit path
|
|
14
|
+
* formats these with both userText and finalText under a "终端本地对话"
|
|
15
|
+
* header — same rationale as Claude's BridgeTurnQueue local turns. */
|
|
16
|
+
isLocal?: boolean;
|
|
17
|
+
/** For local turns: the user's typed text, surfaced alongside the
|
|
18
|
+
* assistant reply so the Lark thread sees both sides of the exchange. */
|
|
19
|
+
userText?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class CodexBridgeQueue {
|
|
22
|
+
private seen;
|
|
23
|
+
private queue;
|
|
24
|
+
private collecting;
|
|
25
|
+
private localTurnsEnabled;
|
|
26
|
+
/** Lower bound (ms) for synthesising local turns — protects against a
|
|
27
|
+
* fresh-empty attach replaying historical iTerm conversation as
|
|
28
|
+
* "live" local input. Typically set to the moment adopt was wired up. */
|
|
29
|
+
private localLowerBoundMs;
|
|
30
|
+
/** Register events as historical without producing pending-turn side
|
|
31
|
+
* effects. Used at attach time when resume mode wants to swallow prior
|
|
32
|
+
* conversation as already-processed. */
|
|
33
|
+
absorb(events: CodexBridgeEvent[]): void;
|
|
34
|
+
/** Toggle adopt-mode local-turn synthesis. `lowerBoundMs` (typically
|
|
35
|
+
* Date.now() at adopt-time) protects against a fresh-empty attach
|
|
36
|
+
* feeding historical user_messages back as "live" local turns. */
|
|
37
|
+
setLocalTurns(enabled: boolean, lowerBoundMs?: number): void;
|
|
38
|
+
/** Push a pending Lark turn anchored to the message text. The fingerprint
|
|
39
|
+
* derived from `message` is what the upcoming `user` event must contain
|
|
40
|
+
* to start this turn. Pre-path-known marking is allowed: the worker can
|
|
41
|
+
* call this before late-attach has located the rollout file, and the
|
|
42
|
+
* ingest call after attach will still match correctly. */
|
|
43
|
+
mark(turnId: string, message: string, markTimeMs?: number): void;
|
|
44
|
+
/** Drop all pending turns. Used when the worker decides it can't reliably
|
|
45
|
+
* attribute future events (e.g. a teardown). */
|
|
46
|
+
clearPending(): CodexPendingTurn[];
|
|
47
|
+
/** Process newly-appended events. Idempotent on uuid: events with seen
|
|
48
|
+
* uuids are skipped, so callers can replay safely. */
|
|
49
|
+
ingest(events: CodexBridgeEvent[]): void;
|
|
50
|
+
/** Pop FIFO any leading turn that is started AND has finalText. */
|
|
51
|
+
drainEmittable(): CodexPendingTurn[];
|
|
52
|
+
size(): number;
|
|
53
|
+
/** Test helper — peek the queue without mutating. */
|
|
54
|
+
peek(): readonly CodexPendingTurn[];
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=codex-bridge-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-bridge-queue.d.ts","sourceRoot":"","sources":["../../src/services/codex-bridge-queue.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;kEAE8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;2EAGuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;8EAC0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,iBAAiB,CAAS;IAClC;;8EAE0E;IAC1E,OAAO,CAAC,iBAAiB,CAAK;IAE9B;;6CAEyC;IACzC,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAIxC;;uEAEmE;IACnE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,GAAE,MAAmB,GAAG,IAAI;IAKxE;;;;+DAI2D;IAC3D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAmB,GAAG,IAAI;IAS5E;qDACiD;IACjD,YAAY,IAAI,gBAAgB,EAAE;IAMlC;2DACuD;IACvD,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI;IA8CxC,mEAAmE;IACnE,cAAc,IAAI,gBAAgB,EAAE;IAYpC,IAAI,IAAI,MAAM;IAId,qDAAqD;IACrD,IAAI,IAAI,SAAS,gBAAgB,EAAE;CAGpC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex bridge fallback's pending-turn queue.
|
|
3
|
+
*
|
|
4
|
+
* Two operating modes via `setLocalTurns()`:
|
|
5
|
+
*
|
|
6
|
+
* - **non-adopt** (default): worker owns the PTY and the only legitimate
|
|
7
|
+
* user input source is Lark. user_message events that don't match a
|
|
8
|
+
* pending fingerprint are history (resume / late-attach) and get
|
|
9
|
+
* silently dropped. Synthesising local turns here would replay
|
|
10
|
+
* yesterday's prompts to the Lark thread.
|
|
11
|
+
*
|
|
12
|
+
* - **adopt**: Codex is the user's externally-running process; the user
|
|
13
|
+
* can type directly into the iTerm pane (or via Lark). Both should
|
|
14
|
+
* reach the Lark thread. user_message events that don't match a
|
|
15
|
+
* pending Lark fingerprint AND happen after `localLowerBoundMs - 5s`
|
|
16
|
+
* synthesise a local turn — formatted by the worker as
|
|
17
|
+
* "🖥️ 终端本地对话".
|
|
18
|
+
*
|
|
19
|
+
* Attribution rule:
|
|
20
|
+
* - mark() — push a pending turn anchored to Lark fingerprint.
|
|
21
|
+
* - ingest(events) —
|
|
22
|
+
* * 'user' event whose text matches the head pending turn's
|
|
23
|
+
* fingerprint → that turn becomes 'started' (collecting).
|
|
24
|
+
* * 'user' event with no match: dropped, OR (adopt-only) synthesised
|
|
25
|
+
* as a started local turn ahead of any unstarted Lark turn so
|
|
26
|
+
* emit ordering reflects when the event landed.
|
|
27
|
+
* * 'assistant_final' event → the currently-collecting turn closes
|
|
28
|
+
* with finalText set; eligible for emit on the next drain.
|
|
29
|
+
* - drainEmittable() — pop FIFO any leading turn that is started AND
|
|
30
|
+
* has finalText.
|
|
31
|
+
*/
|
|
32
|
+
import { makeFingerprint, normaliseForFingerprint } from './bridge-turn-queue.js';
|
|
33
|
+
export class CodexBridgeQueue {
|
|
34
|
+
seen = new Set();
|
|
35
|
+
queue = [];
|
|
36
|
+
collecting = null;
|
|
37
|
+
localTurnsEnabled = false;
|
|
38
|
+
/** Lower bound (ms) for synthesising local turns — protects against a
|
|
39
|
+
* fresh-empty attach replaying historical iTerm conversation as
|
|
40
|
+
* "live" local input. Typically set to the moment adopt was wired up. */
|
|
41
|
+
localLowerBoundMs = 0;
|
|
42
|
+
/** Register events as historical without producing pending-turn side
|
|
43
|
+
* effects. Used at attach time when resume mode wants to swallow prior
|
|
44
|
+
* conversation as already-processed. */
|
|
45
|
+
absorb(events) {
|
|
46
|
+
for (const ev of events)
|
|
47
|
+
this.seen.add(ev.uuid);
|
|
48
|
+
}
|
|
49
|
+
/** Toggle adopt-mode local-turn synthesis. `lowerBoundMs` (typically
|
|
50
|
+
* Date.now() at adopt-time) protects against a fresh-empty attach
|
|
51
|
+
* feeding historical user_messages back as "live" local turns. */
|
|
52
|
+
setLocalTurns(enabled, lowerBoundMs = Date.now()) {
|
|
53
|
+
this.localTurnsEnabled = enabled;
|
|
54
|
+
this.localLowerBoundMs = lowerBoundMs;
|
|
55
|
+
}
|
|
56
|
+
/** Push a pending Lark turn anchored to the message text. The fingerprint
|
|
57
|
+
* derived from `message` is what the upcoming `user` event must contain
|
|
58
|
+
* to start this turn. Pre-path-known marking is allowed: the worker can
|
|
59
|
+
* call this before late-attach has located the rollout file, and the
|
|
60
|
+
* ingest call after attach will still match correctly. */
|
|
61
|
+
mark(turnId, message, markTimeMs = Date.now()) {
|
|
62
|
+
this.queue.push({
|
|
63
|
+
turnId,
|
|
64
|
+
started: false,
|
|
65
|
+
contentFingerprint: makeFingerprint(message),
|
|
66
|
+
markTimeMs,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/** Drop all pending turns. Used when the worker decides it can't reliably
|
|
70
|
+
* attribute future events (e.g. a teardown). */
|
|
71
|
+
clearPending() {
|
|
72
|
+
const dropped = this.queue.splice(0);
|
|
73
|
+
if (this.collecting && dropped.includes(this.collecting))
|
|
74
|
+
this.collecting = null;
|
|
75
|
+
return dropped;
|
|
76
|
+
}
|
|
77
|
+
/** Process newly-appended events. Idempotent on uuid: events with seen
|
|
78
|
+
* uuids are skipped, so callers can replay safely. */
|
|
79
|
+
ingest(events) {
|
|
80
|
+
for (const ev of events) {
|
|
81
|
+
if (!ev.uuid || this.seen.has(ev.uuid))
|
|
82
|
+
continue;
|
|
83
|
+
this.seen.add(ev.uuid);
|
|
84
|
+
if (ev.kind === 'user') {
|
|
85
|
+
const next = this.queue.find(t => !t.started);
|
|
86
|
+
let consumedNext = false;
|
|
87
|
+
if (next) {
|
|
88
|
+
const tooOld = next.markTimeMs !== undefined && ev.timestampMs < next.markTimeMs - 5_000;
|
|
89
|
+
let fingerprintOk = true;
|
|
90
|
+
if (next.contentFingerprint) {
|
|
91
|
+
const userText = normaliseForFingerprint(ev.text);
|
|
92
|
+
fingerprintOk = userText.includes(next.contentFingerprint);
|
|
93
|
+
}
|
|
94
|
+
if (!tooOld && fingerprintOk) {
|
|
95
|
+
next.started = true;
|
|
96
|
+
this.collecting = next;
|
|
97
|
+
consumedNext = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (!consumedNext && this.localTurnsEnabled && ev.timestampMs >= this.localLowerBoundMs - 5_000) {
|
|
101
|
+
// Adopt mode local input: user typed in iTerm, no Lark
|
|
102
|
+
// fingerprint match. Synthesise a local turn so the assistant
|
|
103
|
+
// reply still reaches Lark. Insert AHEAD of any unstarted Lark
|
|
104
|
+
// turn so emit order matches when the event hit the transcript.
|
|
105
|
+
const localTurn = {
|
|
106
|
+
turnId: `codex-local-${ev.uuid}`,
|
|
107
|
+
started: true,
|
|
108
|
+
isLocal: true,
|
|
109
|
+
userText: ev.text,
|
|
110
|
+
markTimeMs: ev.timestampMs,
|
|
111
|
+
};
|
|
112
|
+
const insertAt = this.queue.findIndex(t => !t.started);
|
|
113
|
+
if (insertAt === -1)
|
|
114
|
+
this.queue.push(localTurn);
|
|
115
|
+
else
|
|
116
|
+
this.queue.splice(insertAt, 0, localTurn);
|
|
117
|
+
this.collecting = localTurn;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (ev.kind === 'assistant_final') {
|
|
121
|
+
if (this.collecting) {
|
|
122
|
+
this.collecting.finalText = ev.text;
|
|
123
|
+
this.collecting = null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Pop FIFO any leading turn that is started AND has finalText. */
|
|
129
|
+
drainEmittable() {
|
|
130
|
+
const out = [];
|
|
131
|
+
while (this.queue.length > 0) {
|
|
132
|
+
const head = this.queue[0];
|
|
133
|
+
if (!head.started || !head.finalText)
|
|
134
|
+
break;
|
|
135
|
+
this.queue.shift();
|
|
136
|
+
if (this.collecting === head)
|
|
137
|
+
this.collecting = null;
|
|
138
|
+
out.push(head);
|
|
139
|
+
}
|
|
140
|
+
return out;
|
|
141
|
+
}
|
|
142
|
+
size() {
|
|
143
|
+
return this.queue.length;
|
|
144
|
+
}
|
|
145
|
+
/** Test helper — peek the queue without mutating. */
|
|
146
|
+
peek() {
|
|
147
|
+
return this.queue;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=codex-bridge-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-bridge-queue.js","sourceRoot":"","sources":["../../src/services/codex-bridge-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** Extract the cliSessionId encoded in a rollout filename. Codex's session
|
|
2
|
+
* id is UUID-shaped (8-4-4-4-12 hex), which lets us anchor the regex on
|
|
3
|
+
* the UUID alone — the `<ts>` segment between "rollout-" and the sid
|
|
4
|
+
* contains its own dashes that would otherwise let a greedy match swallow
|
|
5
|
+
* parts of the sid. Returns undefined for paths that don't match. */
|
|
6
|
+
export declare function codexSessionIdFromRolloutPath(path: string): string | undefined;
|
|
7
|
+
/** Find the rollout file an externally-running Codex process has open. The
|
|
8
|
+
* Codex process keeps fd open on its current rollout for the entire
|
|
9
|
+
* lifetime of the session, so this is the authoritative way to bind a
|
|
10
|
+
* Codex pid to its sessionId — far more reliable than scanning
|
|
11
|
+
* `~/.codex/sessions` by mtime (which would race with sibling Codex panes
|
|
12
|
+
* in the same project).
|
|
13
|
+
*
|
|
14
|
+
* Linux: `/proc/<pid>/fd/*` fast path.
|
|
15
|
+
* macOS / BSD: `lsof -p <pid> -Fn` 兜底(同 session-discovery 里的 readCwd)。
|
|
16
|
+
* 两种平台都用 `codexSessionIdFromRolloutPath` 提取 sid。 */
|
|
17
|
+
export declare function findCodexRolloutByPid(pid: number): {
|
|
18
|
+
path: string;
|
|
19
|
+
cliSessionId: string;
|
|
20
|
+
} | undefined;
|
|
21
|
+
export interface CodexBridgeEvent {
|
|
22
|
+
/** Synthetic uuid for dedup: `<absPath>:<byteOffset>` of the line start.
|
|
23
|
+
* Stable across re-drains because rollout files are append-only. */
|
|
24
|
+
uuid: string;
|
|
25
|
+
/** Wall-clock ms parsed from the event's `timestamp` field. Falls back
|
|
26
|
+
* to Date.now() if missing/unparseable so the gate's window math still
|
|
27
|
+
* has something to compare against. */
|
|
28
|
+
timestampMs: number;
|
|
29
|
+
/** Discriminator for the queue layer:
|
|
30
|
+
* - 'user' starts a pending Lark turn (fingerprint-matched)
|
|
31
|
+
* - 'assistant_final' closes the currently-collecting turn */
|
|
32
|
+
kind: 'user' | 'assistant_final';
|
|
33
|
+
/** Concatenated text from the message's content blocks (input_text for
|
|
34
|
+
* user, output_text for assistant). */
|
|
35
|
+
text: string;
|
|
36
|
+
}
|
|
37
|
+
/** Extract the last completed user/assistant turn from a Codex / CoCo bridge
|
|
38
|
+
* event sequence. Used by /adopt to surface the previous turn as a
|
|
39
|
+
* preamble card in the Lark thread — gives the user context to continue
|
|
40
|
+
* from. CoCo events share the same shape (uuid/timestampMs/kind/text),
|
|
41
|
+
* so this works for both bridges.
|
|
42
|
+
*
|
|
43
|
+
* Algorithm: scan tail-first for the most recent `assistant_final`, then
|
|
44
|
+
* pair it with the most recent `user` event that precedes it. Returns
|
|
45
|
+
* undefined when either side is missing — typically a fresh session whose
|
|
46
|
+
* user typed something but the model hasn't replied yet. */
|
|
47
|
+
export declare function extractLastCodexTurn(events: readonly {
|
|
48
|
+
kind: 'user' | 'assistant_final';
|
|
49
|
+
text: string;
|
|
50
|
+
}[]): {
|
|
51
|
+
userText: string;
|
|
52
|
+
assistantText: string;
|
|
53
|
+
} | undefined;
|
|
54
|
+
/** Split a drained event list into "history" (older than the live cutoff)
|
|
55
|
+
* and "live" (cutoff or newer). The Codex adopt bridge uses this when
|
|
56
|
+
* it discovers the rollout file LATE (after the user already typed in
|
|
57
|
+
* iTerm or sent a Lark message): drain-from-0 produces a mix of pre-
|
|
58
|
+
* adopt history and post-adopt live events. The worker then `absorb()`s
|
|
59
|
+
* the history (so it isn't replayed) and `ingest()`s the live partition
|
|
60
|
+
* (so the local-turn synthesis / fingerprint match still works). Pure
|
|
61
|
+
* function — no I/O, easy to test against fixed timestamps. */
|
|
62
|
+
export declare function splitCodexEventsByCutoff(events: readonly CodexBridgeEvent[], liveSinceMs: number): {
|
|
63
|
+
history: CodexBridgeEvent[];
|
|
64
|
+
live: CodexBridgeEvent[];
|
|
65
|
+
};
|
|
66
|
+
export interface CodexDrainResult {
|
|
67
|
+
events: CodexBridgeEvent[];
|
|
68
|
+
/** Byte offset of the last fully-parsed line + its trailing \n. The next
|
|
69
|
+
* drain should pass this back as fromOffset. */
|
|
70
|
+
newOffset: number;
|
|
71
|
+
/** A line that was written without its terminating \n yet. Currently
|
|
72
|
+
* informational — only complete lines produce events. */
|
|
73
|
+
pendingTail: string;
|
|
74
|
+
}
|
|
75
|
+
/** Locate the rollout file for a given Codex sessionId. Codex names files
|
|
76
|
+
* `rollout-<ts>-<sid>.jsonl`, so a suffix match is unambiguous. The
|
|
77
|
+
* directory tree is small (year/month/day) — a one-shot recursive scan
|
|
78
|
+
* is cheap enough that we don't bother caching. */
|
|
79
|
+
export declare function findCodexRolloutBySessionId(cliSessionId: string): string | undefined;
|
|
80
|
+
/** Increment-read the rollout from `fromOffset`. Mirrors the byte-offset
|
|
81
|
+
* contract of claude-transcript.drainTranscript so callers can swap them
|
|
82
|
+
* out and reuse the existing fs.watch / poll wakeup machinery. */
|
|
83
|
+
export declare function drainCodexRollout(path: string, fromOffset: number): CodexDrainResult;
|
|
84
|
+
//# sourceMappingURL=codex-transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-transcript.d.ts","sourceRoot":"","sources":["../../src/services/codex-transcript.ts"],"names":[],"mappings":"AAkCA;;;;sEAIsE;AACtE,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED;;;;;;;;;qDASqD;AACrD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAmCrG;AAUD,MAAM,WAAW,gBAAgB;IAC/B;yEACqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb;;4CAEwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB;;oEAEgE;IAChE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAC;IACjC;4CACwC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;6DAS6D;AAC7D,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACpE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAezD;AAED;;;;;;;gEAOgE;AAChE,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,WAAW,EAAE,MAAM,GAClB;IAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAAC,IAAI,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAQ3D;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B;qDACiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB;8DAC0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;oDAGoD;AACpD,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBpF;AAkBD;;mEAEmE;AACnE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAqDpF"}
|