lokuma-cli 1.3.1 → 1.3.3

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 (3) hide show
  1. package/README.md +6 -0
  2. package/dist/index.js +40 -22
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -14,6 +14,12 @@ Already installed and just want the latest CLI?
14
14
  lokuma update
15
15
  ```
16
16
 
17
+ Update the CLI and refresh an installed skill in one step:
18
+
19
+ ```bash
20
+ lokuma update --ai openclaw
21
+ ```
22
+
17
23
  ## Supported AI Assistants
18
24
 
19
25
  | Flag | Assistant |
package/dist/index.js CHANGED
@@ -54,22 +54,22 @@ var AI_DISPLAY_NAMES = {
54
54
  all: "All assistants"
55
55
  };
56
56
  var AI_SKILL_PATHS = {
57
- claude: { root: ".claude", skillMd: ".claude/skills/frontend-designer/SKILL.md", scriptPy: ".claude/skills/frontend-designer/scripts/search.py" },
58
- cursor: { root: ".cursor", skillMd: ".cursor/rules/frontend-designer.mdc", scriptPy: ".cursor/rules/frontend-designer/scripts/search.py" },
59
- windsurf: { root: ".windsurf", skillMd: ".windsurf/rules/frontend-designer.md", scriptPy: ".windsurf/rules/frontend-designer/scripts/search.py" },
60
- copilot: { root: ".github", skillMd: ".github/instructions/frontend-designer.instructions.md", scriptPy: ".github/instructions/frontend-designer/scripts/search.py" },
61
- kiro: { root: ".kiro", skillMd: ".kiro/steering/frontend-designer.md", scriptPy: ".kiro/steering/frontend-designer/scripts/search.py" },
62
- roocode: { root: ".roo", skillMd: ".roo/rules/frontend-designer.md", scriptPy: ".roo/rules/frontend-designer/scripts/search.py" },
63
- codex: { root: ".codex", skillMd: ".codex/instructions.md", scriptPy: ".codex/frontend-designer/scripts/search.py" },
64
- qoder: { root: ".qoder", skillMd: ".qoder/rules/frontend-designer.md", scriptPy: ".qoder/rules/frontend-designer/scripts/search.py" },
65
- gemini: { root: ".gemini", skillMd: ".gemini/GEMINI.md", scriptPy: ".gemini/frontend-designer/scripts/search.py" },
66
- trae: { root: ".trae", skillMd: ".trae/rules/frontend-designer.md", scriptPy: ".trae/rules/frontend-designer/scripts/search.py" },
67
- opencode: { root: ".opencode", skillMd: ".opencode/OPENCODE.md", scriptPy: ".opencode/frontend-designer/scripts/search.py" },
68
- continue: { root: ".continue", skillMd: ".continue/frontend-designer/SKILL.md", scriptPy: ".continue/frontend-designer/scripts/search.py" },
69
- codebuddy: { root: ".codebuddy", skillMd: ".codebuddy/frontend-designer/SKILL.md", scriptPy: ".codebuddy/frontend-designer/scripts/search.py" },
70
- droid: { root: ".factory", skillMd: ".factory/skills/frontend-designer/SKILL.md", scriptPy: ".factory/skills/frontend-designer/scripts/search.py" },
57
+ claude: { root: ".claude", skillMd: ".claude/skills/lokuma/SKILL.md", scriptPy: ".claude/skills/lokuma/scripts/search.py" },
58
+ cursor: { root: ".cursor", skillMd: ".cursor/rules/lokuma.mdc", scriptPy: ".cursor/rules/lokuma/scripts/search.py" },
59
+ windsurf: { root: ".windsurf", skillMd: ".windsurf/rules/lokuma.md", scriptPy: ".windsurf/rules/lokuma/scripts/search.py" },
60
+ copilot: { root: ".github", skillMd: ".github/instructions/lokuma.instructions.md", scriptPy: ".github/instructions/lokuma/scripts/search.py" },
61
+ kiro: { root: ".kiro", skillMd: ".kiro/steering/lokuma.md", scriptPy: ".kiro/steering/lokuma/scripts/search.py" },
62
+ roocode: { root: ".roo", skillMd: ".roo/rules/lokuma.md", scriptPy: ".roo/rules/lokuma/scripts/search.py" },
63
+ codex: { root: ".codex", skillMd: ".codex/instructions.md", scriptPy: ".codex/lokuma/scripts/search.py" },
64
+ qoder: { root: ".qoder", skillMd: ".qoder/rules/lokuma.md", scriptPy: ".qoder/rules/lokuma/scripts/search.py" },
65
+ gemini: { root: ".gemini", skillMd: ".gemini/GEMINI.md", scriptPy: ".gemini/lokuma/scripts/search.py" },
66
+ trae: { root: ".trae", skillMd: ".trae/rules/lokuma.md", scriptPy: ".trae/rules/lokuma/scripts/search.py" },
67
+ opencode: { root: ".opencode", skillMd: ".opencode/OPENCODE.md", scriptPy: ".opencode/lokuma/scripts/search.py" },
68
+ continue: { root: ".continue", skillMd: ".continue/lokuma/SKILL.md", scriptPy: ".continue/lokuma/scripts/search.py" },
69
+ codebuddy: { root: ".codebuddy", skillMd: ".codebuddy/lokuma/SKILL.md", scriptPy: ".codebuddy/lokuma/scripts/search.py" },
70
+ droid: { root: ".factory", skillMd: ".factory/skills/lokuma/SKILL.md", scriptPy: ".factory/skills/lokuma/scripts/search.py" },
71
71
  // OpenClaw installs to a fixed absolute path (not relative to cwd)
72
- openclaw: { root: "~/.openclaw/workspace/skills/frontend-designer", skillMd: "~/.openclaw/workspace/skills/frontend-designer/SKILL.md", scriptPy: "~/.openclaw/workspace/skills/frontend-designer/scripts/search.py" }
72
+ openclaw: { root: "~/.openclaw/workspace/skills/lokuma", skillMd: "~/.openclaw/workspace/skills/lokuma/SKILL.md", scriptPy: "~/.openclaw/workspace/skills/lokuma/scripts/search.py" }
73
73
  };
74
74
 
75
75
  // src/commands/init.ts
@@ -331,20 +331,28 @@ async function initCommand(options) {
331
331
  await mkdir(dirname(paths.scriptPy), { recursive: true });
332
332
  await writeFile(paths.skillMd, buildSkillMd(paths.scriptPy), "utf-8");
333
333
  await writeFile(paths.scriptPy, SEARCH_PY, "utf-8");
334
- installed.push(AI_DISPLAY_NAMES[t]);
334
+ installed.push({ name: AI_DISPLAY_NAMES[t], skillMd: paths.skillMd, scriptPy: paths.scriptPy });
335
335
  }
336
336
  spinner.succeed("Done!");
337
337
  if (installed.length > 0) {
338
338
  console.log();
339
- installed.forEach((name) => console.log(chalk.green(` \u2713 ${name}`)));
339
+ for (const item of installed) {
340
+ console.log(chalk.green(` \u2713 ${item.name}`));
341
+ console.log(chalk.dim(` skill : ${item.skillMd}`));
342
+ console.log(chalk.dim(` search: ${item.scriptPy}`));
343
+ }
340
344
  }
341
345
  console.log();
342
346
  console.log(chalk.bold(" Next steps:"));
343
347
  console.log(chalk.dim(" 1. Set your API key:"));
344
348
  console.log(chalk.cyan(" export LOKUMA_API_KEY=lokuma_your_key_here"));
345
- console.log(chalk.dim(" 2. Get a key \u2192 https://lokuma.io"));
349
+ console.log(chalk.dim(" 2. Get a key \u2192 https://lokuma.ai"));
346
350
  console.log(chalk.dim(" 3. Restart your AI assistant"));
347
- console.log(chalk.dim(' 4. Try: "Build a landing page for a SaaS product"'));
351
+ console.log();
352
+ console.log(chalk.bold(" Try it now \u2014 tell your AI assistant:"));
353
+ console.log(chalk.cyan(' "Build a coffee shop website by lokuma"'));
354
+ console.log(chalk.dim(' "Design a landing page for a SaaS startup by lokuma"'));
355
+ console.log(chalk.dim(' "Create a mobile app UI for a meditation app by lokuma"'));
348
356
  console.log();
349
357
  } catch (err) {
350
358
  spinner.fail("Installation failed");
@@ -456,7 +464,7 @@ async function authLoginCommand() {
456
464
  // src/commands/update.ts
457
465
  import { execSync } from "node:child_process";
458
466
  import chalk3 from "chalk";
459
- async function updateCommand() {
467
+ async function updateCommand(options = {}) {
460
468
  console.log();
461
469
  console.log(chalk3.bold(" Lokuma \u2014 CLI Update"));
462
470
  console.log(chalk3.dim(" Updating lokuma-cli to the latest npm release..."));
@@ -466,6 +474,11 @@ async function updateCommand() {
466
474
  const version = execSync("lokuma --version", { encoding: "utf-8" }).trim();
467
475
  console.log();
468
476
  console.log(chalk3.green(` \u2713 Updated successfully to ${version}`));
477
+ if (options.ai && options.ai !== "all") {
478
+ console.log();
479
+ console.log(chalk3.dim(` Refreshing installed skill for ${options.ai}...`));
480
+ await initCommand({ ai: options.ai, force: true });
481
+ }
469
482
  console.log();
470
483
  } catch (error) {
471
484
  console.log();
@@ -497,7 +510,12 @@ var auth = program.command("auth").description("Manage authentication");
497
510
  auth.command("login").description("Set or update your Lokuma API key").action(async () => {
498
511
  await authLoginCommand();
499
512
  });
500
- program.command("update").description("Update lokuma-cli to the latest version from npm").action(async () => {
501
- await updateCommand();
513
+ program.command("update").description("Update lokuma-cli to the latest version from npm").option("-a, --ai <type>", `Reinstall skill for a specific AI assistant after updating (${AI_TYPES.join(", ")})`).action(async (options) => {
514
+ if (options.ai && !AI_TYPES.includes(options.ai)) {
515
+ console.error(`Invalid AI type: ${options.ai}`);
516
+ console.error(`Valid types: ${AI_TYPES.join(", ")}`);
517
+ process.exit(1);
518
+ }
519
+ await updateCommand({ ai: options.ai });
502
520
  });
503
521
  program.parse();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lokuma-cli",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "CLI to install Lokuma design intelligence skill for AI coding assistants",
5
5
  "type": "module",
6
6
  "bin": {