@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 +39 -38
- package/dist/version.js +1 -1
- package/package.json +1 -1
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/
|
|
3074
|
-
var GLOBAL_INVOCATION = "floom
|
|
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
|
-
|
|
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://
|
|
3102
|
-
var DEFAULT_API_URL = "https://
|
|
3103
|
-
var TRUSTED_API_HOSTS = /* @__PURE__ */ new Set(["
|
|
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
|
-
|
|
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.
|
|
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://
|
|
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/
|
|
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://
|
|
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://
|
|
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/
|
|
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://
|
|
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
|
|
4018
|
-
Run: rm ${manifestPath(root)} && npx -y @floomhq/
|
|
4019
|
-
More help: https://
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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(
|
|
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(
|
|
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/
|
|
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://
|
|
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/
|
|
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/
|
|
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/
|
|
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
|
|
8122
|
-
out2.write(` ${chalk7.cyan.bold("floom
|
|
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://
|
|
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
|
|
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
|
|
8162
|
-
log.info("Run: floom
|
|
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
|
+
export const VERSION = "1.0.2";
|