@hexidecibel/companion 0.0.1 → 0.1.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 (110) hide show
  1. package/dist/__tests__/task-parser.test.js +29 -29
  2. package/dist/__tests__/task-parser.test.js.map +1 -1
  3. package/dist/anthropic-usage.d.ts.map +1 -1
  4. package/dist/anthropic-usage.js +1 -1
  5. package/dist/anthropic-usage.js.map +1 -1
  6. package/dist/cert-generator.d.ts.map +1 -1
  7. package/dist/cert-generator.js +4 -21
  8. package/dist/cert-generator.js.map +1 -1
  9. package/dist/cli.d.ts +9 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +413 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +1 -7
  15. package/dist/config.js.map +1 -1
  16. package/dist/escalation.d.ts +51 -0
  17. package/dist/escalation.d.ts.map +1 -0
  18. package/dist/escalation.js +198 -0
  19. package/dist/escalation.js.map +1 -0
  20. package/dist/index.js +67 -30
  21. package/dist/index.js.map +1 -1
  22. package/dist/input-injector.d.ts.map +1 -1
  23. package/dist/input-injector.js +9 -5
  24. package/dist/input-injector.js.map +1 -1
  25. package/dist/notification-store.d.ts +35 -0
  26. package/dist/notification-store.d.ts.map +1 -0
  27. package/dist/notification-store.js +272 -0
  28. package/dist/notification-store.js.map +1 -0
  29. package/dist/parser.d.ts +15 -1
  30. package/dist/parser.d.ts.map +1 -1
  31. package/dist/parser.js +106 -61
  32. package/dist/parser.js.map +1 -1
  33. package/dist/push.d.ts +18 -26
  34. package/dist/push.d.ts.map +1 -1
  35. package/dist/push.js +90 -184
  36. package/dist/push.js.map +1 -1
  37. package/dist/qr-server.d.ts.map +1 -1
  38. package/dist/qr-server.js +159 -139
  39. package/dist/qr-server.js.map +1 -1
  40. package/dist/rules-engine.d.ts +20 -0
  41. package/dist/rules-engine.d.ts.map +1 -0
  42. package/dist/rules-engine.js +71 -0
  43. package/dist/rules-engine.js.map +1 -0
  44. package/dist/scaffold/claude-commands.d.ts +18 -0
  45. package/dist/scaffold/claude-commands.d.ts.map +1 -0
  46. package/dist/scaffold/claude-commands.js +352 -0
  47. package/dist/scaffold/claude-commands.js.map +1 -0
  48. package/dist/scaffold/generator.d.ts.map +1 -1
  49. package/dist/scaffold/generator.js +26 -1
  50. package/dist/scaffold/generator.js.map +1 -1
  51. package/dist/scaffold/scorer.d.ts +19 -0
  52. package/dist/scaffold/scorer.d.ts.map +1 -0
  53. package/dist/scaffold/scorer.js +92 -0
  54. package/dist/scaffold/scorer.js.map +1 -0
  55. package/dist/scaffold/templates/go-cli.d.ts +3 -0
  56. package/dist/scaffold/templates/go-cli.d.ts.map +1 -0
  57. package/dist/scaffold/templates/go-cli.js +249 -0
  58. package/dist/scaffold/templates/go-cli.js.map +1 -0
  59. package/dist/scaffold/templates/index.d.ts.map +1 -1
  60. package/dist/scaffold/templates/index.js +8 -2
  61. package/dist/scaffold/templates/index.js.map +1 -1
  62. package/dist/scaffold/templates/nextjs.d.ts +3 -0
  63. package/dist/scaffold/templates/nextjs.d.ts.map +1 -0
  64. package/dist/scaffold/templates/nextjs.js +336 -0
  65. package/dist/scaffold/templates/nextjs.js.map +1 -0
  66. package/dist/scaffold/templates/node-express.d.ts.map +1 -1
  67. package/dist/scaffold/templates/node-express.js +170 -157
  68. package/dist/scaffold/templates/node-express.js.map +1 -1
  69. package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -1
  70. package/dist/scaffold/templates/python-fastapi.js +234 -221
  71. package/dist/scaffold/templates/python-fastapi.js.map +1 -1
  72. package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -1
  73. package/dist/scaffold/templates/react-mui-website.js +337 -324
  74. package/dist/scaffold/templates/react-mui-website.js.map +1 -1
  75. package/dist/scaffold/templates/react-typescript.d.ts.map +1 -1
  76. package/dist/scaffold/templates/react-typescript.js +219 -206
  77. package/dist/scaffold/templates/react-typescript.js.map +1 -1
  78. package/dist/scaffold/templates/typescript-library.d.ts +3 -0
  79. package/dist/scaffold/templates/typescript-library.d.ts.map +1 -0
  80. package/dist/scaffold/templates/typescript-library.js +241 -0
  81. package/dist/scaffold/templates/typescript-library.js.map +1 -0
  82. package/dist/scaffold/types.d.ts +7 -0
  83. package/dist/scaffold/types.d.ts.map +1 -1
  84. package/dist/subagent-watcher.d.ts.map +1 -1
  85. package/dist/subagent-watcher.js +3 -3
  86. package/dist/subagent-watcher.js.map +1 -1
  87. package/dist/tmux-manager.d.ts +37 -0
  88. package/dist/tmux-manager.d.ts.map +1 -1
  89. package/dist/tmux-manager.js +165 -5
  90. package/dist/tmux-manager.js.map +1 -1
  91. package/dist/tool-config.d.ts.map +1 -1
  92. package/dist/tool-config.js +2 -2
  93. package/dist/tool-config.js.map +1 -1
  94. package/dist/types.d.ts +85 -0
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js +18 -0
  97. package/dist/types.js.map +1 -1
  98. package/dist/watcher.d.ts +7 -0
  99. package/dist/watcher.d.ts.map +1 -1
  100. package/dist/watcher.js +118 -9
  101. package/dist/watcher.js.map +1 -1
  102. package/dist/websocket.d.ts +16 -2
  103. package/dist/websocket.d.ts.map +1 -1
  104. package/dist/websocket.js +758 -117
  105. package/dist/websocket.js.map +1 -1
  106. package/dist/work-group-manager.d.ts +69 -0
  107. package/dist/work-group-manager.d.ts.map +1 -0
  108. package/dist/work-group-manager.js +610 -0
  109. package/dist/work-group-manager.js.map +1 -0
  110. package/package.json +1 -1
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EscalationService = void 0;
4
+ const uuid_1 = require("uuid");
5
+ class EscalationService {
6
+ pendingEvents = new Map();
7
+ timers = new Map();
8
+ lastNotifiedPerSession = new Map();
9
+ store;
10
+ push;
11
+ // Auto-expire pending events after 1 hour
12
+ cleanupInterval;
13
+ EXPIRE_MS = 60 * 60 * 1000;
14
+ constructor(store, push) {
15
+ this.store = store;
16
+ this.push = push;
17
+ this.cleanupInterval = setInterval(() => this.cleanup(), 5 * 60 * 1000);
18
+ }
19
+ /**
20
+ * Handle a notification event. Checks escalation config, muted sessions,
21
+ * and rate limits. Returns whether to broadcast to WS clients.
22
+ */
23
+ handleEvent(event) {
24
+ const config = this.store.getEscalation();
25
+ // Check: event type enabled?
26
+ if (!config.events[event.eventType]) {
27
+ return { shouldBroadcast: false };
28
+ }
29
+ // Check: session muted?
30
+ if (this.store.isSessionMuted(event.sessionId)) {
31
+ return { shouldBroadcast: false };
32
+ }
33
+ // Check: rate-limited?
34
+ if (config.rateLimitSeconds > 0) {
35
+ const lastTime = this.lastNotifiedPerSession.get(event.sessionId);
36
+ if (lastTime && Date.now() - lastTime < config.rateLimitSeconds * 1000) {
37
+ console.log(`Escalation: Rate-limited for session ${event.sessionId} (${config.rateLimitSeconds}s)`);
38
+ return { shouldBroadcast: false };
39
+ }
40
+ }
41
+ // Record notification time for rate limiting
42
+ this.lastNotifiedPerSession.set(event.sessionId, Date.now());
43
+ // Tier 1 (immediate): broadcast to WS clients -> browser notifications fire
44
+ // Log to history as browser tier
45
+ const preview = event.content.substring(0, 200);
46
+ this.store.addHistoryEntry({
47
+ eventType: event.eventType,
48
+ sessionId: event.sessionId,
49
+ sessionName: event.sessionName,
50
+ preview,
51
+ tier: 'browser',
52
+ acknowledged: false,
53
+ });
54
+ // Create pending event and schedule push timer
55
+ const pendingId = (0, uuid_1.v4)();
56
+ const now = Date.now();
57
+ const pushScheduledAt = now + config.pushDelaySeconds * 1000;
58
+ const pendingEvent = {
59
+ id: pendingId,
60
+ sessionId: event.sessionId,
61
+ sessionName: event.sessionName,
62
+ eventType: event.eventType,
63
+ preview,
64
+ createdAt: now,
65
+ pushScheduledAt,
66
+ pushSent: false,
67
+ };
68
+ this.pendingEvents.set(pendingId, pendingEvent);
69
+ // Schedule push escalation timer
70
+ if (config.pushDelaySeconds === 0) {
71
+ // Immediate push
72
+ this.firePush(pendingId);
73
+ }
74
+ else {
75
+ const timer = setTimeout(() => {
76
+ this.firePush(pendingId);
77
+ }, config.pushDelaySeconds * 1000);
78
+ this.timers.set(pendingId, timer);
79
+ }
80
+ console.log(`Escalation: Event ${event.eventType} for session "${event.sessionName}" — push scheduled in ${config.pushDelaySeconds}s`);
81
+ return { shouldBroadcast: true, pendingEvent };
82
+ }
83
+ /**
84
+ * Acknowledge a session — cancels any pending push timers for that session.
85
+ * Called when user views session, sends input, or session stops waiting.
86
+ */
87
+ acknowledgeSession(sessionId) {
88
+ const now = Date.now();
89
+ let cancelled = 0;
90
+ for (const [pendingId, event] of this.pendingEvents) {
91
+ if (event.sessionId === sessionId && !event.pushSent && !event.acknowledgedAt) {
92
+ event.acknowledgedAt = now;
93
+ // Cancel the push timer
94
+ const timer = this.timers.get(pendingId);
95
+ if (timer) {
96
+ clearTimeout(timer);
97
+ this.timers.delete(pendingId);
98
+ }
99
+ cancelled++;
100
+ }
101
+ }
102
+ if (cancelled > 0) {
103
+ console.log(`Escalation: Acknowledged session "${sessionId}" — cancelled ${cancelled} pending push(es)`);
104
+ }
105
+ }
106
+ /**
107
+ * Get all pending (unacknowledged, unsent) events.
108
+ */
109
+ getPendingEvents() {
110
+ return Array.from(this.pendingEvents.values()).filter((e) => !e.pushSent && !e.acknowledgedAt);
111
+ }
112
+ /**
113
+ * Fire push notification for a pending event (Tier 2 escalation).
114
+ */
115
+ firePush(pendingId) {
116
+ const event = this.pendingEvents.get(pendingId);
117
+ if (!event)
118
+ return;
119
+ // Already acknowledged or sent?
120
+ if (event.acknowledgedAt || event.pushSent) {
121
+ this.timers.delete(pendingId);
122
+ return;
123
+ }
124
+ // Check quiet hours
125
+ const config = this.store.getEscalation();
126
+ if (config.quietHours.enabled &&
127
+ this.isInQuietHours(config.quietHours.start, config.quietHours.end)) {
128
+ console.log(`Escalation: Push suppressed for "${event.sessionName}" — quiet hours`);
129
+ event.pushSent = true; // Mark as handled so it doesn't retry
130
+ this.timers.delete(pendingId);
131
+ return;
132
+ }
133
+ // Send push to all registered devices
134
+ event.pushSent = true;
135
+ this.timers.delete(pendingId);
136
+ this.push.sendToAllDevices(event.preview, event.eventType, event.sessionId, event.sessionName);
137
+ // Update history: add a push tier entry
138
+ this.store.addHistoryEntry({
139
+ eventType: event.eventType,
140
+ sessionId: event.sessionId,
141
+ sessionName: event.sessionName,
142
+ preview: event.preview,
143
+ tier: 'push',
144
+ acknowledged: false,
145
+ });
146
+ console.log(`Escalation: Push sent for "${event.sessionName}" (${event.eventType})`);
147
+ }
148
+ isInQuietHours(start, end) {
149
+ const now = new Date();
150
+ const currentMinutes = now.getHours() * 60 + now.getMinutes();
151
+ const [startH, startM] = start.split(':').map(Number);
152
+ const [endH, endM] = end.split(':').map(Number);
153
+ const startMinutes = startH * 60 + startM;
154
+ const endMinutes = endH * 60 + endM;
155
+ // Handle overnight quiet hours (e.g., 22:00 - 08:00)
156
+ if (startMinutes > endMinutes) {
157
+ return currentMinutes >= startMinutes || currentMinutes < endMinutes;
158
+ }
159
+ else {
160
+ return currentMinutes >= startMinutes && currentMinutes < endMinutes;
161
+ }
162
+ }
163
+ /**
164
+ * Auto-expire old pending events.
165
+ */
166
+ cleanup() {
167
+ const now = Date.now();
168
+ let cleaned = 0;
169
+ for (const [pendingId, event] of this.pendingEvents) {
170
+ if (now - event.createdAt > this.EXPIRE_MS) {
171
+ // Cancel timer if still running
172
+ const timer = this.timers.get(pendingId);
173
+ if (timer) {
174
+ clearTimeout(timer);
175
+ this.timers.delete(pendingId);
176
+ }
177
+ this.pendingEvents.delete(pendingId);
178
+ cleaned++;
179
+ }
180
+ }
181
+ if (cleaned > 0) {
182
+ console.log(`Escalation: Cleaned up ${cleaned} expired pending event(s)`);
183
+ }
184
+ }
185
+ /**
186
+ * Destroy the service (clear timers).
187
+ */
188
+ destroy() {
189
+ clearInterval(this.cleanupInterval);
190
+ for (const timer of this.timers.values()) {
191
+ clearTimeout(timer);
192
+ }
193
+ this.timers.clear();
194
+ this.pendingEvents.clear();
195
+ }
196
+ }
197
+ exports.EscalationService = EscalationService;
198
+ //# sourceMappingURL=escalation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalation.js","sourceRoot":"","sources":["../src/escalation.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,11 +7,24 @@ const subagent_watcher_1 = require("./subagent-watcher");
7
7
  const input_injector_1 = require("./input-injector");
