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.
Files changed (112) hide show
  1. package/README.md +77 -7
  2. package/clawdbot-plugin/clawdbot.plugin.json +20 -0
  3. package/clawdbot-plugin/index.js +555 -0
  4. package/clawdbot-plugin/index.ts +582 -0
  5. package/clawdbot-skill/SKILL.md +33 -336
  6. package/clawdbot-skill/index.ts +491 -321
  7. package/clawdbot-skill/skill.json +4 -13
  8. package/dist/commands/clawdbot.d.ts +11 -0
  9. package/dist/commands/clawdbot.d.ts.map +1 -0
  10. package/dist/commands/clawdbot.js +215 -0
  11. package/dist/commands/clawdbot.js.map +1 -0
  12. package/dist/commands/gtm-process-update.d.ts +10 -0
  13. package/dist/commands/gtm-process-update.d.ts.map +1 -0
  14. package/dist/commands/gtm-process-update.js +101 -0
  15. package/dist/commands/gtm-process-update.js.map +1 -0
  16. package/dist/commands/onboard.d.ts.map +1 -1
  17. package/dist/commands/onboard.js +203 -15
  18. package/dist/commands/onboard.js.map +1 -1
  19. package/dist/commands/openclaw.d.ts +56 -0
  20. package/dist/commands/openclaw.d.ts.map +1 -0
  21. package/dist/commands/openclaw.js +700 -0
  22. package/dist/commands/openclaw.js.map +1 -0
  23. package/dist/commands/service-validate.d.ts +12 -0
  24. package/dist/commands/service-validate.d.ts.map +1 -0
  25. package/dist/commands/service-validate.js +611 -0
  26. package/dist/commands/service-validate.js.map +1 -0
  27. package/dist/commands/services-create.d.ts +15 -0
  28. package/dist/commands/services-create.d.ts.map +1 -0
  29. package/dist/commands/services-create.js +1452 -0
  30. package/dist/commands/services-create.js.map +1 -0
  31. package/dist/commands/services-sync-agents.d.ts +23 -0
  32. package/dist/commands/services-sync-agents.d.ts.map +1 -0
  33. package/dist/commands/services-sync-agents.js +207 -0
  34. package/dist/commands/services-sync-agents.js.map +1 -0
  35. package/dist/commands/services.d.ts +7 -1
  36. package/dist/commands/services.d.ts.map +1 -1
  37. package/dist/commands/services.js +347 -22
  38. package/dist/commands/services.js.map +1 -1
  39. package/dist/commands/update.js +0 -0
  40. package/dist/commands/validate-settings.d.ts +37 -0
  41. package/dist/commands/validate-settings.d.ts.map +1 -0
  42. package/dist/commands/validate-settings.js +197 -0
  43. package/dist/commands/validate-settings.js.map +1 -0
  44. package/dist/index.js +155 -60
  45. package/dist/index.js.map +1 -1
  46. package/dist/lib/agent-generator.d.ts.map +1 -1
  47. package/dist/lib/agent-generator.js +94 -1
  48. package/dist/lib/agent-generator.js.map +1 -1
  49. package/dist/lib/openclaw-registry.d.ts +48 -0
  50. package/dist/lib/openclaw-registry.d.ts.map +1 -0
  51. package/dist/lib/openclaw-registry.js +181 -0
  52. package/dist/lib/openclaw-registry.js.map +1 -0
  53. package/dist/lib/openclaw-sdk.d.ts +107 -0
  54. package/dist/lib/openclaw-sdk.d.ts.map +1 -0
  55. package/dist/lib/openclaw-sdk.js +208 -0
  56. package/dist/lib/openclaw-sdk.js.map +1 -0
  57. package/dist/lib/peer-agent-generator.d.ts +44 -0
  58. package/dist/lib/peer-agent-generator.d.ts.map +1 -0
  59. package/dist/lib/peer-agent-generator.js +286 -0
  60. package/dist/lib/peer-agent-generator.js.map +1 -0
  61. package/dist/lib/service-detector.d.ts +1 -1
  62. package/dist/lib/service-detector.d.ts.map +1 -1
  63. package/dist/lib/service-detector.js +118 -5
  64. package/dist/lib/service-detector.js.map +1 -1
  65. package/dist/lib/service-gtm.d.ts +157 -0
  66. package/dist/lib/service-gtm.d.ts.map +1 -0
  67. package/dist/lib/service-gtm.js +786 -0
  68. package/dist/lib/service-gtm.js.map +1 -0
  69. package/dist/lib/service-mcp-base.d.ts +10 -1
  70. package/dist/lib/service-mcp-base.d.ts.map +1 -1
  71. package/dist/lib/service-mcp-base.js +20 -1
  72. package/dist/lib/service-mcp-base.js.map +1 -1
  73. package/dist/mcp/service-peer-mcp.d.ts +36 -0
  74. package/dist/mcp/service-peer-mcp.d.ts.map +1 -0
  75. package/dist/mcp/service-peer-mcp.js +220 -0
  76. package/dist/mcp/service-peer-mcp.js.map +1 -0
  77. package/dist/mcp/service-registry-mcp.js +0 -0
  78. package/dist/utils/settings-validator.d.ts +4 -1
  79. package/dist/utils/settings-validator.d.ts.map +1 -1
  80. package/dist/utils/settings-validator.js +25 -1
  81. package/dist/utils/settings-validator.js.map +1 -1
  82. package/package.json +2 -1
  83. package/template/.claude/service-settings.json +32 -0
  84. package/template/.claude/settings.json +10 -0
  85. package/template/.claude/skills/end/SKILL.md +1780 -0
  86. package/template/.jfl/config.json +2 -1
  87. package/template/.mcp.json +1 -7
  88. package/template/CLAUDE.md +1042 -248
  89. package/template/CLAUDE.md.bak +1187 -0
  90. package/template/scripts/commit-gtm.sh +56 -0
  91. package/template/scripts/commit-product.sh +68 -0
  92. package/template/scripts/migrate-to-branch-sessions.sh +201 -0
  93. package/template/scripts/session/auto-commit.sh +4 -3
  94. package/template/scripts/session/jfl-doctor.sh +222 -83
  95. package/template/scripts/session/session-cleanup.sh +109 -21
  96. package/template/scripts/session/session-end.sh +26 -13
  97. package/template/scripts/session/session-init.sh +280 -98
  98. package/template/scripts/session/test-critical-infrastructure.sh +293 -0
  99. package/template/scripts/session/test-experience-level.sh +336 -0
  100. package/template/scripts/session/test-session-cleanup.sh +268 -0
  101. package/template/scripts/session/test-session-sync.sh +320 -0
  102. package/template/scripts/where-am-i.sh +78 -0
  103. package/template/templates/service-agent/.claude/settings.json +32 -0
  104. package/template/templates/service-agent/CLAUDE.md +334 -0
  105. package/template/templates/service-agent/knowledge/ARCHITECTURE.md +115 -0
  106. package/template/templates/service-agent/knowledge/DEPLOYMENT.md +199 -0
  107. package/template/templates/service-agent/knowledge/RUNBOOK.md +412 -0
  108. package/template/templates/service-agent/knowledge/SERVICE_SPEC.md +77 -0
  109. package/dist/commands/session-mgmt.d.ts +0 -33
  110. package/dist/commands/session-mgmt.d.ts.map +0 -1
  111. package/dist/commands/session-mgmt.js +0 -404
  112. 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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"}