@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
package/dist/cli.js ADDED
@@ -0,0 +1,413 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.writePidFile = writePidFile;
38
+ exports.removePidFile = removePidFile;
39
+ exports.dispatchCli = dispatchCli;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const os = __importStar(require("os"));
43
+ const net = __importStar(require("net"));
44
+ const child_process_1 = require("child_process");
45
+ const config_1 = require("./config");
46
+ const HOME_DIR = process.env.HOME || os.homedir();
47
+ const CONFIG_DIR = path.join(HOME_DIR, '.companion');
48
+ const PID_FILE = path.join(CONFIG_DIR, 'daemon.pid');
49
+ // ANSI colors
50
+ const bold = (s) => `\x1b[1m${s}\x1b[0m`;
51
+ const green = (s) => `\x1b[32m${s}\x1b[0m`;
52
+ const red = (s) => `\x1b[31m${s}\x1b[0m`;
53
+ const yellow = (s) => `\x1b[33m${s}\x1b[0m`;
54
+ const dim = (s) => `\x1b[2m${s}\x1b[0m`;
55
+ function printHelp() {
56
+ console.log(`
57
+ ${bold('companion')} - Daemon for monitoring Claude Code sessions
58
+
59
+ ${bold('USAGE')}
60
+ companion [command] [options]
61
+
62
+ ${bold('COMMANDS')}
63
+ start Start the daemon (default if no command given)
64
+ stop Stop a running daemon
65
+ status Show daemon status
66
+ config View or modify configuration
67
+ install Run the installation script
68
+ logs Show recent daemon logs
69
+ help Show this help message
70
+
71
+ ${bold('OPTIONS')}
72
+ --help, -h Show help
73
+ --version, -v Show version
74
+
75
+ ${bold('CONFIG SUBCOMMANDS')}
76
+ config Show current configuration
77
+ config set KEY VAL Set a config value (e.g. config set port 9877)
78
+ config path Show config file path
79
+
80
+ ${bold('EXAMPLES')}
81
+ companion Start the daemon
82
+ companion start Start the daemon
83
+ companion stop Stop the daemon
84
+ companion status Check if daemon is running
85
+ companion config Show configuration
86
+ companion config set port 8080
87
+ companion logs Show recent logs
88
+ companion install Run installation setup
89
+ `);
90
+ }
91
+ function getVersion() {
92
+ try {
93
+ const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf-8'));
94
+ return pkg.version || '0.0.1';
95
+ }
96
+ catch {
97
+ return '0.0.1';
98
+ }
99
+ }
100
+ function getDaemonPid() {
101
+ try {
102
+ if (!fs.existsSync(PID_FILE))
103
+ return null;
104
+ const pid = parseInt(fs.readFileSync(PID_FILE, 'utf-8').trim(), 10);
105
+ if (isNaN(pid))
106
+ return null;
107
+ // Check if process is still running
108
+ try {
109
+ process.kill(pid, 0);
110
+ return pid;
111
+ }
112
+ catch {
113
+ // Process not running, clean up stale PID file
114
+ fs.unlinkSync(PID_FILE);
115
+ return null;
116
+ }
117
+ }
118
+ catch {
119
+ return null;
120
+ }
121
+ }
122
+ function writePidFile() {
123
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
124
+ fs.writeFileSync(PID_FILE, String(process.pid));
125
+ }
126
+ function removePidFile() {
127
+ try {
128
+ fs.unlinkSync(PID_FILE);
129
+ }
130
+ catch {
131
+ // Ignore
132
+ }
133
+ }
134
+ async function isPortListening(port) {
135
+ return new Promise((resolve) => {
136
+ const socket = new net.Socket();
137
+ socket.setTimeout(1000);
138
+ socket.on('connect', () => {
139
+ socket.destroy();
140
+ resolve(true);
141
+ });
142
+ socket.on('timeout', () => {
143
+ socket.destroy();
144
+ resolve(false);
145
+ });
146
+ socket.on('error', () => {
147
+ resolve(false);
148
+ });
149
+ socket.connect(port, '127.0.0.1');
150
+ });
151
+ }
152
+ async function cmdStatus() {
153
+ const pid = getDaemonPid();
154
+ let config = null;
155
+ try {
156
+ config = (0, config_1.loadConfig)();
157
+ }
158
+ catch {
159
+ // Config may not exist yet
160
+ }
161
+ const port = config?.port || 9877;
162
+ const listening = await isPortListening(port);
163
+ console.log(bold('Companion Daemon Status'));
164
+ console.log('─'.repeat(40));
165
+ if (pid) {
166
+ console.log(` Process: ${green('running')} (PID ${pid})`);
167
+ }
168
+ else {
169
+ console.log(` Process: ${red('not running')}`);
170
+ }
171
+ if (listening) {
172
+ console.log(` Port: ${green(`${port} (listening)`)}`);
173
+ }
174
+ else {
175
+ console.log(` Port: ${dim(`${port} (not listening)`)}`);
176
+ }
177
+ const configPath = process.env.CONFIG_PATH || path.join(CONFIG_DIR, 'config.json');
178
+ console.log(` Config: ${fs.existsSync(configPath) ? configPath : dim('not found')}`);
179
+ console.log(` PID file: ${fs.existsSync(PID_FILE) ? PID_FILE : dim('not found')}`);
180
+ if (config) {
181
+ console.log(` TLS: ${config.tls ? green('enabled') : dim('disabled')}`);
182
+ console.log(` mDNS: ${config.mdnsEnabled ? green('enabled') : dim('disabled')}`);
183
+ }
184
+ // Check tmux sessions
185
+ try {
186
+ const tmuxOutput = (0, child_process_1.execSync)('tmux list-sessions -F "#{session_name}" 2>/dev/null', {
187
+ encoding: 'utf-8',
188
+ }).trim();
189
+ const sessions = tmuxOutput.split('\n').filter(Boolean);
190
+ if (sessions.length > 0) {
191
+ console.log(` Tmux: ${green(`${sessions.length} session(s)`)} ${dim(`(${sessions.join(', ')})`)}`);
192
+ }
193
+ else {
194
+ console.log(` Tmux: ${dim('no sessions')}`);
195
+ }
196
+ }
197
+ catch {
198
+ console.log(` Tmux: ${dim('not available')}`);
199
+ }
200
+ console.log('');
201
+ }
202
+ function cmdStop() {
203
+ const pid = getDaemonPid();
204
+ if (!pid) {
205
+ console.log(yellow('Daemon is not running (no PID file found)'));
206
+ // Try to find by process name
207
+ try {
208
+ const result = (0, child_process_1.execSync)('pgrep -f "node.*dist/index" 2>/dev/null', {
209
+ encoding: 'utf-8',
210
+ }).trim();
211
+ if (result) {
212
+ const pids = result.split('\n').filter((p) => p !== String(process.pid));
213
+ if (pids.length > 0) {
214
+ console.log(`Found daemon process(es): ${pids.join(', ')}`);
215
+ for (const p of pids) {
216
+ process.kill(parseInt(p, 10), 'SIGTERM');
217
+ }
218
+ console.log(green('Sent SIGTERM to daemon process(es)'));
219
+ }
220
+ }
221
+ }
222
+ catch {
223
+ // No process found
224
+ }
225
+ return;
226
+ }
227
+ console.log(`Stopping daemon (PID ${pid})...`);
228
+ try {
229
+ process.kill(pid, 'SIGTERM');
230
+ removePidFile();
231
+ console.log(green('Daemon stopped'));
232
+ }
233
+ catch (err) {
234
+ console.error(red(`Failed to stop daemon: ${err}`));
235
+ }
236
+ }
237
+ function cmdConfig(args) {
238
+ const subcommand = args[0];
239
+ if (subcommand === 'path') {
240
+ const configPath = process.env.CONFIG_PATH || path.join(CONFIG_DIR, 'config.json');
241
+ console.log(configPath);
242
+ return;
243
+ }
244
+ if (subcommand === 'set') {
245
+ const key = args[1];
246
+ const value = args[2];
247
+ if (!key || value === undefined) {
248
+ console.error(red('Usage: companion config set KEY VALUE'));
249
+ console.error(' Keys: port, token, tls, tmux_session, code_home, mdns_enabled, push_delay_ms');
250
+ process.exit(1);
251
+ }
252
+ let config;
253
+ try {
254
+ config = (0, config_1.loadConfig)();
255
+ }
256
+ catch {
257
+ console.error(red('Cannot load config. Run "companion install" first.'));
258
+ process.exit(1);
259
+ }
260
+ // Map CLI key names to config properties
261
+ const keyMap = {
262
+ port: 'port',
263
+ token: 'token',
264
+ tls: 'tls',
265
+ tmux_session: 'tmuxSession',
266
+ code_home: 'codeHome',
267
+ mdns_enabled: 'mdnsEnabled',
268
+ push_delay_ms: 'pushDelayMs',
269
+ };
270
+ const configKey = keyMap[key];
271
+ if (!configKey) {
272
+ console.error(red(`Unknown config key: ${key}`));
273
+ console.error(' Valid keys: ' + Object.keys(keyMap).join(', '));
274
+ process.exit(1);
275
+ }
276
+ // Parse value based on type
277
+ let parsedValue = value;
278
+ if (value === 'true')
279
+ parsedValue = true;
280
+ else if (value === 'false')
281
+ parsedValue = false;
282
+ else if (/^\d+$/.test(value))
283
+ parsedValue = parseInt(value, 10);
284
+ config[configKey] = parsedValue;
285
+ (0, config_1.saveConfig)(config);
286
+ console.log(green(`Set ${key} = ${value}`));
287
+ return;
288
+ }
289
+ // Default: show config
290
+ let config;
291
+ try {
292
+ config = (0, config_1.loadConfig)();
293
+ }
294
+ catch {
295
+ console.error(red('Cannot load config. Run "companion install" first.'));
296
+ process.exit(1);
297
+ }
298
+ console.log(bold('Companion Configuration'));
299
+ console.log('─'.repeat(40));
300
+ console.log(` port: ${config.port}`);
301
+ console.log(` token: ${dim(config.token.slice(0, 8) + '...' + config.token.slice(-4))}`);
302
+ console.log(` tls: ${config.tls}`);
303
+ console.log(` tmux_session: ${config.tmuxSession}`);
304
+ console.log(` code_home: ${config.codeHome}`);
305
+ console.log(` mdns_enabled: ${config.mdnsEnabled}`);
306
+ console.log(` push_delay_ms: ${config.pushDelayMs}`);
307
+ if (config.autoApproveTools?.length > 0) {
308
+ console.log(` auto_approve: ${config.autoApproveTools.join(', ')}`);
309
+ }
310
+ console.log('');
311
+ console.log(dim(`Config file: ${process.env.CONFIG_PATH || path.join(CONFIG_DIR, 'config.json')}`));
312
+ }
313
+ function cmdInstall() {
314
+ const scriptPath = path.join(__dirname, '..', 'scripts', 'install.sh');
315
+ if (!fs.existsSync(scriptPath)) {
316
+ console.error(red('Install script not found at: ' + scriptPath));
317
+ console.error('Run from the daemon source directory or install manually.');
318
+ process.exit(1);
319
+ }
320
+ console.log('Running installation script...');
321
+ try {
322
+ (0, child_process_1.execSync)(`bash "${scriptPath}"`, { stdio: 'inherit' });
323
+ }
324
+ catch (err) {
325
+ console.error(red(`Installation failed: ${err}`));
326
+ process.exit(1);
327
+ }
328
+ }
329
+ function cmdLogs() {
330
+ const platform = os.platform();
331
+ if (platform === 'darwin') {
332
+ const logPath = path.join(HOME_DIR, 'Library', 'Logs', 'companion.log');
333
+ if (fs.existsSync(logPath)) {
334
+ try {
335
+ (0, child_process_1.execSync)(`tail -50 "${logPath}"`, { stdio: 'inherit' });
336
+ }
337
+ catch {
338
+ console.error(red('Failed to read log file'));
339
+ }
340
+ }
341
+ else {
342
+ // Try /tmp/daemon.log (dev mode)
343
+ const devLog = '/tmp/daemon.log';
344
+ if (fs.existsSync(devLog)) {
345
+ try {
346
+ (0, child_process_1.execSync)(`tail -50 "${devLog}"`, { stdio: 'inherit' });
347
+ }
348
+ catch {
349
+ console.error(red('Failed to read log file'));
350
+ }
351
+ }
352
+ else {
353
+ console.log(dim('No log file found'));
354
+ console.log(dim(`Checked: ${logPath}`));
355
+ console.log(dim(`Checked: ${devLog}`));
356
+ }
357
+ }
358
+ }
359
+ else {
360
+ // Linux: try journalctl first
361
+ try {
362
+ (0, child_process_1.execSync)('journalctl --user -u companion --no-pager -n 50 2>/dev/null || journalctl -u companion --no-pager -n 50 2>/dev/null', {
363
+ stdio: 'inherit',
364
+ });
365
+ }
366
+ catch {
367
+ console.log(dim('No logs found via journalctl'));
368
+ console.log(dim('If running manually, check your terminal output'));
369
+ }
370
+ }
371
+ }
372
+ /**
373
+ * Parse CLI arguments and dispatch to the appropriate command.
374
+ * Returns true if a command was handled, false if the daemon should start.
375
+ */
376
+ async function dispatchCli(args) {
377
+ const command = args[0];
378
+ // No args or "start" — run the daemon
379
+ if (!command || command === 'start') {
380
+ return false;
381
+ }
382
+ switch (command) {
383
+ case 'help':
384
+ case '--help':
385
+ case '-h':
386
+ printHelp();
387
+ return true;
388
+ case '--version':
389
+ case '-v':
390
+ console.log(`companion v${getVersion()}`);
391
+ return true;
392
+ case 'status':
393
+ await cmdStatus();
394
+ return true;
395
+ case 'stop':
396
+ cmdStop();
397
+ return true;
398
+ case 'config':
399
+ cmdConfig(args.slice(1));
400
+ return true;
401
+ case 'install':
402
+ cmdInstall();
403
+ return true;
404
+ case 'logs':
405
+ cmdLogs();
406
+ return true;
407
+ default:
408
+ console.error(red(`Unknown command: ${command}`));
409
+ console.error(`Run ${bold('companion help')} for usage information`);
410
+ process.exit(1);
411
+ }
412
+ }
413
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA2BvC,wBAAgB,UAAU,IAAI,YAAY,CAgDzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAkBrD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAqBvC,wBAAgB,UAAU,IAAI,YAAY,CA8CzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAkBrD"}
package/dist/config.js CHANGED
@@ -40,13 +40,7 @@ const path = __importStar(require("path"));
40
40
  const HOME_DIR = process.env.HOME || '/root';
