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,194 @@
|
|
|
1
|
+
// engine/handlers/mode.ts
|
|
2
|
+
// pane TUI との相互作用: permission mode の読み取り/切替(BTab 巡回)と、
|
|
3
|
+
// Codex TUI 番号付きダイアログへの選択返送(pane_choice_send)。
|
|
4
|
+
import { parsePermissionMode } from "../../shared/permissionMode.js";
|
|
5
|
+
import { sleep } from "../../shared/sleep.js";
|
|
6
|
+
import { engineDiag, writeError } from "../context.js";
|
|
7
|
+
export const modeHandlers = {
|
|
8
|
+
mode_get: async (message, ctx) => {
|
|
9
|
+
const { writer, state, sessionManager } = ctx;
|
|
10
|
+
const v = state.negotiatedVersion;
|
|
11
|
+
// 現在の permission mode を pane 表示から判定して返す(dialog 中は短く再試行)。
|
|
12
|
+
try {
|
|
13
|
+
const mode = await waitForPermissionMode(sessionManager, message.session, ctx.modeTiming.getAttempts, ctx.modeTiming.getPollMs);
|
|
14
|
+
if (mode === null) {
|
|
15
|
+
writeError(writer, v, message.id, "mode_unavailable", "ダイアログ表示中のためモードを判定できません");
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
writer.write({ type: "mode_set_response", v, id: message.id, mode });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
writeError(writer, v, message.id, "mode_get_failed", String(error));
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
mode_set: (message, ctx) => {
|
|
26
|
+
const { writer, state, sessionManager } = ctx;
|
|
27
|
+
const v = state.negotiatedVersion;
|
|
28
|
+
// mode_set は dialog 待ちが長くなり得るため、read loop を塞がず detached で処理する。
|
|
29
|
+
if (state.modeSetInFlight.has(message.session)) {
|
|
30
|
+
writeError(writer, v, message.id, "mode_set_busy", "mode_set が実行中です。");
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
state.modeSetInFlight.add(message.session);
|
|
34
|
+
void (async () => {
|
|
35
|
+
try {
|
|
36
|
+
const result = await setPermissionMode(sessionManager, message.session, message.mode, ctx.modeTiming);
|
|
37
|
+
if (result.kind === "unavailable") {
|
|
38
|
+
writeError(writer, v, message.id, "mode_unavailable", "ダイアログ表示中のためモードを判定できません");
|
|
39
|
+
}
|
|
40
|
+
else if (result.mode === null) {
|
|
41
|
+
writeError(writer, v, message.id, "mode_set_failed", "permission mode の切替に失敗しました。");
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
writer.write({ type: "mode_set_response", v, id: message.id, mode: result.mode });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
writeError(writer, v, message.id, "mode_set_failed", String(error));
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
state.modeSetInFlight.delete(message.session);
|
|
52
|
+
}
|
|
53
|
+
})();
|
|
54
|
+
},
|
|
55
|
+
pane_choice_send: async (message, ctx) => {
|
|
56
|
+
const { writer, state, sessionManager } = ctx;
|
|
57
|
+
const v = state.negotiatedVersion;
|
|
58
|
+
// Codex TUI の番号付きダイアログ(CLI 更新確認・フック信頼確認など)への選択返送。
|
|
59
|
+
// iOS の PTY(tmux attach) 束縛は herdr セッションでは効かないため、SessionBackend
|
|
60
|
+
// 経由で pane へ番号キー + Enter を注入する(tmux / herdr 両対応)。
|
|
61
|
+
engineDiag(`pane_choice_send id=${message.id} session=${message.session} key=${message.key}`);
|
|
62
|
+
if (!/^\d{1,3}$/.test(message.key)) {
|
|
63
|
+
writer.write({
|
|
64
|
+
type: "pane_choice_send_result", v, id: message.id,
|
|
65
|
+
ok: false, error: `不正な選択キーです: ${message.key}`,
|
|
66
|
+
});
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
await sessionManager.sendKeys(message.session, [message.key], true);
|
|
71
|
+
// ダイアログの再描画を待ってから確定する(連続注入の取りこぼし防止。
|
|
72
|
+
// 番号キーだけで確定するダイアログでは、遅れて届く Enter は入力欄への
|
|
73
|
+
// 空 submit となり no-op)。
|
|
74
|
+
await sleep(120);
|
|
75
|
+
await sessionManager.sendKeys(message.session, ["Enter"]);
|
|
76
|
+
writer.write({ type: "pane_choice_send_result", v, id: message.id, ok: true, error: null });
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
engineDiag(`pane_choice_send 失敗 id=${message.id}: ${String(error)}`);
|
|
80
|
+
writer.write({
|
|
81
|
+
type: "pane_choice_send_result", v, id: message.id, ok: false, error: String(error),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
pane_key_send: async (message, ctx) => {
|
|
86
|
+
const { writer, state, sessionManager } = ctx;
|
|
87
|
+
const v = state.negotiatedVersion;
|
|
88
|
+
// 制御キー(中断 C-c 等)の pane 注入。iOS の PTY(tmux attach) 束縛は herdr
|
|
89
|
+
// セッションでは attach 失敗後の生シェルに吸われて claude へ届かないため、
|
|
90
|
+
// pane_choice_send と同じく SessionBackend 経由で注入する(tmux / herdr 両対応)。
|
|
91
|
+
engineDiag(`pane_key_send id=${message.id} session=${message.session} key=${message.key}`);
|
|
92
|
+
if (!PANE_KEY_ALLOWLIST.has(message.key)) {
|
|
93
|
+
writer.write({
|
|
94
|
+
type: "pane_key_send_result", v, id: message.id,
|
|
95
|
+
ok: false, error: `不正なキーです: ${message.key}`,
|
|
96
|
+
});
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
await sessionManager.sendKeys(message.session, [message.key]);
|
|
101
|
+
writer.write({ type: "pane_key_send_result", v, id: message.id, ok: true, error: null });
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
engineDiag(`pane_key_send 失敗 id=${message.id}: ${String(error)}`);
|
|
105
|
+
writer.write({
|
|
106
|
+
type: "pane_key_send_result", v, id: message.id, ok: false, error: String(error),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* pane_key_send が受理する制御キー(tmux 互換キー名)。テキスト注入経路には使わせない。
|
|
113
|
+
* Up/Down/Enter は Claude TUI の選択ダイアログ(/remote-control 等)の転写カードから
|
|
114
|
+
* カーソル移動 + 確定を返すために使う(pane-menu 転写, 2026-07-28)。
|
|
115
|
+
*/
|
|
116
|
+
const PANE_KEY_ALLOWLIST = new Set(["C-c", "Escape", "Up", "Down", "Enter"]);
|
|
117
|
+
/**
|
|
118
|
+
* pane から mode が判定できるまで、指定回数だけ短く待つ。
|
|
119
|
+
*
|
|
120
|
+
* capture の失敗は「まだ判定できない」として次の試行へ進む: 新規セッションでは
|
|
121
|
+
* アプリの楽観オープン(mode_get)が launch のメタデータ記録より先に届き、
|
|
122
|
+
* backend 未記録 → tmux フォールバック → pane 不在で capture が throw する
|
|
123
|
+
* (mode-get-race, 2026-08-03)。メタが書かれれば次試行が正しい backend へ乗る。
|
|
124
|
+
* 一度も capture できずに終わったときだけ、最後の失敗を投げて実障害として返す。
|
|
125
|
+
*/
|
|
126
|
+
async function waitForPermissionMode(sessionManager, session, attempts, intervalMs) {
|
|
127
|
+
let captured = false;
|
|
128
|
+
let lastError = null;
|
|
129
|
+
for (let i = 0; i < attempts; i += 1) {
|
|
130
|
+
try {
|
|
131
|
+
const mode = parsePermissionMode(await sessionManager.capturePane(session));
|
|
132
|
+
captured = true;
|
|
133
|
+
if (mode !== null)
|
|
134
|
+
return mode;
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
lastError = error;
|
|
138
|
+
}
|
|
139
|
+
if (i < attempts - 1)
|
|
140
|
+
await sleep(intervalMs);
|
|
141
|
+
}
|
|
142
|
+
if (!captured && lastError !== null)
|
|
143
|
+
throw lastError;
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
/** mode_set の実体。dialog が閉じるのを待ち、BTab 後は実際に変化した mode だけを採用する。 */
|
|
147
|
+
async function setPermissionMode(sessionManager, session, target, timing) {
|
|
148
|
+
let current = null;
|
|
149
|
+
let captureFailureLogged = false;
|
|
150
|
+
const initialDeadline = Date.now() + timing.setInitialTimeoutMs;
|
|
151
|
+
while (Date.now() <= initialDeadline) {
|
|
152
|
+
try {
|
|
153
|
+
current = parsePermissionMode(await sessionManager.capturePane(session));
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
// 起動直後はメタ未記録で capture が失敗し得る(mode-get-race)。deadline まで待つ。
|
|
157
|
+
// 実死亡セッションだと deadline まで失敗し続けて unavailable になるため、
|
|
158
|
+
// 実因(pane 不在等)を診断ログへ一度だけ残す。
|
|
159
|
+
if (!captureFailureLogged) {
|
|
160
|
+
captureFailureLogged = true;
|
|
161
|
+
engineDiag(`mode_set capture 失敗(リトライ継続) session=${session}: ${String(error)}`);
|
|
162
|
+
}
|
|
163
|
+
current = null;
|
|
164
|
+
}
|
|
165
|
+
if (current !== null)
|
|
166
|
+
break;
|
|
167
|
+
await sleep(timing.setInitialPollMs);
|
|
168
|
+
}
|
|
169
|
+
if (current === null)
|
|
170
|
+
return { kind: "unavailable" };
|
|
171
|
+
if (current === target)
|
|
172
|
+
return { kind: "ok", mode: target };
|
|
173
|
+
for (let i = 0; i < 4 && current !== target; i += 1) {
|
|
174
|
+
const before = current;
|
|
175
|
+
await sessionManager.sendKeys(session, ["BTab"]);
|
|
176
|
+
const changeDeadline = Date.now() + timing.setChangeTimeoutMs;
|
|
177
|
+
let changed = false;
|
|
178
|
+
while (Date.now() <= changeDeadline) {
|
|
179
|
+
const next = parsePermissionMode(await sessionManager.capturePane(session));
|
|
180
|
+
// BTab 直後はステータス行が一瞬消える。判定不能を失敗や default とせず、
|
|
181
|
+
// 明示的な次モードが描画されるまで待つ。
|
|
182
|
+
if (next !== null && next !== before) {
|
|
183
|
+
current = next;
|
|
184
|
+
changed = true;
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
await sleep(timing.setChangePollMs);
|
|
188
|
+
}
|
|
189
|
+
if (!changed)
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
return { kind: "ok", mode: current };
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../../src/engine/handlers/mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// engine/handlers/officialApps.ts
|
|
2
|
+
// Claude / ChatGPT 公式アプリ連携: 状態問い合わせと action 実行。
|
|
3
|
+
// action 実行の前後でフォーカス・provider・生存を再検証し、別セッションへ
|
|
4
|
+
// URL / pairing material を返さない。
|
|
5
|
+
import { officialAppRuntimeContext } from "../context.js";
|
|
6
|
+
export const officialAppHandlers = {
|
|
7
|
+
official_app_status_request: async (message, ctx) => {
|
|
8
|
+
const { writer, state } = ctx;
|
|
9
|
+
const v = state.negotiatedVersion;
|
|
10
|
+
if (ctx.officialApps === null) {
|
|
11
|
+
writer.write({
|
|
12
|
+
type: "official_app_status_response",
|
|
13
|
+
v,
|
|
14
|
+
id: message.id,
|
|
15
|
+
provider: message.provider,
|
|
16
|
+
state: "unavailable",
|
|
17
|
+
canOpen: false,
|
|
18
|
+
canStart: false,
|
|
19
|
+
unavailableReason: "official_feature_unavailable",
|
|
20
|
+
});
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const resolved = await officialAppRuntimeContext(ctx, message.session, message.provider);
|
|
24
|
+
const status = "reason" in resolved
|
|
25
|
+
? {
|
|
26
|
+
provider: message.provider,
|
|
27
|
+
state: "unavailable",
|
|
28
|
+
canOpen: false,
|
|
29
|
+
canStart: false,
|
|
30
|
+
unavailableReason: resolved.reason,
|
|
31
|
+
}
|
|
32
|
+
: await ctx.officialApps.status(resolved.context);
|
|
33
|
+
writer.write({ type: "official_app_status_response", v, id: message.id, ...status });
|
|
34
|
+
},
|
|
35
|
+
official_app_action_request: async (message, ctx) => {
|
|
36
|
+
const { writer, state } = ctx;
|
|
37
|
+
const v = state.negotiatedVersion;
|
|
38
|
+
if (ctx.officialApps === null) {
|
|
39
|
+
writer.write({
|
|
40
|
+
type: "official_app_action_response",
|
|
41
|
+
v,
|
|
42
|
+
id: message.id,
|
|
43
|
+
provider: message.provider,
|
|
44
|
+
outcome: "unavailable",
|
|
45
|
+
unavailableReason: "official_feature_unavailable",
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const before = await officialAppRuntimeContext(ctx, message.session, message.provider);
|
|
50
|
+
if ("reason" in before) {
|
|
51
|
+
writer.write({
|
|
52
|
+
type: "official_app_action_response",
|
|
53
|
+
v,
|
|
54
|
+
id: message.id,
|
|
55
|
+
provider: message.provider,
|
|
56
|
+
outcome: "unavailable",
|
|
57
|
+
unavailableReason: before.reason,
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const result = await ctx.officialApps.perform(before.context, message.action, message.automaticEnable, message.paired);
|
|
62
|
+
// 外部 CLI / pane 操作の間に対象が失われた場合、別セッションへ URL や
|
|
63
|
+
// pairing material を返さない。再フォーカス後の再試行だけを許す。
|
|
64
|
+
const after = await officialAppRuntimeContext(ctx, message.session, message.provider);
|
|
65
|
+
if ("reason" in after) {
|
|
66
|
+
writer.write({
|
|
67
|
+
type: "official_app_action_response",
|
|
68
|
+
v,
|
|
69
|
+
id: message.id,
|
|
70
|
+
provider: message.provider,
|
|
71
|
+
outcome: "unavailable",
|
|
72
|
+
unavailableReason: after.reason,
|
|
73
|
+
});
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
writer.write({ type: "official_app_action_response", v, id: message.id, ...result });
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=officialApps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"officialApps.js","sourceRoot":"","sources":["../../../src/engine/handlers/officialApps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// engine/handlers/preview.ts
|
|
2
|
+
// Web プレビューと開発サーバー: loopback 静的配信の開始/終了、LISTEN 中サーバーの
|
|
3
|
+
// 一覧(serve-list)と停止(pid+port 照合)。
|
|
4
|
+
import { listServeProcesses, stopServeProcess } from "../../services/serveService.js";
|
|
5
|
+
import { engineDiag } from "../context.js";
|
|
6
|
+
export const previewHandlers = {
|
|
7
|
+
preview_open: async (message, ctx) => {
|
|
8
|
+
const { writer, state } = ctx;
|
|
9
|
+
const v = state.negotiatedVersion;
|
|
10
|
+
// Web プレビュー: HTML ファイルの loopback 静的配信を開始し、到達 URL を返す。
|
|
11
|
+
// iOS はこの URL の port へ direct-tcpip トンネルを張って開く。
|
|
12
|
+
try {
|
|
13
|
+
const { url } = await ctx.previewServer.open(message.id, message.target);
|
|
14
|
+
writer.write({ type: "preview_ready", v, id: message.id, url });
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
18
|
+
try {
|
|
19
|
+
writer.write({ type: "preview_error", v, id: message.id, message: detail });
|
|
20
|
+
}
|
|
21
|
+
catch (writeError) {
|
|
22
|
+
process.stderr.write(`[tailii-host engine] preview_error 書込失敗: ${String(writeError)}\n`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
preview_close: async (message, ctx) => {
|
|
27
|
+
await ctx.previewServer.close(message.id);
|
|
28
|
+
},
|
|
29
|
+
serve_list_request: async (message, ctx) => {
|
|
30
|
+
const { writer, state } = ctx;
|
|
31
|
+
const v = state.negotiatedVersion;
|
|
32
|
+
// Mac 上で LISTEN 中の開発サーバー一覧(serve-list)。engine 自身
|
|
33
|
+
// (previewServer の loopback 静的サーバー含む)は除外する。
|
|
34
|
+
engineDiag(`serve_list_request id=${message.id}`);
|
|
35
|
+
try {
|
|
36
|
+
const servers = await listServeProcesses({ excludePids: [process.pid], withTitles: true });
|
|
37
|
+
writer.write({ type: "serve_list_response", v, id: message.id, servers });
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
engineDiag(`serve_list_response 失敗 id=${message.id}: ${String(error)}`);
|
|
41
|
+
writer.write({ type: "serve_list_response", v, id: message.id, servers: [] });
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
serve_stop_request: async (message, ctx) => {
|
|
45
|
+
const { writer, state } = ctx;
|
|
46
|
+
const v = state.negotiatedVersion;
|
|
47
|
+
// 開発サーバーの停止。pid+port の現在照合つき(pid 再利用の誤爆防止)。
|
|
48
|
+
engineDiag(`serve_stop_request id=${message.id} pid=${message.pid} port=${message.port}`);
|
|
49
|
+
try {
|
|
50
|
+
const result = await stopServeProcess(message.pid, message.port);
|
|
51
|
+
writer.write({ type: "serve_stop_response", v, id: message.id, ...result });
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
engineDiag(`serve_stop_response 失敗 id=${message.id}: ${String(error)}`);
|
|
55
|
+
writer.write({ type: "serve_stop_response", v, id: message.id, ok: false, error: String(error) });
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/engine/handlers/preview.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,sDAAsD;AACtD,kCAAkC;AAElC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,UAAU,EAAwB,MAAM,eAAe,CAAC;AAEjE,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACnC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC;QAClC,sDAAsD;QACtD,gDAAgD;QAChD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACzE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9E,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4CAA4C,MAAM,CAAC,UAAU,CAAC,IAAI,CACnE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC;QAClC,iDAAiD;QACjD,4CAA4C;QAC5C,UAAU,CAAC,yBAAyB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3F,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,6BAA6B,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC;QAClC,4CAA4C;QAC5C,UAAU,CAAC,yBAAyB,OAAO,CAAC,EAAE,QAAQ,OAAO,CAAC,GAAG,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,6BAA6B,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;CACF,CAAC"}
|