github-issue-tower-defence-management 1.110.1 → 1.111.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 (97) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +10 -9
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +9 -21
  4. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  5. package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js +10 -15
  6. package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js.map +1 -1
  7. package/bin/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.js +104 -0
  8. package/bin/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.js.map +1 -0
  9. package/bin/adapter/repositories/FileSystemSessionOutputActivityRepository.js +55 -19
  10. package/bin/adapter/repositories/FileSystemSessionOutputActivityRepository.js.map +1 -1
  11. package/bin/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.js +75 -0
  12. package/bin/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.js.map +1 -0
  13. package/bin/adapter/repositories/NoUnansweredOwnerCallStatusProvider.js +1 -1
  14. package/bin/adapter/repositories/NoUnansweredOwnerCallStatusProvider.js.map +1 -1
  15. package/bin/adapter/repositories/ProcFsProcessEnvironReader.js +73 -0
  16. package/bin/adapter/repositories/ProcFsProcessEnvironReader.js.map +1 -0
  17. package/bin/adapter/repositories/TranscriptOwnerCallStatusProvider.js +8 -16
  18. package/bin/adapter/repositories/TranscriptOwnerCallStatusProvider.js.map +1 -1
  19. package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js +2 -1
  20. package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js.map +1 -1
  21. package/bin/domain/entities/InteractiveLiveSession.js +3 -0
  22. package/bin/domain/entities/InteractiveLiveSession.js.map +1 -0
  23. package/bin/domain/entities/LiveSessionProcessSnapshot.js +3 -0
  24. package/bin/domain/entities/LiveSessionProcessSnapshot.js.map +1 -0
  25. package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js +20 -33
  26. package/bin/domain/usecases/NotifySilentLiveSessionsUseCase.js.map +1 -1
  27. package/bin/domain/usecases/ResolveInteractiveLiveSessionsUseCase.js +89 -0
  28. package/bin/domain/usecases/ResolveInteractiveLiveSessionsUseCase.js.map +1 -0
  29. package/bin/domain/usecases/adapter-interfaces/InteractiveLiveSessionTranscriptResolver.js +3 -0
  30. package/bin/domain/usecases/adapter-interfaces/InteractiveLiveSessionTranscriptResolver.js.map +1 -0
  31. package/bin/domain/usecases/adapter-interfaces/LiveSessionProcessSnapshotProvider.js +3 -0
  32. package/bin/domain/usecases/adapter-interfaces/LiveSessionProcessSnapshotProvider.js.map +1 -0
  33. package/bin/domain/usecases/adapter-interfaces/ProcessEnvironReader.js +3 -0
  34. package/bin/domain/usecases/adapter-interfaces/ProcessEnvironReader.js.map +1 -0
  35. package/package.json +1 -1
  36. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +5 -15
  37. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +96 -204
  38. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +19 -40
  39. package/src/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.test.ts +147 -0
  40. package/src/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.ts +75 -0
  41. package/src/adapter/repositories/FileSystemSessionOutputActivityRepository.test.ts +82 -44
  42. package/src/adapter/repositories/FileSystemSessionOutputActivityRepository.ts +62 -24
  43. package/src/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.test.ts +138 -0
  44. package/src/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.ts +93 -0
  45. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.test.ts +6 -4
  46. package/src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.ts +1 -1
  47. package/src/adapter/repositories/ProcFsProcessEnvironReader.test.ts +60 -0
  48. package/src/adapter/repositories/ProcFsProcessEnvironReader.ts +38 -0
  49. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.test.ts +61 -81
  50. package/src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts +8 -25
  51. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.test.ts +29 -0
  52. package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts +4 -1
  53. package/src/domain/entities/InteractiveLiveSession.ts +5 -0
  54. package/src/domain/entities/LiveSessionProcessSnapshot.ts +17 -0
  55. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.test.ts +125 -349
  56. package/src/domain/usecases/NotifySilentLiveSessionsUseCase.ts +33 -55
  57. package/src/domain/usecases/ResolveInteractiveLiveSessionsUseCase.test.ts +220 -0
  58. package/src/domain/usecases/ResolveInteractiveLiveSessionsUseCase.ts +105 -0
  59. package/src/domain/usecases/adapter-interfaces/InteractiveLiveSessionTranscriptResolver.ts +7 -0
  60. package/src/domain/usecases/adapter-interfaces/LiveSessionProcessSnapshotProvider.ts +5 -0
  61. package/src/domain/usecases/adapter-interfaces/OwnerCallStatusProvider.ts +1 -1
  62. package/src/domain/usecases/adapter-interfaces/ProcessEnvironReader.ts +3 -0
  63. package/src/domain/usecases/adapter-interfaces/SessionOutputActivityRepository.ts +1 -1
  64. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  65. package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts +3 -7
  66. package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts.map +1 -1
  67. package/types/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.d.ts +18 -0
  68. package/types/adapter/repositories/FileSystemInteractiveLiveSessionTranscriptResolver.d.ts.map +1 -0
  69. package/types/adapter/repositories/FileSystemSessionOutputActivityRepository.d.ts +9 -5
  70. package/types/adapter/repositories/FileSystemSessionOutputActivityRepository.d.ts.map +1 -1
  71. package/types/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.d.ts +21 -0
  72. package/types/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.d.ts.map +1 -0
  73. package/types/adapter/repositories/NoUnansweredOwnerCallStatusProvider.d.ts +1 -1
  74. package/types/adapter/repositories/NoUnansweredOwnerCallStatusProvider.d.ts.map +1 -1
  75. package/types/adapter/repositories/ProcFsProcessEnvironReader.d.ts +12 -0
  76. package/types/adapter/repositories/ProcFsProcessEnvironReader.d.ts.map +1 -0
  77. package/types/adapter/repositories/TranscriptOwnerCallStatusProvider.d.ts +2 -4
  78. package/types/adapter/repositories/TranscriptOwnerCallStatusProvider.d.ts.map +1 -1
  79. package/types/adapter/repositories/TranscriptSessionSubAgentActivityRepository.d.ts.map +1 -1
  80. package/types/domain/entities/InteractiveLiveSession.d.ts +6 -0
  81. package/types/domain/entities/InteractiveLiveSession.d.ts.map +1 -0
  82. package/types/domain/entities/LiveSessionProcessSnapshot.d.ts +16 -0
  83. package/types/domain/entities/LiveSessionProcessSnapshot.d.ts.map +1 -0
  84. package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts +6 -11
  85. package/types/domain/usecases/NotifySilentLiveSessionsUseCase.d.ts.map +1 -1
  86. package/types/domain/usecases/ResolveInteractiveLiveSessionsUseCase.d.ts +23 -0
  87. package/types/domain/usecases/ResolveInteractiveLiveSessionsUseCase.d.ts.map +1 -0
  88. package/types/domain/usecases/adapter-interfaces/InteractiveLiveSessionTranscriptResolver.d.ts +5 -0
  89. package/types/domain/usecases/adapter-interfaces/InteractiveLiveSessionTranscriptResolver.d.ts.map +1 -0
  90. package/types/domain/usecases/adapter-interfaces/LiveSessionProcessSnapshotProvider.d.ts +5 -0
  91. package/types/domain/usecases/adapter-interfaces/LiveSessionProcessSnapshotProvider.d.ts.map +1 -0
  92. package/types/domain/usecases/adapter-interfaces/OwnerCallStatusProvider.d.ts +1 -1
  93. package/types/domain/usecases/adapter-interfaces/OwnerCallStatusProvider.d.ts.map +1 -1
  94. package/types/domain/usecases/adapter-interfaces/ProcessEnvironReader.d.ts +4 -0
  95. package/types/domain/usecases/adapter-interfaces/ProcessEnvironReader.d.ts.map +1 -0
  96. package/types/domain/usecases/adapter-interfaces/SessionOutputActivityRepository.d.ts +1 -1
  97. package/types/domain/usecases/adapter-interfaces/SessionOutputActivityRepository.d.ts.map +1 -1
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocalProcessLiveSessionProcessSnapshotProvider = void 0;
4
+ const SESSION_ID_ENV_KEY = 'CLAUDE_CODE_SESSION_ID';
5
+ const CONFIG_DIR_ENV_KEY = 'CLAUDE_CONFIG_DIR';
6
+ /**
7
+ * Builds a live-session process snapshot from the local host: it lists the live
8
+ * tmux sessions and each session's pane process ids, lists the full process
9
+ * tree with command lines, and reads each process environment to expose the
10
+ * Claude Code session id and config directory. The snapshot is consumed by a
11
+ * pure resolver, so all host access is contained in this adapter.
12
+ */
13
+ class LocalProcessLiveSessionProcessSnapshotProvider {
14
+ constructor(localCommandRunner, environReader) {
15
+ this.localCommandRunner = localCommandRunner;
16
+ this.environReader = environReader;
17
+ this.getSnapshot = async () => {
18
+ const sessionNames = await this.listSessionNames();
19
+ const sessions = [];
20
+ for (const sessionName of sessionNames) {
21
+ const panePids = await this.listPanePids(sessionName);
22
+ sessions.push({ sessionName, panePids });
23
+ }
24
+ const processes = await this.listProcesses();
25
+ return { sessions, processes };
26
+ };
27
+ this.listSessionNames = async () => {
28
+ const { stdout, exitCode } = await this.localCommandRunner.runCommand('tmux', ['list-sessions', '-F', '#{session_name}']);
29
+ if (exitCode !== 0) {
30
+ return [];
31
+ }
32
+ return stdout
33
+ .split('\n')
34
+ .map((line) => line.trim())
35
+ .filter((line) => line.length > 0);
36
+ };
37
+ this.listPanePids = async (sessionName) => {
38
+ const { stdout, exitCode } = await this.localCommandRunner.runCommand('tmux', ['list-panes', '-t', sessionName, '-F', '#{pane_pid}']);
39
+ if (exitCode !== 0) {
40
+ return [];
41
+ }
42
+ return stdout
43
+ .split('\n')
44
+ .map((line) => Number(line.trim()))
45
+ .filter((pid) => Number.isInteger(pid) && pid > 0);
46
+ };
47
+ this.listProcesses = async () => {
48
+ const { stdout, exitCode } = await this.localCommandRunner.runCommand('ps', ['-eo', 'pid=,ppid=,args=']);
49
+ if (exitCode !== 0) {
50
+ return [];
51
+ }
52
+ const processes = [];
53
+ for (const line of stdout.split('\n')) {
54
+ const match = line.match(/^\s*(\d+)\s+(\d+)\s+(.*)$/);
55
+ if (match === null) {
56
+ continue;
57
+ }
58
+ const pid = Number(match[1]);
59
+ const ppid = Number(match[2]);
60
+ const commandLine = match[3].trim();
61
+ const environ = this.environReader.readEnviron(pid);
62
+ processes.push({
63
+ pid,
64
+ ppid,
65
+ commandLine,
66
+ sessionId: environ?.[SESSION_ID_ENV_KEY] ?? null,
67
+ configDir: environ?.[CONFIG_DIR_ENV_KEY] ?? null,
68
+ });
69
+ }
70
+ return processes;
71
+ };
72
+ }
73
+ }
74
+ exports.LocalProcessLiveSessionProcessSnapshotProvider = LocalProcessLiveSessionProcessSnapshotProvider;
75
+ //# sourceMappingURL=LocalProcessLiveSessionProcessSnapshotProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalProcessLiveSessionProcessSnapshotProvider.js","sourceRoot":"","sources":["../../../src/adapter/repositories/LocalProcessLiveSessionProcessSnapshotProvider.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NoUnansweredOwnerCallStatusProvider = void 0;
4
4
  class NoUnansweredOwnerCallStatusProvider {
5
5
  constructor() {
6
- this.listSessionNamesWithUnansweredOwnerCall = (_sessionNames) => {
6
+ this.listSessionNamesWithUnansweredOwnerCall = (_transcriptPathBySessionName) => {
7
7
  return Promise.resolve(new Set());
8
8
  };
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NoUnansweredOwnerCallStatusProvider.js","sourceRoot":"","sources":["../../../src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.ts"],"names":[],"mappings":";;;AAEA,MAAa,mCAAmC;IAAhD;QACE,4CAAuC,GAAG,CACxC,aAAuB,EACD,EAAE;YACxB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC;CAAA;AAND,kFAMC"}
1
+ {"version":3,"file":"NoUnansweredOwnerCallStatusProvider.js","sourceRoot":"","sources":["../../../src/adapter/repositories/NoUnansweredOwnerCallStatusProvider.ts"],"names":[],"mappings":";;;AAEA,MAAa,mCAAmC;IAAhD;QACE,4CAAuC,GAAG,CACxC,4BAAiD,EAC3B,EAAE;YACxB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC;CAAA;AAND,kFAMC"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ProcFsProcessEnvironReader = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ /**
40
+ * Reads a process environment from the Linux procfs (`/proc/<pid>/environ`),
41
+ * where entries are NUL-separated `KEY=value` pairs. Returns null when the
42
+ * environment cannot be read (the process has exited or is not accessible).
43
+ */
44
+ class ProcFsProcessEnvironReader {
45
+ constructor(procDirectory = '/proc') {
46
+ this.procDirectory = procDirectory;
47
+ this.readEnviron = (pid) => {
48
+ let raw;
49
+ try {
50
+ raw = fs.readFileSync(path.join(this.procDirectory, String(pid), 'environ'), 'utf8');
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ const environ = {};
56
+ for (const entry of raw.split('\0')) {
57
+ if (entry.length === 0) {
58
+ continue;
59
+ }
60
+ const separatorIndex = entry.indexOf('=');
61
+ if (separatorIndex === -1) {
62
+ continue;
63
+ }
64
+ const key = entry.slice(0, separatorIndex);
65
+ const value = entry.slice(separatorIndex + 1);
66
+ environ[key] = value;
67
+ }
68
+ return environ;
69
+ };
70
+ }
71
+ }
72
+ exports.ProcFsProcessEnvironReader = ProcFsProcessEnvironReader;
73
+ //# sourceMappingURL=ProcFsProcessEnvironReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcFsProcessEnvironReader.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcFsProcessEnvironReader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAG7B;;;;GAIG;AACH,MAAa,0BAA0B;IACrC,YAA6B,gBAAwB,OAAO;QAA/B,kBAAa,GAAb,aAAa,CAAkB;QAE5D,gBAAW,GAAG,CAAC,GAAW,EAAiC,EAAE;YAC3D,IAAI,GAAW,CAAC;YAChB,IAAI,CAAC;gBACH,GAAG,GAAG,EAAE,CAAC,YAAY,CACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,EACrD,MAAM,CACP,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,SAAS;gBACX,CAAC;gBACD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC1C,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;gBAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;IA1B6D,CAAC;CA2BjE;AA5BD,gEA4BC"}
@@ -35,7 +35,6 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.TranscriptOwnerCallStatusProvider = void 0;
37
37
  const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
38
  const isRecord = (value) => typeof value === 'object' && value !== null;
40
39
  const readString = (value, key) => {
41
40
  const candidate = value[key];
@@ -76,31 +75,25 @@ const hasOwnerTextReply = (content) => {
76
75
  return content.some((block) => isRecord(block) && block.type === 'text');
77
76
  };
78
77
  class TranscriptOwnerCallStatusProvider {
79
- constructor(rootDirectory, ownerCallMarker) {
80
- this.rootDirectory = rootDirectory;
78
+ constructor(ownerCallMarker) {
81
79
  this.ownerCallMarker = ownerCallMarker;
82
- this.listSessionNamesWithUnansweredOwnerCall = async (sessionNames) => {
80
+ this.listSessionNamesWithUnansweredOwnerCall = async (transcriptPathBySessionName) => {
83
81
  const waiting = new Set();
84
- if (this.rootDirectory === null ||
85
- this.ownerCallMarker === null ||
86
- this.ownerCallMarker.length === 0) {
82
+ if (this.ownerCallMarker === null || this.ownerCallMarker.length === 0) {
87
83
  return waiting;
88
84
  }
89
- for (const sessionName of sessionNames) {
90
- if (this.isWaitingForOwnerReply(sessionName, this.ownerCallMarker)) {
85
+ const marker = this.ownerCallMarker;
86
+ for (const [sessionName, transcriptPath] of transcriptPathBySessionName) {
87
+ if (this.isWaitingForOwnerReply(transcriptPath, marker)) {
91
88
  waiting.add(sessionName);
92
89
  }
93
90
  }
94
91
  return waiting;
95
92
  };
96
- this.isWaitingForOwnerReply = (sessionName, marker) => {
97
- if (this.rootDirectory === null) {
98
- return false;
99
- }
100
- const filePath = path.join(this.rootDirectory, this.toTranscriptFileName(sessionName));
93
+ this.isWaitingForOwnerReply = (transcriptPath, marker) => {
101
94
  let content;
102
95
  try {
103
- content = fs.readFileSync(filePath, 'utf8');
96
+ content = fs.readFileSync(transcriptPath, 'utf8');
104
97
  }
105
98
  catch {
106
99
  return false;
@@ -143,7 +136,6 @@ class TranscriptOwnerCallStatusProvider {
143
136
  return (lastOwnerReplyEpochMs === null ||
144
137
  lastOwnerCallEpochMs > lastOwnerReplyEpochMs);
145
138
  };
146
- this.toTranscriptFileName = (sessionName) => `${sessionName.replace(/\//g, '_')}.jsonl`;
147
139
  }
148
140
  }
149
141
  exports.TranscriptOwnerCallStatusProvider = TranscriptOwnerCallStatusProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"TranscriptOwnerCallStatusProvider.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TranscriptOwnerCallStatusProvider.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptOwnerCallStatusProvider.ts"],"names":[],"mappings":"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"}
@@ -133,7 +133,8 @@ class TranscriptSessionSubAgentActivityRepository {
133
133
  return null;
134
134
  }
135
135
  const transcript = parseTranscript(content);
136
- if (transcript.lastStopReason === 'end_turn') {
136
+ if (transcript.lastStopReason === 'end_turn' ||
137
+ transcript.lastStopReason === 'stop_sequence') {
137
138
  return null;
138
139
  }
139
140
  const silentSeconds = clampToZero(nowEpochSeconds - Math.floor(stats.mtimeMs / 1000));
@@ -1 +1 @@
1
- {"version":3,"file":"TranscriptSessionSubAgentActivityRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TranscriptSessionSubAgentActivityRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=InteractiveLiveSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveLiveSession.js","sourceRoot":"","sources":["../../../src/domain/entities/InteractiveLiveSession.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=LiveSessionProcessSnapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveSessionProcessSnapshot.js","sourceRoot":"","sources":["../../../src/domain/entities/LiveSessionProcessSnapshot.ts"],"names":[],"mappings":""}
@@ -1,34 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NotifySilentLiveSessionsUseCase = 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 = exports.DEFAULT_MONITORED_STATUS = void 0;
4
- const WorkflowStatus_1 = require("../entities/WorkflowStatus");
5
- const InTmuxByHumanSessionReconcileUseCase_1 = require("./intmux/InTmuxByHumanSessionReconcileUseCase");
6
- exports.DEFAULT_MONITORED_STATUS = WorkflowStatus_1.IN_TMUX_STATUS_NAME;
3
+ exports.NotifySilentLiveSessionsUseCase = 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;
4
+ const ResolveInteractiveLiveSessionsUseCase_1 = require("./ResolveInteractiveLiveSessionsUseCase");
7
5
  exports.DEFAULT_MAIN_SILENT_THRESHOLD_SECONDS = 10 * 60;
8
6
  exports.DEFAULT_SUBAGENT_SILENT_THRESHOLD_SECONDS = 5 * 60;
9
7
  exports.DEFAULT_SUBAGENT_RUNNING_THRESHOLD_SECONDS = 15 * 60;
10
8
  exports.DEFAULT_NOTIFICATION_COOLDOWN_SECONDS = 30 * 60;
11
9
  exports.DEFAULT_NOTIFICATION_STAGGER_SECONDS = 25;
12
10
  class NotifySilentLiveSessionsUseCase {
13
- constructor(issueRepository, tmuxSessionRepository, sessionOutputActivityRepository, subAgentActivityRepository, ownerCallStatusProvider, notificationRepository, messageComposer, sleeper) {
14
- this.issueRepository = issueRepository;
15
- this.tmuxSessionRepository = tmuxSessionRepository;
11
+ constructor(liveSessionProcessSnapshotProvider, interactiveLiveSessionTranscriptResolver, sessionOutputActivityRepository, subAgentActivityRepository, ownerCallStatusProvider, notificationRepository, messageComposer, sleeper) {
12
+ this.liveSessionProcessSnapshotProvider = liveSessionProcessSnapshotProvider;
13
+ this.interactiveLiveSessionTranscriptResolver = interactiveLiveSessionTranscriptResolver;
16
14
  this.sessionOutputActivityRepository = sessionOutputActivityRepository;
17
15
  this.subAgentActivityRepository = subAgentActivityRepository;
18
16
  this.ownerCallStatusProvider = ownerCallStatusProvider;
19
17
  this.notificationRepository = notificationRepository;
20
18
  this.messageComposer = messageComposer;
21
19
  this.sleeper = sleeper;
20
+ this.resolveInteractiveLiveSessions = new ResolveInteractiveLiveSessionsUseCase_1.ResolveInteractiveLiveSessionsUseCase();
22
21
  this.run = async (params) => {
23
- const liveSessionNames = new Set(await this.tmuxSessionRepository.listLiveSessionNames());
24
- const openIssues = await this.issueRepository.getAllOpened(params.project, params.allowCacheMinutes);
25
- const monitoredSessionNames = this.selectMonitoredSessionNames(openIssues, liveSessionNames, params.monitoredStatus);
26
- const snapshots = await this.collectSnapshots(monitoredSessionNames, params.now);
22
+ const snapshot = await this.liveSessionProcessSnapshotProvider.getSnapshot();
23
+ const interactiveSessions = this.resolveInteractiveLiveSessions.resolve(snapshot);
24
+ const transcriptPathBySessionName = this.interactiveLiveSessionTranscriptResolver.resolveTranscriptPaths(interactiveSessions);
25
+ const snapshots = await this.collectSnapshots(interactiveSessions, transcriptPathBySessionName, params.now);
27
26
  const candidates = [];
28
- for (const snapshot of snapshots) {
29
- const message = this.composeMessage(snapshot, params);
27
+ for (const sessionSnapshot of snapshots) {
28
+ const message = this.composeMessage(sessionSnapshot, params);
30
29
  if (message !== null) {
31
- candidates.push({ sessionName: snapshot.sessionName, message });
30
+ candidates.push({ sessionName: sessionSnapshot.sessionName, message });
32
31
  }
33
32
  }
34
33
  candidates.sort((left, right) => left.sessionName < right.sessionName
@@ -36,7 +35,7 @@ class NotifySilentLiveSessionsUseCase {
36
35
  : left.sessionName > right.sessionName
37
36
  ? 1
38
37
  : 0);
39
- console.log(`Silent live session notification: ${candidates.length} candidate(s) of ${monitoredSessionNames.length} monitored session(s).`);
38
+ console.log(`Silent live session notification: ${candidates.length} candidate(s) of ${interactiveSessions.length} interactive session(s).`);
40
39
  const nowEpochSeconds = Math.floor(params.now.getTime() / 1000);
41
40
  let sentCount = 0;
42
41
  for (const candidate of candidates) {
@@ -55,16 +54,17 @@ class NotifySilentLiveSessionsUseCase {
55
54
  console.log(`Notified ${candidate.sessionName}.`);
56
55
  }
57
56
  };
58
- this.collectSnapshots = async (monitoredSessionNames, now) => {
59
- const activities = await this.sessionOutputActivityRepository.listSessionOutputActivities(monitoredSessionNames);
57
+ this.collectSnapshots = async (interactiveSessions, transcriptPathBySessionName, now) => {
58
+ const sessionNames = interactiveSessions.map((session) => session.sessionName);
59
+ const activities = await this.sessionOutputActivityRepository.listSessionOutputActivities(transcriptPathBySessionName);
60
60
  const lastOutputBySessionName = new Map();
61
61
  for (const activity of activities) {
62
62
  lastOutputBySessionName.set(activity.sessionName, activity.lastOutputEpochSeconds);
63
63
  }
64
- const subAgentsBySessionName = await this.subAgentActivityRepository.listSubAgentActivitiesBySessionName(monitoredSessionNames);
65
- const sessionNamesWithUnansweredOwnerCall = await this.ownerCallStatusProvider.listSessionNamesWithUnansweredOwnerCall(monitoredSessionNames);
64
+ const subAgentsBySessionName = await this.subAgentActivityRepository.listSubAgentActivitiesBySessionName(sessionNames);
65
+ const sessionNamesWithUnansweredOwnerCall = await this.ownerCallStatusProvider.listSessionNamesWithUnansweredOwnerCall(transcriptPathBySessionName);
66
66
  const nowEpochSeconds = Math.floor(now.getTime() / 1000);
67
- return monitoredSessionNames.map((sessionName) => {
67
+ return sessionNames.map((sessionName) => {
68
68
  const lastOutputEpochSeconds = lastOutputBySessionName.get(sessionName);
69
69
  const mainSilentSeconds = lastOutputEpochSeconds === undefined
70
70
  ? null
@@ -94,19 +94,6 @@ class NotifySilentLiveSessionsUseCase {
94
94
  }
95
95
  return sections.join('\n\n');
96
96
  };
97
- this.selectMonitoredSessionNames = (openIssues, liveSessionNames, monitoredStatus) => {
98
- const monitoredSessionNames = [];
99
- for (const issue of openIssues) {
100
- if (issue.status !== monitoredStatus) {
101
- continue;
102
- }
103
- const sessionName = (0, InTmuxByHumanSessionReconcileUseCase_1.toTmuxSessionName)(issue.url);
104
- if (liveSessionNames.has(sessionName)) {
105
- monitoredSessionNames.push(sessionName);
106
- }
107
- }
108
- return monitoredSessionNames;
109
- };
110
97
  }
111
98
  }
112
99
  exports.NotifySilentLiveSessionsUseCase = NotifySilentLiveSessionsUseCase;
@@ -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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"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResolveInteractiveLiveSessionsUseCase = exports.OWNER_HANDOVER_COMMAND_MARKER = void 0;
4
+ // Command-line substring that identifies an "owner-handover" agent spawn (for
5
+ // example a background implementation agent started with a prompt beginning
6
+ // "Take ownership of ..."). These spawns are not interactive owner sessions and
7
+ // MUST NOT be notified, so any process whose command line contains this marker
8
+ // is excluded even if it somehow appears under a monitored pane.
9
+ exports.OWNER_HANDOVER_COMMAND_MARKER = 'Take ownership of';
10
+ // Command-name substring that identifies the interactive Claude Code process.
11
+ const INTERACTIVE_PROCESS_COMMAND_MARKER = 'claude';
12
+ const isInteractiveCandidate = (process) => {
13
+ if (process.commandLine.includes(exports.OWNER_HANDOVER_COMMAND_MARKER)) {
14
+ return false;
15
+ }
16
+ if (!process.commandLine.includes(INTERACTIVE_PROCESS_COMMAND_MARKER)) {
17
+ return false;
18
+ }
19
+ return process.sessionId !== null && process.configDir !== null;
20
+ };
21
+ /**
22
+ * Selects the interactive Claude Code sessions that are eligible for the silent
23
+ * self-check notification, independently of session naming or any GitHub issue
24
+ * linkage.
25
+ *
26
+ * Selection works purely from a process snapshot: for each live tmux session,
27
+ * the descendants of its pane processes are walked, and the first descendant
28
+ * that looks like an interactive Claude Code process (command line contains
29
+ * `claude`, does not contain the owner-handover marker, and exposes both a
30
+ * session id and a config directory in its environment) is taken as the
31
+ * session's interactive process. Because the walk is anchored on tmux panes,
32
+ * background owner-handover spawns, the preparation daemon, and monitor
33
+ * processes — none of which run inside an interactive tmux pane — are naturally
34
+ * excluded; the explicit owner-handover marker check is an additional guard.
35
+ */
36
+ class ResolveInteractiveLiveSessionsUseCase {
37
+ constructor() {
38
+ this.resolve = (snapshot) => {
39
+ const processByPid = new Map();
40
+ const childrenByPpid = new Map();
41
+ for (const process of snapshot.processes) {
42
+ processByPid.set(process.pid, process);
43
+ const siblings = childrenByPpid.get(process.ppid) ?? [];
44
+ siblings.push(process);
45
+ childrenByPpid.set(process.ppid, siblings);
46
+ }
47
+ const sessions = [];
48
+ for (const session of snapshot.sessions) {
49
+ const interactiveProcess = this.findInteractiveProcess(session.panePids, processByPid, childrenByPpid);
50
+ if (interactiveProcess === null ||
51
+ interactiveProcess.sessionId === null ||
52
+ interactiveProcess.configDir === null) {
53
+ continue;
54
+ }
55
+ sessions.push({
56
+ sessionName: session.sessionName,
57
+ sessionId: interactiveProcess.sessionId,
58
+ configDir: interactiveProcess.configDir,
59
+ });
60
+ }
61
+ return sessions;
62
+ };
63
+ this.findInteractiveProcess = (panePids, processByPid, childrenByPpid) => {
64
+ const visited = new Set();
65
+ const queue = [...panePids];
66
+ let head = 0;
67
+ while (head < queue.length) {
68
+ const pid = queue[head];
69
+ head += 1;
70
+ if (visited.has(pid)) {
71
+ continue;
72
+ }
73
+ visited.add(pid);
74
+ const process = processByPid.get(pid);
75
+ if (process !== undefined && isInteractiveCandidate(process)) {
76
+ return process;
77
+ }
78
+ for (const child of childrenByPpid.get(pid) ?? []) {
79
+ if (!visited.has(child.pid)) {
80
+ queue.push(child.pid);
81
+ }
82
+ }
83
+ }
84
+ return null;
85
+ };
86
+ }
87
+ }
88
+ exports.ResolveInteractiveLiveSessionsUseCase = ResolveInteractiveLiveSessionsUseCase;
89
+ //# sourceMappingURL=ResolveInteractiveLiveSessionsUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolveInteractiveLiveSessionsUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ResolveInteractiveLiveSessionsUseCase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=InteractiveLiveSessionTranscriptResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveLiveSessionTranscriptResolver.js","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/InteractiveLiveSessionTranscriptResolver.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=LiveSessionProcessSnapshotProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveSessionProcessSnapshotProvider.js","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/LiveSessionProcessSnapshotProvider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ProcessEnvironReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessEnvironReader.js","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/ProcessEnvironReader.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.110.1",
3
+ "version": "1.111.1",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -108,8 +108,7 @@ export class HandleScheduledEventUseCaseHandler {
108
108
  inTmuxConsoleToken?: string;
109
109
  inTmuxProjectOrder?: string[];
110
110
  inTmuxLauncherCommand?: string;
111
- sessionOutputRootDirectory?: string;
112
- sessionTranscriptRootDirectory?: string;
111
+ silentNotificationEnabled?: boolean;
113
112
  ownerCallMarker?: string;
114
113
  subAgentOutputRootDirectory?: string;
115
114
  subAgentProcessMatchPattern?: string;
@@ -563,10 +562,9 @@ export class HandleScheduledEventUseCaseHandler {
563
562
  }
564
563
 
565
564
  try {
566
- const sessionOutputRootDirectory =
567
- mergedInput.sessionOutputRootDirectory ??
568
- process.env.TDPM_SESSION_OUTPUT_ROOT_DIRECTORY ??
569
- null;
565
+ const silentNotificationEnabled =
566
+ mergedInput.silentNotificationEnabled ??
567
+ process.env.TDPM_SILENT_NOTIFICATION_ENABLED === 'true';
570
568
  const subAgentOutputRootDirectory =
571
569
  mergedInput.subAgentOutputRootDirectory ??
572
570
  process.env.TDPM_SUBAGENT_OUTPUT_ROOT_DIRECTORY ??
@@ -575,10 +573,6 @@ export class HandleScheduledEventUseCaseHandler {
575
573
  mergedInput.subAgentProcessMatchPattern ??
576
574
  process.env.TDPM_SUBAGENT_PROCESS_MATCH_PATTERN ??
577
575
  null;
578
- const sessionTranscriptRootDirectory =
579
- mergedInput.sessionTranscriptRootDirectory ??
580
- process.env.TDPM_SESSION_TRANSCRIPT_ROOT_DIRECTORY ??
581
- null;
582
576
  const ownerCallMarker =
583
577
  mergedInput.ownerCallMarker ??
584
578
  process.env.TDPM_SILENT_OWNER_CALL_MARKER ??
@@ -588,13 +582,9 @@ export class HandleScheduledEventUseCaseHandler {
588
582
  process.env.TDPM_SUBAGENT_TRANSCRIPT_ROOT_DIRECTORY ??
589
583
  null;
590
584
  await notifySilentTmuxSessions({
591
- project: result.project,
592
- allowCacheMinutes: mergedInput.allowIssueCacheMinutes,
593
- issueRepository,
585
+ enabled: silentNotificationEnabled,
594
586
  localCommandRunner: nodeLocalCommandRunner,
595
587
  cacheRepository: localStorageCacheRepository,
596
- sessionOutputRootDirectory,
597
- sessionTranscriptRootDirectory,
598
588
  ownerCallMarker,
599
589
  subAgentOutputRootDirectory,
600
590
  subAgentProcessMatchPattern,