tailii-host 0.1.1 → 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 +27 -10
- 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,65 @@
|
|
|
1
|
+
/** シム生成の結果。 */
|
|
2
|
+
export type ShimResult = "created" | "updated" | "unchanged" | "skipped-foreign";
|
|
3
|
+
/** シムの内容を組み立てる(node 絶対パス + cli.js 絶対パス固定)。 */
|
|
4
|
+
export declare function shimContent(nodePath: string, cliPath: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* `<binDir>/tailii-host` シムを生成する(冪等)。
|
|
7
|
+
* 既存内容が一致すれば何もしない。マーカーの無い既存ファイルは上書きしない
|
|
8
|
+
* (ユーザーが自前管理しているシムを壊さないため)。
|
|
9
|
+
*/
|
|
10
|
+
export declare function ensureHostShim(binDir: string, nodePath: string, cliPath: string): ShimResult;
|
|
11
|
+
/** この実行自身の dist/cli.js 絶対パス(シムの exec 先)。 */
|
|
12
|
+
export declare function resolveOwnCliPath(): string;
|
|
13
|
+
/** 既定のシム設置ディレクトリ(iOS 側 `HostControlCommand` の規約と対)。 */
|
|
14
|
+
export declare function defaultShimBinDir(): string;
|
|
15
|
+
/**
|
|
16
|
+
* PATH 文字列からコマンドの実体を探す(`command -v` 相当)。見つからなければ null。
|
|
17
|
+
*/
|
|
18
|
+
export declare function findCommand(name: string, envPath: string): string | null;
|
|
19
|
+
/** TCP ポートへ接続できるか(リモートログイン=sshd の稼働検査に使う)。 */
|
|
20
|
+
export declare function checkTcpPort(host: string, port: number, timeoutMs?: number): Promise<boolean>;
|
|
21
|
+
/** 1 検査項目の結果。 */
|
|
22
|
+
export interface DoctorCheck {
|
|
23
|
+
/** wire/UI でも安定して使える識別子。表示名は変更可能なので id と分離する。 */
|
|
24
|
+
id: string;
|
|
25
|
+
/** 表示名。 */
|
|
26
|
+
label: string;
|
|
27
|
+
ok: boolean;
|
|
28
|
+
/** 必須項目か(false は情報提供のみで exit code に影響しない)。 */
|
|
29
|
+
required: boolean;
|
|
30
|
+
/** 詳細(見つかったパス、または直し方のヒント)。 */
|
|
31
|
+
detail: string;
|
|
32
|
+
/** ホスト側で行う対処。コマンドの場合は説明と混ぜず、そのまま実行できる 1 行にする。 */
|
|
33
|
+
remediation?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Tailii が依存している/相互運用を確認済みの最低版。最新版追従ではなく互換性境界。 */
|
|
36
|
+
export declare const MINIMUM_NODE_MAJOR = 20;
|
|
37
|
+
export declare const MINIMUM_CLAUDE_CLI_VERSION = "2.1.215";
|
|
38
|
+
export declare const MINIMUM_CODEX_CLI_VERSION = "0.144.5";
|
|
39
|
+
export declare const MINIMUM_HERDR_VERSION = "0.7.5";
|
|
40
|
+
/** launchctl の応答がなくても診断全体を止めない上限。 */
|
|
41
|
+
export declare const DOCTOR_QUIC_STATUS_TIMEOUT_MS = 2000;
|
|
42
|
+
/** `--version` の先頭に現れる数値版を比較用の整数列へ変換する。 */
|
|
43
|
+
export declare function parseNumericVersion(raw: string | null): number[] | null;
|
|
44
|
+
/** prerelease の飾りは無視し、数値成分だけで `actual >= minimum` を判定する。 */
|
|
45
|
+
export declare function versionAtLeast(actual: string | null, minimum: string): boolean | null;
|
|
46
|
+
/**
|
|
47
|
+
* 診断用の短いバージョン取得。
|
|
48
|
+
* 実体パスを直接起動しつつ、`#!/usr/bin/env node` 等のシバンにも検査時の PATH を渡す。
|
|
49
|
+
*/
|
|
50
|
+
export declare function probeVersion(command: string | null, args: readonly string[], envPath: string): Promise<string | null>;
|
|
51
|
+
export type VersionCompatibility = "compatible" | "outdated" | "unknown" | "missing";
|
|
52
|
+
/** コマンドの有無と解析結果を区別し、形式不明を互換扱いしない。 */
|
|
53
|
+
export declare function versionCompatibility(command: string | null, rawVersion: string | null, minimum: string): VersionCompatibility;
|
|
54
|
+
/** 見つかったパッケージマネージャーに合わせた tmux 導入手順。 */
|
|
55
|
+
export declare function tmuxInstallRemediation(envPath: string): string;
|
|
56
|
+
/** macOS / Linux を取り違えない SSH サーバーの起動手順。 */
|
|
57
|
+
export declare function sshServerRemediation(envPath: string, platform?: NodeJS.Platform): string;
|
|
58
|
+
/** herdr は直接導入とパッケージ管理下で更新手順が異なる。 */
|
|
59
|
+
export declare function herdrRemediation(command: string | null): string;
|
|
60
|
+
/** 全検査を実行する(副作用なし・シムは検査のみ)。 */
|
|
61
|
+
export declare function collectDoctorChecks(envPath?: string): Promise<DoctorCheck[]>;
|
|
62
|
+
/** 検査結果を人間向けに整形する。 */
|
|
63
|
+
export declare function formatDoctorChecks(checks: DoctorCheck[]): string;
|
|
64
|
+
/** `tailii doctor` エントリポイント。必須項目に ✗ があれば 1 を返す。 */
|
|
65
|
+
export declare function runDoctorCommand(_argv: string[]): Promise<number>;
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
// doctor.ts — 環境診断とホストシムの自動生成
|
|
2
|
+
//
|
|
3
|
+
// iPhone アプリは SSH 非対話シェルから `~/.local/bin/tailii-host` を exec する。
|
|
4
|
+
// 非対話シェルでは node が PATH に乗らないため、node 絶対パスを埋めた薄いシムを
|
|
5
|
+
// `tailii setup` が自動生成する(従来は手書き手順だった)。
|
|
6
|
+
//
|
|
7
|
+
// あわせて `tailii doctor` として、初回セットアップで詰まりやすい前提
|
|
8
|
+
// (tmux / claude / codex CLI・リモートログイン・シム)を機械検査する。
|
|
9
|
+
// 検査は launch.ts が SSH exec に注入するのと同じ PATH(defaultInjectedPath)で行う。
|
|
10
|
+
// エージェント側の実行環境と同じ条件で探すことで「ターミナルでは見えるが
|
|
11
|
+
// SSH 経由では見えない」タイプの偽陽性を避ける。
|
|
12
|
+
import * as fs from "node:fs";
|
|
13
|
+
import { execFile } from "node:child_process";
|
|
14
|
+
import * as net from "node:net";
|
|
15
|
+
import * as os from "node:os";
|
|
16
|
+
import * as path from "node:path";
|
|
17
|
+
import { fileURLToPath } from "node:url";
|
|
18
|
+
import { defaultInjectedPath } from "./launch.js";
|
|
19
|
+
import { resolveSessionBackendKind } from "../backend/sessionBackend.js";
|
|
20
|
+
/** 生成マーカー。これを含まない既存ファイルはユーザー管理とみなし上書きしない。 */
|
|
21
|
+
const SHIM_MARKER = "Tailii host launcher";
|
|
22
|
+
/** シムの内容を組み立てる(node 絶対パス + cli.js 絶対パス固定)。 */
|
|
23
|
+
export function shimContent(nodePath, cliPath) {
|
|
24
|
+
return ("#!/bin/sh\n" +
|
|
25
|
+
`# ${SHIM_MARKER} — generated by \`tailii setup\` (safe to regenerate)\n` +
|
|
26
|
+
`exec "${nodePath}" "${cliPath}" "$@"\n`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* `<binDir>/tailii-host` シムを生成する(冪等)。
|
|
30
|
+
* 既存内容が一致すれば何もしない。マーカーの無い既存ファイルは上書きしない
|
|
31
|
+
* (ユーザーが自前管理しているシムを壊さないため)。
|
|
32
|
+
*/
|
|
33
|
+
export function ensureHostShim(binDir, nodePath, cliPath) {
|
|
34
|
+
fs.mkdirSync(binDir, { recursive: true });
|
|
35
|
+
const shimPath = path.join(binDir, "tailii-host");
|
|
36
|
+
const content = shimContent(nodePath, cliPath);
|
|
37
|
+
let existing = null;
|
|
38
|
+
try {
|
|
39
|
+
existing = fs.readFileSync(shimPath, "utf8");
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
existing = null;
|
|
43
|
+
}
|
|
44
|
+
if (existing === content) {
|
|
45
|
+
fs.chmodSync(shimPath, 0o755);
|
|
46
|
+
return "unchanged";
|
|
47
|
+
}
|
|
48
|
+
if (existing !== null && !existing.includes(SHIM_MARKER))
|
|
49
|
+
return "skipped-foreign";
|
|
50
|
+
fs.writeFileSync(shimPath, content, { mode: 0o755 });
|
|
51
|
+
fs.chmodSync(shimPath, 0o755);
|
|
52
|
+
return existing === null ? "created" : "updated";
|
|
53
|
+
}
|
|
54
|
+
/** この実行自身の dist/cli.js 絶対パス(シムの exec 先)。 */
|
|
55
|
+
export function resolveOwnCliPath() {
|
|
56
|
+
return path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "cli.js");
|
|
57
|
+
}
|
|
58
|
+
/** 既定のシム設置ディレクトリ(iOS 側 `HostControlCommand` の規約と対)。 */
|
|
59
|
+
export function defaultShimBinDir() {
|
|
60
|
+
return path.join(os.homedir(), ".local/bin");
|
|
61
|
+
}
|
|
62
|
+
// MARK: - 環境検査(テスタブル)
|
|
63
|
+
/**
|
|
64
|
+
* PATH 文字列からコマンドの実体を探す(`command -v` 相当)。見つからなければ null。
|
|
65
|
+
*/
|
|
66
|
+
export function findCommand(name, envPath) {
|
|
67
|
+
for (const dir of envPath.split(":")) {
|
|
68
|
+
if (dir === "")
|
|
69
|
+
continue;
|
|
70
|
+
const candidate = path.join(dir, name);
|
|
71
|
+
try {
|
|
72
|
+
fs.accessSync(candidate, fs.constants.X_OK);
|
|
73
|
+
if (fs.statSync(candidate).isFile() || fs.lstatSync(candidate).isSymbolicLink())
|
|
74
|
+
return candidate;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// 次の PATH エントリへ。
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
/** TCP ポートへ接続できるか(リモートログイン=sshd の稼働検査に使う)。 */
|
|
83
|
+
export function checkTcpPort(host, port, timeoutMs = 1500) {
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
const socket = net.connect({ host, port });
|
|
86
|
+
const done = (ok) => {
|
|
87
|
+
socket.destroy();
|
|
88
|
+
resolve(ok);
|
|
89
|
+
};
|
|
90
|
+
socket.setTimeout(timeoutMs, () => done(false));
|
|
91
|
+
socket.once("connect", () => done(true));
|
|
92
|
+
socket.once("error", () => done(false));
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** Tailii が依存している/相互運用を確認済みの最低版。最新版追従ではなく互換性境界。 */
|
|
96
|
+
export const MINIMUM_NODE_MAJOR = 20;
|
|
97
|
+
export const MINIMUM_CLAUDE_CLI_VERSION = "2.1.215";
|
|
98
|
+
export const MINIMUM_CODEX_CLI_VERSION = "0.144.5";
|
|
99
|
+
export const MINIMUM_HERDR_VERSION = "0.7.5";
|
|
100
|
+
/** launchctl の応答がなくても診断全体を止めない上限。 */
|
|
101
|
+
export const DOCTOR_QUIC_STATUS_TIMEOUT_MS = 2_000;
|
|
102
|
+
/** `--version` の先頭に現れる数値版を比較用の整数列へ変換する。 */
|
|
103
|
+
export function parseNumericVersion(raw) {
|
|
104
|
+
if (raw === null)
|
|
105
|
+
return null;
|
|
106
|
+
const match = /\d+(?:\.\d+)+/.exec(raw);
|
|
107
|
+
if (match === null)
|
|
108
|
+
return null;
|
|
109
|
+
const parts = match[0].split(".").map(Number);
|
|
110
|
+
return parts.every(Number.isFinite) ? parts : null;
|
|
111
|
+
}
|
|
112
|
+
/** prerelease の飾りは無視し、数値成分だけで `actual >= minimum` を判定する。 */
|
|
113
|
+
export function versionAtLeast(actual, minimum) {
|
|
114
|
+
const left = parseNumericVersion(actual);
|
|
115
|
+
const right = parseNumericVersion(minimum);
|
|
116
|
+
if (left === null || right === null)
|
|
117
|
+
return null;
|
|
118
|
+
const length = Math.max(left.length, right.length);
|
|
119
|
+
for (let index = 0; index < length; index += 1) {
|
|
120
|
+
const l = left[index] ?? 0;
|
|
121
|
+
const r = right[index] ?? 0;
|
|
122
|
+
if (l > r)
|
|
123
|
+
return true;
|
|
124
|
+
if (l < r)
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 診断用の短いバージョン取得。
|
|
131
|
+
* 実体パスを直接起動しつつ、`#!/usr/bin/env node` 等のシバンにも検査時の PATH を渡す。
|
|
132
|
+
*/
|
|
133
|
+
export function probeVersion(command, args, envPath) {
|
|
134
|
+
if (command === null)
|
|
135
|
+
return Promise.resolve(null);
|
|
136
|
+
return new Promise((resolve) => {
|
|
137
|
+
execFile(command, [...args], {
|
|
138
|
+
cwd: os.homedir(),
|
|
139
|
+
timeout: 3_000,
|
|
140
|
+
maxBuffer: 64 * 1024,
|
|
141
|
+
env: {
|
|
142
|
+
...process.env,
|
|
143
|
+
PATH: [envPath, process.env["PATH"] ?? ""].filter(Boolean).join(":"),
|
|
144
|
+
},
|
|
145
|
+
}, (error, stdout, stderr) => {
|
|
146
|
+
if (error) {
|
|
147
|
+
resolve(null);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const output = String(stdout).trim() || String(stderr).trim();
|
|
151
|
+
resolve(output.length > 0 ? output.split("\n")[0]?.trim() ?? null : null);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function versionDetail(pathname, raw) {
|
|
156
|
+
return raw === null ? `バージョン確認に失敗 · ${pathname}` : `${raw} · ${pathname}`;
|
|
157
|
+
}
|
|
158
|
+
/** コマンドの有無と解析結果を区別し、形式不明を互換扱いしない。 */
|
|
159
|
+
export function versionCompatibility(command, rawVersion, minimum) {
|
|
160
|
+
if (command === null)
|
|
161
|
+
return "missing";
|
|
162
|
+
if (rawVersion === null)
|
|
163
|
+
return "unknown";
|
|
164
|
+
const comparison = versionAtLeast(rawVersion, minimum);
|
|
165
|
+
if (comparison === null)
|
|
166
|
+
return "unknown";
|
|
167
|
+
return comparison ? "compatible" : "outdated";
|
|
168
|
+
}
|
|
169
|
+
function minimumVersionDetail(pathname, rawVersion, minimum) {
|
|
170
|
+
const compatibility = versionCompatibility(pathname, rawVersion, minimum);
|
|
171
|
+
switch (compatibility) {
|
|
172
|
+
case "compatible":
|
|
173
|
+
return versionDetail(pathname, rawVersion);
|
|
174
|
+
case "outdated":
|
|
175
|
+
return `${rawVersion ?? "バージョン不明"}(${minimum} 以上が必要) · ${pathname}`;
|
|
176
|
+
case "unknown":
|
|
177
|
+
return rawVersion === null
|
|
178
|
+
? `バージョン確認に失敗 · ${pathname}`
|
|
179
|
+
: `${rawVersion}(バージョン形式を確認できません) · ${pathname}`;
|
|
180
|
+
case "missing":
|
|
181
|
+
return "見つかりません";
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/** 見つかったパッケージマネージャーに合わせた tmux 導入手順。 */
|
|
185
|
+
export function tmuxInstallRemediation(envPath) {
|
|
186
|
+
if (findCommand("brew", envPath) !== null)
|
|
187
|
+
return "brew install tmux";
|
|
188
|
+
if (findCommand("apt-get", envPath) !== null)
|
|
189
|
+
return "sudo apt-get install -y tmux";
|
|
190
|
+
if (findCommand("dnf", envPath) !== null)
|
|
191
|
+
return "sudo dnf install -y tmux";
|
|
192
|
+
if (findCommand("yum", envPath) !== null)
|
|
193
|
+
return "sudo yum install -y tmux";
|
|
194
|
+
if (findCommand("pacman", envPath) !== null)
|
|
195
|
+
return "sudo pacman -S --needed tmux";
|
|
196
|
+
if (findCommand("zypper", envPath) !== null)
|
|
197
|
+
return "sudo zypper install tmux";
|
|
198
|
+
return "ホストOSのパッケージマネージャーで tmux をインストールする";
|
|
199
|
+
}
|
|
200
|
+
/** macOS / Linux を取り違えない SSH サーバーの起動手順。 */
|
|
201
|
+
export function sshServerRemediation(envPath, platform = process.platform) {
|
|
202
|
+
if (platform === "darwin") {
|
|
203
|
+
return "システム設定 → 一般 → 共有 → リモートログイン をオンにする";
|
|
204
|
+
}
|
|
205
|
+
if (findCommand("apt-get", envPath) !== null) {
|
|
206
|
+
return "sudo apt-get install -y openssh-server && sudo systemctl enable --now ssh";
|
|
207
|
+
}
|
|
208
|
+
if (findCommand("dnf", envPath) !== null) {
|
|
209
|
+
return "sudo dnf install -y openssh-server && sudo systemctl enable --now sshd";
|
|
210
|
+
}
|
|
211
|
+
if (findCommand("yum", envPath) !== null) {
|
|
212
|
+
return "sudo yum install -y openssh-server && sudo systemctl enable --now sshd";
|
|
213
|
+
}
|
|
214
|
+
if (findCommand("pacman", envPath) !== null) {
|
|
215
|
+
return "sudo pacman -S --needed openssh && sudo systemctl enable --now sshd";
|
|
216
|
+
}
|
|
217
|
+
if (findCommand("zypper", envPath) !== null) {
|
|
218
|
+
return "sudo zypper install openssh && sudo systemctl enable --now sshd";
|
|
219
|
+
}
|
|
220
|
+
return "ホストOSの手順で SSH サーバーをインストールし、TCP 22 で起動する";
|
|
221
|
+
}
|
|
222
|
+
function nodeUpdateRemediation(envPath) {
|
|
223
|
+
if (findCommand("mise", envPath) !== null || process.execPath.includes("/mise/")) {
|
|
224
|
+
return "mise use -g node@24";
|
|
225
|
+
}
|
|
226
|
+
if (findCommand("brew", envPath) !== null)
|
|
227
|
+
return "brew upgrade node";
|
|
228
|
+
return "https://nodejs.org/en/download の手順で Node.js 20 以上へ更新する";
|
|
229
|
+
}
|
|
230
|
+
/** herdr は直接導入とパッケージ管理下で更新手順が異なる。 */
|
|
231
|
+
export function herdrRemediation(command) {
|
|
232
|
+
if (command === null)
|
|
233
|
+
return "curl -fsSL https://herdr.dev/install.sh | sh";
|
|
234
|
+
if (command.includes("/Cellar/")
|
|
235
|
+
|| command.includes("/homebrew/")
|
|
236
|
+
|| command.includes("/linuxbrew/")) {
|
|
237
|
+
return "brew upgrade herdr";
|
|
238
|
+
}
|
|
239
|
+
if (command.includes("/nix/store/"))
|
|
240
|
+
return "Nix の導入設定で herdr を更新する";
|
|
241
|
+
return "herdr update";
|
|
242
|
+
}
|
|
243
|
+
/** timeout 後も元 Promise の reject を捕捉し、未処理 rejection を残さない。 */
|
|
244
|
+
function resolveWithin(promise, timeoutMs, fallback) {
|
|
245
|
+
let timer;
|
|
246
|
+
const guarded = promise.catch(() => fallback);
|
|
247
|
+
const timeout = new Promise((resolve) => {
|
|
248
|
+
timer = setTimeout(() => resolve(fallback), Math.max(0, timeoutMs));
|
|
249
|
+
});
|
|
250
|
+
return Promise.race([guarded, timeout]).finally(() => {
|
|
251
|
+
if (timer !== undefined)
|
|
252
|
+
clearTimeout(timer);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
/** macOS 専用の任意 QUIC 診断。Linux では launchd 項目自体を表示しない。 */
|
|
256
|
+
async function collectDarwinQuicChecks() {
|
|
257
|
+
const { isQuicGatewayLoaded, quicCredentialsDir, resolveQuicGatewayBinary } = await import("../services/quicGateway.js");
|
|
258
|
+
const gatewayPath = resolveQuicGatewayBinary(process.env);
|
|
259
|
+
const credsDir = quicCredentialsDir();
|
|
260
|
+
const credsOk = ["cert.pem", "key.pem", "token"].every((name) => fs.existsSync(path.join(credsDir, name)));
|
|
261
|
+
const loaded = gatewayPath !== null
|
|
262
|
+
? await resolveWithin(isQuicGatewayLoaded(), DOCTOR_QUIC_STATUS_TIMEOUT_MS, false)
|
|
263
|
+
: false;
|
|
264
|
+
return [
|
|
265
|
+
{
|
|
266
|
+
id: "quic-binary",
|
|
267
|
+
label: "QUIC GW バイナリ(任意)",
|
|
268
|
+
ok: gatewayPath !== null,
|
|
269
|
+
required: false,
|
|
270
|
+
detail: gatewayPath ?? "未検出(SSH のみでも動作します)",
|
|
271
|
+
...(gatewayPath === null ? { remediation: "tailii setup" } : {}),
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
id: "quic-credentials",
|
|
275
|
+
label: "QUIC 資格情報(~/.tailii/quic)",
|
|
276
|
+
ok: credsOk,
|
|
277
|
+
required: false,
|
|
278
|
+
detail: credsOk ? credsDir : "未生成",
|
|
279
|
+
...(!credsOk ? { remediation: "tailii setup" } : {}),
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
id: "quic-service",
|
|
283
|
+
label: "QUIC GW 常駐(launchd)",
|
|
284
|
+
ok: loaded,
|
|
285
|
+
required: false,
|
|
286
|
+
detail: loaded ? "com.tailii.quic-gw 稼働中" : "未常駐",
|
|
287
|
+
...(!loaded ? { remediation: "tailii setup" } : {}),
|
|
288
|
+
},
|
|
289
|
+
];
|
|
290
|
+
}
|
|
291
|
+
/** 全検査を実行する(副作用なし・シムは検査のみ)。 */
|
|
292
|
+
export async function collectDoctorChecks(envPath = defaultInjectedPath()) {
|
|
293
|
+
const checks = [];
|
|
294
|
+
const nodeMajor = Number(process.versions.node.split(".")[0]);
|
|
295
|
+
const nodeRemediation = nodeUpdateRemediation(envPath);
|
|
296
|
+
checks.push({
|
|
297
|
+
id: "node",
|
|
298
|
+
label: `Node.js ${MINIMUM_NODE_MAJOR}+`,
|
|
299
|
+
ok: nodeMajor >= MINIMUM_NODE_MAJOR,
|
|
300
|
+
required: true,
|
|
301
|
+
detail: `v${process.versions.node}`,
|
|
302
|
+
...(nodeMajor >= MINIMUM_NODE_MAJOR ? {} : { remediation: nodeRemediation }),
|
|
303
|
+
});
|
|
304
|
+
const tmux = findCommand("tmux", envPath);
|
|
305
|
+
const herdr = findCommand("herdr", envPath);
|
|
306
|
+
const claude = findCommand("claude", envPath);
|
|
307
|
+
const codex = findCommand("codex", envPath);
|
|
308
|
+
const sshdPromise = checkTcpPort("127.0.0.1", 22);
|
|
309
|
+
const quicChecksPromise = process.platform === "darwin"
|
|
310
|
+
? collectDarwinQuicChecks().catch(() => [])
|
|
311
|
+
: Promise.resolve([]);
|
|
312
|
+
const [tmuxVersion, herdrVersion, claudeVersion, codexVersion] = await Promise.all([
|
|
313
|
+
probeVersion(tmux, ["-V"], envPath),
|
|
314
|
+
probeVersion(herdr, ["--version"], envPath),
|
|
315
|
+
probeVersion(claude, ["--version"], envPath),
|
|
316
|
+
probeVersion(codex, ["--version"], envPath),
|
|
317
|
+
]);
|
|
318
|
+
checks.push({
|
|
319
|
+
id: "tmux",
|
|
320
|
+
label: "tmux",
|
|
321
|
+
ok: tmux !== null,
|
|
322
|
+
required: true,
|
|
323
|
+
detail: tmux === null ? "見つかりません" : versionDetail(tmux, tmuxVersion),
|
|
324
|
+
...(tmux === null ? { remediation: tmuxInstallRemediation(envPath) } : {}),
|
|
325
|
+
});
|
|
326
|
+
// 端末バックエンドに herdr を選んでいる場合のみ必須(既定 tmux では情報提供のみ)。
|
|
327
|
+
const backendKind = resolveSessionBackendKind();
|
|
328
|
+
const herdrCompatibility = versionCompatibility(herdr, herdrVersion, MINIMUM_HERDR_VERSION);
|
|
329
|
+
const herdrVersionOK = herdrCompatibility === "compatible";
|
|
330
|
+
checks.push({
|
|
331
|
+
id: "herdr",
|
|
332
|
+
label: backendKind === "herdr" ? "herdr(backend=herdr)" : "herdr(任意)",
|
|
333
|
+
ok: herdrVersionOK,
|
|
334
|
+
required: backendKind === "herdr",
|
|
335
|
+
detail: herdr === null
|
|
336
|
+
? (backendKind === "herdr"
|
|
337
|
+
? "見つかりません(現在の backend には必要です)"
|
|
338
|
+
: "未導入(herdr backend を使う場合のみ必要)")
|
|
339
|
+
: minimumVersionDetail(herdr, herdrVersion, MINIMUM_HERDR_VERSION),
|
|
340
|
+
...(!herdrVersionOK
|
|
341
|
+
? { remediation: herdrRemediation(herdr) }
|
|
342
|
+
: {}),
|
|
343
|
+
});
|
|
344
|
+
const claudeVersionOK = versionCompatibility(claude, claudeVersion, MINIMUM_CLAUDE_CLI_VERSION) === "compatible";
|
|
345
|
+
const codexVersionOK = versionCompatibility(codex, codexVersion, MINIMUM_CODEX_CLI_VERSION) === "compatible";
|
|
346
|
+
checks.push({
|
|
347
|
+
id: "claude",
|
|
348
|
+
label: "claude CLI",
|
|
349
|
+
// 対応最低版を満たす Codex があれば、Claude 無しの Codex 専用運用も許す。
|
|
350
|
+
ok: claudeVersionOK,
|
|
351
|
+
required: !codexVersionOK,
|
|
352
|
+
detail: claude === null
|
|
353
|
+
? "見つかりません"
|
|
354
|
+
: minimumVersionDetail(claude, claudeVersion, MINIMUM_CLAUDE_CLI_VERSION),
|
|
355
|
+
...(!claudeVersionOK
|
|
356
|
+
? {
|
|
357
|
+
remediation: claude === null
|
|
358
|
+
? "curl -fsSL https://claude.ai/install.sh | bash"
|
|
359
|
+
: "claude update",
|
|
360
|
+
}
|
|
361
|
+
: {}),
|
|
362
|
+
});
|
|
363
|
+
checks.push({
|
|
364
|
+
id: "codex",
|
|
365
|
+
label: "codex CLI(任意)",
|
|
366
|
+
ok: codexVersionOK,
|
|
367
|
+
required: false,
|
|
368
|
+
detail: codex === null
|
|
369
|
+
? "未導入(Codex セッションを使う場合のみ必要)"
|
|
370
|
+
: minimumVersionDetail(codex, codexVersion, MINIMUM_CODEX_CLI_VERSION),
|
|
371
|
+
...(!codexVersionOK
|
|
372
|
+
? {
|
|
373
|
+
remediation: codex === null
|
|
374
|
+
? "curl -fsSL https://chatgpt.com/codex/install.sh | sh"
|
|
375
|
+
: "curl -fsSL https://chatgpt.com/codex/install.sh | sh",
|
|
376
|
+
}
|
|
377
|
+
: {}),
|
|
378
|
+
});
|
|
379
|
+
const sshdUp = await sshdPromise;
|
|
380
|
+
checks.push({
|
|
381
|
+
id: "remote-login",
|
|
382
|
+
label: "SSH サーバー(sshd:22)",
|
|
383
|
+
ok: sshdUp,
|
|
384
|
+
required: true,
|
|
385
|
+
detail: sshdUp ? "接続可" : "接続不可",
|
|
386
|
+
...(!sshdUp
|
|
387
|
+
? { remediation: sshServerRemediation(envPath) }
|
|
388
|
+
: {}),
|
|
389
|
+
});
|
|
390
|
+
const shimPath = path.join(defaultShimBinDir(), "tailii-host");
|
|
391
|
+
const shimOk = fs.existsSync(shimPath);
|
|
392
|
+
checks.push({
|
|
393
|
+
id: "host-shim",
|
|
394
|
+
label: "ホストシム(~/.local/bin/tailii-host)",
|
|
395
|
+
ok: shimOk,
|
|
396
|
+
required: true,
|
|
397
|
+
detail: shimOk ? shimPath : "未生成",
|
|
398
|
+
...(!shimOk ? { remediation: "tailii setup" } : {}),
|
|
399
|
+
});
|
|
400
|
+
// QUIC は macOS 専用の任意機能。SSH / version 検査と並行し、launchctl は上限付き。
|
|
401
|
+
checks.push(...await quicChecksPromise);
|
|
402
|
+
return checks;
|
|
403
|
+
}
|
|
404
|
+
/** 検査結果を人間向けに整形する。 */
|
|
405
|
+
export function formatDoctorChecks(checks) {
|
|
406
|
+
return checks
|
|
407
|
+
.map((c) => {
|
|
408
|
+
const line = ` ${c.ok ? "✓" : c.required ? "✗" : "-"} ${c.label} : ${c.detail}`;
|
|
409
|
+
return c.remediation === undefined ? line : `${line}\n 対処: ${c.remediation}`;
|
|
410
|
+
})
|
|
411
|
+
.join("\n");
|
|
412
|
+
}
|
|
413
|
+
/** `tailii doctor` エントリポイント。必須項目に ✗ があれば 1 を返す。 */
|
|
414
|
+
export async function runDoctorCommand(_argv) {
|
|
415
|
+
const checks = await collectDoctorChecks();
|
|
416
|
+
process.stdout.write("Tailii 環境診断:\n" + formatDoctorChecks(checks) + "\n");
|
|
417
|
+
const failed = checks.filter((c) => c.required && !c.ok);
|
|
418
|
+
if (failed.length > 0) {
|
|
419
|
+
process.stdout.write(`必須項目 ${failed.length} 件が未充足です。上のヒントに従って解消してください。\n`);
|
|
420
|
+
return 1;
|
|
421
|
+
}
|
|
422
|
+
process.stdout.write("問題は見つかりませんでした。\n");
|
|
423
|
+
return 0;
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,12 +29,25 @@ export declare function claudeHookLaunchSettings(options: {
|
|
|
29
29
|
* (`{ "hooks": { "PreToolUse": [...] } }`)でフックを実行する。stdin/permissionDecision も互換だが、
|
|
30
30
|
* codex は allow/ask を拒否し deny のみ有効なため、hook 側は `--agent codex` で allow を無出力にする。
|
|
31
31
|
* codex はフック完了を同期ブロックで待つので、承認プッシュ待ちがそのままゲートになる。
|
|
32
|
+
* command はセッション非依存の dispatcher 1 組だけにする。セッション名を command に埋め込むと、
|
|
33
|
+
* 同一 cwd で会話を開くたびに全 command hook が累積・並列実行され、同じ承認が複数届くため。
|
|
34
|
+
* 実セッションは Tailii 起動時に付ける `TAILII_SESSION` 環境変数から hook 側で解決する。
|
|
32
35
|
* グローバル `~/.codex/hooks.json`(ユーザーの既存フック)には触れない(非侵襲)。
|
|
33
36
|
*/
|
|
34
37
|
export declare function installCodexHookSettings(options: {
|
|
35
38
|
dir: string;
|
|
36
39
|
binaryPath: string;
|
|
37
|
-
session: string;
|
|
38
40
|
/** グローバル無効化マーカーのパス(注入可能)。省略時は `~/.tailii/nohook`。 */
|
|
39
41
|
globalMarkerPath?: string;
|
|
40
42
|
}): void;
|
|
43
|
+
/**
|
|
44
|
+
* 旧版 Tailii が `<dir>/.codex/hooks.json` に追加した Codex hook だけを除去する。
|
|
45
|
+
*
|
|
46
|
+
* Codex App Server は承認要求を server-initiated JSON-RPC request として配信するため、
|
|
47
|
+
* App Server 経路に PreToolUse hook を重ねると同じ承認が二重化する。無関係なユーザー hook は
|
|
48
|
+
* event/entry 内で混在していても保持し、Tailii hook を除いた結果が空なら hooks.json 自体を消す。
|
|
49
|
+
*/
|
|
50
|
+
export declare function removeCodexHookSettings(options: {
|
|
51
|
+
dir: string;
|
|
52
|
+
binaryPath: string;
|
|
53
|
+
}): void;
|