41
41
  const CONFIG_DIR = path.join(HOME_DIR, '.companion');
42
42
  // Safe tools that can be auto-approved without user confirmation
43
- const DEFAULT_AUTO_APPROVE_TOOLS = [
44
- 'Read',
45
- 'Glob',
46
- 'Grep',
47
- 'WebFetch',
48
- 'WebSearch',
49
- ];
43
+ const DEFAULT_AUTO_APPROVE_TOOLS = ['Read', 'Glob', 'Grep', 'WebFetch', 'WebSearch'];
50
44
  const DEFAULT_CONFIG = {
51
45
  port: 9877,
52
46
  token: '',
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { NotificationEventType, PendingEvent } from './types';
2
+ import { NotificationStore } from './notification-store';
3
+ import { PushNotificationService } from './push';
4
+ export interface EscalationEvent {
5
+ eventType: NotificationEventType;
6
+ sessionId: string;
7
+ sessionName: string;
8
+ content: string;
9
+ }
10
+ export interface EscalationResult {
11
+ shouldBroadcast: boolean;
12
+ pendingEvent?: PendingEvent;
13
+ }
14
+ export declare class EscalationService {
15
+ private pendingEvents;
16
+ private timers;
17
+ private lastNotifiedPerSession;
18
+ private store;
19
+ private push;
20
+ private cleanupInterval;
21
+ private readonly EXPIRE_MS;
22
+ constructor(store: NotificationStore, push: PushNotificationService);
23
+ /**
24
+ * Handle a notification event. Checks escalation config, muted sessions,
25
+ * and rate limits. Returns whether to broadcast to WS clients.
26
+ */
27
+ handleEvent(event: EscalationEvent): EscalationResult;
28
+ /**
29
+ * Acknowledge a session — cancels any pending push timers for that session.
30
+ * Called when user views session, sends input, or session stops waiting.
31
+ */
32
+ acknowledgeSession(sessionId: string): void;
33
+ /**
34
+ * Get all pending (unacknowledged, unsent) events.
35
+ */
36
+ getPendingEvents(): PendingEvent[];
37
+ /**
38
+ * Fire push notification for a pending event (Tier 2 escalation).
39
+ */
40
+ private firePush;
41
+ private isInQuietHours;
42
+ /**
43
+ * Auto-expire old pending events.
44
+ */
45
+ private cleanup;
46
+ /**
47
+ * Destroy the service (clear timers).
48
+ */
49
+ destroy(): void;
50
+ }
51
+ //# sourceMappingURL=escalation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalation.d.ts","sourceRoot":"","sources":["../src/escalation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,sBAAsB,CAAkC;IAChE,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,IAAI,CAA0B;IAGtC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;gBAEhC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,uBAAuB;IAMnE;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB;IA4ErD;;;OAGG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAyB3C;;OAEG;IACH,gBAAgB,IAAI,YAAY,EAAE;IAIlC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAyChB,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,OAAO;IAsBf;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}