@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.
- package/dist/__tests__/task-parser.test.js +29 -29
- package/dist/__tests__/task-parser.test.js.map +1 -1
- package/dist/anthropic-usage.d.ts.map +1 -1
- package/dist/anthropic-usage.js +1 -1
- package/dist/anthropic-usage.js.map +1 -1
- package/dist/cert-generator.d.ts.map +1 -1
- package/dist/cert-generator.js +4 -21
- package/dist/cert-generator.js.map +1 -1
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +413 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -7
- package/dist/config.js.map +1 -1
- package/dist/escalation.d.ts +51 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +198 -0
- package/dist/escalation.js.map +1 -0
- package/dist/index.js +67 -30
- package/dist/index.js.map +1 -1
- package/dist/input-injector.d.ts.map +1 -1
- package/dist/input-injector.js +9 -5
- package/dist/input-injector.js.map +1 -1
- package/dist/notification-store.d.ts +35 -0
- package/dist/notification-store.d.ts.map +1 -0
- package/dist/notification-store.js +272 -0
- package/dist/notification-store.js.map +1 -0
- package/dist/parser.d.ts +15 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +106 -61
- package/dist/parser.js.map +1 -1
- package/dist/push.d.ts +18 -26
- package/dist/push.d.ts.map +1 -1
- package/dist/push.js +90 -184
- package/dist/push.js.map +1 -1
- package/dist/qr-server.d.ts.map +1 -1
- package/dist/qr-server.js +159 -139
- package/dist/qr-server.js.map +1 -1
- package/dist/rules-engine.d.ts +20 -0
- package/dist/rules-engine.d.ts.map +1 -0
- package/dist/rules-engine.js +71 -0
- package/dist/rules-engine.js.map +1 -0
- package/dist/scaffold/claude-commands.d.ts +18 -0
- package/dist/scaffold/claude-commands.d.ts.map +1 -0
- package/dist/scaffold/claude-commands.js +352 -0
- package/dist/scaffold/claude-commands.js.map +1 -0
- package/dist/scaffold/generator.d.ts.map +1 -1
- package/dist/scaffold/generator.js +26 -1
- package/dist/scaffold/generator.js.map +1 -1
- package/dist/scaffold/scorer.d.ts +19 -0
- package/dist/scaffold/scorer.d.ts.map +1 -0
- package/dist/scaffold/scorer.js +92 -0
- package/dist/scaffold/scorer.js.map +1 -0
- package/dist/scaffold/templates/go-cli.d.ts +3 -0
- package/dist/scaffold/templates/go-cli.d.ts.map +1 -0
- package/dist/scaffold/templates/go-cli.js +249 -0
- package/dist/scaffold/templates/go-cli.js.map +1 -0
- package/dist/scaffold/templates/index.d.ts.map +1 -1
- package/dist/scaffold/templates/index.js +8 -2
- package/dist/scaffold/templates/index.js.map +1 -1
- package/dist/scaffold/templates/nextjs.d.ts +3 -0
- package/dist/scaffold/templates/nextjs.d.ts.map +1 -0
- package/dist/scaffold/templates/nextjs.js +336 -0
- package/dist/scaffold/templates/nextjs.js.map +1 -0
- package/dist/scaffold/templates/node-express.d.ts.map +1 -1
- package/dist/scaffold/templates/node-express.js +170 -157
- package/dist/scaffold/templates/node-express.js.map +1 -1
- package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -1
- package/dist/scaffold/templates/python-fastapi.js +234 -221
- package/dist/scaffold/templates/python-fastapi.js.map +1 -1
- package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -1
- package/dist/scaffold/templates/react-mui-website.js +337 -324
- package/dist/scaffold/templates/react-mui-website.js.map +1 -1
- package/dist/scaffold/templates/react-typescript.d.ts.map +1 -1
- package/dist/scaffold/templates/react-typescript.js +219 -206
- package/dist/scaffold/templates/react-typescript.js.map +1 -1
- package/dist/scaffold/templates/typescript-library.d.ts +3 -0
- package/dist/scaffold/templates/typescript-library.d.ts.map +1 -0
- package/dist/scaffold/templates/typescript-library.js +241 -0
- package/dist/scaffold/templates/typescript-library.js.map +1 -0
- package/dist/scaffold/types.d.ts +7 -0
- package/dist/scaffold/types.d.ts.map +1 -1
- package/dist/subagent-watcher.d.ts.map +1 -1
- package/dist/subagent-watcher.js +3 -3
- package/dist/subagent-watcher.js.map +1 -1
- package/dist/tmux-manager.d.ts +37 -0
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +165 -5
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-config.d.ts.map +1 -1
- package/dist/tool-config.js +2 -2
- package/dist/tool-config.js.map +1 -1
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -1
- package/dist/watcher.d.ts +7 -0
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +118 -9
- package/dist/watcher.js.map +1 -1
- package/dist/websocket.d.ts +16 -2
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +758 -117
- package/dist/websocket.js.map +1 -1
- package/dist/work-group-manager.d.ts +69 -0
- package/dist/work-group-manager.d.ts.map +1 -0
- package/dist/work-group-manager.js +610 -0
- package/dist/work-group-manager.js.map +1 -0
- 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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
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: '',
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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"}
|