tailii-host 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -14
- package/dist/{broker.d.ts → approval/broker.d.ts} +9 -5
- package/dist/{broker.js → approval/broker.js} +42 -6
- package/dist/approval/broker.js.map +1 -0
- package/dist/{hook.d.ts → approval/hook.d.ts} +48 -7
- package/dist/{hook.js → approval/hook.js} +359 -50
- package/dist/approval/hook.js.map +1 -0
- package/dist/backend/herdr.d.ts +226 -0
- package/dist/backend/herdr.js +749 -0
- package/dist/backend/herdr.js.map +1 -0
- package/dist/backend/sessionBackend.d.ts +81 -0
- package/dist/backend/sessionBackend.js +114 -0
- package/dist/backend/sessionBackend.js.map +1 -0
- package/dist/backend/tmux.d.ts +125 -0
- package/dist/backend/tmux.js +392 -0
- package/dist/backend/tmux.js.map +1 -0
- package/dist/{chatTailController.d.ts → chat/chatTailController.d.ts} +29 -6
- package/dist/{chatTailController.js → chat/chatTailController.js} +94 -18
- package/dist/chat/chatTailController.js.map +1 -0
- package/dist/{imageService.d.ts → chat/imageService.d.ts} +12 -1
- package/dist/{imageService.js → chat/imageService.js} +39 -11
- package/dist/chat/imageService.js.map +1 -0
- package/dist/chat/remoteQuestionMonitor.d.ts +27 -0
- package/dist/chat/remoteQuestionMonitor.js +128 -0
- package/dist/chat/remoteQuestionMonitor.js.map +1 -0
- package/dist/chat/subagentTailer.d.ts +30 -0
- package/dist/chat/subagentTailer.js +704 -0
- package/dist/chat/subagentTailer.js.map +1 -0
- package/dist/chat/subagentTranscript.d.ts +20 -0
- package/dist/chat/subagentTranscript.js +273 -0
- package/dist/chat/subagentTranscript.js.map +1 -0
- package/dist/{transcriptTailer.d.ts → chat/transcriptTailer.d.ts} +12 -1
- package/dist/{transcriptTailer.js → chat/transcriptTailer.js} +183 -10
- package/dist/chat/transcriptTailer.js.map +1 -0
- package/dist/cli.js +15 -10
- package/dist/cli.js.map +1 -1
- package/dist/codex/codexAccountUsage.d.ts +22 -0
- package/dist/codex/codexAccountUsage.js +128 -0
- package/dist/codex/codexAccountUsage.js.map +1 -0
- package/dist/codex/codexAppServer.d.ts +166 -0
- package/dist/codex/codexAppServer.js +1297 -0
- package/dist/codex/codexAppServer.js.map +1 -0
- package/dist/codex/codexNativeTurnController.d.ts +153 -0
- package/dist/codex/codexNativeTurnController.js +673 -0
- package/dist/codex/codexNativeTurnController.js.map +1 -0
- package/dist/codex/codexRolloutTailer.d.ts +100 -0
- package/dist/codex/codexRolloutTailer.js +568 -0
- package/dist/codex/codexRolloutTailer.js.map +1 -0
- package/dist/{codexSessionStore.d.ts → codex/codexSessionStore.d.ts} +10 -2
- package/dist/{codexSessionStore.js → codex/codexSessionStore.js} +184 -15
- package/dist/codex/codexSessionStore.js.map +1 -0
- package/dist/codex/codexSubagentTracker.d.ts +21 -0
- package/dist/codex/codexSubagentTracker.js +281 -0
- package/dist/codex/codexSubagentTracker.js.map +1 -0
- package/dist/codex/codexToolActivity.d.ts +69 -0
- package/dist/codex/codexToolActivity.js +425 -0
- package/dist/codex/codexToolActivity.js.map +1 -0
- package/dist/{codexUsage.d.ts → codex/codexUsage.d.ts} +1 -1
- package/dist/{codexUsage.js → codex/codexUsage.js} +19 -26
- package/dist/codex/codexUsage.js.map +1 -0
- package/dist/commands/doctor.d.ts +65 -0
- package/dist/commands/doctor.js +425 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/{hookSettings.d.ts → commands/hookSettings.d.ts} +14 -1
- package/dist/{hookSettings.js → commands/hookSettings.js} +96 -12
- package/dist/commands/hookSettings.js.map +1 -0
- package/dist/{kick.js → commands/kick.js} +16 -1
- package/dist/commands/kick.js.map +1 -0
- package/dist/{launch.d.ts → commands/launch.d.ts} +67 -5
- package/dist/commands/launch.js +716 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/legacyHomeMigration.js.map +1 -0
- package/dist/{pairingCode.d.ts → commands/pairingCode.d.ts} +29 -2
- package/dist/{pairingCode.js → commands/pairingCode.js} +120 -11
- package/dist/commands/pairingCode.js.map +1 -0
- package/dist/{pushTokenCommand.d.ts → commands/pushTokenCommand.d.ts} +1 -1
- package/dist/{pushTokenCommand.js → commands/pushTokenCommand.js} +2 -2
- package/dist/commands/pushTokenCommand.js.map +1 -0
- package/dist/{setup.d.ts → commands/setup.d.ts} +17 -6
- package/dist/{setup.js → commands/setup.js} +133 -75
- package/dist/commands/setup.js.map +1 -0
- package/dist/engine/context.d.ts +145 -0
- package/dist/engine/context.js +184 -0
- package/dist/engine/context.js.map +1 -0
- package/dist/engine/engine.d.ts +121 -0
- package/dist/engine/engine.js +799 -0
- package/dist/engine/engine.js.map +1 -0
- package/dist/engine/handlers/accountUsage.d.ts +53 -0
- package/dist/engine/handlers/accountUsage.js +203 -0
- package/dist/engine/handlers/accountUsage.js.map +1 -0
- package/dist/engine/handlers/claudeModels.d.ts +2 -0
- package/dist/engine/handlers/claudeModels.js +23 -0
- package/dist/engine/handlers/claudeModels.js.map +1 -0
- package/dist/engine/handlers/codex.d.ts +2 -0
- package/dist/engine/handlers/codex.js +97 -0
- package/dist/engine/handlers/codex.js.map +1 -0
- package/dist/engine/handlers/conversation.d.ts +2 -0
- package/dist/engine/handlers/conversation.js +259 -0
- package/dist/engine/handlers/conversation.js.map +1 -0
- package/dist/engine/handlers/core.d.ts +2 -0
- package/dist/engine/handlers/core.js +66 -0
- package/dist/engine/handlers/core.js.map +1 -0
- package/dist/engine/handlers/git.d.ts +2 -0
- package/dist/engine/handlers/git.js +127 -0
- package/dist/engine/handlers/git.js.map +1 -0
- package/dist/engine/handlers/index.d.ts +2 -0
- package/dist/engine/handlers/index.js +32 -0
- package/dist/engine/handlers/index.js.map +1 -0
- package/dist/engine/handlers/mode.d.ts +2 -0
- package/dist/engine/handlers/mode.js +194 -0
- package/dist/engine/handlers/mode.js.map +1 -0
- package/dist/engine/handlers/officialApps.d.ts +2 -0
- package/dist/engine/handlers/officialApps.js +79 -0
- package/dist/engine/handlers/officialApps.js.map +1 -0
- package/dist/engine/handlers/preview.d.ts +2 -0
- package/dist/engine/handlers/preview.js +59 -0
- package/dist/engine/handlers/preview.js.map +1 -0
- package/dist/engine/handlers/session.d.ts +2 -0
- package/dist/engine/handlers/session.js +385 -0
- package/dist/engine/handlers/session.js.map +1 -0
- package/dist/engine/handlers/usage.d.ts +2 -0
- package/dist/engine/handlers/usage.js +96 -0
- package/dist/engine/handlers/usage.js.map +1 -0
- package/dist/engine/handlers/workspace.d.ts +2 -0
- package/dist/engine/handlers/workspace.js +110 -0
- package/dist/engine/handlers/workspace.js.map +1 -0
- package/dist/engine/slashCommands.d.ts +3 -0
- package/dist/engine/slashCommands.js +211 -0
- package/dist/engine/slashCommands.js.map +1 -0
- package/dist/hub/engineRelaySocket.d.ts +58 -0
- package/dist/hub/engineRelaySocket.js +161 -0
- package/dist/hub/engineRelaySocket.js.map +1 -0
- package/dist/hub/hubClient.d.ts +28 -0
- package/dist/hub/hubClient.js +187 -0
- package/dist/hub/hubClient.js.map +1 -0
- package/dist/hub/hubDaemon.d.ts +69 -0
- package/dist/hub/hubDaemon.js +466 -0
- package/dist/hub/hubDaemon.js.map +1 -0
- package/dist/hub/hubProtocol.d.ts +161 -0
- package/dist/hub/hubProtocol.js +379 -0
- package/dist/hub/hubProtocol.js.map +1 -0
- package/dist/hub/panePreviewPump.d.ts +65 -0
- package/dist/hub/panePreviewPump.js +187 -0
- package/dist/hub/panePreviewPump.js.map +1 -0
- package/dist/hub/questionInjection.d.ts +19 -0
- package/dist/hub/questionInjection.js +126 -0
- package/dist/hub/questionInjection.js.map +1 -0
- package/dist/hub/reaper.d.ts +74 -0
- package/dist/hub/reaper.js +333 -0
- package/dist/hub/reaper.js.map +1 -0
- package/dist/hub/sessionHub.d.ts +203 -0
- package/dist/hub/sessionHub.js +1862 -0
- package/dist/hub/sessionHub.js.map +1 -0
- package/dist/protocol/common.d.ts +18 -0
- package/dist/protocol/common.js +78 -0
- package/dist/protocol/common.js.map +1 -0
- package/dist/protocol/decode.d.ts +3 -0
- package/dist/protocol/decode.js +1036 -0
- package/dist/protocol/decode.js.map +1 -0
- package/dist/protocol/encode.d.ts +3 -0
- package/dist/protocol/encode.js +84 -0
- package/dist/protocol/encode.js.map +1 -0
- package/dist/protocol/messages.d.ts +1002 -0
- package/dist/protocol/messages.js +8 -0
- package/dist/protocol/messages.js.map +1 -0
- package/dist/protocol.d.ts +4 -329
- package/dist/protocol.js +13 -531
- package/dist/protocol.js.map +1 -1
- package/dist/push/apnsConfigStore.js.map +1 -0
- package/dist/push/apnsJwtProvider.js.map +1 -0
- package/dist/{apnsSender.js.map → push/apnsSender.js.map} +1 -1
- package/dist/{approvalPushNotifier.js → push/approvalPushNotifier.js} +1 -1
- package/dist/push/approvalPushNotifier.js.map +1 -0
- package/dist/push/deviceTokenStore.js.map +1 -0
- package/dist/{pushTypes.js → push/pushTypes.js} +1 -1
- package/dist/push/pushTypes.js.map +1 -0
- package/dist/push/sendLog.js.map +1 -0
- package/dist/services/accountIdentity.d.ts +44 -0
- package/dist/services/accountIdentity.js +184 -0
- package/dist/services/accountIdentity.js.map +1 -0
- package/dist/services/claudeCredentialRefresh.d.ts +30 -0
- package/dist/services/claudeCredentialRefresh.js +345 -0
- package/dist/services/claudeCredentialRefresh.js.map +1 -0
- package/dist/services/claudeModelCatalog.d.ts +21 -0
- package/dist/services/claudeModelCatalog.js +181 -0
- package/dist/services/claudeModelCatalog.js.map +1 -0
- package/dist/{dirLister.d.ts → services/dirLister.d.ts} +9 -4
- package/dist/services/dirLister.js +169 -0
- package/dist/services/dirLister.js.map +1 -0
- package/dist/services/fileService.d.ts +10 -0
- package/dist/services/fileService.js +123 -0
- package/dist/services/fileService.js.map +1 -0
- package/dist/services/gitService.d.ts +79 -0
- package/dist/services/gitService.js +648 -0
- package/dist/services/gitService.js.map +1 -0
- package/dist/services/hostVersions.d.ts +38 -0
- package/dist/services/hostVersions.js +120 -0
- package/dist/services/hostVersions.js.map +1 -0
- package/dist/services/officialApps.d.ts +148 -0
- package/dist/services/officialApps.js +1079 -0
- package/dist/services/officialApps.js.map +1 -0
- package/dist/services/planUsageFetcher.d.ts +119 -0
- package/dist/services/planUsageFetcher.js +357 -0
- package/dist/services/planUsageFetcher.js.map +1 -0
- package/dist/services/previewServer.d.ts +31 -0
- package/dist/services/previewServer.js +233 -0
- package/dist/services/previewServer.js.map +1 -0
- package/dist/services/quicGateway.d.ts +143 -0
- package/dist/services/quicGateway.js +292 -0
- package/dist/services/quicGateway.js.map +1 -0
- package/dist/services/serveService.d.ts +50 -0
- package/dist/services/serveService.js +302 -0
- package/dist/services/serveService.js.map +1 -0
- package/dist/services/usageAggregator.js.map +1 -0
- package/dist/sessions/claudeSessionStore.d.ts +80 -0
- package/dist/sessions/claudeSessionStore.js +477 -0
- package/dist/sessions/claudeSessionStore.js.map +1 -0
- package/dist/sessions/heartbeat.d.ts +24 -0
- package/dist/sessions/heartbeat.js +86 -0
- package/dist/sessions/heartbeat.js.map +1 -0
- package/dist/sessions/liveSessionJoin.d.ts +20 -0
- package/dist/sessions/liveSessionJoin.js +80 -0
- package/dist/sessions/liveSessionJoin.js.map +1 -0
- package/dist/sessions/sessionActivityProvider.d.ts +14 -0
- package/dist/sessions/sessionActivityProvider.js +57 -0
- package/dist/sessions/sessionActivityProvider.js.map +1 -0
- package/dist/{sessionListService.d.ts → sessions/sessionListService.d.ts} +3 -3
- package/dist/{sessionListService.js → sessions/sessionListService.js} +23 -6
- package/dist/sessions/sessionListService.js.map +1 -0
- package/dist/{sessionMetadataStore.d.ts → sessions/sessionMetadataStore.d.ts} +18 -0
- package/dist/{sessionMetadataStore.js → sessions/sessionMetadataStore.js} +36 -1
- package/dist/sessions/sessionMetadataStore.js.map +1 -0
- package/dist/{sessionSearch.d.ts → sessions/sessionSearch.d.ts} +1 -1
- package/dist/sessions/sessionSearch.js.map +1 -0
- package/dist/shared/hostDisplayName.d.ts +11 -0
- package/dist/shared/hostDisplayName.js +50 -0
- package/dist/shared/hostDisplayName.js.map +1 -0
- package/dist/{lineWriter.d.ts → shared/lineWriter.d.ts} +1 -1
- package/dist/{lineWriter.js → shared/lineWriter.js} +1 -1
- package/dist/shared/lineWriter.js.map +1 -0
- package/dist/{observationLog.js.map → shared/observationLog.js.map} +1 -1
- package/dist/{paths.d.ts → shared/paths.d.ts} +7 -0
- package/dist/{paths.js → shared/paths.js} +9 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/shared/permissionMode.d.ts +10 -0
- package/dist/shared/permissionMode.js +51 -0
- package/dist/shared/permissionMode.js.map +1 -0
- package/dist/shared/skillInjection.d.ts +9 -0
- package/dist/shared/skillInjection.js +16 -0
- package/dist/shared/skillInjection.js.map +1 -0
- package/dist/shared/sleep.js.map +1 -0
- package/dist/{socketPath.d.ts → shared/socketPath.d.ts} +4 -0
- package/dist/{socketPath.js → shared/socketPath.js} +22 -0
- package/dist/shared/socketPath.js.map +1 -0
- package/dist/shared/version.js.map +1 -0
- package/package.json +13 -7
- package/dist/apnsConfigStore.js.map +0 -1
- package/dist/apnsJwtProvider.js.map +0 -1
- package/dist/approvalPushNotifier.js.map +0 -1
- package/dist/broker.js.map +0 -1
- package/dist/chatTailController.js.map +0 -1
- package/dist/claudeSessionStore.d.ts +0 -15
- package/dist/claudeSessionStore.js +0 -201
- package/dist/claudeSessionStore.js.map +0 -1
- package/dist/codexRolloutTailer.d.ts +0 -56
- package/dist/codexRolloutTailer.js +0 -303
- package/dist/codexRolloutTailer.js.map +0 -1
- package/dist/codexSessionStore.js.map +0 -1
- package/dist/codexUsage.js.map +0 -1
- package/dist/deviceTokenStore.js.map +0 -1
- package/dist/dirLister.js +0 -98
- package/dist/dirLister.js.map +0 -1
- package/dist/doctor.d.ts +0 -36
- package/dist/doctor.js +0 -162
- package/dist/doctor.js.map +0 -1
- package/dist/engine.d.ts +0 -85
- package/dist/engine.js +0 -962
- package/dist/engine.js.map +0 -1
- package/dist/hook.js.map +0 -1
- package/dist/hookSettings.js.map +0 -1
- package/dist/idleReaper.d.ts +0 -13
- package/dist/idleReaper.js +0 -30
- package/dist/idleReaper.js.map +0 -1
- package/dist/imageService.js.map +0 -1
- package/dist/kick.js.map +0 -1
- package/dist/launch.js +0 -396
- package/dist/launch.js.map +0 -1
- package/dist/legacyHomeMigration.js.map +0 -1
- package/dist/lineWriter.js.map +0 -1
- package/dist/mdnsAdvertiser.d.ts +0 -46
- package/dist/mdnsAdvertiser.js +0 -268
- package/dist/mdnsAdvertiser.js.map +0 -1
- package/dist/pairingCode.js.map +0 -1
- package/dist/paths.js.map +0 -1
- package/dist/permissionMode.d.ts +0 -8
- package/dist/permissionMode.js +0 -32
- package/dist/permissionMode.js.map +0 -1
- package/dist/planUsageFetcher.d.ts +0 -35
- package/dist/planUsageFetcher.js +0 -172
- package/dist/planUsageFetcher.js.map +0 -1
- package/dist/pushTokenCommand.js.map +0 -1
- package/dist/pushTypes.js.map +0 -1
- package/dist/sendLog.js.map +0 -1
- package/dist/sessionActivityProvider.d.ts +0 -7
- package/dist/sessionActivityProvider.js +0 -44
- package/dist/sessionActivityProvider.js.map +0 -1
- package/dist/sessionIdleTracker.d.ts +0 -19
- package/dist/sessionIdleTracker.js +0 -42
- package/dist/sessionIdleTracker.js.map +0 -1
- package/dist/sessionListService.js.map +0 -1
- package/dist/sessionMetadataStore.js.map +0 -1
- package/dist/sessionSearch.js.map +0 -1
- package/dist/setup.js.map +0 -1
- package/dist/sleep.js.map +0 -1
- package/dist/socketPath.js.map +0 -1
- package/dist/subagentTailer.d.ts +0 -15
- package/dist/subagentTailer.js +0 -399
- package/dist/subagentTailer.js.map +0 -1
- package/dist/tmux.d.ts +0 -62
- package/dist/tmux.js +0 -163
- package/dist/tmux.js.map +0 -1
- package/dist/transcriptTailer.js.map +0 -1
- package/dist/usageAggregator.js.map +0 -1
- package/dist/version.js.map +0 -1
- /package/dist/{kick.d.ts → commands/kick.d.ts} +0 -0
- /package/dist/{legacyHomeMigration.d.ts → commands/legacyHomeMigration.d.ts} +0 -0
- /package/dist/{legacyHomeMigration.js → commands/legacyHomeMigration.js} +0 -0
- /package/dist/{apnsConfigStore.d.ts → push/apnsConfigStore.d.ts} +0 -0
- /package/dist/{apnsConfigStore.js → push/apnsConfigStore.js} +0 -0
- /package/dist/{apnsJwtProvider.d.ts → push/apnsJwtProvider.d.ts} +0 -0
- /package/dist/{apnsJwtProvider.js → push/apnsJwtProvider.js} +0 -0
- /package/dist/{apnsSender.d.ts → push/apnsSender.d.ts} +0 -0
- /package/dist/{apnsSender.js → push/apnsSender.js} +0 -0
- /package/dist/{approvalPushNotifier.d.ts → push/approvalPushNotifier.d.ts} +0 -0
- /package/dist/{deviceTokenStore.d.ts → push/deviceTokenStore.d.ts} +0 -0
- /package/dist/{deviceTokenStore.js → push/deviceTokenStore.js} +0 -0
- /package/dist/{pushTypes.d.ts → push/pushTypes.d.ts} +0 -0
- /package/dist/{sendLog.d.ts → push/sendLog.d.ts} +0 -0
- /package/dist/{sendLog.js → push/sendLog.js} +0 -0
- /package/dist/{usageAggregator.d.ts → services/usageAggregator.d.ts} +0 -0
- /package/dist/{usageAggregator.js → services/usageAggregator.js} +0 -0
- /package/dist/{sessionSearch.js → sessions/sessionSearch.js} +0 -0
- /package/dist/{observationLog.d.ts → shared/observationLog.d.ts} +0 -0
- /package/dist/{observationLog.js → shared/observationLog.js} +0 -0
- /package/dist/{sleep.d.ts → shared/sleep.d.ts} +0 -0
- /package/dist/{sleep.js → shared/sleep.js} +0 -0
- /package/dist/{version.d.ts → shared/version.d.ts} +0 -0
- /package/dist/{version.js → shared/version.js} +0 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
// hubProtocol.ts
|
|
2
|
+
// tailii (TS host) — Hub と engine の間だけで使う内部 NDJSON プロトコル。
|
|
3
|
+
import { decodeControlMessage, encodeControlMessage, } from "../protocol.js";
|
|
4
|
+
export function encodeHubMessage(message) {
|
|
5
|
+
if (message.type === "conversation_event" || message.type === "conversation_pane_preview" ||
|
|
6
|
+
message.type === "conversation_mode" || message.type === "conversation_subagent_transcript_response") {
|
|
7
|
+
// Hub 封筒内でも ControlMessage は外向け wire 表現を使う。特に tool_activity は
|
|
8
|
+
// activity を flat 化するため、単純な JSON.stringify では受信側 decoder と非対称になる。
|
|
9
|
+
return JSON.stringify({
|
|
10
|
+
...message,
|
|
11
|
+
payload: JSON.parse(encodeControlMessage(message.payload)),
|
|
12
|
+
}) + "\n";
|
|
13
|
+
}
|
|
14
|
+
return JSON.stringify(message) + "\n";
|
|
15
|
+
}
|
|
16
|
+
/** 不正・未知の行を接続エラーにせず捨てる。 */
|
|
17
|
+
export function decodeHubClientLine(line) {
|
|
18
|
+
const record = parseRecord(line);
|
|
19
|
+
if (record === null)
|
|
20
|
+
return null;
|
|
21
|
+
if (record["type"] === "hub_hello")
|
|
22
|
+
return { type: "hub_hello" };
|
|
23
|
+
if (record["type"] === "conversation_subscribe") {
|
|
24
|
+
const session = record["session"];
|
|
25
|
+
if (typeof session !== "string" || session.length === 0)
|
|
26
|
+
return null;
|
|
27
|
+
const afterSeq = optionalNonnegativeNumber(record["afterSeq"]);
|
|
28
|
+
const newerThanMs = optionalNonnegativeNumber(record["newerThanMs"]);
|
|
29
|
+
if (afterSeq === null || newerThanMs === null ||
|
|
30
|
+
(record["preview"] !== undefined && typeof record["preview"] !== "boolean"))
|
|
31
|
+
return null;
|
|
32
|
+
return { type: "conversation_subscribe", session,
|
|
33
|
+
...(afterSeq !== undefined ? { afterSeq } : {}),
|
|
34
|
+
...(newerThanMs !== undefined ? { newerThanMs } : {}),
|
|
35
|
+
...(typeof record["preview"] === "boolean" ? { preview: record["preview"] } : {}) };
|
|
36
|
+
}
|
|
37
|
+
if (record["type"] === "conversation_unsubscribe") {
|
|
38
|
+
const session = record["session"];
|
|
39
|
+
return typeof session === "string" && session.length > 0 ? { type: "conversation_unsubscribe", session } : null;
|
|
40
|
+
}
|
|
41
|
+
if (record["type"] === "session_retire") {
|
|
42
|
+
const session = record["session"];
|
|
43
|
+
return typeof session === "string" && session.length > 0 ? { type: "session_retire", session } : null;
|
|
44
|
+
}
|
|
45
|
+
if (record["type"] === "conversation_subagent_transcript_request") {
|
|
46
|
+
const id = record["id"];
|
|
47
|
+
const session = record["session"];
|
|
48
|
+
const nodeId = record["nodeId"];
|
|
49
|
+
return typeof id === "string" && id.length > 0 &&
|
|
50
|
+
typeof session === "string" && session.length > 0 &&
|
|
51
|
+
typeof nodeId === "string" && nodeId.length > 0
|
|
52
|
+
? { type: "conversation_subagent_transcript_request", id, session, nodeId }
|
|
53
|
+
: null;
|
|
54
|
+
}
|
|
55
|
+
if (record["type"] === "hub_state_request") {
|
|
56
|
+
const id = record["id"];
|
|
57
|
+
const session = record["session"];
|
|
58
|
+
return typeof id === "string" && id.length > 0 && typeof session === "string" && session.length > 0
|
|
59
|
+
? { type: "hub_state_request", id, session }
|
|
60
|
+
: null;
|
|
61
|
+
}
|
|
62
|
+
if (record["type"] === "presence_request") {
|
|
63
|
+
const id = record["id"];
|
|
64
|
+
const session = record["session"];
|
|
65
|
+
return typeof id === "string" && id.length > 0 && typeof session === "string" && session.length > 0
|
|
66
|
+
? { type: "presence_request", id, session }
|
|
67
|
+
: null;
|
|
68
|
+
}
|
|
69
|
+
if (record["type"] === "question_answer_submit") {
|
|
70
|
+
const id = record["id"], session = record["session"], questionId = record["questionId"], answers = record["answers"];
|
|
71
|
+
return typeof id === "string" && id.length > 0 && typeof session === "string" && session.length > 0 &&
|
|
72
|
+
typeof questionId === "string" && questionId.length > 0 && Array.isArray(answers)
|
|
73
|
+
? { type: "question_answer_submit", id, session, questionId, answers: answers } : null;
|
|
74
|
+
}
|
|
75
|
+
if (record["type"] === "input_claim") {
|
|
76
|
+
const id = record["id"], session = record["session"], clientMessageId = record["clientMessageId"];
|
|
77
|
+
return typeof id === "string" && id.length > 0 && typeof session === "string" && session.length > 0 &&
|
|
78
|
+
typeof clientMessageId === "string" && clientMessageId.length > 0
|
|
79
|
+
? { type: "input_claim", id, session, clientMessageId } : null;
|
|
80
|
+
}
|
|
81
|
+
if (record["type"] === "codex_turn_submit") {
|
|
82
|
+
const id = record["id"], session = record["session"], text = record["text"];
|
|
83
|
+
const clientUserMessageId = record["clientUserMessageId"], effort = record["effort"];
|
|
84
|
+
const approvalPolicy = record["approvalPolicy"] ?? null;
|
|
85
|
+
const sandbox = record["sandbox"], threadId = record["threadId"], cwd = record["cwd"];
|
|
86
|
+
const explicitRetry = record["explicitRetry"];
|
|
87
|
+
const validSandbox = sandbox === null || sandbox === "read-only" ||
|
|
88
|
+
sandbox === "workspace-write" || sandbox === "danger-full-access";
|
|
89
|
+
const validApprovalPolicy = approvalPolicy === null || approvalPolicy === "untrusted" ||
|
|
90
|
+
approvalPolicy === "on-request" || approvalPolicy === "never";
|
|
91
|
+
return typeof id === "string" && id.length > 0 && typeof session === "string" && session.length > 0 &&
|
|
92
|
+
typeof text === "string" && typeof clientUserMessageId === "string" && clientUserMessageId.length > 0 &&
|
|
93
|
+
(effort === null || typeof effort === "string") && validApprovalPolicy && validSandbox &&
|
|
94
|
+
typeof threadId === "string" && threadId.length > 0 && typeof cwd === "string" && cwd.length > 0 &&
|
|
95
|
+
(explicitRetry === undefined || typeof explicitRetry === "boolean")
|
|
96
|
+
? { type: "codex_turn_submit", id, session, text, clientUserMessageId,
|
|
97
|
+
effort: effort,
|
|
98
|
+
approvalPolicy: approvalPolicy,
|
|
99
|
+
sandbox: sandbox,
|
|
100
|
+
threadId, cwd, ...(explicitRetry === true ? { explicitRetry: true } : {}) }
|
|
101
|
+
: null;
|
|
102
|
+
}
|
|
103
|
+
if (record["type"] === "codex_turn_interrupt") {
|
|
104
|
+
const id = record["id"], session = record["session"];
|
|
105
|
+
return typeof id === "string" && id.length > 0 && typeof session === "string" && session.length > 0
|
|
106
|
+
? { type: "codex_turn_interrupt", id, session }
|
|
107
|
+
: null;
|
|
108
|
+
}
|
|
109
|
+
if (record["type"] === "chat_send") {
|
|
110
|
+
const id = record["id"], session = record["session"], clientMessageId = record["clientMessageId"];
|
|
111
|
+
const text = record["text"], explicitRetry = record["explicitRetry"];
|
|
112
|
+
return typeof id === "string" && id.length > 0 && typeof session === "string" && session.length > 0 &&
|
|
113
|
+
typeof clientMessageId === "string" && clientMessageId.length > 0 && typeof text === "string" && text.length > 0 &&
|
|
114
|
+
(explicitRetry === undefined || typeof explicitRetry === "boolean")
|
|
115
|
+
? { type: "chat_send", id, session, clientMessageId, text,
|
|
116
|
+
...(explicitRetry === true ? { explicitRetry: true } : {}) }
|
|
117
|
+
: null;
|
|
118
|
+
}
|
|
119
|
+
if (record["type"] === "pending_message_delete") {
|
|
120
|
+
const id = record["id"], session = record["session"];
|
|
121
|
+
const clientMessageId = record["clientMessageId"], kind = record["kind"];
|
|
122
|
+
return typeof id === "string" && id.length > 0 &&
|
|
123
|
+
typeof session === "string" && session.length > 0 &&
|
|
124
|
+
typeof clientMessageId === "string" && clientMessageId.length > 0 &&
|
|
125
|
+
(kind === "chat" || kind === "codex")
|
|
126
|
+
? { type: "pending_message_delete", id, session, clientMessageId, kind }
|
|
127
|
+
: null;
|
|
128
|
+
}
|
|
129
|
+
if (record["type"] === "runtime_claim") {
|
|
130
|
+
const id = record["id"], session = record["session"];
|
|
131
|
+
return typeof id === "string" && id.length > 0 && typeof session === "string" && session.length > 0
|
|
132
|
+
? { type: "runtime_claim", id, session } : null;
|
|
133
|
+
}
|
|
134
|
+
if (record["type"] === "runtime_claim_release") {
|
|
135
|
+
const session = record["session"];
|
|
136
|
+
return typeof session === "string" && session.length > 0 ? { type: "runtime_claim_release", session } : null;
|
|
137
|
+
}
|
|
138
|
+
if (record["type"] === "session_preview_watch") {
|
|
139
|
+
const enabled = record["enabled"];
|
|
140
|
+
return typeof enabled === "boolean" ? { type: "session_preview_watch", enabled } : null;
|
|
141
|
+
}
|
|
142
|
+
return decodeProcessing(record);
|
|
143
|
+
}
|
|
144
|
+
export function decodeHubServerLine(line) {
|
|
145
|
+
const record = parseRecord(line);
|
|
146
|
+
if (record === null)
|
|
147
|
+
return null;
|
|
148
|
+
if (record["type"] === "hub_hello_ack") {
|
|
149
|
+
const version = record["version"];
|
|
150
|
+
const bootId = record["bootId"];
|
|
151
|
+
const rawProcessingSessions = record["processingSessions"];
|
|
152
|
+
if (!((version === null || typeof version === "string") &&
|
|
153
|
+
typeof bootId === "string" && bootId.length > 0))
|
|
154
|
+
return null;
|
|
155
|
+
// 旧 Hub の hello ack には processingSessions が無い。「処理中なし」とは区別して
|
|
156
|
+
// engine 側の既知状態を維持し、ローリング更新中の背景購読を誤解除しない。
|
|
157
|
+
// 将来版や一時的な破損で不正要素が混ざっても hello 全体を捨てない。有効な会話だけを
|
|
158
|
+
// 採用し、型自体が配列でない場合は旧 Hub 相当(snapshot 未提供)として扱う。
|
|
159
|
+
const processingSessions = rawProcessingSessions === undefined || !Array.isArray(rawProcessingSessions)
|
|
160
|
+
? undefined
|
|
161
|
+
: rawProcessingSessions.filter((session) => typeof session === "string" && session.length > 0);
|
|
162
|
+
return {
|
|
163
|
+
type: "hub_hello_ack",
|
|
164
|
+
version,
|
|
165
|
+
bootId,
|
|
166
|
+
...(processingSessions !== undefined ? { processingSessions } : {}),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
if (record["type"] === "hub_state_response") {
|
|
170
|
+
const id = record["id"];
|
|
171
|
+
const session = record["session"];
|
|
172
|
+
const pending = record["pendingQuestion"];
|
|
173
|
+
if (typeof id !== "string" || typeof session !== "string" || typeof record["processing"] !== "boolean")
|
|
174
|
+
return null;
|
|
175
|
+
if (pending !== null && !isPendingQuestion(pending))
|
|
176
|
+
return null;
|
|
177
|
+
return { type: "hub_state_response", id, session, pendingQuestion: pending, processing: record["processing"] };
|
|
178
|
+
}
|
|
179
|
+
if (record["type"] === "presence_response") {
|
|
180
|
+
const id = record["id"];
|
|
181
|
+
const session = record["session"];
|
|
182
|
+
const subscriberCount = record["subscriberCount"];
|
|
183
|
+
return typeof id === "string" && id.length > 0 && typeof session === "string" && session.length > 0 &&
|
|
184
|
+
typeof subscriberCount === "number" && Number.isInteger(subscriberCount) && subscriberCount >= 0
|
|
185
|
+
? { type: "presence_response", id, session, subscriberCount }
|
|
186
|
+
: null;
|
|
187
|
+
}
|
|
188
|
+
if (record["type"] === "question_answer_result") {
|
|
189
|
+
const id = record["id"], status = record["status"];
|
|
190
|
+
return typeof id === "string" && (status === "accepted" || status === "already_resolved" || status === "unknown")
|
|
191
|
+
? { type: "question_answer_result", id, status } : null;
|
|
192
|
+
}
|
|
193
|
+
if (record["type"] === "input_claim_result") {
|
|
194
|
+
const id = record["id"], status = record["status"];
|
|
195
|
+
return typeof id === "string" && (status === "granted" || status === "duplicate")
|
|
196
|
+
? { type: "input_claim_result", id, status } : null;
|
|
197
|
+
}
|
|
198
|
+
if (record["type"] === "codex_turn_result") {
|
|
199
|
+
const id = record["id"], status = record["status"], error = record["error"];
|
|
200
|
+
if (typeof id !== "string" || (status !== "started" && status !== "duplicate" && status !== "failed") ||
|
|
201
|
+
(error !== undefined && typeof error !== "string"))
|
|
202
|
+
return null;
|
|
203
|
+
return { type: "codex_turn_result", id, status, ...(typeof error === "string" ? { error } : {}) };
|
|
204
|
+
}
|
|
205
|
+
if (record["type"] === "chat_send_result") {
|
|
206
|
+
const id = record["id"], status = record["status"], error = record["error"];
|
|
207
|
+
if (typeof id !== "string" || (status !== "accepted" && status !== "duplicate" && status !== "failed") ||
|
|
208
|
+
(error !== undefined && typeof error !== "string"))
|
|
209
|
+
return null;
|
|
210
|
+
return { type: "chat_send_result", id, status, ...(typeof error === "string" ? { error } : {}) };
|
|
211
|
+
}
|
|
212
|
+
if (record["type"] === "pending_message_delete_result") {
|
|
213
|
+
const id = record["id"], status = record["status"], error = record["error"];
|
|
214
|
+
if (typeof id !== "string" ||
|
|
215
|
+
(status !== "deleted" && status !== "not_found" &&
|
|
216
|
+
status !== "processing" && status !== "failed") ||
|
|
217
|
+
(error !== undefined && typeof error !== "string"))
|
|
218
|
+
return null;
|
|
219
|
+
return {
|
|
220
|
+
type: "pending_message_delete_result",
|
|
221
|
+
id,
|
|
222
|
+
status,
|
|
223
|
+
...(typeof error === "string" ? { error } : {}),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
if (record["type"] === "runtime_claim_result") {
|
|
227
|
+
const id = record["id"], status = record["status"];
|
|
228
|
+
return typeof id === "string" && (status === "granted" || status === "held")
|
|
229
|
+
? { type: "runtime_claim_result", id, status } : null;
|
|
230
|
+
}
|
|
231
|
+
if (record["type"] === "conversation_subagent_transcript_response") {
|
|
232
|
+
const id = record["id"];
|
|
233
|
+
const session = record["session"];
|
|
234
|
+
if (typeof id !== "string" || id.length === 0 ||
|
|
235
|
+
typeof session !== "string" || session.length === 0)
|
|
236
|
+
return null;
|
|
237
|
+
const payload = decodeHubControlPayload(record["payload"]);
|
|
238
|
+
if (payload === null)
|
|
239
|
+
return null;
|
|
240
|
+
return payload.type === "subagent_transcript_response" && payload.id === id
|
|
241
|
+
? { type: record["type"], id, session, payload }
|
|
242
|
+
: null;
|
|
243
|
+
}
|
|
244
|
+
if (record["type"] === "conversation_liveness") {
|
|
245
|
+
// live-pill Phase 2: 死亡だけを配る(alive:true は送らない設計上の割り切り)。
|
|
246
|
+
const session = record["session"];
|
|
247
|
+
return typeof session === "string" && session.length > 0 && record["alive"] === false
|
|
248
|
+
? { type: "conversation_liveness", session, alive: false }
|
|
249
|
+
: null;
|
|
250
|
+
}
|
|
251
|
+
if (record["type"] === "conversation_event" || record["type"] === "conversation_pane_preview" ||
|
|
252
|
+
record["type"] === "conversation_mode") {
|
|
253
|
+
const session = record["session"];
|
|
254
|
+
if (typeof session !== "string" || session.length === 0)
|
|
255
|
+
return null;
|
|
256
|
+
const payload = decodeHubControlPayload(record["payload"]);
|
|
257
|
+
if (payload === null)
|
|
258
|
+
return null;
|
|
259
|
+
if (record["type"] === "conversation_pane_preview") {
|
|
260
|
+
return payload.type === "pane_preview" ? { type: record["type"], session, payload } : null;
|
|
261
|
+
}
|
|
262
|
+
if (record["type"] === "conversation_mode") {
|
|
263
|
+
return payload.type === "mode_set_response" ? { type: record["type"], session, payload } : null;
|
|
264
|
+
}
|
|
265
|
+
const serverSeq = record["serverSeq"];
|
|
266
|
+
return typeof serverSeq === "number" && Number.isInteger(serverSeq) && serverSeq >= 0
|
|
267
|
+
? { type: record["type"], session, serverSeq, payload } : null;
|
|
268
|
+
}
|
|
269
|
+
return decodeRelay(record);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Hub envelope 内の ControlMessage を復元する。
|
|
273
|
+
*
|
|
274
|
+
* 現行 Hub は canonical flat wire を送る。一世代前の Hub は TypeScript の内部表現を
|
|
275
|
+
* JSON.stringify していたため、tool_activity.activity / subagent_node.node だけ nested だった。
|
|
276
|
+
* engine と daemon のローリング更新中にそれらを捨てないよう、Hub 内部境界に限って旧形を
|
|
277
|
+
* flat へ正規化する。外向け ControlMessage decoder の厳格な wire 契約は緩めない。
|
|
278
|
+
*/
|
|
279
|
+
function decodeHubControlPayload(value) {
|
|
280
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
281
|
+
return null;
|
|
282
|
+
const encoded = JSON.stringify(value);
|
|
283
|
+
if (encoded === undefined)
|
|
284
|
+
return null;
|
|
285
|
+
try {
|
|
286
|
+
return decodeControlMessage(encoded);
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
// legacy nested payload は下で限定的に正規化する。
|
|
290
|
+
}
|
|
291
|
+
const record = value;
|
|
292
|
+
const nestedKey = record["type"] === "tool_activity" || record["type"] === "session_tool_activity"
|
|
293
|
+
? "activity"
|
|
294
|
+
: record["type"] === "subagent_node" ? "node" : null;
|
|
295
|
+
if (nestedKey === null)
|
|
296
|
+
return null;
|
|
297
|
+
const nested = record[nestedKey];
|
|
298
|
+
if (typeof nested !== "object" || nested === null || Array.isArray(nested))
|
|
299
|
+
return null;
|
|
300
|
+
const flattened = {
|
|
301
|
+
...record,
|
|
302
|
+
...nested,
|
|
303
|
+
type: record["type"],
|
|
304
|
+
};
|
|
305
|
+
delete flattened[nestedKey];
|
|
306
|
+
if (record["v"] !== undefined)
|
|
307
|
+
flattened["v"] = record["v"];
|
|
308
|
+
else
|
|
309
|
+
delete flattened["v"];
|
|
310
|
+
try {
|
|
311
|
+
return decodeControlMessage(JSON.stringify(flattened));
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
return null;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
function parseRecord(line) {
|
|
318
|
+
if (!line.trim())
|
|
319
|
+
return null;
|
|
320
|
+
try {
|
|
321
|
+
const value = JSON.parse(line);
|
|
322
|
+
return typeof value === "object" && value !== null ? value : null;
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
function decodeProcessing(record) {
|
|
329
|
+
const session = record["session"];
|
|
330
|
+
const state = record["state"];
|
|
331
|
+
return record["type"] === "session_processing" && typeof session === "string" && session.length > 0 &&
|
|
332
|
+
(state === "active" || state === "done")
|
|
333
|
+
? { type: "session_processing", session, state }
|
|
334
|
+
: null;
|
|
335
|
+
}
|
|
336
|
+
function decodeRelay(record) {
|
|
337
|
+
const processing = decodeProcessing(record);
|
|
338
|
+
if (processing !== null)
|
|
339
|
+
return processing;
|
|
340
|
+
const type = record["type"];
|
|
341
|
+
const session = record["session"];
|
|
342
|
+
const id = record["id"];
|
|
343
|
+
if (typeof session !== "string" || !session || typeof id !== "string" || !id)
|
|
344
|
+
return null;
|
|
345
|
+
if (type === "question_event") {
|
|
346
|
+
const event = record["event"];
|
|
347
|
+
if (event === "dismiss")
|
|
348
|
+
return { type, session, id, event };
|
|
349
|
+
if (event === "prompt" && Array.isArray(record["questions"]) && record["questions"].length > 0) {
|
|
350
|
+
return { type, session, id, event, questions: record["questions"] };
|
|
351
|
+
}
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
const kind = record["kind"];
|
|
355
|
+
if (kind !== "question" && kind !== "approval")
|
|
356
|
+
return null;
|
|
357
|
+
if (type === "remote_pending_cleared")
|
|
358
|
+
return { type, v: numberOrOne(record["v"]), id, session, kind };
|
|
359
|
+
if (type === "remote_pending" && typeof record["summary"] === "string") {
|
|
360
|
+
return { type, v: numberOrOne(record["v"]), id, session, kind,
|
|
361
|
+
...(typeof record["tool"] === "string" ? { tool: record["tool"] } : {}), summary: record["summary"] };
|
|
362
|
+
}
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
function isPendingQuestion(value) {
|
|
366
|
+
if (typeof value !== "object" || value === null)
|
|
367
|
+
return false;
|
|
368
|
+
const record = value;
|
|
369
|
+
return typeof record["id"] === "string" && Array.isArray(record["questions"]);
|
|
370
|
+
}
|
|
371
|
+
function numberOrOne(value) {
|
|
372
|
+
return typeof value === "number" && Number.isFinite(value) ? value : 1;
|
|
373
|
+
}
|
|
374
|
+
function optionalNonnegativeNumber(value) {
|
|
375
|
+
if (value === undefined)
|
|
376
|
+
return undefined;
|
|
377
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=hubProtocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hubProtocol.js","sourceRoot":"","sources":["../../src/hub/hubProtocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { LineWriter } from "../shared/lineWriter.js";
|
|
2
|
+
export type PanePreviewCapture = (session: string) => Promise<string>;
|
|
3
|
+
export type PanePreviewMode = "claude_status" | "codex_terminal";
|
|
4
|
+
export interface PanePreviewPumpOptions {
|
|
5
|
+
writer: LineWriter;
|
|
6
|
+
capture: PanePreviewCapture;
|
|
7
|
+
/**
|
|
8
|
+
* pane capture のポーリング間隔(ms)。既定 250ms。
|
|
9
|
+
* 関数を渡すと毎周期評価する(前面購読あり=250ms / 一覧 watch のみ=低頻度、の動的切替用)。
|
|
10
|
+
*/
|
|
11
|
+
pollIntervalMs?: number | (() => number);
|
|
12
|
+
/** 変化停止後に inactive を送るまでの閾値(ms)。既定 2.5s。 */
|
|
13
|
+
quietThresholdMs?: number;
|
|
14
|
+
/** negotiated protocol version。未指定は v2。 */
|
|
15
|
+
protocolVersion?: () => number;
|
|
16
|
+
/**
|
|
17
|
+
* Claude TUI の permission mode が変わったとき(と pump 開始後の初回判定時)に呼ばれる。
|
|
18
|
+
* tmux 側の Shift+Tab 切替をクライアント表示へ反映するための通知で、
|
|
19
|
+
* claude_status モードのときだけ判定する(codex に permission mode は無い)。
|
|
20
|
+
*/
|
|
21
|
+
onPermissionMode?: (mode: string) => void;
|
|
22
|
+
/** 診断ログ(選択ダイアログフレームの emit 遷移など。既定は無効)。 */
|
|
23
|
+
log?: (message: string) => void;
|
|
24
|
+
}
|
|
25
|
+
/** tmux pane の画面内容が変化したときだけ pane_preview を流す。 */
|
|
26
|
+
export declare class PanePreviewPump {
|
|
27
|
+
private readonly writer;
|
|
28
|
+
private readonly capture;
|
|
29
|
+
private readonly pollIntervalMs;
|
|
30
|
+
private readonly quietThresholdMs;
|
|
31
|
+
private readonly protocolVersion;
|
|
32
|
+
private abortController;
|
|
33
|
+
private task;
|
|
34
|
+
private seq;
|
|
35
|
+
private lastText;
|
|
36
|
+
private lastChangeAt;
|
|
37
|
+
private lastEmitAt;
|
|
38
|
+
private pendingText;
|
|
39
|
+
private hasEmitted;
|
|
40
|
+
private active;
|
|
41
|
+
private inactiveSent;
|
|
42
|
+
private session;
|
|
43
|
+
private mode;
|
|
44
|
+
private readonly onPermissionMode;
|
|
45
|
+
private readonly log;
|
|
46
|
+
private lastPermissionMode;
|
|
47
|
+
private lastEmittedDialog;
|
|
48
|
+
private emitInitial;
|
|
49
|
+
private static readonly minEmitIntervalMs;
|
|
50
|
+
constructor(options: PanePreviewPumpOptions);
|
|
51
|
+
/**
|
|
52
|
+
* 対象セッションの preview を開始/切替する。同一セッションの二重 start は無視する。
|
|
53
|
+
* emitInitial=true は初回 capture も active フレームとして送る(処理中会話を一覧 watch で
|
|
54
|
+
* 開いた直後、pane が静止していてもカードを空にしないため)。
|
|
55
|
+
*/
|
|
56
|
+
start(session: string, mode?: PanePreviewMode, opts?: {
|
|
57
|
+
emitInitial?: boolean;
|
|
58
|
+
}): void;
|
|
59
|
+
/** preview を停止する。active 中なら UI 側の表示を消すため inactive を一度だけ流す。 */
|
|
60
|
+
stop(): void;
|
|
61
|
+
private run;
|
|
62
|
+
private queueActive;
|
|
63
|
+
private emitActive;
|
|
64
|
+
private emit;
|
|
65
|
+
}
|