jfl 0.1.0 → 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 (262) hide show
  1. package/README.md +443 -145
  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/context-hub.d.ts +5 -0
  13. package/dist/commands/context-hub.d.ts.map +1 -1
  14. package/dist/commands/context-hub.js +394 -28
  15. package/dist/commands/context-hub.js.map +1 -1
  16. package/dist/commands/gtm-process-update.d.ts +10 -0
  17. package/dist/commands/gtm-process-update.d.ts.map +1 -0
  18. package/dist/commands/gtm-process-update.js +101 -0
  19. package/dist/commands/gtm-process-update.js.map +1 -0
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +278 -4
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/login.d.ts.map +1 -1
  24. package/dist/commands/login.js +32 -33
  25. package/dist/commands/login.js.map +1 -1
  26. package/dist/commands/memory.d.ts +38 -0
  27. package/dist/commands/memory.d.ts.map +1 -0
  28. package/dist/commands/memory.js +229 -0
  29. package/dist/commands/memory.js.map +1 -0
  30. package/dist/commands/migrate-services.d.ts +8 -0
  31. package/dist/commands/migrate-services.d.ts.map +1 -0
  32. package/dist/commands/migrate-services.js +182 -0
  33. package/dist/commands/migrate-services.js.map +1 -0
  34. package/dist/commands/onboard.d.ts +24 -0
  35. package/dist/commands/onboard.d.ts.map +1 -0
  36. package/dist/commands/onboard.js +663 -0
  37. package/dist/commands/onboard.js.map +1 -0
  38. package/dist/commands/openclaw.d.ts +56 -0
  39. package/dist/commands/openclaw.d.ts.map +1 -0
  40. package/dist/commands/openclaw.js +700 -0
  41. package/dist/commands/openclaw.js.map +1 -0
  42. package/dist/commands/orchestrate.d.ts +14 -0
  43. package/dist/commands/orchestrate.d.ts.map +1 -0
  44. package/dist/commands/orchestrate.js +270 -0
  45. package/dist/commands/orchestrate.js.map +1 -0
  46. package/dist/commands/profile.d.ts +46 -0
  47. package/dist/commands/profile.d.ts.map +1 -0
  48. package/dist/commands/profile.js +498 -0
  49. package/dist/commands/profile.js.map +1 -0
  50. package/dist/commands/repair.d.ts.map +1 -1
  51. package/dist/commands/repair.js +37 -0
  52. package/dist/commands/repair.js.map +1 -1
  53. package/dist/commands/service-agent.d.ts +16 -0
  54. package/dist/commands/service-agent.d.ts.map +1 -0
  55. package/dist/commands/service-agent.js +375 -0
  56. package/dist/commands/service-agent.js.map +1 -0
  57. package/dist/commands/service-manager.d.ts +12 -0
  58. package/dist/commands/service-manager.d.ts.map +1 -0
  59. package/dist/commands/service-manager.js +967 -0
  60. package/dist/commands/service-manager.js.map +1 -0
  61. package/dist/commands/service-validate.d.ts +12 -0
  62. package/dist/commands/service-validate.d.ts.map +1 -0
  63. package/dist/commands/service-validate.js +611 -0
  64. package/dist/commands/service-validate.js.map +1 -0
  65. package/dist/commands/services-create.d.ts +15 -0
  66. package/dist/commands/services-create.d.ts.map +1 -0
  67. package/dist/commands/services-create.js +1452 -0
  68. package/dist/commands/services-create.js.map +1 -0
  69. package/dist/commands/services-scan.d.ts +13 -0
  70. package/dist/commands/services-scan.d.ts.map +1 -0
  71. package/dist/commands/services-scan.js +251 -0
  72. package/dist/commands/services-scan.js.map +1 -0
  73. package/dist/commands/services-sync-agents.d.ts +23 -0
  74. package/dist/commands/services-sync-agents.d.ts.map +1 -0
  75. package/dist/commands/services-sync-agents.js +207 -0
  76. package/dist/commands/services-sync-agents.js.map +1 -0
  77. package/dist/commands/services.d.ts +19 -0
  78. package/dist/commands/services.d.ts.map +1 -0
  79. package/dist/commands/services.js +742 -0
  80. package/dist/commands/services.js.map +1 -0
  81. package/dist/commands/session.d.ts +5 -1
  82. package/dist/commands/session.d.ts.map +1 -1
  83. package/dist/commands/session.js +68 -586
  84. package/dist/commands/session.js.map +1 -1
  85. package/dist/commands/status.d.ts.map +1 -1
  86. package/dist/commands/status.js +17 -0
  87. package/dist/commands/status.js.map +1 -1
  88. package/dist/commands/update.d.ts.map +1 -1
  89. package/dist/commands/update.js +75 -21
  90. package/dist/commands/update.js.map +1 -1
  91. package/dist/commands/validate-settings.d.ts +37 -0
  92. package/dist/commands/validate-settings.d.ts.map +1 -0
  93. package/dist/commands/validate-settings.js +197 -0
  94. package/dist/commands/validate-settings.js.map +1 -0
  95. package/dist/commands/voice.d.ts +0 -1
  96. package/dist/commands/voice.d.ts.map +1 -1
  97. package/dist/commands/voice.js +16 -15
  98. package/dist/commands/voice.js.map +1 -1
  99. package/dist/index.js +395 -141
  100. package/dist/index.js.map +1 -1
  101. package/dist/lib/agent-generator.d.ts +26 -0
  102. package/dist/lib/agent-generator.d.ts.map +1 -0
  103. package/dist/lib/agent-generator.js +331 -0
  104. package/dist/lib/agent-generator.js.map +1 -0
  105. package/dist/lib/memory-db.d.ts +102 -0
  106. package/dist/lib/memory-db.d.ts.map +1 -0
  107. package/dist/lib/memory-db.js +313 -0
  108. package/dist/lib/memory-db.js.map +1 -0
  109. package/dist/lib/memory-indexer.d.ts +47 -0
  110. package/dist/lib/memory-indexer.d.ts.map +1 -0
  111. package/dist/lib/memory-indexer.js +215 -0
  112. package/dist/lib/memory-indexer.js.map +1 -0
  113. package/dist/lib/memory-search.d.ts +41 -0
  114. package/dist/lib/memory-search.d.ts.map +1 -0
  115. package/dist/lib/memory-search.js +246 -0
  116. package/dist/lib/memory-search.js.map +1 -0
  117. package/dist/lib/openclaw-registry.d.ts +48 -0
  118. package/dist/lib/openclaw-registry.d.ts.map +1 -0
  119. package/dist/lib/openclaw-registry.js +181 -0
  120. package/dist/lib/openclaw-registry.js.map +1 -0
  121. package/dist/lib/openclaw-sdk.d.ts +107 -0
  122. package/dist/lib/openclaw-sdk.d.ts.map +1 -0
  123. package/dist/lib/openclaw-sdk.js +208 -0
  124. package/dist/lib/openclaw-sdk.js.map +1 -0
  125. package/dist/lib/peer-agent-generator.d.ts +44 -0
  126. package/dist/lib/peer-agent-generator.d.ts.map +1 -0
  127. package/dist/lib/peer-agent-generator.js +286 -0
  128. package/dist/lib/peer-agent-generator.js.map +1 -0
  129. package/dist/lib/service-dependencies.d.ts +44 -0
  130. package/dist/lib/service-dependencies.d.ts.map +1 -0
  131. package/dist/lib/service-dependencies.js +314 -0
  132. package/dist/lib/service-dependencies.js.map +1 -0
  133. package/dist/lib/service-detector.d.ts +61 -0
  134. package/dist/lib/service-detector.d.ts.map +1 -0
  135. package/dist/lib/service-detector.js +521 -0
  136. package/dist/lib/service-detector.js.map +1 -0
  137. package/dist/lib/service-gtm.d.ts +157 -0
  138. package/dist/lib/service-gtm.d.ts.map +1 -0
  139. package/dist/lib/service-gtm.js +786 -0
  140. package/dist/lib/service-gtm.js.map +1 -0
  141. package/dist/lib/service-mcp-base.d.ts +103 -0
  142. package/dist/lib/service-mcp-base.d.ts.map +1 -0
  143. package/dist/lib/service-mcp-base.js +263 -0
  144. package/dist/lib/service-mcp-base.js.map +1 -0
  145. package/dist/lib/service-utils.d.ts +103 -0
  146. package/dist/lib/service-utils.d.ts.map +1 -0
  147. package/dist/lib/service-utils.js +368 -0
  148. package/dist/lib/service-utils.js.map +1 -0
  149. package/dist/lib/skill-generator.d.ts +21 -0
  150. package/dist/lib/skill-generator.d.ts.map +1 -0
  151. package/dist/lib/skill-generator.js +253 -0
  152. package/dist/lib/skill-generator.js.map +1 -0
  153. package/dist/lib/stratus-client.d.ts +100 -0
  154. package/dist/lib/stratus-client.d.ts.map +1 -0
  155. package/dist/lib/stratus-client.js +255 -0
  156. package/dist/lib/stratus-client.js.map +1 -0
  157. package/dist/mcp/context-hub-mcp.js +135 -53
  158. package/dist/mcp/context-hub-mcp.js.map +1 -1
  159. package/dist/mcp/service-mcp-server.d.ts +12 -0
  160. package/dist/mcp/service-mcp-server.d.ts.map +1 -0
  161. package/dist/mcp/service-mcp-server.js +434 -0
  162. package/dist/mcp/service-mcp-server.js.map +1 -0
  163. package/dist/mcp/service-peer-mcp.d.ts +36 -0
  164. package/dist/mcp/service-peer-mcp.d.ts.map +1 -0
  165. package/dist/mcp/service-peer-mcp.js +220 -0
  166. package/dist/mcp/service-peer-mcp.js.map +1 -0
  167. package/dist/mcp/service-registry-mcp.d.ts +13 -0
  168. package/dist/mcp/service-registry-mcp.d.ts.map +1 -0
  169. package/dist/mcp/service-registry-mcp.js +330 -0
  170. package/dist/mcp/service-registry-mcp.js.map +1 -0
  171. package/dist/ui/banner.js +1 -1
  172. package/dist/ui/banner.js.map +1 -1
  173. package/dist/ui/context-hub-logs.d.ts +10 -0
  174. package/dist/ui/context-hub-logs.d.ts.map +1 -0
  175. package/dist/ui/context-hub-logs.js +175 -0
  176. package/dist/ui/context-hub-logs.js.map +1 -0
  177. package/dist/ui/service-dashboard.d.ts +11 -0
  178. package/dist/ui/service-dashboard.d.ts.map +1 -0
  179. package/dist/ui/service-dashboard.js +357 -0
  180. package/dist/ui/service-dashboard.js.map +1 -0
  181. package/dist/ui/services-manager.d.ts +11 -0
  182. package/dist/ui/services-manager.d.ts.map +1 -0
  183. package/dist/ui/services-manager.js +507 -0
  184. package/dist/ui/services-manager.js.map +1 -0
  185. package/dist/utils/auth-guard.d.ts.map +1 -1
  186. package/dist/utils/auth-guard.js +8 -9
  187. package/dist/utils/auth-guard.js.map +1 -1
  188. package/dist/utils/claude-md-generator.d.ts +10 -0
  189. package/dist/utils/claude-md-generator.d.ts.map +1 -0
  190. package/dist/utils/claude-md-generator.js +215 -0
  191. package/dist/utils/claude-md-generator.js.map +1 -0
  192. package/dist/utils/ensure-context-hub.d.ts +20 -0
  193. package/dist/utils/ensure-context-hub.d.ts.map +1 -0
  194. package/dist/utils/ensure-context-hub.js +65 -0
  195. package/dist/utils/ensure-context-hub.js.map +1 -0
  196. package/dist/utils/ensure-project.d.ts.map +1 -1
  197. package/dist/utils/ensure-project.js +3 -4
  198. package/dist/utils/ensure-project.js.map +1 -1
  199. package/dist/utils/jfl-config.d.ts +19 -0
  200. package/dist/utils/jfl-config.d.ts.map +1 -0
  201. package/dist/utils/jfl-config.js +112 -0
  202. package/dist/utils/jfl-config.js.map +1 -0
  203. package/dist/utils/jfl-migration.d.ts +29 -0
  204. package/dist/utils/jfl-migration.d.ts.map +1 -0
  205. package/dist/utils/jfl-migration.js +142 -0
  206. package/dist/utils/jfl-migration.js.map +1 -0
  207. package/dist/utils/jfl-paths.d.ts +55 -0
  208. package/dist/utils/jfl-paths.d.ts.map +1 -0
  209. package/dist/utils/jfl-paths.js +120 -0
  210. package/dist/utils/jfl-paths.js.map +1 -0
  211. package/dist/utils/settings-validator.d.ts +73 -0
  212. package/dist/utils/settings-validator.d.ts.map +1 -0
  213. package/dist/utils/settings-validator.js +222 -0
  214. package/dist/utils/settings-validator.js.map +1 -0
  215. package/package.json +19 -3
  216. package/scripts/commit-gtm.sh +56 -0
  217. package/scripts/commit-product.sh +68 -0
  218. package/scripts/context-query.sh +45 -0
  219. package/scripts/session/auto-commit.sh +297 -0
  220. package/scripts/session/jfl-doctor.sh +707 -0
  221. package/scripts/session/session-cleanup.sh +268 -0
  222. package/scripts/session/session-end.sh +198 -0
  223. package/scripts/session/session-init.sh +350 -0
  224. package/scripts/session/session-init.sh.backup +292 -0
  225. package/scripts/session/session-sync.sh +167 -0
  226. package/scripts/session/test-context-preservation.sh +160 -0
  227. package/scripts/session/test-critical-infrastructure.sh +293 -0
  228. package/scripts/session/test-experience-level.sh +336 -0
  229. package/scripts/session/test-session-cleanup.sh +268 -0
  230. package/scripts/session/test-session-sync.sh +320 -0
  231. package/scripts/voice-start.sh +36 -8
  232. package/scripts/where-am-i.sh +78 -0
  233. package/template/.claude/service-settings.json +32 -0
  234. package/template/.claude/settings.json +14 -1
  235. package/template/.claude/skills/end/SKILL.md +1780 -0
  236. package/template/.jfl/config.json +2 -1
  237. package/template/CLAUDE.md +1039 -134
  238. package/template/CLAUDE.md.bak +1187 -0
  239. package/template/scripts/commit-gtm.sh +56 -0
  240. package/template/scripts/commit-product.sh +68 -0
  241. package/template/scripts/migrate-to-branch-sessions.sh +201 -0
  242. package/template/scripts/session/auto-commit.sh +58 -6
  243. package/template/scripts/session/jfl-doctor.sh +137 -17
  244. package/template/scripts/session/session-cleanup.sh +268 -0
  245. package/template/scripts/session/session-end.sh +4 -0
  246. package/template/scripts/session/session-init.sh +253 -66
  247. package/template/scripts/session/test-critical-infrastructure.sh +293 -0
  248. package/template/scripts/session/test-experience-level.sh +336 -0
  249. package/template/scripts/session/test-session-cleanup.sh +268 -0
  250. package/template/scripts/session/test-session-sync.sh +320 -0
  251. package/template/scripts/where-am-i.sh +78 -0
  252. package/template/templates/service-agent/.claude/settings.json +32 -0
  253. package/template/templates/service-agent/CLAUDE.md +334 -0
  254. package/template/templates/service-agent/knowledge/ARCHITECTURE.md +115 -0
  255. package/template/templates/service-agent/knowledge/DEPLOYMENT.md +199 -0
  256. package/template/templates/service-agent/knowledge/RUNBOOK.md +412 -0
  257. package/template/templates/service-agent/knowledge/SERVICE_SPEC.md +77 -0
  258. package/dist/commands/session-mgmt.d.ts +0 -33
  259. package/dist/commands/session-mgmt.d.ts.map +0 -1
  260. package/dist/commands/session-mgmt.js +0 -404
  261. package/dist/commands/session-mgmt.js.map +0 -1
  262. package/template/scripts/session/auto-merge.sh +0 -325
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-agent.d.ts","sourceRoot":"","sources":["../../src/commands/service-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4LH,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CjE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBjD;AAED,wBAAsB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ClE;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnE;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC1C;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAe3C;AAMD,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+F9D"}
@@ -0,0 +1,375 @@
1
+ /**
2
+ * Service Agent Management
3
+ *
4
+ * CLI command to generate, manage, and register service MCP servers.
5
+ * Creates executable MCP server binaries for each service in services.json.
6
+ *
7
+ * @purpose Service agent lifecycle management for AI-service communication
8
+ */
9
+ import chalk from "chalk";
10
+ import ora from "ora";
11
+ import * as fs from "fs";
12
+ import * as path from "path";
13
+ import { execSync } from "child_process";
14
+ import { fileURLToPath } from "url";
15
+ import { dirname } from "path";
16
+ import { getMCPConfigFile, findProjectRoot } from "../utils/jfl-config.js";
17
+ import { JFL_PATHS } from "../utils/jfl-paths.js";
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = dirname(__filename);
20
+ const GLOBAL_SERVICES_FILE = path.join(JFL_PATHS.data, "services.json");
21
+ const SERVICE_AGENTS_DIR = path.join(JFL_PATHS.data, "service-agents");
22
+ // ============================================================================
23
+ // Service Loading
24
+ // ============================================================================
25
+ function loadServicesConfig() {
26
+ if (!fs.existsSync(GLOBAL_SERVICES_FILE)) {
27
+ throw new Error(`Services file not found: ${GLOBAL_SERVICES_FILE}`);
28
+ }
29
+ const content = fs.readFileSync(GLOBAL_SERVICES_FILE, "utf-8");
30
+ return JSON.parse(content);
31
+ }
32
+ // ============================================================================
33
+ // MCP Server Generation
34
+ // ============================================================================
35
+ function generateMCPServerBinary(serviceName) {
36
+ const serverPath = path.join(SERVICE_AGENTS_DIR, `${serviceName}-mcp.js`);
37
+ // Find the compiled service-mcp-server.js
38
+ const cliRoot = path.join(__dirname, "..", "..");
39
+ const mcpServerScript = path.join(cliRoot, "dist", "mcp", "service-mcp-server.js");
40
+ if (!fs.existsSync(mcpServerScript)) {
41
+ throw new Error(`MCP server script not found: ${mcpServerScript}\n` +
42
+ `Run 'npm run build' to compile the project first.`);
43
+ }
44
+ const binaryContent = `#!/usr/bin/env node
45
+ /**
46
+ * MCP Server for ${serviceName}
47
+ *
48
+ * Auto-generated by jfl service-agent generate
49
+ * Do not edit manually - regenerate with 'jfl service-agent generate ${serviceName}'
50
+ */
51
+
52
+ const { spawn } = require('child_process');
53
+ const path = require('path');
54
+
55
+ const mcpServer = path.join(__dirname, '..', '..', '${path.relative(SERVICE_AGENTS_DIR, mcpServerScript)}');
56
+ const serviceName = '${serviceName}';
57
+
58
+ // Spawn the MCP server with the service name
59
+ const child = spawn(process.execPath, [mcpServer, serviceName], {
60
+ stdio: 'inherit',
61
+ env: {
62
+ ...process.env,
63
+ DEBUG: process.env.DEBUG || undefined,
64
+ }
65
+ });
66
+
67
+ child.on('exit', (code) => {
68
+ process.exit(code || 0);
69
+ });
70
+ `;
71
+ // Ensure service-agents directory exists
72
+ if (!fs.existsSync(SERVICE_AGENTS_DIR)) {
73
+ fs.mkdirSync(SERVICE_AGENTS_DIR, { recursive: true });
74
+ }
75
+ // Write the binary
76
+ fs.writeFileSync(serverPath, binaryContent, { mode: 0o755 });
77
+ // Make it executable
78
+ try {
79
+ execSync(`chmod +x "${serverPath}"`);
80
+ }
81
+ catch {
82
+ // chmod might fail on some systems, but mode: 0o755 should handle it
83
+ }
84
+ return serverPath;
85
+ }
86
+ // ============================================================================
87
+ // MCP Registration
88
+ // ============================================================================
89
+ function loadMCPConfig() {
90
+ const mcpConfigFile = getMCPConfigFile();
91
+ if (!fs.existsSync(mcpConfigFile)) {
92
+ return { mcpServers: {} };
93
+ }
94
+ try {
95
+ const content = fs.readFileSync(mcpConfigFile, "utf-8");
96
+ return JSON.parse(content);
97
+ }
98
+ catch (error) {
99
+ console.warn(chalk.yellow(`Failed to parse ${mcpConfigFile}, starting fresh`));
100
+ return { mcpServers: {} };
101
+ }
102
+ }
103
+ function saveMCPConfig(config) {
104
+ const mcpConfigFile = getMCPConfigFile();
105
+ // Ensure parent directory exists
106
+ const mcpDir = path.dirname(mcpConfigFile);
107
+ if (!fs.existsSync(mcpDir)) {
108
+ fs.mkdirSync(mcpDir, { recursive: true });
109
+ }
110
+ fs.writeFileSync(mcpConfigFile, JSON.stringify(config, null, 2) + "\n");
111
+ }
112
+ function registerServiceAgent(serviceName, serverPath) {
113
+ const config = loadMCPConfig();
114
+ // Add or update the service MCP server
115
+ config.mcpServers[serviceName] = {
116
+ command: "node",
117
+ args: [serverPath],
118
+ };
119
+ saveMCPConfig(config);
120
+ }
121
+ function unregisterServiceAgent(serviceName) {
122
+ const config = loadMCPConfig();
123
+ if (config.mcpServers[serviceName]) {
124
+ delete config.mcpServers[serviceName];
125
+ saveMCPConfig(config);
126
+ }
127
+ }
128
+ // ============================================================================
129
+ // Commands
130
+ // ============================================================================
131
+ export async function generate(serviceName) {
132
+ const spinner = ora(`Generating MCP server for ${serviceName}...`).start();
133
+ try {
134
+ const servicesConfig = loadServicesConfig();
135
+ const serviceConfig = servicesConfig.services[serviceName];
136
+ if (!serviceConfig) {
137
+ spinner.fail(`Service "${serviceName}" not found in configuration`);
138
+ console.log(chalk.dim(`Available services: ${Object.keys(servicesConfig.services).join(", ")}`));
139
+ process.exit(1);
140
+ }
141
+ // Check if MCP is enabled
142
+ if (serviceConfig.mcp && serviceConfig.mcp.enabled === false) {
143
+ spinner.warn(`MCP is disabled for service "${serviceName}"`);
144
+ console.log(chalk.dim(`To enable, set mcp.enabled: true in ${GLOBAL_SERVICES_FILE}`));
145
+ process.exit(0);
146
+ }
147
+ const serverPath = generateMCPServerBinary(serviceName);
148
+ spinner.succeed(`Generated MCP server: ${serverPath}`);
149
+ // Show what tools will be available
150
+ console.log(chalk.dim("\nStandard tools:"));
151
+ console.log(chalk.dim(` - ${serviceName}_status`));
152
+ console.log(chalk.dim(` - ${serviceName}_start`));
153
+ console.log(chalk.dim(` - ${serviceName}_stop`));
154
+ console.log(chalk.dim(` - ${serviceName}_restart`));
155
+ console.log(chalk.dim(` - ${serviceName}_logs`));
156
+ console.log(chalk.dim(` - ${serviceName}_health`));
157
+ if (serviceConfig.mcp?.tools && serviceConfig.mcp.tools.length > 0) {
158
+ console.log(chalk.dim("\nCustom tools:"));
159
+ serviceConfig.mcp.tools.forEach((tool) => {
160
+ console.log(chalk.dim(` - ${serviceName}_${tool.name}`));
161
+ });
162
+ }
163
+ console.log(chalk.dim(`\nNext: Run 'jfl service-agent register' to add to Claude Code`));
164
+ }
165
+ catch (error) {
166
+ spinner.fail("Failed to generate MCP server");
167
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
168
+ process.exit(1);
169
+ }
170
+ }
171
+ export async function generateAll() {
172
+ const spinner = ora("Generating MCP servers for all services...").start();
173
+ try {
174
+ const servicesConfig = loadServicesConfig();
175
+ const services = Object.keys(servicesConfig.services);
176
+ if (services.length === 0) {
177
+ spinner.info("No services found in configuration");
178
+ process.exit(0);
179
+ }
180
+ spinner.stop();
181
+ for (const serviceName of services) {
182
+ await generate(serviceName);
183
+ }
184
+ console.log(chalk.green(`\n✓ Generated ${services.length} service agents`));
185
+ }
186
+ catch (error) {
187
+ spinner.fail("Failed to generate service agents");
188
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
189
+ process.exit(1);
190
+ }
191
+ }
192
+ export async function register(serviceName) {
193
+ const spinner = ora("Registering service agents with Claude Code...").start();
194
+ try {
195
+ const servicesConfig = loadServicesConfig();
196
+ const servicesToRegister = serviceName
197
+ ? [serviceName]
198
+ : Object.keys(servicesConfig.services);
199
+ let registered = 0;
200
+ for (const name of servicesToRegister) {
201
+ const serverPath = path.join(SERVICE_AGENTS_DIR, `${name}-mcp.js`);
202
+ if (!fs.existsSync(serverPath)) {
203
+ spinner.warn(`MCP server not found for "${name}", generating...`);
204
+ await generate(name);
205
+ }
206
+ registerServiceAgent(name, serverPath);
207
+ registered++;
208
+ }
209
+ const mcpConfigFile = getMCPConfigFile();
210
+ const projectRoot = findProjectRoot();
211
+ spinner.succeed(`Registered ${registered} service agent(s) in ${mcpConfigFile}`);
212
+ if (projectRoot) {
213
+ console.log(chalk.green(`\n✓ MCP config written to project: ${path.relative(process.cwd(), mcpConfigFile)}`));
214
+ console.log(chalk.dim("Claude Code will automatically detect this project-local config"));
215
+ }
216
+ else {
217
+ console.log(chalk.yellow(`\n⚠️ MCP config written to: ${mcpConfigFile}`));
218
+ console.log(chalk.dim("This is in JFL's namespace. To use in a project:\n"));
219
+ console.log(chalk.cyan(` ln -s ${mcpConfigFile} <project>/.mcp.json\n`));
220
+ }
221
+ console.log(chalk.dim("Restart Claude Code to activate the new MCP servers"));
222
+ }
223
+ catch (error) {
224
+ spinner.fail("Failed to register service agents");
225
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
226
+ process.exit(1);
227
+ }
228
+ }
229
+ export async function unregister(serviceName) {
230
+ const spinner = ora(`Unregistering ${serviceName}...`).start();
231
+ try {
232
+ const mcpConfigFile = getMCPConfigFile();
233
+ unregisterServiceAgent(serviceName);
234
+ spinner.succeed(`Unregistered ${serviceName} from ${mcpConfigFile}`);
235
+ }
236
+ catch (error) {
237
+ spinner.fail("Failed to unregister service agent");
238
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
239
+ process.exit(1);
240
+ }
241
+ }
242
+ export async function list() {
243
+ try {
244
+ const servicesConfig = loadServicesConfig();
245
+ const mcpConfig = loadMCPConfig();
246
+ console.log(chalk.bold("\nService Agents:"));
247
+ console.log();
248
+ for (const [name, config] of Object.entries(servicesConfig.services)) {
249
+ const serverPath = path.join(SERVICE_AGENTS_DIR, `${name}-mcp.js`);
250
+ const exists = fs.existsSync(serverPath);
251
+ const registered = !!mcpConfig.mcpServers[name];
252
+ const status = exists && registered
253
+ ? chalk.green("✓ active")
254
+ : exists
255
+ ? chalk.yellow("⚠ generated (not registered)")
256
+ : chalk.dim("○ not generated");
257
+ console.log(` ${status} ${chalk.bold(name)}`);
258
+ console.log(` ${chalk.dim(config.description)}`);
259
+ if (config.mcp?.tools && config.mcp.tools.length > 0) {
260
+ console.log(chalk.dim(` Custom tools: ${config.mcp.tools.map((t) => t.name).join(", ")}`));
261
+ }
262
+ console.log();
263
+ }
264
+ console.log(chalk.dim("Commands:"));
265
+ console.log(chalk.dim(" jfl service-agent generate <name> - Generate MCP server"));
266
+ console.log(chalk.dim(" jfl service-agent register - Register all agents"));
267
+ console.log(chalk.dim(" jfl service-agent generate-all - Generate all agents"));
268
+ }
269
+ catch (error) {
270
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
271
+ process.exit(1);
272
+ }
273
+ }
274
+ export async function clean() {
275
+ const spinner = ora("Cleaning up service agents...").start();
276
+ try {
277
+ if (fs.existsSync(SERVICE_AGENTS_DIR)) {
278
+ fs.rmSync(SERVICE_AGENTS_DIR, { recursive: true, force: true });
279
+ }
280
+ spinner.succeed("Cleaned up all service agents");
281
+ console.log(chalk.dim("Run 'jfl service-agent generate-all' to regenerate"));
282
+ }
283
+ catch (error) {
284
+ spinner.fail("Failed to clean up service agents");
285
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
286
+ process.exit(1);
287
+ }
288
+ }
289
+ // ============================================================================
290
+ // Service-Local MCP Server Initialization
291
+ // ============================================================================
292
+ export async function init(servicePath) {
293
+ const targetPath = servicePath ? path.resolve(servicePath) : process.cwd();
294
+ const spinner = ora(`Initializing MCP server in ${targetPath}...`).start();
295
+ try {
296
+ // Check if already initialized
297
+ const mcpServerPath = path.join(targetPath, ".jfl-mcp.js");
298
+ const mcpConfigPath = path.join(targetPath, ".jfl-mcp.config.json");
299
+ if (fs.existsSync(mcpServerPath)) {
300
+ spinner.warn("MCP server already exists");
301
+ console.log(chalk.dim(`Existing: ${mcpServerPath}`));
302
+ const readline = await import("readline");
303
+ const rl = readline.createInterface({
304
+ input: process.stdin,
305
+ output: process.stdout,
306
+ });
307
+ const answer = await new Promise((resolve) => {
308
+ rl.question(chalk.yellow("Overwrite? (y/N): "), resolve);
309
+ });
310
+ rl.close();
311
+ if (answer.toLowerCase() !== "y") {
312
+ console.log(chalk.gray("Cancelled"));
313
+ process.exit(0);
314
+ }
315
+ }
316
+ // Read package.json to get service name and description
317
+ const packageJsonPath = path.join(targetPath, "package.json");
318
+ let serviceName = path.basename(targetPath);
319
+ let serviceDescription = "Service description";
320
+ let serviceVersion = "1.0.0";
321
+ if (fs.existsSync(packageJsonPath)) {
322
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
323
+ serviceName = packageJson.name || serviceName;
324
+ serviceDescription = packageJson.description || serviceDescription;
325
+ serviceVersion = packageJson.version || serviceVersion;
326
+ }
327
+ // Load template
328
+ const templatePath = path.join(__dirname, "../../templates/service-mcp-template.js");
329
+ let template = fs.readFileSync(templatePath, "utf-8");
330
+ // Substitute variables
331
+ template = template.replace(/{{SERVICE_NAME}}/g, serviceName);
332
+ template = template.replace(/{{SERVICE_DESCRIPTION}}/g, serviceDescription);
333
+ template = template.replace(/{{SERVICE_VERSION}}/g, serviceVersion);
334
+ // Write MCP server
335
+ fs.writeFileSync(mcpServerPath, template, { mode: 0o755 });
336
+ // Make executable
337
+ try {
338
+ execSync(`chmod +x "${mcpServerPath}"`);
339
+ }
340
+ catch {
341
+ // chmod might fail on some systems
342
+ }
343
+ // Create config file
344
+ const config = {
345
+ service: {
346
+ name: serviceName,
347
+ description: serviceDescription,
348
+ version: serviceVersion,
349
+ path: targetPath,
350
+ },
351
+ mcp: {
352
+ enabled: true,
353
+ tools: [],
354
+ },
355
+ };
356
+ fs.writeFileSync(mcpConfigPath, JSON.stringify(config, null, 2));
357
+ spinner.succeed("MCP server initialized");
358
+ console.log();
359
+ console.log(chalk.green("✓ Created files:"));
360
+ console.log(chalk.dim(` ${mcpServerPath}`));
361
+ console.log(chalk.dim(` ${mcpConfigPath}`));
362
+ console.log();
363
+ console.log(chalk.bold("Next steps:"));
364
+ console.log(chalk.dim("1. Edit .jfl-mcp.js to add custom tools"));
365
+ console.log(chalk.dim("2. Register service with GTM project:"));
366
+ console.log(chalk.dim(` jfl onboard ${targetPath}`));
367
+ console.log();
368
+ }
369
+ catch (error) {
370
+ spinner.fail("Failed to initialize MCP server");
371
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
372
+ process.exit(1);
373
+ }
374
+ }
375
+ //# sourceMappingURL=service-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-agent.js","sourceRoot":"","sources":["../../src/commands/service-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Service Manager API Server
3
+ *
4
+ * HTTP API for managing services across all JFL projects.
5
+ * Provides unified service status and control interface.
6
+ *
7
+ * @purpose Service Manager API daemon for TUI and external integration
8
+ */
9
+ export declare function serviceManagerCommand(action?: string, options?: {
10
+ port?: number;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=service-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-manager.d.ts","sourceRoot":"","sources":["../../src/commands/service-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+6BH,wBAAsB,qBAAqB,CACzC,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBAsLhC"}