247-cli 2.21.1 → 2.23.3
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 -7
- package/agent/dist/db/index.d.ts.map +1 -1
- package/agent/dist/db/index.js +68 -333
- package/agent/dist/db/index.js.map +1 -1
- package/agent/dist/db/schema.d.ts +3 -90
- package/agent/dist/db/schema.d.ts.map +1 -1
- package/agent/dist/db/schema.js +4 -105
- package/agent/dist/db/schema.js.map +1 -1
- package/agent/dist/db/sessions.d.ts +0 -53
- package/agent/dist/db/sessions.d.ts.map +1 -1
- package/agent/dist/db/sessions.js +3 -224
- 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 +1 -0
- package/agent/dist/routes/sessions.d.ts.map +1 -1
- package/agent/dist/routes/sessions.js +14 -379
- 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/services/index.d.ts +1 -6
- package/agent/dist/services/index.d.ts.map +1 -1
- package/agent/dist/services/index.js +4 -4
- package/agent/dist/services/index.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 +0 -6
- package/agent/dist/status.d.ts.map +1 -1
- package/agent/dist/status.js +2 -12
- package/agent/dist/status.js.map +1 -1
- package/agent/dist/terminal.d.ts +0 -11
- package/agent/dist/terminal.d.ts.map +1 -1
- package/agent/dist/terminal.js +6 -60
- package/agent/dist/terminal.js.map +1 -1
- package/agent/dist/websocket-handlers.d.ts +1 -0
- package/agent/dist/websocket-handlers.d.ts.map +1 -1
- package/agent/dist/websocket-handlers.js +3 -187
- package/agent/dist/websocket-handlers.js.map +1 -1
- package/agent/node_modules/247-shared/dist/types/index.d.ts +0 -232
- package/agent/node_modules/247-shared/dist/types/index.d.ts.map +1 -1
- package/agent/node_modules/247-shared/dist/types/index.js +1 -63
- 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/events.d.ts +0 -46
- package/agent/dist/db/events.d.ts.map +0 -1
- package/agent/dist/db/events.js +0 -193
- package/agent/dist/db/events.js.map +0 -1
- package/agent/dist/db/history.d.ts +0 -37
- package/agent/dist/db/history.d.ts.map +0 -1
- package/agent/dist/db/history.js +0 -98
- package/agent/dist/db/history.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/services/cleanup.d.ts +0 -45
- package/agent/dist/services/cleanup.d.ts.map +0 -1
- package/agent/dist/services/cleanup.js +0 -130
- package/agent/dist/services/cleanup.js.map +0 -1
- package/agent/dist/services/execution.d.ts +0 -53
- package/agent/dist/services/execution.d.ts.map +0 -1
- package/agent/dist/services/execution.js +0 -75
- package/agent/dist/services/execution.js.map +0 -1
- package/agent/dist/services/stream-json.d.ts +0 -109
- package/agent/dist/services/stream-json.d.ts.map +0 -1
- package/agent/dist/services/stream-json.js +0 -335
- package/agent/dist/services/stream-json.js.map +0 -1
- package/agent/dist/services/worktree.d.ts +0 -41
- package/agent/dist/services/worktree.d.ts.map +0 -1
- package/agent/dist/services/worktree.js +0 -139
- package/agent/dist/services/worktree.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
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-configuration for Claude Code statusLine integration.
|
|
3
|
-
* Creates the statusline script and configures Claude settings at agent startup.
|
|
4
|
-
*/
|
|
5
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync, chmodSync } from 'fs';
|
|
6
|
-
import { homedir } from 'os';
|
|
7
|
-
import { join } from 'path';
|
|
8
|
-
const CLAUDE_SETTINGS_PATH = join(homedir(), '.claude', 'settings.json');
|
|
9
|
-
const STATUSLINE_DIR = join(homedir(), '.247');
|
|
10
|
-
const STATUSLINE_SCRIPT_PATH = join(STATUSLINE_DIR, 'statusline.sh');
|
|
11
|
-
const NOTIFICATION_SCRIPT_PATH = join(STATUSLINE_DIR, 'notification.sh');
|
|
12
|
-
const STOP_SCRIPT_PATH = join(STATUSLINE_DIR, 'stop.sh');
|
|
13
|
-
// Pattern to detect old 247 hooks that need cleanup
|
|
14
|
-
const OLD_HOOK_PATTERN = /notify-status\.sh|packages\/hooks/;
|
|
15
|
-
/**
|
|
16
|
-
* Ensure statusLine and hooks are configured for 247 integration.
|
|
17
|
-
* Called at agent startup.
|
|
18
|
-
*/
|
|
19
|
-
export function ensureStatusLineConfigured() {
|
|
20
|
-
try {
|
|
21
|
-
ensureStatusLineScript();
|
|
22
|
-
ensureNotificationScript();
|
|
23
|
-
ensureStopScript();
|
|
24
|
-
ensureClaudeSettings();
|
|
25
|
-
console.log('[Setup] StatusLine and hooks configured successfully');
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
console.error('[Setup] Failed to configure statusLine:', err);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Create the statusline.sh script that forwards Claude Code data to the agent.
|
|
33
|
-
*/
|
|
34
|
-
function ensureStatusLineScript() {
|
|
35
|
-
if (!existsSync(STATUSLINE_DIR)) {
|
|
36
|
-
mkdirSync(STATUSLINE_DIR, { recursive: true });
|
|
37
|
-
}
|
|
38
|
-
const script = `#!/bin/bash
|
|
39
|
-
# 247 StatusLine - forwards Claude Code data to agent
|
|
40
|
-
# Auto-generated by 247 agent - do not edit manually
|
|
41
|
-
|
|
42
|
-
INPUT=$(cat)
|
|
43
|
-
TMUX_SESSION="\${CLAUDE_TMUX_SESSION:-}"
|
|
44
|
-
|
|
45
|
-
# Only forward if we're in a tmux session managed by 247
|
|
46
|
-
[ -z "$TMUX_SESSION" ] && exit 0
|
|
47
|
-
|
|
48
|
-
# Forward JSON to agent (add tmux_session field)
|
|
49
|
-
echo "$INPUT" | jq --arg ts "$TMUX_SESSION" '. + {tmux_session: $ts}' | \\
|
|
50
|
-
curl -s -X POST "http://localhost:4678/api/heartbeat" \\
|
|
51
|
-
-H "Content-Type: application/json" \\
|
|
52
|
-
-d @- > /dev/null 2>&1 &
|
|
53
|
-
|
|
54
|
-
exit 0
|
|
55
|
-
`;
|
|
56
|
-
writeFileSync(STATUSLINE_SCRIPT_PATH, script);
|
|
57
|
-
chmodSync(STATUSLINE_SCRIPT_PATH, 0o755);
|
|
58
|
-
console.log(`[Setup] Created statusLine script at ${STATUSLINE_SCRIPT_PATH}`);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Create the notification.sh script that forwards Claude Code hook notifications to the agent.
|
|
62
|
-
* This script is called by the Notification hook when Claude needs user attention.
|
|
63
|
-
*/
|
|
64
|
-
function ensureNotificationScript() {
|
|
65
|
-
if (!existsSync(STATUSLINE_DIR)) {
|
|
66
|
-
mkdirSync(STATUSLINE_DIR, { recursive: true });
|
|
67
|
-
}
|
|
68
|
-
const script = `#!/bin/bash
|
|
69
|
-
# 247 Notification Hook - forwards Claude Code notifications to agent
|
|
70
|
-
# Auto-generated by 247 agent - do not edit manually
|
|
71
|
-
|
|
72
|
-
INPUT=$(cat)
|
|
73
|
-
TMUX_SESSION="\${CLAUDE_TMUX_SESSION:-}"
|
|
74
|
-
|
|
75
|
-
# Only forward if we're in a tmux session managed by 247
|
|
76
|
-
[ -z "$TMUX_SESSION" ] && exit 0
|
|
77
|
-
|
|
78
|
-
# Forward JSON to agent (add tmux_session field)
|
|
79
|
-
echo "$INPUT" | jq --arg ts "$TMUX_SESSION" '. + {tmux_session: $ts}' | \\
|
|
80
|
-
curl -s -X POST "http://localhost:4678/api/notification" \\
|
|
81
|
-
-H "Content-Type: application/json" \\
|
|
82
|
-
-d @- > /dev/null 2>&1 &
|
|
83
|
-
|
|
84
|
-
exit 0
|
|
85
|
-
`;
|
|
86
|
-
writeFileSync(NOTIFICATION_SCRIPT_PATH, script);
|
|
87
|
-
chmodSync(NOTIFICATION_SCRIPT_PATH, 0o755);
|
|
88
|
-
console.log(`[Setup] Created notification script at ${NOTIFICATION_SCRIPT_PATH}`);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Create the stop.sh script that forwards Claude Code stop notifications to the agent.
|
|
92
|
-
* This script is called by the Stop hook when Claude finishes responding.
|
|
93
|
-
*/
|
|
94
|
-
function ensureStopScript() {
|
|
95
|
-
if (!existsSync(STATUSLINE_DIR)) {
|
|
96
|
-
mkdirSync(STATUSLINE_DIR, { recursive: true });
|
|
97
|
-
}
|
|
98
|
-
const script = `#!/bin/bash
|
|
99
|
-
# 247 Stop Hook - forwards Claude Code stop events to agent
|
|
100
|
-
# Auto-generated by 247 agent - do not edit manually
|
|
101
|
-
|
|
102
|
-
INPUT=$(cat)
|
|
103
|
-
TMUX_SESSION="\${CLAUDE_TMUX_SESSION:-}"
|
|
104
|
-
|
|
105
|
-
# Only forward if we're in a tmux session managed by 247
|
|
106
|
-
[ -z "$TMUX_SESSION" ] && exit 0
|
|
107
|
-
|
|
108
|
-
# Forward JSON to agent (add tmux_session field)
|
|
109
|
-
echo "$INPUT" | jq --arg ts "$TMUX_SESSION" '. + {tmux_session: $ts}' | \\
|
|
110
|
-
curl -s -X POST "http://localhost:4678/api/stop" \\
|
|
111
|
-
-H "Content-Type: application/json" \\
|
|
112
|
-
-d @- > /dev/null 2>&1 &
|
|
113
|
-
|
|
114
|
-
exit 0
|
|
115
|
-
`;
|
|
116
|
-
writeFileSync(STOP_SCRIPT_PATH, script);
|
|
117
|
-
chmodSync(STOP_SCRIPT_PATH, 0o755);
|
|
118
|
-
console.log(`[Setup] Created stop script at ${STOP_SCRIPT_PATH}`);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Remove old 247 hooks from settings.json.
|
|
122
|
-
* These hooks used the deprecated notify-status.sh script.
|
|
123
|
-
*/
|
|
124
|
-
function cleanupOldHooks(settings) {
|
|
125
|
-
if (!settings.hooks)
|
|
126
|
-
return false;
|
|
127
|
-
const hooksJson = JSON.stringify(settings.hooks);
|
|
128
|
-
if (!OLD_HOOK_PATTERN.test(hooksJson))
|
|
129
|
-
return false;
|
|
130
|
-
// Remove the old hooks
|
|
131
|
-
delete settings.hooks;
|
|
132
|
-
console.log('[Setup] Removed deprecated hooks from settings.json');
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Configure Claude settings.json to use our statusLine script and hooks.
|
|
137
|
-
* Configures: statusLine, Notification hook, Stop hook
|
|
138
|
-
* Also cleans up deprecated hooks if found.
|
|
139
|
-
*/
|
|
140
|
-
function ensureClaudeSettings() {
|
|
141
|
-
const claudeDir = join(homedir(), '.claude');
|
|
142
|
-
// Ensure .claude directory exists
|
|
143
|
-
if (!existsSync(claudeDir)) {
|
|
144
|
-
mkdirSync(claudeDir, { recursive: true });
|
|
145
|
-
}
|
|
146
|
-
// Read existing settings or start fresh
|
|
147
|
-
let settings = {};
|
|
148
|
-
if (existsSync(CLAUDE_SETTINGS_PATH)) {
|
|
149
|
-
try {
|
|
150
|
-
settings = JSON.parse(readFileSync(CLAUDE_SETTINGS_PATH, 'utf-8'));
|
|
151
|
-
}
|
|
152
|
-
catch {
|
|
153
|
-
console.warn('[Setup] Could not parse existing settings.json, will create new');
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
// Clean up old hooks if present
|
|
157
|
-
const hooksRemoved = cleanupOldHooks(settings);
|
|
158
|
-
const expectedStatusLineCommand = `bash ${STATUSLINE_SCRIPT_PATH}`;
|
|
159
|
-
const expectedNotificationCommand = `bash ${NOTIFICATION_SCRIPT_PATH}`;
|
|
160
|
-
const expectedStopCommand = `bash ${STOP_SCRIPT_PATH}`;
|
|
161
|
-
// Check if statusLine is already configured correctly
|
|
162
|
-
const currentStatusLine = settings.statusLine;
|
|
163
|
-
const statusLineConfigured = currentStatusLine?.command === expectedStatusLineCommand;
|
|
164
|
-
// Check if Notification hook is already configured correctly
|
|
165
|
-
const currentHooks = settings.hooks;
|
|
166
|
-
const notificationHooks = currentHooks?.Notification;
|
|
167
|
-
const notificationConfigured = notificationHooks?.some((h) => h.hooks?.some((hook) => hook.command === expectedNotificationCommand));
|
|
168
|
-
// Check if Stop hook is already configured correctly
|
|
169
|
-
const stopHooks = currentHooks?.Stop;
|
|
170
|
-
const stopConfigured = stopHooks?.some((h) => h.hooks?.some((hook) => hook.command === expectedStopCommand));
|
|
171
|
-
if (statusLineConfigured && notificationConfigured && stopConfigured && !hooksRemoved) {
|
|
172
|
-
console.log('[Setup] StatusLine and hooks already configured');
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
// Don't overwrite if user has a custom statusLine that's not ours
|
|
176
|
-
if (currentStatusLine?.command && !currentStatusLine.command.includes('.247/statusline.sh')) {
|
|
177
|
-
console.log('[Setup] User has custom statusLine, skipping statusLine configuration');
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
// Configure statusLine
|
|
181
|
-
settings.statusLine = {
|
|
182
|
-
type: 'command',
|
|
183
|
-
command: expectedStatusLineCommand,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
// Configure hooks (merge with existing hooks)
|
|
187
|
-
const hooks = (settings.hooks || {});
|
|
188
|
-
// Only add our Notification hook if not already configured
|
|
189
|
-
if (!notificationConfigured) {
|
|
190
|
-
// Get existing Notification hooks (user-defined ones we should preserve)
|
|
191
|
-
const existingNotificationHooks = (hooks.Notification || []);
|
|
192
|
-
// Filter out any old 247 notification hooks that might exist
|
|
193
|
-
const userNotificationHooks = existingNotificationHooks.filter((h) => !h.hooks?.some((hook) => hook.command?.includes('.247/notification.sh')));
|
|
194
|
-
// Add our Notification hook
|
|
195
|
-
hooks.Notification = [
|
|
196
|
-
...userNotificationHooks,
|
|
197
|
-
{
|
|
198
|
-
matcher: '*',
|
|
199
|
-
hooks: [
|
|
200
|
-
{
|
|
201
|
-
type: 'command',
|
|
202
|
-
command: expectedNotificationCommand,
|
|
203
|
-
},
|
|
204
|
-
],
|
|
205
|
-
},
|
|
206
|
-
];
|
|
207
|
-
console.log('[Setup] Configured Notification hook');
|
|
208
|
-
}
|
|
209
|
-
// Only add our Stop hook if not already configured
|
|
210
|
-
if (!stopConfigured) {
|
|
211
|
-
// Get existing Stop hooks (user-defined ones we should preserve)
|
|
212
|
-
const existingStopHooks = (hooks.Stop || []);
|
|
213
|
-
// Filter out any old 247 stop hooks that might exist
|
|
214
|
-
const userStopHooks = existingStopHooks.filter((h) => !h.hooks?.some((hook) => hook.command?.includes('.247/stop.sh')));
|
|
215
|
-
// Add our Stop hook
|
|
216
|
-
hooks.Stop = [
|
|
217
|
-
...userStopHooks,
|
|
218
|
-
{
|
|
219
|
-
matcher: '*',
|
|
220
|
-
hooks: [
|
|
221
|
-
{
|
|
222
|
-
type: 'command',
|
|
223
|
-
command: expectedStopCommand,
|
|
224
|
-
},
|
|
225
|
-
],
|
|
226
|
-
},
|
|
227
|
-
];
|
|
228
|
-
console.log('[Setup] Configured Stop hook');
|
|
229
|
-
}
|
|
230
|
-
settings.hooks = hooks;
|
|
231
|
-
writeFileSync(CLAUDE_SETTINGS_PATH, JSON.stringify(settings, null, 2));
|
|
232
|
-
console.log(`[Setup] Configured Claude settings in ${CLAUDE_SETTINGS_PATH}`);
|
|
233
|
-
}
|
|
234
|
-
//# sourceMappingURL=setup-statusline.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup-statusline.js","sourceRoot":"","sources":["../src/setup-statusline.ts"],"names":[],"mappings":"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"}
|