247-cli 2.21.0 → 2.23.2
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/agent/dist/config.d.ts +4 -7
- package/agent/dist/config.d.ts.map +1 -1
- package/agent/dist/config.js +1 -2
- package/agent/dist/config.js.map +1 -1
- package/agent/dist/db/index.d.ts +0 -6
- package/agent/dist/db/index.d.ts.map +1 -1
- package/agent/dist/db/index.js +142 -88
- package/agent/dist/db/index.js.map +1 -1
- package/agent/dist/db/schema.d.ts +3 -32
- package/agent/dist/db/schema.d.ts.map +1 -1
- package/agent/dist/db/schema.js +1 -38
- package/agent/dist/db/schema.js.map +1 -1
- package/agent/dist/db/sessions.d.ts +0 -20
- package/agent/dist/db/sessions.d.ts.map +1 -1
- package/agent/dist/db/sessions.js +0 -86
- package/agent/dist/db/sessions.js.map +1 -1
- package/agent/dist/index.js +1 -0
- package/agent/dist/index.js.map +1 -1
- package/agent/dist/logger.d.ts +0 -2
- package/agent/dist/logger.d.ts.map +1 -1
- package/agent/dist/logger.js +0 -4
- package/agent/dist/logger.js.map +1 -1
- package/agent/dist/routes/attention.d.ts +10 -0
- package/agent/dist/routes/attention.d.ts.map +1 -0
- package/agent/dist/routes/attention.js +123 -0
- package/agent/dist/routes/attention.js.map +1 -0
- package/agent/dist/routes/index.d.ts +3 -7
- package/agent/dist/routes/index.d.ts.map +1 -1
- package/agent/dist/routes/index.js +3 -7
- package/agent/dist/routes/index.js.map +1 -1
- package/agent/dist/routes/pair.d.ts +26 -0
- package/agent/dist/routes/pair.d.ts.map +1 -0
- package/agent/dist/routes/pair.js +381 -0
- package/agent/dist/routes/pair.js.map +1 -0
- package/agent/dist/routes/projects.d.ts +2 -1
- package/agent/dist/routes/projects.d.ts.map +1 -1
- package/agent/dist/routes/projects.js +7 -39
- package/agent/dist/routes/projects.js.map +1 -1
- package/agent/dist/routes/sessions.d.ts.map +1 -1
- package/agent/dist/routes/sessions.js +38 -97
- package/agent/dist/routes/sessions.js.map +1 -1
- package/agent/dist/server.d.ts.map +1 -1
- package/agent/dist/server.js +11 -81
- package/agent/dist/server.js.map +1 -1
- package/agent/dist/setup-hooks.d.ts +10 -0
- package/agent/dist/setup-hooks.d.ts.map +1 -0
- package/agent/dist/setup-hooks.js +157 -0
- package/agent/dist/setup-hooks.js.map +1 -0
- package/agent/dist/status.d.ts.map +1 -1
- package/agent/dist/status.js +0 -8
- package/agent/dist/status.js.map +1 -1
- package/agent/dist/websocket-handlers.d.ts.map +1 -1
- package/agent/dist/websocket-handlers.js +2 -139
- package/agent/dist/websocket-handlers.js.map +1 -1
- package/agent/node_modules/247-shared/dist/types/index.d.ts +0 -54
- package/agent/node_modules/247-shared/dist/types/index.d.ts.map +1 -1
- package/agent/node_modules/247-shared/dist/types/index.js +0 -16
- package/agent/node_modules/247-shared/dist/types/index.js.map +1 -1
- package/agent/node_modules/247-shared/package.json +1 -1
- package/dist/index.js +1 -1
- package/package.json +3 -3
- package/agent/dist/db/environments.d.ts +0 -60
- package/agent/dist/db/environments.d.ts.map +0 -1
- package/agent/dist/db/environments.js +0 -235
- package/agent/dist/db/environments.js.map +0 -1
- package/agent/dist/db/push-subscriptions.d.ts +0 -44
- package/agent/dist/db/push-subscriptions.d.ts.map +0 -1
- package/agent/dist/db/push-subscriptions.js +0 -98
- package/agent/dist/db/push-subscriptions.js.map +0 -1
- package/agent/dist/editor.d.ts +0 -18
- package/agent/dist/editor.d.ts.map +0 -1
- package/agent/dist/editor.js +0 -222
- package/agent/dist/editor.js.map +0 -1
- package/agent/dist/environments.d.ts +0 -59
- package/agent/dist/environments.d.ts.map +0 -1
- package/agent/dist/environments.js +0 -229
- package/agent/dist/environments.js.map +0 -1
- package/agent/dist/git.d.ts +0 -39
- package/agent/dist/git.d.ts.map +0 -1
- package/agent/dist/git.js +0 -436
- package/agent/dist/git.js.map +0 -1
- package/agent/dist/heartbeat-monitor.d.ts +0 -24
- package/agent/dist/heartbeat-monitor.d.ts.map +0 -1
- package/agent/dist/heartbeat-monitor.js +0 -105
- package/agent/dist/heartbeat-monitor.js.map +0 -1
- package/agent/dist/push/sender.d.ts +0 -26
- package/agent/dist/push/sender.d.ts.map +0 -1
- package/agent/dist/push/sender.js +0 -122
- package/agent/dist/push/sender.js.map +0 -1
- package/agent/dist/push/vapid.d.ts +0 -25
- package/agent/dist/push/vapid.d.ts.map +0 -1
- package/agent/dist/push/vapid.js +0 -81
- package/agent/dist/push/vapid.js.map +0 -1
- package/agent/dist/routes/editor.d.ts +0 -9
- package/agent/dist/routes/editor.d.ts.map +0 -1
- package/agent/dist/routes/editor.js +0 -63
- package/agent/dist/routes/editor.js.map +0 -1
- package/agent/dist/routes/environments.d.ts +0 -6
- package/agent/dist/routes/environments.d.ts.map +0 -1
- package/agent/dist/routes/environments.js +0 -94
- package/agent/dist/routes/environments.js.map +0 -1
- package/agent/dist/routes/files.d.ts +0 -6
- package/agent/dist/routes/files.d.ts.map +0 -1
- package/agent/dist/routes/files.js +0 -84
- package/agent/dist/routes/files.js.map +0 -1
- package/agent/dist/routes/heartbeat.d.ts +0 -10
- package/agent/dist/routes/heartbeat.d.ts.map +0 -1
- package/agent/dist/routes/heartbeat.js +0 -124
- package/agent/dist/routes/heartbeat.js.map +0 -1
- package/agent/dist/routes/notification.d.ts +0 -9
- package/agent/dist/routes/notification.d.ts.map +0 -1
- package/agent/dist/routes/notification.js +0 -172
- package/agent/dist/routes/notification.js.map +0 -1
- package/agent/dist/routes/push.d.ts +0 -7
- package/agent/dist/routes/push.d.ts.map +0 -1
- package/agent/dist/routes/push.js +0 -98
- package/agent/dist/routes/push.js.map +0 -1
- package/agent/dist/routes/stop.d.ts +0 -9
- package/agent/dist/routes/stop.d.ts.map +0 -1
- package/agent/dist/routes/stop.js +0 -121
- package/agent/dist/routes/stop.js.map +0 -1
- package/agent/dist/setup-statusline.d.ts +0 -10
- package/agent/dist/setup-statusline.d.ts.map +0 -1
- package/agent/dist/setup-statusline.js +0 -234
- package/agent/dist/setup-statusline.js.map +0 -1
|
@@ -50,7 +50,6 @@ export function upsertSession(name, input) {
|
|
|
50
50
|
name, project, status, attention_reason, last_event,
|
|
51
51
|
last_activity, last_status_change, environment_id, created_at, updated_at,
|
|
52
52
|
model, cost_usd, context_usage, lines_added, lines_removed,
|
|
53
|
-
ralph_enabled, ralph_config, ralph_iteration, ralph_status,
|
|
54
53
|
worktree_path, branch_name,
|
|
55
54
|
spawn_prompt, parent_session, task_id, exit_code, exited_at,
|
|
56
55
|
output_content, output_captured_at
|
|
@@ -59,7 +58,6 @@ export function upsertSession(name, input) {
|
|
|
59
58
|
@name, @project, @status, @attentionReason, @lastEvent,
|
|
60
59
|
@lastActivity, @lastStatusChange, @environmentId, @createdAt, @updatedAt,
|
|
61
60
|
@model, @costUsd, @contextUsage, @linesAdded, @linesRemoved,
|
|
62
|
-
@ralphEnabled, @ralphConfig, @ralphIteration, @ralphStatus,
|
|
63
61
|
@worktreePath, @branchName,
|
|
64
62
|
@spawnPrompt, @parentSession, @taskId, @exitCode, @exitedAt,
|
|
65
63
|
@outputContent, @outputCapturedAt
|
|
@@ -77,10 +75,6 @@ export function upsertSession(name, input) {
|
|
|
77
75
|
context_usage = COALESCE(@contextUsage, context_usage),
|
|
78
76
|
lines_added = COALESCE(@linesAdded, lines_added),
|
|
79
77
|
lines_removed = COALESCE(@linesRemoved, lines_removed),
|
|
80
|
-
ralph_enabled = COALESCE(@ralphEnabled, ralph_enabled),
|
|
81
|
-
ralph_config = COALESCE(@ralphConfig, ralph_config),
|
|
82
|
-
ralph_iteration = COALESCE(@ralphIteration, ralph_iteration),
|
|
83
|
-
ralph_status = COALESCE(@ralphStatus, ralph_status),
|
|
84
78
|
worktree_path = COALESCE(@worktreePath, worktree_path),
|
|
85
79
|
branch_name = COALESCE(@branchName, branch_name),
|
|
86
80
|
spawn_prompt = COALESCE(@spawnPrompt, spawn_prompt),
|
|
@@ -107,10 +101,6 @@ export function upsertSession(name, input) {
|
|
|
107
101
|
contextUsage: input.contextUsage ?? null,
|
|
108
102
|
linesAdded: input.linesAdded ?? null,
|
|
109
103
|
linesRemoved: input.linesRemoved ?? null,
|
|
110
|
-
ralphEnabled: input.ralphEnabled !== undefined ? (input.ralphEnabled ? 1 : 0) : null,
|
|
111
|
-
ralphConfig: input.ralphConfig ? JSON.stringify(input.ralphConfig) : null,
|
|
112
|
-
ralphIteration: input.ralphIteration ?? null,
|
|
113
|
-
ralphStatus: input.ralphStatus ?? null,
|
|
114
104
|
worktreePath: input.worktreePath ?? null,
|
|
115
105
|
branchName: input.branchName ?? null,
|
|
116
106
|
spawnPrompt: input.spawn_prompt ?? null,
|
|
@@ -273,82 +263,6 @@ export function clearSessionEnvironmentId(sessionName) {
|
|
|
273
263
|
const db = getDatabase();
|
|
274
264
|
db.prepare('DELETE FROM session_environments WHERE session_name = ?').run(sessionName);
|
|
275
265
|
}
|
|
276
|
-
// ============================================================================
|
|
277
|
-
// Ralph Mode Functions (Legacy - kept for backwards compatibility)
|
|
278
|
-
// ============================================================================
|
|
279
|
-
/**
|
|
280
|
-
* Enable Ralph mode for a session (legacy)
|
|
281
|
-
*/
|
|
282
|
-
export function enableRalph(name, config) {
|
|
283
|
-
const db = getDatabase();
|
|
284
|
-
const result = db
|
|
285
|
-
.prepare(`
|
|
286
|
-
UPDATE sessions SET
|
|
287
|
-
ralph_enabled = 1,
|
|
288
|
-
ralph_config = ?,
|
|
289
|
-
ralph_iteration = 0,
|
|
290
|
-
ralph_status = 'running',
|
|
291
|
-
updated_at = ?
|
|
292
|
-
WHERE name = ?
|
|
293
|
-
`)
|
|
294
|
-
.run(JSON.stringify(config), Date.now(), name);
|
|
295
|
-
return result.changes > 0;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Disable Ralph mode for a session (legacy)
|
|
299
|
-
*/
|
|
300
|
-
export function disableRalph(name) {
|
|
301
|
-
const db = getDatabase();
|
|
302
|
-
const result = db
|
|
303
|
-
.prepare(`
|
|
304
|
-
UPDATE sessions SET
|
|
305
|
-
ralph_enabled = 0,
|
|
306
|
-
ralph_status = NULL,
|
|
307
|
-
updated_at = ?
|
|
308
|
-
WHERE name = ?
|
|
309
|
-
`)
|
|
310
|
-
.run(Date.now(), name);
|
|
311
|
-
return result.changes > 0;
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Update Ralph status for a session (legacy)
|
|
315
|
-
*/
|
|
316
|
-
export function updateRalphStatus(name, status) {
|
|
317
|
-
const db = getDatabase();
|
|
318
|
-
const result = db
|
|
319
|
-
.prepare(`
|
|
320
|
-
UPDATE sessions SET
|
|
321
|
-
ralph_status = ?,
|
|
322
|
-
updated_at = ?
|
|
323
|
-
WHERE name = ?
|
|
324
|
-
`)
|
|
325
|
-
.run(status, Date.now(), name);
|
|
326
|
-
return result.changes > 0;
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Increment Ralph iteration counter (legacy)
|
|
330
|
-
*/
|
|
331
|
-
export function incrementRalphIteration(name) {
|
|
332
|
-
const db = getDatabase();
|
|
333
|
-
db.prepare(`
|
|
334
|
-
UPDATE sessions SET
|
|
335
|
-
ralph_iteration = ralph_iteration + 1,
|
|
336
|
-
updated_at = ?
|
|
337
|
-
WHERE name = ?
|
|
338
|
-
`).run(Date.now(), name);
|
|
339
|
-
// Return new iteration count
|
|
340
|
-
const session = getSession(name);
|
|
341
|
-
return session?.ralph_iteration ?? 0;
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Get Ralph-enabled sessions (legacy)
|
|
345
|
-
*/
|
|
346
|
-
export function getRalphEnabledSessions() {
|
|
347
|
-
const db = getDatabase();
|
|
348
|
-
return db
|
|
349
|
-
.prepare('SELECT * FROM sessions WHERE ralph_enabled = 1 AND archived_at IS NULL')
|
|
350
|
-
.all();
|
|
351
|
-
}
|
|
352
266
|
/**
|
|
353
267
|
* Convert DbSession to HookStatus format (for compatibility with existing code)
|
|
354
268
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/db/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAIlD;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,GAAG,CAAC,IAAI,CAE3D,CAAC;IACd,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,OAAO,EAAE;SACN,OAAO,CAAC,8EAA8E,CAAC;SACvF,GAAG,EAAiB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,OAAO,EAAE;SACN,OAAO,CAAC,gFAAgF,CAAC;SACzF,GAAG,EAAiB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,OAAO,EAAE;SACN,OAAO,CAAC,sEAAsE,CAAC;SAC/E,GAAG,CAAC,OAAO,CAAgB,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAyB;IACnE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,qDAAqD;IACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;IAEpE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/db/sessions.ts"],"names":[],"mappings":"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"}
|
package/agent/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ async function main() {
|
|
|
8
8
|
server.listen(PORT, () => {
|
|
9
9
|
logger.main.info({ port: PORT }, 'Agent running');
|
|
10
10
|
logger.main.info({ url: `ws://localhost:${PORT}` }, 'Dashboard connection URL');
|
|
11
|
+
logger.main.info({ url: `http://localhost:${PORT}/pair` }, 'Pair with dashboard at');
|
|
11
12
|
logger.main.info('For remote access, use Tailscale Funnel, Cloudflare Tunnel, or SSH tunnel');
|
|
12
13
|
});
|
|
13
14
|
}
|
package/agent/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC;AAExC,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IAEpC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,kBAAkB,IAAI,EAAE,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAChF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC;AAExC,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IAEpC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,kBAAkB,IAAI,EAAE,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAChF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,oBAAoB,IAAI,OAAO,EAAE,EAAE,wBAAwB,CAAC,CAAC;QACrF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/agent/dist/logger.d.ts
CHANGED
|
@@ -5,8 +5,6 @@ export declare const logger: {
|
|
|
5
5
|
db: pino.Logger<never, boolean>;
|
|
6
6
|
session: pino.Logger<never, boolean>;
|
|
7
7
|
terminal: pino.Logger<never, boolean>;
|
|
8
|
-
editor: pino.Logger<never, boolean>;
|
|
9
|
-
git: pino.Logger<never, boolean>;
|
|
10
8
|
env: pino.Logger<never, boolean>;
|
|
11
9
|
connections: pino.Logger<never, boolean>;
|
|
12
10
|
hooks: pino.Logger<never, boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAwBxB,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAwBxB,eAAO,MAAM,MAAM;;;;;;;;;CAwBlB,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/agent/dist/logger.js
CHANGED
|
@@ -29,10 +29,6 @@ export const logger = {
|
|
|
29
29
|
session: baseLogger.child({ module: 'Session' }),
|
|
30
30
|
// Terminal/PTY related logs
|
|
31
31
|
terminal: baseLogger.child({ module: 'Terminal' }),
|
|
32
|
-
// Editor (code-server) related logs
|
|
33
|
-
editor: baseLogger.child({ module: 'Editor' }),
|
|
34
|
-
// Git operations logs
|
|
35
|
-
git: baseLogger.child({ module: 'Git' }),
|
|
36
32
|
// Environment management logs
|
|
37
33
|
env: baseLogger.child({ module: 'Environments' }),
|
|
38
34
|
// Connection management logs
|
package/agent/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,sDAAsD;AACtD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;AAE9C,2DAA2D;AAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAEpD,qBAAqB;AACrB,MAAM,UAAU,GAAG,IAAI,CAAC;IACtB,KAAK;IACL,GAAG,CAAC,KAAK,IAAI;QACX,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,UAAU;gBACzB,MAAM,EAAE,cAAc;aACvB;SACF;KACF,CAAC;CACH,CAAC,CAAC;AAEH,uCAAuC;AACvC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,mCAAmC;IACnC,IAAI,EAAE,UAAU;IAEhB,0BAA0B;IAC1B,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAE9C,wBAAwB;IACxB,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAEtC,0BAA0B;IAC1B,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAEhD,4BAA4B;IAC5B,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAElD,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,sDAAsD;AACtD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;AAE9C,2DAA2D;AAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAEpD,qBAAqB;AACrB,MAAM,UAAU,GAAG,IAAI,CAAC;IACtB,KAAK;IACL,GAAG,CAAC,KAAK,IAAI;QACX,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,UAAU;gBACzB,MAAM,EAAE,cAAc;aACvB;SACF;KACF,CAAC;CACH,CAAC,CAAC;AAEH,uCAAuC;AACvC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,mCAAmC;IACnC,IAAI,EAAE,UAAU;IAEhB,0BAA0B;IAC1B,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAE9C,wBAAwB;IACxB,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAEtC,0BAA0B;IAC1B,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAEhD,4BAA4B;IAC5B,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAElD,8BAA8B;IAC9B,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAEjD,6BAA6B;IAC7B,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAExD,mBAAmB;IACnB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;CAC7C,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attention API route: receives attention notifications from Claude Code hooks.
|
|
3
|
+
* Simplified replacement for the notification/heartbeat system.
|
|
4
|
+
* Forwards attention events to Next.js dashboard webhook.
|
|
5
|
+
*/
|
|
6
|
+
import { type Router as RouterType } from 'express';
|
|
7
|
+
declare const router: RouterType;
|
|
8
|
+
export declare function createAttentionRoutes(): RouterType;
|
|
9
|
+
export default router;
|
|
10
|
+
//# sourceMappingURL=attention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention.d.ts","sourceRoot":"","sources":["../../src/routes/attention.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAU,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AAO5D,QAAA,MAAM,MAAM,EAAE,UAAqB,CAAC;AAoJpC,wBAAgB,qBAAqB,IAAI,UAAU,CAElD;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attention API route: receives attention notifications from Claude Code hooks.
|
|
3
|
+
* Simplified replacement for the notification/heartbeat system.
|
|
4
|
+
* Forwards attention events to Next.js dashboard webhook.
|
|
5
|
+
*/
|
|
6
|
+
import { Router } from 'express';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import { execSync } from 'child_process';
|
|
9
|
+
import * as sessionsDb from '../db/sessions.js';
|
|
10
|
+
import { config } from '../config.js';
|
|
11
|
+
const router = Router();
|
|
12
|
+
// Dashboard webhook configuration
|
|
13
|
+
const DASHBOARD_WEBHOOK_URL = process.env.DASHBOARD_WEBHOOK_URL;
|
|
14
|
+
const DASHBOARD_API_KEY = process.env.DASHBOARD_API_KEY;
|
|
15
|
+
/**
|
|
16
|
+
* Check if a tmux session exists.
|
|
17
|
+
*/
|
|
18
|
+
function tmuxSessionExists(sessionName) {
|
|
19
|
+
try {
|
|
20
|
+
execSync(`tmux has-session -t "${sessionName}" 2>/dev/null`);
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Determine attention reason from payload.
|
|
29
|
+
*/
|
|
30
|
+
function getAttentionReason(payload) {
|
|
31
|
+
if (payload.permission_mode === 'plan') {
|
|
32
|
+
return 'plan_approval';
|
|
33
|
+
}
|
|
34
|
+
switch (payload.notification_type) {
|
|
35
|
+
case 'permission_prompt':
|
|
36
|
+
return 'permission';
|
|
37
|
+
case 'idle_prompt':
|
|
38
|
+
return 'input';
|
|
39
|
+
case 'elicitation_dialog':
|
|
40
|
+
return 'permission';
|
|
41
|
+
case 'auth_success':
|
|
42
|
+
return 'input';
|
|
43
|
+
default:
|
|
44
|
+
if (payload.tool_name) {
|
|
45
|
+
return 'permission';
|
|
46
|
+
}
|
|
47
|
+
return 'input';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Forward attention event to dashboard webhook
|
|
52
|
+
*/
|
|
53
|
+
async function forwardToWebhook(sessionName, project, reason) {
|
|
54
|
+
if (!DASHBOARD_WEBHOOK_URL || !DASHBOARD_API_KEY) {
|
|
55
|
+
console.log('[Attention] Dashboard webhook not configured, skipping forward');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const response = await fetch(DASHBOARD_WEBHOOK_URL, {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
headers: {
|
|
62
|
+
'Content-Type': 'application/json',
|
|
63
|
+
'X-API-Key': DASHBOARD_API_KEY,
|
|
64
|
+
},
|
|
65
|
+
body: JSON.stringify({
|
|
66
|
+
sessionName,
|
|
67
|
+
project,
|
|
68
|
+
reason,
|
|
69
|
+
machineId: config.machine.id,
|
|
70
|
+
machineName: config.machine.name,
|
|
71
|
+
}),
|
|
72
|
+
});
|
|
73
|
+
if (!response.ok) {
|
|
74
|
+
console.error(`[Attention] Webhook failed: ${response.status} ${response.statusText}`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(`[Attention] Forwarded to webhook: ${sessionName} (${reason})`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error('[Attention] Failed to forward to webhook:', error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Receive attention notification from Claude Code hook.
|
|
86
|
+
* Persists to database and forwards to dashboard webhook.
|
|
87
|
+
*/
|
|
88
|
+
router.post('/', async (req, res) => {
|
|
89
|
+
const payload = req.body;
|
|
90
|
+
const { tmux_session } = payload;
|
|
91
|
+
if (!tmux_session) {
|
|
92
|
+
return res.status(400).json({ error: 'Missing tmux_session' });
|
|
93
|
+
}
|
|
94
|
+
// Validate that the tmux session actually exists
|
|
95
|
+
if (!tmuxSessionExists(tmux_session)) {
|
|
96
|
+
return res.status(404).json({ error: 'Session not found' });
|
|
97
|
+
}
|
|
98
|
+
const now = Date.now();
|
|
99
|
+
// Extract project from cwd or session name
|
|
100
|
+
const project = payload.cwd
|
|
101
|
+
? path.basename(payload.cwd)
|
|
102
|
+
: tmux_session.split('--')[0] || 'unknown';
|
|
103
|
+
const attentionReason = getAttentionReason(payload);
|
|
104
|
+
// Persist to database
|
|
105
|
+
sessionsDb.upsertSession(tmux_session, {
|
|
106
|
+
project,
|
|
107
|
+
status: 'needs_attention',
|
|
108
|
+
attentionReason,
|
|
109
|
+
lastActivity: now,
|
|
110
|
+
lastStatusChange: now,
|
|
111
|
+
});
|
|
112
|
+
console.log(`[Attention] ${tmux_session}: needs_attention (${attentionReason})`);
|
|
113
|
+
// Forward to dashboard webhook (async, don't wait)
|
|
114
|
+
forwardToWebhook(tmux_session, project, attentionReason).catch(() => {
|
|
115
|
+
// Error already logged in forwardToWebhook
|
|
116
|
+
});
|
|
117
|
+
res.json({ ok: true });
|
|
118
|
+
});
|
|
119
|
+
export function createAttentionRoutes() {
|
|
120
|
+
return router;
|
|
121
|
+
}
|
|
122
|
+
export default router;
|
|
123
|
+
//# sourceMappingURL=attention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention.js","sourceRoot":"","sources":["../../src/routes/attention.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAA6B,MAAM,SAAS,CAAC;AAC5D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,MAAM,MAAM,GAAe,MAAM,EAAE,CAAC;AAEpC,kCAAkC;AAClC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAChE,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAExD;;GAEG;AACH,SAAS,iBAAiB,CAAC,WAAmB;IAC5C,IAAI,CAAC;QACH,QAAQ,CAAC,wBAAwB,WAAW,eAAe,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAuBD;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAyB;IACnD,IAAI,OAAO,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;QACvC,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,QAAQ,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAClC,KAAK,mBAAmB;YACtB,OAAO,YAAY,CAAC;QACtB,KAAK,aAAa;YAChB,OAAO,OAAO,CAAC;QACjB,KAAK,oBAAoB;YACvB,OAAO,YAAY,CAAC;QACtB,KAAK,cAAc;YACjB,OAAO,OAAO,CAAC;QACjB;YACE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,OAAO,YAAY,CAAC;YACtB,CAAC;YACD,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC7B,WAAmB,EACnB,OAAe,EACf,MAAuB;IAEvB,IAAI,CAAC,qBAAqB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,qBAAqB,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,iBAAiB;aAC/B;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,WAAW;gBACX,OAAO;gBACP,MAAM;gBACN,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;gBAC5B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;aACjC,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,WAAW,KAAK,MAAM,GAAG,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAClC,MAAM,OAAO,GAAqB,GAAG,CAAC,IAAI,CAAC;IAC3C,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEjC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,2CAA2C;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG;QACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;QAC5B,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IAE7C,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEpD,sBAAsB;IACtB,UAAU,CAAC,aAAa,CAAC,YAAY,EAAE;QACrC,OAAO;QACP,MAAM,EAAE,iBAAiB;QACzB,eAAe;QACf,YAAY,EAAE,GAAG;QACjB,gBAAgB,EAAE,GAAG;KACtB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,eAAe,YAAY,sBAAsB,eAAe,GAAG,CAAC,CAAC;IAEjF,mDAAmD;IACnD,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QAClE,2CAA2C;IAC7C,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Route aggregation - exports all route creators.
|
|
3
3
|
*/
|
|
4
|
-
export { createProjectRoutes } from './projects.js';
|
|
5
|
-
export { createEnvironmentRoutes } from './environments.js';
|
|
4
|
+
export { createProjectRoutes, isProjectAllowed } from './projects.js';
|
|
6
5
|
export { createSessionRoutes } from './sessions.js';
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export { createStopRoutes } from './stop.js';
|
|
10
|
-
export { createEditorRoutes, isProjectAllowed, updateEditorActivity, getOrStartEditor, } from './editor.js';
|
|
11
|
-
export { createFilesRoutes } from './files.js';
|
|
6
|
+
export { createAttentionRoutes } from './attention.js';
|
|
7
|
+
export { createPairRoutes, verifyToken } from './pair.js';
|
|
12
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Route aggregation - exports all route creators.
|
|
3
3
|
*/
|
|
4
|
-
export { createProjectRoutes } from './projects.js';
|
|
5
|
-
export { createEnvironmentRoutes } from './environments.js';
|
|
4
|
+
export { createProjectRoutes, isProjectAllowed } from './projects.js';
|
|
6
5
|
export { createSessionRoutes } from './sessions.js';
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export { createStopRoutes } from './stop.js';
|
|
10
|
-
export { createEditorRoutes, isProjectAllowed, updateEditorActivity, getOrStartEditor, } from './editor.js';
|
|
11
|
-
export { createFilesRoutes } from './files.js';
|
|
6
|
+
export { createAttentionRoutes } from './attention.js';
|
|
7
|
+
export { createPairRoutes, verifyToken } from './pair.js';
|
|
12
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pairing routes: Allow users to pair their agent with the dashboard.
|
|
3
|
+
* Provides a web page with pairing link, QR code, and 6-digit fallback code.
|
|
4
|
+
*/
|
|
5
|
+
import { Router } from 'express';
|
|
6
|
+
interface PairingCode {
|
|
7
|
+
code: string;
|
|
8
|
+
machineId: string;
|
|
9
|
+
machineName: string;
|
|
10
|
+
agentUrl: string;
|
|
11
|
+
createdAt: number;
|
|
12
|
+
expiresAt: number;
|
|
13
|
+
}
|
|
14
|
+
declare const pairingCodes: Map<string, PairingCode>;
|
|
15
|
+
declare function generateCode(): string;
|
|
16
|
+
declare function createToken(payload: object, secret: string, expiresInMs: number): string;
|
|
17
|
+
export declare function verifyToken(token: string, secret: string): {
|
|
18
|
+
valid: boolean;
|
|
19
|
+
payload?: Record<string, unknown>;
|
|
20
|
+
error?: string;
|
|
21
|
+
};
|
|
22
|
+
declare function getAgentUrl(): string;
|
|
23
|
+
declare function getDashboardUrl(): string;
|
|
24
|
+
export declare function createPairRoutes(): Router;
|
|
25
|
+
export { pairingCodes, generateCode, createToken, getAgentUrl, getDashboardUrl };
|
|
26
|
+
//# sourceMappingURL=pair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/routes/pair.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKjC,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,QAAA,MAAM,YAAY,0BAAiC,CAAC;AAapD,iBAAS,YAAY,IAAI,MAAM,CAO9B;AAGD,iBAAS,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAMjF;AAGD,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAsBvE;AAGD,iBAAS,WAAW,IAAI,MAAM,CAM7B;AAGD,iBAAS,eAAe,IAAI,MAAM,CAOjC;AAWD,wBAAgB,gBAAgB,IAAI,MAAM,CA0UzC;AAGD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
|