agentwake 1.0.0
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/.cursor/hooks.json +15 -0
- package/.env.example +19 -0
- package/README.md +137 -0
- package/dist/adapters/claude-hook-adapter.d.ts +3 -0
- package/dist/adapters/claude-hook-adapter.d.ts.map +1 -0
- package/dist/adapters/claude-hook-adapter.js +25 -0
- package/dist/adapters/claude-hook-adapter.js.map +1 -0
- package/dist/adapters/cursor-hook-adapter.d.ts +3 -0
- package/dist/adapters/cursor-hook-adapter.d.ts.map +1 -0
- package/dist/adapters/cursor-hook-adapter.js +144 -0
- package/dist/adapters/cursor-hook-adapter.js.map +1 -0
- package/dist/adapters/cursor-terminal-hook.d.ts +20 -0
- package/dist/adapters/cursor-terminal-hook.d.ts.map +1 -0
- package/dist/adapters/cursor-terminal-hook.js +120 -0
- package/dist/adapters/cursor-terminal-hook.js.map +1 -0
- package/dist/adapters/hook-common.d.ts +6 -0
- package/dist/adapters/hook-common.d.ts.map +1 -0
- package/dist/adapters/hook-common.js +69 -0
- package/dist/adapters/hook-common.js.map +1 -0
- package/dist/adapters/qoder-log-adapter.d.ts +19 -0
- package/dist/adapters/qoder-log-adapter.d.ts.map +1 -0
- package/dist/adapters/qoder-log-adapter.js +320 -0
- package/dist/adapters/qoder-log-adapter.js.map +1 -0
- package/dist/bootstrap.d.ts +19 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +106 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +187 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +63 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/notify-event.d.ts +17 -0
- package/dist/domain/notify-event.d.ts.map +1 -0
- package/dist/domain/notify-event.js +10 -0
- package/dist/domain/notify-event.js.map +1 -0
- package/dist/gateway/adapter-registry.d.ts +9 -0
- package/dist/gateway/adapter-registry.d.ts.map +1 -0
- package/dist/gateway/adapter-registry.js +26 -0
- package/dist/gateway/adapter-registry.js.map +1 -0
- package/dist/gateway/adapter.d.ts +14 -0
- package/dist/gateway/adapter.d.ts.map +1 -0
- package/dist/gateway/adapter.js +3 -0
- package/dist/gateway/adapter.js.map +1 -0
- package/dist/gateway/event-router.d.ts +20 -0
- package/dist/gateway/event-router.d.ts.map +1 -0
- package/dist/gateway/event-router.js +72 -0
- package/dist/gateway/event-router.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +9 -0
- package/dist/main.js.map +1 -0
- package/dist/notifiers/desktop-notifier.d.ts +11 -0
- package/dist/notifiers/desktop-notifier.d.ts.map +1 -0
- package/dist/notifiers/desktop-notifier.js +78 -0
- package/dist/notifiers/desktop-notifier.js.map +1 -0
- package/dist/notifiers/mobile-ws-notifier.d.ts +13 -0
- package/dist/notifiers/mobile-ws-notifier.d.ts.map +1 -0
- package/dist/notifiers/mobile-ws-notifier.js +65 -0
- package/dist/notifiers/mobile-ws-notifier.js.map +1 -0
- package/dist/notifiers/notifier.d.ts +6 -0
- package/dist/notifiers/notifier.d.ts.map +1 -0
- package/dist/notifiers/notifier.js +3 -0
- package/dist/notifiers/notifier.js.map +1 -0
- package/dist/notifiers/pwa-push-notifier.d.ts +12 -0
- package/dist/notifiers/pwa-push-notifier.d.ts.map +1 -0
- package/dist/notifiers/pwa-push-notifier.js +69 -0
- package/dist/notifiers/pwa-push-notifier.js.map +1 -0
- package/dist/run-gateway.d.ts +3 -0
- package/dist/run-gateway.d.ts.map +1 -0
- package/dist/run-gateway.js +66 -0
- package/dist/run-gateway.js.map +1 -0
- package/dist/utils/approval-match.d.ts +2 -0
- package/dist/utils/approval-match.d.ts.map +1 -0
- package/dist/utils/approval-match.js +32 -0
- package/dist/utils/approval-match.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +19 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +60 -0
- package/scripts/cursor-hook-forwarder.mjs +269 -0
- package/web/app.js +350 -0
- package/web/icons/icon-192.svg +6 -0
- package/web/icons/icon-512.svg +6 -0
- package/web/index.html +117 -0
- package/web/manifest.webmanifest +25 -0
- package/web/sw.js +32 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parseQoderLogLine = parseQoderLogLine;
|
|
7
|
+
exports.createQoderLogAdapter = createQoderLogAdapter;
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const node_readline_1 = require("node:readline");
|
|
12
|
+
const notify_event_1 = require("../domain/notify-event");
|
|
13
|
+
const logger_1 = require("../utils/logger");
|
|
14
|
+
const REQUEST_NOTIFY_DELAY_MS = 1_000;
|
|
15
|
+
const WAIT_THRESHOLD_SEC = 2;
|
|
16
|
+
const WAIT_THRESHOLD_MS = WAIT_THRESHOLD_SEC * 1_000;
|
|
17
|
+
const FILE_POLL_MS = 500;
|
|
18
|
+
const DISCOVERY_POLL_MS = 5_000;
|
|
19
|
+
const LOG_TIMESTAMP_RE = /^(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})(?:[.,]\d{3,6})?/;
|
|
20
|
+
function extractLogTimestampSec(line) {
|
|
21
|
+
const match = line.match(LOG_TIMESTAMP_RE);
|
|
22
|
+
if (!match) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const year = Number(match[1]);
|
|
26
|
+
const month = Number(match[2]);
|
|
27
|
+
const day = Number(match[3]);
|
|
28
|
+
const hour = Number(match[4]);
|
|
29
|
+
const minute = Number(match[5]);
|
|
30
|
+
const second = Number(match[6]);
|
|
31
|
+
const timestampMs = new Date(year, month - 1, day, hour, minute, second).getTime();
|
|
32
|
+
if (!Number.isFinite(timestampMs)) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
return Math.floor(timestampMs / 1_000);
|
|
36
|
+
}
|
|
37
|
+
function extractToolCallId(line) {
|
|
38
|
+
const match = line.match(/toolCallId[=:]["']?([^,"'\s}]+)/i);
|
|
39
|
+
return match?.[1]?.trim() || undefined;
|
|
40
|
+
}
|
|
41
|
+
function extractToolName(line) {
|
|
42
|
+
const match = line.match(/toolName[=:]["']?([^,"'\s}]+)/i);
|
|
43
|
+
return match?.[1]?.trim() || undefined;
|
|
44
|
+
}
|
|
45
|
+
function detectResolveOutcome(line) {
|
|
46
|
+
if (/cancelled/i.test(line)) {
|
|
47
|
+
return "cancelled";
|
|
48
|
+
}
|
|
49
|
+
if (/"name":"Allow"/i.test(line)) {
|
|
50
|
+
return "allow";
|
|
51
|
+
}
|
|
52
|
+
if (/"name":"Reject"/i.test(line)) {
|
|
53
|
+
return "reject";
|
|
54
|
+
}
|
|
55
|
+
return "unknown";
|
|
56
|
+
}
|
|
57
|
+
function findLatestQoderSessionDir(baseDir) {
|
|
58
|
+
if (!(0, node_fs_1.existsSync)(baseDir)) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const entries = (0, node_fs_1.readdirSync)(baseDir, { withFileTypes: true }).filter((entry) => entry.isDirectory());
|
|
62
|
+
if (entries.length === 0) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
let latestDir;
|
|
66
|
+
let latestMtime = -1;
|
|
67
|
+
for (const entry of entries) {
|
|
68
|
+
const candidate = node_path_1.default.join(baseDir, entry.name);
|
|
69
|
+
const mtime = (0, node_fs_1.statSync)(candidate).mtimeMs;
|
|
70
|
+
if (mtime > latestMtime) {
|
|
71
|
+
latestMtime = mtime;
|
|
72
|
+
latestDir = candidate;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return latestDir;
|
|
76
|
+
}
|
|
77
|
+
function collectAgentLogsRecursively(rootDir) {
|
|
78
|
+
if (!(0, node_fs_1.existsSync)(rootDir)) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
const result = [];
|
|
82
|
+
const stack = [rootDir];
|
|
83
|
+
while (stack.length > 0) {
|
|
84
|
+
const current = stack.pop();
|
|
85
|
+
if (!current) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
let entries;
|
|
89
|
+
try {
|
|
90
|
+
entries = (0, node_fs_1.readdirSync)(current, { withFileTypes: true });
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
for (const entry of entries) {
|
|
96
|
+
const fullPath = node_path_1.default.join(current, entry.name);
|
|
97
|
+
if (entry.isDirectory()) {
|
|
98
|
+
stack.push(fullPath);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (entry.isFile() && entry.name === "agent.log") {
|
|
102
|
+
result.push(fullPath);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
function resolveQoderLogPaths(configPath) {
|
|
109
|
+
if (configPath) {
|
|
110
|
+
if (!(0, node_fs_1.existsSync)(configPath)) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
const stats = (0, node_fs_1.statSync)(configPath);
|
|
114
|
+
if (stats.isFile()) {
|
|
115
|
+
return [configPath];
|
|
116
|
+
}
|
|
117
|
+
if (stats.isDirectory()) {
|
|
118
|
+
return collectAgentLogsRecursively(configPath);
|
|
119
|
+
}
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
const qoderBase = node_path_1.default.join(node_os_1.default.homedir(), "Library", "Application Support", "Qoder", "logs");
|
|
123
|
+
const latestSessionDir = findLatestQoderSessionDir(qoderBase);
|
|
124
|
+
if (!latestSessionDir) {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
return collectAgentLogsRecursively(latestSessionDir);
|
|
128
|
+
}
|
|
129
|
+
function parseQoderLogLine(line) {
|
|
130
|
+
const text = line.trim();
|
|
131
|
+
if (!text) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
if (/Tool permission requested/i.test(text)) {
|
|
135
|
+
const toolCallId = extractToolCallId(text);
|
|
136
|
+
if (!toolCallId) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
type: "permission_requested",
|
|
141
|
+
toolCallId,
|
|
142
|
+
toolName: extractToolName(text) ?? "tool",
|
|
143
|
+
logTimestampSec: extractLogTimestampSec(text),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
if (/Permission (resolved|cancelled)/i.test(text)) {
|
|
147
|
+
const toolCallId = extractToolCallId(text);
|
|
148
|
+
if (!toolCallId) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
type: "permission_resolved",
|
|
153
|
+
toolCallId,
|
|
154
|
+
outcome: detectResolveOutcome(text),
|
|
155
|
+
logTimestampSec: extractLogTimestampSec(text),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (/streaming -> suspended.*permission_request/i.test(text)) {
|
|
159
|
+
return { type: "agent_suspended" };
|
|
160
|
+
}
|
|
161
|
+
if (/suspended -> (streaming|cancelled)/i.test(text)) {
|
|
162
|
+
return { type: "agent_resumed" };
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
function createQoderLogAdapter() {
|
|
167
|
+
return {
|
|
168
|
+
id: "qoder-log-adapter",
|
|
169
|
+
async start(context) {
|
|
170
|
+
const pendingRequests = new Map();
|
|
171
|
+
const cursors = new Map();
|
|
172
|
+
let filePollTimer;
|
|
173
|
+
let discoveryPollTimer;
|
|
174
|
+
let reading = false;
|
|
175
|
+
const emitWaitingNotification = async (toolCallId, toolName) => {
|
|
176
|
+
const event = (0, notify_event_1.createNotifyEvent)({
|
|
177
|
+
source: "qoder-log",
|
|
178
|
+
editor: "qoder",
|
|
179
|
+
level: "warn",
|
|
180
|
+
title: "Qoder waiting for approval",
|
|
181
|
+
body: `${toolName || "tool"} waiting for your approval`,
|
|
182
|
+
dedupeKey: `qoder-log:pending:${toolCallId}`,
|
|
183
|
+
meta: {
|
|
184
|
+
toolCallId,
|
|
185
|
+
toolName,
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
await context.emit(event);
|
|
189
|
+
};
|
|
190
|
+
const handleSignal = async (signal) => {
|
|
191
|
+
if (signal.type === "permission_requested") {
|
|
192
|
+
const existing = pendingRequests.get(signal.toolCallId);
|
|
193
|
+
if (existing) {
|
|
194
|
+
clearTimeout(existing.notifyTimer);
|
|
195
|
+
}
|
|
196
|
+
const notifyTimer = setTimeout(() => {
|
|
197
|
+
const pending = pendingRequests.get(signal.toolCallId);
|
|
198
|
+
if (!pending) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
emitWaitingNotification(signal.toolCallId, pending.toolName).catch((error) => {
|
|
202
|
+
logger_1.logger.error("qoder log notify failed", { error: String(error) });
|
|
203
|
+
});
|
|
204
|
+
}, Math.max(REQUEST_NOTIFY_DELAY_MS, WAIT_THRESHOLD_MS));
|
|
205
|
+
pendingRequests.set(signal.toolCallId, {
|
|
206
|
+
toolName: signal.toolName,
|
|
207
|
+
requestLogSec: signal.logTimestampSec,
|
|
208
|
+
notifyTimer,
|
|
209
|
+
});
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (signal.type === "permission_resolved") {
|
|
213
|
+
const pending = pendingRequests.get(signal.toolCallId);
|
|
214
|
+
if (pending) {
|
|
215
|
+
clearTimeout(pending.notifyTimer);
|
|
216
|
+
const waitSec = typeof pending.requestLogSec === "number" && typeof signal.logTimestampSec === "number"
|
|
217
|
+
? signal.logTimestampSec - pending.requestLogSec
|
|
218
|
+
: undefined;
|
|
219
|
+
if (typeof waitSec === "number" && waitSec >= WAIT_THRESHOLD_SEC) {
|
|
220
|
+
logger_1.logger.info("qoder permission waited", {
|
|
221
|
+
toolCallId: signal.toolCallId,
|
|
222
|
+
toolName: pending.toolName,
|
|
223
|
+
waitSec,
|
|
224
|
+
outcome: signal.outcome,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
pendingRequests.delete(signal.toolCallId);
|
|
228
|
+
}
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (signal.type === "agent_suspended") {
|
|
232
|
+
logger_1.logger.debug("qoder agent suspended for permission request");
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
logger_1.logger.debug("qoder agent resumed");
|
|
236
|
+
};
|
|
237
|
+
const ingestLine = async (line) => {
|
|
238
|
+
const signal = parseQoderLogLine(line);
|
|
239
|
+
if (!signal) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
await handleSignal(signal);
|
|
243
|
+
};
|
|
244
|
+
const discoverLogs = () => {
|
|
245
|
+
const paths = resolveQoderLogPaths(context.config.qoderLogPath);
|
|
246
|
+
for (const logPath of paths) {
|
|
247
|
+
if (!cursors.has(logPath) && (0, node_fs_1.existsSync)(logPath)) {
|
|
248
|
+
const size = (0, node_fs_1.statSync)(logPath).size;
|
|
249
|
+
// tail -n 0 behavior: only consume newly appended lines
|
|
250
|
+
cursors.set(logPath, { cursor: size });
|
|
251
|
+
logger_1.logger.info("qoder log adapter tracking file", { path: logPath });
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
const readDelta = async (logPath, state) => {
|
|
256
|
+
if (!(0, node_fs_1.existsSync)(logPath)) {
|
|
257
|
+
cursors.delete(logPath);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const size = (0, node_fs_1.statSync)(logPath).size;
|
|
261
|
+
if (size < state.cursor) {
|
|
262
|
+
state.cursor = 0;
|
|
263
|
+
}
|
|
264
|
+
if (size === state.cursor) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
const stream = (0, node_fs_1.createReadStream)(logPath, {
|
|
268
|
+
start: state.cursor,
|
|
269
|
+
end: size - 1,
|
|
270
|
+
encoding: "utf-8",
|
|
271
|
+
});
|
|
272
|
+
const lines = (0, node_readline_1.createInterface)({ input: stream, crlfDelay: Infinity });
|
|
273
|
+
for await (const line of lines) {
|
|
274
|
+
await ingestLine(line);
|
|
275
|
+
}
|
|
276
|
+
state.cursor = size;
|
|
277
|
+
};
|
|
278
|
+
const pollLogs = async () => {
|
|
279
|
+
if (reading) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
reading = true;
|
|
283
|
+
try {
|
|
284
|
+
for (const [logPath, state] of cursors.entries()) {
|
|
285
|
+
await readDelta(logPath, state);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
finally {
|
|
289
|
+
reading = false;
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
discoverLogs();
|
|
293
|
+
if (cursors.size === 0) {
|
|
294
|
+
logger_1.logger.info("qoder log adapter: no agent.log found yet");
|
|
295
|
+
}
|
|
296
|
+
filePollTimer = setInterval(() => {
|
|
297
|
+
pollLogs().catch((error) => {
|
|
298
|
+
logger_1.logger.error("qoder log polling failed", { error: String(error) });
|
|
299
|
+
});
|
|
300
|
+
}, FILE_POLL_MS);
|
|
301
|
+
discoveryPollTimer = setInterval(() => {
|
|
302
|
+
discoverLogs();
|
|
303
|
+
}, DISCOVERY_POLL_MS);
|
|
304
|
+
const stop = () => {
|
|
305
|
+
if (filePollTimer) {
|
|
306
|
+
clearInterval(filePollTimer);
|
|
307
|
+
}
|
|
308
|
+
if (discoveryPollTimer) {
|
|
309
|
+
clearInterval(discoveryPollTimer);
|
|
310
|
+
}
|
|
311
|
+
for (const pending of pendingRequests.values()) {
|
|
312
|
+
clearTimeout(pending.notifyTimer);
|
|
313
|
+
}
|
|
314
|
+
pendingRequests.clear();
|
|
315
|
+
};
|
|
316
|
+
return stop;
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=qoder-log-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qoder-log-adapter.js","sourceRoot":"","sources":["../../src/adapters/qoder-log-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Server as HttpServer } from "node:http";
|
|
2
|
+
import { type Server as HttpsServer } from "node:https";
|
|
3
|
+
import { type Express } from "express";
|
|
4
|
+
import type { AppConfig } from "./config";
|
|
5
|
+
import type { GatewayAdapter } from "./gateway/adapter";
|
|
6
|
+
import type { Notifier } from "./notifiers/notifier";
|
|
7
|
+
export type BootstrappedGateway = {
|
|
8
|
+
app: Express;
|
|
9
|
+
server: HttpServer | HttpsServer;
|
|
10
|
+
start: () => Promise<void>;
|
|
11
|
+
stop: () => Promise<void>;
|
|
12
|
+
};
|
|
13
|
+
type GatewayOverrides = {
|
|
14
|
+
notifiers?: Notifier[];
|
|
15
|
+
adapters?: GatewayAdapter[];
|
|
16
|
+
};
|
|
17
|
+
export declare function createGateway(config: AppConfig, overrides?: GatewayOverrides): BootstrappedGateway;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAqC,KAAK,MAAM,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3F,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAIhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;IACjC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,CAuGlG"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createGateway = createGateway;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_http_1 = require("node:http");
|
|
9
|
+
const node_https_1 = require("node:https");
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const express_1 = __importDefault(require("express"));
|
|
12
|
+
const claude_hook_adapter_1 = require("./adapters/claude-hook-adapter");
|
|
13
|
+
const cursor_hook_adapter_1 = require("./adapters/cursor-hook-adapter");
|
|
14
|
+
const qoder_log_adapter_1 = require("./adapters/qoder-log-adapter");
|
|
15
|
+
const adapter_registry_1 = require("./gateway/adapter-registry");
|
|
16
|
+
const event_router_1 = require("./gateway/event-router");
|
|
17
|
+
const desktop_notifier_1 = require("./notifiers/desktop-notifier");
|
|
18
|
+
const mobile_ws_notifier_1 = require("./notifiers/mobile-ws-notifier");
|
|
19
|
+
function createGateway(config, overrides) {
|
|
20
|
+
const app = (0, express_1.default)();
|
|
21
|
+
const recentEvents = [];
|
|
22
|
+
const RECENT_EVENTS_MAX = 100;
|
|
23
|
+
const server = config.httpsEnabled === true
|
|
24
|
+
? (0, node_https_1.createServer)({
|
|
25
|
+
cert: (0, node_fs_1.readFileSync)(node_path_1.default.resolve(process.cwd(), config.httpsCertPath)),
|
|
26
|
+
key: (0, node_fs_1.readFileSync)(node_path_1.default.resolve(process.cwd(), config.httpsKeyPath)),
|
|
27
|
+
}, app)
|
|
28
|
+
: (0, node_http_1.createServer)(app);
|
|
29
|
+
app.use(express_1.default.json({ limit: "256kb" }));
|
|
30
|
+
app.use(express_1.default.urlencoded({ extended: false }));
|
|
31
|
+
const mobileWsNotifier = new mobile_ws_notifier_1.MobileWsNotifier();
|
|
32
|
+
const desktopNotifier = new desktop_notifier_1.DesktopNotifier();
|
|
33
|
+
const defaultNotifiers = [desktopNotifier, mobileWsNotifier];
|
|
34
|
+
const router = new event_router_1.EventRouter(overrides?.notifiers ?? defaultNotifiers, {
|
|
35
|
+
dedupeWindowMs: config.dedupeWindowMs,
|
|
36
|
+
rateLimitWindowMs: config.rateLimitWindowMs,
|
|
37
|
+
rateLimitMaxEvents: config.rateLimitMaxEvents,
|
|
38
|
+
});
|
|
39
|
+
const registry = new adapter_registry_1.AdapterRegistry();
|
|
40
|
+
const adapters = overrides?.adapters ??
|
|
41
|
+
[(0, cursor_hook_adapter_1.createCursorHookAdapter)(), (0, claude_hook_adapter_1.createClaudeHookAdapter)(), (0, qoder_log_adapter_1.createQoderLogAdapter)()];
|
|
42
|
+
for (const adapter of adapters) {
|
|
43
|
+
registry.register(adapter);
|
|
44
|
+
}
|
|
45
|
+
app.get("/healthz", (_req, res) => {
|
|
46
|
+
res.json({ ok: true });
|
|
47
|
+
});
|
|
48
|
+
app.get("/api/runtime", (_req, res) => {
|
|
49
|
+
res.json({
|
|
50
|
+
ok: true,
|
|
51
|
+
wsPath: config.wsPath,
|
|
52
|
+
cursorHookPath: config.cursorHookPath,
|
|
53
|
+
claudeHookPath: config.claudeHookPath,
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
app.get("/api/events", (req, res) => {
|
|
57
|
+
const sinceParam = req.query.since;
|
|
58
|
+
const since = typeof sinceParam === "string" && sinceParam.trim().length > 0
|
|
59
|
+
? Number(sinceParam)
|
|
60
|
+
: 0;
|
|
61
|
+
const sinceTimestamp = Number.isFinite(since) ? since : 0;
|
|
62
|
+
const events = recentEvents
|
|
63
|
+
.filter((event) => event.timestamp > sinceTimestamp)
|
|
64
|
+
.sort((a, b) => a.timestamp - b.timestamp);
|
|
65
|
+
res.json({ ok: true, events, now: Date.now() });
|
|
66
|
+
});
|
|
67
|
+
const staticDir = node_path_1.default.resolve(process.cwd(), config.webRootPath);
|
|
68
|
+
app.use("/", express_1.default.static(staticDir, {
|
|
69
|
+
etag: false,
|
|
70
|
+
lastModified: false,
|
|
71
|
+
setHeaders: (res) => {
|
|
72
|
+
// Avoid stale mobile cache while debugging PWA/websocket behavior.
|
|
73
|
+
res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate");
|
|
74
|
+
res.setHeader("Pragma", "no-cache");
|
|
75
|
+
res.setHeader("Expires", "0");
|
|
76
|
+
},
|
|
77
|
+
}));
|
|
78
|
+
let started = false;
|
|
79
|
+
return {
|
|
80
|
+
app,
|
|
81
|
+
server,
|
|
82
|
+
start: async () => {
|
|
83
|
+
if (started) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
mobileWsNotifier.attach(server, config.wsPath);
|
|
87
|
+
await registry.startAll({
|
|
88
|
+
app,
|
|
89
|
+
config,
|
|
90
|
+
emit: (event) => {
|
|
91
|
+
recentEvents.push(event);
|
|
92
|
+
if (recentEvents.length > RECENT_EVENTS_MAX) {
|
|
93
|
+
recentEvents.splice(0, recentEvents.length - RECENT_EVENTS_MAX);
|
|
94
|
+
}
|
|
95
|
+
return router.route(event);
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
started = true;
|
|
99
|
+
},
|
|
100
|
+
stop: async () => {
|
|
101
|
+
await registry.stopAll();
|
|
102
|
+
await mobileWsNotifier.close();
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const run_gateway_1 = require("./run-gateway");
|
|
12
|
+
function printHelp() {
|
|
13
|
+
console.log(`agentwake CLI
|
|
14
|
+
|
|
15
|
+
Usage:
|
|
16
|
+
agentwake init
|
|
17
|
+
agentwake start [--host <host>] [--port <port>]
|
|
18
|
+
agentwake help
|
|
19
|
+
`);
|
|
20
|
+
}
|
|
21
|
+
function parseStartFlags(args) {
|
|
22
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
23
|
+
const arg = args[i];
|
|
24
|
+
if (arg === "--host" && args[i + 1]) {
|
|
25
|
+
process.env.AGENTWAKE_HOST = args[i + 1];
|
|
26
|
+
i += 1;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (arg === "--port" && args[i + 1]) {
|
|
30
|
+
process.env.AGENTWAKE_PORT = args[i + 1];
|
|
31
|
+
i += 1;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function ensureEnvFile() {
|
|
37
|
+
const envPath = node_path_1.default.join(process.cwd(), ".env");
|
|
38
|
+
const envExamplePath = node_path_1.default.join(process.cwd(), ".env.example");
|
|
39
|
+
if (!(0, node_fs_1.existsSync)(envPath) && (0, node_fs_1.existsSync)(envExamplePath)) {
|
|
40
|
+
(0, node_fs_1.copyFileSync)(envExamplePath, envPath);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function ensureHttpsEnv() {
|
|
44
|
+
const envPath = node_path_1.default.join(process.cwd(), ".env");
|
|
45
|
+
if (!(0, node_fs_1.existsSync)(envPath)) {
|
|
46
|
+
throw new Error(".env not found in current directory");
|
|
47
|
+
}
|
|
48
|
+
const raw = (0, node_fs_1.readFileSync)(envPath, "utf8");
|
|
49
|
+
let next = raw;
|
|
50
|
+
const upserts = [
|
|
51
|
+
[/^AGENTWAKE_HTTPS_ENABLED=.*$/m, "AGENTWAKE_HTTPS_ENABLED=1"],
|
|
52
|
+
[/^AGENTWAKE_HTTPS_CERT_PATH=.*$/m, "AGENTWAKE_HTTPS_CERT_PATH=certs/dev-cert.pem"],
|
|
53
|
+
[/^AGENTWAKE_HTTPS_KEY_PATH=.*$/m, "AGENTWAKE_HTTPS_KEY_PATH=certs/dev-key.pem"],
|
|
54
|
+
];
|
|
55
|
+
for (const [pattern, replacement] of upserts) {
|
|
56
|
+
if (pattern.test(next)) {
|
|
57
|
+
next = next.replace(pattern, replacement);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
next = `${next.trimEnd()}\n${replacement}\n`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
(0, node_fs_1.writeFileSync)(envPath, next, "utf8");
|
|
64
|
+
}
|
|
65
|
+
function ensureHooksHttps() {
|
|
66
|
+
const hooksPath = node_path_1.default.join(process.cwd(), ".cursor", "hooks.json");
|
|
67
|
+
if (!(0, node_fs_1.existsSync)(hooksPath)) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const raw = (0, node_fs_1.readFileSync)(hooksPath, "utf8");
|
|
71
|
+
const parsed = JSON.parse(raw);
|
|
72
|
+
for (const hookName of ["beforeShellExecution", "afterShellExecution"]) {
|
|
73
|
+
const entries = parsed.hooks?.[hookName];
|
|
74
|
+
if (!entries) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
for (const entry of entries) {
|
|
78
|
+
if (!entry.command) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
entry.command = entry.command.replace(/AGENTWAKE_GATEWAY_URL="\$\{AGENTWAKE_GATEWAY_URL:-https?:\/\/127\.0\.0\.1:3199\/hooks\/cursor\}"/g, 'AGENTWAKE_GATEWAY_URL="${AGENTWAKE_GATEWAY_URL:-https://127.0.0.1:3199/hooks/cursor}"');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
(0, node_fs_1.writeFileSync)(hooksPath, `${JSON.stringify(parsed, null, 2)}\n`, "utf8");
|
|
85
|
+
}
|
|
86
|
+
function ensureNodeExtraCaEnvHint() {
|
|
87
|
+
const envPath = node_path_1.default.join(process.cwd(), ".env");
|
|
88
|
+
if (!(0, node_fs_1.existsSync)(envPath)) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const raw = (0, node_fs_1.readFileSync)(envPath, "utf8");
|
|
92
|
+
if (/^NODE_EXTRA_CA_CERTS=.*$/m.test(raw)) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
let caRoot = "";
|
|
96
|
+
try {
|
|
97
|
+
caRoot = (0, node_child_process_1.execSync)("mkcert -CAROOT", { encoding: "utf8" }).trim();
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (!caRoot) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const next = `${raw.trimEnd()}\nNODE_EXTRA_CA_CERTS="${caRoot}/rootCA.pem"\n`;
|
|
106
|
+
(0, node_fs_1.writeFileSync)(envPath, next, "utf8");
|
|
107
|
+
}
|
|
108
|
+
function resolveLanIpv4() {
|
|
109
|
+
const interfaces = node_os_1.default.networkInterfaces();
|
|
110
|
+
for (const entries of Object.values(interfaces)) {
|
|
111
|
+
if (!entries) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
for (const entry of entries) {
|
|
115
|
+
if (entry.family === "IPv4" && !entry.internal) {
|
|
116
|
+
return entry.address;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
function run(command) {
|
|
123
|
+
(0, node_child_process_1.execSync)(command, { stdio: "inherit" });
|
|
124
|
+
}
|
|
125
|
+
function setupMkcert() {
|
|
126
|
+
const certDir = node_path_1.default.join(process.cwd(), "certs");
|
|
127
|
+
if (!(0, node_fs_1.existsSync)(certDir)) {
|
|
128
|
+
(0, node_child_process_1.execSync)(`mkdir -p "${certDir}"`);
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
run("mkcert -help > /dev/null");
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
throw new Error("mkcert not found. Install with `brew install mkcert` first.");
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
run("mkcert -install");
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
console.warn("[agentwake] mkcert -install failed, continue generating cert.");
|
|
141
|
+
}
|
|
142
|
+
const lanIp = resolveLanIpv4();
|
|
143
|
+
const san = ["localhost", "127.0.0.1", "::1"];
|
|
144
|
+
if (lanIp) {
|
|
145
|
+
san.push(lanIp);
|
|
146
|
+
}
|
|
147
|
+
run(`mkcert -cert-file certs/dev-cert.pem -key-file certs/dev-key.pem ${san.join(" ")}`);
|
|
148
|
+
try {
|
|
149
|
+
const caRoot = (0, node_child_process_1.execSync)("mkcert -CAROOT", { encoding: "utf8" }).trim();
|
|
150
|
+
console.log(`[agentwake] export this for Node.js trust:`);
|
|
151
|
+
console.log(`export NODE_EXTRA_CA_CERTS="${caRoot}/rootCA.pem"`);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// ignore
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function initProject() {
|
|
158
|
+
ensureEnvFile();
|
|
159
|
+
ensureHttpsEnv();
|
|
160
|
+
ensureHooksHttps();
|
|
161
|
+
setupMkcert();
|
|
162
|
+
ensureNodeExtraCaEnvHint();
|
|
163
|
+
console.log("[agentwake] init completed with HTTPS defaults.");
|
|
164
|
+
}
|
|
165
|
+
async function main() {
|
|
166
|
+
const [cmd = "start", ...rest] = process.argv.slice(2);
|
|
167
|
+
if (cmd === "help" || cmd === "--help" || cmd === "-h") {
|
|
168
|
+
printHelp();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (cmd === "init") {
|
|
172
|
+
initProject();
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (cmd === "start") {
|
|
176
|
+
parseStartFlags(rest);
|
|
177
|
+
process.env.AGENTWAKE_HTTPS_ENABLED = "1";
|
|
178
|
+
await (0, run_gateway_1.runGateway)();
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
throw new Error(`Unknown command: ${cmd}`);
|
|
182
|
+
}
|
|
183
|
+
void main().catch((error) => {
|
|
184
|
+
console.error(`[agentwake] ${String(error.message || error)}`);
|
|
185
|
+
process.exit(1);
|
|
186
|
+
});
|
|
187
|
+
//# sourceMappingURL=cli.js.map
|