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,187 @@
|
|
|
1
|
+
// hubClient.ts
|
|
2
|
+
// tailii (TS host) — engine から Session Hub へ接続する再接続可能な link。
|
|
3
|
+
import * as net from "node:net";
|
|
4
|
+
import { ensureHubDaemon } from "./hubDaemon.js";
|
|
5
|
+
import { decodeHubServerLine, encodeHubMessage } from "./hubProtocol.js";
|
|
6
|
+
import { resolveHubSocketPath } from "../shared/socketPath.js";
|
|
7
|
+
export function connectHubSocket(options = {}) {
|
|
8
|
+
const socketPath = options.socketPath ?? resolveHubSocketPath();
|
|
9
|
+
let socket = null;
|
|
10
|
+
let closed = false;
|
|
11
|
+
let retryMs = 250;
|
|
12
|
+
let disconnectedAtMs = null;
|
|
13
|
+
let reconnectHandler = null;
|
|
14
|
+
let pendingReconnect = null;
|
|
15
|
+
const helloCompletedSockets = new WeakSet();
|
|
16
|
+
const queued = [];
|
|
17
|
+
const isReplayableState = (message) => message.type === "session_processing" || message.type === "runtime_claim_release" ||
|
|
18
|
+
message.type === "session_retire";
|
|
19
|
+
const enqueueOfflineState = (message) => {
|
|
20
|
+
// id 相関 RPC は呼び出し側 timeout / durable Outbox が再試行を所有する。切断queueへ
|
|
21
|
+
// 残すと遅延実行されるため、再接続後にも意味がある状態通知と確定killだけを合流する。
|
|
22
|
+
if (!isReplayableState(message))
|
|
23
|
+
return;
|
|
24
|
+
const existing = queued.findIndex((candidate) => candidate.type === message.type && "session" in candidate && "session" in message &&
|
|
25
|
+
candidate.session === message.session);
|
|
26
|
+
if (existing >= 0)
|
|
27
|
+
queued.splice(existing, 1);
|
|
28
|
+
queued.push(message);
|
|
29
|
+
// hook嵐や長期停止でも常駐engineのメモリを無制限に増やさない。
|
|
30
|
+
while (queued.length > 128) {
|
|
31
|
+
// 同名セッションへの旧queue混入を防ぐ確定killを、通常のprocessing更新より優先する。
|
|
32
|
+
const removable = queued.findIndex((candidate) => candidate.type !== "session_retire");
|
|
33
|
+
queued.splice(removable >= 0 ? removable : 0, 1);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const link = {
|
|
37
|
+
onMessage: null,
|
|
38
|
+
get onReconnect() { return reconnectHandler; },
|
|
39
|
+
set onReconnect(handler) {
|
|
40
|
+
reconnectHandler = handler;
|
|
41
|
+
if (handler === null || pendingReconnect === null)
|
|
42
|
+
return;
|
|
43
|
+
// connectHubSocket は生成直後から接続するため、engine の初期化 await 中に hello が
|
|
44
|
+
// 先着しうる。最新の hello 完了情報を handler 登録まで保持し、一度だけ引き渡す。
|
|
45
|
+
const info = pendingReconnect;
|
|
46
|
+
pendingReconnect = null;
|
|
47
|
+
handler(info);
|
|
48
|
+
},
|
|
49
|
+
send(message) {
|
|
50
|
+
// net.Socket は connect 中でも writable=true になり、接続失敗した候補へ write すると
|
|
51
|
+
// 再接続 queue を経ずに消える。確立済み socket だけを直接配送対象にする。
|
|
52
|
+
if (socket?.writable === true && socket.connecting === false && socket.destroyed === false) {
|
|
53
|
+
if (isReplayableState(message) && !helloCompletedSockets.has(socket)) {
|
|
54
|
+
enqueueOfflineState(message);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
socket.write(encodeHubMessage(message));
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
enqueueOfflineState(message);
|
|
61
|
+
// 非再生対象(id 相関 RPC 等)はここで破棄される。呼び出し側が即時失敗できるよう
|
|
62
|
+
// false を返す(オフライン再生対象は queue に合流済みなので true)。
|
|
63
|
+
return isReplayableState(message);
|
|
64
|
+
},
|
|
65
|
+
close() {
|
|
66
|
+
closed = true;
|
|
67
|
+
pendingReconnect = null;
|
|
68
|
+
socket?.destroy();
|
|
69
|
+
socket = null;
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
const connect = () => {
|
|
73
|
+
if (closed)
|
|
74
|
+
return;
|
|
75
|
+
const candidate = net.connect(socketPath);
|
|
76
|
+
socket = candidate;
|
|
77
|
+
let connected = false;
|
|
78
|
+
let helloHandled = false;
|
|
79
|
+
let helloTimer = null;
|
|
80
|
+
let buffer = Buffer.alloc(0);
|
|
81
|
+
candidate.once("connect", () => {
|
|
82
|
+
connected = true;
|
|
83
|
+
retryMs = 250;
|
|
84
|
+
candidate.write(encodeHubMessage({ type: "hub_hello" }));
|
|
85
|
+
helloTimer = setTimeout(() => {
|
|
86
|
+
if (!helloHandled)
|
|
87
|
+
candidate.destroy(new Error("Session Hub hello timeout"));
|
|
88
|
+
}, options.helloTimeoutMs ?? 5_000);
|
|
89
|
+
helloTimer.unref();
|
|
90
|
+
});
|
|
91
|
+
candidate.on("data", (chunk) => {
|
|
92
|
+
buffer = buffer.length === 0 ? chunk : Buffer.concat([buffer, chunk]);
|
|
93
|
+
let newline;
|
|
94
|
+
while ((newline = buffer.indexOf(0x0a)) >= 0) {
|
|
95
|
+
const message = decodeHubServerLine(buffer.subarray(0, newline).toString("utf8"));
|
|
96
|
+
buffer = buffer.subarray(newline + 1);
|
|
97
|
+
if (message !== null) {
|
|
98
|
+
link.onMessage?.(message);
|
|
99
|
+
if (message.type === "hub_hello_ack" && !helloHandled) {
|
|
100
|
+
helloHandled = true;
|
|
101
|
+
helloCompletedSockets.add(candidate);
|
|
102
|
+
if (helloTimer !== null)
|
|
103
|
+
clearTimeout(helloTimer);
|
|
104
|
+
helloTimer = null;
|
|
105
|
+
// handshake が成立した候補へだけオフライン状態を流す。不正 hello で破棄する
|
|
106
|
+
// socket に session_retire 等を消費させない。
|
|
107
|
+
const replay = queued.splice(0);
|
|
108
|
+
// hello snapshot は replay より前の状態。直後に送る processing/retire を反映した
|
|
109
|
+
// effective snapshot を engine へ渡さないと、retire 済み会話を active として
|
|
110
|
+
// 再購読して actor を作り直す。
|
|
111
|
+
let effectiveProcessingSessions = message.processingSessions === undefined
|
|
112
|
+
? undefined
|
|
113
|
+
: new Set(message.processingSessions);
|
|
114
|
+
if (effectiveProcessingSessions !== undefined) {
|
|
115
|
+
for (const queuedMessage of replay) {
|
|
116
|
+
if (queuedMessage.type === "session_retire") {
|
|
117
|
+
effectiveProcessingSessions.delete(queuedMessage.session);
|
|
118
|
+
}
|
|
119
|
+
else if (queuedMessage.type === "session_processing") {
|
|
120
|
+
if (queuedMessage.state === "active")
|
|
121
|
+
effectiveProcessingSessions.add(queuedMessage.session);
|
|
122
|
+
else
|
|
123
|
+
effectiveProcessingSessions.delete(queuedMessage.session);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
for (const queuedMessage of replay) {
|
|
128
|
+
candidate.write(encodeHubMessage(queuedMessage));
|
|
129
|
+
}
|
|
130
|
+
const boundary = disconnectedAtMs;
|
|
131
|
+
disconnectedAtMs = null;
|
|
132
|
+
const info = {
|
|
133
|
+
bootId: message.bootId,
|
|
134
|
+
disconnectedAtMs: boundary,
|
|
135
|
+
processingSessions: effectiveProcessingSessions === undefined
|
|
136
|
+
? undefined
|
|
137
|
+
: [...effectiveProcessingSessions],
|
|
138
|
+
};
|
|
139
|
+
if (reconnectHandler === null)
|
|
140
|
+
pendingReconnect = info;
|
|
141
|
+
else
|
|
142
|
+
reconnectHandler(info);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
candidate.once("error", () => {
|
|
148
|
+
(options.ensureDaemon ?? ensureHubDaemon)();
|
|
149
|
+
});
|
|
150
|
+
candidate.once("close", () => {
|
|
151
|
+
if (helloTimer !== null)
|
|
152
|
+
clearTimeout(helloTimer);
|
|
153
|
+
helloTimer = null;
|
|
154
|
+
if (socket === candidate)
|
|
155
|
+
socket = null;
|
|
156
|
+
if (closed)
|
|
157
|
+
return;
|
|
158
|
+
if (connected && disconnectedAtMs === null)
|
|
159
|
+
disconnectedAtMs = Date.now();
|
|
160
|
+
const delay = retryMs;
|
|
161
|
+
retryMs = Math.min(5_000, retryMs * 2);
|
|
162
|
+
setTimeout(connect, delay).unref();
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
connect();
|
|
166
|
+
return link;
|
|
167
|
+
}
|
|
168
|
+
/** socket を使わず同じ SessionHub コアへ結ぶテスト用 link。 */
|
|
169
|
+
export function connectInProcessHub(hub) {
|
|
170
|
+
const client = {};
|
|
171
|
+
const link = {
|
|
172
|
+
onMessage: null,
|
|
173
|
+
onReconnect: null,
|
|
174
|
+
send(message) {
|
|
175
|
+
hub.handleClientMessage(client, JSON.stringify(message));
|
|
176
|
+
return true;
|
|
177
|
+
},
|
|
178
|
+
close() { hub.unregisterClient(client); },
|
|
179
|
+
};
|
|
180
|
+
hub.registerClient(client, (line) => {
|
|
181
|
+
const message = decodeHubServerLine(line);
|
|
182
|
+
if (message !== null)
|
|
183
|
+
link.onMessage?.(message);
|
|
184
|
+
});
|
|
185
|
+
return link;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=hubClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hubClient.js","sourceRoot":"","sources":["../../src/hub/hubClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { SessionHub } from "./sessionHub.js";
|
|
3
|
+
import { LineWriter } from "../shared/lineWriter.js";
|
|
4
|
+
import { type ControlMessage } from "../protocol.js";
|
|
5
|
+
export interface HubLock {
|
|
6
|
+
pid: number;
|
|
7
|
+
version: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function defaultHubLockPath(): string;
|
|
10
|
+
export declare function defaultPendingQuestionsPath(): string;
|
|
11
|
+
export declare function defaultChatReceiptsPath(): string;
|
|
12
|
+
/**
|
|
13
|
+
* LineWriter の canonical flat wire を Hub 内部の ControlMessage へ戻す adapter。
|
|
14
|
+
*
|
|
15
|
+
* tool_activity / subagent_node は内部表現だけ nested で、wire は flat になる。
|
|
16
|
+
* JSON.parse の型 assertion だけでは activity/node が欠けた偽 ControlMessage を作るため、
|
|
17
|
+
* 必ず protocol decoder を通して境界を検証・復元する。
|
|
18
|
+
*/
|
|
19
|
+
export declare function controlMessageCallbackWriter(write: (message: ControlMessage) => void): LineWriter;
|
|
20
|
+
/** lockfile を読む。不在・壊れは null。 */
|
|
21
|
+
export declare function readHubLock(lockPath: string): HubLock | null;
|
|
22
|
+
/** 生存中の別 pid が所有していなければ lock を取得する。 */
|
|
23
|
+
export declare function acquireHubLock(lockPath: string, version: string | null, ownerPid?: number): boolean;
|
|
24
|
+
/** pid が生きているか。権限不足(EPERM)は生存扱い。 */
|
|
25
|
+
export declare function pidAlive(pid: number): boolean;
|
|
26
|
+
export interface HubSocketServer {
|
|
27
|
+
socketPath: string;
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export declare const HUB_SOCKET_WRITABLE_LENGTH_LIMIT: number;
|
|
31
|
+
export declare const HUB_SOCKET_CONVERSATION_EVENT_BATCH_SIZE = 16;
|
|
32
|
+
export declare const HUB_SOCKET_CONVERSATION_EVENT_FLUSH_INTERVAL_MS = 8;
|
|
33
|
+
interface HubWritableSocket {
|
|
34
|
+
readonly writableLength: number;
|
|
35
|
+
readonly destroyed: boolean;
|
|
36
|
+
write(line: string): unknown;
|
|
37
|
+
destroy(): unknown;
|
|
38
|
+
}
|
|
39
|
+
/** Hub から client へ書く直前に滞留量を検査し、遅延 client を切断する。 */
|
|
40
|
+
export declare function writeHubSocketLine(socket: HubWritableSocket, line: string, writableLengthLimit: number, log: (message: string) => void): void;
|
|
41
|
+
/**
|
|
42
|
+
* 大量の履歴 conversation_event を同期的に socket へ積むと、後着した pane_preview が
|
|
43
|
+
* history-done の後ろまで待たされる。履歴だけを小分けにし、ライブ状態・RPC応答は
|
|
44
|
+
* 直送して追い越せるようにする。conversation_event 同士の順序は FIFO で維持する。
|
|
45
|
+
*/
|
|
46
|
+
export declare function createPrioritizedHubSocketWriter(socket: HubWritableSocket, writableLengthLimit: number, log: (message: string) => void, options?: {
|
|
47
|
+
batchSize?: number;
|
|
48
|
+
flushIntervalMs?: number;
|
|
49
|
+
}): (line: string) => void;
|
|
50
|
+
/** engine 接続の各行を SessionHub コアへ渡す NDJSON socket。 */
|
|
51
|
+
export declare function startHubSocket(options: {
|
|
52
|
+
hub: SessionHub;
|
|
53
|
+
socketPath?: string;
|
|
54
|
+
version: string | null;
|
|
55
|
+
bootId?: string;
|
|
56
|
+
log?: (message: string) => void;
|
|
57
|
+
writableLengthLimit?: number;
|
|
58
|
+
}): Promise<HubSocketServer | null>;
|
|
59
|
+
export interface EnsureHubDaemonOptions {
|
|
60
|
+
lockPath?: string;
|
|
61
|
+
cliPath?: string;
|
|
62
|
+
logPath?: string;
|
|
63
|
+
spawnImpl?: typeof spawn;
|
|
64
|
+
}
|
|
65
|
+
/** engine / hook から Hub の常駐を冪等・best-effort で保証する。 */
|
|
66
|
+
export declare function ensureHubDaemon(options?: EnsureHubDaemonOptions): void;
|
|
67
|
+
/** `tailii hub` エントリ。 */
|
|
68
|
+
export declare function runHubCommand(args: string[]): Promise<number>;
|
|
69
|
+
export {};
|