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 @@
|
|
|
1
|
+
{"version":3,"file":"serveService.js","sourceRoot":"","sources":["../../src/services/serveService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usageAggregator.js","sourceRoot":"","sources":["../../src/services/usageAggregator.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,mDAAmD;AACnD,qCAAqC;AACrC,8DAA8D;AAE9D,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAY9B,MAAM,UAAU,gBAAgB;IAC9B,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACnG,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,cAAsB;IACnD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,MAAmB;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO;IACpD,MAAM,OAAO,GAAI,GAA+B,CAAC,SAAS,CAAC,CAAC;IAC5D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO;IAC5D,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,WAAW;QAAE,OAAO;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IACxD,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,eAAe,IAAI,YAAY,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,mBAAmB,IAAI,YAAY,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { ClaudeSessionInfo } from "../protocol.js";
|
|
2
|
+
/** slug(`/`→`-` 置換済み)から cwd を復元する(lossy フォールバック)。 */
|
|
3
|
+
export declare function cwdFromSlug(slug: string): string;
|
|
4
|
+
/** Claude Code のマシン内会話一覧を導出する値型サービス。 */
|
|
5
|
+
export declare class ClaudeSessionStore {
|
|
6
|
+
private readonly root;
|
|
7
|
+
constructor(root?: string);
|
|
8
|
+
/**
|
|
9
|
+
* 指定会話 ID の jsonl パスを projects root から探す。見つからない場合は null。
|
|
10
|
+
*
|
|
11
|
+
* 同一 id が複数 slug に在り得る(duplicate-transcript: worktree 削除後の resume で
|
|
12
|
+
* transcript を repo ルートへ移設すると、worktree 側 slug に状態行だけの残骸が残る)。
|
|
13
|
+
* その場合は**会話本体(timestamp 行)を持つ方**を返す。readdir 順の先勝ちだと、
|
|
14
|
+
* 残骸を掴んで検索・タブ名同期・再移設が空振りする。
|
|
15
|
+
*/
|
|
16
|
+
transcriptPath(sessionId: string): string | null;
|
|
17
|
+
/**
|
|
18
|
+
* 会話一覧を updatedAt 降順で返す(nil は末尾、同値は sessionId 昇順で安定化)。
|
|
19
|
+
* `baseDir` 指定時は cwd が baseDir 自身/配下の会話のみに絞る(engine は無指定で呼ぶ)。
|
|
20
|
+
* 同一 sessionId が複数 slug に在る場合は 1 行へ畳む(duplicate-transcript,
|
|
21
|
+
* `transcriptPath` と同じ「会話本体を持つ方が正」の判定)。
|
|
22
|
+
*/
|
|
23
|
+
list(baseDir?: string): ClaudeSessionInfo[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* transcript の「最終会話時刻」(Unix 秒)を末尾から後方スキャンで解決する。
|
|
27
|
+
* 権威はエントリ自身の `timestamp` フィールド(user/assistant/system 行が持つ)。
|
|
28
|
+
* ファイル mtime は使わない: `claude --resume` は開くだけで `mode`/`last-prompt` 等の
|
|
29
|
+
* タイムスタンプ無し状態行を追記して mtime を進めるため、mtime を順位に使うと
|
|
30
|
+
* 「開いただけの会話」が実会話より上に浮く(2026-07-08 ユーザー報告の根治)。
|
|
31
|
+
* - 全体を読み切って timestamp 行が無い = 状態行のみ(会話なし)→ null(最下位へ)
|
|
32
|
+
* - 上限まで読んでも見つからない(巨大な無 timestamp 行)→ mtime へ保守的にフォールバック
|
|
33
|
+
*/
|
|
34
|
+
export declare function lastConversationTimestamp(filePath: string): number | null;
|
|
35
|
+
/**
|
|
36
|
+
* transcript 内の明示タイトルエントリの観測結果。
|
|
37
|
+
* `custom-title` は CLI の `/rename` / hook の sessionTitle 出力、`ai-title` は
|
|
38
|
+
* CLI 内蔵の AI タイトル生成(公式アプリ/IDE 接続時に発火)が書く。
|
|
39
|
+
* undefined = 未出現 / null = 解除(空文字エントリ)/ string = 設定値。
|
|
40
|
+
*/
|
|
41
|
+
export interface TranscriptTitleEntries {
|
|
42
|
+
customTitle?: string | null;
|
|
43
|
+
aiTitle?: string | null;
|
|
44
|
+
}
|
|
45
|
+
/** 末尾後方スキャンの結果(最終会話時刻 + 最終メッセージのスニペット + 明示タイトル)。 */
|
|
46
|
+
export interface TranscriptTailSummary extends TranscriptTitleEntries {
|
|
47
|
+
updatedAt: number | null;
|
|
48
|
+
lastMessage: string | null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* transcript 末尾の後方スキャンを 1 パスで行い、最終会話時刻と
|
|
52
|
+
* 最終 user/assistant メッセージ本文(先頭 ~80 字, list-preview)をまとめて返す。
|
|
53
|
+
* updatedAt の解決規則は `lastConversationTimestamp` の docstring の通り。
|
|
54
|
+
* lastMessage はテキストを持つ最後の user/assistant 行から取る(tool_result/thinking
|
|
55
|
+
* のみの行はテキスト抽出に失敗して自然に skip される)。見つからなければ null。
|
|
56
|
+
*/
|
|
57
|
+
export declare function scanTranscriptTail(filePath: string): TranscriptTailSummary;
|
|
58
|
+
/** 先頭チャンクスキャンの結果(cwd と会話タイトル + 明示タイトル)。 */
|
|
59
|
+
export interface TranscriptHeadSummary extends TranscriptTitleEntries {
|
|
60
|
+
cwd: string | null;
|
|
61
|
+
title: string | null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* transcript 先頭チャンクから cwd と会話タイトル(最初のユーザー発話 先頭 ~60 字)を読む。
|
|
65
|
+
* 一覧の title 導出と herdr タブ名の自動タイトル同期(session-title)が共用する。
|
|
66
|
+
*/
|
|
67
|
+
export declare function scanTranscriptHead(filePath: string): TranscriptHeadSummary;
|
|
68
|
+
/**
|
|
69
|
+
* 明示タイトル(custom-title / ai-title エントリ)を解決する。
|
|
70
|
+
* 末尾チャンクの観測はファイル内でより新しいため先頭チャンクより優先し、
|
|
71
|
+
* custom-title(/rename・hook 由来)を ai-title より優先する。
|
|
72
|
+
* custom-title が解除(null)の場合は ai-title へフォールバックする。
|
|
73
|
+
* どちらの窓にも無ければ null(呼び出し側が従来の導出へフォールバック)。
|
|
74
|
+
*/
|
|
75
|
+
export declare function resolveExplicitTitle(head: TranscriptTitleEntries, tail: TranscriptTitleEntries): string | null;
|
|
76
|
+
/**
|
|
77
|
+
* 会話タイトルを 1 発で解決する(明示タイトル優先 → 最初のユーザー発話 → null)。
|
|
78
|
+
* herdr タブ名の自動タイトル同期など、一覧以外の呼び出し側が使う。
|
|
79
|
+
*/
|
|
80
|
+
export declare function transcriptTitle(filePath: string): string | null;
|
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
// claudeSessionStore.ts
|
|
2
|
+
// tailii (TS host) — Claude Code のマシン内会話一覧の導出(claude-sessions)
|
|
3
|
+
// Swift 版 ClaudeSessionStore.swift の移植。
|
|
4
|
+
// `~/.claude/projects/<slug>/<uuid>.jsonl` を列挙し、各 jsonl の先頭チャンクから
|
|
5
|
+
// ClaudeSessionInfo(sessionId / cwd / title / updatedAt)を導出して updatedAt 降順で返す。
|
|
6
|
+
import * as fs from "node:fs";
|
|
7
|
+
import * as os from "node:os";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import { isInsideBase } from "../shared/paths.js";
|
|
10
|
+
import { isInjectedSkillContent } from "../shared/skillInjection.js";
|
|
11
|
+
/** タイトル抽出の最大長(先頭 ~60 字)。 */
|
|
12
|
+
const TITLE_MAX_LENGTH = 60;
|
|
13
|
+
/** 明示タイトル(custom-title / ai-title)の受け入れ上限(コードポイント数)。 */
|
|
14
|
+
const EXPLICIT_TITLE_MAX_LENGTH = 100;
|
|
15
|
+
/** 最終メッセージプレビューの最大長(一覧行の 1 行スニペット, list-preview)。 */
|
|
16
|
+
const LAST_MESSAGE_MAX_LENGTH = 80;
|
|
17
|
+
/** cwd/title を探すためにスキャンする最大行数。 */
|
|
18
|
+
const SCAN_LINE_CAP = 400;
|
|
19
|
+
/** jsonl から先頭を読む最大バイト数(1 ファイル数十MBになり得るため全読みを避ける)。 */
|
|
20
|
+
const HEAD_BYTES_CAP = 256 * 1024;
|
|
21
|
+
/** 最終会話時刻の後方スキャンの1回分の読み幅。 */
|
|
22
|
+
const TAIL_CHUNK_BYTES = 16 * 1024;
|
|
23
|
+
/** 最終会話時刻の後方スキャンの上限バイト数(超巨大な無タイムスタンプ行への保険)。 */
|
|
24
|
+
const TAIL_BYTES_CAP = 256 * 1024;
|
|
25
|
+
/** slug(`/`→`-` 置換済み)から cwd を復元する(lossy フォールバック)。 */
|
|
26
|
+
export function cwdFromSlug(slug) {
|
|
27
|
+
const replaced = slug.replaceAll("-", "/");
|
|
28
|
+
return replaced.length === 0 ? "/" : replaced;
|
|
29
|
+
}
|
|
30
|
+
/** Claude Code のマシン内会話一覧を導出する値型サービス。 */
|
|
31
|
+
export class ClaudeSessionStore {
|
|
32
|
+
root;
|
|
33
|
+
constructor(root) {
|
|
34
|
+
this.root = root ?? path.join(os.homedir(), ".claude", "projects");
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 指定会話 ID の jsonl パスを projects root から探す。見つからない場合は null。
|
|
38
|
+
*
|
|
39
|
+
* 同一 id が複数 slug に在り得る(duplicate-transcript: worktree 削除後の resume で
|
|
40
|
+
* transcript を repo ルートへ移設すると、worktree 側 slug に状態行だけの残骸が残る)。
|
|
41
|
+
* その場合は**会話本体(timestamp 行)を持つ方**を返す。readdir 順の先勝ちだと、
|
|
42
|
+
* 残骸を掴んで検索・タブ名同期・再移設が空振りする。
|
|
43
|
+
*/
|
|
44
|
+
transcriptPath(sessionId) {
|
|
45
|
+
let slugs;
|
|
46
|
+
try {
|
|
47
|
+
slugs = fs.readdirSync(this.root);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const candidates = [];
|
|
53
|
+
for (const slug of slugs) {
|
|
54
|
+
const candidate = path.join(this.root, slug, `${sessionId}.jsonl`);
|
|
55
|
+
try {
|
|
56
|
+
if (fs.statSync(candidate).isFile())
|
|
57
|
+
candidates.push(candidate);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// 読めない slug は無視する。
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (candidates.length <= 1)
|
|
64
|
+
return candidates[0] ?? null;
|
|
65
|
+
let best = null;
|
|
66
|
+
let bestUpdatedAt = Number.NEGATIVE_INFINITY;
|
|
67
|
+
for (const candidate of candidates) {
|
|
68
|
+
const updatedAt = lastConversationTimestamp(candidate);
|
|
69
|
+
if (updatedAt !== null && updatedAt > bestUpdatedAt) {
|
|
70
|
+
best = candidate;
|
|
71
|
+
bestUpdatedAt = updatedAt;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return best ?? candidates[0] ?? null;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 会話一覧を updatedAt 降順で返す(nil は末尾、同値は sessionId 昇順で安定化)。
|
|
78
|
+
* `baseDir` 指定時は cwd が baseDir 自身/配下の会話のみに絞る(engine は無指定で呼ぶ)。
|
|
79
|
+
* 同一 sessionId が複数 slug に在る場合は 1 行へ畳む(duplicate-transcript,
|
|
80
|
+
* `transcriptPath` と同じ「会話本体を持つ方が正」の判定)。
|
|
81
|
+
*/
|
|
82
|
+
list(baseDir) {
|
|
83
|
+
let slugs;
|
|
84
|
+
try {
|
|
85
|
+
slugs = fs.readdirSync(this.root);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
// 同一 sessionId は 1 行へ畳む。cwd/updatedAt の権威は「会話本体を持つ方」なので、
|
|
91
|
+
// baseDir 絞り込みより **先に** 畳む(残骸の lossy cwd で絞り込ませない)。
|
|
92
|
+
const bySessionId = new Map();
|
|
93
|
+
for (const slug of slugs) {
|
|
94
|
+
const slugDir = path.join(this.root, slug);
|
|
95
|
+
let stat;
|
|
96
|
+
try {
|
|
97
|
+
stat = fs.statSync(slugDir);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (!stat.isDirectory())
|
|
103
|
+
continue;
|
|
104
|
+
let files;
|
|
105
|
+
try {
|
|
106
|
+
files = fs.readdirSync(slugDir);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
for (const file of files) {
|
|
112
|
+
if (!file.endsWith(".jsonl"))
|
|
113
|
+
continue;
|
|
114
|
+
const sessionId = file.slice(0, -".jsonl".length);
|
|
115
|
+
if (!sessionId)
|
|
116
|
+
continue;
|
|
117
|
+
const info = deriveInfo(path.join(slugDir, file), sessionId, slug);
|
|
118
|
+
const existing = bySessionId.get(sessionId);
|
|
119
|
+
bySessionId.set(sessionId, existing === undefined ? info : richerInfo(existing, info));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
let result = [...bySessionId.values()];
|
|
123
|
+
if (baseDir) {
|
|
124
|
+
result = result.filter((info) => isInsideBase(info.cwd, baseDir));
|
|
125
|
+
}
|
|
126
|
+
return result.sort((lhs, rhs) => {
|
|
127
|
+
const l = lhs.updatedAt ?? Number.MIN_SAFE_INTEGER;
|
|
128
|
+
const r = rhs.updatedAt ?? Number.MIN_SAFE_INTEGER;
|
|
129
|
+
if (l !== r)
|
|
130
|
+
return r - l;
|
|
131
|
+
return lhs.sessionId < rhs.sessionId ? -1 : lhs.sessionId > rhs.sessionId ? 1 : 0;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* transcript の「最終会話時刻」(Unix 秒)を末尾から後方スキャンで解決する。
|
|
137
|
+
* 権威はエントリ自身の `timestamp` フィールド(user/assistant/system 行が持つ)。
|
|
138
|
+
* ファイル mtime は使わない: `claude --resume` は開くだけで `mode`/`last-prompt` 等の
|
|
139
|
+
* タイムスタンプ無し状態行を追記して mtime を進めるため、mtime を順位に使うと
|
|
140
|
+
* 「開いただけの会話」が実会話より上に浮く(2026-07-08 ユーザー報告の根治)。
|
|
141
|
+
* - 全体を読み切って timestamp 行が無い = 状態行のみ(会話なし)→ null(最下位へ)
|
|
142
|
+
* - 上限まで読んでも見つからない(巨大な無 timestamp 行)→ mtime へ保守的にフォールバック
|
|
143
|
+
*/
|
|
144
|
+
export function lastConversationTimestamp(filePath) {
|
|
145
|
+
return scanTranscriptTail(filePath).updatedAt;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* transcript 末尾の後方スキャンを 1 パスで行い、最終会話時刻と
|
|
149
|
+
* 最終 user/assistant メッセージ本文(先頭 ~80 字, list-preview)をまとめて返す。
|
|
150
|
+
* updatedAt の解決規則は `lastConversationTimestamp` の docstring の通り。
|
|
151
|
+
* lastMessage はテキストを持つ最後の user/assistant 行から取る(tool_result/thinking
|
|
152
|
+
* のみの行はテキスト抽出に失敗して自然に skip される)。見つからなければ null。
|
|
153
|
+
*/
|
|
154
|
+
export function scanTranscriptTail(filePath) {
|
|
155
|
+
let fd;
|
|
156
|
+
try {
|
|
157
|
+
fd = fs.openSync(filePath, "r");
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return { updatedAt: null, lastMessage: null };
|
|
161
|
+
}
|
|
162
|
+
let updatedAt = null;
|
|
163
|
+
let lastMessage = null;
|
|
164
|
+
const titles = {};
|
|
165
|
+
const summary = () => ({ updatedAt, lastMessage, ...titles });
|
|
166
|
+
try {
|
|
167
|
+
const size = fs.fstatSync(fd).size;
|
|
168
|
+
const maxSpan = Math.min(size, TAIL_BYTES_CAP);
|
|
169
|
+
let span = 0;
|
|
170
|
+
let scannedAll = false;
|
|
171
|
+
let done = false;
|
|
172
|
+
while (!done && span < maxSpan) {
|
|
173
|
+
span = Math.min(span + TAIL_CHUNK_BYTES, maxSpan);
|
|
174
|
+
const buf = Buffer.alloc(span);
|
|
175
|
+
const bytesRead = fs.readSync(fd, buf, 0, span, size - span);
|
|
176
|
+
const lines = buf.subarray(0, bytesRead).toString("utf8").split("\n");
|
|
177
|
+
// 途中から読んだ場合、先頭要素は行の途中で切れている可能性があるため捨てる。
|
|
178
|
+
const first = span < size ? 1 : 0;
|
|
179
|
+
for (let i = lines.length - 1; i >= first; i--) {
|
|
180
|
+
const rec = parseEntry(lines[i] ?? "");
|
|
181
|
+
if (rec === null)
|
|
182
|
+
continue;
|
|
183
|
+
// 後方スキャンなので最初に出会ったタイトルエントリ = ファイル内で最新。
|
|
184
|
+
if (titles.customTitle === undefined && rec["type"] === "custom-title") {
|
|
185
|
+
titles.customTitle = normalizeExplicitTitle(rec["customTitle"]);
|
|
186
|
+
}
|
|
187
|
+
if (titles.aiTitle === undefined && rec["type"] === "ai-title") {
|
|
188
|
+
titles.aiTitle = normalizeExplicitTitle(rec["aiTitle"]);
|
|
189
|
+
}
|
|
190
|
+
if (updatedAt === null)
|
|
191
|
+
updatedAt = entryTimestamp(rec);
|
|
192
|
+
if (lastMessage === null && (rec["type"] === "user" || rec["type"] === "assistant")) {
|
|
193
|
+
lastMessage = extractMessageText(rec, LAST_MESSAGE_MAX_LENGTH);
|
|
194
|
+
}
|
|
195
|
+
if (updatedAt !== null && lastMessage !== null) {
|
|
196
|
+
done = true;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// 全読みして timestamp 無し = 会話エントリなし(状態行のみ)。
|
|
201
|
+
if (span >= size) {
|
|
202
|
+
scannedAll = true;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// 上限到達(未 done): timestamp 不明だが中身はある。mtime で近似する。
|
|
207
|
+
if (!done && !scannedAll && updatedAt === null) {
|
|
208
|
+
updatedAt = Math.floor(fs.fstatSync(fd).mtimeMs / 1000);
|
|
209
|
+
}
|
|
210
|
+
// タイトル専用の深掘り: updatedAt/lastMessage は末尾数行で即確定して打ち切るため、
|
|
211
|
+
// CLI が定期再フラッシュするタイトルエントリ(custom-title/ai-title)がその少し上に
|
|
212
|
+
// あると取りこぼす。窓内(TAIL_BYTES_CAP)全体を substring 前置フィルタで走査して補完する。
|
|
213
|
+
if (!scannedAll && (titles.customTitle === undefined || titles.aiTitle === undefined)) {
|
|
214
|
+
scanTailTitleCheckpoints(fd, size, titles);
|
|
215
|
+
}
|
|
216
|
+
return summary();
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return summary();
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
fs.closeSync(fd);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* 末尾窓(TAIL_BYTES_CAP)全体からタイトルエントリだけを後方走査で補完する。
|
|
227
|
+
* JSON.parse は候補行(substring 一致)に限定し、走査コストを読み取り + split に抑える。
|
|
228
|
+
* 既に確定している種別(undefined でない)は上書きしない = 最新優先を保つ。
|
|
229
|
+
*/
|
|
230
|
+
function scanTailTitleCheckpoints(fd, size, titles) {
|
|
231
|
+
const span = Math.min(size, TAIL_BYTES_CAP);
|
|
232
|
+
if (span <= 0)
|
|
233
|
+
return;
|
|
234
|
+
let bytesRead;
|
|
235
|
+
const buf = Buffer.alloc(span);
|
|
236
|
+
try {
|
|
237
|
+
bytesRead = fs.readSync(fd, buf, 0, span, size - span);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const lines = buf.subarray(0, bytesRead).toString("utf8").split("\n");
|
|
243
|
+
const first = span < size ? 1 : 0;
|
|
244
|
+
for (let i = lines.length - 1; i >= first; i--) {
|
|
245
|
+
if (titles.customTitle !== undefined && titles.aiTitle !== undefined)
|
|
246
|
+
return;
|
|
247
|
+
const line = lines[i] ?? "";
|
|
248
|
+
const wantsCustom = titles.customTitle === undefined && line.includes('"type":"custom-title"');
|
|
249
|
+
const wantsAi = titles.aiTitle === undefined && line.includes('"type":"ai-title"');
|
|
250
|
+
if (!wantsCustom && !wantsAi)
|
|
251
|
+
continue;
|
|
252
|
+
const rec = parseEntry(line);
|
|
253
|
+
if (rec === null)
|
|
254
|
+
continue;
|
|
255
|
+
if (titles.customTitle === undefined && rec["type"] === "custom-title") {
|
|
256
|
+
titles.customTitle = normalizeExplicitTitle(rec["customTitle"]);
|
|
257
|
+
}
|
|
258
|
+
if (titles.aiTitle === undefined && rec["type"] === "ai-title") {
|
|
259
|
+
titles.aiTitle = normalizeExplicitTitle(rec["aiTitle"]);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/** jsonl 1 行をオブジェクトへパースする。空行/非 JSON/非オブジェクトは null。 */
|
|
264
|
+
function parseEntry(line) {
|
|
265
|
+
const trimmed = line.trim();
|
|
266
|
+
if (!trimmed)
|
|
267
|
+
return null;
|
|
268
|
+
let obj;
|
|
269
|
+
try {
|
|
270
|
+
obj = JSON.parse(trimmed);
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
if (typeof obj !== "object" || obj === null)
|
|
276
|
+
return null;
|
|
277
|
+
return obj;
|
|
278
|
+
}
|
|
279
|
+
/** エントリのトップレベル `timestamp`(ISO 文字列)を Unix 秒に読む。無ければ null。 */
|
|
280
|
+
function entryTimestamp(rec) {
|
|
281
|
+
const raw = rec["timestamp"];
|
|
282
|
+
if (typeof raw !== "string")
|
|
283
|
+
return null;
|
|
284
|
+
const ms = Date.parse(raw);
|
|
285
|
+
return Number.isFinite(ms) ? Math.floor(ms / 1000) : null;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* transcript 先頭チャンクから cwd と会話タイトル(最初のユーザー発話 先頭 ~60 字)を読む。
|
|
289
|
+
* 一覧の title 導出と herdr タブ名の自動タイトル同期(session-title)が共用する。
|
|
290
|
+
*/
|
|
291
|
+
export function scanTranscriptHead(filePath) {
|
|
292
|
+
let cwd = null;
|
|
293
|
+
let title = null;
|
|
294
|
+
const titles = {};
|
|
295
|
+
try {
|
|
296
|
+
const fd = fs.openSync(filePath, "r");
|
|
297
|
+
try {
|
|
298
|
+
const buf = Buffer.alloc(HEAD_BYTES_CAP);
|
|
299
|
+
const bytesRead = fs.readSync(fd, buf, 0, HEAD_BYTES_CAP, 0);
|
|
300
|
+
// 末尾は行の途中で切れ得るが、その行は JSON パースに失敗して skip されるだけで安全。
|
|
301
|
+
const content = buf.subarray(0, bytesRead).toString("utf8");
|
|
302
|
+
let scanned = 0;
|
|
303
|
+
for (const line of content.split("\n")) {
|
|
304
|
+
if (!line)
|
|
305
|
+
continue;
|
|
306
|
+
if (scanned >= SCAN_LINE_CAP)
|
|
307
|
+
break;
|
|
308
|
+
scanned += 1;
|
|
309
|
+
let obj;
|
|
310
|
+
try {
|
|
311
|
+
obj = JSON.parse(line);
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
if (typeof obj !== "object" || obj === null)
|
|
317
|
+
continue;
|
|
318
|
+
const rec = obj;
|
|
319
|
+
if (cwd === null && typeof rec["cwd"] === "string" && rec["cwd"].length > 0) {
|
|
320
|
+
cwd = rec["cwd"];
|
|
321
|
+
}
|
|
322
|
+
// 前方スキャンなので後勝ち = チャンク内で最新のタイトルエントリを採る。
|
|
323
|
+
// resume 時は CLI が復元メタデータとして新ファイル先頭へ書き直すためここで拾える。
|
|
324
|
+
if (rec["type"] === "custom-title") {
|
|
325
|
+
titles.customTitle = normalizeExplicitTitle(rec["customTitle"]);
|
|
326
|
+
}
|
|
327
|
+
if (rec["type"] === "ai-title") {
|
|
328
|
+
titles.aiTitle = normalizeExplicitTitle(rec["aiTitle"]);
|
|
329
|
+
}
|
|
330
|
+
if (title === null && rec["type"] === "user") {
|
|
331
|
+
const t = extractUserText(rec);
|
|
332
|
+
if (t !== null)
|
|
333
|
+
title = t;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
finally {
|
|
338
|
+
fs.closeSync(fd);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
// 読めないファイルは null/null を返す(呼び出し側がフォールバック)。
|
|
343
|
+
}
|
|
344
|
+
return { cwd, title, ...titles };
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* 同一 sessionId の 2 行から一覧に残す方を選ぶ(duplicate-transcript)。
|
|
348
|
+
*
|
|
349
|
+
* 会話本体(timestamp を持つ行)がある方が正。両方あれば新しい方、どちらも無ければ
|
|
350
|
+
* 最終メッセージを持つ方 → 先に見つけた方(readdir 順で安定)。
|
|
351
|
+
*/
|
|
352
|
+
function richerInfo(lhs, rhs) {
|
|
353
|
+
const l = lhs.updatedAt;
|
|
354
|
+
const r = rhs.updatedAt;
|
|
355
|
+
if (l !== undefined && r !== undefined)
|
|
356
|
+
return r > l ? rhs : lhs;
|
|
357
|
+
if (l !== undefined || r !== undefined)
|
|
358
|
+
return l !== undefined ? lhs : rhs;
|
|
359
|
+
if ((lhs.lastMessage !== undefined) !== (rhs.lastMessage !== undefined)) {
|
|
360
|
+
return lhs.lastMessage !== undefined ? lhs : rhs;
|
|
361
|
+
}
|
|
362
|
+
return lhs;
|
|
363
|
+
}
|
|
364
|
+
/** 1 つの jsonl から ClaudeSessionInfo を導出する(先頭 + 末尾チャンクのみ読む)。 */
|
|
365
|
+
function deriveInfo(filePath, sessionId, slug) {
|
|
366
|
+
const tail = scanTranscriptTail(filePath);
|
|
367
|
+
const updatedAt = tail.updatedAt ?? undefined;
|
|
368
|
+
const head = scanTranscriptHead(filePath);
|
|
369
|
+
// 明示タイトル(custom-title / ai-title)が既に書かれたかを iOS へ伝える(title-refresh)。
|
|
370
|
+
// 新規会話の実体化直後は transcript がまだ無い / 最初のユーザー発話しか無いため、iOS は
|
|
371
|
+
// このフラグが立つまでタイトルを取り直す(立たないまま打ち切ると発話そのままの仮タイトルで
|
|
372
|
+
// 固定され、一覧へ戻って開き直すまで AI タイトルへ更新されない)。
|
|
373
|
+
const explicitTitle = resolveExplicitTitle(head, tail);
|
|
374
|
+
const info = {
|
|
375
|
+
sessionId,
|
|
376
|
+
cwd: head.cwd ?? cwdFromSlug(slug),
|
|
377
|
+
title: explicitTitle ?? head.title ?? sessionId.slice(0, 8),
|
|
378
|
+
hasProviderTitle: explicitTitle !== null,
|
|
379
|
+
};
|
|
380
|
+
if (updatedAt !== undefined)
|
|
381
|
+
info.updatedAt = updatedAt;
|
|
382
|
+
if (tail.lastMessage !== null)
|
|
383
|
+
info.lastMessage = tail.lastMessage;
|
|
384
|
+
return info;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* 明示タイトル(custom-title / ai-title エントリ)を解決する。
|
|
388
|
+
* 末尾チャンクの観測はファイル内でより新しいため先頭チャンクより優先し、
|
|
389
|
+
* custom-title(/rename・hook 由来)を ai-title より優先する。
|
|
390
|
+
* custom-title が解除(null)の場合は ai-title へフォールバックする。
|
|
391
|
+
* どちらの窓にも無ければ null(呼び出し側が従来の導出へフォールバック)。
|
|
392
|
+
*/
|
|
393
|
+
export function resolveExplicitTitle(head, tail) {
|
|
394
|
+
const custom = tail.customTitle !== undefined ? tail.customTitle : head.customTitle;
|
|
395
|
+
if (typeof custom === "string")
|
|
396
|
+
return custom;
|
|
397
|
+
const ai = tail.aiTitle !== undefined ? tail.aiTitle : head.aiTitle;
|
|
398
|
+
return typeof ai === "string" ? ai : null;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* 会話タイトルを 1 発で解決する(明示タイトル優先 → 最初のユーザー発話 → null)。
|
|
402
|
+
* herdr タブ名の自動タイトル同期など、一覧以外の呼び出し側が使う。
|
|
403
|
+
*/
|
|
404
|
+
export function transcriptTitle(filePath) {
|
|
405
|
+
const head = scanTranscriptHead(filePath);
|
|
406
|
+
const tail = scanTranscriptTail(filePath);
|
|
407
|
+
return resolveExplicitTitle(head, tail) ?? head.title;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* タイトルエントリの値を正規化する: 制御文字除去 + trim + 上限。
|
|
411
|
+
* 空になったら null(= タイトル解除エントリ)。文字列以外も null。
|
|
412
|
+
*/
|
|
413
|
+
function normalizeExplicitTitle(raw) {
|
|
414
|
+
if (typeof raw !== "string")
|
|
415
|
+
return null;
|
|
416
|
+
// eslint-disable-next-line no-control-regex
|
|
417
|
+
const text = raw.replace(/[\x00-\x1f\x7f]/g, "").trim();
|
|
418
|
+
if (!text)
|
|
419
|
+
return null;
|
|
420
|
+
return [...text].slice(0, EXPLICIT_TITLE_MAX_LENGTH).join("");
|
|
421
|
+
}
|
|
422
|
+
/** `type=="user"` 行のメッセージ本文を取り出し、先頭 ~60 字へ整形する(タイトル用)。 */
|
|
423
|
+
function extractUserText(obj) {
|
|
424
|
+
return extractMessageText(obj, TITLE_MAX_LENGTH);
|
|
425
|
+
}
|
|
426
|
+
/** user/assistant 行のメッセージ本文テキストを取り出し、先頭 maxLength 字へ整形する。 */
|
|
427
|
+
function extractMessageText(obj, maxLength) {
|
|
428
|
+
const message = obj["message"];
|
|
429
|
+
if (typeof message !== "object" || message === null)
|
|
430
|
+
return null;
|
|
431
|
+
const content = message["content"];
|
|
432
|
+
let raw = null;
|
|
433
|
+
if (typeof content === "string") {
|
|
434
|
+
raw = content;
|
|
435
|
+
}
|
|
436
|
+
else if (Array.isArray(content)) {
|
|
437
|
+
raw = firstText(content);
|
|
438
|
+
}
|
|
439
|
+
if (raw === null)
|
|
440
|
+
return null;
|
|
441
|
+
let text = raw.replaceAll("\n", " ").replaceAll("\r", " ").trim();
|
|
442
|
+
if (!text)
|
|
443
|
+
return null;
|
|
444
|
+
// slash コマンドのメタ包み(`<command-…>` で始まる)は提示に向かないので除外。
|
|
445
|
+
if (text.startsWith("<command-") || text.startsWith("<local-command"))
|
|
446
|
+
return null;
|
|
447
|
+
// シェルモード(`!cmd`)の記録。実行行はタイトル/プレビューに使えるので `!cmd` へ
|
|
448
|
+
// 戻し、出力側(stdout/stderr)は提示に向かないので除外する。
|
|
449
|
+
if (text.startsWith("<bash-stdout>") || text.startsWith("<bash-stderr>"))
|
|
450
|
+
return null;
|
|
451
|
+
if (text.startsWith("<bash-input>")) {
|
|
452
|
+
const command = text.slice("<bash-input>".length).replace(/<\/bash-input>[\s\S]*$/u, "").trim();
|
|
453
|
+
if (!command)
|
|
454
|
+
return null;
|
|
455
|
+
text = `!${command}`;
|
|
456
|
+
}
|
|
457
|
+
// スキル実行時に注入される展開済み SKILL.md 本文も提示しない(前の実発話へ遡る)。
|
|
458
|
+
if (isInjectedSkillContent(obj, raw))
|
|
459
|
+
return null;
|
|
460
|
+
if (text.length > maxLength)
|
|
461
|
+
text = text.slice(0, maxLength);
|
|
462
|
+
return text;
|
|
463
|
+
}
|
|
464
|
+
/** content 配列から最初のテキストを取り出す。 */
|
|
465
|
+
function firstText(arr) {
|
|
466
|
+
for (const element of arr) {
|
|
467
|
+
if (typeof element === "string" && element.length > 0)
|
|
468
|
+
return element;
|
|
469
|
+
if (typeof element === "object" && element !== null) {
|
|
470
|
+
const t = element["text"];
|
|
471
|
+
if (typeof t === "string" && t.length > 0)
|
|
472
|
+
return t;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
return null;
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=claudeSessionStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeSessionStore.js","sourceRoot":"","sources":["../../src/sessions/claudeSessionStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** ハートビートの状態。active=ターン処理中 / idle=待機(計時対象)。 */
|
|
2
|
+
export type HeartbeatState = "active" | "idle";
|
|
3
|
+
export interface Heartbeat {
|
|
4
|
+
/** 最終活動時刻(Unix 秒)。判定の唯一の時刻ソース。 */
|
|
5
|
+
ts: number;
|
|
6
|
+
state: HeartbeatState;
|
|
7
|
+
/** 書き込み契機(デバッグ用)。判定には使わない。 */
|
|
8
|
+
event?: string;
|
|
9
|
+
}
|
|
10
|
+
/** 既定のハートビート置き場(`~/.tailii/heartbeat`)。 */
|
|
11
|
+
export declare function defaultHeartbeatDir(): string;
|
|
12
|
+
/** ハートビートを読む。不在・壊れは null(呼び手が採番する)。 */
|
|
13
|
+
export declare function readHeartbeat(dir: string, session: string): Heartbeat | null;
|
|
14
|
+
/** ハートビートを書く(tmp 書き込み → rename のアトミック置換)。失敗は投げる。 */
|
|
15
|
+
export declare function writeHeartbeat(dir: string, session: string, heartbeat: Heartbeat): void;
|
|
16
|
+
/**
|
|
17
|
+
* ts だけ更新する(state は既存値を保持、不在時は fallbackState)。
|
|
18
|
+
* チャット表示中 ticker / daemon の bump 代行用。
|
|
19
|
+
*/
|
|
20
|
+
export declare function bumpHeartbeat(dir: string, session: string, now: number, event: string, fallbackState?: HeartbeatState): void;
|
|
21
|
+
/** ハートビートファイルを消す(kill 後の掃除)。不在は無視。 */
|
|
22
|
+
export declare function removeHeartbeat(dir: string, session: string): void;
|
|
23
|
+
/** dir 配下の全ハートビートのセッション名(tmp 残骸は除外)。 */
|
|
24
|
+
export declare function listHeartbeatSessions(dir: string): string[];
|