@floomhq/skills 1.0.1 → 1.0.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/dist/index.js CHANGED
@@ -3070,8 +3070,8 @@ import { mkdir as mkdir2, readFile as readFile3, writeFile, chmod } from "node:f
3070
3070
 
3071
3071
  // src/lib/invocation.ts
3072
3072
  var NPX_HINTS = ["_npx", "npm-cache/_npx", "npm-cache\\_npx", ".npm/_npx"];
3073
- var NPX_INVOCATION = "npx -y @floomhq/skills";
3074
- var GLOBAL_INVOCATION = "floom-skills";
3073
+ var NPX_INVOCATION = "npx -y @floomhq/floom";
3074
+ var GLOBAL_INVOCATION = "floom";
3075
3075
  var cached = null;
3076
3076
  function detect() {
3077
3077
  const override = process.env.FLOOM_INVOKED_AS;
@@ -3089,18 +3089,16 @@ function cliInvocation() {
3089
3089
  return cached;
3090
3090
  }
3091
3091
  function cliCmd(cmd) {
3092
- let stripped = cmd;
3093
- if (stripped.startsWith("floom-skills ")) stripped = stripped.slice("floom-skills ".length);
3094
- else if (stripped.startsWith("floom ")) stripped = stripped.slice("floom ".length);
3092
+ const stripped = cmd.startsWith("floom ") ? cmd.slice("floom ".length) : cmd;
3095
3093
  return `${cliInvocation()} ${stripped}`;
3096
3094
  }
3097
3095
 
3098
3096
  // src/config.ts
3099
3097
  var CONFIG_DIR = join3(homedir2(), ".floom");
3100
3098
  var AUTH_FILE = join3(CONFIG_DIR, "auth.json");
3101
- var DEFAULT_APP_URL = "https://skills.floom.dev";
3102
- var DEFAULT_API_URL = "https://skills.floom.dev/api/v1";
3103
- var TRUSTED_API_HOSTS = /* @__PURE__ */ new Set(["skills.floom.dev", "floom.dev", "try.floom.dev"]);
3099
+ var DEFAULT_APP_URL = "https://floom.dev";
3100
+ var DEFAULT_API_URL = "https://floom.dev/api/v1";
3101
+ var TRUSTED_API_HOSTS = /* @__PURE__ */ new Set(["floom.dev", "try.floom.dev"]);
3104
3102
  var LOOPBACK_HOSTS = /* @__PURE__ */ new Set(["localhost", "127.0.0.1"]);
3105
3103
  function devModeEnabled() {
3106
3104
  const v = process.env.FLOOM_DEV;
@@ -3126,8 +3124,7 @@ function trustedApiUrlOrDefault(apiUrl) {
3126
3124
  const trimmed = apiUrl.replace(/\/$/, "");
3127
3125
  if (!isTrustedApiUrl(trimmed)) return DEFAULT_API_URL;
3128
3126
  try {
3129
- const hostname2 = new URL(trimmed).hostname;
3130
- if (TRUSTED_API_HOSTS.has(hostname2)) return DEFAULT_API_URL;
3127
+ if (TRUSTED_API_HOSTS.has(new URL(trimmed).hostname)) return DEFAULT_API_URL;
3131
3128
  } catch {
3132
3129
  return DEFAULT_API_URL;
3133
3130
  }
@@ -3290,7 +3287,7 @@ async function getMachineIdentity() {
3290
3287
  }
3291
3288
 
3292
3289
  // src/version.ts
3293
- var VERSION = "1.0.1";
3290
+ var VERSION = "1.0.2";
3294
3291
 
3295
3292
  // src/api-client.ts
3296
3293
  var DEFAULT_TIMEOUT_MS = 2e4;
@@ -3337,7 +3334,7 @@ async function readLimitedText(res, limitBytes = MAX_ERROR_BODY_BYTES) {
3337
3334
  return truncated ? `${text}
3338
3335
  [truncated]` : text;
3339
3336
  }
3340
- var HELP = "https://skills.floom.dev/docs#troubleshooting";
3337
+ var HELP = "https://floom.dev/docs#troubleshooting";
3341
3338
  function friendlyApiErrorMessage(code, raw, status) {
3342
3339
  if (code === "AUTH_REQUIRED" || code === "TOKEN_INVALID" || status === 401) {
3343
3340
  return `Not signed in.
@@ -3364,7 +3361,7 @@ function friendlyApiErrorMessage(code, raw, status) {
3364
3361
  }
3365
3362
  if (code === "CLI_VERSION_TOO_OLD") {
3366
3363
  return `Your CLI is out of date.
3367
- Run: npm i -g @floomhq/skills@latest
3364
+ Run: npm i -g @floomhq/floom@latest
3368
3365
  More help: ${HELP}`;
3369
3366
  }
3370
3367
  if (code === "FILE_TOO_LARGE" || code === "BUNDLE_TOO_LARGE") {
@@ -3385,7 +3382,7 @@ async function api(path, opts = {}) {
3385
3382
  "AUTH_REQUIRED",
3386
3383
  `Not signed in.
3387
3384
  Run: ${cliCmd("login")}
3388
- More help: https://skills.floom.dev/docs#troubleshooting`
3385
+ More help: https://floom.dev/docs#troubleshooting`
3389
3386
  );
3390
3387
  }
3391
3388
  let lastError = null;
@@ -3421,7 +3418,7 @@ async function api(path, opts = {}) {
3421
3418
  "INTERNAL_ERROR",
3422
3419
  `Cannot reach Floom (${base}): ${e.message}
3423
3420
  Check your internet connection or firewall. If on a corporate network, you may need to set a proxy: npm config set proxy http://...
3424
- More help: https://skills.floom.dev/docs#troubleshooting`,
3421
+ More help: https://floom.dev/docs#troubleshooting`,
3425
3422
  { apiUrl: base }
3426
3423
  );
3427
3424
  continue;
@@ -3775,7 +3772,7 @@ async function loginCommand() {
3775
3772
  ]);
3776
3773
  if (cliCmd("login").startsWith("npx ")) {
3777
3774
  log.blank();
3778
- log.info(" Tip: install once with npm i -g @floomhq/skills and just type `floom-skills` after that.");
3775
+ log.info(" Tip: install once with npm i -g @floomhq/floom and just type `floom` after that.");
3779
3776
  }
3780
3777
  return;
3781
3778
  }
@@ -3796,7 +3793,7 @@ async function loginCommand() {
3796
3793
  log.err("Login timed out \u2014 the browser window expired.");
3797
3794
  printNext([
3798
3795
  { command: cliCmd("login"), description: "try again" },
3799
- { command: "More help: https://skills.floom.dev/docs#troubleshooting" }
3796
+ { command: "More help: https://floom.dev/docs#troubleshooting" }
3800
3797
  ]);
3801
3798
  process.exitCode = 1;
3802
3799
  }
@@ -4014,9 +4011,9 @@ async function readManifest(root) {
4014
4011
  if (err.code === "ENOENT") return null;
4015
4012
  if (error instanceof SyntaxError || error instanceof ZodError) {
4016
4013
  throw new Error(
4017
- `Corrupted manifest at ${manifestPath(root)}. Remove that file or run floom-skills pull after backing up local edits.
4018
- Run: rm ${manifestPath(root)} && npx -y @floomhq/skills pull
4019
- More help: https://skills.floom.dev/docs#troubleshooting`
4014
+ `Corrupted manifest at ${manifestPath(root)}. Remove that file or run floom pull after backing up local edits.
4015
+ Run: rm ${manifestPath(root)} && npx -y @floomhq/floom pull
4016
+ More help: https://floom.dev/docs#troubleshooting`
4020
4017
  );
4021
4018
  }
4022
4019
  throw error;
@@ -4505,7 +4502,7 @@ function createMcpServer(deps = {}) {
4505
4502
  query,
4506
4503
  status: "error",
4507
4504
  message: err.message,
4508
- hint: "Run: npx -y @floomhq/skills login"
4505
+ hint: "Run: npx -y @floomhq/floom login"
4509
4506
  });
4510
4507
  }