8
8
  const mdns_1 = require("./mdns");
9
9
  const push_1 = require("./push");
10
+ const notification_store_1 = require("./notification-store");
10
11
  const websocket_1 = require("./websocket");
11
12
  const tmux_manager_1 = require("./tmux-manager");
13
+ const work_group_manager_1 = require("./work-group-manager");
12
14
  const tls_1 = require("./tls");
13
15
  const cert_generator_1 = require("./cert-generator");
14
16
  const qr_server_1 = require("./qr-server");
17
+ const cli_1 = require("./cli");
18
+ // Check CLI commands before starting daemon
19
+ const cliArgs = process.argv.slice(2);
20
+ (0, cli_1.dispatchCli)(cliArgs).then((handled) => {
21
+ if (!handled) {
22
+ main().catch((err) => {
23
+ console.error('Fatal error:', err);
24
+ process.exit(1);
25
+ });
26
+ }
27
+ });
15
28
  async function main() {
16
29
  console.log('Companion Daemon v0.0.1');
17
30
  console.log('==============================');
@@ -55,7 +68,8 @@ async function main() {
55
68
  const watcher = new watcher_1.SessionWatcher(config.codeHome);
56
69
  const subAgentWatcher = new subagent_watcher_1.SubAgentWatcher(config.codeHome);
57
70
  const injector = new input_injector_1.InputInjector(config.tmuxSession);
58
- const push = new push_1.PushNotificationService(config.fcmCredentialsPath, config.pushDelayMs);
71
+ const notificationStore = new notification_store_1.NotificationStore();
72
+ const push = new push_1.PushNotificationService(config.fcmCredentialsPath, config.pushDelayMs, notificationStore);
59
73
  // Create HTTP/HTTPS server with QR code endpoint
60
74
  const qrHandler = (0, qr_server_1.createQRRequestHandler)(config);
61
75
  const server = (0, tls_1.createServer)({
@@ -63,8 +77,27 @@ async function main() {
63
77
  certPath: config.certPath,
64
78
  keyPath: config.keyPath,
65
79
  }, qrHandler);
80
+ // Initialize work group manager for parallel /work orchestration
81
+ const workGroupTmux = new tmux_manager_1.TmuxManager('companion');
82
+ const workGroupManager = new work_group_manager_1.WorkGroupManager(workGroupTmux, injector, watcher);
83
+ // Work group push notifications
84
+ workGroupManager.on('worker-waiting', ({ groupName, worker }) => {
85
+ const preview = worker.lastQuestion?.text
86
+ ? `${worker.taskSlug}: ${worker.lastQuestion.text}`
87
+ : `Worker "${worker.taskSlug}" needs input`;
88
+ push.sendToAllDevices(preview, 'worker_waiting', worker.sessionId, groupName);
89
+ });
90
+ workGroupManager.on('worker-error', ({ groupName, worker }) => {
91
+ const preview = worker.error
92
+ ? `${worker.taskSlug}: ${worker.error}`
93
+ : `Worker "${worker.taskSlug}" encountered an error`;
94
+ push.sendToAllDevices(preview, 'worker_error', worker.sessionId, groupName);
95
+ });
96
+ workGroupManager.on('group-ready-to-merge', ({ name }) => {
97
+ push.sendToAllDevices(`All workers complete. Ready to merge.`, 'work_group_ready', undefined, name);
98
+ });
66
99
  // Initialize WebSocket handler
67
- const wsHandler = new websocket_1.WebSocketHandler(server, config, watcher, injector, push, undefined, subAgentWatcher);
100
+ const wsHandler = new websocket_1.WebSocketHandler(server, config, watcher, injector, push, undefined, subAgentWatcher, workGroupManager);
68
101
  // Start mDNS advertisement
69
102
  let mdns = null;
70
103
  if (config.mdnsEnabled) {
@@ -74,23 +107,26 @@ async function main() {
74
107
  // Start file watchers
75
108
  watcher.start();
76
109
  subAgentWatcher.start();
77
- // Auto-approve safe tools (from config and/or client toggle)
110
+ // Auto-approve tools (from config and/or per-session client toggle)
78
111
  {
79
112
  console.log(`Auto-approve tools from config: ${config.autoApproveTools.length > 0 ? config.autoApproveTools.join(', ') : '(none - client toggle only)'}`);
80
113
  const tmux = new tmux_manager_1.TmuxManager('companion');
81
- // Track in-flight approvals using composite key (sessionId:tools) to prevent double-firing
82
- const pendingAutoApprovals = new Map();
114
+ // Track recent approvals per session to avoid double-firing for the same prompt.
115
+ // Key: sessionId, Value: timestamp of last approval sent.
116
+ const lastApprovalBySession = new Map();
83
117
  watcher.on('pending-approval', async ({ sessionId, projectPath, tools }) => {
84
- // Skip if auto-approve is not enabled (neither config nor client toggle)
85
- if (config.autoApproveTools.length === 0 && !wsHandler.autoApproveEnabled) {
86
- console.log(`[AUTO-APPROVE] Skipped: auto-approve not enabled (config tools: ${config.autoApproveTools.length}, client toggle: ${wsHandler.autoApproveEnabled})`);
118
+ // Check per-session toggle OR config-level tools
119
+ const sessionEnabled = wsHandler.autoApproveSessions.has(sessionId);
120
+ if (config.autoApproveTools.length === 0 && !sessionEnabled) {
121
+ console.log(`[AUTO-APPROVE] Skipped: not enabled for session ${sessionId}`);
87
122
  return;
88
123
  }
89
- // Check if any pending tool should be auto-approved
124
+ // Only approve tools that are in the config list OR if the session has auto-approve on.
125
+ // Either way, only APPROVAL_TOOLS are valid (getPendingApprovalTools already filters).
90
126
  const autoApprovable = tools.filter((tool) => {
91
127
  if (config.autoApproveTools.includes(tool))
92
128
  return true;
93
- if (wsHandler.autoApproveEnabled)
129
+ if (sessionEnabled)
94
130
  return true;
95
131
  return false;
96
132
  });
@@ -98,21 +134,21 @@ async function main() {
98
134
  console.log(`[AUTO-APPROVE] No auto-approvable tools in: [${tools.join(', ')}]`);
99
135
  return;
100
136
  }
101
- // Composite dedup key: session + sorted tool names
102
- // The watcher already deduplicates emissions (only fires on change),
103
- // but this provides a safety net against rapid re-fires.
104
- const dedupKey = `${sessionId}:${autoApprovable.sort().join(',')}`;
137
+ // Per-session dedup: don't re-fire within 3 seconds of the last approval
138
+ // for the same session. This prevents double-sends when the file watcher
139
+ // re-fires before the CLI has processed the previous "yes".
140
+ // Short window (3s) so sequential tool approvals still work.
105
141
  const now = Date.now();
106
- const lastApproval = pendingAutoApprovals.get(dedupKey);
107
- if (lastApproval && now - lastApproval < 15000) {
108
- console.log(`[AUTO-APPROVE] Dedup: skipping (last approval ${now - lastApproval}ms ago for ${dedupKey})`);
142
+ const lastApproval = lastApprovalBySession.get(sessionId);
143
+ if (lastApproval && now - lastApproval < 3000) {
144
+ console.log(`[AUTO-APPROVE] Dedup: skipping (last approval ${now - lastApproval}ms ago for ${sessionId})`);
109
145
  return;
110
146
  }
111
- pendingAutoApprovals.set(dedupKey, now);
147
+ lastApprovalBySession.set(sessionId, now);
112
148
  // Clean up old entries
113
- for (const [key, ts] of pendingAutoApprovals) {
149
+ for (const [key, ts] of lastApprovalBySession) {
114
150
  if (now - ts > 30000)
115
- pendingAutoApprovals.delete(key);
151
+ lastApprovalBySession.delete(key);
116
152
  }
117
153
  try {
118
154
  // Find the tmux session that matches this conversation's project path
@@ -120,14 +156,14 @@ async function main() {
120
156
  if (projectPath) {
121
157
  const tmuxSessions = await tmux.listSessions();
122
158
  // Try exact match first
123
- const exactMatch = tmuxSessions.find(ts => ts.workingDir === projectPath);
159
+ const exactMatch = tmuxSessions.find((ts) => ts.workingDir === projectPath);
124
160
  if (exactMatch) {
125
161
  targetTmuxSession = exactMatch.name;
126
162
  }
127
163
  else {
128
164
  // Try normalized path match (trailing slash differences, symlinks)
129
165
  const normalizedPath = projectPath.replace(/\/+$/, '');
130
- const fuzzyMatch = tmuxSessions.find(ts => ts.workingDir?.replace(/\/+$/, '') === normalizedPath);
166
+ const fuzzyMatch = tmuxSessions.find((ts) => ts.workingDir?.replace(/\/+$/, '') === normalizedPath);
131
167
  if (fuzzyMatch) {
132
168
  targetTmuxSession = fuzzyMatch.name;
133
169
  console.log(`[AUTO-APPROVE] Fuzzy path match: "${fuzzyMatch.name}" for ${projectPath}`);
@@ -135,7 +171,7 @@ async function main() {
135
171
  }
136
172
  }
137
173
  // Wait for terminal to settle before sending approval
138
- await new Promise(resolve => setTimeout(resolve, 300));
174
+ await new Promise((resolve) => setTimeout(resolve, 300));
139
175
  const sendApproval = async (target) => {
140
176
  try {
141
177
  await injector.sendInput('yes', target);
@@ -150,9 +186,8 @@ async function main() {
150
186
  console.log(`[AUTO-APPROVE] Sending to tmux="${targetTmuxSession}" for tools [${autoApprovable.join(', ')}] (session: ${sessionId})`);
151
187
  const success = await sendApproval(targetTmuxSession);
152
188
  if (!success) {
153
- // Retry once after 500ms
154
189
  console.log(`[AUTO-APPROVE] Retrying after 500ms...`);
155
- await new Promise(resolve => setTimeout(resolve, 500));
190
+ await new Promise((resolve) => setTimeout(resolve, 500));
156
191
  await sendApproval(targetTmuxSession);
157
192
  }
158
193
  }
@@ -161,7 +196,7 @@ async function main() {
161
196
  const success = await sendApproval();
162
197
  if (!success) {
163
198
  console.log(`[AUTO-APPROVE] Retrying after 500ms...`);
164
- await new Promise(resolve => setTimeout(resolve, 500));
199
+ await new Promise((resolve) => setTimeout(resolve, 500));
165
200
  await sendApproval();
166
201
  }
167
202
  }
@@ -171,6 +206,8 @@ async function main() {
171
206
  }
172
207
  });
173
208
  }
209
+ // Write PID file for CLI management
210
+ (0, cli_1.writePidFile)();
174
211
  // Start HTTP server
175
212
  server.listen(config.port, () => {
176
213
  console.log(`Server listening on port ${config.port}`);
@@ -180,6 +217,9 @@ async function main() {
180
217
  // Graceful shutdown
181
218
  const shutdown = async () => {
182
219
  console.log('\nShutting down...');
220
+ (0, cli_1.removePidFile)();
221
+ notificationStore.flush();
222
+ workGroupManager.stop();
183
223
  watcher.stop();
184
224
  subAgentWatcher.stop();
185
225
  if (mdns)
@@ -204,8 +244,5 @@ async function main() {
204
244
  `push devices: ${push.getRegisteredDeviceCount()}`);
205
245
  }, 60000);
206
246
  }
207
- main().catch((err) => {
208
- console.error('Fatal error:', err);
209
- process.exit(1);
210
- });
247
+ // main() is called from the CLI dispatcher above
211
248
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"input-injector.d.ts","sourceRoot":"","sources":["../src/input-injector.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAoC;gBAExC,WAAW,EAAE,MAAM;IAK/B;;;OAGG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YA4B1D,WAAW;IAoCzB,OAAO,CAAC,eAAe;IAWjB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1D,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBvC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI3C,gBAAgB,IAAI,MAAM;IAI1B,iBAAiB,IAAI,MAAM;IAK3B,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKrC,UAAU,IAAI,MAAM;CAGrB"}
1
+ {"version":3,"file":"input-injector.d.ts","sourceRoot":"","sources":["../src/input-injector.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAoC;gBAExC,WAAW,EAAE,MAAM;IAK/B;;;OAGG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YA4B1D,WAAW;IAwCzB,OAAO,CAAC,eAAe;IAWjB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1D,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBvC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI3C,gBAAgB,IAAI,MAAM;IAI1B,iBAAiB,IAAI,MAAM;IAK3B,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKrC,UAAU,IAAI,MAAM;CAGrB"}
@@ -18,7 +18,7 @@ class InputInjector {
18
18
  // Wait for any pending send to complete before starting this one
19
19
  const previousLock = this.sendLock;
20
20
  let releaseLock;
21
- this.sendLock = new Promise(resolve => {
21
+ this.sendLock = new Promise((resolve) => {
22
22
  releaseLock = resolve;
23
23
  });
24
24
  try {
@@ -43,23 +43,27 @@ class InputInjector {
43
43
  console.log(`Sending input to tmux session '${session}': ${input.substring(0, 80)}...`);
44
44
  const { spawnSync } = require('child_process');
45
45
  // Send the text using spawnSync (avoids shell interpretation)
46
- const textResult = spawnSync('tmux', ['send-keys', '-t', session, '-l', '--', input], { timeout: 5000 });
46
+ const textResult = spawnSync('tmux', ['send-keys', '-t', session, '-l', '--', input], {
47
+ timeout: 5000,
48
+ });
47
49
  if (textResult.status !== 0) {
48
50
  console.error('Failed to send text:', textResult.stderr?.toString());
49
51
  return false;
50
52
  }
51
53
  console.log('Text sent to tmux');
52
54
  // Wait for tmux to process the text before sending Enter
53
- await new Promise(resolve => setTimeout(resolve, 150));
55
+ await new Promise((resolve) => setTimeout(resolve, 150));
54
56
  // Send Enter
55
- const enterResult = spawnSync('tmux', ['send-keys', '-t', session, 'Enter'], { timeout: 5000 });
57
+ const enterResult = spawnSync('tmux', ['send-keys', '-t', session, 'Enter'], {
58
+ timeout: 5000,
59
+ });
56
60
  if (enterResult.status !== 0) {
57
61
  console.error('Failed to send Enter:', enterResult.stderr?.toString());
58
62
  return false;
59
63
  }
60
64
  console.log('Enter sent to tmux');
61
65
  // Small delay after Enter to ensure tmux processes it before next message
62
- await new Promise(resolve => setTimeout(resolve, 50));
66
+ await new Promise((resolve) => setTimeout(resolve, 50));
63
67
  console.log(`Input sent successfully to tmux session '${session}'`);
64
68
  return true;
65
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"input-injector.js","sourceRoot":"","sources":["../src/input-injector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-injector.js","sourceRoot":"","sources":["../src/input-injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { RegisteredDevice, EscalationConfig, NotificationHistoryEntry } from './types';
2
+ export declare class NotificationStore {
3
+ private escalation;
4
+ private devices;
5
+ private mutedSessions;
6
+ private history;
7
+ private saveTimer;
8
+ private historySaveTimer;
9
+ constructor();
10
+ private ensureDir;
11
+ private load;
12
+ private scheduleSave;
13
+ private scheduleHistorySave;
14
+ private saveState;
15
+ private saveHistory;
16
+ getEscalation(): EscalationConfig;
17
+ setEscalation(config: Partial<EscalationConfig>): EscalationConfig;
18
+ getDevices(): RegisteredDevice[];
19
+ getDevice(deviceId: string): RegisteredDevice | undefined;
20
+ setDevice(device: RegisteredDevice): void;
21
+ removeDevice(deviceId: string): boolean;
22
+ updateDeviceLastSeen(deviceId: string): void;
23
+ getDeviceCount(): number;
24
+ getMutedSessions(): string[];
25
+ isSessionMuted(sessionId: string): boolean;
26
+ setSessionMuted(sessionId: string, muted: boolean): void;
27
+ getHistory(limit?: number): {
28
+ entries: NotificationHistoryEntry[];
29
+ total: number;
30
+ };
31
+ addHistoryEntry(entry: Omit<NotificationHistoryEntry, 'id' | 'timestamp'>): NotificationHistoryEntry;
32
+ clearHistory(): void;
33
+ flush(): void;
34
+ }
35
+ //# sourceMappingURL=notification-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-store.d.ts","sourceRoot":"","sources":["../src/notification-store.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAEhB,wBAAwB,EAEzB,MAAM,SAAS,CAAC;AASjB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAsD;IACxE,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,OAAO,CAAkC;IAEjD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,gBAAgB,CAA+B;;IAOvD,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,IAAI;IA0EZ,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,WAAW;IAUnB,aAAa,IAAI,gBAAgB;IAIjC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB;IAmBlE,UAAU,IAAI,gBAAgB,EAAE;IAIhC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIzD,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAKzC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMvC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ5C,cAAc,IAAI,MAAM;IAMxB,gBAAgB,IAAI,MAAM,EAAE;IAI5B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI1C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAWxD,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAMlF,eAAe,CACb,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,GAAG,WAAW,CAAC,GACxD,wBAAwB;IAc3B,YAAY,IAAI,IAAI;IAMpB,KAAK,IAAI,IAAI;CAYd"}