jfl 0.1.1 → 0.2.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/README.md +77 -7
- package/clawdbot-plugin/clawdbot.plugin.json +20 -0
- package/clawdbot-plugin/index.js +555 -0
- package/clawdbot-plugin/index.ts +582 -0
- package/clawdbot-skill/SKILL.md +33 -336
- package/clawdbot-skill/index.ts +491 -321
- package/clawdbot-skill/skill.json +4 -13
- package/dist/commands/clawdbot.d.ts +11 -0
- package/dist/commands/clawdbot.d.ts.map +1 -0
- package/dist/commands/clawdbot.js +215 -0
- package/dist/commands/clawdbot.js.map +1 -0
- package/dist/commands/gtm-process-update.d.ts +10 -0
- package/dist/commands/gtm-process-update.d.ts.map +1 -0
- package/dist/commands/gtm-process-update.js +101 -0
- package/dist/commands/gtm-process-update.js.map +1 -0
- package/dist/commands/onboard.d.ts.map +1 -1
- package/dist/commands/onboard.js +203 -15
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/openclaw.d.ts +56 -0
- package/dist/commands/openclaw.d.ts.map +1 -0
- package/dist/commands/openclaw.js +700 -0
- package/dist/commands/openclaw.js.map +1 -0
- package/dist/commands/service-validate.d.ts +12 -0
- package/dist/commands/service-validate.d.ts.map +1 -0
- package/dist/commands/service-validate.js +611 -0
- package/dist/commands/service-validate.js.map +1 -0
- package/dist/commands/services-create.d.ts +15 -0
- package/dist/commands/services-create.d.ts.map +1 -0
- package/dist/commands/services-create.js +1452 -0
- package/dist/commands/services-create.js.map +1 -0
- package/dist/commands/services-sync-agents.d.ts +23 -0
- package/dist/commands/services-sync-agents.d.ts.map +1 -0
- package/dist/commands/services-sync-agents.js +207 -0
- package/dist/commands/services-sync-agents.js.map +1 -0
- package/dist/commands/services.d.ts +7 -1
- package/dist/commands/services.d.ts.map +1 -1
- package/dist/commands/services.js +347 -22
- package/dist/commands/services.js.map +1 -1
- package/dist/commands/update.js +0 -0
- package/dist/commands/validate-settings.d.ts +37 -0
- package/dist/commands/validate-settings.d.ts.map +1 -0
- package/dist/commands/validate-settings.js +197 -0
- package/dist/commands/validate-settings.js.map +1 -0
- package/dist/index.js +155 -60
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-generator.d.ts.map +1 -1
- package/dist/lib/agent-generator.js +94 -1
- package/dist/lib/agent-generator.js.map +1 -1
- package/dist/lib/openclaw-registry.d.ts +48 -0
- package/dist/lib/openclaw-registry.d.ts.map +1 -0
- package/dist/lib/openclaw-registry.js +181 -0
- package/dist/lib/openclaw-registry.js.map +1 -0
- package/dist/lib/openclaw-sdk.d.ts +107 -0
- package/dist/lib/openclaw-sdk.d.ts.map +1 -0
- package/dist/lib/openclaw-sdk.js +208 -0
- package/dist/lib/openclaw-sdk.js.map +1 -0
- package/dist/lib/peer-agent-generator.d.ts +44 -0
- package/dist/lib/peer-agent-generator.d.ts.map +1 -0
- package/dist/lib/peer-agent-generator.js +286 -0
- package/dist/lib/peer-agent-generator.js.map +1 -0
- package/dist/lib/service-detector.d.ts +1 -1
- package/dist/lib/service-detector.d.ts.map +1 -1
- package/dist/lib/service-detector.js +118 -5
- package/dist/lib/service-detector.js.map +1 -1
- package/dist/lib/service-gtm.d.ts +157 -0
- package/dist/lib/service-gtm.d.ts.map +1 -0
- package/dist/lib/service-gtm.js +786 -0
- package/dist/lib/service-gtm.js.map +1 -0
- package/dist/lib/service-mcp-base.d.ts +10 -1
- package/dist/lib/service-mcp-base.d.ts.map +1 -1
- package/dist/lib/service-mcp-base.js +20 -1
- package/dist/lib/service-mcp-base.js.map +1 -1
- package/dist/mcp/service-peer-mcp.d.ts +36 -0
- package/dist/mcp/service-peer-mcp.d.ts.map +1 -0
- package/dist/mcp/service-peer-mcp.js +220 -0
- package/dist/mcp/service-peer-mcp.js.map +1 -0
- package/dist/mcp/service-registry-mcp.js +0 -0
- package/dist/utils/settings-validator.d.ts +4 -1
- package/dist/utils/settings-validator.d.ts.map +1 -1
- package/dist/utils/settings-validator.js +25 -1
- package/dist/utils/settings-validator.js.map +1 -1
- package/package.json +2 -1
- package/template/.claude/service-settings.json +32 -0
- package/template/.claude/settings.json +10 -0
- package/template/.claude/skills/end/SKILL.md +1780 -0
- package/template/.jfl/config.json +2 -1
- package/template/.mcp.json +1 -7
- package/template/CLAUDE.md +1042 -248
- package/template/CLAUDE.md.bak +1187 -0
- package/template/scripts/commit-gtm.sh +56 -0
- package/template/scripts/commit-product.sh +68 -0
- package/template/scripts/migrate-to-branch-sessions.sh +201 -0
- package/template/scripts/session/auto-commit.sh +4 -3
- package/template/scripts/session/jfl-doctor.sh +222 -83
- package/template/scripts/session/session-cleanup.sh +109 -21
- package/template/scripts/session/session-end.sh +26 -13
- package/template/scripts/session/session-init.sh +280 -98
- package/template/scripts/session/test-critical-infrastructure.sh +293 -0
- package/template/scripts/session/test-experience-level.sh +336 -0
- package/template/scripts/session/test-session-cleanup.sh +268 -0
- package/template/scripts/session/test-session-sync.sh +320 -0
- package/template/scripts/where-am-i.sh +78 -0
- package/template/templates/service-agent/.claude/settings.json +32 -0
- package/template/templates/service-agent/CLAUDE.md +334 -0
- package/template/templates/service-agent/knowledge/ARCHITECTURE.md +115 -0
- package/template/templates/service-agent/knowledge/DEPLOYMENT.md +199 -0
- package/template/templates/service-agent/knowledge/RUNBOOK.md +412 -0
- package/template/templates/service-agent/knowledge/SERVICE_SPEC.md +77 -0
- package/dist/commands/session-mgmt.d.ts +0 -33
- package/dist/commands/session-mgmt.d.ts.map +0 -1
- package/dist/commands/session-mgmt.js +0 -404
- package/dist/commands/session-mgmt.js.map +0 -1
|
@@ -1,404 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Management Commands
|
|
3
|
-
*
|
|
4
|
-
* Manages isolated GTM sessions across platforms (CLI, Telegram, Slack, Web)
|
|
5
|
-
* Each session = git worktree + auto-commit daemon + journal
|
|
6
|
-
*/
|
|
7
|
-
import { execSync } from "child_process";
|
|
8
|
-
import { existsSync, readFileSync, writeFileSync, readdirSync, statSync } from "fs";
|
|
9
|
-
import { join } from "path";
|
|
10
|
-
import chalk from "chalk";
|
|
11
|
-
/**
|
|
12
|
-
* Session state file location
|
|
13
|
-
*/
|
|
14
|
-
function getSessionsFile() {
|
|
15
|
-
const cwd = process.cwd();
|
|
16
|
-
const jflDir = join(cwd, ".jfl");
|
|
17
|
-
if (!existsSync(jflDir)) {
|
|
18
|
-
throw new Error("Not in a JFL GTM. Run from project root.");
|
|
19
|
-
}
|
|
20
|
-
return join(jflDir, "sessions.json");
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Load all sessions
|
|
24
|
-
*/
|
|
25
|
-
function loadSessions() {
|
|
26
|
-
const file = getSessionsFile();
|
|
27
|
-
if (!existsSync(file)) {
|
|
28
|
-
return {};
|
|
29
|
-
}
|
|
30
|
-
return JSON.parse(readFileSync(file, "utf-8"));
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Save sessions
|
|
34
|
-
*/
|
|
35
|
-
function saveSessions(sessions) {
|
|
36
|
-
const file = getSessionsFile();
|
|
37
|
-
writeFileSync(file, JSON.stringify(sessions, null, 2));
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Create or get existing session
|
|
41
|
-
*/
|
|
42
|
-
export async function sessionCreate(opts) {
|
|
43
|
-
const cwd = process.cwd();
|
|
44
|
-
const sessions = loadSessions();
|
|
45
|
-
// Generate session ID
|
|
46
|
-
const threadPart = opts.thread ? `-${opts.thread}` : `-${Date.now()}`;
|
|
47
|
-
const sessionId = `session-${opts.platform}${threadPart}`;
|
|
48
|
-
// Check if already exists
|
|
49
|
-
if (sessions[sessionId]) {
|
|
50
|
-
console.log(chalk.green(`✓ Using existing session: ${sessionId}`));
|
|
51
|
-
// Update last active
|
|
52
|
-
sessions[sessionId].lastActive = new Date().toISOString();
|
|
53
|
-
saveSessions(sessions);
|
|
54
|
-
return sessionId;
|
|
55
|
-
}
|
|
56
|
-
console.log(chalk.cyan(`Creating session: ${sessionId}`));
|
|
57
|
-
// Create worktree
|
|
58
|
-
const worktreePath = join(cwd, "worktrees", sessionId);
|
|
59
|
-
const branch = sessionId;
|
|
60
|
-
try {
|
|
61
|
-
execSync(`git worktree add ${worktreePath} -b ${branch}`, {
|
|
62
|
-
stdio: "pipe"
|
|
63
|
-
});
|
|
64
|
-
console.log(chalk.green(`✓ Worktree created: worktrees/${sessionId}`));
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
throw new Error(`Failed to create worktree: ${error.message}`);
|
|
68
|
-
}
|
|
69
|
-
// Initialize session (run session-init if exists)
|
|
70
|
-
const initScript = join(cwd, "product/scripts/session/session-init.sh");
|
|
71
|
-
if (existsSync(initScript)) {
|
|
72
|
-
try {
|
|
73
|
-
execSync(initScript, {
|
|
74
|
-
cwd: worktreePath,
|
|
75
|
-
stdio: "pipe"
|
|
76
|
-
});
|
|
77
|
-
console.log(chalk.green("✓ Session initialized"));
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
console.log(chalk.yellow("⚠️ Session init script failed (continuing)"));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// Start auto-commit daemon
|
|
84
|
-
const autoCommitScript = join(cwd, "product/scripts/session/auto-commit.sh");
|
|
85
|
-
if (existsSync(autoCommitScript)) {
|
|
86
|
-
try {
|
|
87
|
-
execSync(`${autoCommitScript} start 120 &`, {
|
|
88
|
-
cwd: worktreePath,
|
|
89
|
-
stdio: "pipe"
|
|
90
|
-
});
|
|
91
|
-
console.log(chalk.green("✓ Auto-commit daemon started"));
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
console.log(chalk.yellow("⚠️ Auto-commit daemon failed to start"));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Create journal file
|
|
98
|
-
const journalDir = join(cwd, ".jfl/journal");
|
|
99
|
-
const journalFile = join(journalDir, `${sessionId}.jsonl`);
|
|
100
|
-
if (!existsSync(journalFile)) {
|
|
101
|
-
writeFileSync(journalFile, "");
|
|
102
|
-
console.log(chalk.green("✓ Journal file created"));
|
|
103
|
-
}
|
|
104
|
-
// Store session info
|
|
105
|
-
sessions[sessionId] = {
|
|
106
|
-
id: sessionId,
|
|
107
|
-
platform: opts.platform,
|
|
108
|
-
thread: opts.thread,
|
|
109
|
-
user: opts.user,
|
|
110
|
-
path: worktreePath,
|
|
111
|
-
branch,
|
|
112
|
-
created: new Date().toISOString(),
|
|
113
|
-
lastActive: new Date().toISOString(),
|
|
114
|
-
status: "active"
|
|
115
|
-
};
|
|
116
|
-
saveSessions(sessions);
|
|
117
|
-
console.log(chalk.green(`\n✓ Session created: ${sessionId}`));
|
|
118
|
-
console.log(chalk.gray(` Path: ${worktreePath}`));
|
|
119
|
-
console.log(chalk.gray(` Branch: ${branch}\n`));
|
|
120
|
-
return sessionId;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Execute command in session context
|
|
124
|
-
*/
|
|
125
|
-
export async function sessionExec(sessionId, command) {
|
|
126
|
-
const sessions = loadSessions();
|
|
127
|
-
const session = sessions[sessionId];
|
|
128
|
-
if (!session) {
|
|
129
|
-
throw new Error(`Session not found: ${sessionId}`);
|
|
130
|
-
}
|
|
131
|
-
// Update last active
|
|
132
|
-
session.lastActive = new Date().toISOString();
|
|
133
|
-
saveSessions(sessions);
|
|
134
|
-
// CD to worktree and execute
|
|
135
|
-
const cwd = session.path;
|
|
136
|
-
// Session-sync before command
|
|
137
|
-
const syncScript = join(process.cwd(), "product/scripts/session/session-sync.sh");
|
|
138
|
-
if (existsSync(syncScript)) {
|
|
139
|
-
try {
|
|
140
|
-
execSync(syncScript, {
|
|
141
|
-
cwd,
|
|
142
|
-
stdio: "pipe"
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
console.error(chalk.yellow("⚠️ Session sync failed"));
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// Execute command
|
|
150
|
-
try {
|
|
151
|
-
const output = execSync(command, {
|
|
152
|
-
cwd,
|
|
153
|
-
encoding: "utf-8",
|
|
154
|
-
stdio: "pipe",
|
|
155
|
-
env: {
|
|
156
|
-
...process.env,
|
|
157
|
-
JFL_SESSION_ID: sessionId,
|
|
158
|
-
JFL_PLATFORM: session.platform
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
return output;
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
// Return stderr if command failed
|
|
165
|
-
return error.stderr || error.stdout || error.message;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* List all sessions
|
|
170
|
-
*/
|
|
171
|
-
export async function sessionList() {
|
|
172
|
-
const cwd = process.cwd();
|
|
173
|
-
const worktreesDir = join(cwd, "worktrees");
|
|
174
|
-
// Scan worktrees directory for session-* directories
|
|
175
|
-
const detectedSessions = {};
|
|
176
|
-
if (existsSync(worktreesDir)) {
|
|
177
|
-
const entries = readdirSync(worktreesDir);
|
|
178
|
-
for (const entry of entries) {
|
|
179
|
-
if (!entry.startsWith("session-"))
|
|
180
|
-
continue;
|
|
181
|
-
const worktreePath = join(worktreesDir, entry);
|
|
182
|
-
const stat = statSync(worktreePath);
|
|
183
|
-
if (!stat.isDirectory())
|
|
184
|
-
continue;
|
|
185
|
-
// Extract session info from directory name
|
|
186
|
-
// Format: session-{platform}-{thread} or session-{user}-{date}-{time}-{id}
|
|
187
|
-
const parts = entry.split("-");
|
|
188
|
-
let platform = "cli";
|
|
189
|
-
let thread;
|
|
190
|
-
if (parts.length >= 3) {
|
|
191
|
-
// Check if it matches platform-thread pattern
|
|
192
|
-
if (["telegram", "slack", "discord", "web"].includes(parts[1])) {
|
|
193
|
-
platform = parts[1];
|
|
194
|
-
thread = parts.slice(2).join("-");
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
detectedSessions[entry] = {
|
|
198
|
-
id: entry,
|
|
199
|
-
platform,
|
|
200
|
-
thread,
|
|
201
|
-
path: worktreePath,
|
|
202
|
-
branch: entry,
|
|
203
|
-
created: stat.birthtime.toISOString(),
|
|
204
|
-
lastActive: stat.mtime.toISOString(),
|
|
205
|
-
status: "active"
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
// Merge with sessions.json if it exists
|
|
210
|
-
const registeredSessions = loadSessions();
|
|
211
|
-
const allSessions = { ...detectedSessions, ...registeredSessions };
|
|
212
|
-
const sessionIds = Object.keys(allSessions);
|
|
213
|
-
if (sessionIds.length === 0) {
|
|
214
|
-
console.log(chalk.yellow("No active sessions"));
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
console.log(chalk.bold("\nActive Sessions:\n"));
|
|
218
|
-
for (const id of sessionIds) {
|
|
219
|
-
const session = allSessions[id];
|
|
220
|
-
const lastActive = new Date(session.lastActive);
|
|
221
|
-
const now = new Date();
|
|
222
|
-
const diffMs = now.getTime() - lastActive.getTime();
|
|
223
|
-
const diffMins = Math.floor(diffMs / 60000);
|
|
224
|
-
let timeAgo = "";
|
|
225
|
-
if (diffMins < 1) {
|
|
226
|
-
timeAgo = "just now";
|
|
227
|
-
}
|
|
228
|
-
else if (diffMins < 60) {
|
|
229
|
-
timeAgo = `${diffMins}m ago`;
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
const diffHours = Math.floor(diffMins / 60);
|
|
233
|
-
timeAgo = `${diffHours}h ago`;
|
|
234
|
-
}
|
|
235
|
-
// Check if auto-commit daemon is running (check PID)
|
|
236
|
-
const pidFile = join(session.path, ".jfl/auto-commit.pid");
|
|
237
|
-
let isActive = false;
|
|
238
|
-
if (existsSync(pidFile)) {
|
|
239
|
-
try {
|
|
240
|
-
const pid = parseInt(readFileSync(pidFile, "utf-8").trim());
|
|
241
|
-
// Check if process is running
|
|
242
|
-
process.kill(pid, 0); // Signal 0 = existence check
|
|
243
|
-
isActive = true;
|
|
244
|
-
}
|
|
245
|
-
catch {
|
|
246
|
-
// PID doesn't exist or not accessible
|
|
247
|
-
isActive = false;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
const status = isActive ? chalk.green("🟢 active") : chalk.yellow("🟡 idle");
|
|
251
|
-
const platform = chalk.cyan(session.platform.padEnd(10));
|
|
252
|
-
const thread = session.thread ? chalk.gray(`thread:${session.thread}`) : "";
|
|
253
|
-
console.log(`${chalk.bold(id.padEnd(40))} ${platform} ${status.padEnd(20)} ${timeAgo.padEnd(10)} ${thread}`);
|
|
254
|
-
}
|
|
255
|
-
console.log();
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Destroy session
|
|
259
|
-
*/
|
|
260
|
-
export async function sessionDestroy(sessionId, opts) {
|
|
261
|
-
const sessions = loadSessions();
|
|
262
|
-
const session = sessions[sessionId];
|
|
263
|
-
if (!session) {
|
|
264
|
-
throw new Error(`Session not found: ${sessionId}`);
|
|
265
|
-
}
|
|
266
|
-
console.log(chalk.cyan(`Destroying session: ${sessionId}`));
|
|
267
|
-
// Stop auto-commit daemon
|
|
268
|
-
const pidFile = join(session.path, ".jfl/auto-commit.pid");
|
|
269
|
-
if (existsSync(pidFile)) {
|
|
270
|
-
try {
|
|
271
|
-
const pid = readFileSync(pidFile, "utf-8").trim();
|
|
272
|
-
execSync(`kill ${pid}`, { stdio: "pipe" });
|
|
273
|
-
console.log(chalk.green("✓ Auto-commit daemon stopped"));
|
|
274
|
-
}
|
|
275
|
-
catch (error) {
|
|
276
|
-
console.log(chalk.yellow("⚠️ Daemon already stopped"));
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
// Run session-end hook
|
|
280
|
-
const endScript = join(process.cwd(), "product/scripts/session/session-end.sh");
|
|
281
|
-
if (existsSync(endScript) && !opts?.force) {
|
|
282
|
-
try {
|
|
283
|
-
execSync(endScript, {
|
|
284
|
-
cwd: session.path,
|
|
285
|
-
stdio: "pipe"
|
|
286
|
-
});
|
|
287
|
-
console.log(chalk.green("✓ Session end hook completed"));
|
|
288
|
-
}
|
|
289
|
-
catch (error) {
|
|
290
|
-
console.log(chalk.yellow("⚠️ Session end hook failed"));
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
// Check for uncommitted changes
|
|
294
|
-
try {
|
|
295
|
-
const status = execSync("git status --porcelain", {
|
|
296
|
-
cwd: session.path,
|
|
297
|
-
encoding: "utf-8"
|
|
298
|
-
});
|
|
299
|
-
if (status.trim() && !opts?.force) {
|
|
300
|
-
console.log(chalk.yellow("\n⚠️ Uncommitted changes found:"));
|
|
301
|
-
console.log(status);
|
|
302
|
-
console.log(chalk.yellow("\nRun with --force to destroy anyway\n"));
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
catch (error) {
|
|
307
|
-
// Ignore
|
|
308
|
-
}
|
|
309
|
-
// Check for unpushed commits
|
|
310
|
-
try {
|
|
311
|
-
const currentBranch = execSync("git branch --show-current", {
|
|
312
|
-
cwd: session.path,
|
|
313
|
-
encoding: "utf-8"
|
|
314
|
-
}).trim();
|
|
315
|
-
if (currentBranch) {
|
|
316
|
-
try {
|
|
317
|
-
// Get remote tracking branch
|
|
318
|
-
const remoteBranch = execSync(`git rev-parse --abbrev-ref ${currentBranch}@{upstream}`, {
|
|
319
|
-
cwd: session.path,
|
|
320
|
-
encoding: "utf-8"
|
|
321
|
-
}).trim();
|
|
322
|
-
// Check for unpushed commits
|
|
323
|
-
const unpushed = execSync(`git log ${remoteBranch}..${currentBranch} --oneline`, {
|
|
324
|
-
cwd: session.path,
|
|
325
|
-
encoding: "utf-8"
|
|
326
|
-
}).trim();
|
|
327
|
-
if (unpushed && !opts?.force) {
|
|
328
|
-
console.log(chalk.yellow("\n⚠️ Unpushed commits found:"));
|
|
329
|
-
console.log(unpushed);
|
|
330
|
-
console.log(chalk.yellow("\nPush to remote or run with --force to destroy anyway\n"));
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
catch (error) {
|
|
335
|
-
// No upstream branch - check if branch has any commits
|
|
336
|
-
try {
|
|
337
|
-
const commitCount = execSync(`git rev-list --count ${currentBranch}`, {
|
|
338
|
-
cwd: session.path,
|
|
339
|
-
encoding: "utf-8"
|
|
340
|
-
}).trim();
|
|
341
|
-
if (parseInt(commitCount) > 0 && !opts?.force) {
|
|
342
|
-
console.log(chalk.yellow("\n⚠️ Branch has commits but no remote tracking"));
|
|
343
|
-
console.log(chalk.yellow("Push to remote or run with --force to destroy anyway\n"));
|
|
344
|
-
return;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
catch {
|
|
348
|
-
// Ignore
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
catch (error) {
|
|
354
|
-
// Ignore
|
|
355
|
-
}
|
|
356
|
-
// Delete worktree
|
|
357
|
-
try {
|
|
358
|
-
execSync(`git worktree remove ${session.path} --force`, {
|
|
359
|
-
stdio: "pipe"
|
|
360
|
-
});
|
|
361
|
-
console.log(chalk.green("✓ Worktree removed"));
|
|
362
|
-
}
|
|
363
|
-
catch (error) {
|
|
364
|
-
throw new Error(`Failed to remove worktree: ${error.message}`);
|
|
365
|
-
}
|
|
366
|
-
// Delete branch
|
|
367
|
-
try {
|
|
368
|
-
execSync(`git branch -D ${session.branch}`, {
|
|
369
|
-
stdio: "pipe"
|
|
370
|
-
});
|
|
371
|
-
console.log(chalk.green("✓ Branch deleted"));
|
|
372
|
-
}
|
|
373
|
-
catch (error) {
|
|
374
|
-
console.log(chalk.yellow("⚠️ Branch already deleted"));
|
|
375
|
-
}
|
|
376
|
-
// Remove from sessions
|
|
377
|
-
delete sessions[sessionId];
|
|
378
|
-
saveSessions(sessions);
|
|
379
|
-
console.log(chalk.green(`\n✓ Session destroyed: ${sessionId}\n`));
|
|
380
|
-
}
|
|
381
|
-
/**
|
|
382
|
-
* Get session info
|
|
383
|
-
*/
|
|
384
|
-
export async function sessionInfo(sessionId) {
|
|
385
|
-
const sessions = loadSessions();
|
|
386
|
-
const session = sessions[sessionId];
|
|
387
|
-
if (!session) {
|
|
388
|
-
throw new Error(`Session not found: ${sessionId}`);
|
|
389
|
-
}
|
|
390
|
-
console.log(chalk.bold(`\nSession: ${sessionId}\n`));
|
|
391
|
-
console.log(chalk.gray("Platform: ") + session.platform);
|
|
392
|
-
console.log(chalk.gray("Thread: ") + (session.thread || "N/A"));
|
|
393
|
-
console.log(chalk.gray("User: ") + (session.user || "N/A"));
|
|
394
|
-
console.log(chalk.gray("Path: ") + session.path);
|
|
395
|
-
console.log(chalk.gray("Branch: ") + session.branch);
|
|
396
|
-
console.log(chalk.gray("Created: ") + new Date(session.created).toLocaleString());
|
|
397
|
-
console.log(chalk.gray("Last Active: ") + new Date(session.lastActive).toLocaleString());
|
|
398
|
-
// Check daemon status
|
|
399
|
-
const pidFile = join(session.path, ".jfl/auto-commit.pid");
|
|
400
|
-
const isActive = existsSync(pidFile);
|
|
401
|
-
console.log(chalk.gray("Status: ") + (isActive ? chalk.green("active") : chalk.yellow("idle")));
|
|
402
|
-
console.log();
|
|
403
|
-
}
|
|
404
|
-
//# sourceMappingURL=session-mgmt.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-mgmt.js","sourceRoot":"","sources":["../../src/commands/session-mgmt.ts"],"names":[],"mappings":"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"}
|