jfl 0.2.0 ā 0.2.2
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/clawdbot-plugin/clawdbot.plugin.json +1 -12
- package/clawdbot-plugin/index.js +5 -5
- package/clawdbot-plugin/index.ts +5 -5
- package/clawdbot-skill/index.ts +40 -13
- package/dist/commands/context-hub.d.ts.map +1 -1
- package/dist/commands/context-hub.js +3 -3
- package/dist/commands/context-hub.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +138 -186
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/openclaw.d.ts.map +1 -1
- package/dist/commands/openclaw.js +5 -4
- package/dist/commands/openclaw.js.map +1 -1
- package/dist/commands/repair.d.ts.map +1 -1
- package/dist/commands/repair.js +13 -17
- package/dist/commands/repair.js.map +1 -1
- package/dist/commands/service-validate.d.ts.map +1 -1
- package/dist/commands/service-validate.js +5 -3
- package/dist/commands/service-validate.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +15 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/openclaw-sdk.d.ts.map +1 -1
- package/dist/lib/openclaw-sdk.js +2 -1
- package/dist/lib/openclaw-sdk.js.map +1 -1
- package/dist/lib/service-gtm.d.ts.map +1 -1
- package/dist/lib/service-gtm.js +2 -1
- package/dist/lib/service-gtm.js.map +1 -1
- package/dist/lib/service-utils.d.ts.map +1 -1
- package/dist/lib/service-utils.js +4 -3
- package/dist/lib/service-utils.js.map +1 -1
- package/dist/mcp/context-hub-mcp.js +2 -1
- package/dist/mcp/context-hub-mcp.js.map +1 -1
- package/dist/utils/context-hub-port.d.ts +33 -0
- package/dist/utils/context-hub-port.d.ts.map +1 -0
- package/dist/utils/context-hub-port.js +113 -0
- package/dist/utils/context-hub-port.js.map +1 -0
- package/dist/utils/ensure-context-hub.d.ts.map +1 -1
- package/dist/utils/ensure-context-hub.js +3 -2
- package/dist/utils/ensure-context-hub.js.map +1 -1
- package/dist/utils/jfl-config.js +18 -18
- package/dist/utils/jfl-config.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Hub Port Resolution
|
|
3
|
+
*
|
|
4
|
+
* Deterministic per-project port assignment for Context Hub.
|
|
5
|
+
* Prevents port conflicts when multiple JFL projects run simultaneously.
|
|
6
|
+
*
|
|
7
|
+
* Resolution order: env var > config.json > hash-based fallback
|
|
8
|
+
*
|
|
9
|
+
* @purpose Deterministic per-project Context Hub port resolution
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from "fs";
|
|
12
|
+
import * as path from "path";
|
|
13
|
+
const PORT_MIN = 4200;
|
|
14
|
+
const PORT_MAX = 4999;
|
|
15
|
+
const PORT_RANGE = PORT_MAX - PORT_MIN + 1;
|
|
16
|
+
/**
|
|
17
|
+
* djb2 hash of a string, mapped to port range 4200-4999
|
|
18
|
+
*/
|
|
19
|
+
export function computePortFromPath(projectPath) {
|
|
20
|
+
const normalized = path.resolve(projectPath);
|
|
21
|
+
let hash = 5381;
|
|
22
|
+
for (let i = 0; i < normalized.length; i++) {
|
|
23
|
+
hash = ((hash << 5) + hash + normalized.charCodeAt(i)) >>> 0;
|
|
24
|
+
}
|
|
25
|
+
return PORT_MIN + (hash % PORT_RANGE);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get the Context Hub port for the current project.
|
|
29
|
+
*
|
|
30
|
+
* Resolution order:
|
|
31
|
+
* 1. CONTEXT_HUB_PORT env var
|
|
32
|
+
* 2. .jfl/config.json ā contextHub.port
|
|
33
|
+
* 3. Hash-based fallback from project path
|
|
34
|
+
*/
|
|
35
|
+
export function getProjectPort(root) {
|
|
36
|
+
// 1. Env var
|
|
37
|
+
const envPort = process.env.CONTEXT_HUB_PORT;
|
|
38
|
+
if (envPort) {
|
|
39
|
+
const parsed = parseInt(envPort, 10);
|
|
40
|
+
if (!isNaN(parsed) && parsed > 0)
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
// 2. Config file
|
|
44
|
+
const projectRoot = root || process.cwd();
|
|
45
|
+
const configPath = path.join(projectRoot, ".jfl", "config.json");
|
|
46
|
+
if (fs.existsSync(configPath)) {
|
|
47
|
+
try {
|
|
48
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
49
|
+
if (config.contextHub?.port) {
|
|
50
|
+
return config.contextHub.port;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Fall through to hash
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// 3. Hash fallback
|
|
58
|
+
return computePortFromPath(projectRoot);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get the full Context Hub URL for the current project.
|
|
62
|
+
*/
|
|
63
|
+
export function getProjectHubUrl(root) {
|
|
64
|
+
return `http://localhost:${getProjectPort(root)}`;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Persist the computed port into .jfl/config.json and .mcp.json
|
|
68
|
+
* so all tools use the same port.
|
|
69
|
+
*/
|
|
70
|
+
export function persistProjectPort(root) {
|
|
71
|
+
const port = getProjectPort(root);
|
|
72
|
+
// Write to .jfl/config.json
|
|
73
|
+
const configPath = path.join(root, ".jfl", "config.json");
|
|
74
|
+
if (fs.existsSync(configPath)) {
|
|
75
|
+
try {
|
|
76
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
77
|
+
if (!config.contextHub)
|
|
78
|
+
config.contextHub = {};
|
|
79
|
+
config.contextHub.port = port;
|
|
80
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Non-fatal
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Write to .mcp.json
|
|
87
|
+
const mcpPath = path.join(root, ".mcp.json");
|
|
88
|
+
try {
|
|
89
|
+
let mcpConfig = {};
|
|
90
|
+
if (fs.existsSync(mcpPath)) {
|
|
91
|
+
mcpConfig = JSON.parse(fs.readFileSync(mcpPath, "utf-8"));
|
|
92
|
+
}
|
|
93
|
+
if (!mcpConfig.mcpServers)
|
|
94
|
+
mcpConfig.mcpServers = {};
|
|
95
|
+
if (!mcpConfig.mcpServers["jfl-context"]) {
|
|
96
|
+
mcpConfig.mcpServers["jfl-context"] = {
|
|
97
|
+
command: "jfl-context-hub-mcp",
|
|
98
|
+
args: [],
|
|
99
|
+
env: {}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
mcpConfig.mcpServers["jfl-context"].env = {
|
|
103
|
+
...mcpConfig.mcpServers["jfl-context"].env,
|
|
104
|
+
CONTEXT_HUB_URL: `http://localhost:${port}`
|
|
105
|
+
};
|
|
106
|
+
fs.writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2) + "\n");
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Non-fatal
|
|
110
|
+
}
|
|
111
|
+
return port;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=context-hub-port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-hub-port.js","sourceRoot":"","sources":["../../src/utils/context-hub-port.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-context-hub.d.ts","sourceRoot":"","sources":["../../src/utils/ensure-context-hub.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ensure-context-hub.d.ts","sourceRoot":"","sources":["../../src/utils/ensure-context-hub.ts"],"names":[],"mappings":"AAMA,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAA;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAqBD;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAMtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAE/D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Conf from "conf";
|
|
2
2
|
import { contextHubCommand } from "../commands/context-hub.js";
|
|
3
|
+
import { getProjectPort } from "./context-hub-port.js";
|
|
3
4
|
const config = new Conf({ projectName: "jfl" });
|
|
4
5
|
/**
|
|
5
6
|
* Check if context-hub is healthy by pinging health endpoint
|
|
@@ -30,7 +31,7 @@ export async function ensureContextHub() {
|
|
|
30
31
|
return;
|
|
31
32
|
// Default: global mode
|
|
32
33
|
const mode = contextHubConfig?.mode ?? "global";
|
|
33
|
-
const port = contextHubConfig?.port ??
|
|
34
|
+
const port = contextHubConfig?.port ?? getProjectPort();
|
|
34
35
|
try {
|
|
35
36
|
// First check if it's already running AND healthy
|
|
36
37
|
const healthy = await isContextHubHealthy(port);
|
|
@@ -52,7 +53,7 @@ export async function ensureContextHub() {
|
|
|
52
53
|
export function getContextHubConfig() {
|
|
53
54
|
return config.get("contextHub") || {
|
|
54
55
|
mode: "global",
|
|
55
|
-
port:
|
|
56
|
+
port: getProjectPort(),
|
|
56
57
|
autoStart: true
|
|
57
58
|
};
|
|
58
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-context-hub.js","sourceRoot":"","sources":["../../src/utils/ensure-context-hub.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"ensure-context-hub.js","sourceRoot":"","sources":["../../src/utils/ensure-context-hub.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;AAQ/C;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAA;QAE5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,SAAS,EAAE;YAC9D,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAA;QAEF,YAAY,CAAC,SAAS,CAAC,CAAA;QACvB,OAAO,QAAQ,CAAC,EAAE,CAAA;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAiC,CAAA;IAEjF,8BAA8B;IAC9B,MAAM,SAAS,GAAG,gBAAgB,EAAE,SAAS,IAAI,IAAI,CAAA;IACrD,IAAI,CAAC,SAAS;QAAE,OAAM;IAEtB,uBAAuB;IACvB,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,IAAI,QAAQ,CAAA;IAC/C,MAAM,IAAI,GAAG,gBAAgB,EAAE,IAAI,IAAI,cAAc,EAAE,CAAA;IAEvD,IAAI,CAAC;QACH,kDAAkD;QAClD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,iDAAiD;YACjD,OAAM;QACR,CAAC;QAED,iFAAiF;QACjF,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAA;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yDAAyD;QACzD,oDAAoD;IACtD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAQ,MAAM,CAAC,GAAG,CAAC,YAAY,CAAsB,IAAI;QACvD,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,cAAc,EAAE;QACtB,SAAS,EAAE,IAAI;KAChB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAqB;IACvD,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;AAC/B,CAAC"}
|
package/dist/utils/jfl-config.js
CHANGED
|
@@ -11,7 +11,7 @@ import { join } from "path";
|
|
|
11
11
|
import { homedir } from "os";
|
|
12
12
|
import path from "path";
|
|
13
13
|
import chalk from "chalk";
|
|
14
|
-
import
|
|
14
|
+
import * as p from "@clack/prompts";
|
|
15
15
|
import { JFL_PATHS, JFL_FILES, ensureJflDirs } from "./jfl-paths.js";
|
|
16
16
|
// Use XDG-compliant config path
|
|
17
17
|
const CONFIG_FILE = JFL_FILES.config;
|
|
@@ -61,23 +61,23 @@ export async function getCodeDirectory() {
|
|
|
61
61
|
return config.codeDirectory;
|
|
62
62
|
}
|
|
63
63
|
// First time - ask user
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
setConfig("codeDirectory",
|
|
79
|
-
|
|
80
|
-
return
|
|
64
|
+
const defaultDir = path.join(homedir(), "CascadeProjects");
|
|
65
|
+
const codeDir = await p.text({
|
|
66
|
+
message: "Where do you keep your code repos?",
|
|
67
|
+
placeholder: defaultDir,
|
|
68
|
+
defaultValue: defaultDir,
|
|
69
|
+
validate: (input) => {
|
|
70
|
+
if (!input.trim())
|
|
71
|
+
return "Directory required";
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
if (p.isCancel(codeDir)) {
|
|
75
|
+
return defaultDir;
|
|
76
|
+
}
|
|
77
|
+
const resolved = codeDir || defaultDir;
|
|
78
|
+
setConfig("codeDirectory", resolved);
|
|
79
|
+
p.log.success(`Saved code directory: ${resolved}`);
|
|
80
|
+
return resolved;
|
|
81
81
|
}
|
|
82
82
|
// ============================================================================
|
|
83
83
|
// Project Detection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jfl-config.js","sourceRoot":"","sources":["../../src/utils/jfl-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAa,MAAM,IAAI,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"jfl-config.js","sourceRoot":"","sources":["../../src/utils/jfl-config.ts"],"names":[],"mappings":"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"}
|