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.
Files changed (45) hide show
  1. package/clawdbot-plugin/clawdbot.plugin.json +1 -12
  2. package/clawdbot-plugin/index.js +5 -5
  3. package/clawdbot-plugin/index.ts +5 -5
  4. package/clawdbot-skill/index.ts +40 -13
  5. package/dist/commands/context-hub.d.ts.map +1 -1
  6. package/dist/commands/context-hub.js +3 -3
  7. package/dist/commands/context-hub.js.map +1 -1
  8. package/dist/commands/init.d.ts.map +1 -1
  9. package/dist/commands/init.js +138 -186
  10. package/dist/commands/init.js.map +1 -1
  11. package/dist/commands/openclaw.d.ts.map +1 -1
  12. package/dist/commands/openclaw.js +5 -4
  13. package/dist/commands/openclaw.js.map +1 -1
  14. package/dist/commands/repair.d.ts.map +1 -1
  15. package/dist/commands/repair.js +13 -17
  16. package/dist/commands/repair.js.map +1 -1
  17. package/dist/commands/service-validate.d.ts.map +1 -1
  18. package/dist/commands/service-validate.js +5 -3
  19. package/dist/commands/service-validate.js.map +1 -1
  20. package/dist/commands/update.d.ts.map +1 -1
  21. package/dist/commands/update.js +15 -0
  22. package/dist/commands/update.js.map +1 -1
  23. package/dist/index.js +2 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/openclaw-sdk.d.ts.map +1 -1
  26. package/dist/lib/openclaw-sdk.js +2 -1
  27. package/dist/lib/openclaw-sdk.js.map +1 -1
  28. package/dist/lib/service-gtm.d.ts.map +1 -1
  29. package/dist/lib/service-gtm.js +2 -1
  30. package/dist/lib/service-gtm.js.map +1 -1
  31. package/dist/lib/service-utils.d.ts.map +1 -1
  32. package/dist/lib/service-utils.js +4 -3
  33. package/dist/lib/service-utils.js.map +1 -1
  34. package/dist/mcp/context-hub-mcp.js +2 -1
  35. package/dist/mcp/context-hub-mcp.js.map +1 -1
  36. package/dist/utils/context-hub-port.d.ts +33 -0
  37. package/dist/utils/context-hub-port.d.ts.map +1 -0
  38. package/dist/utils/context-hub-port.js +113 -0
  39. package/dist/utils/context-hub-port.js.map +1 -0
  40. package/dist/utils/ensure-context-hub.d.ts.map +1 -1
  41. package/dist/utils/ensure-context-hub.js +3 -2
  42. package/dist/utils/ensure-context-hub.js.map +1 -1
  43. package/dist/utils/jfl-config.js +18 -18
  44. package/dist/utils/jfl-config.js.map +1 -1
  45. 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":"AAKA,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
+ {"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 ?? 4242;
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: 4242,
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;AAE9D,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,IAAI,CAAA;IAE3C,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,IAAI;QACV,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"}
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"}
@@ -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 inquirer from "inquirer";
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
- console.log(chalk.cyan("\nšŸ“ Code Directory Setup\n"));
65
- console.log(chalk.gray("Where do you keep your code repos?\n"));
66
- const { codeDir } = await inquirer.prompt([{
67
- type: "input",
68
- name: "codeDir",
69
- message: "Code directory:",
70
- default: path.join(homedir(), "code"),
71
- validate: (input) => {
72
- if (!input.trim())
73
- return "Directory required";
74
- return true;
75
- }
76
- }]);
77
- // Save preference
78
- setConfig("codeDirectory", codeDir);
79
- console.log(chalk.green(`āœ“ Saved code directory: ${codeDir}\n`));
80
- return codeDir;
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":"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"}
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,KAAK,CAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEpE,gCAAgC;AAChC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAA;AAEpC,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAM,UAAU,YAAY;IAC1B,aAAa,EAAE,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,YAAY,EAAE,CAAA;IAEd,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACvD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,WAAW,kBAAkB,CAAC,CAAC,CAAA;QAC5E,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,KAAU;IAC/C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACnB,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACpE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,YAAkB;IAC5D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACpE,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AAChE,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,aAAa,CAAA;IAC7B,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;QAC3B,OAAO,EAAE,oCAAoC;QAC7C,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,UAAU;QACxB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBAAE,OAAO,oBAAoB,CAAA;QAChD,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,QAAQ,GAAI,OAAkB,IAAI,UAAU,CAAA;IAClD,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IACpC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAA;IAElD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAM,UAAU,cAAc,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACxD,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,YAAoB,OAAO,CAAC,GAAG,EAAE;IAC/D,IAAI,WAAW,GAAG,SAAS,CAAA;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAA;IAEzC,OAAO,WAAW,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,WAAW,CAAA;QACpB,CAAC;QACD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,MAAM,UAAU,gBAAgB;IAC9B,kCAAkC;IAClC,MAAM,WAAW,GAAG,eAAe,EAAE,CAAA;IAErC,IAAI,WAAW,EAAE,CAAC;QAChB,yCAAyC;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IAC5C,CAAC;IAED,0DAA0D;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;AACvD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jfl",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Just Fucking Launch - CLI for AI-powered GTM and development",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",