4511
4508
  }
@@ -4541,7 +4538,7 @@ function createMcpServer(deps = {}) {
4541
4538
  slug,
4542
4539
  status: "error",
4543
4540
  message: err.message,
4544
- hint: "Run: npx -y @floomhq/skills login"
4541
+ hint: "Run: npx -y @floomhq/floom login"
4545
4542
  });
4546
4543
  }
4547
4544
  }
@@ -4593,10 +4590,10 @@ async function mcpCommand() {
4593
4590
  This command is launched by your AI agent, not run directly.
4594
4591
 
4595
4592
  Add this to your agent's MCP configuration:
4596
- {"command":"npx","args":["-y","@floomhq/skills","mcp"]}
4593
+ {"command":"npx","args":["-y","@floomhq/floom","mcp"]}
4597
4594
 
4598
4595
  Claude Code users can instead run:
4599
- claude mcp add floom -- npx -y @floomhq/skills mcp
4596
+ claude mcp add floom -- npx -y @floomhq/floom mcp
4600
4597
 
4601
4598
  Press Ctrl+C to stop.
4602
4599
  `
@@ -6616,7 +6613,7 @@ async function renameDeviceCommand(newLabel) {
6616
6613
  // src/commands/install.ts
6617
6614
  init_src();
6618
6615
  import { mkdir as mkdir6, rm as rm3, writeFile as writeFile5, stat as stat7, readFile as readFile11 } from "node:fs/promises";
6619
- import { join as join12, resolve as resolve8 } from "node:path";
6616
+ import { dirname as dirname2, join as join12, resolve as resolve8 } from "node:path";
6620
6617
  init_runtime();
6621
6618
  init_prompt();
6622
6619
  var TOKEN_RE = /^fls_[A-Za-z0-9_-]{32,}$/;
@@ -6699,6 +6696,10 @@ async function fetchPublicShare(token) {
6699
6696
  }
6700
6697
  return candidate;
6701
6698
  }
6699
+ var nativePathOperations = { dirname: dirname2 };
6700
+ function installParentDirectory(destination, pathOperations = nativePathOperations) {
6701
+ return pathOperations.dirname(destination);
6702
+ }
6702
6703
  async function installToDir(target, slug, files) {
6703
6704
  const finalDir = join12(target.skillsDir, slug);
6704
6705
  const tempDir = join12(target.skillsDir, ".floom", "tmp", `${slug}-install-${Date.now()}`);
@@ -6708,7 +6709,7 @@ async function installToDir(target, slug, files) {
6708
6709
  for (const file of files) {
6709
6710
  const safePath = safeRemotePath2(file.path);
6710
6711
  const dest = join12(tempDir, ...safePath.split("/"));
6711
- await mkdir6(dest.substring(0, dest.lastIndexOf("/")), { recursive: true });
6712
+ await mkdir6(installParentDirectory(dest), { recursive: true });
6712
6713
  await writeFile5(dest, bytesForShareFile(file));
6713
6714
  }
6714
6715
  const { rename: rename2 } = await import("node:fs/promises");
@@ -6719,7 +6720,7 @@ async function installToDir(target, slug, files) {
6719
6720
  const { cp: cp4 } = await import("node:fs/promises");
6720
6721
  const stamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
6721
6722
  const backupDest = join12(target.skillsDir, ".floom", "backups", slug, stamp);
6722
- await mkdir6(backupDest.substring(0, backupDest.lastIndexOf("/")), { recursive: true });
6723
+ await mkdir6(installParentDirectory(backupDest), { recursive: true });
6723
6724
  await cp4(finalDir, backupDest, { recursive: true });
6724
6725
  await rename2(finalDir, replacedDir);
6725
6726
  movedExisting = true;
@@ -7249,7 +7250,7 @@ function npmLatest() {
7249
7250
  return new Promise((resolveP) => {
7250
7251
  let child;
7251
7252
  try {
7252
- child = spawn3("npm", ["view", "@floomhq/skills", "version"], { stdio: ["ignore", "pipe", "ignore"] });
7253
+ child = spawn3("npm", ["view", "@floomhq/floom", "version"], { stdio: ["ignore", "pipe", "ignore"] });
7253
7254
  } catch {
7254
7255
  resolveP(null);
7255
7256
  return;
@@ -7302,7 +7303,7 @@ async function doctorCommand(opts = {}) {
7302
7303
  }
7303
7304
  }
7304
7305
  if (authOk) {
7305
- checks.push({ name: "api", status: "pass", message: "https://skills.floom.dev reachable", fix: null });
7306
+ checks.push({ name: "api", status: "pass", message: "https://floom.dev reachable", fix: null });
7306
7307
  } else {
7307
7308
  checks.push({ name: "api", status: "warn", message: "skipped \u2014 sign in first", fix: cliCmd("login") });
7308
7309
  }
@@ -7369,11 +7370,11 @@ async function doctorCommand(opts = {}) {
7369
7370
  }
7370
7371
  const latest = await npmLatest();
7371
7372
  if (!latest) {
7372
- checks.push({ name: "version", status: "warn", message: `@floomhq/skills ${VERSION}; latest version unreachable`, fix: null });
7373
+ checks.push({ name: "version", status: "warn", message: `@floomhq/floom ${VERSION}; latest version unreachable`, fix: null });
7373
7374
  } else if (significantlyOutdated(VERSION, latest)) {
7374
- checks.push({ name: "version", status: "warn", message: `@floomhq/skills ${VERSION} installed, latest is ${latest}`, fix: "npx -y @floomhq/skills@latest" });
7375
+ checks.push({ name: "version", status: "warn", message: `@floomhq/floom ${VERSION} installed, latest is ${latest}`, fix: "npx -y @floomhq/floom@latest" });
7375
7376
  } else {
7376
- checks.push({ name: "version", status: "pass", message: `@floomhq/skills ${VERSION} is current`, fix: null });
7377
+ checks.push({ name: "version", status: "pass", message: `@floomhq/floom ${VERSION} is current`, fix: null });
7377
7378
  }
7378
7379
  const failures = checks.filter((c) => c.status === "fail");
7379
7380
  const warnings = checks.filter((c) => c.status === "warn");
@@ -8118,8 +8119,8 @@ var COMMON_FLAGS = `Common flags
8118
8119
  --no-secret-check with push, skip the pre-publish secret scan`;
8119
8120
  function printGroupedHelp() {
8120
8121
  const out2 = process.stdout;
8121
- out2.write("\n" + chalk7.bold("Usage: floom-skills [command]") + "\n\n");
8122
- out2.write(` ${chalk7.cyan.bold("floom-skills")} your dashboard \u2014 Library and agent status at a glance
8122
+ out2.write("\n" + chalk7.bold("Usage: floom [command]") + "\n\n");
8123
+ out2.write(` ${chalk7.cyan.bold("floom")} your dashboard \u2014 Library and agent status at a glance
8123
8124
  `);
8124
8125
  const allNames = GROUPS.flatMap((g) => g.rows.map((r) => r.name));
8125
8126
  const width = Math.max(...allNames.map((n) => n.length), 14);
@@ -8132,7 +8133,7 @@ function printGroupedHelp() {
8132
8133
  }
8133
8134
  }
