github-issue-tower-defence-management 1.115.0 → 1.115.1

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.
Files changed (28) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +2 -3
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +2 -17
  4. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  5. package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js +2 -4
  6. package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js.map +1 -1
  7. package/bin/adapter/repositories/TmuxSilentSessionNotificationRepository.js +1 -26
  8. package/bin/adapter/repositories/TmuxSilentSessionNotificationRepository.js.map +1 -1
  9. package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js +1 -10
  10. package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +0 -21
  13. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +5 -77
  14. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +1 -12
  15. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.test.ts +2 -98
  16. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts +1 -45
  17. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +33 -10
  18. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +0 -22
  19. package/src/domain/usecases/adapter-interfaces/SilentSessionNotificationRepository.ts +0 -5
  20. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  21. package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts +0 -4
  22. package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts.map +1 -1
  23. package/types/adapter/repositories/TmuxSilentSessionNotificationRepository.d.ts +1 -6
  24. package/types/adapter/repositories/TmuxSilentSessionNotificationRepository.d.ts.map +1 -1
  25. package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts +0 -2
  26. package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts.map +1 -1
  27. package/types/domain/usecases/adapter-interfaces/SilentSessionNotificationRepository.d.ts +0 -2
  28. package/types/domain/usecases/adapter-interfaces/SilentSessionNotificationRepository.d.ts.map +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [1.115.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.115.0...v1.115.1) (2026-06-28)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **silent-notify:** assert no cooldown suppression on repeated cycles to publish removal ([#1070](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1070)) ([3c31987](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/3c319873d7d09a4ca58ba89efaaaa7a14aed8e39))
7
+
1
8
  # [1.115.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.114.2...v1.115.0) (2026-06-28)
2
9
 
3
10
 
package/README.md CHANGED
@@ -292,7 +292,6 @@ subAgentTranscriptRootDirectory?: string # Optional: Root directory under which
292
292
  mainSilentThresholdSeconds?: number # Optional: Seconds of main-session output silence after which the main-session self-check section is sent. Default 600
293
293
  subAgentSilentThresholdSeconds?: number # Optional: Seconds of sub-process output silence after which the sub-process section is sent. Default 300
294
294
  subAgentRunningThresholdSeconds?: number # Optional: Seconds a sub-process may run before the sub-process section is sent regardless of its output silence. Default 900
295
- silentNotificationCooldownSeconds?: number # Optional: Minimum seconds between notifications to the same session. Default 1800
296
295
  silentNotificationStaggerSeconds?: number # Optional: Seconds to wait between consecutive session notifications within one cycle, so the targets are notified sequentially rather than all at once. Default 25
297
296
  activeHubTaskStatus?: string # Optional: GitHub Project Status value that marks a session's hub task as still actively worked in an interactive session. For a session whose name is a `https://github.com/{owner}/{repo}/issues/{N}` issue URL, the hub task's latest Status is resolved before sending and the notification is skipped when the issue is closed or its Status differs from this value. Sessions whose name is not a github.com issue URL are never checked. When the hub task Status cannot be resolved (transient API error or the issue is not found), the notification is sent anyway (fail-open) and a warning is logged. When unset, this hub-task active-status check is a no-op and existing behavior is preserved
298
297
  silentSubAgentMessageHeader?: string # Optional: Overrides the line shown above the sub-process list in the sub-process section. When unset, a generic built-in line is used
@@ -562,9 +561,9 @@ The main-session stalled section is sent when the session's main output has been
562
561
 
563
562
  The sub-process section is sent, regardless of main output, when at least one sub-process of the session has been output-idle for `subAgentSilentThresholdSeconds` or has been running for `subAgentRunningThresholdSeconds`; the message lists each matched sub-process with its idle and running minutes. Sub-processes are discovered in one of two ways: when `subAgentTranscriptRootDirectory` is configured, each session's `subagents/agent-<id>.jsonl` transcripts are scanned, finished sub-agents (latest transcript entry `stop_reason` equal to `end_turn` or `stop_sequence`) are skipped, and idle time is taken from the transcript file modification time (following symlinks) while running time is taken from its first entry timestamp; otherwise sub-processes are discovered by matching `subAgentProcessMatchPattern` against process command lines.
564
563
 
565
- A per-session cooldown (`silentNotificationCooldownSeconds`) prevents repeated notifications, persisted via the cache. Because the scheduled handler runs once per project but the silent-session monitor inspects the single global set of live tmux sessions, this cooldown is stored in a single project-independent cache scope (a fixed shared path rather than the per-project cache directory). This way the 30-minute cooldown is shared across every per-project pass and a session is notified at most once per cooldown window even when several projects are enabled; all other per-project caches are unaffected. When more than one session is notified in the same cycle, the sends are spaced out sequentially with `silentNotificationStaggerSeconds` between consecutive sends (no wait before the first or after the last) so the targets are not all triggered at once. When `activeHubTaskStatus` is configured, each notification is gated on the latest GitHub Project Status of the session's hub task: a session whose name is a `https://github.com/{owner}/{repo}/issues/{N}` issue URL is notified only while that issue is open and in the configured active Status, so a session whose hub task has been closed or moved to another Status is skipped; sessions whose name is not a github.com issue URL are never gated, and a hub task whose Status cannot be resolved fails open (the notification is sent and a warning is logged). When `activeHubTaskStatus` is unset, this hub-task check is a no-op. Process-snapshot collection, transcript resolution, owner-call detection, the wait between sends, and the message wording are all performed through injectable ports, so the logic is unit-testable without touching the host, and the host-specific process and environment access, sub-process pattern, and message wording are supplied through adapters or configuration. When `silentNotificationEnabled` is not true the step is a no-op, and any error during the step is logged and swallowed so the schedule cycle is never affected.
564
+ There is no per-session notification cooldown: every cycle, a session is notified whenever it still meets the silent-target condition (output silent at or beyond the threshold and not waiting on the owner). No suppression state is persisted. Because silence is measured from the latest transcript entry of any type including the monitor's own injected reminder and the owner's reply a notified session's measured silence resets as soon as it produces any activity, so a session that has resumed is not re-flagged; this already prevents redundant nudges without a cooldown. When more than one session is notified in the same cycle, the sends are spaced out sequentially with `silentNotificationStaggerSeconds` between consecutive sends (no wait before the first or after the last) so the targets are not all triggered at once. When `activeHubTaskStatus` is configured, each notification is gated on the latest GitHub Project Status of the session's hub task: a session whose name is a `https://github.com/{owner}/{repo}/issues/{N}` issue URL is notified only while that issue is open and in the configured active Status, so a session whose hub task has been closed or moved to another Status is skipped; sessions whose name is not a github.com issue URL are never gated, and a hub task whose Status cannot be resolved fails open (the notification is sent and a warning is logged). When `activeHubTaskStatus` is unset, this hub-task check is a no-op. Process-snapshot collection, transcript resolution, owner-call detection, the wait between sends, and the message wording are all performed through injectable ports, so the logic is unit-testable without touching the host, and the host-specific process and environment access, sub-process pattern, and message wording are supplied through adapters or configuration. When `silentNotificationEnabled` is not true the step is a no-op, and any error during the step is logged and swallowed so the schedule cycle is never affected.
566
565
 
567
- Each config key above has a matching environment variable read when the config key is unset: `TDPM_SILENT_NOTIFICATION_ENABLED` (the string `true` enables the step), `TDPM_SILENT_OWNER_CALL_MARKER`, `TDPM_SUBAGENT_OUTPUT_ROOT_DIRECTORY`, `TDPM_SUBAGENT_PROCESS_MATCH_PATTERN`, `TDPM_SUBAGENT_TRANSCRIPT_ROOT_DIRECTORY`, `TDPM_MAIN_SILENT_THRESHOLD_SECONDS`, `TDPM_SUBAGENT_SILENT_THRESHOLD_SECONDS`, `TDPM_SUBAGENT_RUNNING_THRESHOLD_SECONDS`, `TDPM_SILENT_NOTIFICATION_COOLDOWN_SECONDS`, `TDPM_SILENT_NOTIFICATION_STAGGER_SECONDS`, `TDPM_ACTIVE_HUB_TASK_STATUS`, `TDPM_SILENT_MAIN_STALLED_MESSAGE`, `TDPM_SILENT_SUBAGENT_MESSAGE_HEADER`, and `TDPM_SILENT_SUBAGENT_MESSAGE_FOOTER`.
566
+ Each config key above has a matching environment variable read when the config key is unset: `TDPM_SILENT_NOTIFICATION_ENABLED` (the string `true` enables the step), `TDPM_SILENT_OWNER_CALL_MARKER`, `TDPM_SUBAGENT_OUTPUT_ROOT_DIRECTORY`, `TDPM_SUBAGENT_PROCESS_MATCH_PATTERN`, `TDPM_SUBAGENT_TRANSCRIPT_ROOT_DIRECTORY`, `TDPM_MAIN_SILENT_THRESHOLD_SECONDS`, `TDPM_SUBAGENT_SILENT_THRESHOLD_SECONDS`, `TDPM_SUBAGENT_RUNNING_THRESHOLD_SECONDS`, `TDPM_SILENT_NOTIFICATION_STAGGER_SECONDS`, `TDPM_ACTIVE_HUB_TASK_STATUS`, `TDPM_SILENT_MAIN_STALLED_MESSAGE`, `TDPM_SILENT_SUBAGENT_MESSAGE_HEADER`, and `TDPM_SILENT_SUBAGENT_MESSAGE_FOOTER`.
568
567
 
569
568
  ## Token Rotation Order File
570
569
 
@@ -90,14 +90,6 @@ const DailySecurityScanUseCase_1 = require("../../../domain/usecases/DailySecuri
90
90
  const KyHttpRepository_1 = require("../../repositories/KyHttpRepository");
91
91
  const WorkflowStatus_1 = require("../../../domain/entities/WorkflowStatus");
92
92
  const DEFAULT_DASHBOARD_DATA_DIR = null;
93
- // The silent-session notification inspects the single, global set of live tmux
94
- // sessions, but the scheduled handler runs once per project. If its cooldown
95
- // were stored in the per-project cache (`./tmp/cache/<projectName>`), the same
96
- // session would get an independent cooldown record per project and be notified
97
- // once per enabled project within a single cooldown window. The cooldown must
98
- // therefore live in a single project-independent cache scope so it is shared
99
- // across every per-project pass.
100
- const SILENT_SESSION_NOTIFICATION_CACHE_PATH = './tmp/cache/shared';
101
93
  const readSilentSeconds = (configValue, envValue, defaultValue) => {
102
94
  if (configValue !== undefined) {
103
95
  return configValue;
@@ -115,13 +107,13 @@ class HandleScheduledEventUseCaseHandler {
115
107
  this.handle = async (configFilePath, _verbose) => {
116
108
  const configFileContent = fs_1.default.readFileSync(configFilePath, 'utf8');
117
109
  const input = yaml_1.default.parse(configFileContent);
118
- if (!(() => { const _io0 = input => "string" === typeof input.org && "number" === typeof input.allowIssueCacheMinutes && (undefined === input.thresholdForAutoReject || "number" === typeof input.thresholdForAutoReject) && (null === input.changeTargetPathAliases || undefined === input.changeTargetPathAliases || "object" === typeof input.changeTargetPathAliases && null !== input.changeTargetPathAliases && false === Array.isArray(input.changeTargetPathAliases) && _io1(input.changeTargetPathAliases)) && "string" === typeof input.projectUrl && "string" === typeof input.projectName && (null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || Array.isArray(input.labelsAsLlmAgentName) && input.labelsAsLlmAgentName.every(elem => "string" === typeof elem)) && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io2(input.workingReport)) && "string" === typeof input.urlOfStoryView && "boolean" === typeof input.disabled && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io3(input.startPreparation)) && (null === input.dailySecurityScan || undefined === input.dailySecurityScan || "object" === typeof input.dailySecurityScan && null !== input.dailySecurityScan && _io4(input.dailySecurityScan)) && (null === input.allowedIssueAuthors || undefined === input.allowedIssueAuthors || "string" === typeof input.allowedIssueAuthors || Array.isArray(input.allowedIssueAuthors) && input.allowedIssueAuthors.every(elem => "string" === typeof elem)) && (undefined === input.claudeCodeOauthTokenListJsonPath || "string" === typeof input.claudeCodeOauthTokenListJsonPath) && (undefined === input.consoleDataOutputDir || "string" === typeof input.consoleDataOutputDir) && (undefined === input.dashboardDataDir || "string" === typeof input.dashboardDataDir) && (undefined === input.workflowBlockerStoryName || "string" === typeof input.workflowBlockerStoryName) && (undefined === input.inTmuxDataOutputDir || "string" === typeof input.inTmuxDataOutputDir) && (undefined === input.inTmuxConsoleBaseUrl || "string" === typeof input.inTmuxConsoleBaseUrl) && (undefined === input.inTmuxConsoleToken || "string" === typeof input.inTmuxConsoleToken) && (undefined === input.inTmuxProjectOrder || Array.isArray(input.inTmuxProjectOrder) && input.inTmuxProjectOrder.every(elem => "string" === typeof elem)) && (undefined === input.inTmuxLauncherCommand || "string" === typeof input.inTmuxLauncherCommand) && (undefined === input.silentNotificationEnabled || "boolean" === typeof input.silentNotificationEnabled) && (undefined === input.ownerCallMarker || "string" === typeof input.ownerCallMarker) && (undefined === input.subAgentOutputRootDirectory || "string" === typeof input.subAgentOutputRootDirectory) && (undefined === input.subAgentProcessMatchPattern || "string" === typeof input.subAgentProcessMatchPattern) && (undefined === input.subAgentTranscriptRootDirectory || "string" === typeof input.subAgentTranscriptRootDirectory) && (undefined === input.mainSilentThresholdSeconds || "number" === typeof input.mainSilentThresholdSeconds) && (undefined === input.subAgentSilentThresholdSeconds || "number" === typeof input.subAgentSilentThresholdSeconds) && (undefined === input.subAgentRunningThresholdSeconds || "number" === typeof input.subAgentRunningThresholdSeconds) && (undefined === input.silentNotificationCooldownSeconds || "number" === typeof input.silentNotificationCooldownSeconds) && (undefined === input.silentNotificationStaggerSeconds || "number" === typeof input.silentNotificationStaggerSeconds) && (undefined === input.activeHubTaskStatus || "string" === typeof input.activeHubTaskStatus) && (undefined === input.silentMainStalledMessage || "string" === typeof input.silentMainStalledMessage) && (undefined === input.silentSubAgentMessageHeader || "string" === typeof input.silentSubAgentMessageHeader) && (undefined === input.silentSubAgentMessageFooter || "string" === typeof input.silentSubAgentMessageFooter) && ("object" === typeof input.credentials && null !== input.credentials && _io5(input.credentials)); const _io1 = input => Object.keys(input).every(key => {
110
+ if (!(() => { const _io0 = input => "string" === typeof input.org && "number" === typeof input.allowIssueCacheMinutes && (undefined === input.thresholdForAutoReject || "number" === typeof input.thresholdForAutoReject) && (null === input.changeTargetPathAliases || undefined === input.changeTargetPathAliases || "object" === typeof input.changeTargetPathAliases && null !== input.changeTargetPathAliases && false === Array.isArray(input.changeTargetPathAliases) && _io1(input.changeTargetPathAliases)) && "string" === typeof input.projectUrl && "string" === typeof input.projectName && (null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || Array.isArray(input.labelsAsLlmAgentName) && input.labelsAsLlmAgentName.every(elem => "string" === typeof elem)) && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io2(input.workingReport)) && "string" === typeof input.urlOfStoryView && "boolean" === typeof input.disabled && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io3(input.startPreparation)) && (null === input.dailySecurityScan || undefined === input.dailySecurityScan || "object" === typeof input.dailySecurityScan && null !== input.dailySecurityScan && _io4(input.dailySecurityScan)) && (null === input.allowedIssueAuthors || undefined === input.allowedIssueAuthors || "string" === typeof input.allowedIssueAuthors || Array.isArray(input.allowedIssueAuthors) && input.allowedIssueAuthors.every(elem => "string" === typeof elem)) && (undefined === input.claudeCodeOauthTokenListJsonPath || "string" === typeof input.claudeCodeOauthTokenListJsonPath) && (undefined === input.consoleDataOutputDir || "string" === typeof input.consoleDataOutputDir) && (undefined === input.dashboardDataDir || "string" === typeof input.dashboardDataDir) && (undefined === input.workflowBlockerStoryName || "string" === typeof input.workflowBlockerStoryName) && (undefined === input.inTmuxDataOutputDir || "string" === typeof input.inTmuxDataOutputDir) && (undefined === input.inTmuxConsoleBaseUrl || "string" === typeof input.inTmuxConsoleBaseUrl) && (undefined === input.inTmuxConsoleToken || "string" === typeof input.inTmuxConsoleToken) && (undefined === input.inTmuxProjectOrder || Array.isArray(input.inTmuxProjectOrder) && input.inTmuxProjectOrder.every(elem => "string" === typeof elem)) && (undefined === input.inTmuxLauncherCommand || "string" === typeof input.inTmuxLauncherCommand) && (undefined === input.silentNotificationEnabled || "boolean" === typeof input.silentNotificationEnabled) && (undefined === input.ownerCallMarker || "string" === typeof input.ownerCallMarker) && (undefined === input.subAgentOutputRootDirectory || "string" === typeof input.subAgentOutputRootDirectory) && (undefined === input.subAgentProcessMatchPattern || "string" === typeof input.subAgentProcessMatchPattern) && (undefined === input.subAgentTranscriptRootDirectory || "string" === typeof input.subAgentTranscriptRootDirectory) && (undefined === input.mainSilentThresholdSeconds || "number" === typeof input.mainSilentThresholdSeconds) && (undefined === input.subAgentSilentThresholdSeconds || "number" === typeof input.subAgentSilentThresholdSeconds) && (undefined === input.subAgentRunningThresholdSeconds || "number" === typeof input.subAgentRunningThresholdSeconds) && (undefined === input.silentNotificationStaggerSeconds || "number" === typeof input.silentNotificationStaggerSeconds) && (undefined === input.activeHubTaskStatus || "string" === typeof input.activeHubTaskStatus) && (undefined === input.silentMainStalledMessage || "string" === typeof input.silentMainStalledMessage) && (undefined === input.silentSubAgentMessageHeader || "string" === typeof input.silentSubAgentMessageHeader) && (undefined === input.silentSubAgentMessageFooter || "string" === typeof input.silentSubAgentMessageFooter) && ("object" === typeof input.credentials && null !== input.credentials && _io5(input.credentials)); const _io1 = input => Object.keys(input).every(key => {
119
111
  const value = input[key];
120
112
  if (undefined === value)
121
113
  return true;
122
114
  return "string" === typeof value;
123
115
  }); const _io2 = input => "string" === typeof input.repo && (Array.isArray(input.members) && input.members.every(elem => "string" === typeof elem)) && "string" === typeof input.spreadsheetUrl; const _io3 = input => "string" === typeof input.defaultAgentName && (null === input.defaultLlmModelName || undefined === input.defaultLlmModelName || "string" === typeof input.defaultLlmModelName) && (null === input.fallbackLlmModelName || undefined === input.fallbackLlmModelName || "string" === typeof input.fallbackLlmModelName) && (null === input.defaultLlmAgentName || undefined === input.defaultLlmAgentName || "string" === typeof input.defaultLlmAgentName) && "string" === typeof input.configFilePath && (null === input.maximumPreparingIssuesCount || "number" === typeof input.maximumPreparingIssuesCount) && (undefined === input.utilizationPercentageThreshold || "number" === typeof input.utilizationPercentageThreshold) && (null === input.allowedIssueAuthors || undefined === input.allowedIssueAuthors || Array.isArray(input.allowedIssueAuthors) && input.allowedIssueAuthors.every(elem => "string" === typeof elem)) && (undefined === input.preparationProcessCheckCommand || "string" === typeof input.preparationProcessCheckCommand) && (null === input.codexHomeCandidates || undefined === input.codexHomeCandidates || Array.isArray(input.codexHomeCandidates) && input.codexHomeCandidates.every(elem => "string" === typeof elem)) && (undefined === input.awLogDirectoryPath || "string" === typeof input.awLogDirectoryPath) && (undefined === input.awLogStaleThresholdMinutes || "number" === typeof input.awLogStaleThresholdMinutes) && (null === input.awaitingQualityCheckStatus || undefined === input.awaitingQualityCheckStatus || "string" === typeof input.awaitingQualityCheckStatus) && (null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || Array.isArray(input.labelsAsLlmAgentName) && input.labelsAsLlmAgentName.every(elem => "string" === typeof elem)); const _io4 = input => "string" === typeof input.scanBaseDirectory && "number" === typeof input.targetHourUtc && (undefined === input.enableKevNvdReport || "boolean" === typeof input.enableKevNvdReport) && (undefined === input.kevReportRepo || "string" === typeof input.kevReportRepo); const _io5 = input => "object" === typeof input.manager && null !== input.manager && _io6(input.manager) && ("object" === typeof input.bot && null !== input.bot && _io10(input.bot)); const _io6 = input => "object" === typeof input.github && null !== input.github && _io7(input.github) && ("object" === typeof input.slack && null !== input.slack && _io8(input.slack)) && ("object" === typeof input.googleServiceAccount && null !== input.googleServiceAccount && _io9(input.googleServiceAccount)); const _io7 = input => "string" === typeof input.token; const _io8 = input => "string" === typeof input.userToken; const _io9 = input => "string" === typeof input.serviceAccountKey; const _io10 = input => "object" === typeof input.github && null !== input.github && _io11(input.github); const _io11 = input => "string" === typeof input.token; return input => "object" === typeof input && null !== input && _io0(input); })()(input)) {
124
- throw new Error(`Invalid input: ${JSON.stringify(input)}\n\n${JSON.stringify((() => { const _io0 = input => "string" === typeof input.org && "number" === typeof input.allowIssueCacheMinutes && (undefined === input.thresholdForAutoReject || "number" === typeof input.thresholdForAutoReject) && (null === input.changeTargetPathAliases || undefined === input.changeTargetPathAliases || "object" === typeof input.changeTargetPathAliases && null !== input.changeTargetPathAliases && false === Array.isArray(input.changeTargetPathAliases) && _io1(input.changeTargetPathAliases)) && "string" === typeof input.projectUrl && "string" === typeof input.projectName && (null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || Array.isArray(input.labelsAsLlmAgentName) && input.labelsAsLlmAgentName.every(elem => "string" === typeof elem)) && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io2(input.workingReport)) && "string" === typeof input.urlOfStoryView && "boolean" === typeof input.disabled && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io3(input.startPreparation)) && (null === input.dailySecurityScan || undefined === input.dailySecurityScan || "object" === typeof input.dailySecurityScan && null !== input.dailySecurityScan && _io4(input.dailySecurityScan)) && (null === input.allowedIssueAuthors || undefined === input.allowedIssueAuthors || "string" === typeof input.allowedIssueAuthors || Array.isArray(input.allowedIssueAuthors) && input.allowedIssueAuthors.every(elem => "string" === typeof elem)) && (undefined === input.claudeCodeOauthTokenListJsonPath || "string" === typeof input.claudeCodeOauthTokenListJsonPath) && (undefined === input.consoleDataOutputDir || "string" === typeof input.consoleDataOutputDir) && (undefined === input.dashboardDataDir || "string" === typeof input.dashboardDataDir) && (undefined === input.workflowBlockerStoryName || "string" === typeof input.workflowBlockerStoryName) && (undefined === input.inTmuxDataOutputDir || "string" === typeof input.inTmuxDataOutputDir) && (undefined === input.inTmuxConsoleBaseUrl || "string" === typeof input.inTmuxConsoleBaseUrl) && (undefined === input.inTmuxConsoleToken || "string" === typeof input.inTmuxConsoleToken) && (undefined === input.inTmuxProjectOrder || Array.isArray(input.inTmuxProjectOrder) && input.inTmuxProjectOrder.every(elem => "string" === typeof elem)) && (undefined === input.inTmuxLauncherCommand || "string" === typeof input.inTmuxLauncherCommand) && (undefined === input.silentNotificationEnabled || "boolean" === typeof input.silentNotificationEnabled) && (undefined === input.ownerCallMarker || "string" === typeof input.ownerCallMarker) && (undefined === input.subAgentOutputRootDirectory || "string" === typeof input.subAgentOutputRootDirectory) && (undefined === input.subAgentProcessMatchPattern || "string" === typeof input.subAgentProcessMatchPattern) && (undefined === input.subAgentTranscriptRootDirectory || "string" === typeof input.subAgentTranscriptRootDirectory) && (undefined === input.mainSilentThresholdSeconds || "number" === typeof input.mainSilentThresholdSeconds) && (undefined === input.subAgentSilentThresholdSeconds || "number" === typeof input.subAgentSilentThresholdSeconds) && (undefined === input.subAgentRunningThresholdSeconds || "number" === typeof input.subAgentRunningThresholdSeconds) && (undefined === input.silentNotificationCooldownSeconds || "number" === typeof input.silentNotificationCooldownSeconds) && (undefined === input.silentNotificationStaggerSeconds || "number" === typeof input.silentNotificationStaggerSeconds) && (undefined === input.activeHubTaskStatus || "string" === typeof input.activeHubTaskStatus) && (undefined === input.silentMainStalledMessage || "string" === typeof input.silentMainStalledMessage) && (undefined === input.silentSubAgentMessageHeader || "string" === typeof input.silentSubAgentMessageHeader) && (undefined === input.silentSubAgentMessageFooter || "string" === typeof input.silentSubAgentMessageFooter) && ("object" === typeof input.credentials && null !== input.credentials && _io5(input.credentials)); const _io1 = input => Object.keys(input).every(key => {
116
+ throw new Error(`Invalid input: ${JSON.stringify(input)}\n\n${JSON.stringify((() => { const _io0 = input => "string" === typeof input.org && "number" === typeof input.allowIssueCacheMinutes && (undefined === input.thresholdForAutoReject || "number" === typeof input.thresholdForAutoReject) && (null === input.changeTargetPathAliases || undefined === input.changeTargetPathAliases || "object" === typeof input.changeTargetPathAliases && null !== input.changeTargetPathAliases && false === Array.isArray(input.changeTargetPathAliases) && _io1(input.changeTargetPathAliases)) && "string" === typeof input.projectUrl && "string" === typeof input.projectName && (null === input.labelsAsLlmAgentName || undefined === input.labelsAsLlmAgentName || Array.isArray(input.labelsAsLlmAgentName) && input.labelsAsLlmAgentName.every(elem => "string" === typeof elem)) && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io2(input.workingReport)) && "string" === typeof input.urlOfStoryView && "boolean" === typeof input.disabled && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io3(input.startPreparation)) && (null === input.dailySecurityScan || undefined === input.dailySecurityScan || "object" === typeof input.dailySecurityScan && null !== input.dailySecurityScan && _io4(input.dailySecurityScan)) && (null === input.allowedIssueAuthors || undefined === input.allowedIssueAuthors || "string" === typeof input.allowedIssueAuthors || Array.isArray(input.allowedIssueAuthors) && input.allowedIssueAuthors.every(elem => "string" === typeof elem)) && (undefined === input.claudeCodeOauthTokenListJsonPath || "string" === typeof input.claudeCodeOauthTokenListJsonPath) && (undefined === input.consoleDataOutputDir || "string" === typeof input.consoleDataOutputDir) && (undefined === input.dashboardDataDir || "string" === typeof input.dashboardDataDir) && (undefined === input.workflowBlockerStoryName || "string" === typeof input.workflowBlockerStoryName) && (undefined === input.inTmuxDataOutputDir || "string" === typeof input.inTmuxDataOutputDir) && (undefined === input.inTmuxConsoleBaseUrl || "string" === typeof input.inTmuxConsoleBaseUrl) && (undefined === input.inTmuxConsoleToken || "string" === typeof input.inTmuxConsoleToken) && (undefined === input.inTmuxProjectOrder || Array.isArray(input.inTmuxProjectOrder) && input.inTmuxProjectOrder.every(elem => "string" === typeof elem)) && (undefined === input.inTmuxLauncherCommand || "string" === typeof input.inTmuxLauncherCommand) && (undefined === input.silentNotificationEnabled || "boolean" === typeof input.silentNotificationEnabled) && (undefined === input.ownerCallMarker || "string" === typeof input.ownerCallMarker) && (undefined === input.subAgentOutputRootDirectory || "string" === typeof input.subAgentOutputRootDirectory) && (undefined === input.subAgentProcessMatchPattern || "string" === typeof input.subAgentProcessMatchPattern) && (undefined === input.subAgentTranscriptRootDirectory || "string" === typeof input.subAgentTranscriptRootDirectory) && (undefined === input.mainSilentThresholdSeconds || "number" === typeof input.mainSilentThresholdSeconds) && (undefined === input.subAgentSilentThresholdSeconds || "number" === typeof input.subAgentSilentThresholdSeconds) && (undefined === input.subAgentRunningThresholdSeconds || "number" === typeof input.subAgentRunningThresholdSeconds) && (undefined === input.silentNotificationStaggerSeconds || "number" === typeof input.silentNotificationStaggerSeconds) && (undefined === input.activeHubTaskStatus || "string" === typeof input.activeHubTaskStatus) && (undefined === input.silentMainStalledMessage || "string" === typeof input.silentMainStalledMessage) && (undefined === input.silentSubAgentMessageHeader || "string" === typeof input.silentSubAgentMessageHeader) && (undefined === input.silentSubAgentMessageFooter || "string" === typeof input.silentSubAgentMessageFooter) && ("object" === typeof input.credentials && null !== input.credentials && _io5(input.credentials)); const _io1 = input => Object.keys(input).every(key => {
125
117
  const value = input[key];
126
118
  if (undefined === value)
127
119
  return true;
@@ -290,10 +282,6 @@ class HandleScheduledEventUseCaseHandler {
290
282
  path: _path + ".subAgentRunningThresholdSeconds",
291
283
  expected: "(number | undefined)",
292
284
  value: input.subAgentRunningThresholdSeconds
293
- }), undefined === input.silentNotificationCooldownSeconds || "number" === typeof input.silentNotificationCooldownSeconds || _report(_exceptionable, {
294
- path: _path + ".silentNotificationCooldownSeconds",
295
- expected: "(number | undefined)",
296
- value: input.silentNotificationCooldownSeconds
297
285
  }), undefined === input.silentNotificationStaggerSeconds || "number" === typeof input.silentNotificationStaggerSeconds || _report(_exceptionable, {
298
286
  path: _path + ".silentNotificationStaggerSeconds",
299
287
  expected: "(number | undefined)",
@@ -775,11 +763,9 @@ class HandleScheduledEventUseCaseHandler {
775
763
  const subAgentTranscriptRootDirectory = mergedInput.subAgentTranscriptRootDirectory ??
776
764
  process.env.TDPM_SUBAGENT_TRANSCRIPT_ROOT_DIRECTORY ??
777
765
  null;
778
- const silentSessionNotificationCacheRepository = new LocalStorageCacheRepository_1.LocalStorageCacheRepository(localStorageRepository, SILENT_SESSION_NOTIFICATION_CACHE_PATH);
779
766
  await (0, notifySilentTmuxSessions_1.notifySilentTmuxSessions)({
780
767
  enabled: silentNotificationEnabled,
781
768
  localCommandRunner: nodeLocalCommandRunner,
782
- cacheRepository: silentSessionNotificationCacheRepository,
783
769
  ownerCallMarker,
784
770
  subAgentOutputRootDirectory,
785
771
  subAgentProcessMatchPattern,
@@ -787,7 +773,6 @@ class HandleScheduledEventUseCaseHandler {
787
773
  mainSilentThresholdSeconds: readSilentSeconds(mergedInput.mainSilentThresholdSeconds, process.env.TDPM_MAIN_SILENT_THRESHOLD_SECONDS, notifySilentTmuxSessions_1.DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS.mainSilentThresholdSeconds),
788
774
  subAgentSilentThresholdSeconds: readSilentSeconds(mergedInput.subAgentSilentThresholdSeconds, process.env.TDPM_SUBAGENT_SILENT_THRESHOLD_SECONDS, notifySilentTmuxSessions_1.DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS.subAgentSilentThresholdSeconds),
789
775
  subAgentRunningThresholdSeconds: readSilentSeconds(mergedInput.subAgentRunningThresholdSeconds, process.env.TDPM_SUBAGENT_RUNNING_THRESHOLD_SECONDS, notifySilentTmuxSessions_1.DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS.subAgentRunningThresholdSeconds),
790
- cooldownSeconds: readSilentSeconds(mergedInput.silentNotificationCooldownSeconds, process.env.TDPM_SILENT_NOTIFICATION_COOLDOWN_SECONDS, notifySilentTmuxSessions_1.DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS.cooldownSeconds),
791
776
  staggerSeconds: readSilentSeconds(mergedInput.silentNotificationStaggerSeconds, process.env.TDPM_SILENT_NOTIFICATION_STAGGER_SECONDS, notifySilentTmuxSessions_1.DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS.staggerSeconds),
792
777
  activeHubTaskStatus: mergedInput.activeHubTaskStatus ??
793
778
  process.env.TDPM_ACTIVE_HUB_TASK_STATUS ??
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"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"}
@@ -30,18 +30,17 @@ const createSubAgentActivityRepository = (subAgentTranscriptRootDirectory, subAg
30
30
  return new ProcessListSessionSubAgentActivityRepository_1.ProcessListSessionSubAgentActivityRepository(subAgentProcessMatchPattern, new NodeSubAgentProcessLister_1.NodeSubAgentProcessLister(localCommandRunner), new FileSystemSubAgentSilentSecondsResolver_1.FileSystemSubAgentSilentSecondsResolver(subAgentOutputRootDirectory, now));
31
31
  };
32
32
  const notifySilentTmuxSessions = async (params) => {
33
- const { enabled, localCommandRunner, processEnvironReader, cacheRepository, ownerCallMarker, subAgentOutputRootDirectory, subAgentProcessMatchPattern, subAgentTranscriptRootDirectory, mainSilentThresholdSeconds, subAgentSilentThresholdSeconds, subAgentRunningThresholdSeconds, cooldownSeconds, staggerSeconds, activeHubTaskStatus, hubTaskStatusResolver, messageTemplates, now, } = params;
33
+ const { enabled, localCommandRunner, processEnvironReader, ownerCallMarker, subAgentOutputRootDirectory, subAgentProcessMatchPattern, subAgentTranscriptRootDirectory, mainSilentThresholdSeconds, subAgentSilentThresholdSeconds, subAgentRunningThresholdSeconds, staggerSeconds, activeHubTaskStatus, hubTaskStatusResolver, messageTemplates, now, } = params;
34
34
  if (!enabled) {
35
35
  console.log('Silent live session notification skipped: not enabled (set silentNotificationEnabled or TDPM_SILENT_NOTIFICATION_ENABLED=true to enable).');
36
36
  return;
37
37
  }
38
38
  const messageComposer = new ConfigurableSilentSessionMessageComposer_1.ConfigurableSilentSessionMessageComposer(messageTemplates, new DefaultSilentSessionMessageComposer_1.DefaultSilentSessionMessageComposer());
39
- const useCase = new NotifySilentLiveSessionsUseCase_1.NotifySilentLiveSessionsUseCase(new LocalProcessLiveSessionProcessSnapshotProvider_1.LocalProcessLiveSessionProcessSnapshotProvider(localCommandRunner, processEnvironReader ?? new ProcFsProcessEnvironReader_1.ProcFsProcessEnvironReader()), new FileSystemInteractiveLiveSessionTranscriptResolver_1.FileSystemInteractiveLiveSessionTranscriptResolver(), new FileSystemSessionOutputActivityRepository_1.FileSystemSessionOutputActivityRepository(), createSubAgentActivityRepository(subAgentTranscriptRootDirectory, subAgentProcessMatchPattern, subAgentOutputRootDirectory, localCommandRunner, now), createOwnerCallStatusProvider(ownerCallMarker), new TmuxSilentSessionNotificationRepository_1.TmuxSilentSessionNotificationRepository(localCommandRunner, cacheRepository), messageComposer, new RealSleeper_1.RealSleeper(), hubTaskStatusResolver);
39
+ const useCase = new NotifySilentLiveSessionsUseCase_1.NotifySilentLiveSessionsUseCase(new LocalProcessLiveSessionProcessSnapshotProvider_1.LocalProcessLiveSessionProcessSnapshotProvider(localCommandRunner, processEnvironReader ?? new ProcFsProcessEnvironReader_1.ProcFsProcessEnvironReader()), new FileSystemInteractiveLiveSessionTranscriptResolver_1.FileSystemInteractiveLiveSessionTranscriptResolver(), new FileSystemSessionOutputActivityRepository_1.FileSystemSessionOutputActivityRepository(), createSubAgentActivityRepository(subAgentTranscriptRootDirectory, subAgentProcessMatchPattern, subAgentOutputRootDirectory, localCommandRunner, now), createOwnerCallStatusProvider(ownerCallMarker), new TmuxSilentSessionNotificationRepository_1.TmuxSilentSessionNotificationRepository(localCommandRunner), messageComposer, new RealSleeper_1.RealSleeper(), hubTaskStatusResolver);
40
40
  await useCase.run({
41
41
  mainSilentThresholdSeconds,
42
42
  subAgentSilentThresholdSeconds,
43
43
  subAgentRunningThresholdSeconds,
44
- cooldownSeconds,
45
44
  staggerSeconds,
46
45
  activeHubTaskStatus,
47
46
  now,
@@ -52,7 +51,6 @@ exports.DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS = {
52
51
  mainSilentThresholdSeconds: NotifySilentLiveSessionsUseCase_1.DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS,
53
52
  subAgentSilentThresholdSeconds: NotifySilentLiveSessionsUseCase_1.DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
54
53
  subAgentRunningThresholdSeconds: NotifySilentLiveSessionsUseCase_1.DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
55
- cooldownSeconds: NotifySilentLiveSessionsUseCase_1.DEFAULT_NOTIFICATION_COOLDOWN_SECONDS,
56
54
  staggerSeconds: NotifySilentLiveSessionsUseCase_1.DEFAULT_NOTIFICATION_STAGGER_SECONDS,
57
55
  };
58
56
  //# sourceMappingURL=notifySilentTmuxSessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notifySilentTmuxSessions.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts"],"names":[],"mappings":";;;AAIA,8GAQkE;AAClE,sHAAmH;AACnH,sIAAmI;AACnI,8FAA2F;AAC3F,8IAA2I;AAC3I,4HAAyH;AACzH,wHAAqH;AAErH,gHAA6G;AAC7G,4GAAyG;AACzG,kIAA+H;AAC/H,gIAA6H;AAC7H,oIAAiI;AACjI,4FAAyF;AACzF,wHAAqH;AACrH,0HAGqE;AACrE,gEAA6D;AAsB7D,MAAM,6BAA6B,GAAG,CACpC,eAA8B,EACL,EAAE;IAC3B,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,qEAAiC,CAAC,eAAe,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,yEAAmC,EAAE,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CACvC,+BAA8C,EAC9C,2BAA0C,EAC1C,2BAA0C,EAC1C,kBAAsC,EACtC,GAAS,EAC0B,EAAE;IACrC,IAAI,+BAA+B,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,IAAI,yFAA2C,CACpD,IAAI,6FAA6C,CAC/C,+BAA+B,CAChC,EACD,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,2FAA4C,CACrD,2BAA2B,EAC3B,IAAI,qDAAyB,CAAC,kBAAkB,CAAC,EACjD,IAAI,iFAAuC,CACzC,2BAA2B,EAC3B,GAAG,CACJ,CACF,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,MAAsC,EACvB,EAAE;IACjB,MAAM,EACJ,OAAO,EACP,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,0BAA0B,EAC1B,8BAA8B,EAC9B,+BAA+B,EAC/B,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,GAAG,GACJ,GAAG,MAAM,CAAC;IACX,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CACT,2IAA2I,CAC5I,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,mFAAwC,CAClE,gBAAgB,EAChB,IAAI,yEAAmC,EAAE,CAC1C,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,iEAA+B,CACjD,IAAI,+FAA8C,CAChD,kBAAkB,EAClB,oBAAoB,IAAI,IAAI,uDAA0B,EAAE,CACzD,EACD,IAAI,uGAAkD,EAAE,EACxD,IAAI,qFAAyC,EAAE,EAC/C,gCAAgC,CAC9B,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,kBAAkB,EAClB,GAAG,CACJ,EACD,6BAA6B,CAAC,eAAe,CAAC,EAC9C,IAAI,iFAAuC,CACzC,kBAAkB,EAClB,eAAe,CAChB,EACD,eAAe,EACf,IAAI,yBAAW,EAAE,EACjB,qBAAqB,CACtB,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,0BAA0B;QAC1B,8BAA8B;QAC9B,+BAA+B;QAC/B,eAAe;QACf,cAAc;QACd,mBAAmB;QACnB,GAAG;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AAhEW,QAAA,wBAAwB,4BAgEnC;AAEW,QAAA,0CAA0C,GAAG;IACxD,0BAA0B,EAAE,uEAAqC;IACjE,8BAA8B,EAAE,2EAAyC;IACzE,+BAA+B,EAAE,4EAA0C;IAC3E,eAAe,EAAE,uEAAqC;IACtD,cAAc,EAAE,sEAAoC;CAC5C,CAAC"}
1
+ {"version":3,"file":"notifySilentTmuxSessions.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts"],"names":[],"mappings":";;;AAIA,8GAOkE;AAClE,sHAAmH;AACnH,sIAAmI;AACnI,8FAA2F;AAC3F,8IAA2I;AAC3I,4HAAyH;AACzH,wHAAqH;AACrH,gHAA6G;AAC7G,4GAAyG;AACzG,kIAA+H;AAC/H,gIAA6H;AAC7H,oIAAiI;AACjI,4FAAyF;AACzF,wHAAqH;AACrH,0HAGqE;AACrE,gEAA6D;AAoB7D,MAAM,6BAA6B,GAAG,CACpC,eAA8B,EACL,EAAE;IAC3B,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,qEAAiC,CAAC,eAAe,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,yEAAmC,EAAE,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CACvC,+BAA8C,EAC9C,2BAA0C,EAC1C,2BAA0C,EAC1C,kBAAsC,EACtC,GAAS,EAC0B,EAAE;IACrC,IAAI,+BAA+B,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,IAAI,yFAA2C,CACpD,IAAI,6FAA6C,CAC/C,+BAA+B,CAChC,EACD,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,2FAA4C,CACrD,2BAA2B,EAC3B,IAAI,qDAAyB,CAAC,kBAAkB,CAAC,EACjD,IAAI,iFAAuC,CACzC,2BAA2B,EAC3B,GAAG,CACJ,CACF,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,MAAsC,EACvB,EAAE;IACjB,MAAM,EACJ,OAAO,EACP,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,0BAA0B,EAC1B,8BAA8B,EAC9B,+BAA+B,EAC/B,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,GAAG,GACJ,GAAG,MAAM,CAAC;IACX,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CACT,2IAA2I,CAC5I,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,mFAAwC,CAClE,gBAAgB,EAChB,IAAI,yEAAmC,EAAE,CAC1C,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,iEAA+B,CACjD,IAAI,+FAA8C,CAChD,kBAAkB,EAClB,oBAAoB,IAAI,IAAI,uDAA0B,EAAE,CACzD,EACD,IAAI,uGAAkD,EAAE,EACxD,IAAI,qFAAyC,EAAE,EAC/C,gCAAgC,CAC9B,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,kBAAkB,EAClB,GAAG,CACJ,EACD,6BAA6B,CAAC,eAAe,CAAC,EAC9C,IAAI,iFAAuC,CAAC,kBAAkB,CAAC,EAC/D,eAAe,EACf,IAAI,yBAAW,EAAE,EACjB,qBAAqB,CACtB,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,0BAA0B;QAC1B,8BAA8B;QAC9B,+BAA+B;QAC/B,cAAc;QACd,mBAAmB;QACnB,GAAG;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AA1DW,QAAA,wBAAwB,4BA0DnC;AAEW,QAAA,0CAA0C,GAAG;IACxD,0BAA0B,EAAE,uEAAqC;IACjE,8BAA8B,EAAE,2EAAyC;IACzE,+BAA+B,EAAE,4EAA0C;IAC3E,cAAc,EAAE,sEAAoC;CAC5C,CAAC"}
@@ -1,33 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TmuxSilentSessionNotificationRepository = void 0;
4
- const CACHE_KEY_PREFIX = 'silent-session-notification';
5
- const readEpochSeconds = (value) => {
6
- if (!('epochSeconds' in value)) {
7
- return null;
8
- }
9
- const candidate = value.epochSeconds;
10
- if (typeof candidate !== 'number') {
11
- return null;
12
- }
13
- return candidate;
14
- };
15
4
  class TmuxSilentSessionNotificationRepository {
16
- constructor(localCommandRunner, cacheRepository) {
5
+ constructor(localCommandRunner) {
17
6
  this.localCommandRunner = localCommandRunner;
18
- this.cacheRepository = cacheRepository;
19
- this.getLastNotifiedEpochSeconds = async (sessionName) => {
20
- const cached = await this.cacheRepository.getLatest(this.toCacheKey(sessionName));
21
- if (cached === null) {
22
- return null;
23
- }
24
- return readEpochSeconds(cached.value);
25
- };
26
- this.setLastNotifiedEpochSeconds = async (sessionName, epochSeconds) => {
27
- await this.cacheRepository.set(this.toCacheKey(sessionName), {
28
- epochSeconds,
29
- });
30
- };
31
7
  this.sendSelfCheckNotification = async (sessionName, message) => {
32
8
  const literalResult = await this.localCommandRunner.runCommand('tmux', [
33
9
  'send-keys',
@@ -49,7 +25,6 @@ class TmuxSilentSessionNotificationRepository {
49
25
  throw new Error(`Failed to send notification to tmux session "${sessionName}": exit code ${submitResult.exitCode}${submitResult.stderr ? `: ${submitResult.stderr}` : ''}`);
50
26
  }
51
27
  };
52
- this.toCacheKey = (sessionName) => `${CACHE_KEY_PREFIX}/${sessionName.replace(/\//g, '_')}`;
53
28
  }
54
29
  }
55
30
  exports.TmuxSilentSessionNotificationRepository = TmuxSilentSessionNotificationRepository;
@@ -1 +1 @@
1
- {"version":3,"file":"TmuxSilentSessionNotificationRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts"],"names":[],"mappings":";;;AAIA,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAEvD,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAiB,EAAE;IACxD,IAAI,CAAC,CAAC,cAAc,IAAI,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;IACrC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAa,uCAAuC;IAClD,YACmB,kBAAsC,EACtC,eAGhB;QAJgB,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,oBAAe,GAAf,eAAe,CAG/B;QAGH,gCAA2B,GAAG,KAAK,EACjC,WAAmB,EACK,EAAE;YAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CACjD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAC7B,CAAC;YACF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,gCAA2B,GAAG,KAAK,EACjC,WAAmB,EACnB,YAAoB,EACL,EAAE;YACjB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;gBAC3D,YAAY;aACb,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,8BAAyB,GAAG,KAAK,EAC/B,WAAmB,EACnB,OAAe,EACA,EAAE;YACjB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE;gBACrE,WAAW;gBACX,IAAI;gBACJ,WAAW;gBACX,IAAI;gBACJ,OAAO;aACR,CAAC,CAAC;YACH,IAAI,aAAa,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,gDAAgD,WAAW,gBAAgB,aAAa,CAAC,QAAQ,GAC/F,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACvD,EAAE,CACH,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE;gBACpE,WAAW;gBACX,IAAI;gBACJ,WAAW;gBACX,OAAO;aACR,CAAC,CAAC;YACH,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,gDAAgD,WAAW,gBAAgB,YAAY,CAAC,QAAQ,GAC9F,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACrD,EAAE,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEM,eAAU,GAAG,CAAC,WAAmB,EAAU,EAAE,CACnD,GAAG,gBAAgB,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IAzDxD,CAAC;CA0DL;AAjED,0FAiEC"}
1
+ {"version":3,"file":"TmuxSilentSessionNotificationRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts"],"names":[],"mappings":";;;AAGA,MAAa,uCAAuC;IAClD,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;QAEnE,8BAAyB,GAAG,KAAK,EAC/B,WAAmB,EACnB,OAAe,EACA,EAAE;YACjB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE;gBACrE,WAAW;gBACX,IAAI;gBACJ,WAAW;gBACX,IAAI;gBACJ,OAAO;aACR,CAAC,CAAC;YACH,IAAI,aAAa,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,gDAAgD,WAAW,gBAAgB,aAAa,CAAC,QAAQ,GAC/F,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACvD,EAAE,CACH,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE;gBACpE,WAAW;gBACX,IAAI;gBACJ,WAAW;gBACX,OAAO;aACR,CAAC,CAAC;YACH,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,gDAAgD,WAAW,gBAAgB,YAAY,CAAC,QAAQ,GAC9F,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACrD,EAAE,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;IAjCoE,CAAC;CAkCxE;AAnCD,0FAmCC"}
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NotifySilentLiveSessionsUseCase = exports.parseHubTaskIssueUrlFromSessionName = exports.DEFAULT_NOTIFICATION_STAGGER_SECONDS = exports.DEFAULT_NOTIFICATION_COOLDOWN_SECONDS = exports.DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS = exports.DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS = exports.DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS = void 0;
3
+ exports.NotifySilentLiveSessionsUseCase = exports.parseHubTaskIssueUrlFromSessionName = exports.DEFAULT_NOTIFICATION_STAGGER_SECONDS = exports.DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS = exports.DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS = exports.DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS = void 0;
4
4
  const ResolveInteractiveLiveSessionsUseCase_1 = require("./ResolveInteractiveLiveSessionsUseCase");
5
5
  exports.DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS = 10 * 60;
6
6
  exports.DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS = 5 * 60;
7
7
  exports.DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS = 15 * 60;
8
- exports.DEFAULT_NOTIFICATION_COOLDOWN_SECONDS = 30 * 60;
9
8
  exports.DEFAULT_NOTIFICATION_STAGGER_SECONDS = 25;
10
9
  const GITHUB_ISSUE_URL_PATTERN = /^https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+$/;
11
10
  const parseHubTaskIssueUrlFromSessionName = (sessionName) => {
@@ -42,15 +41,8 @@ class NotifySilentLiveSessionsUseCase {
42
41
  ? 1
43
42
  : 0);
44
43
  console.log(`Silent live session notification: ${candidates.length} candidate(s) of ${interactiveSessions.length} interactive session(s).`);
45
- const nowEpochSeconds = Math.floor(params.now.getTime() / 1000);
46
44
  let sentCount = 0;
47
45
  for (const candidate of candidates) {
48
- const lastNotifiedEpochSeconds = await this.notificationRepository.getLastNotifiedEpochSeconds(candidate.sessionName);
49
- if (lastNotifiedEpochSeconds !== null &&
50
- nowEpochSeconds - lastNotifiedEpochSeconds < params.cooldownSeconds) {
51
- console.log(`Skipping ${candidate.sessionName}: notified ${nowEpochSeconds - lastNotifiedEpochSeconds} seconds ago, within cooldown ${params.cooldownSeconds} seconds.`);
52
- continue;
53
- }
54
46
  if (!(await this.isHubTaskActive(candidate.sessionName, params.activeHubTaskStatus))) {
55
47
  continue;
56
48
  }
@@ -58,7 +50,6 @@ class NotifySilentLiveSessionsUseCase {
58
50
  await this.sleeper.sleep(params.staggerSeconds * 1000);
59
51
  }
60
52
  await this.notificationRepository.sendSelfCheckNotification(candidate.sessionName, candidate.message);
61
- await this.notificationRepository.setLastNotifiedEpochSeconds(candidate.sessionName, nowEpochSeconds);
62
53
  sentCount += 1;
63
54
  console.log(`Notified ${candidate.sessionName}.`);
64
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NotifySilentLiveSessionsUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotifySilentLiveSessionsUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.115.0",
3
+ "version": "1.115.1",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -65,15 +65,6 @@ import {
65
65
 
66
66
  const DEFAULT_DASHBOARD_DATA_DIR: string | null = null;
67
67
 
68
- // The silent-session notification inspects the single, global set of live tmux
69
- // sessions, but the scheduled handler runs once per project. If its cooldown
70
- // were stored in the per-project cache (`./tmp/cache/<projectName>`), the same
71
- // session would get an independent cooldown record per project and be notified
72
- // once per enabled project within a single cooldown window. The cooldown must
73
- // therefore live in a single project-independent cache scope so it is shared
74
- // across every per-project pass.
75
- const SILENT_SESSION_NOTIFICATION_CACHE_PATH = './tmp/cache/shared';
76
-
77
68
  const readSilentSeconds = (
78
69
  configValue: number | undefined,
79
70
  envValue: string | undefined,
@@ -125,7 +116,6 @@ export class HandleScheduledEventUseCaseHandler {
125
116
  mainSilentThresholdSeconds?: number;
126
117
  subAgentSilentThresholdSeconds?: number;
127
118
  subAgentRunningThresholdSeconds?: number;
128
- silentNotificationCooldownSeconds?: number;
129
119
  silentNotificationStaggerSeconds?: number;
130
120
  activeHubTaskStatus?: string;
131
121
  silentMainStalledMessage?: string;
@@ -591,15 +581,9 @@ export class HandleScheduledEventUseCaseHandler {
591
581
  mergedInput.subAgentTranscriptRootDirectory ??
592
582
  process.env.TDPM_SUBAGENT_TRANSCRIPT_ROOT_DIRECTORY ??
593
583
  null;
594
- const silentSessionNotificationCacheRepository =
595
- new LocalStorageCacheRepository(
596
- localStorageRepository,
597
- SILENT_SESSION_NOTIFICATION_CACHE_PATH,
598
- );
599
584
  await notifySilentTmuxSessions({
600
585
  enabled: silentNotificationEnabled,
601
586
  localCommandRunner: nodeLocalCommandRunner,
602
- cacheRepository: silentSessionNotificationCacheRepository,
603
587
  ownerCallMarker,
604
588
  subAgentOutputRootDirectory,
605
589
  subAgentProcessMatchPattern,
@@ -619,11 +603,6 @@ export class HandleScheduledEventUseCaseHandler {
619
603
  process.env.TDPM_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
620
604
  DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS.subAgentRunningThresholdSeconds,
621
605
  ),
622
- cooldownSeconds: readSilentSeconds(
623
- mergedInput.silentNotificationCooldownSeconds,
624
- process.env.TDPM_SILENT_NOTIFICATION_COOLDOWN_SECONDS,
625
- DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS.cooldownSeconds,
626
- ),
627
606
  staggerSeconds: readSilentSeconds(
628
607
  mergedInput.silentNotificationStaggerSeconds,
629
608
  process.env.TDPM_SILENT_NOTIFICATION_STAGGER_SECONDS,
@@ -3,8 +3,6 @@ import * as os from 'os';
3
3
  import * as path from 'path';
4
4
  import { LocalCommandRunner } from '../../../domain/usecases/adapter-interfaces/LocalCommandRunner';
5
5
  import { ProcessEnvironReader } from '../../../domain/usecases/adapter-interfaces/ProcessEnvironReader';
6
- import { LocalStorageCacheRepository } from '../../repositories/LocalStorageCacheRepository';
7
- import { LocalStorageRepository } from '../../repositories/LocalStorageRepository';
8
6
  import { SilentSessionMessageTemplates } from '../../repositories/ConfigurableSilentSessionMessageComposer';
9
7
  import { Issue } from '../../../domain/entities/Issue';
10
8
  import { SILENT_SESSION_REMINDER_SENTINEL } from '../../../domain/usecases/silentSessionReminderSentinel';
@@ -38,18 +36,15 @@ const createMockRunner = (): Mocked<LocalCommandRunner> => ({
38
36
 
39
37
  describe('notifySilentTmuxSessions', () => {
40
38
  let configDir: string;
41
- let cacheDirectory: string;
42
39
 
43
40
  beforeEach(() => {
44
41
  jest.spyOn(console, 'log').mockImplementation(() => undefined);
45
42
  configDir = fs.mkdtempSync(path.join(os.tmpdir(), 'silent-config-'));
46
- cacheDirectory = fs.mkdtempSync(path.join(os.tmpdir(), 'silent-cache-'));
47
43
  });
48
44
 
49
45
  afterEach(() => {
50
46
  jest.restoreAllMocks();
51
47
  fs.rmSync(configDir, { force: true, recursive: true });
52
- fs.rmSync(cacheDirectory, { force: true, recursive: true });
53
48
  });
54
49
 
55
50
  const writeTranscript = (lines: object[]): void => {
@@ -78,17 +73,6 @@ describe('notifySilentTmuxSessions', () => {
78
73
  ]);
79
74
  };
80
75
 
81
- const makeCacheRepository = (): LocalStorageCacheRepository =>
82
- new LocalStorageCacheRepository(
83
- new LocalStorageRepository(),
84
- cacheDirectory,
85
- );
86
-
87
- const makeCacheRepositoryAt = (
88
- basePath: string,
89
- ): LocalStorageCacheRepository =>
90
- new LocalStorageCacheRepository(new LocalStorageRepository(), basePath);
91
-
92
76
  const makeEnvironReader = (): ProcessEnvironReader => ({
93
77
  readEnviron: (pid: number) =>
94
78
  pid === CLAUDE_PID
@@ -126,7 +110,6 @@ describe('notifySilentTmuxSessions', () => {
126
110
  enabled: true,
127
111
  localCommandRunner: runner,
128
112
  processEnvironReader: makeEnvironReader(),
129
- cacheRepository: makeCacheRepository(),
130
113
  ownerCallMarker: null,
131
114
  subAgentOutputRootDirectory: null,
132
115
  subAgentProcessMatchPattern: null,
@@ -219,54 +202,27 @@ describe('notifySilentTmuxSessions', () => {
219
202
  expect(sendCall).toBeUndefined();
220
203
  });
221
204
 
222
- it('does not re-notify the same silent session on the next cycle within cooldown', async () => {
205
+ it('re-notifies the same silent session on the next cycle with no cooldown suppression', async () => {
223
206
  silentAssistantTranscript();
224
- const cacheRepository = makeCacheRepository();
225
207
  const firstRunner = liveSessionRunner();
226
208
 
227
- await notifySilentTmuxSessions({
228
- ...baseParams(firstRunner),
229
- cacheRepository,
230
- });
209
+ await notifySilentTmuxSessions(baseParams(firstRunner));
231
210
 
232
- const secondRunner = liveSessionRunner();
233
- await notifySilentTmuxSessions({
234
- ...baseParams(secondRunner),
235
- cacheRepository,
236
- now: new Date(NOW.getTime() + 60 * 1000),
237
- });
238
-
239
- const secondSendCall = secondRunner.runCommand.mock.calls.find(
211
+ const firstSendCall = firstRunner.runCommand.mock.calls.find(
240
212
  (call) => call[0] === 'tmux' && call[1][0] === 'send-keys',
241
213
  );
242
- expect(secondSendCall).toBeUndefined();
243
- });
244
-
245
- it('shares the cooldown across project passes when a single project-independent cache scope is used', async () => {
246
- silentAssistantTranscript();
247
- // The handler runs once per project over the same global set of tmux
248
- // sessions. When the silent-session cooldown lives in one shared cache
249
- // scope, a second per-project pass for the same session within the cooldown
250
- // window must NOT re-send, even though it is a different project pass.
251
- const sharedCacheBasePath = path.join(cacheDirectory, 'shared');
252
- const firstRunner = liveSessionRunner();
253
-
254
- await notifySilentTmuxSessions({
255
- ...baseParams(firstRunner),
256
- cacheRepository: makeCacheRepositoryAt(sharedCacheBasePath),
257
- });
214
+ expect(firstSendCall?.[1][2]).toBe(SESSION_NAME);
258
215
 
259
216
  const secondRunner = liveSessionRunner();
260
217
  await notifySilentTmuxSessions({
261
218
  ...baseParams(secondRunner),
262
- cacheRepository: makeCacheRepositoryAt(sharedCacheBasePath),
263
219
  now: new Date(NOW.getTime() + 60 * 1000),
264
220
  });
265
221
 
266
222
  const secondSendCall = secondRunner.runCommand.mock.calls.find(
267
223
  (call) => call[0] === 'tmux' && call[1][0] === 'send-keys',
268
224
  );
269
- expect(secondSendCall).toBeUndefined();
225
+ expect(secondSendCall?.[1][2]).toBe(SESSION_NAME);
270
226
  });
271
227
 
272
228
  const HUB_TASK_SESSION_NAME =
@@ -385,32 +341,4 @@ describe('notifySilentTmuxSessions', () => {
385
341
  );
386
342
  expect(sendCall?.[1][2]).toBe(HUB_TASK_SESSION_NAME);
387
343
  });
388
-
389
- it('re-sends within the cooldown window when each project pass uses its own cache scope', async () => {
390
- silentAssistantTranscript();
391
- // This reproduces the per-project cooldown defect: when each project pass
392
- // stores its cooldown under its own project-scoped cache path, the same
393
- // session is notified once per project within the cooldown window.
394
- const firstRunner = liveSessionRunner();
395
- await notifySilentTmuxSessions({
396
- ...baseParams(firstRunner),
397
- cacheRepository: makeCacheRepositoryAt(
398
- path.join(cacheDirectory, 'umino'),
399
- ),
400
- });
401
-
402
- const secondRunner = liveSessionRunner();
403
- await notifySilentTmuxSessions({
404
- ...baseParams(secondRunner),
405
- cacheRepository: makeCacheRepositoryAt(
406
- path.join(cacheDirectory, 'xmile'),
407
- ),
408
- now: new Date(NOW.getTime() + 60 * 1000),
409
- });
410
-
411
- const secondSendCall = secondRunner.runCommand.mock.calls.find(
412
- (call) => call[0] === 'tmux' && call[1][0] === 'send-keys',
413
- );
414
- expect(secondSendCall?.[1][2]).toBe(SESSION_NAME);
415
- });
416
344
  });
@@ -8,7 +8,6 @@ import {
8
8
  DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS,
9
9
  DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
10
10
  DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
11
- DEFAULT_NOTIFICATION_COOLDOWN_SECONDS,
12
11
  DEFAULT_NOTIFICATION_STAGGER_SECONDS,
13
12
  } from '../../../domain/usecases/NotifySilentLiveSessionsUseCase';
14
13
  import { DefaultSilentSessionMessageComposer } from '../../../domain/usecases/DefaultSilentSessionMessageComposer';
@@ -17,7 +16,6 @@ import { ProcFsProcessEnvironReader } from '../../repositories/ProcFsProcessEnvi
17
16
  import { FileSystemInteractiveLiveSessionTranscriptResolver } from '../../repositories/FileSystemInteractiveLiveSessionTranscriptResolver';
18
17
  import { FileSystemSessionOutputActivityRepository } from '../../repositories/FileSystemSessionOutputActivityRepository';
19
18
  import { TmuxSilentSessionNotificationRepository } from '../../repositories/TmuxSilentSessionNotificationRepository';
20
- import { LocalStorageCacheRepository } from '../../repositories/LocalStorageCacheRepository';
21
19
  import { NoUnansweredOwnerCallStatusProvider } from '../../repositories/NoUnansweredOwnerCallStatusProvider';
22
20
  import { TranscriptOwnerCallStatusProvider } from '../../repositories/TranscriptOwnerCallStatusProvider';
23
21
  import { ProcessListSessionSubAgentActivityRepository } from '../../repositories/ProcessListSessionSubAgentActivityRepository';
@@ -35,7 +33,6 @@ export type NotifySilentTmuxSessionsParams = {
35
33
  enabled: boolean;
36
34
  localCommandRunner: LocalCommandRunner;
37
35
  processEnvironReader?: ProcessEnvironReader;
38
- cacheRepository: Pick<LocalStorageCacheRepository, 'getLatest' | 'set'>;
39
36
  ownerCallMarker: string | null;
40
37
  subAgentOutputRootDirectory: string | null;
41
38
  subAgentProcessMatchPattern: string | null;
@@ -43,7 +40,6 @@ export type NotifySilentTmuxSessionsParams = {
43
40
  mainSilentThresholdSeconds: number;
44
41
  subAgentSilentThresholdSeconds: number;
45
42
  subAgentRunningThresholdSeconds: number;
46
- cooldownSeconds: number;
47
43
  staggerSeconds: number;
48
44
  activeHubTaskStatus: string | null;
49
45
  hubTaskStatusResolver: HubTaskStatusResolver | null;
@@ -92,7 +88,6 @@ export const notifySilentTmuxSessions = async (
92
88
  enabled,
93
89
  localCommandRunner,
94
90
  processEnvironReader,
95
- cacheRepository,
96
91
  ownerCallMarker,
97
92
  subAgentOutputRootDirectory,
98
93
  subAgentProcessMatchPattern,
@@ -100,7 +95,6 @@ export const notifySilentTmuxSessions = async (
100
95
  mainSilentThresholdSeconds,
101
96
  subAgentSilentThresholdSeconds,
102
97
  subAgentRunningThresholdSeconds,
103
- cooldownSeconds,
104
98
  staggerSeconds,
105
99
  activeHubTaskStatus,
106
100
  hubTaskStatusResolver,
@@ -132,10 +126,7 @@ export const notifySilentTmuxSessions = async (
132
126
  now,
133
127
  ),
134
128
  createOwnerCallStatusProvider(ownerCallMarker),
135
- new TmuxSilentSessionNotificationRepository(
136
- localCommandRunner,
137
- cacheRepository,
138
- ),
129
+ new TmuxSilentSessionNotificationRepository(localCommandRunner),
139
130
  messageComposer,
140
131
  new RealSleeper(),
141
132
  hubTaskStatusResolver,
@@ -144,7 +135,6 @@ export const notifySilentTmuxSessions = async (
144
135
  mainSilentThresholdSeconds,
145
136
  subAgentSilentThresholdSeconds,
146
137
  subAgentRunningThresholdSeconds,
147
- cooldownSeconds,
148
138
  staggerSeconds,
149
139
  activeHubTaskStatus,
150
140
  now,
@@ -155,6 +145,5 @@ export const DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS = {
155
145
  mainSilentThresholdSeconds: DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS,
156
146
  subAgentSilentThresholdSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
157
147
  subAgentRunningThresholdSeconds: DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
158
- cooldownSeconds: DEFAULT_NOTIFICATION_COOLDOWN_SECONDS,
159
148
  staggerSeconds: DEFAULT_NOTIFICATION_STAGGER_SECONDS,
160
149
  } as const;
@@ -1,5 +1,4 @@
1
1
  import { LocalCommandRunner } from '../../domain/usecases/adapter-interfaces/LocalCommandRunner';
2
- import { LocalStorageCacheRepository } from './LocalStorageCacheRepository';
3
2
  import { TmuxSilentSessionNotificationRepository } from './TmuxSilentSessionNotificationRepository';
4
3
 
5
4
  type Mocked<T> = jest.Mocked<T> & jest.MockedObject<T>;
@@ -12,22 +11,11 @@ const createMockRunner = (): Mocked<LocalCommandRunner> => ({
12
11
  }),
13
12
  });
14
13
 
15
- const createMockCacheRepository = (): Mocked<
16
- Pick<LocalStorageCacheRepository, 'getLatest' | 'set'>
17
- > => ({
18
- getLatest: jest.fn().mockResolvedValue(null),
19
- set: jest.fn().mockResolvedValue(undefined),
20
- });
21
-
22
14
  describe('TmuxSilentSessionNotificationRepository', () => {
23
15
  describe('sendSelfCheckNotification', () => {
24
16
  it('sends the message literally then submits it with Enter', async () => {
25
17
  const runner = createMockRunner();
26
- const cache = createMockCacheRepository();
27
- const repository = new TmuxSilentSessionNotificationRepository(
28
- runner,
29
- cache,
30
- );
18
+ const repository = new TmuxSilentSessionNotificationRepository(runner);
31
19
 
32
20
  await repository.sendSelfCheckNotification(
33
21
  'https_//github_com/owner/repo/issues/9',
@@ -57,11 +45,7 @@ describe('TmuxSilentSessionNotificationRepository', () => {
57
45
  stderr: "can't find session",
58
46
  exitCode: 1,
59
47
  });
60
- const cache = createMockCacheRepository();
61
- const repository = new TmuxSilentSessionNotificationRepository(
62
- runner,
63
- cache,
64
- );
48
+ const repository = new TmuxSilentSessionNotificationRepository(runner);
65
49
 
66
50
  await expect(
67
51
  repository.sendSelfCheckNotification('missing_session', 'message'),
@@ -70,84 +54,4 @@ describe('TmuxSilentSessionNotificationRepository', () => {
70
54
  );
71
55
  });
72
56
  });
73
-
74
- describe('getLastNotifiedEpochSeconds', () => {
75
- it('returns the cached epoch seconds for a session', async () => {
76
- const runner = createMockRunner();
77
- const cache = createMockCacheRepository();
78
- cache.getLatest.mockResolvedValue({
79
- value: { epochSeconds: 1700000000 },
80
- timestamp: new Date(),
81
- });
82
- const repository = new TmuxSilentSessionNotificationRepository(
83
- runner,
84
- cache,
85
- );
86
-
87
- const result = await repository.getLastNotifiedEpochSeconds(
88
- 'https_//github_com/owner/repo/issues/9',
89
- );
90
-
91
- expect(result).toBe(1700000000);
92
- expect(cache.getLatest).toHaveBeenCalledWith(
93
- 'silent-session-notification/https___github_com_owner_repo_issues_9',
94
- );
95
- });
96
-
97
- it('returns null when no cache entry exists', async () => {
98
- const runner = createMockRunner();
99
- const cache = createMockCacheRepository();
100
- cache.getLatest.mockResolvedValue(null);
101
- const repository = new TmuxSilentSessionNotificationRepository(
102
- runner,
103
- cache,
104
- );
105
-
106
- const result = await repository.getLastNotifiedEpochSeconds(
107
- 'https_//github_com/owner/repo/issues/9',
108
- );
109
-
110
- expect(result).toBeNull();
111
- });
112
-
113
- it('returns null when the cached value has no numeric epoch', async () => {
114
- const runner = createMockRunner();
115
- const cache = createMockCacheRepository();
116
- cache.getLatest.mockResolvedValue({
117
- value: {},
118
- timestamp: new Date(),
119
- });
120
- const repository = new TmuxSilentSessionNotificationRepository(
121
- runner,
122
- cache,
123
- );
124
-
125
- const result = await repository.getLastNotifiedEpochSeconds(
126
- 'https_//github_com/owner/repo/issues/9',
127
- );
128
-
129
- expect(result).toBeNull();
130
- });
131
- });
132
-
133
- describe('setLastNotifiedEpochSeconds', () => {
134
- it('persists the epoch seconds keyed by the sanitized session name', async () => {
135
- const runner = createMockRunner();
136
- const cache = createMockCacheRepository();
137
- const repository = new TmuxSilentSessionNotificationRepository(
138
- runner,
139
- cache,
140
- );
141
-
142
- await repository.setLastNotifiedEpochSeconds(
143
- 'https_//github_com/owner/repo/issues/9',
144
- 1700000000,
145
- );
146
-
147
- expect(cache.set).toHaveBeenCalledWith(
148
- 'silent-session-notification/https___github_com_owner_repo_issues_9',
149
- { epochSeconds: 1700000000 },
150
- );
151
- });
152
- });
153
57
  });
@@ -1,49 +1,8 @@
1
1
  import { SilentSessionNotificationRepository } from '../../domain/usecases/adapter-interfaces/SilentSessionNotificationRepository';
2
2
  import { LocalCommandRunner } from '../../domain/usecases/adapter-interfaces/LocalCommandRunner';
3
- import { LocalStorageCacheRepository } from './LocalStorageCacheRepository';
4
-
5
- const CACHE_KEY_PREFIX = 'silent-session-notification';
6
-
7
- const readEpochSeconds = (value: object): number | null => {
8
- if (!('epochSeconds' in value)) {
9
- return null;
10
- }
11
- const candidate = value.epochSeconds;
12
- if (typeof candidate !== 'number') {
13
- return null;
14
- }
15
- return candidate;
16
- };
17
3
 
18
4
  export class TmuxSilentSessionNotificationRepository implements SilentSessionNotificationRepository {
19
- constructor(
20
- private readonly localCommandRunner: LocalCommandRunner,
21
- private readonly cacheRepository: Pick<
22
- LocalStorageCacheRepository,
23
- 'getLatest' | 'set'
24
- >,
25
- ) {}
26
-
27
- getLastNotifiedEpochSeconds = async (
28
- sessionName: string,
29
- ): Promise<number | null> => {
30
- const cached = await this.cacheRepository.getLatest(
31
- this.toCacheKey(sessionName),
32
- );
33
- if (cached === null) {
34
- return null;
35
- }
36
- return readEpochSeconds(cached.value);
37
- };
38
-
39
- setLastNotifiedEpochSeconds = async (
40
- sessionName: string,
41
- epochSeconds: number,
42
- ): Promise<void> => {
43
- await this.cacheRepository.set(this.toCacheKey(sessionName), {
44
- epochSeconds,
45
- });
46
- };
5
+ constructor(private readonly localCommandRunner: LocalCommandRunner) {}
47
6
 
48
7
  sendSelfCheckNotification = async (
49
8
  sessionName: string,
@@ -77,7 +36,4 @@ export class TmuxSilentSessionNotificationRepository implements SilentSessionNot
77
36
  );
78
37
  }
79
38
  };
80
-
81
- private toCacheKey = (sessionName: string): string =>
82
- `${CACHE_KEY_PREFIX}/${sessionName.replace(/\//g, '_')}`;
83
39
  }
@@ -5,7 +5,6 @@ import {
5
5
  DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS,
6
6
  DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
7
7
  DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
8
- DEFAULT_NOTIFICATION_COOLDOWN_SECONDS,
9
8
  DEFAULT_NOTIFICATION_STAGGER_SECONDS,
10
9
  } from './NotifySilentLiveSessionsUseCase';
11
10
  import { Issue } from '../entities/Issue';
@@ -46,7 +45,6 @@ describe('NotifySilentLiveSessionsUseCase', () => {
46
45
  mainSilentThresholdSeconds: number;
47
46
  subAgentSilentThresholdSeconds: number;
48
47
  subAgentRunningThresholdSeconds: number;
49
- cooldownSeconds: number;
50
48
  staggerSeconds: number;
51
49
  activeHubTaskStatus: string | null;
52
50
  now: Date;
@@ -54,7 +52,6 @@ describe('NotifySilentLiveSessionsUseCase', () => {
54
52
  mainSilentThresholdSeconds: DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS,
55
53
  subAgentSilentThresholdSeconds: DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS,
56
54
  subAgentRunningThresholdSeconds: DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS,
57
- cooldownSeconds: DEFAULT_NOTIFICATION_COOLDOWN_SECONDS,
58
55
  staggerSeconds: DEFAULT_NOTIFICATION_STAGGER_SECONDS,
59
56
  activeHubTaskStatus: null,
60
57
  now,
@@ -127,8 +124,6 @@ describe('NotifySilentLiveSessionsUseCase', () => {
127
124
  .mockResolvedValue(new Set<string>()),
128
125
  };
129
126
  mockNotificationRepository = {
130
- getLastNotifiedEpochSeconds: jest.fn().mockResolvedValue(null),
131
- setLastNotifiedEpochSeconds: jest.fn().mockResolvedValue(undefined),
132
127
  sendSelfCheckNotification: jest.fn().mockResolvedValue(undefined),
133
128
  };
134
129
  mockMessageComposer = {
@@ -210,7 +205,6 @@ describe('NotifySilentLiveSessionsUseCase', () => {
210
205
  expect(DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS).toBe(600);
211
206
  expect(DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS).toBe(300);
212
207
  expect(DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS).toBe(900);
213
- expect(DEFAULT_NOTIFICATION_COOLDOWN_SECONDS).toBe(30 * 60);
214
208
  expect(DEFAULT_NOTIFICATION_STAGGER_SECONDS).toBe(25);
215
209
  });
216
210
 
@@ -379,7 +373,7 @@ describe('NotifySilentLiveSessionsUseCase', () => {
379
373
  ).not.toHaveBeenCalled();
380
374
  });
381
375
 
382
- it('does not re-notify a session within the cooldown window', async () => {
376
+ it('re-notifies a session on every consecutive cycle while it remains a valid silent target', async () => {
383
377
  setupLiveInteractiveSession('workbench');
384
378
  mockSessionOutputActivityRepository.listSessionOutputActivities.mockResolvedValue(
385
379
  [
@@ -390,15 +384,44 @@ describe('NotifySilentLiveSessionsUseCase', () => {
390
384
  },
391
385
  ],
392
386
  );
393
- mockNotificationRepository.getLastNotifiedEpochSeconds.mockResolvedValue(
394
- nowEpochSeconds - DEFAULT_NOTIFICATION_COOLDOWN_SECONDS + 1,
387
+
388
+ await useCase.run(runParams());
389
+ await useCase.run(runParams());
390
+
391
+ expect(
392
+ mockNotificationRepository.sendSelfCheckNotification,
393
+ ).toHaveBeenCalledTimes(2);
394
+ expect(
395
+ mockNotificationRepository.sendSelfCheckNotification,
396
+ ).toHaveBeenNthCalledWith(1, 'workbench', MAIN_STALLED_SECTION);
397
+ expect(
398
+ mockNotificationRepository.sendSelfCheckNotification,
399
+ ).toHaveBeenNthCalledWith(2, 'workbench', MAIN_STALLED_SECTION);
400
+ });
401
+
402
+ it('notifies on every repeated cycle at the same instant without reading any cooldown state', async () => {
403
+ setupLiveInteractiveSession('workbench');
404
+ mockSessionOutputActivityRepository.listSessionOutputActivities.mockResolvedValue(
405
+ [
406
+ {
407
+ sessionName: 'workbench',
408
+ lastOutputEpochSeconds:
409
+ nowEpochSeconds - DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS,
410
+ },
411
+ ],
395
412
  );
396
413
 
414
+ await useCase.run(runParams());
415
+ await useCase.run(runParams());
397
416
  await useCase.run(runParams());
398
417
 
399
418
  expect(
400
419
  mockNotificationRepository.sendSelfCheckNotification,
401
- ).not.toHaveBeenCalled();
420
+ ).toHaveBeenCalledTimes(3);
421
+ expect(Object.keys(mockNotificationRepository)).toEqual([
422
+ 'sendSelfCheckNotification',
423
+ ]);
424
+ expect(runParams()).not.toHaveProperty('cooldownSeconds');
402
425
  });
403
426
 
404
427
  it('sends to multiple sessions sequentially with a stagger delay between sends', async () => {
@@ -14,7 +14,6 @@ import { ResolveInteractiveLiveSessionsUseCase } from './ResolveInteractiveLiveS
14
14
  export const DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS = 10 * 60;
15
15
  export const DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS = 5 * 60;
16
16
  export const DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS = 15 * 60;
17
- export const DEFAULT_NOTIFICATION_COOLDOWN_SECONDS = 30 * 60;
18
17
  export const DEFAULT_NOTIFICATION_STAGGER_SECONDS = 25;
19
18
 
20
19
  const GITHUB_ISSUE_URL_PATTERN =
@@ -53,7 +52,6 @@ export class NotifySilentLiveSessionsUseCase {
53
52
  mainSilentThresholdSeconds: number;
54
53
  subAgentSilentThresholdSeconds: number;
55
54
  subAgentRunningThresholdSeconds: number;
56
- cooldownSeconds: number;
57
55
  staggerSeconds: number;
58
56
  activeHubTaskStatus: string | null;
59
57
  now: Date;
@@ -92,24 +90,8 @@ export class NotifySilentLiveSessionsUseCase {
92
90
  `Silent live session notification: ${candidates.length} candidate(s) of ${interactiveSessions.length} interactive session(s).`,
93
91
  );
94
92
 
95
- const nowEpochSeconds = Math.floor(params.now.getTime() / 1000);
96
93
  let sentCount = 0;
97
94
  for (const candidate of candidates) {
98
- const lastNotifiedEpochSeconds =
99
- await this.notificationRepository.getLastNotifiedEpochSeconds(
100
- candidate.sessionName,
101
- );
102
- if (
103
- lastNotifiedEpochSeconds !== null &&
104
- nowEpochSeconds - lastNotifiedEpochSeconds < params.cooldownSeconds
105
- ) {
106
- console.log(
107
- `Skipping ${candidate.sessionName}: notified ${
108
- nowEpochSeconds - lastNotifiedEpochSeconds
109
- } seconds ago, within cooldown ${params.cooldownSeconds} seconds.`,
110
- );
111
- continue;
112
- }
113
95
  if (
114
96
  !(await this.isHubTaskActive(
115
97
  candidate.sessionName,
@@ -125,10 +107,6 @@ export class NotifySilentLiveSessionsUseCase {
125
107
  candidate.sessionName,
126
108
  candidate.message,
127
109
  );
128
- await this.notificationRepository.setLastNotifiedEpochSeconds(
129
- candidate.sessionName,
130
- nowEpochSeconds,
131
- );
132
110
  sentCount += 1;
133
111
  console.log(`Notified ${candidate.sessionName}.`);
134
112
  }
@@ -1,9 +1,4 @@
1
1
  export interface SilentSessionNotificationRepository {
2
- getLastNotifiedEpochSeconds: (sessionName: string) => Promise<number | null>;
3
- setLastNotifiedEpochSeconds: (
4
- sessionName: string,
5
- epochSeconds: number,
6
- ) => Promise<void>;
7
2
  sendSelfCheckNotification: (
8
3
  sessionName: string,
9
4
  message: string,
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AA0D3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CA+iBP;CACH"}
1
+ {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAiD3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAmiBP;CACH"}
@@ -1,13 +1,11 @@
1
1
  import { LocalCommandRunner } from '../../../domain/usecases/adapter-interfaces/LocalCommandRunner';
2
2
  import { ProcessEnvironReader } from '../../../domain/usecases/adapter-interfaces/ProcessEnvironReader';
3
3
  import { HubTaskStatusResolver } from '../../../domain/usecases/NotifySilentLiveSessionsUseCase';
4
- import { LocalStorageCacheRepository } from '../../repositories/LocalStorageCacheRepository';
5
4
  import { SilentSessionMessageTemplates } from '../../repositories/ConfigurableSilentSessionMessageComposer';
6
5
  export type NotifySilentTmuxSessionsParams = {
7
6
  enabled: boolean;
8
7
  localCommandRunner: LocalCommandRunner;
9
8
  processEnvironReader?: ProcessEnvironReader;
10
- cacheRepository: Pick<LocalStorageCacheRepository, 'getLatest' | 'set'>;
11
9
  ownerCallMarker: string | null;
12
10
  subAgentOutputRootDirectory: string | null;
13
11
  subAgentProcessMatchPattern: string | null;
@@ -15,7 +13,6 @@ export type NotifySilentTmuxSessionsParams = {
15
13
  mainSilentThresholdSeconds: number;
16
14
  subAgentSilentThresholdSeconds: number;
17
15
  subAgentRunningThresholdSeconds: number;
18
- cooldownSeconds: number;
19
16
  staggerSeconds: number;
20
17
  activeHubTaskStatus: string | null;
21
18
  hubTaskStatusResolver: HubTaskStatusResolver | null;
@@ -27,7 +24,6 @@ export declare const DEFAULT_NOTIFY_SILENT_TMUX_SESSIONS_PARAMS: {
27
24
  readonly mainSilentThresholdSeconds: number;
28
25
  readonly subAgentSilentThresholdSeconds: number;
29
26
  readonly subAgentRunningThresholdSeconds: number;
30
- readonly cooldownSeconds: number;
31
27
  readonly staggerSeconds: 25;
32
28
  };
33
29
  //# sourceMappingURL=notifySilentTmuxSessions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notifySilentTmuxSessions.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gEAAgE,CAAC;AAGpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,kEAAkE,CAAC;AACxG,OAAO,EAEL,qBAAqB,EAMtB,MAAM,0DAA0D,CAAC;AAOlE,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAQ7F,OAAO,EAEL,6BAA6B,EAC9B,MAAM,6DAA6D,CAAC;AAGrE,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,eAAe,EAAE,IAAI,CAAC,2BAA2B,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC;IACxE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,+BAA+B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,0BAA0B,EAAE,MAAM,CAAC;IACnC,8BAA8B,EAAE,MAAM,CAAC;IACvC,+BAA+B,EAAE,MAAM,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qBAAqB,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACpD,gBAAgB,EAAE,6BAA6B,CAAC;IAChD,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAoCF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,8BAA8B,KACrC,OAAO,CAAC,IAAI,CA8Dd,CAAC;AAEF,eAAO,MAAM,0CAA0C;;;;;;CAM7C,CAAC"}
1
+ {"version":3,"file":"notifySilentTmuxSessions.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gEAAgE,CAAC;AAGpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,kEAAkE,CAAC;AACxG,OAAO,EAEL,qBAAqB,EAKtB,MAAM,0DAA0D,CAAC;AAclE,OAAO,EAEL,6BAA6B,EAC9B,MAAM,6DAA6D,CAAC;AAGrE,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,+BAA+B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,0BAA0B,EAAE,MAAM,CAAC;IACnC,8BAA8B,EAAE,MAAM,CAAC;IACvC,+BAA+B,EAAE,MAAM,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qBAAqB,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACpD,gBAAgB,EAAE,6BAA6B,CAAC;IAChD,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAoCF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,8BAA8B,KACrC,OAAO,CAAC,IAAI,CAwDd,CAAC;AAEF,eAAO,MAAM,0CAA0C;;;;;CAK7C,CAAC"}
@@ -1,13 +1,8 @@
1
1
  import { SilentSessionNotificationRepository } from '../../domain/usecases/adapter-interfaces/SilentSessionNotificationRepository';
2
2
  import { LocalCommandRunner } from '../../domain/usecases/adapter-interfaces/LocalCommandRunner';
3
- import { LocalStorageCacheRepository } from './LocalStorageCacheRepository';
4
3
  export declare class TmuxSilentSessionNotificationRepository implements SilentSessionNotificationRepository {
5
4
  private readonly localCommandRunner;
6
- private readonly cacheRepository;
7
- constructor(localCommandRunner: LocalCommandRunner, cacheRepository: Pick<LocalStorageCacheRepository, 'getLatest' | 'set'>);
8
- getLastNotifiedEpochSeconds: (sessionName: string) => Promise<number | null>;
9
- setLastNotifiedEpochSeconds: (sessionName: string, epochSeconds: number) => Promise<void>;
5
+ constructor(localCommandRunner: LocalCommandRunner);
10
6
  sendSelfCheckNotification: (sessionName: string, message: string) => Promise<void>;
11
- private toCacheKey;
12
7
  }
13
8
  //# sourceMappingURL=TmuxSilentSessionNotificationRepository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TmuxSilentSessionNotificationRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,8EAA8E,CAAC;AACnI,OAAO,EAAE,kBAAkB,EAAE,MAAM,6DAA6D,CAAC;AACjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAe5E,qBAAa,uCAAwC,YAAW,mCAAmC;IAE/F,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBADf,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,IAAI,CACpC,2BAA2B,EAC3B,WAAW,GAAG,KAAK,CACpB;IAGH,2BAA2B,GACzB,aAAa,MAAM,KAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQvB;IAEF,2BAA2B,GACzB,aAAa,MAAM,EACnB,cAAc,MAAM,KACnB,OAAO,CAAC,IAAI,CAAC,CAId;IAEF,yBAAyB,GACvB,aAAa,MAAM,EACnB,SAAS,MAAM,KACd,OAAO,CAAC,IAAI,CAAC,CA4Bd;IAEF,OAAO,CAAC,UAAU,CACyC;CAC5D"}
1
+ {"version":3,"file":"TmuxSilentSessionNotificationRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,8EAA8E,CAAC;AACnI,OAAO,EAAE,kBAAkB,EAAE,MAAM,6DAA6D,CAAC;AAEjG,qBAAa,uCAAwC,YAAW,mCAAmC;IACrF,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,kBAAkB;IAEnE,yBAAyB,GACvB,aAAa,MAAM,EACnB,SAAS,MAAM,KACd,OAAO,CAAC,IAAI,CAAC,CA4Bd;CACH"}
@@ -10,7 +10,6 @@ import { IssueRepository } from './adapter-interfaces/IssueRepository';
10
10
  export declare const DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS: number;
11
11
  export declare const DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS: number;
12
12
  export declare const DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS: number;
13
- export declare const DEFAULT_NOTIFICATION_COOLDOWN_SECONDS: number;
14
13
  export declare const DEFAULT_NOTIFICATION_STAGGER_SECONDS = 25;
15
14
  export declare const parseHubTaskIssueUrlFromSessionName: (sessionName: string) => string | null;
16
15
  export type HubTaskStatusResolver = Pick<IssueRepository, 'getIssueByUrl'>;
@@ -30,7 +29,6 @@ export declare class NotifySilentLiveSessionsUseCase {
30
29
  mainSilentThresholdSeconds: number;
31
30
  subAgentSilentThresholdSeconds: number;
32
31
  subAgentRunningThresholdSeconds: number;
33
- cooldownSeconds: number;
34
32
  staggerSeconds: number;
35
33
  activeHubTaskStatus: string | null;
36
34
  now: Date;
@@ -1 +1 @@
1
- {"version":3,"file":"NotifySilentLiveSessionsUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kCAAkC,EAAE,MAAM,yDAAyD,CAAC;AAC7G,OAAO,EAAE,wCAAwC,EAAE,MAAM,+DAA+D,CAAC;AACzH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AACvG,OAAO,EAAE,iCAAiC,EAAE,MAAM,wDAAwD,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACjG,OAAO,EAAE,mCAAmC,EAAE,MAAM,0DAA0D,CAAC;AAC/G,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAGvE,eAAO,MAAM,qCAAqC,QAAU,CAAC;AAC7D,eAAO,MAAM,yCAAyC,QAAS,CAAC;AAChE,eAAO,MAAM,0CAA0C,QAAU,CAAC;AAClE,eAAO,MAAM,qCAAqC,QAAU,CAAC;AAC7D,eAAO,MAAM,oCAAoC,KAAK,CAAC;AAKvD,eAAO,MAAM,mCAAmC,GAC9C,aAAa,MAAM,KAClB,MAAM,GAAG,IAEX,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAO3E,qBAAa,+BAA+B;IAKxC,OAAO,CAAC,QAAQ,CAAC,kCAAkC;IACnD,OAAO,CAAC,QAAQ,CAAC,wCAAwC;IACzD,OAAO,CAAC,QAAQ,CAAC,+BAA+B;IAChD,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAZxC,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CACD;gBAG3B,kCAAkC,EAAE,kCAAkC,EACtE,wCAAwC,EAAE,wCAAwC,EAClF,+BAA+B,EAAE,+BAA+B,EAChE,0BAA0B,EAAE,iCAAiC,EAC7D,uBAAuB,EAAE,uBAAuB,EAChD,sBAAsB,EAAE,mCAAmC,EAC3D,eAAe,EAAE,4BAA4B,EAC7C,OAAO,EAAE,OAAO,EAChB,qBAAqB,GAAE,qBAAqB,GAAG,IAAW;IAG7E,GAAG,GAAU,QAAQ;QACnB,0BAA0B,EAAE,MAAM,CAAC;QACnC,8BAA8B,EAAE,MAAM,CAAC;QACvC,+BAA+B,EAAE,MAAM,CAAC;QACxC,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,GAAG,EAAE,IAAI,CAAC;KACX,KAAG,OAAO,CAAC,IAAI,CAAC,CA2Ef;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEF,OAAO,CAAC,gBAAgB,CA8CtB;IAEF,OAAO,CAAC,cAAc,CAqCpB;CACH"}
1
+ {"version":3,"file":"NotifySilentLiveSessionsUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifySilentLiveSessionsUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kCAAkC,EAAE,MAAM,yDAAyD,CAAC;AAC7G,OAAO,EAAE,wCAAwC,EAAE,MAAM,+DAA+D,CAAC;AACzH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AACvG,OAAO,EAAE,iCAAiC,EAAE,MAAM,wDAAwD,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACjG,OAAO,EAAE,mCAAmC,EAAE,MAAM,0DAA0D,CAAC;AAC/G,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAGvE,eAAO,MAAM,qCAAqC,QAAU,CAAC;AAC7D,eAAO,MAAM,yCAAyC,QAAS,CAAC;AAChE,eAAO,MAAM,0CAA0C,QAAU,CAAC;AAClE,eAAO,MAAM,oCAAoC,KAAK,CAAC;AAKvD,eAAO,MAAM,mCAAmC,GAC9C,aAAa,MAAM,KAClB,MAAM,GAAG,IAEX,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAO3E,qBAAa,+BAA+B;IAKxC,OAAO,CAAC,QAAQ,CAAC,kCAAkC;IACnD,OAAO,CAAC,QAAQ,CAAC,wCAAwC;IACzD,OAAO,CAAC,QAAQ,CAAC,+BAA+B;IAChD,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAZxC,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CACD;gBAG3B,kCAAkC,EAAE,kCAAkC,EACtE,wCAAwC,EAAE,wCAAwC,EAClF,+BAA+B,EAAE,+BAA+B,EAChE,0BAA0B,EAAE,iCAAiC,EAC7D,uBAAuB,EAAE,uBAAuB,EAChD,sBAAsB,EAAE,mCAAmC,EAC3D,eAAe,EAAE,4BAA4B,EAC7C,OAAO,EAAE,OAAO,EAChB,qBAAqB,GAAE,qBAAqB,GAAG,IAAW;IAG7E,GAAG,GAAU,QAAQ;QACnB,0BAA0B,EAAE,MAAM,CAAC;QACnC,8BAA8B,EAAE,MAAM,CAAC;QACvC,+BAA+B,EAAE,MAAM,CAAC;QACxC,cAAc,EAAE,MAAM,CAAC;QACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,GAAG,EAAE,IAAI,CAAC;KACX,KAAG,OAAO,CAAC,IAAI,CAAC,CAuDf;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEF,OAAO,CAAC,gBAAgB,CA8CtB;IAEF,OAAO,CAAC,cAAc,CAqCpB;CACH"}
@@ -1,6 +1,4 @@
1
1
  export interface SilentSessionNotificationRepository {
2
- getLastNotifiedEpochSeconds: (sessionName: string) => Promise<number | null>;
3
- setLastNotifiedEpochSeconds: (sessionName: string, epochSeconds: number) => Promise<void>;
4
2
  sendSelfCheckNotification: (sessionName: string, message: string) => Promise<void>;
5
3
  }
6
4
  //# sourceMappingURL=SilentSessionNotificationRepository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SilentSessionNotificationRepository.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/SilentSessionNotificationRepository.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mCAAmC;IAClD,2BAA2B,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7E,2BAA2B,EAAE,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,yBAAyB,EAAE,CACzB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB"}
1
+ {"version":3,"file":"SilentSessionNotificationRepository.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/SilentSessionNotificationRepository.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mCAAmC;IAClD,yBAAyB,EAAE,CACzB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB"}