247-cli 1.0.4 → 1.1.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/agent/dist/heartbeat-monitor.d.ts +4 -3
- package/agent/dist/heartbeat-monitor.d.ts.map +1 -1
- package/agent/dist/heartbeat-monitor.js +9 -10
- package/agent/dist/heartbeat-monitor.js.map +1 -1
- package/agent/dist/routes/index.d.ts +1 -0
- package/agent/dist/routes/index.d.ts.map +1 -1
- package/agent/dist/routes/index.js +1 -0
- package/agent/dist/routes/index.js.map +1 -1
- package/agent/dist/routes/notification.d.ts +9 -0
- package/agent/dist/routes/notification.d.ts.map +1 -0
- package/agent/dist/routes/notification.js +128 -0
- package/agent/dist/routes/notification.js.map +1 -0
- package/agent/dist/server.d.ts.map +1 -1
- package/agent/dist/server.js +2 -1
- package/agent/dist/server.js.map +1 -1
- package/agent/dist/setup-statusline.d.ts +1 -1
- package/agent/dist/setup-statusline.d.ts.map +1 -1
- package/agent/dist/setup-statusline.js +78 -20
- package/agent/dist/setup-statusline.js.map +1 -1
- package/agent/node_modules/247-shared/package.json +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Logic:
|
|
6
6
|
* - Heartbeat received → status "working"
|
|
7
|
-
* -
|
|
7
|
+
* - Notification hook received → status "needs_attention" (permission request, etc.)
|
|
8
|
+
* - No heartbeat for 3s (and no notification) → status "idle" (Claude stopped)
|
|
8
9
|
* - tmux session removed → cleanup (handled by cleanupStatusMaps)
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
11
|
+
* The Notification hook handles "needs_attention" cases. This monitor only handles
|
|
12
|
+
* the transition to "idle" when Claude has truly stopped working.
|
|
12
13
|
*/
|
|
13
14
|
/**
|
|
14
15
|
* Start the heartbeat timeout monitor.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat-monitor.d.ts","sourceRoot":"","sources":["../src/heartbeat-monitor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"heartbeat-monitor.d.ts","sourceRoot":"","sources":["../src/heartbeat-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAgBH;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CA6E5C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAM3C"}
|
|
@@ -4,18 +4,19 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Logic:
|
|
6
6
|
* - Heartbeat received → status "working"
|
|
7
|
-
* -
|
|
7
|
+
* - Notification hook received → status "needs_attention" (permission request, etc.)
|
|
8
|
+
* - No heartbeat for 3s (and no notification) → status "idle" (Claude stopped)
|
|
8
9
|
* - tmux session removed → cleanup (handled by cleanupStatusMaps)
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
11
|
+
* The Notification hook handles "needs_attention" cases. This monitor only handles
|
|
12
|
+
* the transition to "idle" when Claude has truly stopped working.
|
|
12
13
|
*/
|
|
13
14
|
import { lastHeartbeat } from './routes/heartbeat.js';
|
|
14
15
|
import { tmuxSessionStatus, broadcastStatusUpdate } from './status.js';
|
|
15
16
|
import * as sessionsDb from './db/sessions.js';
|
|
16
17
|
import { getEnvironmentMetadata, getSessionEnvironment } from './db/environments.js';
|
|
17
18
|
// Timeout threshold: if no heartbeat for 3 seconds, Claude has stopped working
|
|
18
|
-
//
|
|
19
|
+
// Note: "needs_attention" is now handled by the Notification hook, not timeout
|
|
19
20
|
const HEARTBEAT_TIMEOUT_MS = 3000;
|
|
20
21
|
// Check interval: how often we check for timeouts
|
|
21
22
|
const CHECK_INTERVAL_MS = 1000;
|
|
@@ -34,12 +35,10 @@ export function startHeartbeatMonitor() {
|
|
|
34
35
|
for (const [sessionName, lastBeat] of lastHeartbeat) {
|
|
35
36
|
const timeSinceLastBeat = now - lastBeat;
|
|
36
37
|
const status = tmuxSessionStatus.get(sessionName);
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
if (timeSinceLastBeat > HEARTBEAT_TIMEOUT_MS &&
|
|
41
|
-
status?.status === 'working' &&
|
|
42
|
-
!status?.hasBeenWorking) {
|
|
38
|
+
// Transition to idle if currently "working" and timeout exceeded
|
|
39
|
+
// Note: The Notification hook handles "needs_attention" cases (permission requests, etc.)
|
|
40
|
+
// This timeout only fires when Claude has truly stopped (no heartbeats AND no notification)
|
|
41
|
+
if (timeSinceLastBeat > HEARTBEAT_TIMEOUT_MS && status?.status === 'working') {
|
|
43
42
|
const newStatus = {
|
|
44
43
|
...status,
|
|
45
44
|
status: 'idle',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat-monitor.js","sourceRoot":"","sources":["../src/heartbeat-monitor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"heartbeat-monitor.js","sourceRoot":"","sources":["../src/heartbeat-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ export { createProjectRoutes } from './projects.js';
|
|
|
5
5
|
export { createEnvironmentRoutes } from './environments.js';
|
|
6
6
|
export { createSessionRoutes } from './sessions.js';
|
|
7
7
|
export { createHeartbeatRoutes } from './heartbeat.js';
|
|
8
|
+
export { createNotificationRoutes } from './notification.js';
|
|
8
9
|
export { createEditorRoutes, isProjectAllowed, updateEditorActivity, getOrStartEditor, } from './editor.js';
|
|
9
10
|
export { createFilesRoutes } from './files.js';
|
|
10
11
|
//# 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,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -5,6 +5,7 @@ export { createProjectRoutes } from './projects.js';
|
|
|
5
5
|
export { createEnvironmentRoutes } from './environments.js';
|
|
6
6
|
export { createSessionRoutes } from './sessions.js';
|
|
7
7
|
export { createHeartbeatRoutes } from './heartbeat.js';
|
|
8
|
+
export { createNotificationRoutes } from './notification.js';
|
|
8
9
|
export { createEditorRoutes, isProjectAllowed, updateEditorActivity, getOrStartEditor, } from './editor.js';
|
|
9
10
|
export { createFilesRoutes } from './files.js';
|
|
10
11
|
//# 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,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notification API route: receives hook notifications from Claude Code.
|
|
3
|
+
* Handles permission requests, input prompts, and other attention-requiring events.
|
|
4
|
+
*/
|
|
5
|
+
import { type Router as RouterType } from 'express';
|
|
6
|
+
declare const router: RouterType;
|
|
7
|
+
export declare function createNotificationRoutes(): RouterType;
|
|
8
|
+
export default router;
|
|
9
|
+
//# sourceMappingURL=notification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../src/routes/notification.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAU,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AAQ5D,QAAA,MAAM,MAAM,EAAE,UAAqB,CAAC;AAiJpC,wBAAgB,wBAAwB,IAAI,UAAU,CAErD;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notification API route: receives hook notifications from Claude Code.
|
|
3
|
+
* Handles permission requests, input prompts, and other attention-requiring events.
|
|
4
|
+
*/
|
|
5
|
+
import { Router } from 'express';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { tmuxSessionStatus, broadcastStatusUpdate } from '../status.js';
|
|
9
|
+
import * as sessionsDb from '../db/sessions.js';
|
|
10
|
+
import { getEnvironmentMetadata, getSessionEnvironment } from '../db/environments.js';
|
|
11
|
+
const router = Router();
|
|
12
|
+
/**
|
|
13
|
+
* Check if a tmux session exists.
|
|
14
|
+
* Prevents ghost sessions from being created by stale notifications.
|
|
15
|
+
*/
|
|
16
|
+
function tmuxSessionExists(sessionName) {
|
|
17
|
+
try {
|
|
18
|
+
execSync(`tmux has-session -t "${sessionName}" 2>/dev/null`);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Determine attention reason from notification payload
|
|
27
|
+
*/
|
|
28
|
+
function getAttentionReason(payload) {
|
|
29
|
+
// If there's a tool_name, Claude is asking for permission to use that tool
|
|
30
|
+
if (payload.tool_name) {
|
|
31
|
+
return 'permission';
|
|
32
|
+
}
|
|
33
|
+
// Default to input if we can't determine the reason
|
|
34
|
+
return 'input';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Receive notification from Claude Code hook.
|
|
38
|
+
* Updates session status to 'needs_attention'.
|
|
39
|
+
*/
|
|
40
|
+
router.post('/', (req, res) => {
|
|
41
|
+
const payload = req.body;
|
|
42
|
+
const { tmux_session } = payload;
|
|
43
|
+
if (!tmux_session) {
|
|
44
|
+
return res.status(400).json({ error: 'Missing tmux_session' });
|
|
45
|
+
}
|
|
46
|
+
// Validate that the tmux session actually exists
|
|
47
|
+
if (!tmuxSessionExists(tmux_session)) {
|
|
48
|
+
return res.status(404).json({ error: 'Session not found' });
|
|
49
|
+
}
|
|
50
|
+
const now = Date.now();
|
|
51
|
+
// Extract project from cwd or session name
|
|
52
|
+
const project = payload.cwd
|
|
53
|
+
? path.basename(payload.cwd)
|
|
54
|
+
: tmux_session.split('--')[0] || undefined;
|
|
55
|
+
const existing = tmuxSessionStatus.get(tmux_session);
|
|
56
|
+
const attentionReason = getAttentionReason(payload);
|
|
57
|
+
const statusChanged = !existing || existing.status !== 'needs_attention';
|
|
58
|
+
const hookData = {
|
|
59
|
+
status: 'needs_attention',
|
|
60
|
+
attentionReason,
|
|
61
|
+
hasBeenWorking: existing?.hasBeenWorking ?? true,
|
|
62
|
+
lastEvent: payload.tool_name ? `Permission: ${payload.tool_name}` : 'Notification',
|
|
63
|
+
lastActivity: now,
|
|
64
|
+
lastStatusChange: statusChanged ? now : existing?.lastStatusChange || now,
|
|
65
|
+
project,
|
|
66
|
+
transcriptPath: payload.transcript_path,
|
|
67
|
+
// Preserve existing metrics
|
|
68
|
+
model: existing?.model,
|
|
69
|
+
costUsd: existing?.costUsd,
|
|
70
|
+
contextUsage: existing?.contextUsage,
|
|
71
|
+
linesAdded: existing?.linesAdded,
|
|
72
|
+
linesRemoved: existing?.linesRemoved,
|
|
73
|
+
};
|
|
74
|
+
tmuxSessionStatus.set(tmux_session, hookData);
|
|
75
|
+
// Persist to database
|
|
76
|
+
const dbSession = sessionsDb.upsertSession(tmux_session, {
|
|
77
|
+
project: project || tmux_session.split('--')[0] || '',
|
|
78
|
+
status: 'needs_attention',
|
|
79
|
+
attentionReason,
|
|
80
|
+
lastEvent: hookData.lastEvent,
|
|
81
|
+
lastActivity: now,
|
|
82
|
+
lastStatusChange: statusChanged ? now : (existing?.lastStatusChange ?? now),
|
|
83
|
+
// Preserve existing metrics
|
|
84
|
+
model: existing?.model,
|
|
85
|
+
costUsd: existing?.costUsd,
|
|
86
|
+
contextUsage: existing?.contextUsage,
|
|
87
|
+
linesAdded: existing?.linesAdded,
|
|
88
|
+
linesRemoved: existing?.linesRemoved,
|
|
89
|
+
});
|
|
90
|
+
// Broadcast status change to dashboard
|
|
91
|
+
if (statusChanged) {
|
|
92
|
+
const envId = getSessionEnvironment(tmux_session);
|
|
93
|
+
const envMeta = envId ? getEnvironmentMetadata(envId) : undefined;
|
|
94
|
+
broadcastStatusUpdate({
|
|
95
|
+
name: tmux_session,
|
|
96
|
+
project: project || '',
|
|
97
|
+
status: 'needs_attention',
|
|
98
|
+
attentionReason,
|
|
99
|
+
statusSource: 'hook',
|
|
100
|
+
lastEvent: hookData.lastEvent,
|
|
101
|
+
lastStatusChange: hookData.lastStatusChange,
|
|
102
|
+
createdAt: dbSession?.created_at || now,
|
|
103
|
+
lastActivity: now,
|
|
104
|
+
environmentId: envId,
|
|
105
|
+
environment: envMeta
|
|
106
|
+
? {
|
|
107
|
+
id: envMeta.id,
|
|
108
|
+
name: envMeta.name,
|
|
109
|
+
provider: envMeta.provider,
|
|
110
|
+
icon: envMeta.icon,
|
|
111
|
+
isDefault: envMeta.isDefault,
|
|
112
|
+
}
|
|
113
|
+
: undefined,
|
|
114
|
+
model: hookData.model,
|
|
115
|
+
costUsd: hookData.costUsd,
|
|
116
|
+
contextUsage: hookData.contextUsage,
|
|
117
|
+
linesAdded: hookData.linesAdded,
|
|
118
|
+
linesRemoved: hookData.linesRemoved,
|
|
119
|
+
});
|
|
120
|
+
console.log(`[Notification] ${tmux_session}: → needs_attention (${attentionReason}${payload.tool_name ? `: ${payload.tool_name}` : ''})`);
|
|
121
|
+
}
|
|
122
|
+
res.json({ ok: true });
|
|
123
|
+
});
|
|
124
|
+
export function createNotificationRoutes() {
|
|
125
|
+
return router;
|
|
126
|
+
}
|
|
127
|
+
export default router;
|
|
128
|
+
//# sourceMappingURL=notification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.js","sourceRoot":"","sources":["../../src/routes/notification.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoCH,wBAAsB,YAAY,gHAwIjC"}
|
package/agent/dist/server.js
CHANGED
|
@@ -13,7 +13,7 @@ import { ensureDefaultEnvironment } from './db/environments.js';
|
|
|
13
13
|
import * as sessionsDb from './db/sessions.js';
|
|
14
14
|
import { config } from './config.js';
|
|
15
15
|
// Routes
|
|
16
|
-
import { createProjectRoutes, createEnvironmentRoutes, createSessionRoutes, createHeartbeatRoutes, createEditorRoutes, createFilesRoutes, isProjectAllowed, updateEditorActivity, getOrStartEditor, } from './routes/index.js';
|
|
16
|
+
import { createProjectRoutes, createEnvironmentRoutes, createSessionRoutes, createHeartbeatRoutes, createNotificationRoutes, createEditorRoutes, createFilesRoutes, isProjectAllowed, updateEditorActivity, getOrStartEditor, } from './routes/index.js';
|
|
17
17
|
// StatusLine setup and heartbeat monitor
|
|
18
18
|
import { ensureStatusLineConfigured } from './setup-statusline.js';
|
|
19
19
|
import { startHeartbeatMonitor, stopHeartbeatMonitor } from './heartbeat-monitor.js';
|
|
@@ -60,6 +60,7 @@ export async function createServer() {
|
|
|
60
60
|
app.use('/api/environments', createEnvironmentRoutes());
|
|
61
61
|
app.use('/api/sessions', createSessionRoutes());
|
|
62
62
|
app.use('/api/heartbeat', createHeartbeatRoutes());
|
|
63
|
+
app.use('/api/notification', createNotificationRoutes());
|
|
63
64
|
app.use('/api/editor', createEditorRoutes());
|
|
64
65
|
app.use('/api/files', createFilesRoutes());
|
|
65
66
|
// Editor proxy middleware
|
package/agent/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Creates the statusline script and configures Claude settings at agent startup.
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
|
-
* Ensure statusLine
|
|
6
|
+
* Ensure statusLine and hooks are configured for 247 integration.
|
|
7
7
|
* Called at agent startup.
|
|
8
8
|
*/
|
|
9
9
|
export declare function ensureStatusLineConfigured(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-statusline.d.ts","sourceRoot":"","sources":["../src/setup-statusline.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"setup-statusline.d.ts","sourceRoot":"","sources":["../src/setup-statusline.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CASjD"}
|
|
@@ -8,17 +8,19 @@ import { join } from 'path';
|
|
|
8
8
|
const CLAUDE_SETTINGS_PATH = join(homedir(), '.claude', 'settings.json');
|
|
9
9
|
const STATUSLINE_DIR = join(homedir(), '.247');
|
|
10
10
|
const STATUSLINE_SCRIPT_PATH = join(STATUSLINE_DIR, 'statusline.sh');
|
|
11
|
+
const NOTIFICATION_SCRIPT_PATH = join(STATUSLINE_DIR, 'notification.sh');
|
|
11
12
|
// Pattern to detect old 247 hooks that need cleanup
|
|
12
13
|
const OLD_HOOK_PATTERN = /notify-status\.sh|packages\/hooks/;
|
|
13
14
|
/**
|
|
14
|
-
* Ensure statusLine
|
|
15
|
+
* Ensure statusLine and hooks are configured for 247 integration.
|
|
15
16
|
* Called at agent startup.
|
|
16
17
|
*/
|
|
17
18
|
export function ensureStatusLineConfigured() {
|
|
18
19
|
try {
|
|
19
20
|
ensureStatusLineScript();
|
|
21
|
+
ensureNotificationScript();
|
|
20
22
|
ensureClaudeSettings();
|
|
21
|
-
console.log('[Setup] StatusLine configured successfully');
|
|
23
|
+
console.log('[Setup] StatusLine and hooks configured successfully');
|
|
22
24
|
}
|
|
23
25
|
catch (err) {
|
|
24
26
|
console.error('[Setup] Failed to configure statusLine:', err);
|
|
@@ -53,6 +55,36 @@ exit 0
|
|
|
53
55
|
chmodSync(STATUSLINE_SCRIPT_PATH, 0o755);
|
|
54
56
|
console.log(`[Setup] Created statusLine script at ${STATUSLINE_SCRIPT_PATH}`);
|
|
55
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Create the notification.sh script that forwards Claude Code hook notifications to the agent.
|
|
60
|
+
* This script is called by the Notification hook when Claude needs user attention.
|
|
61
|
+
*/
|
|
62
|
+
function ensureNotificationScript() {
|
|
63
|
+
if (!existsSync(STATUSLINE_DIR)) {
|
|
64
|
+
mkdirSync(STATUSLINE_DIR, { recursive: true });
|
|
65
|
+
}
|
|
66
|
+
const script = `#!/bin/bash
|
|
67
|
+
# 247 Notification Hook - forwards Claude Code notifications to agent
|
|
68
|
+
# Auto-generated by 247 agent - do not edit manually
|
|
69
|
+
|
|
70
|
+
INPUT=$(cat)
|
|
71
|
+
TMUX_SESSION="\${CLAUDE_TMUX_SESSION:-}"
|
|
72
|
+
|
|
73
|
+
# Only forward if we're in a tmux session managed by 247
|
|
74
|
+
[ -z "$TMUX_SESSION" ] && exit 0
|
|
75
|
+
|
|
76
|
+
# Forward JSON to agent (add tmux_session field)
|
|
77
|
+
echo "$INPUT" | jq --arg ts "$TMUX_SESSION" '. + {tmux_session: $ts}' | \\
|
|
78
|
+
curl -s -X POST "http://localhost:4678/api/notification" \\
|
|
79
|
+
-H "Content-Type: application/json" \\
|
|
80
|
+
-d @- > /dev/null 2>&1 &
|
|
81
|
+
|
|
82
|
+
exit 0
|
|
83
|
+
`;
|
|
84
|
+
writeFileSync(NOTIFICATION_SCRIPT_PATH, script);
|
|
85
|
+
chmodSync(NOTIFICATION_SCRIPT_PATH, 0o755);
|
|
86
|
+
console.log(`[Setup] Created notification script at ${NOTIFICATION_SCRIPT_PATH}`);
|
|
87
|
+
}
|
|
56
88
|
/**
|
|
57
89
|
* Remove old 247 hooks from settings.json.
|
|
58
90
|
* These hooks used the deprecated notify-status.sh script.
|
|
@@ -69,7 +101,7 @@ function cleanupOldHooks(settings) {
|
|
|
69
101
|
return true;
|
|
70
102
|
}
|
|
71
103
|
/**
|
|
72
|
-
* Configure Claude settings.json to use our statusLine script.
|
|
104
|
+
* Configure Claude settings.json to use our statusLine script and Notification hook.
|
|
73
105
|
* Also cleans up deprecated hooks if found.
|
|
74
106
|
*/
|
|
75
107
|
function ensureClaudeSettings() {
|
|
@@ -90,29 +122,55 @@ function ensureClaudeSettings() {
|
|
|
90
122
|
}
|
|
91
123
|
// Clean up old hooks if present
|
|
92
124
|
const hooksRemoved = cleanupOldHooks(settings);
|
|
93
|
-
const
|
|
94
|
-
|
|
125
|
+
const expectedStatusLineCommand = `bash ${STATUSLINE_SCRIPT_PATH}`;
|
|
126
|
+
const expectedNotificationCommand = `bash ${NOTIFICATION_SCRIPT_PATH}`;
|
|
127
|
+
// Check if statusLine is already configured correctly
|
|
95
128
|
const currentStatusLine = settings.statusLine;
|
|
96
|
-
const statusLineConfigured = currentStatusLine?.command ===
|
|
97
|
-
if
|
|
98
|
-
|
|
129
|
+
const statusLineConfigured = currentStatusLine?.command === expectedStatusLineCommand;
|
|
130
|
+
// Check if Notification hook is already configured correctly
|
|
131
|
+
const currentHooks = settings.hooks;
|
|
132
|
+
const notificationHooks = currentHooks?.Notification;
|
|
133
|
+
const notificationConfigured = notificationHooks?.some((h) => h.hooks?.some((hook) => hook.command === expectedNotificationCommand));
|
|
134
|
+
if (statusLineConfigured && notificationConfigured && !hooksRemoved) {
|
|
135
|
+
console.log('[Setup] StatusLine and hooks already configured');
|
|
99
136
|
return;
|
|
100
137
|
}
|
|
101
138
|
// Don't overwrite if user has a custom statusLine that's not ours
|
|
102
139
|
if (currentStatusLine?.command && !currentStatusLine.command.includes('.247/statusline.sh')) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
140
|
+
console.log('[Setup] User has custom statusLine, skipping statusLine configuration');
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// Configure statusLine
|
|
144
|
+
settings.statusLine = {
|
|
145
|
+
type: 'command',
|
|
146
|
+
command: expectedStatusLineCommand,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
// Configure Notification hook (merge with existing hooks)
|
|
150
|
+
const hooks = (settings.hooks || {});
|
|
151
|
+
// Only add our Notification hook if not already configured
|
|
152
|
+
if (!notificationConfigured) {
|
|
153
|
+
// Get existing Notification hooks (user-defined ones we should preserve)
|
|
154
|
+
const existingNotificationHooks = (hooks.Notification || []);
|
|
155
|
+
// Filter out any old 247 notification hooks that might exist
|
|
156
|
+
const userNotificationHooks = existingNotificationHooks.filter((h) => !h.hooks?.some((hook) => hook.command?.includes('.247/notification.sh')));
|
|
157
|
+
// Add our Notification hook
|
|
158
|
+
hooks.Notification = [
|
|
159
|
+
...userNotificationHooks,
|
|
160
|
+
{
|
|
161
|
+
matcher: '*',
|
|
162
|
+
hooks: [
|
|
163
|
+
{
|
|
164
|
+
type: 'command',
|
|
165
|
+
command: expectedNotificationCommand,
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
];
|
|
170
|
+
settings.hooks = hooks;
|
|
171
|
+
console.log('[Setup] Configured Notification hook');
|
|
109
172
|
}
|
|
110
|
-
// Configure statusLine
|
|
111
|
-
settings.statusLine = {
|
|
112
|
-
type: 'command',
|
|
113
|
-
command: expectedCommand,
|
|
114
|
-
};
|
|
115
173
|
writeFileSync(CLAUDE_SETTINGS_PATH, JSON.stringify(settings, null, 2));
|
|
116
|
-
console.log(`[Setup] Configured Claude
|
|
174
|
+
console.log(`[Setup] Configured Claude settings in ${CLAUDE_SETTINGS_PATH}`);
|
|
117
175
|
}
|
|
118
176
|
//# sourceMappingURL=setup-statusline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-statusline.js","sourceRoot":"","sources":["../src/setup-statusline.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACzE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC/C,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-statusline.js","sourceRoot":"","sources":["../src/setup-statusline.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ const program = new Command();
|
|
|
15
15
|
program
|
|
16
16
|
.name('247')
|
|
17
17
|
.description('247 - Access Claude Code from anywhere 24/7\nby The Vibe Company')
|
|
18
|
-
.version('1.0
|
|
18
|
+
.version('1.1.0')
|
|
19
19
|
.option('-P, --profile <name>', 'Use a specific profile (dev, prod, etc.)');
|
|
20
20
|
// Add commands
|
|
21
21
|
program.addCommand(initCommand);
|