8134
8135
  out2.write("\n" + COMMON_FLAGS + "\n");
8135
- out2.write("\n" + chalk7.dim("More help: https://skills.floom.dev/docs") + "\n");
8136
+ out2.write("\n" + chalk7.dim("More help: https://floom.dev/docs") + "\n");
8136
8137
  }
8137
8138
 
8138
8139
  // src/index.ts
@@ -8143,7 +8144,7 @@ function aliasNotice(oldName, newName) {
8143
8144
  log.notice(`"${oldName}" is now "${newName}" \u2014 both work for now.`);
8144
8145
  }
8145
8146
  var program = new Command();
8146
- program.name("floom-skills").description("Floom Skills: one shared skill library, synced across every AI agent.").version(VERSION).addHelpCommand(false).helpOption("-h, --help", "show grouped help").allowExcessArguments(true).showSuggestionAfterError(true).showHelpAfterError(false);
8147
+ program.name("floom").description("Floom: one shared skill library, synced across every AI agent.").version(VERSION).addHelpCommand(false).helpOption("-h, --help", "show grouped help").allowExcessArguments(true).showSuggestionAfterError(true).showHelpAfterError(false);
8147
8148
  program.helpInformation = function helpInformation() {
8148
8149
  printGroupedHelp();
8149
8150
  return "";
@@ -8158,8 +8159,8 @@ program.action(async (_opts, cmd) => {
8158
8159
  log.err(`unknown command: ${unknown}`);
8159
8160
  const knownNames = program.commands.map((c) => c.name());
8160
8161
  const suggestion = closestCommand(unknown, knownNames);
8161
- if (suggestion) log.info(`Did you mean: floom-skills ${suggestion}?`);
8162
- log.info("Run: floom-skills --help");
8162
+ if (suggestion) log.info(`Did you mean: floom ${suggestion}?`);
8163
+ log.info("Run: floom --help");
8163
8164
  process.exitCode = 2;
8164
8165
  return;
8165
8166
  }
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = "1.0.1";
1
+ export const VERSION = "1.0.2";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floomhq/skills",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Floom Skills CLI \u2014 publish, install, sync, and share AI agent skills.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://skills.floom.dev",