@floomhq/skills 0.2.9 → 0.2.10
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 +106 -30
- package/dist/index.js.map +3 -3
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../node_modules/.pnpm/bcryptjs@2.4.3/node_modules/bcryptjs/dist/bcrypt.js", "../../../node_modules/.pnpm/bcryptjs@2.4.3/node_modules/bcryptjs/index.js", "../src/index.ts", "../../shared/src/manifest.ts", "../../shared/src/slug.ts", "../../shared/src/errors.ts", "../../shared/src/frontmatter.ts", "../../shared/src/api-keys.ts", "../../shared/src/install-targets.ts", "../../shared/src/security-scan.ts", "../../shared/src/skill-package.ts", "../src/lib/output.ts", "../src/commands/login.ts", "../src/config.ts", "../src/version.ts", "../src/api-client.ts", "../src/commands/logout.ts", "../src/commands/whoami.ts", "../src/commands/init.ts", "../src/commands/validate.ts", "../src/commands/publish.ts", "../src/commands/install.ts", "../src/lib/floom-lock.ts", "../src/commands/installed.ts", "../src/commands/outdated.ts", "../src/commands/update.ts", "../src/commands/list.ts", "../src/commands/info.ts", "../src/commands/share.ts", "../src/commands/library.ts", "../src/lib/config-file.ts", "../src/commands/instruction.ts", "../src/commands/workspace-config.ts", "../src/commands/sync.ts", "../src/commands/pin.ts", "../src/commands/mcp.ts", "../src/commands/doctor.ts"],
|
|
4
|
-
"sourcesContent": ["/*\r\n Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>\r\n Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>\r\n Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>\r\n\r\n Redistribution and use in source and binary forms, with or without\r\n modification, are permitted provided that the following conditions\r\n are met:\r\n 1. Redistributions of source code must retain the above copyright\r\n notice, this list of conditions and the following disclaimer.\r\n 2. Redistributions in binary form must reproduce the above copyright\r\n notice, this list of conditions and the following disclaimer in the\r\n documentation and/or other materials provided with the distribution.\r\n 3. The name of the author may not be used to endorse or promote products\r\n derived from this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\r\n IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\r\n OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\n NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\n/**\r\n * @license bcrypt.js (c) 2013 Daniel Wirtz <dcode@dcode.io>\r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/bcrypt.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n define([], factory);\r\n /* CommonJS */ else if (typeof require === 'function' && typeof module === \"object\" && module && module[\"exports\"])\r\n module[\"exports\"] = factory();\r\n /* Global */ else\r\n (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"bcrypt\"] = factory();\r\n\r\n}(this, function() {\r\n \"use strict\";\r\n\r\n /**\r\n * bcrypt namespace.\r\n * @type {Object.<string,*>}\r\n */\r\n var bcrypt = {};\r\n\r\n /**\r\n * The random implementation to use as a fallback.\r\n * @type {?function(number):!Array.<number>}\r\n * @inner\r\n */\r\n var randomFallback = null;\r\n\r\n /**\r\n * Generates cryptographically secure random bytes.\r\n * @function\r\n * @param {number} len Bytes length\r\n * @returns {!Array.<number>} Random bytes\r\n * @throws {Error} If no random implementation is available\r\n * @inner\r\n */\r\n function random(len) {\r\n /* node */ if (typeof module !== 'undefined' && module && module['exports'])\r\n try {\r\n return require(\"crypto\")['randomBytes'](len);\r\n } catch (e) {}\r\n /* WCA */ try {\r\n var a; (self['crypto']||self['msCrypto'])['getRandomValues'](a = new Uint32Array(len));\r\n return Array.prototype.slice.call(a);\r\n } catch (e) {}\r\n /* fallback */ if (!randomFallback)\r\n throw Error(\"Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative\");\r\n return randomFallback(len);\r\n }\r\n\r\n // Test if any secure randomness source is available\r\n var randomAvailable = false;\r\n try {\r\n random(1);\r\n randomAvailable = true;\r\n } catch (e) {}\r\n\r\n // Default fallback, if any\r\n randomFallback = null;\r\n /**\r\n * Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto\r\n * API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it\r\n * is seeded properly!\r\n * @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its\r\n * sole argument, returning the corresponding array of cryptographically secure random byte values.\r\n * @see http://nodejs.org/api/crypto.html\r\n * @see http://www.w3.org/TR/WebCryptoAPI/\r\n */\r\n bcrypt.setRandomFallback = function(random) {\r\n randomFallback = random;\r\n };\r\n\r\n /**\r\n * Synchronously generates a salt.\r\n * @param {number=} rounds Number of rounds to use, defaults to 10 if omitted\r\n * @param {number=} seed_length Not supported.\r\n * @returns {string} Resulting salt\r\n * @throws {Error} If a random fallback is required but not set\r\n * @expose\r\n */\r\n bcrypt.genSaltSync = function(rounds, seed_length) {\r\n rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;\r\n if (typeof rounds !== 'number')\r\n throw Error(\"Illegal arguments: \"+(typeof rounds)+\", \"+(typeof seed_length));\r\n if (rounds < 4)\r\n rounds = 4;\r\n else if (rounds > 31)\r\n rounds = 31;\r\n var salt = [];\r\n salt.push(\"$2a$\");\r\n if (rounds < 10)\r\n salt.push(\"0\");\r\n salt.push(rounds.toString());\r\n salt.push('$');\r\n salt.push(base64_encode(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw\r\n return salt.join('');\r\n };\r\n\r\n /**\r\n * Asynchronously generates a salt.\r\n * @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted\r\n * @param {(number|function(Error, string=))=} seed_length Not supported.\r\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt\r\n * @returns {!Promise} If `callback` has been omitted\r\n * @throws {Error} If `callback` is present but not a function\r\n * @expose\r\n */\r\n bcrypt.genSalt = function(rounds, seed_length, callback) {\r\n if (typeof seed_length === 'function')\r\n callback = seed_length,\r\n seed_length = undefined; // Not supported.\r\n if (typeof rounds === 'function')\r\n callback = rounds,\r\n rounds = undefined;\r\n if (typeof rounds === 'undefined')\r\n rounds = GENSALT_DEFAULT_LOG2_ROUNDS;\r\n else if (typeof rounds !== 'number')\r\n throw Error(\"illegal arguments: \"+(typeof rounds));\r\n\r\n function _async(callback) {\r\n nextTick(function() { // Pretty thin, but salting is fast enough\r\n try {\r\n callback(null, bcrypt.genSaltSync(rounds));\r\n } catch (err) {\r\n callback(err);\r\n }\r\n });\r\n }\r\n\r\n if (callback) {\r\n if (typeof callback !== 'function')\r\n throw Error(\"Illegal callback: \"+typeof(callback));\r\n _async(callback);\r\n } else\r\n return new Promise(function(resolve, reject) {\r\n _async(function(err, res) {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(res);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Synchronously generates a hash for the given string.\r\n * @param {string} s String to hash\r\n * @param {(number|string)=} salt Salt length to generate or salt to use, default to 10\r\n * @returns {string} Resulting hash\r\n * @expose\r\n */\r\n bcrypt.hashSync = function(s, salt) {\r\n if (typeof salt === 'undefined')\r\n salt = GENSALT_DEFAULT_LOG2_ROUNDS;\r\n if (typeof salt === 'number')\r\n salt = bcrypt.genSaltSync(salt);\r\n if (typeof s !== 'string' || typeof salt !== 'string')\r\n throw Error(\"Illegal arguments: \"+(typeof s)+', '+(typeof salt));\r\n return _hash(s, salt);\r\n };\r\n\r\n /**\r\n * Asynchronously generates a hash for the given string.\r\n * @param {string} s String to hash\r\n * @param {number|string} salt Salt length to generate or salt to use\r\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash\r\n * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed\r\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\r\n * @returns {!Promise} If `callback` has been omitted\r\n * @throws {Error} If `callback` is present but not a function\r\n * @expose\r\n */\r\n bcrypt.hash = function(s, salt, callback, progressCallback) {\r\n\r\n function _async(callback) {\r\n if (typeof s === 'string' && typeof salt === 'number')\r\n bcrypt.genSalt(salt, function(err, salt) {\r\n _hash(s, salt, callback, progressCallback);\r\n });\r\n else if (typeof s === 'string' && typeof salt === 'string')\r\n _hash(s, salt, callback, progressCallback);\r\n else\r\n nextTick(callback.bind(this, Error(\"Illegal arguments: \"+(typeof s)+', '+(typeof salt))));\r\n }\r\n\r\n if (callback) {\r\n if (typeof callback !== 'function')\r\n throw Error(\"Illegal callback: \"+typeof(callback));\r\n _async(callback);\r\n } else\r\n return new Promise(function(resolve, reject) {\r\n _async(function(err, res) {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(res);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Compares two strings of the same length in constant time.\r\n * @param {string} known Must be of the correct length\r\n * @param {string} unknown Must be the same length as `known`\r\n * @returns {boolean}\r\n * @inner\r\n */\r\n function safeStringCompare(known, unknown) {\r\n var right = 0,\r\n wrong = 0;\r\n for (var i=0, k=known.length; i<k; ++i) {\r\n if (known.charCodeAt(i) === unknown.charCodeAt(i))\r\n ++right;\r\n else\r\n ++wrong;\r\n }\r\n // Prevent removal of unused variables (never true, actually)\r\n if (right < 0)\r\n return false;\r\n return wrong === 0;\r\n }\r\n\r\n /**\r\n * Synchronously tests a string against a hash.\r\n * @param {string} s String to compare\r\n * @param {string} hash Hash to test against\r\n * @returns {boolean} true if matching, otherwise false\r\n * @throws {Error} If an argument is illegal\r\n * @expose\r\n */\r\n bcrypt.compareSync = function(s, hash) {\r\n if (typeof s !== \"string\" || typeof hash !== \"string\")\r\n throw Error(\"Illegal arguments: \"+(typeof s)+', '+(typeof hash));\r\n if (hash.length !== 60)\r\n return false;\r\n return safeStringCompare(bcrypt.hashSync(s, hash.substr(0, hash.length-31)), hash);\r\n };\r\n\r\n /**\r\n * Asynchronously compares the given data against the given hash.\r\n * @param {string} s Data to compare\r\n * @param {string} hash Data to be compared to\r\n * @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result\r\n * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed\r\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\r\n * @returns {!Promise} If `callback` has been omitted\r\n * @throws {Error} If `callback` is present but not a function\r\n * @expose\r\n */\r\n bcrypt.compare = function(s, hash, callback, progressCallback) {\r\n\r\n function _async(callback) {\r\n if (typeof s !== \"string\" || typeof hash !== \"string\") {\r\n nextTick(callback.bind(this, Error(\"Illegal arguments: \"+(typeof s)+', '+(typeof hash))));\r\n return;\r\n }\r\n if (hash.length !== 60) {\r\n nextTick(callback.bind(this, null, false));\r\n return;\r\n }\r\n bcrypt.hash(s, hash.substr(0, 29), function(err, comp) {\r\n if (err)\r\n callback(err);\r\n else\r\n callback(null, safeStringCompare(comp, hash));\r\n }, progressCallback);\r\n }\r\n\r\n if (callback) {\r\n if (typeof callback !== 'function')\r\n throw Error(\"Illegal callback: \"+typeof(callback));\r\n _async(callback);\r\n } else\r\n return new Promise(function(resolve, reject) {\r\n _async(function(err, res) {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(res);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Gets the number of rounds used to encrypt the specified hash.\r\n * @param {string} hash Hash to extract the used number of rounds from\r\n * @returns {number} Number of rounds used\r\n * @throws {Error} If `hash` is not a string\r\n * @expose\r\n */\r\n bcrypt.getRounds = function(hash) {\r\n if (typeof hash !== \"string\")\r\n throw Error(\"Illegal arguments: \"+(typeof hash));\r\n return parseInt(hash.split(\"$\")[2], 10);\r\n };\r\n\r\n /**\r\n * Gets the salt portion from a hash. Does not validate the hash.\r\n * @param {string} hash Hash to extract the salt from\r\n * @returns {string} Extracted salt part\r\n * @throws {Error} If `hash` is not a string or otherwise invalid\r\n * @expose\r\n */\r\n bcrypt.getSalt = function(hash) {\r\n if (typeof hash !== 'string')\r\n throw Error(\"Illegal arguments: \"+(typeof hash));\r\n if (hash.length !== 60)\r\n throw Error(\"Illegal hash length: \"+hash.length+\" != 60\");\r\n return hash.substring(0, 29);\r\n };\r\n\r\n /**\r\n * Continues with the callback on the next tick.\r\n * @function\r\n * @param {function(...[*])} callback Callback to execute\r\n * @inner\r\n */\r\n var nextTick = typeof process !== 'undefined' && process && typeof process.nextTick === 'function'\r\n ? (typeof setImmediate === 'function' ? setImmediate : process.nextTick)\r\n : setTimeout;\r\n\r\n /**\r\n * Converts a JavaScript string to UTF8 bytes.\r\n * @param {string} str String\r\n * @returns {!Array.<number>} UTF8 bytes\r\n * @inner\r\n */\r\n function stringToBytes(str) {\r\n var out = [],\r\n i = 0;\r\n utfx.encodeUTF16toUTF8(function() {\r\n if (i >= str.length) return null;\r\n return str.charCodeAt(i++);\r\n }, function(b) {\r\n out.push(b);\r\n });\r\n return out;\r\n }\r\n\r\n // A base64 implementation for the bcrypt algorithm. This is partly non-standard.\r\n\r\n /**\r\n * bcrypt's own non-standard base64 dictionary.\r\n * @type {!Array.<string>}\r\n * @const\r\n * @inner\r\n **/\r\n var BASE64_CODE = \"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split('');\r\n\r\n /**\r\n * @type {!Array.<number>}\r\n * @const\r\n * @inner\r\n **/\r\n var BASE64_INDEX = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,\r\n 1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1,\r\n -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\r\n 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29, 30,\r\n 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\r\n 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1];\r\n\r\n /**\r\n * @type {!function(...number):string}\r\n * @inner\r\n */\r\n var stringFromCharCode = String.fromCharCode;\r\n\r\n /**\r\n * Encodes a byte array to base64 with up to len bytes of input.\r\n * @param {!Array.<number>} b Byte array\r\n * @param {number} len Maximum input length\r\n * @returns {string}\r\n * @inner\r\n */\r\n function base64_encode(b, len) {\r\n var off = 0,\r\n rs = [],\r\n c1, c2;\r\n if (len <= 0 || len > b.length)\r\n throw Error(\"Illegal len: \"+len);\r\n while (off < len) {\r\n c1 = b[off++] & 0xff;\r\n rs.push(BASE64_CODE[(c1 >> 2) & 0x3f]);\r\n c1 = (c1 & 0x03) << 4;\r\n if (off >= len) {\r\n rs.push(BASE64_CODE[c1 & 0x3f]);\r\n break;\r\n }\r\n c2 = b[off++] & 0xff;\r\n c1 |= (c2 >> 4) & 0x0f;\r\n rs.push(BASE64_CODE[c1 & 0x3f]);\r\n c1 = (c2 & 0x0f) << 2;\r\n if (off >= len) {\r\n rs.push(BASE64_CODE[c1 & 0x3f]);\r\n break;\r\n }\r\n c2 = b[off++] & 0xff;\r\n c1 |= (c2 >> 6) & 0x03;\r\n rs.push(BASE64_CODE[c1 & 0x3f]);\r\n rs.push(BASE64_CODE[c2 & 0x3f]);\r\n }\r\n return rs.join('');\r\n }\r\n\r\n /**\r\n * Decodes a base64 encoded string to up to len bytes of output.\r\n * @param {string} s String to decode\r\n * @param {number} len Maximum output length\r\n * @returns {!Array.<number>}\r\n * @inner\r\n */\r\n function base64_decode(s, len) {\r\n var off = 0,\r\n slen = s.length,\r\n olen = 0,\r\n rs = [],\r\n c1, c2, c3, c4, o, code;\r\n if (len <= 0)\r\n throw Error(\"Illegal len: \"+len);\r\n while (off < slen - 1 && olen < len) {\r\n code = s.charCodeAt(off++);\r\n c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\r\n code = s.charCodeAt(off++);\r\n c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\r\n if (c1 == -1 || c2 == -1)\r\n break;\r\n o = (c1 << 2) >>> 0;\r\n o |= (c2 & 0x30) >> 4;\r\n rs.push(stringFromCharCode(o));\r\n if (++olen >= len || off >= slen)\r\n break;\r\n code = s.charCodeAt(off++);\r\n c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\r\n if (c3 == -1)\r\n break;\r\n o = ((c2 & 0x0f) << 4) >>> 0;\r\n o |= (c3 & 0x3c) >> 2;\r\n rs.push(stringFromCharCode(o));\r\n if (++olen >= len || off >= slen)\r\n break;\r\n code = s.charCodeAt(off++);\r\n c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\r\n o = ((c3 & 0x03) << 6) >>> 0;\r\n o |= c4;\r\n rs.push(stringFromCharCode(o));\r\n ++olen;\r\n }\r\n var res = [];\r\n for (off = 0; off<olen; off++)\r\n res.push(rs[off].charCodeAt(0));\r\n return res;\r\n }\r\n\r\n /**\r\n * utfx-embeddable (c) 2014 Daniel Wirtz <dcode@dcode.io>\r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/utfx for details\r\n */\r\n var utfx = function() {\r\n \"use strict\";\r\n\r\n /**\r\n * utfx namespace.\r\n * @inner\r\n * @type {!Object.<string,*>}\r\n */\r\n var utfx = {};\r\n\r\n /**\r\n * Maximum valid code point.\r\n * @type {number}\r\n * @const\r\n */\r\n utfx.MAX_CODEPOINT = 0x10FFFF;\r\n\r\n /**\r\n * Encodes UTF8 code points to UTF8 bytes.\r\n * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n * respectively `null` if there are no more code points left or a single numeric code point.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte\r\n */\r\n utfx.encodeUTF8 = function(src, dst) {\r\n var cp = null;\r\n if (typeof src === 'number')\r\n cp = src,\r\n src = function() { return null; };\r\n while (cp !== null || (cp = src()) !== null) {\r\n if (cp < 0x80)\r\n dst(cp&0x7F);\r\n else if (cp < 0x800)\r\n dst(((cp>>6)&0x1F)|0xC0),\r\n dst((cp&0x3F)|0x80);\r\n else if (cp < 0x10000)\r\n dst(((cp>>12)&0x0F)|0xE0),\r\n dst(((cp>>6)&0x3F)|0x80),\r\n dst((cp&0x3F)|0x80);\r\n else\r\n dst(((cp>>18)&0x07)|0xF0),\r\n dst(((cp>>12)&0x3F)|0x80),\r\n dst(((cp>>6)&0x3F)|0x80),\r\n dst((cp&0x3F)|0x80);\r\n cp = null;\r\n }\r\n };\r\n\r\n /**\r\n * Decodes UTF8 bytes to UTF8 code points.\r\n * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n * are no more bytes left.\r\n * @param {!function(number)} dst Code points destination as a function successively called with each decoded code point.\r\n * @throws {RangeError} If a starting byte is invalid in UTF8\r\n * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the\r\n * remaining bytes.\r\n */\r\n utfx.decodeUTF8 = function(src, dst) {\r\n var a, b, c, d, fail = function(b) {\r\n b = b.slice(0, b.indexOf(null));\r\n var err = Error(b.toString());\r\n err.name = \"TruncatedError\";\r\n err['bytes'] = b;\r\n throw err;\r\n };\r\n while ((a = src()) !== null) {\r\n if ((a&0x80) === 0)\r\n dst(a);\r\n else if ((a&0xE0) === 0xC0)\r\n ((b = src()) === null) && fail([a, b]),\r\n dst(((a&0x1F)<<6) | (b&0x3F));\r\n else if ((a&0xF0) === 0xE0)\r\n ((b=src()) === null || (c=src()) === null) && fail([a, b, c]),\r\n dst(((a&0x0F)<<12) | ((b&0x3F)<<6) | (c&0x3F));\r\n else if ((a&0xF8) === 0xF0)\r\n ((b=src()) === null || (c=src()) === null || (d=src()) === null) && fail([a, b, c ,d]),\r\n dst(((a&0x07)<<18) | ((b&0x3F)<<12) | ((c&0x3F)<<6) | (d&0x3F));\r\n else throw RangeError(\"Illegal starting byte: \"+a);\r\n }\r\n };\r\n\r\n /**\r\n * Converts UTF16 characters to UTF8 code points.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @param {!function(number)} dst Code points destination as a function successively called with each converted code\r\n * point.\r\n */\r\n utfx.UTF16toUTF8 = function(src, dst) {\r\n var c1, c2 = null;\r\n while (true) {\r\n if ((c1 = c2 !== null ? c2 : src()) === null)\r\n break;\r\n if (c1 >= 0xD800 && c1 <= 0xDFFF) {\r\n if ((c2 = src()) !== null) {\r\n if (c2 >= 0xDC00 && c2 <= 0xDFFF) {\r\n dst((c1-0xD800)*0x400+c2-0xDC00+0x10000);\r\n c2 = null; continue;\r\n }\r\n }\r\n }\r\n dst(c1);\r\n }\r\n if (c2 !== null) dst(c2);\r\n };\r\n\r\n /**\r\n * Converts UTF8 code points to UTF16 characters.\r\n * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n * respectively `null` if there are no more code points left or a single numeric code point.\r\n * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n * @throws {RangeError} If a code point is out of range\r\n */\r\n utfx.UTF8toUTF16 = function(src, dst) {\r\n var cp = null;\r\n if (typeof src === 'number')\r\n cp = src, src = function() { return null; };\r\n while (cp !== null || (cp = src()) !== null) {\r\n if (cp <= 0xFFFF)\r\n dst(cp);\r\n else\r\n cp -= 0x10000,\r\n dst((cp>>10)+0xD800),\r\n dst((cp%0x400)+0xDC00);\r\n cp = null;\r\n }\r\n };\r\n\r\n /**\r\n * Converts and encodes UTF16 characters to UTF8 bytes.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively `null`\r\n * if there are no more characters left.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte.\r\n */\r\n utfx.encodeUTF16toUTF8 = function(src, dst) {\r\n utfx.UTF16toUTF8(src, function(cp) {\r\n utfx.encodeUTF8(cp, dst);\r\n });\r\n };\r\n\r\n /**\r\n * Decodes and converts UTF8 bytes to UTF16 characters.\r\n * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n * are no more bytes left.\r\n * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n * @throws {RangeError} If a starting byte is invalid in UTF8\r\n * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the remaining bytes.\r\n */\r\n utfx.decodeUTF8toUTF16 = function(src, dst) {\r\n utfx.decodeUTF8(src, function(cp) {\r\n utfx.UTF8toUTF16(cp, dst);\r\n });\r\n };\r\n\r\n /**\r\n * Calculates the byte length of an UTF8 code point.\r\n * @param {number} cp UTF8 code point\r\n * @returns {number} Byte length\r\n */\r\n utfx.calculateCodePoint = function(cp) {\r\n return (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 bytes required to store UTF8 code points.\r\n * @param {(!function():number|null)} src Code points source as a function returning the next code point respectively\r\n * `null` if there are no more code points left.\r\n * @returns {number} The number of UTF8 bytes required\r\n */\r\n utfx.calculateUTF8 = function(src) {\r\n var cp, l=0;\r\n while ((cp = src()) !== null)\r\n l += utfx.calculateCodePoint(cp);\r\n return l;\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 code points respectively UTF8 bytes required to store UTF16 char codes.\r\n * @param {(!function():number|null)} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @returns {!Array.<number>} The number of UTF8 code points at index 0 and the number of UTF8 bytes required at index 1.\r\n */\r\n utfx.calculateUTF16asUTF8 = function(src) {\r\n var n=0, l=0;\r\n utfx.UTF16toUTF8(src, function(cp) {\r\n ++n; l += utfx.calculateCodePoint(cp);\r\n });\r\n return [n,l];\r\n };\r\n\r\n return utfx;\r\n }();\r\n\r\n Date.now = Date.now || function() { return +new Date; };\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var BCRYPT_SALT_LEN = 16;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var GENSALT_DEFAULT_LOG2_ROUNDS = 10;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var BLOWFISH_NUM_ROUNDS = 16;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var MAX_EXECUTION_TIME = 100;\r\n\r\n /**\r\n * @type {Array.<number>}\r\n * @const\r\n * @inner\r\n */\r\n var P_ORIG = [\r\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822,\r\n 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377,\r\n 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5,\r\n 0xb5470917, 0x9216d5d9, 0x8979fb1b\r\n ];\r\n\r\n /**\r\n * @type {Array.<number>}\r\n * @const\r\n * @inner\r\n */\r\n var S_ORIG = [\r\n 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed,\r\n 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7,\r\n 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3,\r\n 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,\r\n 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023,\r\n 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,\r\n 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda,\r\n 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,\r\n 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af,\r\n 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6,\r\n 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381,\r\n 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\r\n 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d,\r\n 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5,\r\n 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a,\r\n 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,\r\n 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c,\r\n 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,\r\n 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3,\r\n 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,\r\n 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724,\r\n 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b,\r\n 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd,\r\n 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\r\n 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f,\r\n 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd,\r\n 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39,\r\n 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,\r\n 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df,\r\n 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,\r\n 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e,\r\n 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,\r\n 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98,\r\n 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565,\r\n 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341,\r\n 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\r\n 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0,\r\n 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64,\r\n 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191,\r\n 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,\r\n 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0,\r\n 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,\r\n 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5,\r\n 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,\r\n 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b,\r\n 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f,\r\n 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968,\r\n 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\r\n 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5,\r\n 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6,\r\n 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799,\r\n 0x6e85076a, 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,\r\n 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71,\r\n 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29,\r\n 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6,\r\n 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\r\n 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f,\r\n 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286,\r\n 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec,\r\n 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,\r\n 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9,\r\n 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,\r\n 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e,\r\n 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,\r\n 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290,\r\n 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810,\r\n 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6,\r\n 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,\r\n 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847,\r\n 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451,\r\n 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6,\r\n 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\r\n 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570,\r\n 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,\r\n 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978,\r\n 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,\r\n 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708,\r\n 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883,\r\n 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185,\r\n 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\r\n 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830,\r\n 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239,\r\n 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab,\r\n 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,\r\n 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19,\r\n 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,\r\n 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1,\r\n 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,\r\n 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef,\r\n 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3,\r\n 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15,\r\n 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,\r\n 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2,\r\n 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492,\r\n 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174,\r\n 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\r\n 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759,\r\n 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,\r\n 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc,\r\n 0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,\r\n 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465,\r\n 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a,\r\n 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c,\r\n 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,\r\n 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e,\r\n 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,\r\n 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0,\r\n 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,\r\n 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462,\r\n 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c,\r\n 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399,\r\n 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\r\n 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74,\r\n 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397,\r\n 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7,\r\n 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,\r\n 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802,\r\n 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,\r\n 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4,\r\n 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\r\n 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2,\r\n 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1,\r\n 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c,\r\n 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,\r\n 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341,\r\n 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8,\r\n 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b,\r\n 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,\r\n 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88,\r\n 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,\r\n 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc,\r\n 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,\r\n 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659,\r\n 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f,\r\n 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8,\r\n 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\r\n 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be,\r\n 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2,\r\n 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255,\r\n 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,\r\n 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1,\r\n 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,\r\n 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025,\r\n 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\r\n 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01,\r\n 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641,\r\n 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa,\r\n 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,\r\n 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409,\r\n 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9,\r\n 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3,\r\n 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,\r\n 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234,\r\n 0x92638212, 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf,\r\n 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740,\r\n 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\r\n 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f,\r\n 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d,\r\n 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8,\r\n 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,\r\n 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba,\r\n 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,\r\n 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69,\r\n 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,\r\n 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a,\r\n 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b,\r\n 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd,\r\n 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\r\n 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4,\r\n 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2,\r\n 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb,\r\n 0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,\r\n 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751,\r\n 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,\r\n 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369,\r\n 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,\r\n 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd,\r\n 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45,\r\n 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae,\r\n 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\r\n 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08,\r\n 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d,\r\n 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b,\r\n 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,\r\n 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e,\r\n 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,\r\n 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c,\r\n 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,\r\n 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361,\r\n 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c,\r\n 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be,\r\n 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\r\n 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d,\r\n 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891,\r\n 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5,\r\n 0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,\r\n 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292,\r\n 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,\r\n 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2,\r\n 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,\r\n 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c,\r\n 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8,\r\n 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4,\r\n 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\r\n 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6\r\n ];\r\n\r\n /**\r\n * @type {Array.<number>}\r\n * @const\r\n * @inner\r\n */\r\n var C_ORIG = [\r\n 0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944,\r\n 0x6f756274\r\n ];\r\n\r\n /**\r\n * @param {Array.<number>} lr\r\n * @param {number} off\r\n * @param {Array.<number>} P\r\n * @param {Array.<number>} S\r\n * @returns {Array.<number>}\r\n * @inner\r\n */\r\n function _encipher(lr, off, P, S) { // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt\r\n var n,\r\n l = lr[off],\r\n r = lr[off + 1];\r\n\r\n l ^= P[0];\r\n\r\n /*\r\n for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)\r\n // Feistel substitution on left word\r\n n = S[l >>> 24],\r\n n += S[0x100 | ((l >> 16) & 0xff)],\r\n n ^= S[0x200 | ((l >> 8) & 0xff)],\r\n n += S[0x300 | (l & 0xff)],\r\n r ^= n ^ P[++i],\r\n // Feistel substitution on right word\r\n n = S[r >>> 24],\r\n n += S[0x100 | ((r >> 16) & 0xff)],\r\n n ^= S[0x200 | ((r >> 8) & 0xff)],\r\n n += S[0x300 | (r & 0xff)],\r\n l ^= n ^ P[++i];\r\n */\r\n\r\n //The following is an unrolled version of the above loop.\r\n //Iteration 0\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[1];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[2];\r\n //Iteration 1\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[3];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[4];\r\n //Iteration 2\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[5];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[6];\r\n //Iteration 3\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[7];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[8];\r\n //Iteration 4\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[9];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[10];\r\n //Iteration 5\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[11];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[12];\r\n //Iteration 6\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[13];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[14];\r\n //Iteration 7\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[15];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[16];\r\n\r\n lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];\r\n lr[off + 1] = l;\r\n return lr;\r\n }\r\n\r\n /**\r\n * @param {Array.<number>} data\r\n * @param {number} offp\r\n * @returns {{key: number, offp: number}}\r\n * @inner\r\n */\r\n function _streamtoword(data, offp) {\r\n for (var i = 0, word = 0; i < 4; ++i)\r\n word = (word << 8) | (data[offp] & 0xff),\r\n offp = (offp + 1) % data.length;\r\n return { key: word, offp: offp };\r\n }\r\n\r\n /**\r\n * @param {Array.<number>} key\r\n * @param {Array.<number>} P\r\n * @param {Array.<number>} S\r\n * @inner\r\n */\r\n function _key(key, P, S) {\r\n var offset = 0,\r\n lr = [0, 0],\r\n plen = P.length,\r\n slen = S.length,\r\n sw;\r\n for (var i = 0; i < plen; i++)\r\n sw = _streamtoword(key, offset),\r\n offset = sw.offp,\r\n P[i] = P[i] ^ sw.key;\r\n for (i = 0; i < plen; i += 2)\r\n lr = _encipher(lr, 0, P, S),\r\n P[i] = lr[0],\r\n P[i + 1] = lr[1];\r\n for (i = 0; i < slen; i += 2)\r\n lr = _encipher(lr, 0, P, S),\r\n S[i] = lr[0],\r\n S[i + 1] = lr[1];\r\n }\r\n\r\n /**\r\n * Expensive key schedule Blowfish.\r\n * @param {Array.<number>} data\r\n * @param {Array.<number>} key\r\n * @param {Array.<number>} P\r\n * @param {Array.<number>} S\r\n * @inner\r\n */\r\n function _ekskey(data, key, P, S) {\r\n var offp = 0,\r\n lr = [0, 0],\r\n plen = P.length,\r\n slen = S.length,\r\n sw;\r\n for (var i = 0; i < plen; i++)\r\n sw = _streamtoword(key, offp),\r\n offp = sw.offp,\r\n P[i] = P[i] ^ sw.key;\r\n offp = 0;\r\n for (i = 0; i < plen; i += 2)\r\n sw = _streamtoword(data, offp),\r\n offp = sw.offp,\r\n lr[0] ^= sw.key,\r\n sw = _streamtoword(data, offp),\r\n offp = sw.offp,\r\n lr[1] ^= sw.key,\r\n lr = _encipher(lr, 0, P, S),\r\n P[i] = lr[0],\r\n P[i + 1] = lr[1];\r\n for (i = 0; i < slen; i += 2)\r\n sw = _streamtoword(data, offp),\r\n offp = sw.offp,\r\n lr[0] ^= sw.key,\r\n sw = _streamtoword(data, offp),\r\n offp = sw.offp,\r\n lr[1] ^= sw.key,\r\n lr = _encipher(lr, 0, P, S),\r\n S[i] = lr[0],\r\n S[i + 1] = lr[1];\r\n }\r\n\r\n /**\r\n * Internaly crypts a string.\r\n * @param {Array.<number>} b Bytes to crypt\r\n * @param {Array.<number>} salt Salt bytes to use\r\n * @param {number} rounds Number of rounds\r\n * @param {function(Error, Array.<number>=)=} callback Callback receiving the error, if any, and the resulting bytes. If\r\n * omitted, the operation will be performed synchronously.\r\n * @param {function(number)=} progressCallback Callback called with the current progress\r\n * @returns {!Array.<number>|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`\r\n * @inner\r\n */\r\n function _crypt(b, salt, rounds, callback, progressCallback) {\r\n var cdata = C_ORIG.slice(),\r\n clen = cdata.length,\r\n err;\r\n\r\n // Validate\r\n if (rounds < 4 || rounds > 31) {\r\n err = Error(\"Illegal number of rounds (4-31): \"+rounds);\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n } else\r\n throw err;\r\n }\r\n if (salt.length !== BCRYPT_SALT_LEN) {\r\n err =Error(\"Illegal salt length: \"+salt.length+\" != \"+BCRYPT_SALT_LEN);\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n } else\r\n throw err;\r\n }\r\n rounds = (1 << rounds) >>> 0;\r\n\r\n var P, S, i = 0, j;\r\n\r\n //Use typed arrays when available - huge speedup!\r\n if (Int32Array) {\r\n P = new Int32Array(P_ORIG);\r\n S = new Int32Array(S_ORIG);\r\n } else {\r\n P = P_ORIG.slice();\r\n S = S_ORIG.slice();\r\n }\r\n\r\n _ekskey(salt, b, P, S);\r\n\r\n /**\r\n * Calcualtes the next round.\r\n * @returns {Array.<number>|undefined} Resulting array if callback has been omitted, otherwise `undefined`\r\n * @inner\r\n */\r\n function next() {\r\n if (progressCallback)\r\n progressCallback(i / rounds);\r\n if (i < rounds) {\r\n var start = Date.now();\r\n for (; i < rounds;) {\r\n i = i + 1;\r\n _key(b, P, S);\r\n _key(salt, P, S);\r\n if (Date.now() - start > MAX_EXECUTION_TIME)\r\n break;\r\n }\r\n } else {\r\n for (i = 0; i < 64; i++)\r\n for (j = 0; j < (clen >> 1); j++)\r\n _encipher(cdata, j << 1, P, S);\r\n var ret = [];\r\n for (i = 0; i < clen; i++)\r\n ret.push(((cdata[i] >> 24) & 0xff) >>> 0),\r\n ret.push(((cdata[i] >> 16) & 0xff) >>> 0),\r\n ret.push(((cdata[i] >> 8) & 0xff) >>> 0),\r\n ret.push((cdata[i] & 0xff) >>> 0);\r\n if (callback) {\r\n callback(null, ret);\r\n return;\r\n } else\r\n return ret;\r\n }\r\n if (callback)\r\n nextTick(next);\r\n }\r\n\r\n // Async\r\n if (typeof callback !== 'undefined') {\r\n next();\r\n\r\n // Sync\r\n } else {\r\n var res;\r\n while (true)\r\n if (typeof(res = next()) !== 'undefined')\r\n return res || [];\r\n }\r\n }\r\n\r\n /**\r\n * Internally hashes a string.\r\n * @param {string} s String to hash\r\n * @param {?string} salt Salt to use, actually never null\r\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,\r\n * hashing is perormed synchronously.\r\n * @param {function(number)=} progressCallback Callback called with the current progress\r\n * @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`\r\n * @inner\r\n */\r\n function _hash(s, salt, callback, progressCallback) {\r\n var err;\r\n if (typeof s !== 'string' || typeof salt !== 'string') {\r\n err = Error(\"Invalid string / salt: Not a string\");\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n }\r\n else\r\n throw err;\r\n }\r\n\r\n // Validate the salt\r\n var minor, offset;\r\n if (salt.charAt(0) !== '$' || salt.charAt(1) !== '2') {\r\n err = Error(\"Invalid salt version: \"+salt.substring(0,2));\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n }\r\n else\r\n throw err;\r\n }\r\n if (salt.charAt(2) === '$')\r\n minor = String.fromCharCode(0),\r\n offset = 3;\r\n else {\r\n minor = salt.charAt(2);\r\n if ((minor !== 'a' && minor !== 'b' && minor !== 'y') || salt.charAt(3) !== '$') {\r\n err = Error(\"Invalid salt revision: \"+salt.substring(2,4));\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n } else\r\n throw err;\r\n }\r\n offset = 4;\r\n }\r\n\r\n // Extract number of rounds\r\n if (salt.charAt(offset + 2) > '$') {\r\n err = Error(\"Missing salt rounds\");\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n } else\r\n throw err;\r\n }\r\n var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10,\r\n r2 = parseInt(salt.substring(offset + 1, offset + 2), 10),\r\n rounds = r1 + r2,\r\n real_salt = salt.substring(offset + 3, offset + 25);\r\n s += minor >= 'a' ? \"\\x00\" : \"\";\r\n\r\n var passwordb = stringToBytes(s),\r\n saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);\r\n\r\n /**\r\n * Finishes hashing.\r\n * @param {Array.<number>} bytes Byte array\r\n * @returns {string}\r\n * @inner\r\n */\r\n function finish(bytes) {\r\n var res = [];\r\n res.push(\"$2\");\r\n if (minor >= 'a')\r\n res.push(minor);\r\n res.push(\"$\");\r\n if (rounds < 10)\r\n res.push(\"0\");\r\n res.push(rounds.toString());\r\n res.push(\"$\");\r\n res.push(base64_encode(saltb, saltb.length));\r\n res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));\r\n return res.join('');\r\n }\r\n\r\n // Sync\r\n if (typeof callback == 'undefined')\r\n return finish(_crypt(passwordb, saltb, rounds));\r\n\r\n // Async\r\n else {\r\n _crypt(passwordb, saltb, rounds, function(err, bytes) {\r\n if (err)\r\n callback(err, null);\r\n else\r\n callback(null, finish(bytes));\r\n }, progressCallback);\r\n }\r\n }\r\n\r\n /**\r\n * Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet.\r\n * @function\r\n * @param {!Array.<number>} b Byte array\r\n * @param {number} len Maximum input length\r\n * @returns {string}\r\n * @expose\r\n */\r\n bcrypt.encodeBase64 = base64_encode;\r\n\r\n /**\r\n * Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.\r\n * @function\r\n * @param {string} s String to decode\r\n * @param {number} len Maximum output length\r\n * @returns {!Array.<number>}\r\n * @expose\r\n */\r\n bcrypt.decodeBase64 = base64_decode;\r\n\r\n return bcrypt;\r\n}));\r\n", "/*\r\n Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>\r\n Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>\r\n Copyright (c) 2013 Daniel Wirtz <dcode@dcode.io>\r\n\r\n Redistribution and use in source and binary forms, with or without\r\n modification, are permitted provided that the following conditions\r\n are met:\r\n 1. Redistributions of source code must retain the above copyright\r\n notice, this list of conditions and the following disclaimer.\r\n 2. Redistributions in binary form must reproduce the above copyright\r\n notice, this list of conditions and the following disclaimer in the\r\n documentation and/or other materials provided with the distribution.\r\n 3. The name of the author may not be used to endorse or promote products\r\n derived from this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\r\n IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\r\n OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\n NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\nmodule.exports = require(\"./dist/bcrypt.js\");\r\n", "#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport { FloomError } from \"@floom/shared\";\nimport { log } from \"./lib/output.js\";\n\nimport { loginCommand } from \"./commands/login.js\";\nimport { logoutCommand } from \"./commands/logout.js\";\nimport { whoamiCommand } from \"./commands/whoami.js\";\nimport { initCommand } from \"./commands/init.js\";\nimport { validateCommand } from \"./commands/validate.js\";\nimport { publishCommand } from \"./commands/publish.js\";\nimport { installCommand } from \"./commands/install.js\";\nimport { installedCommand } from \"./commands/installed.js\";\nimport { outdatedCommand } from \"./commands/outdated.js\";\nimport { updateCommand } from \"./commands/update.js\";\nimport { listCommand } from \"./commands/list.js\";\nimport { infoCommand } from \"./commands/info.js\";\nimport { shareCommand, unshareCommand } from \"./commands/share.js\";\nimport { libraryCreateCommand, libraryInviteCommand, libraryLeaveCommand, libraryListCommand } from \"./commands/library.js\";\nimport { defaultWorkspaceCommand, workspaceActivateCommand, workspaceActiveCommand, workspaceDeactivateCommand } from \"./commands/workspace-config.js\";\nimport { instructionPullCommand, instructionPushCommand } from \"./commands/instruction.js\";\nimport { pullCommand, statusCommand } from \"./commands/sync.js\";\nimport { pinCommand, unpinCommand } from \"./commands/pin.js\";\nimport { mcpCommand } from \"./commands/mcp.js\";\nimport { doctorCommand } from \"./commands/doctor.js\";\nimport { VERSION } from \"./version.js\";\n\nconst program = new Command();\nprogram\n .name(\"floom\")\n .description(\"Floom CLI \u2014 publish, install, sync, and share AI agent skills.\")\n .version(VERSION);\n\nprogram.command(\"login\").description(\"Log in via browser (device code).\")\n .addHelpText(\"after\", \"\\nExample:\\n $ floom login\")\n .action(loginCommand);\nprogram.command(\"logout\").description(\"Log out and revoke local token.\").action(logoutCommand);\nprogram.command(\"whoami\").description(\"Show the logged-in user.\").action(whoamiCommand);\n\nprogram.command(\"init\").description(\"Scaffold a new skill in the current directory.\").action(initCommand);\nprogram\n .command(\"validate\")\n .description(\"Validate the skill in the current directory.\")\n .option(\"--json\", \"Emit machine-readable JSON\")\n .action((opts) => validateCommand(opts));\n\nprogram\n .command(\"publish\")\n .description(\"Publish the skill in the current directory.\")\n .option(\"--dry-run\", \"Validate and pack locally without uploading.\")\n .option(\"--workspace <slug>\", \"Publish into a shared workspace slug (default: personal)\")\n .option(\"--library <slug>\", \"Legacy alias for --workspace\")\n .addHelpText(\"after\", \"\\nExamples:\\n $ floom publish\\n $ floom publish --workspace team-workspace\")\n .action((opts) => publishCommand(opts));\nprogram.command(\"push\").description(\"Alias for `publish`.\")\n .option(\"--dry-run\", \"Validate and pack locally without uploading.\")\n .option(\"--workspace <slug>\", \"Publish into a shared workspace slug\")\n .option(\"--library <slug>\", \"Legacy alias for --workspace\")\n .addHelpText(\"after\", \"\\nExample:\\n $ floom push --workspace team-workspace\")\n .action((opts) => publishCommand(opts));\n\nprogram\n .command(\"install <ref>\")\n .description(\"Install a skill (default: .agents/skills/<slug>/).\")\n .option(\"--for <target>\", \"Tool preset: claude | codex | cursor | gemini | opencode | kimi | all\")\n .option(\"--to <path>\", \"Explicit install directory\")\n .option(\"--global\", \"Install to user-level folder instead of project-local\")\n .option(\"--force\", \"Overwrite existing folder\")\n .addHelpText(\"after\", \"\\nExamples:\\n $ floom install @alice/research-brief\\n $ floom install @alice/research-brief --for codex\\n $ floom install @alice/research-brief --to .agents/skills\")\n .action((ref, opts) => installCommand(ref, opts));\n\nprogram.command(\"installed\").description(\"List installed skills in this project.\").option(\"--json\").action(installedCommand);\nprogram.command(\"outdated\").description(\"Show installed skills with newer versions available.\").action(outdatedCommand);\nprogram\n .command(\"update [ref]\")\n .description(\"Update installed skills to latest.\")\n .option(\"--force\", \"Overwrite local edits\")\n .action((ref, opts) => updateCommand(ref, opts));\n\nprogram\n .command(\"list\")\n .description(\"List remote skills.\")\n .option(\"--mine\", \"Only your own skills (default)\")\n .option(\"--workspace <slug>\", \"Filter by workspace slug\")\n .option(\"--library <slug>\", \"Legacy alias for --workspace\")\n .option(\"--folder <uuid>\", \"Filter by folder id\")\n .option(\"--flat\", \"Print one ref per line\")\n .option(\"--query <q>\", \"Filter by query\")\n .action(listCommand);\n\nprogram.command(\"info <ref>\").description(\"Show details for a remote skill.\").action(infoCommand);\n\nprogram\n .command(\"status\")\n .description(\"Show local vs remote Floom workspace state\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((opts) => statusCommand(opts));\n\nprogram\n .command(\"pull\")\n .description(\"Pull account/workspace instructions for active workspaces\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .option(\"--apply\", \"Append managed block when the target file has no Floom block\")\n .option(\"--force\", \"Write without the first-apply guard\")\n .action((opts) => pullCommand(opts));\n\nprogram\n .command(\"pin <ref>\")\n .description(\"Pin a workspace skill for local pull\")\n .option(\"--workspace <slug>\", \"Workspace slug\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .action((ref, opts) => pinCommand(ref, opts));\n\nprogram\n .command(\"unpin <ref>\")\n .description(\"Unpin a workspace skill for local pull\")\n .option(\"--workspace <slug>\", \"Workspace slug\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .action((ref, opts) => unpinCommand(ref, opts));\n\nprogram\n .command(\"share <ref> <email>\")\n .description(\"Invite someone to a skill by email.\")\n .option(\"--role <role>\", \"viewer (default) or editor\")\n .action((ref, email, opts) => shareCommand(ref, email, opts));\n\nprogram\n .command(\"unshare <ref> <email>\")\n .description(\"Revoke someone's access.\")\n .action((ref, email) => unshareCommand(ref, email));\n\nconst configCmd = program.command(\"config\").description(\"Manage local Floom configuration\");\nconfigCmd\n .command(\"default-workspace [slug]\")\n .description(\"Show or set the default workspace\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((slug, opts) => defaultWorkspaceCommand(slug, opts));\n\nfunction addWorkspaceCommands(cmd: Command) {\n cmd.command(\"list\").action(libraryListCommand);\n cmd.command(\"create <slug> <name>\").action((slug, name) => libraryCreateCommand(slug, name));\n cmd.command(\"invite <workspaceSlug> <email>\").option(\"--role <role>\", \"viewer|editor|admin\", \"viewer\").action((workspaceSlug, email, opts) => libraryInviteCommand(workspaceSlug, email, opts.role));\n cmd.command(\"leave <workspaceSlug>\").action((workspaceSlug) => libraryLeaveCommand(workspaceSlug));\n cmd.command(\"activate <workspaceSlug>\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((workspaceSlug, opts) => workspaceActivateCommand(workspaceSlug, opts));\n cmd.command(\"deactivate <workspaceSlug>\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((workspaceSlug, opts) => workspaceDeactivateCommand(workspaceSlug, opts));\n cmd.command(\"active\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((opts) => workspaceActiveCommand(opts));\n}\n\naddWorkspaceCommands(program.command(\"workspace\").description(\"Manage workspaces\"));\naddWorkspaceCommands(program.command(\"library\").description(\"Manage workspaces (legacy alias)\"));\n\nconst instructionCmd = program.command(\"instruction\").description(\"Manage account and workspace instructions\");\ninstructionCmd\n .command(\"pull\")\n .description(\"Pull an account or workspace instruction into a managed local block\")\n .option(\"--account\", \"Pull account instruction\")\n .option(\"--workspace <slug>\", \"Pull workspace instruction\")\n .option(\"--target <target>\", \"default | claude | codex | cursor | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .option(\"--path <path>\", \"Instruction file path override\")\n .option(\"--apply\", \"Append managed block when the target file has no Floom block\")\n .option(\"--force\", \"Write without the first-apply guard\")\n .action((opts) => instructionPullCommand(opts));\ninstructionCmd\n .command(\"push <file>\")\n .description(\"Publish an account or workspace instruction from a markdown file\")\n .option(\"--account\", \"Publish account instruction\")\n .option(\"--workspace <slug>\", \"Publish workspace instruction\")\n .option(\"--target <target>\", \"default | claude | codex | cursor | opencode\", \"default\")\n .option(\"--changelog <text>\", \"Version changelog\")\n .action((file, opts) => instructionPushCommand(file, opts));\n\nprogram\n .command(\"doctor\")\n .description(\"Check local Floom CLI, auth, and fresh-agent MCP installability.\")\n .option(\"--fresh-agent\", \"Run MCP checks with a clean HOME and temp skills directory\")\n .option(\"--ref <ref>\", \"Skill ref to install during --fresh-agent, e.g. @depontefede/pdf\")\n .option(\"--target <target>\", \"Install target for --fresh-agent\", \"codex\")\n .option(\"--query <query>\", \"Search query for --fresh-agent\", \"pdf\")\n .option(\"--json\", \"Emit machine-readable JSON\")\n .action((opts) => doctorCommand(opts));\nprogram.command(\"mcp\").description(\"Run local MCP server over stdio.\").action(mcpCommand);\n\n// Global error handler\nasync function main(): Promise<void> {\n try {\n await program.parseAsync(process.argv);\n } catch (e) {\n if (e instanceof FloomError) {\n log.err(e.message);\n if (e.code === \"AUTH_REQUIRED\" || e.code === \"TOKEN_EXPIRED\") {\n log.info(\"Run: floom login\");\n }\n process.exit(1);\n }\n log.err((e as Error).message ?? \"Unknown error\");\n if (process.env.FLOOM_DEBUG) console.error(e);\n process.exit(1);\n }\n}\nmain();\n", "import { z } from \"zod\";\n\n// SPEC \u00A78.5 \u2014 Floom skill manifest schema (skill.json)\n\nconst slugSchema = z\n .string()\n .regex(\n /^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$/,\n \"name must be lowercase letters/digits/hyphens, 3-64 chars, start+end alphanumeric\"\n );\n\nconst semverSchema = z\n .string()\n .regex(\n /^[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9.-]+)?$/,\n \"version must be semver (e.g. 0.1.0 or 1.0.0-beta.1)\"\n );\n\nexport const skillTargetSchema = z.enum([\n \"generic\",\n \"claude\",\n \"codex\",\n \"cursor\",\n \"gemini\",\n \"opencode\",\n \"kimi\",\n \"custom\",\n]);\n\nexport const authorSchema = z.object({\n name: z.string().min(1),\n email: z.string().email().optional(),\n});\n\nexport const declaredScriptSchema = z.object({\n path: z.string(),\n description: z.string().max(280),\n});\n\nexport const manifestSchema = z\n .object({\n schema_version: z.literal(\"0.1\"),\n name: slugSchema,\n title: z.string().min(1).max(120),\n description: z.string().min(1).max(500),\n version: semverSchema,\n entrypoint: z.string().default(\"SKILL.md\"),\n targets: z.array(skillTargetSchema).default([\"generic\"]),\n tags: z.array(z.string().min(1).max(32)).max(10).optional(),\n authors: z.array(authorSchema).optional(),\n license: z.string().optional(),\n homepage: z.string().url().optional(),\n repository: z.string().url().optional(),\n source_url: z.string().url().optional(),\n declared_scripts: z.array(declaredScriptSchema).optional(),\n min_floom_version: semverSchema.optional(),\n })\n .strict();\n\nexport type SkillManifest = z.infer<typeof manifestSchema>;\n\nexport function parseManifest(raw: unknown): { ok: true; manifest: SkillManifest } | { ok: false; error: string } {\n const result = manifestSchema.safeParse(raw);\n if (result.success) return { ok: true, manifest: result.data };\n const issue = result.error.issues[0];\n return {\n ok: false,\n error: `${issue.path.join(\".\") || \"manifest\"}: ${issue.message}`,\n };\n}\n\n// CLI helper: read skill.json from a folder and parse.\nexport async function readManifest(skillDir: string): Promise<{ ok: true; manifest: SkillManifest } | { ok: false; error: string }> {\n const { readFile } = await import(\"node:fs/promises\");\n const { join } = await import(\"node:path\");\n try {\n const raw = await readFile(join(skillDir, \"skill.json\"), \"utf8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (e) {\n return { ok: false, error: `skill.json is not valid JSON: ${(e as Error).message}` };\n }\n return parseManifest(parsed);\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code === \"ENOENT\") return { ok: false, error: \"skill.json not found\" };\n return { ok: false, error: `failed to read skill.json: ${err.message}` };\n }\n}\n", "// SPEC \u00A77.3: lowercase letters/digits/hyphens, start+end alphanumeric, 3-64 chars\nconst SLUG_RE = /^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$/;\n\nexport function isValidSlug(input: string): boolean {\n return typeof input === \"string\" && SLUG_RE.test(input);\n}\n\nexport function slugErrorMessage(input: string): string | null {\n if (typeof input !== \"string\") return \"must be a string\";\n if (input.length < 3) return \"must be at least 3 characters\";\n if (input.length > 64) return \"must be at most 64 characters\";\n if (!/^[a-z0-9]/.test(input)) return \"must start with a lowercase letter or digit\";\n if (!/[a-z0-9]$/.test(input)) return \"must end with a lowercase letter or digit\";\n if (!/^[a-z0-9-]+$/.test(input)) return \"may only contain lowercase letters, digits, and hyphens\";\n return null;\n}\n\n// Profile handle: 3-32 chars, same rules\nconst HANDLE_RE = /^[a-z0-9][a-z0-9-]{1,30}[a-z0-9]$/;\nexport function isValidHandle(input: string): boolean {\n return typeof input === \"string\" && HANDLE_RE.test(input);\n}\n\n// Skill ref like @owner/slug, library-slug/slug, optional @version suffix\nconst REF_RE = /^@([a-z0-9][a-z0-9-]{1,30}[a-z0-9])\\/([a-z0-9][a-z0-9-]{1,62}[a-z0-9])(?:@([^@/]+))?$/;\nconst LIB_REF_RE = /^([a-z0-9][a-z0-9-]{1,62}[a-z0-9])\\/([a-z0-9][a-z0-9-]{1,62}[a-z0-9])(?:@([^@/]+))?$/;\nexport type SkillRef = { owner: string; slug: string; version?: string; isLibraryRef?: boolean };\n\nexport function parseSkillRef(input: string): SkillRef | null {\n const m = REF_RE.exec(input);\n if (m) {\n const [, owner, slug, version] = m;\n return version ? { owner, slug, version } : { owner, slug };\n }\n const m2 = LIB_REF_RE.exec(input);\n if (!m2) return null;\n const [, owner, slug, version] = m2;\n return version ? { owner, slug, version, isLibraryRef: true } : { owner, slug, isLibraryRef: true };\n}\n\nexport function formatSkillRef(ref: SkillRef): string {\n return ref.version ? `@${ref.owner}/${ref.slug}@${ref.version}` : `@${ref.owner}/${ref.slug}`;\n}\n\nconst SEMVER_RE = /^[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9.-]+)?$/;\nexport function isValidSemver(input: string): boolean {\n return typeof input === \"string\" && SEMVER_RE.test(input);\n}\n", "// SPEC \u00A711.15 \u2014 canonical error codes for CLI and API.\nexport const ERROR_CODES = {\n AUTH_REQUIRED: \"AUTH_REQUIRED\",\n TOKEN_EXPIRED: \"TOKEN_EXPIRED\",\n TOKEN_INVALID: \"TOKEN_INVALID\",\n SKILL_NOT_FOUND: \"SKILL_NOT_FOUND\",\n SKILL_ACCESS_DENIED: \"SKILL_ACCESS_DENIED\",\n VERSION_NOT_FOUND: \"VERSION_NOT_FOUND\",\n VERSION_ALREADY_EXISTS: \"VERSION_ALREADY_EXISTS\",\n INVALID_MANIFEST: \"INVALID_MANIFEST\",\n FILE_TOO_LARGE: \"FILE_TOO_LARGE\",\n BUNDLE_TOO_LARGE: \"BUNDLE_TOO_LARGE\",\n UPLOAD_FAILED: \"UPLOAD_FAILED\",\n DOWNLOAD_FAILED: \"DOWNLOAD_FAILED\",\n CLI_VERSION_TOO_OLD: \"CLI_VERSION_TOO_OLD\",\n CONFLICT_LOCAL_EDITS: \"CONFLICT_LOCAL_EDITS\",\n CONFLICT_UNTRACKED: \"CONFLICT_UNTRACKED\",\n LINK_INVALID: \"LINK_INVALID\",\n LINK_EXPIRED: \"LINK_EXPIRED\",\n LINK_REVOKED: \"LINK_REVOKED\",\n RATE_LIMITED: \"RATE_LIMITED\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\nexport interface FloomApiError {\n code: ErrorCode;\n message: string;\n request_id?: string;\n}\n\nexport class FloomError extends Error {\n code: ErrorCode;\n details?: Record<string, unknown>;\n constructor(code: ErrorCode, message: string, details?: Record<string, unknown>) {\n super(message);\n this.name = \"FloomError\";\n this.code = code;\n this.details = details;\n }\n}\n", "/**\n * SKILL.md frontmatter parser.\n * The open Agent Skills format requires the file to start with --- and have at minimum:\n * name: string\n * description: string\n * Other fields (allowed-tools, model, etc.) are tool-specific and we don't try to read them.\n * We don't pull in a full YAML lib \u2014 keep it dumb and predictable.\n */\nexport type SkillFrontmatter = {\n name?: string;\n description?: string;\n // Free-form passthrough: any other top-level YAML scalar keys are kept as strings\n extras: Record<string, string>;\n};\n\nexport function parseSkillFrontmatter(input: string): { meta: SkillFrontmatter; body: string } {\n // Strip BOM if present\n const trimmed = input.replace(/^\\uFEFF/, \"\");\n if (!trimmed.startsWith(\"---\")) {\n return { meta: { extras: {} }, body: input };\n }\n // Frontmatter must be the very first thing (no blank line, no H1 before it).\n const afterOpen = trimmed.slice(3);\n // Find closing --- on its own line\n const closeMatch = afterOpen.match(/\\r?\\n---\\s*(?:\\r?\\n|$)/);\n if (!closeMatch || closeMatch.index === undefined) {\n return { meta: { extras: {} }, body: input };\n }\n const headerBlock = afterOpen.slice(0, closeMatch.index);\n const body = afterOpen.slice(closeMatch.index + closeMatch[0].length);\n\n const meta: SkillFrontmatter = { extras: {} };\n for (const rawLine of headerBlock.split(/\\r?\\n/)) {\n const line = rawLine.trim();\n if (!line || line.startsWith(\"#\")) continue;\n const colon = line.indexOf(\":\");\n if (colon === -1) continue;\n const key = line.slice(0, colon).trim().toLowerCase();\n let value = line.slice(colon + 1).trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n if (key === \"name\") meta.name = value;\n else if (key === \"description\") meta.description = value;\n else meta.extras[key] = value;\n }\n\n return { meta, body };\n}\n\nexport function validateSkillFrontmatter(meta: SkillFrontmatter): string | null {\n if (!meta.name) return \"SKILL.md frontmatter missing required 'name' field\";\n if (!meta.description) return \"SKILL.md frontmatter missing required 'description' field\";\n if (meta.description.length > 500) return \"SKILL.md description must be at most 500 characters\";\n return null;\n}\n", "import { randomBytes, scrypt as scryptCb, timingSafeEqual, createHash } from \"node:crypto\";\nimport bcrypt from \"bcryptjs\";\nimport { promisify } from \"node:util\";\n\nconst bcryptCompat = bcrypt as typeof bcrypt & {\n hash(data: string, saltOrRounds: string | number): Promise<string>;\n};\n\nconst scrypt = promisify(scryptCb) as (\n password: string | Buffer,\n salt: string | Buffer,\n keylen: number,\n) => Promise<Buffer>;\n\n// SPEC \u00A713.1 \u2014 token format: flm_v1_<public_id>_<secret>\n// public_id: 16 chars base64url (lookup key, stored plain)\n// secret: 32 chars base64url (scrypt-hashed server-side with pepper)\nconst KEY_VERSION = \"v1\";\nconst PUBLIC_ID_BYTES = 10;\nconst SECRET_BYTES = 24;\nconst SCRYPT_KEYLEN = 64;\nconst SALT_BYTES = 16;\n\nexport type ParsedToken = {\n version: string;\n publicId: string;\n secret: string;\n};\n\nconst TOKEN_RE = /^flm_(v1)_([A-Za-z0-9_-]{14})_([A-Za-z0-9_-]{32})$/;\n\nexport function parseToken(raw: string): ParsedToken | null {\n const m = TOKEN_RE.exec(raw);\n if (!m) return null;\n return { version: m[1], publicId: m[2], secret: m[3] };\n}\n\nexport function isFloomToken(raw: string): boolean {\n return parseToken(raw) !== null;\n}\n\nexport type GeneratedToken = {\n raw: string;\n publicId: string;\n secretHash: string; // \"scrypt$<saltHex>$<keyHex>\"\n prefix: string;\n};\n\nfunction urlSafe(buf: Buffer): string {\n return buf.toString(\"base64url\");\n}\n\nexport async function generateToken(opts: { pepper: string }): Promise<GeneratedToken> {\n const publicId = urlSafe(randomBytes(PUBLIC_ID_BYTES));\n const secret = urlSafe(randomBytes(SECRET_BYTES));\n const raw = `flm_${KEY_VERSION}_${publicId}_${secret}`;\n const secretHash = await bcryptCompat.hash(secret + opts.pepper, 10);\n return { raw, publicId, secretHash, prefix: raw.slice(0, 12) };\n}\n\nexport async function verifyTokenSecret(\n secret: string,\n hash: string,\n pepper: string,\n): Promise<boolean> {\n if (hash.startsWith(\"$2\")) {\n try {\n return await bcrypt.compare(secret + pepper, hash);\n } catch {\n return false;\n }\n }\n const parts = hash.split(\"$\");\n if (parts.length !== 3 || parts[0] !== \"scrypt\") return false;\n try {\n const salt = Buffer.from(parts[1], \"hex\");\n const expected = Buffer.from(parts[2], \"hex\");\n const derived = await scrypt(secret + pepper, salt, expected.length);\n if (derived.length !== expected.length) return false;\n return timingSafeEqual(derived, expected);\n } catch {\n return false;\n }\n}\n\n// Share-link tokens \u2014 sha256 is sufficient (token is the credential; salt isn't needed\n// because tokens are random 24-byte values, not user-chosen).\nconst SHARE_LINK_TOKEN_BYTES = 24;\n\nexport type GeneratedShareLink = {\n raw: string;\n tokenHash: string;\n tokenPrefix: string;\n};\n\nexport function generateShareLinkToken(): GeneratedShareLink {\n const raw = urlSafe(randomBytes(SHARE_LINK_TOKEN_BYTES));\n const tokenHash = createHash(\"sha256\").update(raw).digest(\"hex\");\n return { raw, tokenHash, tokenPrefix: raw.slice(0, 4) };\n}\n\nexport function hashShareLinkToken(raw: string): string {\n return createHash(\"sha256\").update(raw).digest(\"hex\");\n}\n", "import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\n// SPEC \u00A711.9: --for presets. Drives default install paths per target.\n// `generic` and `all` use the vendor-neutral interop path .agents/skills/\n// which Codex, Gemini, OpenCode, and Kimi all read natively, and Cursor auto-imports.\n\nexport type InstallTarget =\n | \"generic\"\n | \"all\"\n | \"claude\"\n | \"codex\"\n | \"cursor\"\n | \"gemini\"\n | \"opencode\"\n | \"kimi\";\n\nexport const INSTALL_TARGETS: readonly InstallTarget[] = [\n \"generic\",\n \"all\",\n \"claude\",\n \"codex\",\n \"cursor\",\n \"gemini\",\n \"opencode\",\n \"kimi\",\n] as const;\n\nexport interface ResolvedTarget {\n target: InstallTarget;\n dir: string; // absolute or project-relative directory where <slug>/ goes\n origin: \"env\" | \"preset\" | \"explicit\";\n compatibleAgents: readonly string[];\n}\n\n// Compatibility metadata per target (informational; SPEC \u00A71.2 table)\nconst COMPATIBLE_AGENTS: Record<InstallTarget, readonly string[]> = {\n generic: [\"Claude Code\", \"Codex CLI\", \"Cursor\", \"Gemini CLI\", \"OpenCode\", \"Kimi CLI\"],\n all: [\"Claude Code\", \"Codex CLI\", \"Cursor\", \"Gemini CLI\", \"OpenCode\", \"Kimi CLI\"],\n claude: [\"Claude Code\", \"OpenCode\", \"Kimi CLI\"],\n codex: [\"Codex CLI\", \"Gemini CLI (via interop alias)\", \"OpenCode\", \"Kimi CLI\", \"Cursor (auto-import)\"],\n cursor: [\"Cursor (auto-import)\", \"Codex CLI\", \"OpenCode\", \"Kimi CLI\"],\n gemini: [\"Gemini CLI\"],\n opencode: [\"OpenCode\", \"Claude Code\", \"Codex CLI\", \"Kimi CLI\"],\n kimi: [\"Kimi CLI\", \"Claude Code\", \"OpenCode\"],\n};\n\nconst TARGET_ENV_DIRS: Record<InstallTarget, readonly string[]> = {\n generic: [\"FLOOM_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n all: [\"FLOOM_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n claude: [\"FLOOM_SKILLS_DIR\", \"CLAUDE_SKILLS_DIR\"],\n codex: [\"FLOOM_SKILLS_DIR\", \"CODEX_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n cursor: [\"FLOOM_SKILLS_DIR\", \"CURSOR_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n gemini: [\"FLOOM_SKILLS_DIR\", \"GEMINI_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n opencode: [\"FLOOM_SKILLS_DIR\", \"OPENCODE_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n kimi: [\"FLOOM_SKILLS_DIR\", \"KIMI_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n};\n\nfunction envDirForTarget(target: InstallTarget): string | null {\n for (const key of TARGET_ENV_DIRS[target]) {\n const value = process.env[key]?.trim();\n if (value) return value;\n }\n return null;\n}\n\nfunction presetDir(target: InstallTarget, opts: { global?: boolean; cwd?: string }): string {\n const cwd = opts.cwd ?? process.cwd();\n const root = opts.global ? homedir() : cwd;\n switch (target) {\n case \"claude\":\n return join(root, \".claude\", \"skills\");\n case \"gemini\":\n return join(root, \".gemini\", \"skills\");\n case \"kimi\":\n return join(root, \".kimi\", \"skills\");\n case \"codex\":\n case \"cursor\":\n case \"generic\":\n case \"all\":\n case \"opencode\":\n default:\n return join(root, \".agents\", \"skills\");\n }\n}\n\nexport function resolveInstallDir(args: {\n target?: InstallTarget;\n to?: string;\n global?: boolean;\n cwd?: string;\n}): ResolvedTarget {\n // Explicit --to overrides everything.\n if (args.to) {\n return {\n target: args.target ?? \"generic\",\n dir: args.to,\n origin: \"explicit\",\n compatibleAgents: COMPATIBLE_AGENTS[args.target ?? \"generic\"],\n };\n }\n\n const targetEnvDir = envDirForTarget(args.target ?? \"generic\");\n if (targetEnvDir) {\n return {\n target: args.target ?? \"generic\",\n dir: targetEnvDir,\n origin: \"env\",\n compatibleAgents: COMPATIBLE_AGENTS[args.target ?? \"generic\"],\n };\n }\n\n const target = args.target ?? \"generic\";\n return {\n target,\n dir: presetDir(target, { global: args.global, cwd: args.cwd }),\n origin: \"preset\",\n compatibleAgents: COMPATIBLE_AGENTS[target],\n };\n}\n\nexport function describeTargetForCli(t: ResolvedTarget): string {\n return `${t.target} \u2192 ${t.dir} (compatible with: ${t.compatibleAgents.join(\", \")})`;\n}\n", "import { readFile } from \"node:fs/promises\";\n\nexport type SkillSecurityFinding = {\n label: string;\n path?: string;\n line: number;\n preview: string;\n severity: \"high\" | \"medium\";\n category: \"secret\" | \"prompt_injection\" | \"data_exfiltration\" | \"personal_data\" | \"unsafe_file\";\n};\n\ntype SecurityPattern = {\n label: string;\n category: SkillSecurityFinding[\"category\"];\n severity?: SkillSecurityFinding[\"severity\"];\n regex: RegExp;\n};\n\nconst PATTERNS: SecurityPattern[] = [\n { label: \"OpenAI API key\", category: \"secret\", regex: /\\bsk-proj-[A-Za-z0-9_-]{20,}\\b/g },\n { label: \"OpenAI API key\", category: \"secret\", regex: /\\bsk-[A-Za-z0-9]{32,}\\b/g },\n { label: \"Anthropic API key\", category: \"secret\", regex: /\\bsk-ant-[A-Za-z0-9_-]{20,}\\b/g },\n { label: \"Google API key\", category: \"secret\", regex: /\\bAIza[0-9A-Za-z_-]{25,}\\b/g },\n { label: \"GitHub token\", category: \"secret\", regex: /\\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{30,}\\b/g },\n { label: \"GitHub token\", category: \"secret\", regex: /\\bgithub_pat_[A-Za-z0-9_]{40,}\\b/g },\n { label: \"Supabase access token\", category: \"secret\", regex: /\\bsbp_[A-Za-z0-9]{30,}\\b/g },\n { label: \"Stripe secret key\", category: \"secret\", regex: /\\bsk_(?:live|test)_[A-Za-z0-9]{20,}\\b/g },\n { label: \"Slack token\", category: \"secret\", regex: /\\bxox[baprs]-[A-Za-z0-9-]{20,}\\b/g },\n { label: \"AWS access key\", category: \"secret\", regex: /\\b(?:AKIA|ASIA)[A-Z0-9]{16}\\b/g },\n { label: \"Floom API token\", category: \"secret\", regex: /\\bflm_v1_[A-Za-z0-9_-]{14}_[A-Za-z0-9_-]{32}\\b/g },\n { label: \"Private key\", category: \"secret\", regex: /-----BEGIN (?:RSA |EC |OPENSSH |)PRIVATE KEY-----/g },\n { label: \"Prompt injection instruction\", category: \"prompt_injection\", regex: /\\bignore (?:all )?(?:previous|prior|above|earlier) instructions\\b/gi },\n { label: \"Prompt injection instruction\", category: \"prompt_injection\", regex: /\\bdisregard (?:all )?(?:previous|prior|above|earlier) instructions\\b/gi },\n { label: \"Prompt injection instruction\", category: \"prompt_injection\", regex: /\\bforget (?:all )?(?:previous|prior|above|earlier) instructions\\b/gi },\n { label: \"Prompt injection instruction\", category: \"prompt_injection\", regex: /\\boverride (?:the )?(?:system|developer|safety) instructions\\b/gi },\n { label: \"System prompt extraction\", category: \"prompt_injection\", regex: /\\b(?:reveal|print|show|dump|expose|leak) (?:the )?(?:system prompt|developer message|hidden instructions)\\b/gi },\n { label: \"Data exfiltration instruction\", category: \"data_exfiltration\", regex: /\\b(?:send|post|upload|exfiltrate|copy) (?:[^.\\n]{0,80})\\b(?:api keys?|tokens?|secrets?|environment variables|\\.env|credentials)\\b(?:[^.\\n]{0,120})\\b(?:to|into) https?:\\/\\//gi },\n { label: \"Data exfiltration instruction\", category: \"data_exfiltration\", regex: /\\b(?:curl|wget|fetch)\\b[^\\n]{0,160}\\b(?:api keys?|tokens?|secrets?|environment variables|\\.env|credentials)\\b/gi },\n { label: \"Credential harvesting instruction\", category: \"data_exfiltration\", regex: /\\b(?:collect|harvest|steal|extract) (?:[^.\\n]{0,80})\\b(?:api keys?|tokens?|secrets?|environment variables|\\.env|credentials)\\b/gi },\n { label: \"Possible personal email address\", category: \"personal_data\", severity: \"medium\", regex: /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/gi },\n { label: \"Possible phone number\", category: \"personal_data\", severity: \"medium\", regex: /\\b(?:\\+?\\d[\\s().-]?){9,}\\d\\b/g },\n { label: \"Dangerous shell command\", category: \"data_exfiltration\", regex: /\\bcurl\\b[^\\n|]{0,120}\\|\\s*(?:sh|bash)\\b/gi },\n { label: \"Dangerous shell command\", category: \"data_exfiltration\", regex: /\\brm\\s+-rf\\s+(?:\\/|\\$HOME|~)\\b/g },\n];\n\nconst GENERIC_ASSIGNMENT_RE = /\\b(?:api[_-]?key|secret|access[_-]?token|auth[_-]?token|bearer[_-]?token)\\b\\s*[:=]\\s*[\"']?([A-Za-z0-9_./+=-]{24,})[\"']?/gi;\nconst PROVIDER_LIKE_ASSIGNMENT_RE = /\\b(?:api[_-]?key|secret|access[_-]?token|auth[_-]?token|bearer[_-]?token)\\b\\s*[:=]\\s*[\"']?((?:sk|pk|rk)-[A-Za-z0-9_-]{8,}|sbp_[A-Za-z0-9]{12,}|xox[baprs]-[A-Za-z0-9-]{12,})[\"']?/gi;\nconst PLACEHOLDER_RE = /(?:^|[_./+=-])(?:your|example|sample|placeholder|replace|changeme|todo|xxx|test|demo|dummy|fake|mock|staging|dev|local|redacted)(?:$|[_./+=-])/i;\nconst EXAMPLE_EMAIL_RE = /@(example\\.(?:com|org|net)|example|test|localhost)$/i;\nconst TEXT_FILE_RE = /\\.(?:md|mdx|txt|json|jsonc|ya?ml|toml|ini|env|example|ts|tsx|js|jsx|mjs|cjs|py|rb|go|rs|java|kt|sh|bash|zsh|fish|ps1|sql|html|css|csv)$/i;\nconst FORBIDDEN_FILE_PATTERNS: Array<{ regex: RegExp; severity: SkillSecurityFinding[\"severity\"]; label: string }> = [\n { label: \"Environment file\", severity: \"high\", regex: /(^|\\/)\\.env(?:$|\\.local$|\\.production$|\\.development$)/ },\n { label: \"Private key file\", severity: \"high\", regex: /(^|\\/)(?:id_rsa|id_ed25519|.*\\.(?:pem|key|p12|pfx))$/i },\n { label: \"npm credentials file\", severity: \"high\", regex: /(^|\\/)\\.npmrc$/ },\n { label: \"Credentials file\", severity: \"high\", regex: /(^|\\/)(?:credentials|service-account|service_account)\\.json$/i },\n { label: \"Example environment file\", severity: \"medium\", regex: /(^|\\/)\\.env\\.example$/ },\n];\n\nfunction redact(value: string): string {\n if (value.length <= 12) return \"[redacted]\";\n return `${value.slice(0, 4)}...${value.slice(-4)}`;\n}\n\nfunction lineNumberAt(input: string, index: number): number {\n let line = 1;\n for (let i = 0; i < index; i++) {\n if (input.charCodeAt(i) === 10) line++;\n }\n return line;\n}\n\nfunction isProbablyText(buf: Buffer, path: string): boolean {\n if (TEXT_FILE_RE.test(path)) return true;\n if (buf.includes(0)) return false;\n const sample = buf.subarray(0, Math.min(buf.length, 4096));\n let suspicious = 0;\n for (const byte of sample) {\n if (byte < 9 || (byte > 13 && byte < 32)) suspicious++;\n }\n return sample.length === 0 || suspicious / sample.length < 0.02;\n}\n\nexport function scanSkillText(input: string, opts: { path?: string } = {}): SkillSecurityFinding[] {\n const findings: SkillSecurityFinding[] = [];\n const seen = new Set<string>();\n const push = (label: string, category: SkillSecurityFinding[\"category\"], severity: SkillSecurityFinding[\"severity\"], index: number, value: string) => {\n const key = `${opts.path ?? \"\"}:${label}:${category}:${index}:${value}`;\n if (seen.has(key)) return;\n seen.add(key);\n findings.push({ label, category, path: opts.path, severity, line: lineNumberAt(input, index), preview: redact(value.replace(/\\s+/g, \" \").trim()) });\n };\n\n for (const pattern of PATTERNS) {\n pattern.regex.lastIndex = 0;\n for (const match of input.matchAll(pattern.regex)) {\n const value = match[0] ?? \"\";\n if (pattern.category === \"personal_data\" && EXAMPLE_EMAIL_RE.test(value)) continue;\n push(pattern.label, pattern.category, pattern.severity ?? \"high\", match.index ?? 0, value);\n }\n }\n\n GENERIC_ASSIGNMENT_RE.lastIndex = 0;\n for (const match of input.matchAll(GENERIC_ASSIGNMENT_RE)) {\n const value = match[1] ?? \"\";\n if (!value || PLACEHOLDER_RE.test(value)) continue;\n push(\"Possible secret assignment\", \"secret\", \"high\", match.index ?? 0, value);\n }\n\n PROVIDER_LIKE_ASSIGNMENT_RE.lastIndex = 0;\n for (const match of input.matchAll(PROVIDER_LIKE_ASSIGNMENT_RE)) {\n const value = match[1] ?? \"\";\n if (!value) continue;\n push(\"Provider-like secret assignment\", \"secret\", \"high\", match.index ?? 0, value);\n }\n\n return findings.sort((a, b) => (a.path ?? \"\").localeCompare(b.path ?? \"\") || a.line - b.line || a.label.localeCompare(b.label));\n}\n\nexport function scanSkillMarkdown(input: string): SkillSecurityFinding[] {\n return scanSkillText(input);\n}\n\nexport function isBlockingSecurityFinding(finding: SkillSecurityFinding): boolean {\n return finding.severity === \"high\" && (\n finding.category === \"secret\" ||\n finding.category === \"data_exfiltration\" ||\n finding.category === \"unsafe_file\"\n );\n}\n\nexport async function scanSkillBundleEntries(entries: Array<{ relPath: string; data: Buffer }>): Promise<SkillSecurityFinding[]> {\n const findings: SkillSecurityFinding[] = [];\n for (const entry of entries) {\n for (const rule of FORBIDDEN_FILE_PATTERNS) {\n if (rule.regex.test(entry.relPath)) {\n findings.push({ label: rule.label, path: entry.relPath, line: 1, preview: entry.relPath, severity: rule.severity, category: \"unsafe_file\" });\n }\n }\n if (!isProbablyText(entry.data, entry.relPath)) continue;\n findings.push(...scanSkillText(entry.data.toString(\"utf8\"), { path: entry.relPath }));\n }\n return findings.sort((a, b) => (a.path ?? \"\").localeCompare(b.path ?? \"\") || a.line - b.line || a.label.localeCompare(b.label));\n}\n\nexport async function scanSkillBundleFiles(files: Array<{ relPath: string; absPath: string; size: number }>): Promise<SkillSecurityFinding[]> {\n const entries: Array<{ relPath: string; data: Buffer }> = [];\n for (const file of files) {\n const buf = await readFile(file.absPath);\n entries.push({ relPath: file.relPath, data: buf });\n }\n return scanSkillBundleEntries(entries);\n}\n", "import { readFile, readdir, stat, lstat, mkdir } from \"node:fs/promises\";\nimport { join, relative, sep, posix } from \"node:path\";\nimport { createHash } from \"node:crypto\";\n\n// SPEC \u00A78.7 \u2014 limits\nexport const LIMITS = {\n maxBundleBytes: 10 * 1024 * 1024, // 10 MB compressed\n maxUncompressedBytes: 50 * 1024 * 1024,\n maxFiles: 100,\n maxFileBytes: 2 * 1024 * 1024, // 2 MB per file\n maxPathLength: 200,\n} as const;\n\nconst DEFAULT_IGNORE = [\n \".git\",\n \"node_modules\",\n \"dist\",\n \"build\",\n \".next\",\n \".cache\",\n \".DS_Store\",\n \".env\",\n \".env.local\",\n \".env.development\",\n \".env.production\",\n \"*.pem\",\n \"*.key\",\n \"*.p12\",\n \"*.sqlite\",\n \"*.db\",\n];\n\nexport interface SkillFileEntry {\n relPath: string;\n absPath: string;\n size: number;\n sha256: string;\n}\n\nexport interface CollectedBundle {\n rootDir: string;\n files: SkillFileEntry[];\n totalUncompressedBytes: number;\n hasScripts: boolean;\n}\n\nfunction matchesGlob(name: string, pat: string): boolean {\n if (pat.includes(\"*\")) {\n const re = new RegExp(\"^\" + pat.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\*/g, \".*\") + \"$\");\n return re.test(name);\n }\n return name === pat;\n}\n\nfunction isIgnored(relPath: string, patterns: string[]): boolean {\n const parts = relPath.split(posix.sep);\n for (const pat of patterns) {\n const cleanPat = pat.replace(/^\\/|\\/$/g, \"\");\n if (parts.some((p) => matchesGlob(p, cleanPat))) return true;\n }\n return false;\n}\n\nasync function loadFloomIgnore(dir: string): Promise<string[]> {\n try {\n const raw = await readFile(join(dir, \".floomignore\"), \"utf8\");\n return raw.split(/\\r?\\n/).map((l) => l.trim()).filter((l) => l && !l.startsWith(\"#\"));\n } catch {\n return [];\n }\n}\n\nasync function walk(rootDir: string, ignore: string[], acc: SkillFileEntry[], current: string): Promise<void> {\n const entries = await readdir(current, { withFileTypes: true });\n for (const entry of entries) {\n const abs = join(current, entry.name);\n const rel = relative(rootDir, abs).split(sep).join(posix.sep);\n if (entry.isSymbolicLink()) {\n throw new Error(`Symlinks are not allowed: ${rel}`);\n }\n if (isIgnored(rel, ignore)) continue;\n if (entry.isDirectory()) {\n await walk(rootDir, ignore, acc, abs);\n continue;\n }\n if (!entry.isFile()) continue;\n const ls = await lstat(abs);\n if (ls.isSymbolicLink()) throw new Error(`Symlinks are not allowed: ${rel}`);\n if (rel.length > LIMITS.maxPathLength) {\n throw new Error(`Path too long (>${LIMITS.maxPathLength} chars): ${rel}`);\n }\n if (rel.includes(\"..\")) {\n throw new Error(`Path traversal detected: ${rel}`);\n }\n const buf = await readFile(abs);\n if (buf.length > LIMITS.maxFileBytes) {\n throw new Error(`File too large (${buf.length} > ${LIMITS.maxFileBytes}): ${rel}`);\n }\n const sha256 = createHash(\"sha256\").update(buf).digest(\"hex\");\n acc.push({ relPath: rel, absPath: abs, size: buf.length, sha256 });\n }\n}\n\nexport async function collectBundle(rootDir: string): Promise<CollectedBundle> {\n const st = await stat(rootDir);\n if (!st.isDirectory()) throw new Error(`Not a directory: ${rootDir}`);\n const ignore = [...DEFAULT_IGNORE, ...(await loadFloomIgnore(rootDir))];\n const files: SkillFileEntry[] = [];\n await walk(rootDir, ignore, files, rootDir);\n files.sort((a, b) => a.relPath.localeCompare(b.relPath));\n\n if (files.length === 0) throw new Error(\"No files to bundle (after applying ignores)\");\n if (files.length > LIMITS.maxFiles) {\n throw new Error(`Too many files (${files.length} > ${LIMITS.maxFiles})`);\n }\n const total = files.reduce((n, f) => n + f.size, 0);\n if (total > LIMITS.maxUncompressedBytes) {\n throw new Error(`Bundle too large uncompressed (${total} > ${LIMITS.maxUncompressedBytes})`);\n }\n const hasScripts = files.some((f) => f.relPath.startsWith(\"scripts/\"));\n return { rootDir, files, totalUncompressedBytes: total, hasScripts };\n}\n\nexport interface PackResult {\n bytes: Buffer;\n sha256: string;\n}\n\nexport async function packBundle(bundle: CollectedBundle): Promise<PackResult> {\n const tar = await import(\"tar\");\n const stream = (tar as any).create(\n {\n gzip: { level: 9 },\n cwd: bundle.rootDir,\n portable: true,\n noMtime: true,\n },\n bundle.files.map((f) => f.relPath),\n );\n\n const chunks: Buffer[] = [];\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n chunks.push(Buffer.from(chunk));\n }\n const buf = Buffer.concat(chunks);\n if (buf.length > LIMITS.maxBundleBytes) {\n throw new Error(`Compressed bundle too large (${buf.length} > ${LIMITS.maxBundleBytes})`);\n }\n return { bytes: buf, sha256: createHash(\"sha256\").update(buf).digest(\"hex\") };\n}\n\nexport async function extractBundle(buf: Buffer, destDir: string): Promise<void> {\n const tar = await import(\"tar\");\n const { Readable } = await import(\"node:stream\");\n await mkdir(destDir, { recursive: true });\n\n await new Promise<void>((resolve, reject) => {\n const extractStream = (tar as any).extract({\n cwd: destDir,\n strict: true,\n preserveOwner: false,\n filter: (path: string) => {\n if (path.startsWith(\"/\") || path.includes(\"..\")) return false;\n if (path.length > LIMITS.maxPathLength) return false;\n return true;\n },\n onwarn: (_code: string, msg: string) => {\n if (msg.toLowerCase().includes(\"symlink\")) reject(new Error(\"Bundle contains symlinks\"));\n },\n });\n\n Readable.from(buf)\n .pipe(extractStream)\n .on(\"finish\", () => resolve())\n .on(\"error\", reject);\n });\n}\n\nexport function verifyBundleHash(buf: Buffer, expected: string): boolean {\n const actual = createHash(\"sha256\").update(buf).digest(\"hex\");\n return actual === expected;\n}\n", "import chalk from \"chalk\";\n\nexport const log = {\n info: (msg: string) => console.log(msg),\n ok: (msg: string) => console.log(chalk.green(\"\u2713 \") + msg),\n warn: (msg: string) => console.log(chalk.yellow(\"! \") + msg),\n err: (msg: string) => console.error(chalk.red(\"\u2717 \") + msg),\n step: (msg: string) => console.log(chalk.dim(\"\u00B7 \") + msg),\n heading: (msg: string) => console.log(\"\\n\" + chalk.bold(msg)),\n kv: (key: string, value: string) => console.log(` ${chalk.dim(key.padEnd(18))}${value}`),\n blank: () => console.log(\"\"),\n};\n\nexport function exitWith(code: number, msg?: string): never {\n if (msg) log.err(msg);\n process.exit(code);\n}\n", "import open from \"node:child_process\";\nimport { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { api } from \"../api-client.js\";\nimport { getApiUrl, writeAuth } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\nimport { VERSION } from \"../version.js\";\n\nconst sh = promisify(exec);\n\ninterface CreateSessionResponse {\n session_id: string;\n device_code: string;\n user_code: string;\n verification_uri: string;\n expires_at: string;\n poll_interval_seconds: number;\n}\n\ninterface PollSessionResponse {\n status: \"pending\" | \"approved\" | \"expired\" | \"denied\";\n token?: string;\n handle?: string;\n email?: string;\n}\n\nasync function openInBrowser(url: string): Promise<void> {\n const opener = process.platform === \"darwin\" ? \"open\" : process.platform === \"win32\" ? \"start\" : \"xdg-open\";\n try { await sh(`${opener} ${JSON.stringify(url)}`); } catch { /* user can copy-paste */ }\n}\n\nexport async function loginCommand(): Promise<void> {\n log.heading(\"Starting CLI login...\");\n const session = await api<CreateSessionResponse>(\"/cli/sessions\", {\n method: \"POST\",\n body: { client: \"floom-cli\", version: VERSION },\n });\n\n log.info(\"\");\n log.info(`Open this URL in your browser:`);\n log.info(` ${session.verification_uri}`);\n log.info(\"\");\n log.info(`Your code: ${session.user_code}`);\n log.info(\"\");\n log.info(\"Waiting for approval in the browser. Press Ctrl+C to cancel.\");\n\n openInBrowser(session.verification_uri).catch(() => {});\n\n const deadline = new Date(session.expires_at).getTime();\n const interval = Math.max(2, session.poll_interval_seconds) * 1000;\n\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, interval));\n const pollPath = `/cli/sessions/${session.session_id}?device_code=${encodeURIComponent(session.device_code)}`;\n const poll = await api<PollSessionResponse>(pollPath);\n if (poll.status === \"approved\" && poll.token && poll.handle && poll.email) {\n await writeAuth({\n token: poll.token,\n handle: poll.handle,\n email: poll.email,\n apiUrl: getApiUrl(),\n });\n log.ok(`Logged in as @${poll.handle} (${poll.email})`);\n log.info(\"\");\n log.info(\"Next:\");\n log.info(\" floom init\");\n log.info(\" floom publish\");\n log.info(` floom install @${poll.handle}/your-skill --for codex`);\n return;\n }\n if (poll.status === \"denied\") {\n log.err(\"Login denied.\");\n process.exit(1);\n }\n if (poll.status === \"expired\") {\n log.err(\"Login session expired. Run `floom login` again.\");\n process.exit(1);\n }\n process.stdout.write(\".\");\n }\n log.err(\"Login timed out.\");\n process.exit(1);\n}\n", "import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { mkdir, readFile, writeFile, chmod } from \"node:fs/promises\";\n\nconst CONFIG_DIR = join(homedir(), \".floom\");\nconst AUTH_FILE = join(CONFIG_DIR, \"auth.json\");\n\nexport interface AuthState {\n token: string; // flm_v1_<id>_<secret>\n handle: string;\n email: string;\n apiUrl: string;\n}\n\nexport const DEFAULT_APP_URL = \"https://skills.floom.dev\";\nexport const DEFAULT_API_URL = \"https://skills.floom.dev/api/v1\";\nconst LEGACY_API_HOSTS = new Set([\"floom-v0.vercel.app\"]);\n\nasync function ensureDir(): Promise<void> {\n await mkdir(CONFIG_DIR, { recursive: true, mode: 0o700 });\n}\n\nexport async function readAuth(): Promise<AuthState | null> {\n const parsed = await readRawAuth();\n return parsed ? { ...parsed, apiUrl: normalizeApiUrl(parsed.apiUrl) } : null;\n}\n\nexport async function readRawAuth(): Promise<AuthState | null> {\n try {\n const raw = await readFile(AUTH_FILE, \"utf8\");\n return JSON.parse(raw) as AuthState;\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw e;\n }\n}\n\nexport async function writeAuth(state: AuthState): Promise<void> {\n await ensureDir();\n await writeFile(AUTH_FILE, JSON.stringify({ ...state, apiUrl: normalizeApiUrl(state.apiUrl) }, null, 2), { mode: 0o600 });\n try { await chmod(AUTH_FILE, 0o600); } catch { /* best effort on win */ }\n}\n\nexport async function clearAuth(): Promise<void> {\n const { unlink } = await import(\"node:fs/promises\");\n try { await unlink(AUTH_FILE); } catch { /* ignore */ }\n}\n\nexport function getApiUrl(): string {\n if (process.env.FLOOM_API_URL) return process.env.FLOOM_API_URL;\n if (process.env.FLOOM_APP_URL) return `${getAppUrl().replace(/\\/$/, \"\")}/api/v1`;\n return DEFAULT_API_URL;\n}\n\nexport function getAppUrl(): string {\n return process.env.FLOOM_APP_URL ?? DEFAULT_APP_URL;\n}\n\nexport function getApiBaseUrls(preferred?: string | null): string[] {\n const explicitApiUrl = process.env.FLOOM_API_URL?.trim();\n if (explicitApiUrl) return [normalizeApiUrl(explicitApiUrl)];\n\n const primary = normalizeApiUrl(preferred ?? getApiUrl());\n const bases = [primary];\n if (preferred && !process.env.FLOOM_APP_URL) bases.push(DEFAULT_API_URL);\n\n return Array.from(new Set(bases));\n}\n\nexport function normalizeApiUrl(apiUrl: string): string {\n const trimmed = apiUrl.replace(/\\/$/, \"\");\n try {\n const url = new URL(trimmed);\n if (LEGACY_API_HOSTS.has(url.hostname)) return DEFAULT_API_URL;\n } catch {\n return DEFAULT_API_URL;\n }\n return trimmed;\n}\n\nexport function isLegacyApiUrl(apiUrl: string | null | undefined): boolean {\n if (!apiUrl) return false;\n try {\n return LEGACY_API_HOSTS.has(new URL(apiUrl).hostname);\n } catch {\n return false;\n }\n}\n", "export const VERSION = \"0.2.9\";\n", "import { FloomError, type ErrorCode } from \"@floom/shared\";\nimport { getApiBaseUrls, readAuth } from \"./config.js\";\nimport { VERSION } from \"./version.js\";\n\nexport interface ApiOptions {\n method?: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\" | \"PUT\";\n body?: unknown;\n authRequired?: boolean;\n query?: Record<string, string | number | boolean | undefined>;\n}\n\nconst DEFAULT_TIMEOUT_MS = 20_000;\n\nfunction timeoutMs(): number {\n const raw = Number(process.env.FLOOM_API_TIMEOUT_MS);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_TIMEOUT_MS;\n}\n\nasync function fetchWithTimeout(url: string | URL, init: RequestInit = {}): Promise<Response> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs());\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } catch (e) {\n if ((e as Error).name === \"AbortError\") {\n throw new Error(`Request timed out after ${timeoutMs()}ms`);\n }\n throw e;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function api<T = unknown>(path: string, opts: ApiOptions = {}): Promise<T> {\n const auth = await readAuth();\n const token = process.env.FLOOM_API_TOKEN?.trim() || auth?.token;\n if (opts.authRequired && !token) {\n throw new FloomError(\"AUTH_REQUIRED\" as ErrorCode, \"Not logged in. Run: floom login\");\n }\n\n let lastError: FloomError | null = null;\n const bases = getApiBaseUrls(auth?.apiUrl);\n for (const base of bases) {\n const url = new URL(base + path);\n if (opts.query) {\n for (const [k, v] of Object.entries(opts.query)) {\n if (v !== undefined) url.searchParams.set(k, String(v));\n }\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `floom-cli/${VERSION}`,\n \"x-floom-cli-version\": VERSION,\n };\n if (token) headers.Authorization = `Bearer ${token}`;\n\n let res: Response;\n try {\n res = await fetchWithTimeout(url.toString(), {\n method: opts.method ?? \"GET\",\n headers,\n body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined,\n });\n } catch (e) {\n lastError = new FloomError(\n \"INTERNAL_ERROR\" as ErrorCode,\n `Unable to reach Floom API at ${base}: ${(e as Error).message}`,\n { apiUrl: base },\n );\n continue;\n }\n\n const text = await res.text();\n let json: any = null;\n try { json = text ? JSON.parse(text) : null; } catch { /* not JSON */ }\n\n if (res.ok) return json as T;\n\n const err = json?.error ?? {};\n lastError = new FloomError(\n (err.code ?? \"INTERNAL_ERROR\") as ErrorCode,\n err.message ?? `HTTP ${res.status} ${res.statusText}`,\n { status: res.status, requestId: err.request_id, apiUrl: base },\n );\n\n if (res.status !== 404 || json?.error) break;\n }\n\n throw lastError ?? new FloomError(\"INTERNAL_ERROR\" as ErrorCode, \"API request failed\");\n}\n\n// Variants for binary upload/download to Supabase Storage signed URLs (no auth header)\nexport async function rawPut(url: string, body: Buffer | Uint8Array, contentType = \"application/octet-stream\"): Promise<void> {\n // Convert to BufferSource that fetch accepts\n const u8 = body instanceof Buffer ? new Uint8Array(body) : body;\n let res: Response;\n try {\n res = await fetchWithTimeout(url, {\n method: \"PUT\",\n headers: { \"Content-Type\": contentType },\n body: u8 as BodyInit,\n });\n } catch (e) {\n throw new FloomError(\"UPLOAD_FAILED\" as ErrorCode, `Upload failed: ${(e as Error).message}`);\n }\n if (!res.ok) {\n throw new FloomError(\n \"UPLOAD_FAILED\" as ErrorCode,\n `Upload failed: HTTP ${res.status} ${res.statusText}`,\n );\n }\n}\n\nexport async function rawGet(url: string): Promise<Buffer> {\n let res: Response;\n try {\n res = await fetchWithTimeout(url);\n } catch (e) {\n throw new FloomError(\"DOWNLOAD_FAILED\" as ErrorCode, `Download failed: ${(e as Error).message}`);\n }\n if (!res.ok) {\n throw new FloomError(\n \"DOWNLOAD_FAILED\" as ErrorCode,\n `Download failed: HTTP ${res.status} ${res.statusText}`,\n );\n }\n const ab = await res.arrayBuffer();\n return Buffer.from(ab);\n}\n", "import { clearAuth, readAuth } from \"../config.js\";\nimport { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\nexport async function logoutCommand(): Promise<void> {\n const auth = await readAuth();\n if (!auth) {\n log.info(\"Not logged in.\");\n return;\n }\n try {\n await api(\"/cli/sessions/revoke\", { method: \"POST\", authRequired: true });\n } catch {\n // best effort; we still clear local token\n }\n await clearAuth();\n log.ok(\"Logged out.\");\n}\n", "import { api } from \"../api-client.js\";\nimport { readAuth } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface MeResponse {\n user: { handle: string; email: string };\n}\n\nexport async function whoamiCommand(): Promise<void> {\n const auth = await readAuth();\n const envToken = process.env.FLOOM_API_TOKEN?.trim();\n if (!auth && !envToken) {\n log.info(\"Not logged in. Run: floom login\");\n process.exitCode = 1;\n return;\n }\n let me: MeResponse;\n try {\n me = await api<MeResponse>(\"/me\", { authRequired: true });\n } catch (e) {\n log.err(`Login is not accepted by the Floom API: ${(e as Error).message}`);\n log.info(\"Run: floom login\");\n process.exitCode = 1;\n return;\n }\n log.heading(\"Logged in as:\");\n log.kv(\"handle\", `@${me.user.handle}`);\n log.kv(\"email\", me.user.email);\n log.kv(\"api url\", process.env.FLOOM_API_URL ?? auth?.apiUrl ?? \"default\");\n if (envToken) log.kv(\"auth\", \"FLOOM_API_TOKEN\");\n}\n", "import { writeFile, stat, readFile } from \"node:fs/promises\";\nimport { join, basename } from \"node:path\";\nimport prompts from \"prompts\";\nimport { isValidSlug, slugErrorMessage, type SkillManifest } from \"@floom/shared\";\nimport { log } from \"../lib/output.js\";\n\nasync function pathExists(p: string): Promise<boolean> {\n try { await stat(p); return true; } catch { return false; }\n}\n\nexport async function initCommand(): Promise<void> {\n const cwd = process.cwd();\n const folderName = basename(cwd);\n\n if (await pathExists(join(cwd, \"skill.json\"))) {\n log.err(\"skill.json already exists in this folder. Edit it directly or run from a fresh directory.\");\n process.exit(1);\n }\n\n const defaultName = folderName.toLowerCase().replace(/[^a-z0-9-]/g, \"-\").replace(/-+/g, \"-\").replace(/^-|-$/g, \"\");\n\n const answers = await prompts([\n {\n type: \"text\",\n name: \"name\",\n message: \"Skill name (lowercase, hyphens):\",\n initial: isValidSlug(defaultName) ? defaultName : \"\",\n validate: (v: string) => slugErrorMessage(v) ?? true,\n },\n {\n type: \"text\",\n name: \"title\",\n message: \"Title (human-readable):\",\n initial: (prev: string) => prev.split(\"-\").map((w: string) => w[0]?.toUpperCase() + w.slice(1)).join(\" \"),\n validate: (v: string) => v.trim().length > 0 ? true : \"title required\",\n },\n {\n type: \"text\",\n name: \"description\",\n message: \"One-line description:\",\n validate: (v: string) => v.trim().length > 0 ? true : \"description required\",\n },\n {\n type: \"text\",\n name: \"version\",\n message: \"Version:\",\n initial: \"0.1.0\",\n },\n ]);\n\n if (!answers.name) { log.err(\"Init cancelled.\"); process.exit(1); }\n\n const manifest: SkillManifest = {\n schema_version: \"0.1\",\n name: answers.name,\n title: answers.title,\n description: answers.description,\n version: answers.version,\n entrypoint: \"SKILL.md\",\n targets: [\"generic\"],\n };\n\n const skillMd = `---\nname: ${answers.name}\ndescription: ${answers.description}\n---\n\n# ${answers.title}\n\n## Purpose\n\n${answers.description}\n\n## When to use\n\n(Describe when this skill should be activated.)\n\n## Process\n\n1. (Step one)\n2. (Step two)\n\n## Output\n\n(Describe what the skill produces.)\n`;\n\n const floomIgnore = `# Floom CLI ignore patterns\n# One pattern per line, glob-style\ntmp/\ndrafts/\n*.log\n`;\n\n await writeFile(join(cwd, \"skill.json\"), JSON.stringify(manifest, null, 2) + \"\\n\", \"utf8\");\n await writeFile(join(cwd, \"SKILL.md\"), skillMd, \"utf8\");\n await writeFile(join(cwd, \".floomignore\"), floomIgnore, \"utf8\");\n\n log.blank();\n log.ok(\"Skill scaffolded.\");\n log.kv(\"skill.json\", \"manifest (edit metadata)\");\n log.kv(\"SKILL.md\", \"instructions for the agent\");\n log.kv(\".floomignore\", \"patterns to exclude from publish\");\n log.blank();\n log.info(\"Next:\");\n log.info(\" 1. Edit SKILL.md\");\n log.info(\" 2. floom validate\");\n log.info(\" 3. floom publish\");\n}\n", "import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n readManifest,\n parseSkillFrontmatter,\n validateSkillFrontmatter,\n collectBundle,\n isBlockingSecurityFinding,\n scanSkillBundleFiles,\n scanSkillMarkdown,\n} from \"@floom/shared\";\nimport { log } from \"../lib/output.js\";\n\nexport interface ValidateOptions {\n json?: boolean;\n}\n\nexport interface ValidateReport {\n ok: boolean;\n manifest: { ok: boolean; message?: string };\n skill_md: { ok: boolean; message?: string };\n name_matches: { ok: boolean; message?: string };\n bundle: { ok: boolean; message?: string; files?: number; size?: number; has_scripts?: boolean };\n security: { ok: boolean; message?: string; findings: ReturnType<typeof scanSkillMarkdown> };\n}\n\nexport async function validateSkill(dir: string): Promise<ValidateReport> {\n const report: ValidateReport = {\n ok: true,\n manifest: { ok: true },\n skill_md: { ok: true },\n name_matches: { ok: false, message: \"skipped because skill.json and SKILL.md are required\" },\n bundle: { ok: false, message: \"skipped because skill.json and SKILL.md are required\" },\n security: { ok: false, message: \"skipped because SKILL.md is required\", findings: [] },\n };\n\n // manifest\n const m = await readManifest(dir);\n if (!m.ok) {\n report.manifest = { ok: false, message: m.error };\n report.ok = false;\n }\n\n // SKILL.md presence + frontmatter\n let skillMd: string | undefined;\n try {\n skillMd = await readFile(join(dir, \"SKILL.md\"), \"utf8\");\n } catch {\n report.skill_md = { ok: false, message: \"SKILL.md not found\" };\n report.ok = false;\n }\n if (!skillMd) return report;\n\n const { meta } = parseSkillFrontmatter(skillMd);\n const fmErr = validateSkillFrontmatter(meta);\n if (fmErr) {\n report.skill_md = { ok: false, message: fmErr };\n report.ok = false;\n }\n\n if (m.ok) {\n report.name_matches = { ok: true };\n if (meta.name && meta.name !== m.manifest.name) {\n report.name_matches = {\n ok: false,\n message: `skill.json name=\"${m.manifest.name}\" but SKILL.md frontmatter name=\"${meta.name}\"`,\n };\n report.ok = false;\n }\n }\n\n // Early SKILL.md scan gives useful feedback even if bundle collection later fails.\n report.security = { ok: true, findings: [] };\n const findings = scanSkillMarkdown(skillMd);\n if (findings.length > 0) {\n const blocking = findings.filter(isBlockingSecurityFinding);\n report.security = { ok: blocking.length === 0, findings };\n if (blocking.length > 0) report.ok = false;\n }\n\n if (!m.ok) return report;\n\n // bundle (path traversal, symlinks, file/size limits)\n try {\n const bundle = await collectBundle(dir);\n const bundleFindings = await scanSkillBundleFiles(bundle.files);\n const blocking = bundleFindings.filter(isBlockingSecurityFinding);\n report.security = { ok: blocking.length === 0, findings: bundleFindings };\n if (blocking.length > 0) report.ok = false;\n report.bundle = {\n ok: true,\n files: bundle.files.length,\n size: bundle.totalUncompressedBytes,\n has_scripts: bundle.hasScripts,\n };\n } catch (e) {\n report.bundle = { ok: false, message: (e as Error).message };\n report.ok = false;\n }\n\n return report;\n}\n\nexport async function validateCommand(opts: ValidateOptions = {}): Promise<void> {\n const dir = process.cwd();\n const r = await validateSkill(dir);\n\n if (opts.json) {\n console.log(JSON.stringify(r, null, 2));\n process.exit(r.ok ? 0 : 1);\n }\n\n log.heading(\"Validating skill...\");\n const line = (ok: boolean, label: string, detail?: string) =>\n ok ? log.ok(`${label.padEnd(28)} ${detail ?? \"\"}`.trim())\n : log.err(`${label.padEnd(28)} ${detail ?? \"\"}`.trim());\n\n line(r.manifest.ok, \"manifest schema\", r.manifest.message);\n line(r.skill_md.ok, \"SKILL.md present\", r.skill_md.message);\n line(r.name_matches.ok, \"name fields match\", r.name_matches.message);\n if (r.bundle.ok) {\n line(true, \"files + size limits\", `${r.bundle.files} files, ${(r.bundle.size ?? 0) / 1024 | 0} KB`);\n } else {\n line(false, \"files + size limits\", r.bundle.message);\n }\n if (r.security.findings.length === 0) {\n line(r.security.ok, \"bundle security scan\", r.security.message ?? \"clean\");\n } else {\n const blocking = r.security.findings.filter(isBlockingSecurityFinding).length;\n const detail = blocking > 0\n ? `${r.security.findings.length} finding(s), ${blocking} blocking`\n : `${r.security.findings.length} warning(s)`;\n line(r.security.ok, \"bundle security scan\", detail);\n for (const f of r.security.findings) {\n const loc = f.path ? `${f.path}:${f.line}` : `line ${f.line}`;\n log.warn(` ${loc} [${f.severity}/${f.category}] ${f.label}: ${f.preview}`);\n }\n }\n if (r.bundle.has_scripts) {\n log.warn(\"This skill contains scripts/. Agents may execute these \u2014 review before activating.\");\n }\n log.blank();\n if (r.ok) {\n log.ok(\"Valid.\");\n } else {\n log.err(\"Invalid.\");\n process.exit(1);\n }\n}\n", "import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n readManifest,\n parseSkillFrontmatter,\n collectBundle,\n packBundle,\n FloomError,\n} from \"@floom/shared\";\nimport { api, rawPut } from \"../api-client.js\";\nimport { readAuth } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\nimport { validateSkill } from \"./validate.js\";\n\ninterface InitResponse {\n version_id: string;\n upload: { method: \"PUT\"; url: string; expires_at: string };\n}\n\ninterface CompleteResponse {\n ref: string;\n status: \"active\";\n install_command: string;\n}\n\ninterface MeResponse {\n user: { handle: string; email: string };\n}\n\nexport interface PublishOptions {\n dryRun?: boolean;\n workspace?: string;\n library?: string;\n}\n\nexport async function publishCommand(opts: PublishOptions = {}): Promise<void> {\n const auth = await readAuth();\n const envToken = process.env.FLOOM_API_TOKEN?.trim();\n if (!auth && !envToken && !opts.dryRun) {\n log.err(\"Not logged in. Run: floom login\");\n process.exit(1);\n }\n\n const dir = process.cwd();\n log.heading(\"Validating skill...\");\n const report = await validateSkill(dir);\n if (!report.ok) {\n log.err(\"Validation failed. Run `floom validate` for details.\");\n process.exit(1);\n }\n log.ok(\"Validation passed.\");\n\n const m = await readManifest(dir);\n if (!m.ok) {\n log.err(m.error);\n process.exit(1);\n }\n const manifest = m.manifest;\n const skillMd = await readFile(join(dir, \"SKILL.md\"), \"utf8\");\n const { meta } = parseSkillFrontmatter(skillMd);\n\n const me = !opts.dryRun && !auth && envToken\n ? await api<MeResponse>(\"/me\", { authRequired: true })\n : null;\n const handle = auth?.handle ?? me?.user.handle;\n const refRoot = opts.workspace ?? opts.library ?? handle ?? \"<your-handle>\";\n log.heading(`${opts.dryRun ? \"Dry-running\" : \"Publishing\"} ${refRoot}/${manifest.name}@${manifest.version}`);\n log.step(\"Packing bundle...\");\n const bundle = await collectBundle(dir);\n const packed = await packBundle(bundle);\n log.kv(\"files\", String(bundle.files.length));\n log.kv(\"size\", `${packed.bytes.length} bytes (${(packed.bytes.length / 1024).toFixed(1)} KB)`);\n log.kv(\"sha256\", packed.sha256);\n\n if (opts.dryRun) {\n log.blank();\n log.ok(\"Dry run passed. No upload was requested.\");\n return;\n }\n if (!handle) {\n log.err(\"Not logged in. Run: floom login\");\n process.exit(1);\n }\n\n log.step(\"Requesting upload URL...\");\n let initResp: InitResponse;\n try {\n initResp = await api<InitResponse>(`/skills/${refRoot}/${manifest.name}/versions`, {\n method: \"POST\",\n authRequired: true,\n body: {\n manifest,\n skill_md: skillMd,\n bundle: {\n sha256: packed.sha256,\n size_bytes: packed.bytes.length,\n },\n files: bundle.files.map((f: { relPath: string; sha256: string; size: number }) => ({\n path: f.relPath,\n sha256: f.sha256,\n size_bytes: f.size,\n })),\n has_scripts: bundle.hasScripts,\n },\n });\n } catch (e) {\n if (e instanceof FloomError && e.code === \"VERSION_ALREADY_EXISTS\") {\n log.err(`Version ${manifest.version} already exists for @${handle}/${manifest.name}.`);\n log.info(\"Bump the version in skill.json (e.g. 0.1.1) and try again.\");\n process.exit(1);\n }\n throw e;\n }\n\n log.step(\"Uploading bundle...\");\n await rawPut(initResp.upload.url, packed.bytes, \"application/gzip\");\n\n log.step(\"Finalizing...\");\n const complete = await api<CompleteResponse>(`/versions/${initResp.version_id}/complete`, {\n method: \"POST\",\n authRequired: true,\n body: { bundle_sha256: packed.sha256 },\n });\n\n log.blank();\n log.ok(`Published ${complete.ref}`);\n log.blank();\n log.info(\"View:\");\n log.kv(\"\", `${(auth?.apiUrl ?? process.env.FLOOM_API_URL ?? \"https://skills.floom.dev/api/v1\").replace(\"/api/v1\", \"\")}/@${handle}/${manifest.name}`);\n log.info(\"Install:\");\n log.kv(\"\", complete.install_command);\n}\n", "import { mkdir, readdir, rm, rename } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport {\n parseSkillRef,\n formatSkillRef,\n resolveInstallDir,\n describeTargetForCli,\n extractBundle,\n verifyBundleHash,\n FloomError,\n type InstallTarget,\n} from \"@floom/shared\";\nimport { api, rawGet } from \"../api-client.js\";\nimport { getAppUrl, readAuth } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\nimport { readLock, writeLock, setLockEntry, hashInstalledFolder } from \"../lib/floom-lock.js\";\nimport { VERSION } from \"../version.js\";\n\nexport interface InstallOptions {\n for?: InstallTarget;\n to?: string;\n global?: boolean;\n force?: boolean;\n}\n\ninterface SkillResponse {\n ref: string;\n visibility: \"private\" | \"unlisted\" | \"public\";\n latest_version: string;\n has_scripts: boolean;\n min_floom_version?: string;\n}\n\ninterface DownloadResponse {\n ref: string;\n version: string;\n download: { url: string; expires_at: string };\n bundle_sha256: string;\n has_scripts: boolean;\n}\n\nconst CLI_VERSION = VERSION;\n\nfunction semverGte(a: string, b: string): boolean {\n const pa = a.split(\".\").map(Number);\n const pb = b.split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n if ((pa[i] ?? 0) > (pb[i] ?? 0)) return true;\n if ((pa[i] ?? 0) < (pb[i] ?? 0)) return false;\n }\n return true;\n}\n\nexport async function installCommand(refStr: string, opts: InstallOptions = {}): Promise<void> {\n const ref = parseSkillRef(refStr);\n if (!ref) {\n log.err(`Invalid skill ref: ${refStr}`);\n log.info(\"Expected: @owner/slug, workspace-slug/slug, or with @version suffix\");\n process.exit(1);\n }\n\n // Get metadata (works anonymously for public skills)\n let info: SkillResponse;\n try {\n info = await api<SkillResponse>(`/skills/${ref.owner}/${ref.slug}`);\n } catch (e) {\n if (e instanceof FloomError && e.code === \"SKILL_ACCESS_DENIED\") {\n const auth = await readAuth();\n if (!auth) {\n log.err(`Cannot access ${formatSkillRef(ref)}.`);\n log.info(\"Run `floom login` to install private or unlisted skills.\");\n process.exit(1);\n }\n log.err(`You do not have access to ${formatSkillRef(ref)}.`);\n log.info(`Ask the owner to share it with: ${auth.email}`);\n process.exit(1);\n }\n throw e;\n }\n\n if (info.min_floom_version && !semverGte(CLI_VERSION, info.min_floom_version)) {\n log.err(`This skill requires Floom CLI >= ${info.min_floom_version} (you have ${CLI_VERSION}).`);\n log.info(\"Upgrade:\");\n log.info(\" npm install -g @floomhq/skills@latest\");\n process.exit(1);\n }\n\n // Resolve install destination\n const target = resolveInstallDir({\n target: opts.for ?? \"generic\",\n to: opts.to,\n global: opts.global,\n });\n const projectDir = opts.global ? process.cwd() : process.cwd();\n const destFolder = join(target.dir, ref.slug);\n\n // Conflict check\n const lock = await readLock(projectDir);\n const refKey = formatSkillRef({ owner: ref.owner, slug: ref.slug });\n const existing = lock.skills[refKey];\n let folderExists = false;\n try {\n const entries = await readdir(destFolder);\n folderExists = entries.length > 0;\n } catch { /* not exists */ }\n\n if (folderExists) {\n if (existing && existing.path === destFolder.replace(projectDir + \"/\", \"\")) {\n // Tracked. Check local edits.\n const current = await hashInstalledFolder(destFolder);\n // For V0 we don't have file-level hashes in lock; we conservatively warn unless --force.\n if (!opts.force) {\n log.warn(`Folder already exists at ${destFolder} and may contain local edits.`);\n log.info(`Re-run with --force to overwrite, or remove the folder manually.`);\n process.exit(1);\n }\n } else if (!opts.force) {\n log.err(`Folder already exists at ${destFolder} (not tracked by floom.lock).`);\n log.info(\"Re-run with --force to overwrite, or remove the folder manually.\");\n process.exit(1);\n }\n }\n\n // Download\n log.step(\"Fetching skill metadata...\");\n const dl = await api<DownloadResponse>(`/skills/${ref.owner}/${ref.slug}/download`, {\n query: { version: ref.version },\n });\n\n log.step(\"Downloading bundle...\");\n const buf = await rawGet(dl.download.url);\n if (!verifyBundleHash(buf, dl.bundle_sha256)) {\n log.err(\"Bundle hash mismatch \u2014 refusing to extract.\");\n process.exit(1);\n }\n log.ok(`Bundle verified (${(buf.length / 1024).toFixed(1)} KB).`);\n\n // Extract to temp, then swap\n const tmp = await import(\"node:fs/promises\").then((m) =>\n m.mkdtemp(join(tmpdir(), `floom-install-${ref.slug}-`)),\n );\n try {\n await extractBundle(buf, tmp);\n await mkdir(target.dir, { recursive: true });\n if (folderExists) {\n await rm(destFolder, { recursive: true, force: true });\n }\n await rename(tmp, destFolder);\n } catch (e) {\n await rm(tmp, { recursive: true, force: true }).catch(() => {});\n throw e;\n }\n\n // Update floom.lock\n const next = setLockEntry(lock, refKey, {\n version: dl.version,\n resolved: `${getAppUrl().replace(/\\/$/, \"\")}/${refKey}`,\n bundle_sha256: dl.bundle_sha256,\n installed_at: new Date().toISOString(),\n path: destFolder.replace(projectDir + \"/\", \"\"),\n preset: opts.for,\n });\n await writeLock(projectDir, next);\n\n log.blank();\n log.ok(`Installed ${refKey}@${dl.version}`);\n log.kv(\"Path\", destFolder);\n log.kv(\"Target\", target.target);\n log.kv(\"Compatible with\", target.compatibleAgents.join(\", \"));\n if (dl.has_scripts) {\n log.blank();\n log.warn(\"This skill contains executable scripts. Floom does not run them; your agent may.\");\n log.warn(\"Review the scripts/ folder before activating.\");\n }\n}\n", "import { readFile, writeFile, mkdir, stat, readdir } from \"node:fs/promises\";\nimport { join, relative, sep, posix } from \"node:path\";\nimport { createHash } from \"node:crypto\";\n\n// SPEC \u00A711.14 \u2014 floom.lock format\nexport interface FloomLockEntry {\n version: string;\n resolved: string;\n bundle_sha256: string;\n installed_at: string;\n path: string; // relative path from project root where the skill folder lives\n preset?: string; // \"claude\" | \"codex\" | \"all\" | etc, recorded if --for was used\n}\n\nexport interface FloomLock {\n schema_version: \"0.1\";\n skills: Record<string, FloomLockEntry>;\n}\n\nexport interface FloomInstructionLockEntry {\n scope: \"account\" | \"workspace\";\n workspace?: string;\n target?: string;\n version_id: string;\n body_sha256: string;\n pulled_at: string;\n path: string;\n}\n\nexport interface FloomLockV02 {\n schema_version: \"0.2\";\n default_workspace?: string;\n target?: string;\n scope?: \"global\" | \"local\";\n last_sync_at?: string;\n instructions?: FloomInstructionLockEntry[];\n skills: Record<string, FloomLockEntry>;\n}\n\nexport type AnyFloomLock = FloomLock | FloomLockV02;\n\nconst EMPTY: FloomLock = { schema_version: \"0.1\", skills: {} };\n\nexport async function readLock(projectDir: string): Promise<AnyFloomLock> {\n try {\n const raw = await readFile(join(projectDir, \"floom.lock\"), \"utf8\");\n const parsed = JSON.parse(raw) as Partial<AnyFloomLock> & { schema_version?: unknown };\n if (parsed.schema_version === \"0.1\") return parsed as FloomLock;\n if (parsed.schema_version === \"0.2\") return parsed as FloomLockV02;\n const version = typeof parsed.schema_version === \"string\" ? parsed.schema_version : \"missing\";\n throw new Error(\n `LOCK_SCHEMA_UNSUPPORTED: floom.lock schema_version ${version} is not supported by this CLI. ` +\n \"The existing floom.lock was left unchanged; migrate it or reinstall skills with the current CLI.\",\n );\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === \"ENOENT\") return { ...EMPTY };\n throw e;\n }\n}\n\nexport async function writeLock(projectDir: string, lock: AnyFloomLock): Promise<void> {\n await mkdir(projectDir, { recursive: true });\n await writeFile(join(projectDir, \"floom.lock\"), JSON.stringify(lock, null, 2) + \"\\n\", \"utf8\");\n}\n\nexport function setLockEntry<T extends AnyFloomLock>(lock: T, ref: string, entry: FloomLockEntry): T {\n return { ...lock, skills: { ...lock.skills, [ref]: entry } };\n}\n\nexport function removeLockEntry<T extends AnyFloomLock>(lock: T, ref: string): T {\n const { [ref]: _, ...rest } = lock.skills;\n return { ...lock, skills: rest };\n}\n\nexport function upgradeLockToV02(lock: AnyFloomLock, opts: { target?: string; scope?: \"global\" | \"local\"; defaultWorkspace?: string } = {}): FloomLockV02 {\n if (lock.schema_version === \"0.2\") {\n return {\n ...lock,\n target: opts.target ?? lock.target,\n scope: opts.scope ?? lock.scope,\n default_workspace: opts.defaultWorkspace ?? lock.default_workspace,\n last_sync_at: new Date().toISOString(),\n };\n }\n return {\n schema_version: \"0.2\",\n default_workspace: opts.defaultWorkspace,\n target: opts.target,\n scope: opts.scope,\n last_sync_at: new Date().toISOString(),\n instructions: [],\n skills: lock.skills,\n };\n}\n\n// Compute hash for each file in an installed skill folder.\n// Used by `install` and `update` to detect local edits before overwriting.\nexport interface InstalledFileHash {\n relPath: string;\n sha256: string;\n size: number;\n}\n\nexport async function hashInstalledFolder(folderAbs: string): Promise<InstalledFileHash[]> {\n const out: InstalledFileHash[] = [];\n async function walk(dir: string): Promise<void> {\n let entries;\n try { entries = await readdir(dir, { withFileTypes: true }); } catch { return; }\n for (const entry of entries) {\n const abs = join(dir, entry.name);\n if (entry.isSymbolicLink()) continue;\n if (entry.isDirectory()) { await walk(abs); continue; }\n if (!entry.isFile()) continue;\n const buf = await readFile(abs);\n const rel = relative(folderAbs, abs).split(sep).join(posix.sep);\n out.push({\n relPath: rel,\n sha256: createHash(\"sha256\").update(buf).digest(\"hex\"),\n size: buf.length,\n });\n }\n }\n try {\n await stat(folderAbs);\n } catch {\n return out;\n }\n await walk(folderAbs);\n out.sort((a, b) => a.relPath.localeCompare(b.relPath));\n return out;\n}\n", "import { readLock } from \"../lib/floom-lock.js\";\nimport { log } from \"../lib/output.js\";\n\nexport interface InstalledOptions {\n json?: boolean;\n}\n\nexport async function installedCommand(opts: InstalledOptions = {}): Promise<void> {\n const lock = await readLock(process.cwd());\n const entries = Object.entries(lock.skills);\n\n if (opts.json) {\n console.log(JSON.stringify(lock, null, 2));\n return;\n }\n\n if (entries.length === 0) {\n log.info(\"No skills installed in this project.\");\n log.info(\"Get one: floom install @owner/slug\");\n return;\n }\n\n log.heading(\"Installed skills in this project\");\n for (const [ref, e] of entries) {\n console.log(` ${ref.padEnd(40)} ${e.version.padEnd(8)} ${(e.preset ?? \"-\").padEnd(8)} ${e.path}`);\n }\n log.blank();\n log.info(`${entries.length} skill${entries.length === 1 ? \"\" : \"s\"} installed.`);\n}\n", "import { api } from \"../api-client.js\";\nimport { readLock } from \"../lib/floom-lock.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface SkillInfo {\n ref: string;\n latest_version: string;\n}\n\nfunction cmpSemver(a: string, b: string): number {\n const pa = a.split(\".\").map((p) => parseInt(p, 10));\n const pb = b.split(\".\").map((p) => parseInt(p, 10));\n for (let i = 0; i < 3; i++) {\n const d = (pa[i] ?? 0) - (pb[i] ?? 0);\n if (d !== 0) return d;\n }\n return 0;\n}\n\nexport async function outdatedCommand(): Promise<void> {\n const lock = await readLock(process.cwd());\n const entries = Object.entries(lock.skills);\n if (entries.length === 0) {\n log.info(\"No skills installed.\");\n return;\n }\n\n log.heading(\"Checking for updates...\");\n const outdated: Array<{ ref: string; current: string; latest: string }> = [];\n\n for (const [ref, e] of entries) {\n const [, owner, slug] = /^@([^/]+)\\/([^@]+)/.exec(ref) ?? [];\n if (!owner || !slug) continue;\n try {\n const info = await api<SkillInfo>(`/skills/${owner}/${slug}`);\n if (cmpSemver(info.latest_version, e.version) > 0) {\n outdated.push({ ref, current: e.version, latest: info.latest_version });\n }\n } catch (err) {\n log.warn(`Could not check ${ref}: ${(err as Error).message}`);\n }\n }\n\n log.blank();\n if (outdated.length === 0) {\n log.ok(\"All installed skills are up to date.\");\n return;\n }\n\n log.heading(\"Outdated skills\");\n for (const o of outdated) {\n console.log(` ${o.ref.padEnd(40)} ${o.current.padEnd(10)} -> ${o.latest.padEnd(10)} floom update ${o.ref}`);\n }\n log.blank();\n log.info(`${outdated.length} skill${outdated.length === 1 ? \"\" : \"s\"} can be updated.`);\n process.exit(1); // useful in CI\n}\n", "import { rm, rename, mkdir } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { extractBundle, verifyBundleHash, FloomError } from \"@floom/shared\";\nimport { api, rawGet } from \"../api-client.js\";\nimport { readLock, writeLock, setLockEntry, hashInstalledFolder } from \"../lib/floom-lock.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface SkillInfo {\n ref: string;\n latest_version: string;\n}\n\ninterface DownloadResponse {\n ref: string;\n version: string;\n download: { url: string; expires_at: string };\n bundle_sha256: string;\n}\n\nfunction cmpSemver(a: string, b: string): number {\n const pa = a.split(\".\").map((p) => parseInt(p, 10));\n const pb = b.split(\".\").map((p) => parseInt(p, 10));\n for (let i = 0; i < 3; i++) {\n const d = (pa[i] ?? 0) - (pb[i] ?? 0);\n if (d !== 0) return d;\n }\n return 0;\n}\n\nexport interface UpdateOptions {\n force?: boolean;\n}\n\nexport async function updateCommand(refStr?: string, opts: UpdateOptions = {}): Promise<void> {\n const projectDir = process.cwd();\n const lock = await readLock(projectDir);\n const all = Object.entries(lock.skills);\n if (all.length === 0) {\n log.info(\"No installed skills.\");\n return;\n }\n\n const targets = refStr ? all.filter(([r]) => r === refStr) : all;\n if (refStr && targets.length === 0) {\n log.err(`Not installed: ${refStr}`);\n process.exit(1);\n }\n\n let updated = 0, skipped = 0;\n for (const [ref, entry] of targets) {\n const [, owner, slug] = /^@([^/]+)\\/([^@]+)/.exec(ref) ?? [];\n if (!owner || !slug) continue;\n\n let info: SkillInfo;\n try { info = await api<SkillInfo>(`/skills/${owner}/${slug}`); }\n catch (e) {\n log.warn(`Skip ${ref}: ${(e as Error).message}`);\n skipped++;\n continue;\n }\n\n if (cmpSemver(info.latest_version, entry.version) <= 0) {\n log.step(`${ref} is already at latest (${entry.version}).`);\n continue;\n }\n\n const installDir = resolve(projectDir, entry.path);\n\n // Detect local edits via floom-lock recorded bundle_sha256 \u2014 simplistic: we\n // re-compute on-disk content and compare collective hash to recorded bundle.\n // V0 hardening: full per-file lock would be richer; we use a simple gate.\n if (!opts.force) {\n const current = await hashInstalledFolder(installDir);\n // The recorded bundle_sha256 is the tarball hash, not folder hash, so we\n // can't compare directly. For now: if force isn't set and folder exists,\n // we proceed with confirmation in a real terminal. In V0 we just warn.\n // (Full editorial detection lands when files-table-per-version syncs.)\n log.step(`Updating ${ref}: ${entry.version} -> ${info.latest_version}`);\n }\n\n const dl = await api<DownloadResponse>(`/skills/${owner}/${slug}/download`);\n const buf = await rawGet(dl.download.url);\n if (!verifyBundleHash(buf, dl.bundle_sha256)) {\n log.err(`Bundle hash mismatch for ${ref} \u2014 skipping.`);\n skipped++;\n continue;\n }\n\n const tmp = await import(\"node:fs/promises\").then((m) =>\n m.mkdtemp(join(tmpdir(), `floom-update-${slug}-`)),\n );\n try {\n await extractBundle(buf, tmp);\n await rm(installDir, { recursive: true, force: true });\n await mkdir(installDir.replace(/\\/[^/]+$/, \"\"), { recursive: true });\n await rename(tmp, installDir);\n } catch (e) {\n await rm(tmp, { recursive: true, force: true }).catch(() => {});\n throw e;\n }\n\n const next = setLockEntry(lock, ref, {\n ...entry,\n version: dl.version,\n bundle_sha256: dl.bundle_sha256,\n installed_at: new Date().toISOString(),\n });\n await writeLock(projectDir, next);\n log.ok(`Updated ${ref}: ${entry.version} -> ${dl.version}`);\n updated++;\n }\n\n log.blank();\n log.info(`${updated} updated, ${skipped} skipped.`);\n}\n", "import { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\nexport interface ListOptions {\n query?: string;\n workspace?: string;\n library?: string;\n folder?: string;\n flat?: boolean;\n}\n\ninterface SkillRow {\n id: string;\n slug: string;\n title: string;\n description: string | null;\n visibility: \"private\" | \"unlisted\" | \"public\";\n latest_version_id: string | null;\n updated_at: string;\n library: { id: string; slug: string; name: string };\n}\n\ninterface ListResponse {\n skills: SkillRow[];\n total: number;\n}\n\nexport async function listCommand(opts: ListOptions = {}): Promise<void> {\n const resp = await api<ListResponse>(\"/skills\", {\n authRequired: true,\n query: { q: opts.query, library: opts.workspace ?? opts.library, folder: opts.folder },\n });\n\n if (resp.skills.length === 0) {\n log.info(\"No skills.\");\n return;\n }\n\n if (opts.flat) {\n for (const s of resp.skills) {\n console.log(`${s.library.slug}/${s.slug}`);\n }\n return;\n }\n\n const groups = new Map<string, SkillRow[]>();\n for (const skill of resp.skills) {\n const k = `${skill.library.slug} (${skill.library.name})`;\n const arr = groups.get(k) ?? [];\n arr.push(skill);\n groups.set(k, arr);\n }\n\n for (const [library, rows] of groups.entries()) {\n log.heading(library);\n for (const s of rows) {\n console.log(` ${`${s.library.slug}/${s.slug}`.padEnd(40)} ${s.visibility.padEnd(10)} ${s.title}`);\n }\n }\n}\n", "import { parseSkillRef } from \"@floom/shared\";\nimport { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface InfoResponse {\n ref: string;\n title: string;\n description: string;\n visibility: \"private\" | \"unlisted\" | \"public\";\n latest_version: string;\n owner: { handle: string; display_name?: string };\n has_scripts: boolean;\n declared_scripts?: Array<{ path: string; description: string }>;\n}\n\nexport async function infoCommand(refStr: string): Promise<void> {\n const ref = parseSkillRef(refStr);\n if (!ref) {\n log.err(`Invalid skill ref: ${refStr}`);\n process.exit(1);\n }\n const r = await api<InfoResponse>(`/skills/${ref.owner}/${ref.slug}`);\n\n log.heading(r.ref);\n log.kv(\"Title\", r.title);\n log.kv(\"Description\", r.description);\n log.kv(\"Latest\", r.latest_version);\n log.kv(\"Visibility\", r.visibility);\n log.kv(\"Owner\", `@${r.owner.handle}${r.owner.display_name ? ` (${r.owner.display_name})` : \"\"}`);\n if (r.has_scripts) {\n log.kv(\"Scripts\", \"yes (review before activating)\");\n }\n log.blank();\n log.info(\"Install:\");\n log.info(` floom install ${r.ref}`);\n}\n", "import { parseSkillRef } from \"@floom/shared\";\nimport { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\nexport interface ShareOptions {\n role?: \"viewer\" | \"editor\";\n}\n\ninterface GrantResponse {\n grant: { id: string; email: string; role: string; created_at: string };\n email_status?: \"queued\" | \"sent\" | \"logged\" | \"duplicate\";\n}\n\nexport async function shareCommand(refStr: string, email: string, opts: ShareOptions = {}): Promise<void> {\n const ref = parseSkillRef(refStr);\n if (!ref) { log.err(`Invalid skill ref: ${refStr}`); process.exit(1); }\n const role = opts.role ?? \"viewer\";\n const r = await api<GrantResponse>(`/skills/${ref.owner}/${ref.slug}/grants`, {\n method: \"POST\",\n authRequired: true,\n body: { email, role },\n });\n log.ok(`Shared ${refStr} with ${r.grant.email} as ${r.grant.role}.`);\n if (r.email_status) log.kv(\"email\", r.email_status);\n}\n\ninterface GrantListResponse {\n grants: Array<{ id: string; email?: string; user_handle?: string; role: string }>;\n}\n\nexport async function unshareCommand(refStr: string, email: string): Promise<void> {\n const ref = parseSkillRef(refStr);\n if (!ref) { log.err(`Invalid skill ref: ${refStr}`); process.exit(1); }\n const list = await api<GrantListResponse>(`/skills/${ref.owner}/${ref.slug}/grants`, { authRequired: true });\n const grant = list.grants.find((g) => (g.email ?? \"\").toLowerCase() === email.toLowerCase());\n if (!grant) {\n log.err(`No active grant for ${email} on ${refStr}.`);\n process.exit(1);\n }\n await api(`/skills/${ref.owner}/${ref.slug}/grants/${grant.id}`, { method: \"DELETE\", authRequired: true });\n log.ok(`Removed ${email}'s access to ${refStr}.`);\n}\n", "import { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface LibraryRow {\n id: string;\n slug: string;\n name: string;\n type: \"personal\" | \"shared\";\n role: \"viewer\" | \"editor\" | \"admin\";\n archived_at: string | null;\n}\n\nexport async function libraryListCommand(): Promise<void> {\n const resp = await api<{ libraries: LibraryRow[] }>(\"/libraries\", { authRequired: true });\n if (!resp.libraries.length) {\n log.info(\"No workspaces.\");\n return;\n }\n for (const l of resp.libraries) {\n console.log(`${l.slug.padEnd(24)} ${l.type.padEnd(8)} ${l.role.padEnd(6)} ${l.name}`);\n }\n}\n\nexport async function libraryCreateCommand(slug: string, name: string): Promise<void> {\n const resp = await api<LibraryRow>(\"/libraries\", { method: \"POST\", authRequired: true, body: { slug, name } });\n log.ok(`Created workspace ${resp.slug}`);\n}\n\nexport async function libraryInviteCommand(librarySlug: string, email: string, role = \"viewer\"): Promise<void> {\n await api(`/libraries/${librarySlug}/pending-invites`, {\n method: \"POST\",\n authRequired: true,\n body: { email, role },\n });\n log.ok(`Invited ${email} to ${librarySlug} as ${role}`);\n}\n\nexport async function libraryLeaveCommand(librarySlug: string): Promise<void> {\n await api(`/libraries/${librarySlug}/members/me`, { method: \"DELETE\", authRequired: true });\n log.ok(`Left workspace ${librarySlug}`);\n}\n", "import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { z } from \"zod\";\n\nexport const FLOOM_CONFIG_VERSION = \"0.1\";\nexport const TARGETS = [\"claude\", \"codex\", \"cursor\", \"kimi\", \"opencode\"] as const;\nexport const SCOPES = [\"global\", \"local\"] as const;\n\nexport type FloomTarget = (typeof TARGETS)[number];\nexport type FloomScope = (typeof SCOPES)[number];\n\nconst targetConfigSchema = z.object({\n active_workspaces: z.array(z.string().min(1)).default([]),\n instruction_path: z.string().min(1).optional(),\n});\n\nconst configSchema = z.object({\n version: z.literal(FLOOM_CONFIG_VERSION).default(FLOOM_CONFIG_VERSION),\n default_workspace: z.string().min(1).optional(),\n targets: z.record(z.enum(TARGETS), targetConfigSchema).default({}),\n});\n\nexport type FloomConfig = z.infer<typeof configSchema>;\n\nexport function configPath(scope: FloomScope, cwd = process.cwd()): string {\n if (scope === \"global\") return join(homedir(), \".floom\", \"config.json\");\n return join(cwd, \".floom\", \"config.json\");\n}\n\nexport async function readFloomConfig(scope: FloomScope, cwd = process.cwd()): Promise<FloomConfig> {\n try {\n const raw = await readFile(configPath(scope, cwd), \"utf8\");\n return configSchema.parse(JSON.parse(raw));\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === \"ENOENT\") return configSchema.parse({});\n throw e;\n }\n}\n\nexport async function writeFloomConfig(scope: FloomScope, config: FloomConfig, cwd = process.cwd()): Promise<void> {\n const path = configPath(scope, cwd);\n const parsed = configSchema.parse(config);\n await mkdir(dirname(path), { recursive: true, mode: 0o700 });\n await writeFile(path, JSON.stringify(parsed, null, 2) + \"\\n\", { mode: 0o600 });\n}\n\nexport function normalizeScope(value: unknown): FloomScope {\n return value === \"global\" ? \"global\" : \"local\";\n}\n\nexport function assertTarget(value: string): FloomTarget {\n if ((TARGETS as readonly string[]).includes(value)) return value as FloomTarget;\n throw new Error(`Invalid target: ${value}. Expected ${TARGETS.join(\", \")}`);\n}\n\nexport async function setDefaultWorkspace(slug: string, scope: FloomScope, cwd = process.cwd()): Promise<FloomConfig> {\n const config = await readFloomConfig(scope, cwd);\n const next = { ...config, default_workspace: slug };\n await writeFloomConfig(scope, next, cwd);\n return next;\n}\n\nexport async function setWorkspaceActive(input: {\n workspace: string;\n target: FloomTarget;\n scope: FloomScope;\n active: boolean;\n cwd?: string;\n}): Promise<FloomConfig> {\n const config = await readFloomConfig(input.scope, input.cwd);\n const current = config.targets[input.target] ?? { active_workspaces: [] };\n const set = new Set(current.active_workspaces);\n if (input.active) set.add(input.workspace);\n else set.delete(input.workspace);\n const next: FloomConfig = {\n ...config,\n targets: {\n ...config.targets,\n [input.target]: {\n ...current,\n active_workspaces: Array.from(set).sort(),\n },\n },\n };\n await writeFloomConfig(input.scope, next, input.cwd);\n return next;\n}\n", "import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\nimport { normalizeScope, readFloomConfig, type FloomScope } from \"../lib/config-file.js\";\nimport { readLock, upgradeLockToV02, writeLock } from \"../lib/floom-lock.js\";\n\nconst START = \"<!-- FLOOM START -->\";\nconst END = \"<!-- FLOOM END -->\";\nconst AGENT_INSTRUCTION_TARGETS = [\"claude\", \"codex\", \"cursor\", \"opencode\"] as const;\n\nexport type AgentInstructionTarget = (typeof AGENT_INSTRUCTION_TARGETS)[number];\nexport type PublishInstructionTarget = \"default\" | AgentInstructionTarget;\n\ninterface InstructionResponse {\n scope: \"account\" | \"workspace\";\n workspace: string | null;\n requested_target: string;\n resolved_target: string;\n instruction: null | {\n id: string;\n target: string;\n latest_version_id: string | null;\n latest?: {\n id: string;\n body_md: string;\n body_sha256: string;\n published_at: string;\n } | null;\n };\n}\n\nexport interface InstructionPullOptions {\n account?: boolean;\n workspace?: string;\n target?: string;\n scope?: string;\n path?: string;\n apply?: boolean;\n force?: boolean;\n}\n\nexport interface InstructionPushOptions {\n account?: boolean;\n workspace?: string;\n target?: string;\n changelog?: string;\n}\n\ninterface WorkspaceInfoResponse {\n role: \"viewer\" | \"editor\" | \"admin\";\n}\n\nexport function defaultInstructionPath(target: AgentInstructionTarget): string {\n if (target === \"claude\") return \"CLAUDE.md\";\n if (target === \"codex\") return \"AGENTS.md\";\n if (target === \"cursor\") return \".cursor/rules/floom.mdc\";\n if (target === \"opencode\") return \".opencode/instructions/floom.md\";\n throw new Error(`No default instruction path for target ${target}`);\n}\n\nexport function replaceManagedBlock(existing: string, blockBody: string): { content: string; hadBlock: boolean } {\n const block = `${START}\\n${blockBody.trim()}\\n${END}\\n`;\n const start = existing.indexOf(START);\n const end = existing.indexOf(END);\n if (start >= 0 && end > start) {\n const afterEnd = end + END.length;\n const prefix = existing.slice(0, start);\n const suffix = existing.slice(afterEnd).replace(/^\\n/, \"\");\n return { content: `${prefix}${block}${suffix}`, hadBlock: true };\n }\n return { content: existing.trim() ? `${existing.trimEnd()}\\n\\n${block}` : block, hadBlock: false };\n}\n\nfunction resolveScope(opts: { account?: boolean; workspace?: string }): \"account\" | \"workspace\" {\n if (opts.account && opts.workspace) throw new Error(\"Use either --account or --workspace, not both.\");\n if (opts.account) return \"account\";\n if (opts.workspace) return \"workspace\";\n throw new Error(\"Instruction command requires --account or --workspace <slug>.\");\n}\n\nfunction bodySha256(body: string): string {\n return createHash(\"sha256\").update(body, \"utf8\").digest(\"hex\");\n}\n\nasync function readUtf8FileStrict(path: string): Promise<string> {\n const bytes = await readFile(path);\n try {\n new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n } catch {\n throw new Error(`${path} is not valid UTF-8; refusing to rewrite it as a managed instruction file.`);\n }\n return bytes.toString(\"utf8\");\n}\n\nexport function assertAgentInstructionTarget(value: string): AgentInstructionTarget {\n if ((AGENT_INSTRUCTION_TARGETS as readonly string[]).includes(value)) return value as AgentInstructionTarget;\n throw new Error(`Invalid instruction target: ${value}. Expected ${AGENT_INSTRUCTION_TARGETS.join(\", \")}. Kimi uses the Floom guide skill in V0.`);\n}\n\nfunction assertPublishInstructionTarget(value: string): PublishInstructionTarget {\n if (value === \"default\") return \"default\";\n return assertAgentInstructionTarget(value);\n}\n\nexport async function fetchInstruction(input: {\n scope: \"account\" | \"workspace\";\n workspace?: string;\n target: AgentInstructionTarget;\n}): Promise<InstructionResponse> {\n return api<InstructionResponse>(\"/instructions\", {\n authRequired: true,\n query: input,\n });\n}\n\nexport function buildInstructionBlock(sections: Array<{ label: string; body_md: string }>): string {\n return [\n \"# Floom\",\n \"\",\n \"Use Floom for workspace-approved AI skills and instructions.\",\n \"\",\n ...sections.flatMap((section) => [\n `## ${section.label}`,\n \"\",\n section.body_md.trim(),\n \"\",\n ]),\n ].join(\"\\n\");\n}\n\nexport async function writeManagedInstructionFile(input: {\n path: string;\n blockBody: string;\n apply?: boolean;\n force?: boolean;\n}): Promise<{ changed: boolean; backupPath?: string }> {\n let existing = \"\";\n let existed = true;\n try { existing = await readUtf8FileStrict(input.path); } catch (e) {\n if ((e as NodeJS.ErrnoException).code === \"ENOENT\") existed = false;\n else throw e;\n }\n const next = replaceManagedBlock(existing, input.blockBody);\n if (existed && !next.hadBlock && !input.apply && !input.force) {\n log.warn(`Refusing to modify ${input.path} without an existing Floom managed block.`);\n log.info(\"Re-run with --apply to append the managed block, or --path <file> for a dedicated file.\");\n process.exit(1);\n }\n if (existed && existing === next.content) return { changed: false };\n let backupPath: string | undefined;\n if (existed && existing) {\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n backupPath = join(\".floom\", \"backups\", `${basename(input.path)}.${stamp}.bak`);\n await mkdir(dirname(backupPath), { recursive: true, mode: 0o700 });\n await writeFile(backupPath, existing, { mode: 0o600 });\n }\n await mkdir(dirname(input.path), { recursive: true });\n await writeFile(input.path, next.content, \"utf8\");\n return { changed: true, backupPath };\n}\n\nexport async function recordCliActivity(input: {\n event_type: \"workspace.activate_cli\" | \"workspace.deactivate_cli\" | \"workspace.pulled_cli\" | \"instruction.pulled_cli\";\n workspace?: string;\n target: string;\n scope?: \"account\" | \"workspace\";\n instruction_id?: string;\n version_id?: string;\n path?: string;\n resources?: Array<{ type: string; id?: string; name?: string }>;\n}): Promise<void> {\n try {\n await api(\"/cli/activity\", { method: \"POST\", authRequired: true, body: input });\n } catch (e) {\n log.warn(`Activity event not recorded: ${(e as Error).message}`);\n }\n}\n\nexport async function upsertInstructionLock(input: {\n scope: \"account\" | \"workspace\";\n workspace?: string;\n target: AgentInstructionTarget;\n path: string;\n version_id: string;\n body_sha256: string;\n configScope: FloomScope;\n defaultWorkspace?: string;\n}): Promise<void> {\n const lock = upgradeLockToV02(await readLock(process.cwd()), {\n target: input.target,\n scope: input.configScope,\n defaultWorkspace: input.defaultWorkspace,\n });\n const instructions = (lock.instructions ?? []).filter((entry) =>\n !(entry.scope === input.scope && entry.workspace === input.workspace && entry.target === input.target && entry.path === input.path)\n );\n instructions.push({\n scope: input.scope,\n workspace: input.workspace,\n target: input.target,\n version_id: input.version_id,\n body_sha256: input.body_sha256,\n pulled_at: new Date().toISOString(),\n path: input.path,\n });\n await writeLock(process.cwd(), { ...lock, instructions, last_sync_at: new Date().toISOString() });\n}\n\nexport async function instructionPullCommand(opts: InstructionPullOptions = {}): Promise<void> {\n const target = assertAgentInstructionTarget(opts.target ?? \"codex\");\n const configScope = normalizeScope(opts.scope);\n const scope = resolveScope(opts);\n const config = await readFloomConfig(configScope);\n const workspace = opts.workspace ?? (scope === \"workspace\" ? config.default_workspace : undefined);\n if (scope === \"workspace\" && !workspace) throw new Error(\"Workspace instruction pull requires --workspace <slug> or a configured default workspace.\");\n\n const path = opts.path ?? defaultInstructionPath(target);\n const resp = await fetchInstruction({ scope, workspace, target });\n if (!resp.instruction?.latest) {\n log.info(\"No remote instruction found.\");\n return;\n }\n\n const label = scope === \"account\" ? \"Account Instructions\" : `Workspace Instructions: ${workspace}`;\n const writeResult = await writeManagedInstructionFile({\n path,\n blockBody: buildInstructionBlock([{ label, body_md: resp.instruction.latest.body_md }]),\n apply: opts.apply,\n force: opts.force,\n });\n if (!writeResult.changed) {\n log.info(`${path} is already at the latest ${scope} instruction.`);\n return;\n }\n if (writeResult.backupPath) log.info(`Backed up previous instruction file to ${writeResult.backupPath}`);\n\n await upsertInstructionLock({\n scope,\n workspace,\n target,\n path,\n version_id: resp.instruction.latest.id,\n body_sha256: resp.instruction.latest.body_sha256,\n configScope,\n defaultWorkspace: config.default_workspace,\n });\n await recordCliActivity({\n event_type: \"instruction.pulled_cli\",\n scope,\n workspace,\n target,\n instruction_id: resp.instruction.id,\n version_id: resp.instruction.latest.id,\n path,\n });\n\n log.ok(`Pulled ${scope} instruction to ${path}`);\n}\n\nexport async function instructionPushCommand(file: string, opts: InstructionPushOptions = {}): Promise<void> {\n const target = assertPublishInstructionTarget(opts.target ?? \"default\");\n const scope = resolveScope(opts);\n if (scope === \"workspace\") {\n const workspace = opts.workspace!;\n const info = await api<WorkspaceInfoResponse>(`/libraries/${workspace}`, { authRequired: true });\n if (info.role !== \"admin\" && info.role !== \"editor\") {\n throw new Error(`Workspace instruction push requires editor or admin role in ${workspace}.`);\n }\n }\n const body = await readFile(file, \"utf8\");\n const resp = await api<any>(\"/instructions\", {\n method: \"POST\",\n authRequired: true,\n body: {\n scope,\n workspace: opts.workspace,\n target,\n body_md: body,\n changelog: opts.changelog ?? `Published from CLI (${file}, ${bodySha256(body).slice(0, 12)})`,\n },\n });\n log.ok(`Published ${scope} instruction ${resp.instruction?.latest?.version_seq ? `v${resp.instruction.latest.version_seq}` : \"\"}`.trim());\n}\n", "import { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\nimport {\n assertTarget,\n normalizeScope,\n readFloomConfig,\n setDefaultWorkspace,\n setWorkspaceActive,\n type FloomScope,\n} from \"../lib/config-file.js\";\nimport { recordCliActivity } from \"./instruction.js\";\n\ninterface WorkspaceOptions {\n target?: string;\n scope?: string;\n}\n\nasync function assertWorkspaceExists(slug: string): Promise<void> {\n await api(`/libraries/${slug}`, { authRequired: true });\n}\n\nfunction parseOptions(opts: WorkspaceOptions): { target: ReturnType<typeof assertTarget>; scope: FloomScope } {\n return {\n target: assertTarget(opts.target ?? \"codex\"),\n scope: normalizeScope(opts.scope),\n };\n}\n\nexport async function defaultWorkspaceCommand(slug?: string, opts: { scope?: string } = {}): Promise<void> {\n const scope = normalizeScope(opts.scope);\n if (!slug) {\n const config = await readFloomConfig(scope);\n if (!config.default_workspace) {\n log.info(`No default workspace configured for ${scope} scope.`);\n return;\n }\n console.log(config.default_workspace);\n return;\n }\n await assertWorkspaceExists(slug);\n await setDefaultWorkspace(slug, scope);\n log.ok(`Default workspace (${scope}) set to ${slug}`);\n}\n\nexport async function workspaceActivateCommand(slug: string, opts: WorkspaceOptions = {}): Promise<void> {\n const parsed = parseOptions(opts);\n await assertWorkspaceExists(slug);\n await setWorkspaceActive({ workspace: slug, target: parsed.target, scope: parsed.scope, active: true });\n await recordCliActivity({ event_type: \"workspace.activate_cli\", workspace: slug, target: parsed.target });\n log.ok(`Activated ${slug} for ${parsed.target} (${parsed.scope})`);\n}\n\nexport async function workspaceDeactivateCommand(slug: string, opts: WorkspaceOptions = {}): Promise<void> {\n const parsed = parseOptions(opts);\n await setWorkspaceActive({ workspace: slug, target: parsed.target, scope: parsed.scope, active: false });\n await recordCliActivity({ event_type: \"workspace.deactivate_cli\", workspace: slug, target: parsed.target });\n log.ok(`Deactivated ${slug} for ${parsed.target} (${parsed.scope})`);\n}\n\nexport async function workspaceActiveCommand(opts: WorkspaceOptions = {}): Promise<void> {\n const parsed = parseOptions(opts);\n const config = await readFloomConfig(parsed.scope);\n const active = config.targets[parsed.target]?.active_workspaces ?? [];\n if (!active.length) {\n log.info(`No active workspaces for ${parsed.target} (${parsed.scope}).`);\n return;\n }\n for (const workspace of active) console.log(workspace);\n}\n", "import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { resolveInstallDir, type InstallTarget } from \"@floom/shared\";\nimport { api } from \"../api-client.js\";\nimport { assertTarget, normalizeScope, readFloomConfig } from \"../lib/config-file.js\";\nimport { log } from \"../lib/output.js\";\nimport {\n assertAgentInstructionTarget,\n buildInstructionBlock,\n defaultInstructionPath,\n fetchInstruction,\n recordCliActivity,\n upsertInstructionLock,\n writeManagedInstructionFile,\n type AgentInstructionTarget,\n} from \"./instruction.js\";\nimport { installCommand } from \"./install.js\";\n\ninterface SyncOptions {\n target?: string;\n scope?: string;\n apply?: boolean;\n force?: boolean;\n}\n\ninterface PinRow {\n id: string;\n skill_id: string;\n target: string;\n skill?: { slug?: string; title?: string; latest?: { version?: string } | null } | null;\n}\n\nconst ROUTER_SKILL = [\n \"# Floom Find Skills\",\n \"\",\n \"Use this router skill instead of loading every Floom skill into context.\",\n \"\",\n \"When a task may need a reusable skill:\",\n \"\",\n \"1. Call the Floom MCP `search_skills` tool with a short query.\",\n \"2. Review the compact candidate list.\",\n \"3. Call `get_skill` only for the selected candidate.\",\n \"4. Call `install_skill` only when the skill needs to be available locally.\",\n \"\",\n \"Do not enumerate the whole workspace library into model context. Keep skill bodies out of context until selected.\",\n \"\",\n].join(\"\\n\");\n\nasync function installRouter(target: string): Promise<string> {\n const install = resolveInstallDir({ target: target as InstallTarget });\n const routerDir = target === \"kimi\" ? \"floom\" : \"floom-find-skills\";\n const path = join(install.dir, routerDir, \"SKILL.md\");\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, ROUTER_SKILL, \"utf8\");\n return path;\n}\n\nasync function pullInstructions(input: {\n target: AgentInstructionTarget;\n scope: ReturnType<typeof normalizeScope>;\n defaultWorkspace?: string;\n activeWorkspaces: string[];\n apply?: boolean;\n force?: boolean;\n}): Promise<void> {\n const path = defaultInstructionPath(input.target);\n const sections: Array<{\n label: string;\n scope: \"account\" | \"workspace\";\n workspace?: string;\n instruction_id: string;\n version_id: string;\n body_sha256: string;\n body_md: string;\n }> = [];\n\n const account = await fetchInstruction({ scope: \"account\", target: input.target });\n if (account.instruction?.latest) {\n sections.push({\n label: \"Account Instructions\",\n scope: \"account\",\n instruction_id: account.instruction.id,\n version_id: account.instruction.latest.id,\n body_sha256: account.instruction.latest.body_sha256,\n body_md: account.instruction.latest.body_md,\n });\n }\n\n for (const workspace of input.activeWorkspaces) {\n const resp = await fetchInstruction({ scope: \"workspace\", workspace, target: input.target });\n if (!resp.instruction?.latest) continue;\n sections.push({\n label: `Workspace Instructions: ${workspace}`,\n scope: \"workspace\",\n workspace,\n instruction_id: resp.instruction.id,\n version_id: resp.instruction.latest.id,\n body_sha256: resp.instruction.latest.body_sha256,\n body_md: resp.instruction.latest.body_md,\n });\n }\n\n if (sections.length === 0) {\n log.info(\"No remote instructions found.\");\n return;\n }\n\n const writeResult = await writeManagedInstructionFile({\n path,\n blockBody: buildInstructionBlock(sections.map((section) => ({ label: section.label, body_md: section.body_md }))),\n apply: input.apply,\n force: input.force,\n });\n if (!writeResult.changed) {\n log.info(`${path} already contains the latest Floom instruction block.`);\n return;\n }\n if (writeResult.backupPath) log.info(`Backed up previous instruction file to ${writeResult.backupPath}`);\n\n for (const section of sections) {\n await upsertInstructionLock({\n scope: section.scope,\n workspace: section.workspace,\n target: input.target,\n path,\n version_id: section.version_id,\n body_sha256: section.body_sha256,\n configScope: input.scope,\n defaultWorkspace: input.defaultWorkspace,\n });\n await recordCliActivity({\n event_type: \"instruction.pulled_cli\",\n scope: section.scope,\n workspace: section.workspace,\n target: input.target,\n instruction_id: section.instruction_id,\n version_id: section.version_id,\n path,\n });\n }\n\n log.ok(`Pulled ${sections.length} instruction section(s) to ${path}`);\n}\n\nexport async function statusCommand(opts: SyncOptions = {}): Promise<void> {\n const target = assertTarget(opts.target ?? \"codex\");\n const scope = normalizeScope(opts.scope);\n const config = await readFloomConfig(scope);\n const active = config.targets[target]?.active_workspaces ?? [];\n\n log.heading(`Floom status for ${target} (${scope})`);\n log.kv(\"Default workspace\", config.default_workspace ?? \"(none)\");\n log.kv(\"Active workspaces\", active.length ? active.join(\", \") : \"(none)\");\n log.kv(\"Local pull policy\", \"router + pinned skills + instructions only\");\n\n for (const workspace of active) {\n const pins = await api<{ pins: PinRow[] }>(`/libraries/${workspace}/pins`, {\n authRequired: true,\n query: { target },\n });\n log.blank();\n log.info(`${workspace}: ${pins.pins.length} pinned skill(s) for ${target}`);\n for (const pin of pins.pins) {\n log.kv(\"\", `${pin.skill?.slug ?? pin.skill_id}${pin.skill?.latest?.version ? `@${pin.skill.latest.version}` : \"\"}`);\n }\n }\n}\n\nexport async function pullCommand(opts: SyncOptions = {}): Promise<void> {\n const target = assertTarget(opts.target ?? \"codex\");\n const scope = normalizeScope(opts.scope);\n const config = await readFloomConfig(scope);\n const active = config.targets[target]?.active_workspaces ?? [];\n\n const routerPath = await installRouter(target);\n log.ok(`Installed Floom router skill to ${routerPath}`);\n\n if (target === \"kimi\") {\n log.info(\"Kimi uses the Floom guide/router skill in V0; account and workspace instructions are not merged into Kimi context.\");\n } else {\n await pullInstructions({\n target: assertAgentInstructionTarget(target),\n scope,\n defaultWorkspace: config.default_workspace,\n activeWorkspaces: active,\n apply: opts.apply,\n force: opts.force,\n });\n }\n\n for (const workspace of active) {\n const pins = await api<{ pins: PinRow[] }>(`/libraries/${workspace}/pins`, {\n authRequired: true,\n query: { target },\n });\n for (const pin of pins.pins) {\n if (!pin.skill?.slug) continue;\n await installCommand(`${workspace}/${pin.skill.slug}`, { for: target as InstallTarget, force: opts.force });\n }\n await recordCliActivity({\n event_type: \"workspace.pulled_cli\",\n workspace,\n target,\n resources: pins.pins.map((pin) => ({ type: \"skill\", id: pin.skill_id, name: pin.skill?.slug ?? pin.skill_id })),\n });\n }\n\n log.blank();\n log.ok(\"Pull complete.\");\n}\n", "import { api } from \"../api-client.js\";\nimport { assertTarget, readFloomConfig } from \"../lib/config-file.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface PinOptions {\n workspace?: string;\n target?: string;\n}\n\nasync function resolveWorkspace(opts: PinOptions): Promise<string> {\n if (opts.workspace) return opts.workspace;\n const config = await readFloomConfig(\"local\");\n if (config.default_workspace) return config.default_workspace;\n throw new Error(\"Pin command requires --workspace <slug> or a configured default workspace.\");\n}\n\nexport async function pinCommand(ref: string, opts: PinOptions = {}): Promise<void> {\n const target = assertTarget(opts.target ?? \"codex\");\n const workspace = await resolveWorkspace(opts);\n await api(`/libraries/${workspace}/pins`, {\n method: \"POST\",\n authRequired: true,\n body: { ref, target },\n });\n log.ok(`Pinned ${ref} for ${target} in ${workspace}`);\n}\n\nexport async function unpinCommand(ref: string, opts: PinOptions = {}): Promise<void> {\n const target = assertTarget(opts.target ?? \"codex\");\n const workspace = await resolveWorkspace(opts);\n await api(`/libraries/${workspace}/pins`, {\n method: \"DELETE\",\n authRequired: true,\n query: { ref, target },\n });\n log.ok(`Unpinned ${ref} for ${target} in ${workspace}`);\n}\n", "import { mkdtemp, mkdir, readdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { z } from \"zod\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n extractBundle,\n formatSkillRef,\n parseSkillRef,\n resolveInstallDir,\n verifyBundleHash,\n type InstallTarget,\n} from \"@floom/shared\";\nimport { rawGet } from \"../api-client.js\";\nimport { getApiBaseUrls, getAppUrl, readAuth } from \"../config.js\";\nimport { assertTarget, normalizeScope, readFloomConfig } from \"../lib/config-file.js\";\nimport { readLock, setLockEntry, writeLock } from \"../lib/floom-lock.js\";\nimport { VERSION } from \"../version.js\";\n\ntype MTarget = \"claude\" | \"codex\" | \"cursor\" | \"kimi\" | \"opencode\" | \"gemini\";\nconst API_TIMEOUT_MS = 20_000;\n\nasync function fetchWithTimeout(url: string | URL, init: RequestInit = {}): Promise<Response> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), API_TIMEOUT_MS);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } catch (e) {\n if ((e as Error).name === \"AbortError\") throw new Error(`Request timed out after ${API_TIMEOUT_MS}ms`);\n throw e;\n } finally {\n clearTimeout(timer);\n }\n}\n\nasync function resolveOptionalToken(): Promise<string | null> {\n const fromEnv = process.env.FLOOM_API_TOKEN?.trim();\n if (fromEnv) return fromEnv;\n const auth = await readAuth();\n if (auth?.token) return auth.token;\n return null;\n}\n\nasync function resolveRequiredToken(): Promise<string> {\n const token = await resolveOptionalToken();\n if (token) return token;\n throw new Error(\"Authentication required. Run `floom login` or set FLOOM_API_TOKEN.\");\n}\n\nasync function apiRequest<T = unknown>(token: string | null, path: string, query?: Record<string, string>): Promise<T> {\n const auth = await readAuth();\n let lastError: Error | null = null;\n for (const base of getApiBaseUrls(auth?.apiUrl)) {\n const url = new URL(base + path);\n if (query) {\n for (const [k, v] of Object.entries(query)) url.searchParams.set(k, v);\n }\n let res: Response;\n try {\n res = await fetchWithTimeout(url, {\n headers: {\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n \"Content-Type\": \"application/json\",\n },\n });\n } catch (e) {\n lastError = new Error(`Unable to reach Floom API at ${base}: ${(e as Error).message}`);\n continue;\n }\n const body = await res.text();\n let json: any = null;\n try { json = body ? JSON.parse(body) : null; } catch { json = { raw: body }; }\n if (res.ok) return json as T;\n lastError = new Error(json?.error?.message ?? `HTTP ${res.status}`);\n if (res.status !== 404 || json?.error) break;\n }\n throw lastError ?? new Error(\"API request failed\");\n}\n\nasync function installViaApi(token: string | null, refText: string, target: MTarget): Promise<{ path: string; version: string; ref: string }> {\n const parsed = parseSkillRef(refText);\n if (!parsed) throw new Error(`Invalid ref: ${refText}`);\n const info = await apiRequest<any>(token, `/skills/${parsed.owner}/${parsed.slug}`);\n const dl = await apiRequest<any>(token, `/skills/${parsed.owner}/${parsed.slug}/download`, parsed.version ? { version: parsed.version } : undefined);\n const bundle = await rawGet(dl.download.url);\n if (!verifyBundleHash(bundle, dl.bundle_sha256)) throw new Error(\"Bundle hash mismatch\");\n\n const install = resolveInstallDir({ target: target as InstallTarget });\n await mkdir(install.dir, { recursive: true });\n const dest = join(install.dir, parsed.slug);\n const exists = await readdir(dest).then(() => true).catch(() => false);\n if (exists) await rm(dest, { recursive: true, force: true });\n const temp = await mkdtemp(join(tmpdir(), `floom-mcp-${parsed.slug}-`));\n try {\n await extractBundle(bundle, temp);\n await rename(temp, dest);\n } catch (e) {\n await rm(temp, { recursive: true, force: true }).catch(() => {});\n throw e;\n }\n\n const lock = await readLock(process.cwd());\n const ref = formatSkillRef({ owner: parsed.owner, slug: parsed.slug });\n const next = setLockEntry(lock, ref, {\n version: dl.version,\n resolved: `${getAppUrl().replace(/\\/$/, \"\")}/${ref}`,\n bundle_sha256: dl.bundle_sha256,\n installed_at: new Date().toISOString(),\n path: dest.replace(process.cwd() + \"/\", \"\"),\n preset: target,\n });\n await writeLock(process.cwd(), next);\n return { path: dest, version: dl.version, ref: info.ref ?? ref };\n}\n\nexport interface ParsedSkillBundle {\n files: string[];\n skill_md: string;\n skill_json: unknown | null;\n}\n\nexport async function parseSkillBundle(bundle: Buffer): Promise<ParsedSkillBundle> {\n const tmp = await mkdtemp(join(tmpdir(), \"floom-mcp-read-\"));\n try {\n await extractBundle(bundle, tmp);\n const files: string[] = [];\n const walk = async (dir: string, rel = \"\"): Promise<void> => {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const nextRel = rel ? `${rel}/${entry.name}` : entry.name;\n const full = join(dir, entry.name);\n if (entry.isDirectory()) await walk(full, nextRel);\n else files.push(nextRel);\n }\n };\n await walk(tmp);\n const skillMdPath = files.find((f) => f.toUpperCase() === \"SKILL.MD\");\n const skillMd = skillMdPath ? await readFile(join(tmp, skillMdPath), \"utf8\") : \"\";\n const skillJsonPath = files.find((f) => f.toLowerCase() === \"skill.json\");\n const skillJson = skillJsonPath ? JSON.parse(await readFile(join(tmp, skillJsonPath), \"utf8\")) : null;\n return { files, skill_md: skillMd, skill_json: skillJson };\n } finally {\n await rm(tmp, { recursive: true, force: true });\n }\n}\n\nexport async function mcpCommand(): Promise<void> {\n const server = new McpServer({ name: \"floom\", version: VERSION });\n\n server.tool(\"search_skills\", { query: z.string().min(1), workspace: z.string().optional(), library: z.string().optional() }, async ({ query, workspace, library }) => {\n const token = await resolveRequiredToken();\n const workspaceSlug = workspace ?? library;\n const result = await apiRequest<any>(token, \"/skills\", { q: query, ...(workspaceSlug ? { library: workspaceSlug } : {}) });\n return { content: [{ type: \"text\", text: JSON.stringify(result) }] };\n });\n\n server.tool(\"get_skill\", { ref: z.string().min(3) }, async ({ ref }) => {\n const token = await resolveOptionalToken();\n const parsed = parseSkillRef(ref);\n if (!parsed) throw new Error(\"Invalid ref. Expected @owner/slug or workspace/slug\");\n const meta = await apiRequest<any>(token, `/skills/${parsed.owner}/${parsed.slug}`);\n const dl = await apiRequest<any>(token, `/skills/${parsed.owner}/${parsed.slug}/download`);\n const buf = await rawGet(dl.download.url);\n const parsedBundle = await parseSkillBundle(buf);\n return { content: [{ type: \"text\", text: JSON.stringify({ ref, meta, ...parsedBundle }) }] };\n });\n\n async function listWorkspaces() {\n const token = await resolveRequiredToken();\n const result = await apiRequest<any>(token, \"/libraries\");\n return { content: [{ type: \"text\" as const, text: JSON.stringify(result) }] };\n }\n\n server.tool(\"list_workspaces\", {}, listWorkspaces);\n server.tool(\"list_libraries\", {}, listWorkspaces);\n\n server.tool(\"get_floom_guide\", {}, async () => {\n return {\n content: [{\n type: \"text\",\n text: JSON.stringify({\n guide: [\n \"Use Floom to discover approved AI skills without loading every skill into context.\",\n \"Call search_skills when you need a skill that is not already installed.\",\n \"Call get_skill only after selecting a specific skill candidate.\",\n \"Call install_skill only after the user or task requires local installation.\",\n \"Use get_instruction for account/workspace guidance visible to this agent.\",\n ],\n }),\n }],\n };\n });\n\n server.tool(\"get_instruction\", {\n scope: z.enum([\"account\", \"workspace\"]).default(\"account\"),\n workspace: z.string().optional(),\n target: z.enum([\"default\", \"claude\", \"codex\", \"cursor\", \"opencode\"]).default(\"default\"),\n }, async ({ scope, workspace, target }) => {\n const token = await resolveRequiredToken();\n const result = await apiRequest<any>(token, \"/instructions\", {\n scope,\n ...(workspace ? { workspace } : {}),\n target,\n });\n return { content: [{ type: \"text\", text: JSON.stringify(result) }] };\n });\n\n server.tool(\"list_active_workspaces\", {\n target: z.enum([\"claude\", \"codex\", \"cursor\", \"kimi\", \"opencode\"]).default(\"codex\"),\n scope: z.enum([\"global\", \"local\"]).default(\"local\"),\n }, async ({ target, scope }) => {\n const config = await readFloomConfig(normalizeScope(scope));\n const active = config.targets[assertTarget(target)]?.active_workspaces ?? [];\n return { content: [{ type: \"text\", text: JSON.stringify({ target, scope, active_workspaces: active }) }] };\n });\n\n server.tool(\"list_pinned_skills\", {\n workspace: z.string().optional(),\n target: z.enum([\"claude\", \"codex\", \"cursor\", \"kimi\", \"opencode\"]).default(\"codex\"),\n }, async ({ workspace, target }) => {\n const token = await resolveRequiredToken();\n const config = await readFloomConfig(\"local\");\n const workspaceSlug = workspace ?? config.default_workspace;\n if (!workspaceSlug) throw new Error(\"workspace is required when no default workspace is configured\");\n const result = await apiRequest<any>(token, `/libraries/${workspaceSlug}/pins`, { target });\n return { content: [{ type: \"text\", text: JSON.stringify(result) }] };\n });\n\n server.tool(\"install_skill\", { ref: z.string().min(3), target: z.enum([\"claude\", \"codex\", \"cursor\", \"kimi\", \"opencode\", \"gemini\"]) }, async ({ ref, target }) => {\n const token = await resolveOptionalToken();\n const installed = await installViaApi(token, ref, target);\n return { content: [{ type: \"text\", text: JSON.stringify(installed) }] };\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nexport async function mcpSmokeCommand(): Promise<void> {\n // Writes to local file only, not stdout; used for dev checks if needed.\n await writeFile(join(tmpdir(), \"floom-mcp-smoke.txt\"), \"ok\\n\", \"utf8\");\n}\n", "import { mkdtemp, readdir, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { api } from \"../api-client.js\";\nimport { DEFAULT_API_URL, isLegacyApiUrl, normalizeApiUrl, readAuth, readRawAuth } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\nimport { VERSION } from \"../version.js\";\n\ntype DoctorTarget = \"claude\" | \"codex\" | \"cursor\" | \"kimi\" | \"opencode\" | \"gemini\";\n\nexport interface DoctorOptions {\n freshAgent?: boolean;\n json?: boolean;\n query?: string;\n ref?: string;\n target?: DoctorTarget;\n}\n\ntype Check = { name: string; ok: boolean; detail?: string; status?: \"pass\" | \"warn\" | \"fail\" };\n\ninterface MeResponse {\n user: { handle: string; email: string };\n}\n\nfunction textOf(result: any): string {\n return String(result?.content?.[0]?.text ?? \"\");\n}\nfunction toolError(result: any): string | null {\n const text = textOf(result);\n if (result?.isError) return text || \"tool returned an MCP error\";\n if (/authentication required|forbidden|not found|invalid token/i.test(text)) return text;\n return null;\n}\nfunction jsonArrayLength(result: any, key: string): number | null {\n if (toolError(result)) return null;\n try {\n const parsed = JSON.parse(textOf(result));\n const value = parsed?.[key];\n return Array.isArray(value) ? value.length : null;\n } catch {\n return null;\n }\n}\nfunction pass(name: string, detail?: string): Check { return { name, ok: true, detail }; }\nfunction warn(name: string, detail?: string): Check { return { name, ok: true, detail, status: \"warn\" }; }\nfunction fail(name: string, detail?: string): Check { return { name, ok: false, detail }; }\n\nasync function validateCurrentToken(token: string | undefined): Promise<Check> {\n if (!token) return warn(\"fresh_agent_auth\", \"missing token; authenticated MCP calls skipped\");\n try {\n const me = await api<MeResponse>(\"/me\", { authRequired: true });\n return pass(\"fresh_agent_auth\", `@${me.user.handle}`);\n } catch (e) {\n return warn(\"fresh_agent_auth\", `saved login rejected; authenticated MCP calls skipped: ${(e as Error).message}`);\n }\n}\n\nexport async function doctorCommand(opts: DoctorOptions = {}): Promise<void> {\n if (!opts.freshAgent) {\n const auth = await readAuth();\n const rawAuth = await readRawAuth();\n let authCheck: Check;\n const envToken = process.env.FLOOM_API_TOKEN?.trim();\n if (!auth?.token && !envToken) {\n authCheck = fail(\"auth\", \"not logged in\");\n } else {\n try {\n const me = await api<MeResponse>(\"/me\", { authRequired: true });\n const authSource = envToken ? \"FLOOM_API_TOKEN\" : \"~/.floom/auth.json\";\n authCheck = pass(\"auth\", `@${me.user.handle} via ${authSource}`);\n } catch (e) {\n authCheck = fail(\"auth\", `saved login rejected by API: ${(e as Error).message}`);\n }\n }\n const checks = [\n pass(\"cli_version\", VERSION),\n authCheck,\n process.env.FLOOM_API_URL\n ? isLegacyApiUrl(process.env.FLOOM_API_URL)\n ? warn(\"api_url\", `legacy FLOOM_API_URL ${process.env.FLOOM_API_URL}; using ${DEFAULT_API_URL}`)\n : pass(\"api_url\", process.env.FLOOM_API_URL)\n : isLegacyApiUrl(rawAuth?.apiUrl)\n ? warn(\"auth_api_url\", `legacy URL in ~/.floom/auth.json; using ${DEFAULT_API_URL}`)\n : pass(\"api_url\", auth?.apiUrl ?? DEFAULT_API_URL),\n ];\n emitDoctor(checks, opts.json);\n if (checks.some((check) => !check.ok)) process.exit(1);\n return;\n }\n\n const checks: Check[] = [];\n const auth = await readAuth();\n const token = process.env.FLOOM_API_TOKEN?.trim() || auth?.token;\n const authCheck = await validateCurrentToken(token);\n const hasValidToken = authCheck.ok && authCheck.status !== \"warn\" && Boolean(token);\n checks.push(authCheck);\n\n const cliPath = process.argv[1];\n if (!cliPath) {\n checks.push(fail(\"fresh_agent_cli_path\", \"process.argv[1] is empty\"));\n emitDoctor(checks, opts.json);\n process.exit(1);\n }\n\n const tmpHome = await mkdtemp(join(tmpdir(), \"floom-doctor-home-\"));\n const tmpSkills = await mkdtemp(join(tmpdir(), \"floom-doctor-skills-\"));\n const tmpProject = await mkdtemp(join(tmpdir(), \"floom-doctor-project-\"));\n const transport = new StdioClientTransport({\n command: process.execPath,\n args: [cliPath, \"mcp\"],\n cwd: tmpProject,\n env: {\n ...process.env,\n HOME: tmpHome,\n FLOOM_SKILLS_DIR: tmpSkills,\n ...(hasValidToken && token ? { FLOOM_API_TOKEN: token } : {}),\n ...(process.env.FLOOM_API_URL ? { FLOOM_API_URL: normalizeApiUrl(process.env.FLOOM_API_URL) } : auth?.apiUrl ? { FLOOM_API_URL: auth.apiUrl } : {}),\n },\n stderr: \"pipe\",\n });\n const client = new Client({ name: \"floom-doctor\", version: VERSION });\n\n try {\n await client.connect(transport);\n const tools = await client.listTools();\n const toolNames = tools.tools.map((tool) => tool.name).sort();\n const expected = [\"get_skill\", \"install_skill\", \"list_libraries\", \"list_workspaces\", \"search_skills\"];\n const missing = expected.filter((name) => !toolNames.includes(name));\n checks.push(missing.length === 0 ? pass(\"mcp_tools\", toolNames.join(\", \")) : fail(\"mcp_tools\", `missing ${missing.join(\", \")}`));\n\n if (hasValidToken) {\n const workspaces = await client.callTool({ name: \"list_workspaces\", arguments: {} });\n const workspaceError = toolError(workspaces);\n const workspaceCount = jsonArrayLength(workspaces, \"libraries\");\n const workspacesOk = !workspaceError && workspaceCount !== null;\n checks.push(workspacesOk ? pass(\"mcp_list_workspaces\", `${workspaceCount} workspaces`) : fail(\"mcp_list_workspaces\", workspaceError ?? \"unexpected response shape\"));\n\n const search = await client.callTool({ name: \"search_skills\", arguments: { query: opts.query ?? \"pdf\" } });\n const searchError = toolError(search);\n const skillCount = jsonArrayLength(search, \"skills\");\n const searchOk = !searchError && skillCount !== null;\n checks.push(searchOk ? pass(\"mcp_search_skills\", `${skillCount} skills`) : fail(\"mcp_search_skills\", searchError ?? \"unexpected response shape\"));\n } else {\n checks.push(warn(\"mcp_authenticated_tools\", \"skipped list_workspaces/search_skills because no valid token is available\"));\n }\n\n const ref = opts.ref ?? \"floom-demo/brand-voice\";\n const skill = await client.callTool({ name: \"get_skill\", arguments: { ref } });\n checks.push(/SKILL\\.md/.test(textOf(skill)) ? pass(\"mcp_get_skill\", ref) : fail(\"mcp_get_skill\", \"bundle did not include SKILL.md\"));\n\n const installed = await client.callTool({ name: \"install_skill\", arguments: { ref, target: opts.target ?? \"codex\" } });\n const entries = await readdir(tmpSkills);\n checks.push(entries.length > 0 ? pass(\"mcp_install_skill\", textOf(installed)) : fail(\"mcp_install_skill\", \"target directory is empty\"));\n } catch (e) {\n checks.push(fail(\"fresh_agent_mcp\", (e as Error).message));\n } finally {\n await client.close().catch(() => {});\n await rm(tmpHome, { recursive: true, force: true });\n await rm(tmpSkills, { recursive: true, force: true });\n await rm(tmpProject, { recursive: true, force: true });\n }\n\n emitDoctor(checks, opts.json);\n if (checks.some((check) => !check.ok)) process.exit(1);\n}\n\nfunction emitDoctor(checks: Check[], json?: boolean): void {\n if (json) {\n console.log(JSON.stringify({ ok: checks.every((check) => check.ok), checks }, null, 2));\n return;\n }\n log.heading(\"Floom doctor\");\n for (const check of checks) {\n const detail = check.detail ? ` ${check.detail}` : \"\";\n if (check.status === \"warn\") log.warn(`${check.name}${detail}`);\n else if (check.ok) log.ok(`${check.name}${detail}`);\n else log.err(`${check.name}${detail}`);\n }\n}\n"],
|
|
5
|
-
"mappings": "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A,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAG;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAC/D;AAAA,QAAI;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,Q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S;AAAA,QACT;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;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",
|
|
6
|
-
"names": ["bcrypt", "random", "callback", "resolve", "salt", "utfx", "fail", "b", "err", "readFile", "join", "owner", "slug", "version", "readFile", "join", "createHash", "resolve", "promisify", "homedir", "join", "mkdir", "readFile", "promisify", "writeFile", "stat", "join", "stat", "join", "writeFile", "readFile", "join", "readFile", "join", "readFile", "join", "readFile", "join", "mkdir", "readdir", "join", "readFile", "writeFile", "mkdir", "stat", "readdir", "join", "relative", "sep", "posix", "createHash", "walk", "readdir", "join", "readFile", "relative", "sep", "posix", "createHash", "stat", "join", "readdir", "mkdir", "rm", "rename", "mkdir", "tmpdir", "join", "resolve", "cmpSemver", "resolve", "join", "tmpdir", "rm", "mkdir", "rename", "mkdir", "readFile", "writeFile", "homedir", "join", "z", "z", "join", "homedir", "readFile", "mkdir", "writeFile", "mkdir", "readFile", "writeFile", "basename", "dirname", "join", "createHash", "createHash", "readFile", "join", "basename", "mkdir", "dirname", "writeFile", "mkdir", "writeFile", "dirname", "join", "join", "mkdir", "dirname", "writeFile", "mkdir", "readdir", "readFile", "rename", "rm", "writeFile", "join", "tmpdir", "z", "fetchWithTimeout", "mkdir", "join", "readdir", "rm", "tmpdir", "rename", "walk", "readFile", "z", "mkdtemp", "readdir", "rm", "tmpdir", "join", "auth", "authCheck", "checks", "mkdtemp", "join", "tmpdir", "readdir", "rm"]
|
|
4
|
+
"sourcesContent": ["/*\r\n Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>\r\n Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>\r\n Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>\r\n\r\n Redistribution and use in source and binary forms, with or without\r\n modification, are permitted provided that the following conditions\r\n are met:\r\n 1. Redistributions of source code must retain the above copyright\r\n notice, this list of conditions and the following disclaimer.\r\n 2. Redistributions in binary form must reproduce the above copyright\r\n notice, this list of conditions and the following disclaimer in the\r\n documentation and/or other materials provided with the distribution.\r\n 3. The name of the author may not be used to endorse or promote products\r\n derived from this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\r\n IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\r\n OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\n NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\n/**\r\n * @license bcrypt.js (c) 2013 Daniel Wirtz <dcode@dcode.io>\r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/bcrypt.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n define([], factory);\r\n /* CommonJS */ else if (typeof require === 'function' && typeof module === \"object\" && module && module[\"exports\"])\r\n module[\"exports\"] = factory();\r\n /* Global */ else\r\n (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"bcrypt\"] = factory();\r\n\r\n}(this, function() {\r\n \"use strict\";\r\n\r\n /**\r\n * bcrypt namespace.\r\n * @type {Object.<string,*>}\r\n */\r\n var bcrypt = {};\r\n\r\n /**\r\n * The random implementation to use as a fallback.\r\n * @type {?function(number):!Array.<number>}\r\n * @inner\r\n */\r\n var randomFallback = null;\r\n\r\n /**\r\n * Generates cryptographically secure random bytes.\r\n * @function\r\n * @param {number} len Bytes length\r\n * @returns {!Array.<number>} Random bytes\r\n * @throws {Error} If no random implementation is available\r\n * @inner\r\n */\r\n function random(len) {\r\n /* node */ if (typeof module !== 'undefined' && module && module['exports'])\r\n try {\r\n return require(\"crypto\")['randomBytes'](len);\r\n } catch (e) {}\r\n /* WCA */ try {\r\n var a; (self['crypto']||self['msCrypto'])['getRandomValues'](a = new Uint32Array(len));\r\n return Array.prototype.slice.call(a);\r\n } catch (e) {}\r\n /* fallback */ if (!randomFallback)\r\n throw Error(\"Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative\");\r\n return randomFallback(len);\r\n }\r\n\r\n // Test if any secure randomness source is available\r\n var randomAvailable = false;\r\n try {\r\n random(1);\r\n randomAvailable = true;\r\n } catch (e) {}\r\n\r\n // Default fallback, if any\r\n randomFallback = null;\r\n /**\r\n * Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto\r\n * API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it\r\n * is seeded properly!\r\n * @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its\r\n * sole argument, returning the corresponding array of cryptographically secure random byte values.\r\n * @see http://nodejs.org/api/crypto.html\r\n * @see http://www.w3.org/TR/WebCryptoAPI/\r\n */\r\n bcrypt.setRandomFallback = function(random) {\r\n randomFallback = random;\r\n };\r\n\r\n /**\r\n * Synchronously generates a salt.\r\n * @param {number=} rounds Number of rounds to use, defaults to 10 if omitted\r\n * @param {number=} seed_length Not supported.\r\n * @returns {string} Resulting salt\r\n * @throws {Error} If a random fallback is required but not set\r\n * @expose\r\n */\r\n bcrypt.genSaltSync = function(rounds, seed_length) {\r\n rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;\r\n if (typeof rounds !== 'number')\r\n throw Error(\"Illegal arguments: \"+(typeof rounds)+\", \"+(typeof seed_length));\r\n if (rounds < 4)\r\n rounds = 4;\r\n else if (rounds > 31)\r\n rounds = 31;\r\n var salt = [];\r\n salt.push(\"$2a$\");\r\n if (rounds < 10)\r\n salt.push(\"0\");\r\n salt.push(rounds.toString());\r\n salt.push('$');\r\n salt.push(base64_encode(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw\r\n return salt.join('');\r\n };\r\n\r\n /**\r\n * Asynchronously generates a salt.\r\n * @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted\r\n * @param {(number|function(Error, string=))=} seed_length Not supported.\r\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt\r\n * @returns {!Promise} If `callback` has been omitted\r\n * @throws {Error} If `callback` is present but not a function\r\n * @expose\r\n */\r\n bcrypt.genSalt = function(rounds, seed_length, callback) {\r\n if (typeof seed_length === 'function')\r\n callback = seed_length,\r\n seed_length = undefined; // Not supported.\r\n if (typeof rounds === 'function')\r\n callback = rounds,\r\n rounds = undefined;\r\n if (typeof rounds === 'undefined')\r\n rounds = GENSALT_DEFAULT_LOG2_ROUNDS;\r\n else if (typeof rounds !== 'number')\r\n throw Error(\"illegal arguments: \"+(typeof rounds));\r\n\r\n function _async(callback) {\r\n nextTick(function() { // Pretty thin, but salting is fast enough\r\n try {\r\n callback(null, bcrypt.genSaltSync(rounds));\r\n } catch (err) {\r\n callback(err);\r\n }\r\n });\r\n }\r\n\r\n if (callback) {\r\n if (typeof callback !== 'function')\r\n throw Error(\"Illegal callback: \"+typeof(callback));\r\n _async(callback);\r\n } else\r\n return new Promise(function(resolve, reject) {\r\n _async(function(err, res) {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(res);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Synchronously generates a hash for the given string.\r\n * @param {string} s String to hash\r\n * @param {(number|string)=} salt Salt length to generate or salt to use, default to 10\r\n * @returns {string} Resulting hash\r\n * @expose\r\n */\r\n bcrypt.hashSync = function(s, salt) {\r\n if (typeof salt === 'undefined')\r\n salt = GENSALT_DEFAULT_LOG2_ROUNDS;\r\n if (typeof salt === 'number')\r\n salt = bcrypt.genSaltSync(salt);\r\n if (typeof s !== 'string' || typeof salt !== 'string')\r\n throw Error(\"Illegal arguments: \"+(typeof s)+', '+(typeof salt));\r\n return _hash(s, salt);\r\n };\r\n\r\n /**\r\n * Asynchronously generates a hash for the given string.\r\n * @param {string} s String to hash\r\n * @param {number|string} salt Salt length to generate or salt to use\r\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash\r\n * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed\r\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\r\n * @returns {!Promise} If `callback` has been omitted\r\n * @throws {Error} If `callback` is present but not a function\r\n * @expose\r\n */\r\n bcrypt.hash = function(s, salt, callback, progressCallback) {\r\n\r\n function _async(callback) {\r\n if (typeof s === 'string' && typeof salt === 'number')\r\n bcrypt.genSalt(salt, function(err, salt) {\r\n _hash(s, salt, callback, progressCallback);\r\n });\r\n else if (typeof s === 'string' && typeof salt === 'string')\r\n _hash(s, salt, callback, progressCallback);\r\n else\r\n nextTick(callback.bind(this, Error(\"Illegal arguments: \"+(typeof s)+', '+(typeof salt))));\r\n }\r\n\r\n if (callback) {\r\n if (typeof callback !== 'function')\r\n throw Error(\"Illegal callback: \"+typeof(callback));\r\n _async(callback);\r\n } else\r\n return new Promise(function(resolve, reject) {\r\n _async(function(err, res) {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(res);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Compares two strings of the same length in constant time.\r\n * @param {string} known Must be of the correct length\r\n * @param {string} unknown Must be the same length as `known`\r\n * @returns {boolean}\r\n * @inner\r\n */\r\n function safeStringCompare(known, unknown) {\r\n var right = 0,\r\n wrong = 0;\r\n for (var i=0, k=known.length; i<k; ++i) {\r\n if (known.charCodeAt(i) === unknown.charCodeAt(i))\r\n ++right;\r\n else\r\n ++wrong;\r\n }\r\n // Prevent removal of unused variables (never true, actually)\r\n if (right < 0)\r\n return false;\r\n return wrong === 0;\r\n }\r\n\r\n /**\r\n * Synchronously tests a string against a hash.\r\n * @param {string} s String to compare\r\n * @param {string} hash Hash to test against\r\n * @returns {boolean} true if matching, otherwise false\r\n * @throws {Error} If an argument is illegal\r\n * @expose\r\n */\r\n bcrypt.compareSync = function(s, hash) {\r\n if (typeof s !== \"string\" || typeof hash !== \"string\")\r\n throw Error(\"Illegal arguments: \"+(typeof s)+', '+(typeof hash));\r\n if (hash.length !== 60)\r\n return false;\r\n return safeStringCompare(bcrypt.hashSync(s, hash.substr(0, hash.length-31)), hash);\r\n };\r\n\r\n /**\r\n * Asynchronously compares the given data against the given hash.\r\n * @param {string} s Data to compare\r\n * @param {string} hash Data to be compared to\r\n * @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result\r\n * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed\r\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\r\n * @returns {!Promise} If `callback` has been omitted\r\n * @throws {Error} If `callback` is present but not a function\r\n * @expose\r\n */\r\n bcrypt.compare = function(s, hash, callback, progressCallback) {\r\n\r\n function _async(callback) {\r\n if (typeof s !== \"string\" || typeof hash !== \"string\") {\r\n nextTick(callback.bind(this, Error(\"Illegal arguments: \"+(typeof s)+', '+(typeof hash))));\r\n return;\r\n }\r\n if (hash.length !== 60) {\r\n nextTick(callback.bind(this, null, false));\r\n return;\r\n }\r\n bcrypt.hash(s, hash.substr(0, 29), function(err, comp) {\r\n if (err)\r\n callback(err);\r\n else\r\n callback(null, safeStringCompare(comp, hash));\r\n }, progressCallback);\r\n }\r\n\r\n if (callback) {\r\n if (typeof callback !== 'function')\r\n throw Error(\"Illegal callback: \"+typeof(callback));\r\n _async(callback);\r\n } else\r\n return new Promise(function(resolve, reject) {\r\n _async(function(err, res) {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(res);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Gets the number of rounds used to encrypt the specified hash.\r\n * @param {string} hash Hash to extract the used number of rounds from\r\n * @returns {number} Number of rounds used\r\n * @throws {Error} If `hash` is not a string\r\n * @expose\r\n */\r\n bcrypt.getRounds = function(hash) {\r\n if (typeof hash !== \"string\")\r\n throw Error(\"Illegal arguments: \"+(typeof hash));\r\n return parseInt(hash.split(\"$\")[2], 10);\r\n };\r\n\r\n /**\r\n * Gets the salt portion from a hash. Does not validate the hash.\r\n * @param {string} hash Hash to extract the salt from\r\n * @returns {string} Extracted salt part\r\n * @throws {Error} If `hash` is not a string or otherwise invalid\r\n * @expose\r\n */\r\n bcrypt.getSalt = function(hash) {\r\n if (typeof hash !== 'string')\r\n throw Error(\"Illegal arguments: \"+(typeof hash));\r\n if (hash.length !== 60)\r\n throw Error(\"Illegal hash length: \"+hash.length+\" != 60\");\r\n return hash.substring(0, 29);\r\n };\r\n\r\n /**\r\n * Continues with the callback on the next tick.\r\n * @function\r\n * @param {function(...[*])} callback Callback to execute\r\n * @inner\r\n */\r\n var nextTick = typeof process !== 'undefined' && process && typeof process.nextTick === 'function'\r\n ? (typeof setImmediate === 'function' ? setImmediate : process.nextTick)\r\n : setTimeout;\r\n\r\n /**\r\n * Converts a JavaScript string to UTF8 bytes.\r\n * @param {string} str String\r\n * @returns {!Array.<number>} UTF8 bytes\r\n * @inner\r\n */\r\n function stringToBytes(str) {\r\n var out = [],\r\n i = 0;\r\n utfx.encodeUTF16toUTF8(function() {\r\n if (i >= str.length) return null;\r\n return str.charCodeAt(i++);\r\n }, function(b) {\r\n out.push(b);\r\n });\r\n return out;\r\n }\r\n\r\n // A base64 implementation for the bcrypt algorithm. This is partly non-standard.\r\n\r\n /**\r\n * bcrypt's own non-standard base64 dictionary.\r\n * @type {!Array.<string>}\r\n * @const\r\n * @inner\r\n **/\r\n var BASE64_CODE = \"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split('');\r\n\r\n /**\r\n * @type {!Array.<number>}\r\n * @const\r\n * @inner\r\n **/\r\n var BASE64_INDEX = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,\r\n 1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1,\r\n -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\r\n 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29, 30,\r\n 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\r\n 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1];\r\n\r\n /**\r\n * @type {!function(...number):string}\r\n * @inner\r\n */\r\n var stringFromCharCode = String.fromCharCode;\r\n\r\n /**\r\n * Encodes a byte array to base64 with up to len bytes of input.\r\n * @param {!Array.<number>} b Byte array\r\n * @param {number} len Maximum input length\r\n * @returns {string}\r\n * @inner\r\n */\r\n function base64_encode(b, len) {\r\n var off = 0,\r\n rs = [],\r\n c1, c2;\r\n if (len <= 0 || len > b.length)\r\n throw Error(\"Illegal len: \"+len);\r\n while (off < len) {\r\n c1 = b[off++] & 0xff;\r\n rs.push(BASE64_CODE[(c1 >> 2) & 0x3f]);\r\n c1 = (c1 & 0x03) << 4;\r\n if (off >= len) {\r\n rs.push(BASE64_CODE[c1 & 0x3f]);\r\n break;\r\n }\r\n c2 = b[off++] & 0xff;\r\n c1 |= (c2 >> 4) & 0x0f;\r\n rs.push(BASE64_CODE[c1 & 0x3f]);\r\n c1 = (c2 & 0x0f) << 2;\r\n if (off >= len) {\r\n rs.push(BASE64_CODE[c1 & 0x3f]);\r\n break;\r\n }\r\n c2 = b[off++] & 0xff;\r\n c1 |= (c2 >> 6) & 0x03;\r\n rs.push(BASE64_CODE[c1 & 0x3f]);\r\n rs.push(BASE64_CODE[c2 & 0x3f]);\r\n }\r\n return rs.join('');\r\n }\r\n\r\n /**\r\n * Decodes a base64 encoded string to up to len bytes of output.\r\n * @param {string} s String to decode\r\n * @param {number} len Maximum output length\r\n * @returns {!Array.<number>}\r\n * @inner\r\n */\r\n function base64_decode(s, len) {\r\n var off = 0,\r\n slen = s.length,\r\n olen = 0,\r\n rs = [],\r\n c1, c2, c3, c4, o, code;\r\n if (len <= 0)\r\n throw Error(\"Illegal len: \"+len);\r\n while (off < slen - 1 && olen < len) {\r\n code = s.charCodeAt(off++);\r\n c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\r\n code = s.charCodeAt(off++);\r\n c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\r\n if (c1 == -1 || c2 == -1)\r\n break;\r\n o = (c1 << 2) >>> 0;\r\n o |= (c2 & 0x30) >> 4;\r\n rs.push(stringFromCharCode(o));\r\n if (++olen >= len || off >= slen)\r\n break;\r\n code = s.charCodeAt(off++);\r\n c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\r\n if (c3 == -1)\r\n break;\r\n o = ((c2 & 0x0f) << 4) >>> 0;\r\n o |= (c3 & 0x3c) >> 2;\r\n rs.push(stringFromCharCode(o));\r\n if (++olen >= len || off >= slen)\r\n break;\r\n code = s.charCodeAt(off++);\r\n c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\r\n o = ((c3 & 0x03) << 6) >>> 0;\r\n o |= c4;\r\n rs.push(stringFromCharCode(o));\r\n ++olen;\r\n }\r\n var res = [];\r\n for (off = 0; off<olen; off++)\r\n res.push(rs[off].charCodeAt(0));\r\n return res;\r\n }\r\n\r\n /**\r\n * utfx-embeddable (c) 2014 Daniel Wirtz <dcode@dcode.io>\r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/utfx for details\r\n */\r\n var utfx = function() {\r\n \"use strict\";\r\n\r\n /**\r\n * utfx namespace.\r\n * @inner\r\n * @type {!Object.<string,*>}\r\n */\r\n var utfx = {};\r\n\r\n /**\r\n * Maximum valid code point.\r\n * @type {number}\r\n * @const\r\n */\r\n utfx.MAX_CODEPOINT = 0x10FFFF;\r\n\r\n /**\r\n * Encodes UTF8 code points to UTF8 bytes.\r\n * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n * respectively `null` if there are no more code points left or a single numeric code point.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte\r\n */\r\n utfx.encodeUTF8 = function(src, dst) {\r\n var cp = null;\r\n if (typeof src === 'number')\r\n cp = src,\r\n src = function() { return null; };\r\n while (cp !== null || (cp = src()) !== null) {\r\n if (cp < 0x80)\r\n dst(cp&0x7F);\r\n else if (cp < 0x800)\r\n dst(((cp>>6)&0x1F)|0xC0),\r\n dst((cp&0x3F)|0x80);\r\n else if (cp < 0x10000)\r\n dst(((cp>>12)&0x0F)|0xE0),\r\n dst(((cp>>6)&0x3F)|0x80),\r\n dst((cp&0x3F)|0x80);\r\n else\r\n dst(((cp>>18)&0x07)|0xF0),\r\n dst(((cp>>12)&0x3F)|0x80),\r\n dst(((cp>>6)&0x3F)|0x80),\r\n dst((cp&0x3F)|0x80);\r\n cp = null;\r\n }\r\n };\r\n\r\n /**\r\n * Decodes UTF8 bytes to UTF8 code points.\r\n * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n * are no more bytes left.\r\n * @param {!function(number)} dst Code points destination as a function successively called with each decoded code point.\r\n * @throws {RangeError} If a starting byte is invalid in UTF8\r\n * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the\r\n * remaining bytes.\r\n */\r\n utfx.decodeUTF8 = function(src, dst) {\r\n var a, b, c, d, fail = function(b) {\r\n b = b.slice(0, b.indexOf(null));\r\n var err = Error(b.toString());\r\n err.name = \"TruncatedError\";\r\n err['bytes'] = b;\r\n throw err;\r\n };\r\n while ((a = src()) !== null) {\r\n if ((a&0x80) === 0)\r\n dst(a);\r\n else if ((a&0xE0) === 0xC0)\r\n ((b = src()) === null) && fail([a, b]),\r\n dst(((a&0x1F)<<6) | (b&0x3F));\r\n else if ((a&0xF0) === 0xE0)\r\n ((b=src()) === null || (c=src()) === null) && fail([a, b, c]),\r\n dst(((a&0x0F)<<12) | ((b&0x3F)<<6) | (c&0x3F));\r\n else if ((a&0xF8) === 0xF0)\r\n ((b=src()) === null || (c=src()) === null || (d=src()) === null) && fail([a, b, c ,d]),\r\n dst(((a&0x07)<<18) | ((b&0x3F)<<12) | ((c&0x3F)<<6) | (d&0x3F));\r\n else throw RangeError(\"Illegal starting byte: \"+a);\r\n }\r\n };\r\n\r\n /**\r\n * Converts UTF16 characters to UTF8 code points.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @param {!function(number)} dst Code points destination as a function successively called with each converted code\r\n * point.\r\n */\r\n utfx.UTF16toUTF8 = function(src, dst) {\r\n var c1, c2 = null;\r\n while (true) {\r\n if ((c1 = c2 !== null ? c2 : src()) === null)\r\n break;\r\n if (c1 >= 0xD800 && c1 <= 0xDFFF) {\r\n if ((c2 = src()) !== null) {\r\n if (c2 >= 0xDC00 && c2 <= 0xDFFF) {\r\n dst((c1-0xD800)*0x400+c2-0xDC00+0x10000);\r\n c2 = null; continue;\r\n }\r\n }\r\n }\r\n dst(c1);\r\n }\r\n if (c2 !== null) dst(c2);\r\n };\r\n\r\n /**\r\n * Converts UTF8 code points to UTF16 characters.\r\n * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n * respectively `null` if there are no more code points left or a single numeric code point.\r\n * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n * @throws {RangeError} If a code point is out of range\r\n */\r\n utfx.UTF8toUTF16 = function(src, dst) {\r\n var cp = null;\r\n if (typeof src === 'number')\r\n cp = src, src = function() { return null; };\r\n while (cp !== null || (cp = src()) !== null) {\r\n if (cp <= 0xFFFF)\r\n dst(cp);\r\n else\r\n cp -= 0x10000,\r\n dst((cp>>10)+0xD800),\r\n dst((cp%0x400)+0xDC00);\r\n cp = null;\r\n }\r\n };\r\n\r\n /**\r\n * Converts and encodes UTF16 characters to UTF8 bytes.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively `null`\r\n * if there are no more characters left.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte.\r\n */\r\n utfx.encodeUTF16toUTF8 = function(src, dst) {\r\n utfx.UTF16toUTF8(src, function(cp) {\r\n utfx.encodeUTF8(cp, dst);\r\n });\r\n };\r\n\r\n /**\r\n * Decodes and converts UTF8 bytes to UTF16 characters.\r\n * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n * are no more bytes left.\r\n * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n * @throws {RangeError} If a starting byte is invalid in UTF8\r\n * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the remaining bytes.\r\n */\r\n utfx.decodeUTF8toUTF16 = function(src, dst) {\r\n utfx.decodeUTF8(src, function(cp) {\r\n utfx.UTF8toUTF16(cp, dst);\r\n });\r\n };\r\n\r\n /**\r\n * Calculates the byte length of an UTF8 code point.\r\n * @param {number} cp UTF8 code point\r\n * @returns {number} Byte length\r\n */\r\n utfx.calculateCodePoint = function(cp) {\r\n return (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 bytes required to store UTF8 code points.\r\n * @param {(!function():number|null)} src Code points source as a function returning the next code point respectively\r\n * `null` if there are no more code points left.\r\n * @returns {number} The number of UTF8 bytes required\r\n */\r\n utfx.calculateUTF8 = function(src) {\r\n var cp, l=0;\r\n while ((cp = src()) !== null)\r\n l += utfx.calculateCodePoint(cp);\r\n return l;\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 code points respectively UTF8 bytes required to store UTF16 char codes.\r\n * @param {(!function():number|null)} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @returns {!Array.<number>} The number of UTF8 code points at index 0 and the number of UTF8 bytes required at index 1.\r\n */\r\n utfx.calculateUTF16asUTF8 = function(src) {\r\n var n=0, l=0;\r\n utfx.UTF16toUTF8(src, function(cp) {\r\n ++n; l += utfx.calculateCodePoint(cp);\r\n });\r\n return [n,l];\r\n };\r\n\r\n return utfx;\r\n }();\r\n\r\n Date.now = Date.now || function() { return +new Date; };\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var BCRYPT_SALT_LEN = 16;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var GENSALT_DEFAULT_LOG2_ROUNDS = 10;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var BLOWFISH_NUM_ROUNDS = 16;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var MAX_EXECUTION_TIME = 100;\r\n\r\n /**\r\n * @type {Array.<number>}\r\n * @const\r\n * @inner\r\n */\r\n var P_ORIG = [\r\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822,\r\n 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377,\r\n 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5,\r\n 0xb5470917, 0x9216d5d9, 0x8979fb1b\r\n ];\r\n\r\n /**\r\n * @type {Array.<number>}\r\n * @const\r\n * @inner\r\n */\r\n var S_ORIG = [\r\n 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed,\r\n 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7,\r\n 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3,\r\n 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,\r\n 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023,\r\n 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,\r\n 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda,\r\n 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,\r\n 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af,\r\n 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6,\r\n 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381,\r\n 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\r\n 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d,\r\n 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5,\r\n 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a,\r\n 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,\r\n 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c,\r\n 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,\r\n 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3,\r\n 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,\r\n 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724,\r\n 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b,\r\n 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd,\r\n 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\r\n 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f,\r\n 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd,\r\n 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39,\r\n 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,\r\n 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df,\r\n 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,\r\n 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e,\r\n 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,\r\n 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98,\r\n 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565,\r\n 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341,\r\n 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\r\n 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0,\r\n 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64,\r\n 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191,\r\n 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,\r\n 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0,\r\n 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,\r\n 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5,\r\n 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,\r\n 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b,\r\n 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f,\r\n 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968,\r\n 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\r\n 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5,\r\n 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6,\r\n 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799,\r\n 0x6e85076a, 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,\r\n 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71,\r\n 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29,\r\n 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6,\r\n 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\r\n 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f,\r\n 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286,\r\n 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec,\r\n 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,\r\n 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9,\r\n 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,\r\n 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e,\r\n 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,\r\n 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290,\r\n 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810,\r\n 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6,\r\n 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,\r\n 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847,\r\n 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451,\r\n 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6,\r\n 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\r\n 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570,\r\n 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,\r\n 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978,\r\n 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,\r\n 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708,\r\n 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883,\r\n 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185,\r\n 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\r\n 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830,\r\n 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239,\r\n 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab,\r\n 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,\r\n 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19,\r\n 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,\r\n 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1,\r\n 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,\r\n 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef,\r\n 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3,\r\n 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15,\r\n 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,\r\n 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2,\r\n 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492,\r\n 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174,\r\n 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\r\n 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759,\r\n 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,\r\n 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc,\r\n 0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,\r\n 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465,\r\n 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a,\r\n 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c,\r\n 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,\r\n 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e,\r\n 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,\r\n 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0,\r\n 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,\r\n 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462,\r\n 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c,\r\n 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399,\r\n 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\r\n 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74,\r\n 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397,\r\n 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7,\r\n 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,\r\n 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802,\r\n 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,\r\n 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4,\r\n 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\r\n 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2,\r\n 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1,\r\n 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c,\r\n 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,\r\n 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341,\r\n 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8,\r\n 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b,\r\n 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,\r\n 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88,\r\n 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,\r\n 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc,\r\n 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,\r\n 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659,\r\n 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f,\r\n 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8,\r\n 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\r\n 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be,\r\n 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2,\r\n 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255,\r\n 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,\r\n 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1,\r\n 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,\r\n 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025,\r\n 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\r\n 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01,\r\n 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641,\r\n 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa,\r\n 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,\r\n 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409,\r\n 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9,\r\n 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3,\r\n 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,\r\n 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234,\r\n 0x92638212, 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf,\r\n 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740,\r\n 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\r\n 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f,\r\n 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d,\r\n 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8,\r\n 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,\r\n 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba,\r\n 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,\r\n 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69,\r\n 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,\r\n 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a,\r\n 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b,\r\n 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd,\r\n 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\r\n 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4,\r\n 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2,\r\n 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb,\r\n 0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,\r\n 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751,\r\n 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,\r\n 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369,\r\n 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,\r\n 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd,\r\n 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45,\r\n 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae,\r\n 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\r\n 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08,\r\n 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d,\r\n 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b,\r\n 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,\r\n 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e,\r\n 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,\r\n 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c,\r\n 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,\r\n 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361,\r\n 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c,\r\n 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be,\r\n 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\r\n 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d,\r\n 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891,\r\n 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5,\r\n 0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,\r\n 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292,\r\n 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,\r\n 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2,\r\n 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,\r\n 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c,\r\n 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8,\r\n 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4,\r\n 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\r\n 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6\r\n ];\r\n\r\n /**\r\n * @type {Array.<number>}\r\n * @const\r\n * @inner\r\n */\r\n var C_ORIG = [\r\n 0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944,\r\n 0x6f756274\r\n ];\r\n\r\n /**\r\n * @param {Array.<number>} lr\r\n * @param {number} off\r\n * @param {Array.<number>} P\r\n * @param {Array.<number>} S\r\n * @returns {Array.<number>}\r\n * @inner\r\n */\r\n function _encipher(lr, off, P, S) { // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt\r\n var n,\r\n l = lr[off],\r\n r = lr[off + 1];\r\n\r\n l ^= P[0];\r\n\r\n /*\r\n for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)\r\n // Feistel substitution on left word\r\n n = S[l >>> 24],\r\n n += S[0x100 | ((l >> 16) & 0xff)],\r\n n ^= S[0x200 | ((l >> 8) & 0xff)],\r\n n += S[0x300 | (l & 0xff)],\r\n r ^= n ^ P[++i],\r\n // Feistel substitution on right word\r\n n = S[r >>> 24],\r\n n += S[0x100 | ((r >> 16) & 0xff)],\r\n n ^= S[0x200 | ((r >> 8) & 0xff)],\r\n n += S[0x300 | (r & 0xff)],\r\n l ^= n ^ P[++i];\r\n */\r\n\r\n //The following is an unrolled version of the above loop.\r\n //Iteration 0\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[1];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[2];\r\n //Iteration 1\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[3];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[4];\r\n //Iteration 2\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[5];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[6];\r\n //Iteration 3\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[7];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[8];\r\n //Iteration 4\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[9];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[10];\r\n //Iteration 5\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[11];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[12];\r\n //Iteration 6\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[13];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[14];\r\n //Iteration 7\r\n n = S[l >>> 24];\r\n n += S[0x100 | ((l >> 16) & 0xff)];\r\n n ^= S[0x200 | ((l >> 8) & 0xff)];\r\n n += S[0x300 | (l & 0xff)];\r\n r ^= n ^ P[15];\r\n n = S[r >>> 24];\r\n n += S[0x100 | ((r >> 16) & 0xff)];\r\n n ^= S[0x200 | ((r >> 8) & 0xff)];\r\n n += S[0x300 | (r & 0xff)];\r\n l ^= n ^ P[16];\r\n\r\n lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];\r\n lr[off + 1] = l;\r\n return lr;\r\n }\r\n\r\n /**\r\n * @param {Array.<number>} data\r\n * @param {number} offp\r\n * @returns {{key: number, offp: number}}\r\n * @inner\r\n */\r\n function _streamtoword(data, offp) {\r\n for (var i = 0, word = 0; i < 4; ++i)\r\n word = (word << 8) | (data[offp] & 0xff),\r\n offp = (offp + 1) % data.length;\r\n return { key: word, offp: offp };\r\n }\r\n\r\n /**\r\n * @param {Array.<number>} key\r\n * @param {Array.<number>} P\r\n * @param {Array.<number>} S\r\n * @inner\r\n */\r\n function _key(key, P, S) {\r\n var offset = 0,\r\n lr = [0, 0],\r\n plen = P.length,\r\n slen = S.length,\r\n sw;\r\n for (var i = 0; i < plen; i++)\r\n sw = _streamtoword(key, offset),\r\n offset = sw.offp,\r\n P[i] = P[i] ^ sw.key;\r\n for (i = 0; i < plen; i += 2)\r\n lr = _encipher(lr, 0, P, S),\r\n P[i] = lr[0],\r\n P[i + 1] = lr[1];\r\n for (i = 0; i < slen; i += 2)\r\n lr = _encipher(lr, 0, P, S),\r\n S[i] = lr[0],\r\n S[i + 1] = lr[1];\r\n }\r\n\r\n /**\r\n * Expensive key schedule Blowfish.\r\n * @param {Array.<number>} data\r\n * @param {Array.<number>} key\r\n * @param {Array.<number>} P\r\n * @param {Array.<number>} S\r\n * @inner\r\n */\r\n function _ekskey(data, key, P, S) {\r\n var offp = 0,\r\n lr = [0, 0],\r\n plen = P.length,\r\n slen = S.length,\r\n sw;\r\n for (var i = 0; i < plen; i++)\r\n sw = _streamtoword(key, offp),\r\n offp = sw.offp,\r\n P[i] = P[i] ^ sw.key;\r\n offp = 0;\r\n for (i = 0; i < plen; i += 2)\r\n sw = _streamtoword(data, offp),\r\n offp = sw.offp,\r\n lr[0] ^= sw.key,\r\n sw = _streamtoword(data, offp),\r\n offp = sw.offp,\r\n lr[1] ^= sw.key,\r\n lr = _encipher(lr, 0, P, S),\r\n P[i] = lr[0],\r\n P[i + 1] = lr[1];\r\n for (i = 0; i < slen; i += 2)\r\n sw = _streamtoword(data, offp),\r\n offp = sw.offp,\r\n lr[0] ^= sw.key,\r\n sw = _streamtoword(data, offp),\r\n offp = sw.offp,\r\n lr[1] ^= sw.key,\r\n lr = _encipher(lr, 0, P, S),\r\n S[i] = lr[0],\r\n S[i + 1] = lr[1];\r\n }\r\n\r\n /**\r\n * Internaly crypts a string.\r\n * @param {Array.<number>} b Bytes to crypt\r\n * @param {Array.<number>} salt Salt bytes to use\r\n * @param {number} rounds Number of rounds\r\n * @param {function(Error, Array.<number>=)=} callback Callback receiving the error, if any, and the resulting bytes. If\r\n * omitted, the operation will be performed synchronously.\r\n * @param {function(number)=} progressCallback Callback called with the current progress\r\n * @returns {!Array.<number>|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`\r\n * @inner\r\n */\r\n function _crypt(b, salt, rounds, callback, progressCallback) {\r\n var cdata = C_ORIG.slice(),\r\n clen = cdata.length,\r\n err;\r\n\r\n // Validate\r\n if (rounds < 4 || rounds > 31) {\r\n err = Error(\"Illegal number of rounds (4-31): \"+rounds);\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n } else\r\n throw err;\r\n }\r\n if (salt.length !== BCRYPT_SALT_LEN) {\r\n err =Error(\"Illegal salt length: \"+salt.length+\" != \"+BCRYPT_SALT_LEN);\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n } else\r\n throw err;\r\n }\r\n rounds = (1 << rounds) >>> 0;\r\n\r\n var P, S, i = 0, j;\r\n\r\n //Use typed arrays when available - huge speedup!\r\n if (Int32Array) {\r\n P = new Int32Array(P_ORIG);\r\n S = new Int32Array(S_ORIG);\r\n } else {\r\n P = P_ORIG.slice();\r\n S = S_ORIG.slice();\r\n }\r\n\r\n _ekskey(salt, b, P, S);\r\n\r\n /**\r\n * Calcualtes the next round.\r\n * @returns {Array.<number>|undefined} Resulting array if callback has been omitted, otherwise `undefined`\r\n * @inner\r\n */\r\n function next() {\r\n if (progressCallback)\r\n progressCallback(i / rounds);\r\n if (i < rounds) {\r\n var start = Date.now();\r\n for (; i < rounds;) {\r\n i = i + 1;\r\n _key(b, P, S);\r\n _key(salt, P, S);\r\n if (Date.now() - start > MAX_EXECUTION_TIME)\r\n break;\r\n }\r\n } else {\r\n for (i = 0; i < 64; i++)\r\n for (j = 0; j < (clen >> 1); j++)\r\n _encipher(cdata, j << 1, P, S);\r\n var ret = [];\r\n for (i = 0; i < clen; i++)\r\n ret.push(((cdata[i] >> 24) & 0xff) >>> 0),\r\n ret.push(((cdata[i] >> 16) & 0xff) >>> 0),\r\n ret.push(((cdata[i] >> 8) & 0xff) >>> 0),\r\n ret.push((cdata[i] & 0xff) >>> 0);\r\n if (callback) {\r\n callback(null, ret);\r\n return;\r\n } else\r\n return ret;\r\n }\r\n if (callback)\r\n nextTick(next);\r\n }\r\n\r\n // Async\r\n if (typeof callback !== 'undefined') {\r\n next();\r\n\r\n // Sync\r\n } else {\r\n var res;\r\n while (true)\r\n if (typeof(res = next()) !== 'undefined')\r\n return res || [];\r\n }\r\n }\r\n\r\n /**\r\n * Internally hashes a string.\r\n * @param {string} s String to hash\r\n * @param {?string} salt Salt to use, actually never null\r\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,\r\n * hashing is perormed synchronously.\r\n * @param {function(number)=} progressCallback Callback called with the current progress\r\n * @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`\r\n * @inner\r\n */\r\n function _hash(s, salt, callback, progressCallback) {\r\n var err;\r\n if (typeof s !== 'string' || typeof salt !== 'string') {\r\n err = Error(\"Invalid string / salt: Not a string\");\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n }\r\n else\r\n throw err;\r\n }\r\n\r\n // Validate the salt\r\n var minor, offset;\r\n if (salt.charAt(0) !== '$' || salt.charAt(1) !== '2') {\r\n err = Error(\"Invalid salt version: \"+salt.substring(0,2));\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n }\r\n else\r\n throw err;\r\n }\r\n if (salt.charAt(2) === '$')\r\n minor = String.fromCharCode(0),\r\n offset = 3;\r\n else {\r\n minor = salt.charAt(2);\r\n if ((minor !== 'a' && minor !== 'b' && minor !== 'y') || salt.charAt(3) !== '$') {\r\n err = Error(\"Invalid salt revision: \"+salt.substring(2,4));\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n } else\r\n throw err;\r\n }\r\n offset = 4;\r\n }\r\n\r\n // Extract number of rounds\r\n if (salt.charAt(offset + 2) > '$') {\r\n err = Error(\"Missing salt rounds\");\r\n if (callback) {\r\n nextTick(callback.bind(this, err));\r\n return;\r\n } else\r\n throw err;\r\n }\r\n var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10,\r\n r2 = parseInt(salt.substring(offset + 1, offset + 2), 10),\r\n rounds = r1 + r2,\r\n real_salt = salt.substring(offset + 3, offset + 25);\r\n s += minor >= 'a' ? \"\\x00\" : \"\";\r\n\r\n var passwordb = stringToBytes(s),\r\n saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);\r\n\r\n /**\r\n * Finishes hashing.\r\n * @param {Array.<number>} bytes Byte array\r\n * @returns {string}\r\n * @inner\r\n */\r\n function finish(bytes) {\r\n var res = [];\r\n res.push(\"$2\");\r\n if (minor >= 'a')\r\n res.push(minor);\r\n res.push(\"$\");\r\n if (rounds < 10)\r\n res.push(\"0\");\r\n res.push(rounds.toString());\r\n res.push(\"$\");\r\n res.push(base64_encode(saltb, saltb.length));\r\n res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));\r\n return res.join('');\r\n }\r\n\r\n // Sync\r\n if (typeof callback == 'undefined')\r\n return finish(_crypt(passwordb, saltb, rounds));\r\n\r\n // Async\r\n else {\r\n _crypt(passwordb, saltb, rounds, function(err, bytes) {\r\n if (err)\r\n callback(err, null);\r\n else\r\n callback(null, finish(bytes));\r\n }, progressCallback);\r\n }\r\n }\r\n\r\n /**\r\n * Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet.\r\n * @function\r\n * @param {!Array.<number>} b Byte array\r\n * @param {number} len Maximum input length\r\n * @returns {string}\r\n * @expose\r\n */\r\n bcrypt.encodeBase64 = base64_encode;\r\n\r\n /**\r\n * Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.\r\n * @function\r\n * @param {string} s String to decode\r\n * @param {number} len Maximum output length\r\n * @returns {!Array.<number>}\r\n * @expose\r\n */\r\n bcrypt.decodeBase64 = base64_decode;\r\n\r\n return bcrypt;\r\n}));\r\n", "/*\r\n Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>\r\n Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>\r\n Copyright (c) 2013 Daniel Wirtz <dcode@dcode.io>\r\n\r\n Redistribution and use in source and binary forms, with or without\r\n modification, are permitted provided that the following conditions\r\n are met:\r\n 1. Redistributions of source code must retain the above copyright\r\n notice, this list of conditions and the following disclaimer.\r\n 2. Redistributions in binary form must reproduce the above copyright\r\n notice, this list of conditions and the following disclaimer in the\r\n documentation and/or other materials provided with the distribution.\r\n 3. The name of the author may not be used to endorse or promote products\r\n derived from this software without specific prior written permission.\r\n\r\n THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\r\n IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\r\n OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\n NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n\r\nmodule.exports = require(\"./dist/bcrypt.js\");\r\n", "#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport { FloomError } from \"@floom/shared\";\nimport { log } from \"./lib/output.js\";\n\nimport { loginCommand } from \"./commands/login.js\";\nimport { logoutCommand } from \"./commands/logout.js\";\nimport { whoamiCommand } from \"./commands/whoami.js\";\nimport { initCommand } from \"./commands/init.js\";\nimport { validateCommand } from \"./commands/validate.js\";\nimport { publishCommand } from \"./commands/publish.js\";\nimport { installCommand } from \"./commands/install.js\";\nimport { installedCommand } from \"./commands/installed.js\";\nimport { outdatedCommand } from \"./commands/outdated.js\";\nimport { updateCommand } from \"./commands/update.js\";\nimport { listCommand } from \"./commands/list.js\";\nimport { infoCommand } from \"./commands/info.js\";\nimport { shareCommand, unshareCommand } from \"./commands/share.js\";\nimport { libraryCreateCommand, libraryInviteCommand, libraryLeaveCommand, libraryListCommand } from \"./commands/library.js\";\nimport { defaultWorkspaceCommand, workspaceActivateCommand, workspaceActiveCommand, workspaceDeactivateCommand } from \"./commands/workspace-config.js\";\nimport { instructionPullCommand, instructionPushCommand } from \"./commands/instruction.js\";\nimport { pullCommand, statusCommand } from \"./commands/sync.js\";\nimport { pinCommand, unpinCommand } from \"./commands/pin.js\";\nimport { mcpCommand } from \"./commands/mcp.js\";\nimport { doctorCommand } from \"./commands/doctor.js\";\nimport { VERSION } from \"./version.js\";\n\nconst program = new Command();\nprogram\n .name(\"floom\")\n .description(\"Floom CLI \u2014 publish, install, sync, and share AI agent skills.\")\n .version(VERSION);\n\nprogram.command(\"login\").description(\"Log in via browser (device code).\")\n .addHelpText(\"after\", \"\\nExample:\\n $ floom login\")\n .action(loginCommand);\nprogram.command(\"logout\").description(\"Log out and revoke local token.\").action(logoutCommand);\nprogram.command(\"whoami\").description(\"Show the logged-in user.\").action(whoamiCommand);\n\nprogram.command(\"init\").description(\"Scaffold a new skill in the current directory.\").action(initCommand);\nprogram\n .command(\"validate\")\n .description(\"Validate the skill in the current directory.\")\n .option(\"--json\", \"Emit machine-readable JSON\")\n .action((opts) => validateCommand(opts));\n\nprogram\n .command(\"publish\")\n .description(\"Publish the skill in the current directory.\")\n .option(\"--dry-run\", \"Validate and pack locally without uploading.\")\n .option(\"--workspace <slug>\", \"Publish into a shared workspace slug (default: personal)\")\n .option(\"--library <slug>\", \"Legacy alias for --workspace\")\n .addHelpText(\"after\", \"\\nExamples:\\n $ floom publish\\n $ floom publish --workspace team-workspace\")\n .action((opts) => publishCommand(opts));\nprogram.command(\"push\").description(\"Alias for `publish`.\")\n .option(\"--dry-run\", \"Validate and pack locally without uploading.\")\n .option(\"--workspace <slug>\", \"Publish into a shared workspace slug\")\n .option(\"--library <slug>\", \"Legacy alias for --workspace\")\n .addHelpText(\"after\", \"\\nExample:\\n $ floom push --workspace team-workspace\")\n .action((opts) => publishCommand(opts));\n\nprogram\n .command(\"install <ref>\")\n .description(\"Install a skill (default: .agents/skills/<slug>/).\")\n .option(\"--for <target>\", \"Tool preset: claude | codex | cursor | gemini | opencode | kimi | all\")\n .option(\"--to <path>\", \"Explicit install directory\")\n .option(\"--global\", \"Install to user-level folder instead of project-local\")\n .option(\"--force\", \"Overwrite existing folder\")\n .addHelpText(\"after\", \"\\nExamples:\\n $ floom install @alice/research-brief\\n $ floom install @alice/research-brief --for codex\\n $ floom install @alice/research-brief --to .agents/skills\")\n .action((ref, opts) => installCommand(ref, opts));\n\nprogram.command(\"installed\").description(\"List installed skills in this project.\").option(\"--json\").action(installedCommand);\nprogram.command(\"outdated\").description(\"Show installed skills with newer versions available.\").action(outdatedCommand);\nprogram\n .command(\"update [ref]\")\n .description(\"Update installed skills to latest.\")\n .option(\"--force\", \"Overwrite local edits\")\n .action((ref, opts) => updateCommand(ref, opts));\n\nprogram\n .command(\"list\")\n .description(\"List remote skills.\")\n .option(\"--mine\", \"Only your own skills (default)\")\n .option(\"--workspace <slug>\", \"Filter by workspace slug\")\n .option(\"--library <slug>\", \"Legacy alias for --workspace\")\n .option(\"--folder <uuid>\", \"Filter by folder id\")\n .option(\"--flat\", \"Print one ref per line\")\n .option(\"--query <q>\", \"Filter by query\")\n .action(listCommand);\n\nprogram.command(\"info <ref>\").description(\"Show details for a remote skill.\").action(infoCommand);\n\nprogram\n .command(\"status\")\n .description(\"Show local vs remote Floom workspace state\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((opts) => statusCommand(opts));\n\nprogram\n .command(\"pull\")\n .description(\"Pull account/workspace instructions for active workspaces\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .option(\"--apply\", \"Append managed block when the target file has no Floom block\")\n .option(\"--force\", \"Write without the first-apply guard\")\n .action((opts) => pullCommand(opts));\n\nprogram\n .command(\"pin <ref>\")\n .description(\"Pin a workspace skill for local pull\")\n .option(\"--workspace <slug>\", \"Workspace slug\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .action((ref, opts) => pinCommand(ref, opts));\n\nprogram\n .command(\"unpin <ref>\")\n .description(\"Unpin a workspace skill for local pull\")\n .option(\"--workspace <slug>\", \"Workspace slug\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .action((ref, opts) => unpinCommand(ref, opts));\n\nprogram\n .command(\"share <ref> <email>\")\n .description(\"Invite someone to a skill by email.\")\n .option(\"--role <role>\", \"viewer (default) or editor\")\n .action((ref, email, opts) => shareCommand(ref, email, opts));\n\nprogram\n .command(\"unshare <ref> <email>\")\n .description(\"Revoke someone's access.\")\n .action((ref, email) => unshareCommand(ref, email));\n\nconst configCmd = program.command(\"config\").description(\"Manage local Floom configuration\");\nconfigCmd\n .command(\"default-workspace [slug]\")\n .description(\"Show or set the default workspace\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((slug, opts) => defaultWorkspaceCommand(slug, opts));\n\nfunction addWorkspaceCommands(cmd: Command) {\n cmd.command(\"list\").action(libraryListCommand);\n cmd.command(\"create <slug> <name>\").action((slug, name) => libraryCreateCommand(slug, name));\n cmd.command(\"invite <workspaceSlug> <email>\").option(\"--role <role>\", \"viewer|editor|admin\", \"viewer\").action((workspaceSlug, email, opts) => libraryInviteCommand(workspaceSlug, email, opts.role));\n cmd.command(\"leave <workspaceSlug>\").action((workspaceSlug) => libraryLeaveCommand(workspaceSlug));\n cmd.command(\"activate <workspaceSlug>\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((workspaceSlug, opts) => workspaceActivateCommand(workspaceSlug, opts));\n cmd.command(\"deactivate <workspaceSlug>\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((workspaceSlug, opts) => workspaceDeactivateCommand(workspaceSlug, opts));\n cmd.command(\"active\")\n .option(\"--target <target>\", \"claude | codex | cursor | kimi | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .action((opts) => workspaceActiveCommand(opts));\n}\n\naddWorkspaceCommands(program.command(\"workspace\").description(\"Manage workspaces\"));\naddWorkspaceCommands(program.command(\"library\").description(\"Manage workspaces (legacy alias)\"));\n\nconst instructionCmd = program.command(\"instruction\").description(\"Manage account and workspace instructions\");\ninstructionCmd\n .command(\"pull\")\n .description(\"Pull an account or workspace instruction into a managed local block\")\n .option(\"--account\", \"Pull account instruction\")\n .option(\"--workspace <slug>\", \"Pull workspace instruction\")\n .option(\"--target <target>\", \"default | claude | codex | cursor | opencode\", \"codex\")\n .option(\"--scope <scope>\", \"global | local\", \"local\")\n .option(\"--path <path>\", \"Instruction file path override\")\n .option(\"--apply\", \"Append managed block when the target file has no Floom block\")\n .option(\"--force\", \"Write without the first-apply guard\")\n .action((opts) => instructionPullCommand(opts));\ninstructionCmd\n .command(\"push <file>\")\n .description(\"Publish an account or workspace instruction from a markdown file\")\n .option(\"--account\", \"Publish account instruction\")\n .option(\"--workspace <slug>\", \"Publish workspace instruction\")\n .option(\"--target <target>\", \"default | claude | codex | cursor | opencode\", \"default\")\n .option(\"--changelog <text>\", \"Version changelog\")\n .action((file, opts) => instructionPushCommand(file, opts));\n\nprogram\n .command(\"doctor\")\n .description(\"Check local Floom CLI, auth, and fresh-agent MCP installability.\")\n .option(\"--fresh-agent\", \"Run MCP checks with a clean HOME and temp skills directory\")\n .option(\"--ref <ref>\", \"Skill ref to install during --fresh-agent, e.g. @depontefede/pdf\")\n .option(\"--target <target>\", \"Install target for --fresh-agent\", \"codex\")\n .option(\"--query <query>\", \"Search query for --fresh-agent\", \"pdf\")\n .option(\"--json\", \"Emit machine-readable JSON\")\n .action((opts) => doctorCommand(opts));\nprogram.command(\"mcp\").description(\"Run local MCP server over stdio.\").action(mcpCommand);\n\n// Global error handler\nasync function main(): Promise<void> {\n try {\n await program.parseAsync(process.argv);\n } catch (e) {\n if (e instanceof FloomError) {\n log.err(e.message);\n if (e.code === \"AUTH_REQUIRED\" || e.code === \"TOKEN_EXPIRED\") {\n log.info(\"Run: floom login\");\n }\n process.exit(1);\n }\n log.err((e as Error).message ?? \"Unknown error\");\n if (process.env.FLOOM_DEBUG) console.error(e);\n process.exit(1);\n }\n}\nmain();\n", "import { z } from \"zod\";\n\n// SPEC \u00A78.5 \u2014 Floom skill manifest schema (skill.json)\n\nconst slugSchema = z\n .string()\n .regex(\n /^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$/,\n \"name must be lowercase letters/digits/hyphens, 3-64 chars, start+end alphanumeric\"\n );\n\nconst semverSchema = z\n .string()\n .regex(\n /^[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9.-]+)?$/,\n \"version must be semver (e.g. 0.1.0 or 1.0.0-beta.1)\"\n );\n\nexport const skillTargetSchema = z.enum([\n \"generic\",\n \"claude\",\n \"codex\",\n \"cursor\",\n \"gemini\",\n \"opencode\",\n \"kimi\",\n \"custom\",\n]);\n\nexport const authorSchema = z.object({\n name: z.string().min(1),\n email: z.string().email().optional(),\n});\n\nexport const declaredScriptSchema = z.object({\n path: z.string(),\n description: z.string().max(280),\n});\n\nexport const manifestSchema = z\n .object({\n schema_version: z.literal(\"0.1\"),\n name: slugSchema,\n title: z.string().min(1).max(120),\n description: z.string().min(1).max(500),\n version: semverSchema,\n entrypoint: z.string().default(\"SKILL.md\"),\n targets: z.array(skillTargetSchema).default([\"generic\"]),\n tags: z.array(z.string().min(1).max(32)).max(10).optional(),\n authors: z.array(authorSchema).optional(),\n license: z.string().optional(),\n homepage: z.string().url().optional(),\n repository: z.string().url().optional(),\n source_url: z.string().url().optional(),\n declared_scripts: z.array(declaredScriptSchema).optional(),\n min_floom_version: semverSchema.optional(),\n })\n .strict();\n\nexport type SkillManifest = z.infer<typeof manifestSchema>;\n\nexport function parseManifest(raw: unknown): { ok: true; manifest: SkillManifest } | { ok: false; error: string } {\n const result = manifestSchema.safeParse(raw);\n if (result.success) return { ok: true, manifest: result.data };\n const issue = result.error.issues[0];\n return {\n ok: false,\n error: `${issue.path.join(\".\") || \"manifest\"}: ${issue.message}`,\n };\n}\n\n// CLI helper: read skill.json from a folder and parse.\nexport async function readManifest(skillDir: string): Promise<{ ok: true; manifest: SkillManifest } | { ok: false; error: string }> {\n const { readFile } = await import(\"node:fs/promises\");\n const { join } = await import(\"node:path\");\n try {\n const raw = await readFile(join(skillDir, \"skill.json\"), \"utf8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (e) {\n return { ok: false, error: `skill.json is not valid JSON: ${(e as Error).message}` };\n }\n return parseManifest(parsed);\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code === \"ENOENT\") return { ok: false, error: \"skill.json not found\" };\n return { ok: false, error: `failed to read skill.json: ${err.message}` };\n }\n}\n", "// SPEC \u00A77.3: lowercase letters/digits/hyphens, start+end alphanumeric, 3-64 chars\nconst SLUG_RE = /^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$/;\n\nexport function isValidSlug(input: string): boolean {\n return typeof input === \"string\" && SLUG_RE.test(input);\n}\n\nexport function slugErrorMessage(input: string): string | null {\n if (typeof input !== \"string\") return \"must be a string\";\n if (input.length < 3) return \"must be at least 3 characters\";\n if (input.length > 64) return \"must be at most 64 characters\";\n if (!/^[a-z0-9]/.test(input)) return \"must start with a lowercase letter or digit\";\n if (!/[a-z0-9]$/.test(input)) return \"must end with a lowercase letter or digit\";\n if (!/^[a-z0-9-]+$/.test(input)) return \"may only contain lowercase letters, digits, and hyphens\";\n return null;\n}\n\n// Profile handle: 3-32 chars, same rules\nconst HANDLE_RE = /^[a-z0-9][a-z0-9-]{1,30}[a-z0-9]$/;\nexport function isValidHandle(input: string): boolean {\n return typeof input === \"string\" && HANDLE_RE.test(input);\n}\n\n// Skill ref like @owner/slug, library-slug/slug, optional @version suffix\nconst REF_RE = /^@([a-z0-9][a-z0-9-]{1,30}[a-z0-9])\\/([a-z0-9][a-z0-9-]{1,62}[a-z0-9])(?:@([^@/]+))?$/;\nconst LIB_REF_RE = /^([a-z0-9][a-z0-9-]{1,62}[a-z0-9])\\/([a-z0-9][a-z0-9-]{1,62}[a-z0-9])(?:@([^@/]+))?$/;\nexport type SkillRef = { owner: string; slug: string; version?: string; isLibraryRef?: boolean };\n\nexport function parseSkillRef(input: string): SkillRef | null {\n const m = REF_RE.exec(input);\n if (m) {\n const [, owner, slug, version] = m;\n return version ? { owner, slug, version } : { owner, slug };\n }\n const m2 = LIB_REF_RE.exec(input);\n if (!m2) return null;\n const [, owner, slug, version] = m2;\n return version ? { owner, slug, version, isLibraryRef: true } : { owner, slug, isLibraryRef: true };\n}\n\nexport function formatSkillRef(ref: SkillRef): string {\n return ref.version ? `@${ref.owner}/${ref.slug}@${ref.version}` : `@${ref.owner}/${ref.slug}`;\n}\n\nconst SEMVER_RE = /^[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9.-]+)?$/;\nexport function isValidSemver(input: string): boolean {\n return typeof input === \"string\" && SEMVER_RE.test(input);\n}\n", "// SPEC \u00A711.15 \u2014 canonical error codes for CLI and API.\nexport const ERROR_CODES = {\n AUTH_REQUIRED: \"AUTH_REQUIRED\",\n TOKEN_EXPIRED: \"TOKEN_EXPIRED\",\n TOKEN_INVALID: \"TOKEN_INVALID\",\n SKILL_NOT_FOUND: \"SKILL_NOT_FOUND\",\n SKILL_ACCESS_DENIED: \"SKILL_ACCESS_DENIED\",\n VERSION_NOT_FOUND: \"VERSION_NOT_FOUND\",\n VERSION_ALREADY_EXISTS: \"VERSION_ALREADY_EXISTS\",\n INVALID_MANIFEST: \"INVALID_MANIFEST\",\n FILE_TOO_LARGE: \"FILE_TOO_LARGE\",\n BUNDLE_TOO_LARGE: \"BUNDLE_TOO_LARGE\",\n UPLOAD_FAILED: \"UPLOAD_FAILED\",\n DOWNLOAD_FAILED: \"DOWNLOAD_FAILED\",\n CLI_VERSION_TOO_OLD: \"CLI_VERSION_TOO_OLD\",\n CONFLICT_LOCAL_EDITS: \"CONFLICT_LOCAL_EDITS\",\n CONFLICT_UNTRACKED: \"CONFLICT_UNTRACKED\",\n LINK_INVALID: \"LINK_INVALID\",\n LINK_EXPIRED: \"LINK_EXPIRED\",\n LINK_REVOKED: \"LINK_REVOKED\",\n RATE_LIMITED: \"RATE_LIMITED\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\nexport interface FloomApiError {\n code: ErrorCode;\n message: string;\n request_id?: string;\n}\n\nexport class FloomError extends Error {\n code: ErrorCode;\n details?: Record<string, unknown>;\n constructor(code: ErrorCode, message: string, details?: Record<string, unknown>) {\n super(message);\n this.name = \"FloomError\";\n this.code = code;\n this.details = details;\n }\n}\n", "/**\n * SKILL.md frontmatter parser.\n * The open Agent Skills format requires the file to start with --- and have at minimum:\n * name: string\n * description: string\n * Other fields (allowed-tools, model, etc.) are tool-specific and we don't try to read them.\n * We don't pull in a full YAML lib \u2014 keep it dumb and predictable.\n */\nexport type SkillFrontmatter = {\n name?: string;\n description?: string;\n // Free-form passthrough: any other top-level YAML scalar keys are kept as strings\n extras: Record<string, string>;\n};\n\nexport function parseSkillFrontmatter(input: string): { meta: SkillFrontmatter; body: string } {\n // Strip BOM if present\n const trimmed = input.replace(/^\\uFEFF/, \"\");\n if (!trimmed.startsWith(\"---\")) {\n return { meta: { extras: {} }, body: input };\n }\n // Frontmatter must be the very first thing (no blank line, no H1 before it).\n const afterOpen = trimmed.slice(3);\n // Find closing --- on its own line\n const closeMatch = afterOpen.match(/\\r?\\n---\\s*(?:\\r?\\n|$)/);\n if (!closeMatch || closeMatch.index === undefined) {\n return { meta: { extras: {} }, body: input };\n }\n const headerBlock = afterOpen.slice(0, closeMatch.index);\n const body = afterOpen.slice(closeMatch.index + closeMatch[0].length);\n\n const meta: SkillFrontmatter = { extras: {} };\n for (const rawLine of headerBlock.split(/\\r?\\n/)) {\n const line = rawLine.trim();\n if (!line || line.startsWith(\"#\")) continue;\n const colon = line.indexOf(\":\");\n if (colon === -1) continue;\n const key = line.slice(0, colon).trim().toLowerCase();\n let value = line.slice(colon + 1).trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n if (key === \"name\") meta.name = value;\n else if (key === \"description\") meta.description = value;\n else meta.extras[key] = value;\n }\n\n return { meta, body };\n}\n\nexport function validateSkillFrontmatter(meta: SkillFrontmatter): string | null {\n if (!meta.name) return \"SKILL.md frontmatter missing required 'name' field\";\n if (!meta.description) return \"SKILL.md frontmatter missing required 'description' field\";\n if (meta.description.length > 500) return \"SKILL.md description must be at most 500 characters\";\n return null;\n}\n", "import { randomBytes, scrypt as scryptCb, timingSafeEqual, createHash } from \"node:crypto\";\nimport bcrypt from \"bcryptjs\";\nimport { promisify } from \"node:util\";\n\nconst bcryptCompat = bcrypt as typeof bcrypt & {\n hash(data: string, saltOrRounds: string | number): Promise<string>;\n};\n\nconst scrypt = promisify(scryptCb) as (\n password: string | Buffer,\n salt: string | Buffer,\n keylen: number,\n) => Promise<Buffer>;\n\n// SPEC \u00A713.1 \u2014 token format: flm_v1_<public_id>_<secret>\n// public_id: 16 chars base64url (lookup key, stored plain)\n// secret: 32 chars base64url (scrypt-hashed server-side with pepper)\nconst KEY_VERSION = \"v1\";\nconst PUBLIC_ID_BYTES = 10;\nconst SECRET_BYTES = 24;\nconst SCRYPT_KEYLEN = 64;\nconst SALT_BYTES = 16;\n\nexport type ParsedToken = {\n version: string;\n publicId: string;\n secret: string;\n};\n\nconst TOKEN_RE = /^flm_(v1)_([A-Za-z0-9_-]{14})_([A-Za-z0-9_-]{32})$/;\n\nexport function parseToken(raw: string): ParsedToken | null {\n const m = TOKEN_RE.exec(raw);\n if (!m) return null;\n return { version: m[1], publicId: m[2], secret: m[3] };\n}\n\nexport function isFloomToken(raw: string): boolean {\n return parseToken(raw) !== null;\n}\n\nexport type GeneratedToken = {\n raw: string;\n publicId: string;\n secretHash: string; // \"scrypt$<saltHex>$<keyHex>\"\n prefix: string;\n};\n\nfunction urlSafe(buf: Buffer): string {\n return buf.toString(\"base64url\");\n}\n\nexport async function generateToken(opts: { pepper: string }): Promise<GeneratedToken> {\n const publicId = urlSafe(randomBytes(PUBLIC_ID_BYTES));\n const secret = urlSafe(randomBytes(SECRET_BYTES));\n const raw = `flm_${KEY_VERSION}_${publicId}_${secret}`;\n const secretHash = await bcryptCompat.hash(secret + opts.pepper, 10);\n return { raw, publicId, secretHash, prefix: raw.slice(0, 12) };\n}\n\nexport async function verifyTokenSecret(\n secret: string,\n hash: string,\n pepper: string,\n): Promise<boolean> {\n if (hash.startsWith(\"$2\")) {\n try {\n return await bcrypt.compare(secret + pepper, hash);\n } catch {\n return false;\n }\n }\n const parts = hash.split(\"$\");\n if (parts.length !== 3 || parts[0] !== \"scrypt\") return false;\n try {\n const salt = Buffer.from(parts[1], \"hex\");\n const expected = Buffer.from(parts[2], \"hex\");\n const derived = await scrypt(secret + pepper, salt, expected.length);\n if (derived.length !== expected.length) return false;\n return timingSafeEqual(derived, expected);\n } catch {\n return false;\n }\n}\n\n// Share-link tokens \u2014 sha256 is sufficient (token is the credential; salt isn't needed\n// because tokens are random 24-byte values, not user-chosen).\nconst SHARE_LINK_TOKEN_BYTES = 24;\n\nexport type GeneratedShareLink = {\n raw: string;\n tokenHash: string;\n tokenPrefix: string;\n};\n\nexport function generateShareLinkToken(): GeneratedShareLink {\n const raw = urlSafe(randomBytes(SHARE_LINK_TOKEN_BYTES));\n const tokenHash = createHash(\"sha256\").update(raw).digest(\"hex\");\n return { raw, tokenHash, tokenPrefix: raw.slice(0, 4) };\n}\n\nexport function hashShareLinkToken(raw: string): string {\n return createHash(\"sha256\").update(raw).digest(\"hex\");\n}\n", "import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\n// SPEC \u00A711.9: --for presets. Drives default install paths per target.\n// `generic` and `all` use the vendor-neutral interop path .agents/skills/\n// which Codex, Gemini, OpenCode, and Kimi all read natively, and Cursor auto-imports.\n\nexport type InstallTarget =\n | \"generic\"\n | \"all\"\n | \"claude\"\n | \"codex\"\n | \"cursor\"\n | \"gemini\"\n | \"opencode\"\n | \"kimi\";\n\nexport const INSTALL_TARGETS: readonly InstallTarget[] = [\n \"generic\",\n \"all\",\n \"claude\",\n \"codex\",\n \"cursor\",\n \"gemini\",\n \"opencode\",\n \"kimi\",\n] as const;\n\nexport function isInstallTarget(value: string | undefined): value is InstallTarget {\n return !!value && (INSTALL_TARGETS as readonly string[]).includes(value);\n}\n\nexport interface ResolvedTarget {\n target: InstallTarget;\n dir: string; // absolute or project-relative directory where <slug>/ goes\n origin: \"env\" | \"preset\" | \"explicit\";\n compatibleAgents: readonly string[];\n}\n\n// Compatibility metadata per target (informational; SPEC \u00A71.2 table)\nconst COMPATIBLE_AGENTS: Record<InstallTarget, readonly string[]> = {\n generic: [\"Claude Code\", \"Codex CLI\", \"Cursor\", \"Gemini CLI\", \"OpenCode\", \"Kimi CLI\"],\n all: [\"Claude Code\", \"Codex CLI\", \"Cursor\", \"Gemini CLI\", \"OpenCode\", \"Kimi CLI\"],\n claude: [\"Claude Code\", \"OpenCode\", \"Kimi CLI\"],\n codex: [\"Codex CLI\", \"Gemini CLI (via interop alias)\", \"OpenCode\", \"Kimi CLI\", \"Cursor (auto-import)\"],\n cursor: [\"Cursor (auto-import)\", \"Codex CLI\", \"OpenCode\", \"Kimi CLI\"],\n gemini: [\"Gemini CLI\"],\n opencode: [\"OpenCode\", \"Claude Code\", \"Codex CLI\", \"Kimi CLI\"],\n kimi: [\"Kimi CLI\", \"Claude Code\", \"OpenCode\"],\n};\n\nconst TARGET_ENV_DIRS: Record<InstallTarget, readonly string[]> = {\n generic: [\"FLOOM_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n all: [\"FLOOM_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n claude: [\"FLOOM_SKILLS_DIR\", \"CLAUDE_SKILLS_DIR\"],\n codex: [\"FLOOM_SKILLS_DIR\", \"CODEX_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n cursor: [\"FLOOM_SKILLS_DIR\", \"CURSOR_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n gemini: [\"FLOOM_SKILLS_DIR\", \"GEMINI_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n opencode: [\"FLOOM_SKILLS_DIR\", \"OPENCODE_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n kimi: [\"FLOOM_SKILLS_DIR\", \"KIMI_SKILLS_DIR\", \"AGENTS_SKILLS_DIR\"],\n};\n\nfunction envDirForTarget(target: InstallTarget): string | null {\n for (const key of TARGET_ENV_DIRS[target]) {\n const value = process.env[key]?.trim();\n if (value) return value;\n }\n return null;\n}\n\nfunction presetDir(target: InstallTarget, opts: { global?: boolean; cwd?: string }): string {\n const cwd = opts.cwd ?? process.cwd();\n const root = opts.global ? homedir() : cwd;\n switch (target) {\n case \"claude\":\n return join(root, \".claude\", \"skills\");\n case \"gemini\":\n return join(root, \".gemini\", \"skills\");\n case \"kimi\":\n return join(root, \".kimi\", \"skills\");\n case \"codex\":\n case \"cursor\":\n case \"generic\":\n case \"all\":\n case \"opencode\":\n default:\n return join(root, \".agents\", \"skills\");\n }\n}\n\nexport function resolveInstallDir(args: {\n target?: InstallTarget;\n to?: string;\n global?: boolean;\n cwd?: string;\n}): ResolvedTarget {\n const target = args.target ?? \"generic\";\n\n // Explicit --to overrides everything.\n if (args.to) {\n return {\n target,\n dir: args.to,\n origin: \"explicit\",\n compatibleAgents: COMPATIBLE_AGENTS[target],\n };\n }\n\n const targetEnvDir = envDirForTarget(target);\n if (targetEnvDir) {\n return {\n target,\n dir: targetEnvDir,\n origin: \"env\",\n compatibleAgents: COMPATIBLE_AGENTS[target],\n };\n }\n\n return {\n target,\n dir: presetDir(target, { global: args.global, cwd: args.cwd }),\n origin: \"preset\",\n compatibleAgents: COMPATIBLE_AGENTS[target],\n };\n}\n\nexport function describeTargetForCli(t: ResolvedTarget): string {\n return `${t.target} \u2192 ${t.dir} (compatible with: ${t.compatibleAgents.join(\", \")})`;\n}\n", "import { readFile } from \"node:fs/promises\";\n\nexport type SkillSecurityFinding = {\n label: string;\n path?: string;\n line: number;\n preview: string;\n severity: \"high\" | \"medium\";\n category: \"secret\" | \"prompt_injection\" | \"data_exfiltration\" | \"personal_data\" | \"unsafe_file\";\n};\n\ntype SecurityPattern = {\n label: string;\n category: SkillSecurityFinding[\"category\"];\n severity?: SkillSecurityFinding[\"severity\"];\n regex: RegExp;\n};\n\nconst PATTERNS: SecurityPattern[] = [\n { label: \"OpenAI API key\", category: \"secret\", regex: /\\bsk-proj-[A-Za-z0-9_-]{20,}\\b/g },\n { label: \"OpenAI API key\", category: \"secret\", regex: /\\bsk-[A-Za-z0-9]{32,}\\b/g },\n { label: \"Anthropic API key\", category: \"secret\", regex: /\\bsk-ant-[A-Za-z0-9_-]{20,}\\b/g },\n { label: \"Google API key\", category: \"secret\", regex: /\\bAIza[0-9A-Za-z_-]{25,}\\b/g },\n { label: \"GitHub token\", category: \"secret\", regex: /\\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{30,}\\b/g },\n { label: \"GitHub token\", category: \"secret\", regex: /\\bgithub_pat_[A-Za-z0-9_]{40,}\\b/g },\n { label: \"Supabase access token\", category: \"secret\", regex: /\\bsbp_[A-Za-z0-9]{30,}\\b/g },\n { label: \"Stripe secret key\", category: \"secret\", regex: /\\bsk_(?:live|test)_[A-Za-z0-9]{20,}\\b/g },\n { label: \"Slack token\", category: \"secret\", regex: /\\bxox[baprs]-[A-Za-z0-9-]{20,}\\b/g },\n { label: \"AWS access key\", category: \"secret\", regex: /\\b(?:AKIA|ASIA)[A-Z0-9]{16}\\b/g },\n { label: \"Floom API token\", category: \"secret\", regex: /\\bflm_v1_[A-Za-z0-9_-]{14}_[A-Za-z0-9_-]{32}\\b/g },\n { label: \"Private key\", category: \"secret\", regex: /-----BEGIN (?:RSA |EC |OPENSSH |)PRIVATE KEY-----/g },\n { label: \"Prompt injection instruction\", category: \"prompt_injection\", regex: /\\bignore (?:all )?(?:previous|prior|above|earlier) instructions\\b/gi },\n { label: \"Prompt injection instruction\", category: \"prompt_injection\", regex: /\\bdisregard (?:all )?(?:previous|prior|above|earlier) instructions\\b/gi },\n { label: \"Prompt injection instruction\", category: \"prompt_injection\", regex: /\\bforget (?:all )?(?:previous|prior|above|earlier) instructions\\b/gi },\n { label: \"Prompt injection instruction\", category: \"prompt_injection\", regex: /\\boverride (?:the )?(?:system|developer|safety) instructions\\b/gi },\n { label: \"System prompt extraction\", category: \"prompt_injection\", regex: /\\b(?:reveal|print|show|dump|expose|leak) (?:the )?(?:system prompt|developer message|hidden instructions)\\b/gi },\n { label: \"Data exfiltration instruction\", category: \"data_exfiltration\", regex: /\\b(?:send|post|upload|exfiltrate|copy) (?:[^.\\n]{0,80})\\b(?:api keys?|tokens?|secrets?|environment variables|\\.env|credentials)\\b(?:[^.\\n]{0,120})\\b(?:to|into) https?:\\/\\//gi },\n { label: \"Data exfiltration instruction\", category: \"data_exfiltration\", regex: /\\b(?:curl|wget|fetch)\\b[^\\n]{0,160}\\b(?:api keys?|tokens?|secrets?|environment variables|\\.env|credentials)\\b/gi },\n { label: \"Credential harvesting instruction\", category: \"data_exfiltration\", regex: /\\b(?:collect|harvest|steal|extract) (?:[^.\\n]{0,80})\\b(?:api keys?|tokens?|secrets?|environment variables|\\.env|credentials)\\b/gi },\n { label: \"Possible personal email address\", category: \"personal_data\", severity: \"medium\", regex: /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/gi },\n { label: \"Possible phone number\", category: \"personal_data\", severity: \"medium\", regex: /\\b(?:\\+?\\d[\\s().-]?){9,}\\d\\b/g },\n { label: \"Dangerous shell command\", category: \"data_exfiltration\", regex: /\\bcurl\\b[^\\n|]{0,120}\\|\\s*(?:sh|bash)\\b/gi },\n { label: \"Dangerous shell command\", category: \"data_exfiltration\", regex: /\\brm\\s+-rf\\s+(?:\\/|\\$HOME|~)\\b/g },\n];\n\nconst GENERIC_ASSIGNMENT_RE = /\\b(?:api[_-]?key|secret|access[_-]?token|auth[_-]?token|bearer[_-]?token)\\b\\s*[:=]\\s*[\"']?([A-Za-z0-9_./+=-]{24,})[\"']?/gi;\nconst PROVIDER_LIKE_ASSIGNMENT_RE = /\\b(?:api[_-]?key|secret|access[_-]?token|auth[_-]?token|bearer[_-]?token)\\b\\s*[:=]\\s*[\"']?((?:sk|pk|rk)-[A-Za-z0-9_-]{8,}|sbp_[A-Za-z0-9]{12,}|xox[baprs]-[A-Za-z0-9-]{12,})[\"']?/gi;\nconst PLACEHOLDER_RE = /(?:^|[_./+=-])(?:your|example|sample|placeholder|replace|changeme|todo|xxx|test|demo|dummy|fake|mock|staging|dev|local|redacted)(?:$|[_./+=-])/i;\nconst EXAMPLE_EMAIL_RE = /@(example\\.(?:com|org|net)|example|test|localhost)$/i;\nconst TEXT_FILE_RE = /\\.(?:md|mdx|txt|json|jsonc|ya?ml|toml|ini|env|example|ts|tsx|js|jsx|mjs|cjs|py|rb|go|rs|java|kt|sh|bash|zsh|fish|ps1|sql|html|css|csv)$/i;\nconst FORBIDDEN_FILE_PATTERNS: Array<{ regex: RegExp; severity: SkillSecurityFinding[\"severity\"]; label: string }> = [\n { label: \"Environment file\", severity: \"high\", regex: /(^|\\/)\\.env(?:$|\\.local$|\\.production$|\\.development$)/ },\n { label: \"Private key file\", severity: \"high\", regex: /(^|\\/)(?:id_rsa|id_ed25519|.*\\.(?:pem|key|p12|pfx))$/i },\n { label: \"npm credentials file\", severity: \"high\", regex: /(^|\\/)\\.npmrc$/ },\n { label: \"Credentials file\", severity: \"high\", regex: /(^|\\/)(?:credentials|service-account|service_account)\\.json$/i },\n { label: \"Example environment file\", severity: \"medium\", regex: /(^|\\/)\\.env\\.example$/ },\n];\n\nfunction redact(value: string): string {\n if (value.length <= 12) return \"[redacted]\";\n return `${value.slice(0, 4)}...${value.slice(-4)}`;\n}\n\nfunction lineNumberAt(input: string, index: number): number {\n let line = 1;\n for (let i = 0; i < index; i++) {\n if (input.charCodeAt(i) === 10) line++;\n }\n return line;\n}\n\nfunction isProbablyText(buf: Buffer, path: string): boolean {\n if (TEXT_FILE_RE.test(path)) return true;\n if (buf.includes(0)) return false;\n const sample = buf.subarray(0, Math.min(buf.length, 4096));\n let suspicious = 0;\n for (const byte of sample) {\n if (byte < 9 || (byte > 13 && byte < 32)) suspicious++;\n }\n return sample.length === 0 || suspicious / sample.length < 0.02;\n}\n\nexport function scanSkillText(input: string, opts: { path?: string } = {}): SkillSecurityFinding[] {\n const findings: SkillSecurityFinding[] = [];\n const seen = new Set<string>();\n const push = (label: string, category: SkillSecurityFinding[\"category\"], severity: SkillSecurityFinding[\"severity\"], index: number, value: string) => {\n const key = `${opts.path ?? \"\"}:${label}:${category}:${index}:${value}`;\n if (seen.has(key)) return;\n seen.add(key);\n findings.push({ label, category, path: opts.path, severity, line: lineNumberAt(input, index), preview: redact(value.replace(/\\s+/g, \" \").trim()) });\n };\n\n for (const pattern of PATTERNS) {\n pattern.regex.lastIndex = 0;\n for (const match of input.matchAll(pattern.regex)) {\n const value = match[0] ?? \"\";\n if (pattern.category === \"personal_data\" && EXAMPLE_EMAIL_RE.test(value)) continue;\n push(pattern.label, pattern.category, pattern.severity ?? \"high\", match.index ?? 0, value);\n }\n }\n\n GENERIC_ASSIGNMENT_RE.lastIndex = 0;\n for (const match of input.matchAll(GENERIC_ASSIGNMENT_RE)) {\n const value = match[1] ?? \"\";\n if (!value || PLACEHOLDER_RE.test(value)) continue;\n push(\"Possible secret assignment\", \"secret\", \"high\", match.index ?? 0, value);\n }\n\n PROVIDER_LIKE_ASSIGNMENT_RE.lastIndex = 0;\n for (const match of input.matchAll(PROVIDER_LIKE_ASSIGNMENT_RE)) {\n const value = match[1] ?? \"\";\n if (!value) continue;\n push(\"Provider-like secret assignment\", \"secret\", \"high\", match.index ?? 0, value);\n }\n\n return findings.sort((a, b) => (a.path ?? \"\").localeCompare(b.path ?? \"\") || a.line - b.line || a.label.localeCompare(b.label));\n}\n\nexport function scanSkillMarkdown(input: string): SkillSecurityFinding[] {\n return scanSkillText(input);\n}\n\nexport function isBlockingSecurityFinding(finding: SkillSecurityFinding): boolean {\n return finding.severity === \"high\" && (\n finding.category === \"secret\" ||\n finding.category === \"data_exfiltration\" ||\n finding.category === \"unsafe_file\"\n );\n}\n\nexport async function scanSkillBundleEntries(entries: Array<{ relPath: string; data: Buffer }>): Promise<SkillSecurityFinding[]> {\n const findings: SkillSecurityFinding[] = [];\n for (const entry of entries) {\n for (const rule of FORBIDDEN_FILE_PATTERNS) {\n if (rule.regex.test(entry.relPath)) {\n findings.push({ label: rule.label, path: entry.relPath, line: 1, preview: entry.relPath, severity: rule.severity, category: \"unsafe_file\" });\n }\n }\n if (!isProbablyText(entry.data, entry.relPath)) continue;\n findings.push(...scanSkillText(entry.data.toString(\"utf8\"), { path: entry.relPath }));\n }\n return findings.sort((a, b) => (a.path ?? \"\").localeCompare(b.path ?? \"\") || a.line - b.line || a.label.localeCompare(b.label));\n}\n\nexport async function scanSkillBundleFiles(files: Array<{ relPath: string; absPath: string; size: number }>): Promise<SkillSecurityFinding[]> {\n const entries: Array<{ relPath: string; data: Buffer }> = [];\n for (const file of files) {\n const buf = await readFile(file.absPath);\n entries.push({ relPath: file.relPath, data: buf });\n }\n return scanSkillBundleEntries(entries);\n}\n", "import { readFile, readdir, stat, lstat, mkdir } from \"node:fs/promises\";\nimport { join, relative, sep, posix } from \"node:path\";\nimport { createHash } from \"node:crypto\";\n\n// SPEC \u00A78.7 \u2014 limits\nexport const LIMITS = {\n maxBundleBytes: 10 * 1024 * 1024, // 10 MB compressed\n maxUncompressedBytes: 50 * 1024 * 1024,\n maxFiles: 100,\n maxFileBytes: 2 * 1024 * 1024, // 2 MB per file\n maxPathLength: 200,\n} as const;\n\nconst DEFAULT_IGNORE = [\n \".git\",\n \"node_modules\",\n \"dist\",\n \"build\",\n \".next\",\n \".cache\",\n \".DS_Store\",\n \".env\",\n \".env.local\",\n \".env.development\",\n \".env.production\",\n \"*.pem\",\n \"*.key\",\n \"*.p12\",\n \"*.sqlite\",\n \"*.db\",\n];\n\nexport interface SkillFileEntry {\n relPath: string;\n absPath: string;\n size: number;\n sha256: string;\n}\n\nexport interface CollectedBundle {\n rootDir: string;\n files: SkillFileEntry[];\n totalUncompressedBytes: number;\n hasScripts: boolean;\n}\n\nfunction matchesGlob(name: string, pat: string): boolean {\n if (pat.includes(\"*\")) {\n const re = new RegExp(\"^\" + pat.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\*/g, \".*\") + \"$\");\n return re.test(name);\n }\n return name === pat;\n}\n\nfunction isIgnored(relPath: string, patterns: string[]): boolean {\n const parts = relPath.split(posix.sep);\n for (const pat of patterns) {\n const cleanPat = pat.replace(/^\\/|\\/$/g, \"\");\n if (parts.some((p) => matchesGlob(p, cleanPat))) return true;\n }\n return false;\n}\n\nasync function loadFloomIgnore(dir: string): Promise<string[]> {\n try {\n const raw = await readFile(join(dir, \".floomignore\"), \"utf8\");\n return raw.split(/\\r?\\n/).map((l) => l.trim()).filter((l) => l && !l.startsWith(\"#\"));\n } catch {\n return [];\n }\n}\n\nasync function walk(rootDir: string, ignore: string[], acc: SkillFileEntry[], current: string): Promise<void> {\n const entries = await readdir(current, { withFileTypes: true });\n for (const entry of entries) {\n const abs = join(current, entry.name);\n const rel = relative(rootDir, abs).split(sep).join(posix.sep);\n if (entry.isSymbolicLink()) {\n throw new Error(`Symlinks are not allowed: ${rel}`);\n }\n if (isIgnored(rel, ignore)) continue;\n if (entry.isDirectory()) {\n await walk(rootDir, ignore, acc, abs);\n continue;\n }\n if (!entry.isFile()) continue;\n const ls = await lstat(abs);\n if (ls.isSymbolicLink()) throw new Error(`Symlinks are not allowed: ${rel}`);\n if (rel.length > LIMITS.maxPathLength) {\n throw new Error(`Path too long (>${LIMITS.maxPathLength} chars): ${rel}`);\n }\n if (rel.includes(\"..\")) {\n throw new Error(`Path traversal detected: ${rel}`);\n }\n const buf = await readFile(abs);\n if (buf.length > LIMITS.maxFileBytes) {\n throw new Error(`File too large (${buf.length} > ${LIMITS.maxFileBytes}): ${rel}`);\n }\n const sha256 = createHash(\"sha256\").update(buf).digest(\"hex\");\n acc.push({ relPath: rel, absPath: abs, size: buf.length, sha256 });\n }\n}\n\nexport async function collectBundle(rootDir: string): Promise<CollectedBundle> {\n const st = await stat(rootDir);\n if (!st.isDirectory()) throw new Error(`Not a directory: ${rootDir}`);\n const ignore = [...DEFAULT_IGNORE, ...(await loadFloomIgnore(rootDir))];\n const files: SkillFileEntry[] = [];\n await walk(rootDir, ignore, files, rootDir);\n files.sort((a, b) => a.relPath.localeCompare(b.relPath));\n\n if (files.length === 0) throw new Error(\"No files to bundle (after applying ignores)\");\n if (files.length > LIMITS.maxFiles) {\n throw new Error(`Too many files (${files.length} > ${LIMITS.maxFiles})`);\n }\n const total = files.reduce((n, f) => n + f.size, 0);\n if (total > LIMITS.maxUncompressedBytes) {\n throw new Error(`Bundle too large uncompressed (${total} > ${LIMITS.maxUncompressedBytes})`);\n }\n const hasScripts = files.some((f) => f.relPath.startsWith(\"scripts/\"));\n return { rootDir, files, totalUncompressedBytes: total, hasScripts };\n}\n\nexport interface PackResult {\n bytes: Buffer;\n sha256: string;\n}\n\nexport async function packBundle(bundle: CollectedBundle): Promise<PackResult> {\n const tar = await import(\"tar\");\n const stream = (tar as any).create(\n {\n gzip: { level: 9 },\n cwd: bundle.rootDir,\n portable: true,\n noMtime: true,\n },\n bundle.files.map((f) => f.relPath),\n );\n\n const chunks: Buffer[] = [];\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n chunks.push(Buffer.from(chunk));\n }\n const buf = Buffer.concat(chunks);\n if (buf.length > LIMITS.maxBundleBytes) {\n throw new Error(`Compressed bundle too large (${buf.length} > ${LIMITS.maxBundleBytes})`);\n }\n return { bytes: buf, sha256: createHash(\"sha256\").update(buf).digest(\"hex\") };\n}\n\nexport async function extractBundle(buf: Buffer, destDir: string): Promise<void> {\n const tar = await import(\"tar\");\n const { Readable } = await import(\"node:stream\");\n await mkdir(destDir, { recursive: true });\n\n await new Promise<void>((resolve, reject) => {\n const extractStream = (tar as any).extract({\n cwd: destDir,\n strict: true,\n preserveOwner: false,\n filter: (path: string) => {\n if (path.startsWith(\"/\") || path.includes(\"..\")) return false;\n if (path.length > LIMITS.maxPathLength) return false;\n return true;\n },\n onwarn: (_code: string, msg: string) => {\n if (msg.toLowerCase().includes(\"symlink\")) reject(new Error(\"Bundle contains symlinks\"));\n },\n });\n\n Readable.from(buf)\n .pipe(extractStream)\n .on(\"finish\", () => resolve())\n .on(\"error\", reject);\n });\n}\n\nexport function verifyBundleHash(buf: Buffer, expected: string): boolean {\n const actual = createHash(\"sha256\").update(buf).digest(\"hex\");\n return actual === expected;\n}\n", "import chalk from \"chalk\";\n\nexport const log = {\n info: (msg: string) => console.log(msg),\n ok: (msg: string) => console.log(chalk.green(\"\u2713 \") + msg),\n warn: (msg: string) => console.log(chalk.yellow(\"! \") + msg),\n err: (msg: string) => console.error(chalk.red(\"\u2717 \") + msg),\n step: (msg: string) => console.log(chalk.dim(\"\u00B7 \") + msg),\n heading: (msg: string) => console.log(\"\\n\" + chalk.bold(msg)),\n kv: (key: string, value: string) => console.log(` ${chalk.dim(key.padEnd(18))}${value}`),\n blank: () => console.log(\"\"),\n};\n\nexport function exitWith(code: number, msg?: string): never {\n if (msg) log.err(msg);\n process.exit(code);\n}\n", "import open from \"node:child_process\";\nimport { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { api } from \"../api-client.js\";\nimport { getApiUrl, writeAuth } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\nimport { VERSION } from \"../version.js\";\n\nconst sh = promisify(exec);\n\ninterface CreateSessionResponse {\n session_id: string;\n device_code: string;\n user_code: string;\n verification_uri: string;\n expires_at: string;\n poll_interval_seconds: number;\n}\n\ninterface PollSessionResponse {\n status: \"pending\" | \"approved\" | \"expired\" | \"denied\";\n token?: string;\n handle?: string;\n email?: string;\n}\n\nasync function openInBrowser(url: string): Promise<void> {\n const opener = process.platform === \"darwin\" ? \"open\" : process.platform === \"win32\" ? \"start\" : \"xdg-open\";\n try { await sh(`${opener} ${JSON.stringify(url)}`); } catch { /* user can copy-paste */ }\n}\n\nexport async function loginCommand(): Promise<void> {\n log.heading(\"Starting CLI login...\");\n const session = await api<CreateSessionResponse>(\"/cli/sessions\", {\n method: \"POST\",\n body: { client: \"floom-cli\", version: VERSION },\n });\n\n log.info(\"\");\n log.info(`Open this URL in your browser:`);\n log.info(` ${session.verification_uri}`);\n log.info(\"\");\n log.info(`Your code: ${session.user_code}`);\n log.info(\"\");\n log.info(\"Waiting for approval in the browser. Press Ctrl+C to cancel.\");\n\n openInBrowser(session.verification_uri).catch(() => {});\n\n const deadline = new Date(session.expires_at).getTime();\n const interval = Math.max(2, session.poll_interval_seconds) * 1000;\n\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, interval));\n const poll = await api<PollSessionResponse>(`/cli/sessions/${session.session_id}`, {\n tokenOverride: session.device_code,\n });\n if (poll.status === \"approved\" && poll.token && poll.handle && poll.email) {\n await writeAuth({\n token: poll.token,\n handle: poll.handle,\n email: poll.email,\n apiUrl: getApiUrl(),\n });\n log.ok(`Logged in as @${poll.handle} (${poll.email})`);\n log.info(\"\");\n log.info(\"Next:\");\n log.info(\" floom init\");\n log.info(\" floom publish\");\n log.info(` floom install @${poll.handle}/your-skill --for codex`);\n return;\n }\n if (poll.status === \"denied\") {\n log.err(\"Login denied.\");\n process.exit(1);\n }\n if (poll.status === \"expired\") {\n log.err(\"Login session expired. Run `floom login` again.\");\n process.exit(1);\n }\n process.stdout.write(\".\");\n }\n log.err(\"Login timed out.\");\n process.exit(1);\n}\n", "import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { mkdir, readFile, writeFile, chmod } from \"node:fs/promises\";\nimport { FloomError } from \"@floom/shared\";\n\nconst CONFIG_DIR = join(homedir(), \".floom\");\nconst AUTH_FILE = join(CONFIG_DIR, \"auth.json\");\n\nexport interface AuthState {\n token: string; // flm_v1_<id>_<secret>\n handle: string;\n email: string;\n apiUrl: string;\n}\n\nexport const DEFAULT_APP_URL = \"https://skills.floom.dev\";\nexport const DEFAULT_API_URL = \"https://skills.floom.dev/api/v1\";\nconst LEGACY_API_HOSTS = new Set([\"floom-v0.vercel.app\", \"skills.wasm.floom.dev\"]);\nconst TRUSTED_API_HOSTS = new Set([\"skills.floom.dev\", \"skills.wasm.floom.dev\", \"localhost\", \"127.0.0.1\", \"::1\"]);\n\nasync function ensureDir(): Promise<void> {\n await mkdir(CONFIG_DIR, { recursive: true, mode: 0o700 });\n}\n\nexport async function readAuth(): Promise<AuthState | null> {\n const parsed = await readRawAuth();\n return parsed ? { ...parsed, apiUrl: normalizeApiUrl(parsed.apiUrl) } : null;\n}\n\nexport async function readRawAuth(): Promise<AuthState | null> {\n try {\n const raw = await readFile(AUTH_FILE, \"utf8\");\n return JSON.parse(raw) as AuthState;\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n if (e instanceof SyntaxError) {\n throw new FloomError(\"AUTH_REQUIRED\", \"Invalid ~/.floom/auth.json. Run: floom login to refresh local auth.\");\n }\n throw e;\n }\n}\n\nexport async function writeAuth(state: AuthState): Promise<void> {\n await ensureDir();\n await writeFile(AUTH_FILE, JSON.stringify({ ...state, apiUrl: trustedApiUrlOrDefault(state.apiUrl) }, null, 2), { mode: 0o600 });\n try { await chmod(AUTH_FILE, 0o600); } catch { /* best effort on win */ }\n}\n\nexport async function clearAuth(): Promise<void> {\n const { unlink } = await import(\"node:fs/promises\");\n try { await unlink(AUTH_FILE); } catch { /* ignore */ }\n}\n\nexport function getApiUrl(): string {\n if (process.env.FLOOM_API_URL) return process.env.FLOOM_API_URL;\n if (process.env.FLOOM_APP_URL) return `${getAppUrl().replace(/\\/$/, \"\")}/api/v1`;\n return DEFAULT_API_URL;\n}\n\nexport function getAppUrl(): string {\n return process.env.FLOOM_APP_URL ?? DEFAULT_APP_URL;\n}\n\nexport function getApiBaseUrls(preferred?: string | null): string[] {\n const explicitApiUrl = process.env.FLOOM_API_URL?.trim();\n if (explicitApiUrl) return [trustedApiUrlOrDefault(explicitApiUrl)];\n\n const primary = trustedApiUrlOrDefault(preferred ?? getApiUrl());\n const bases = [primary];\n if (preferred && !process.env.FLOOM_APP_URL) bases.push(DEFAULT_API_URL);\n\n return Array.from(new Set(bases));\n}\n\nexport function normalizeApiUrl(apiUrl: unknown): string {\n if (typeof apiUrl !== \"string\") return DEFAULT_API_URL;\n const trimmed = apiUrl.trim().replace(/\\/$/, \"\");\n if (!trimmed) return DEFAULT_API_URL;\n try {\n const url = new URL(trimmed);\n if (LEGACY_API_HOSTS.has(url.hostname)) return DEFAULT_API_URL;\n } catch {\n return DEFAULT_API_URL;\n }\n return trimmed;\n}\n\nfunction allowsCustomApiUrl(): boolean {\n const raw = process.env.FLOOM_ALLOW_CUSTOM_API_URL?.trim().toLowerCase();\n return raw === \"1\" || raw === \"true\" || raw === \"yes\";\n}\n\nfunction isTrustedApiUrl(apiUrl: string): boolean {\n try {\n const url = new URL(apiUrl);\n return TRUSTED_API_HOSTS.has(url.hostname) || allowsCustomApiUrl();\n } catch {\n return false;\n }\n}\n\nexport function trustedApiUrlOrDefault(apiUrl: unknown): string {\n const normalized = normalizeApiUrl(apiUrl);\n return isTrustedApiUrl(normalized) ? normalized : DEFAULT_API_URL;\n}\n\nexport function isLegacyApiUrl(apiUrl: string | null | undefined): boolean {\n if (!apiUrl) return false;\n try {\n return LEGACY_API_HOSTS.has(new URL(apiUrl).hostname);\n } catch {\n return false;\n }\n}\n", "export const VERSION = \"0.2.10\";\n", "import { FloomError, type ErrorCode } from \"@floom/shared\";\nimport { getApiBaseUrls, readAuth } from \"./config.js\";\nimport { VERSION } from \"./version.js\";\n\nexport interface ApiOptions {\n method?: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\" | \"PUT\";\n body?: unknown;\n authRequired?: boolean;\n query?: Record<string, string | number | boolean | undefined>;\n tokenOverride?: string;\n}\n\nconst DEFAULT_TIMEOUT_MS = 20_000;\n\nfunction timeoutMs(): number {\n const raw = Number(process.env.FLOOM_API_TIMEOUT_MS);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_TIMEOUT_MS;\n}\n\nasync function fetchWithTimeout(url: string | URL, init: RequestInit = {}): Promise<Response> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs());\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } catch (e) {\n if ((e as Error).name === \"AbortError\") {\n throw new Error(`Request timed out after ${timeoutMs()}ms`);\n }\n throw e;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function api<T = unknown>(path: string, opts: ApiOptions = {}): Promise<T> {\n const auth = await readAuth();\n const token = process.env.FLOOM_API_TOKEN?.trim() || auth?.token;\n if (opts.authRequired && !token) {\n throw new FloomError(\"AUTH_REQUIRED\" as ErrorCode, \"Not logged in. Run: floom login\");\n }\n\n let lastError: FloomError | null = null;\n const bases = getApiBaseUrls(auth?.apiUrl);\n for (const base of bases) {\n const url = new URL(base + path);\n if (opts.query) {\n for (const [k, v] of Object.entries(opts.query)) {\n if (v !== undefined) url.searchParams.set(k, String(v));\n }\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `floom-cli/${VERSION}`,\n \"x-floom-cli-version\": VERSION,\n };\n const requestToken = opts.tokenOverride ?? token;\n if (requestToken) headers.Authorization = `Bearer ${requestToken}`;\n\n let res: Response;\n try {\n res = await fetchWithTimeout(url.toString(), {\n method: opts.method ?? \"GET\",\n headers,\n body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined,\n });\n } catch (e) {\n lastError = new FloomError(\n \"INTERNAL_ERROR\" as ErrorCode,\n `Unable to reach Floom API at ${base}: ${(e as Error).message}`,\n { apiUrl: base },\n );\n continue;\n }\n\n const text = await res.text();\n let json: any = null;\n try { json = text ? JSON.parse(text) : null; } catch { /* not JSON */ }\n\n if (res.ok) return json as T;\n\n const err = json?.error ?? {};\n lastError = new FloomError(\n (err.code ?? \"INTERNAL_ERROR\") as ErrorCode,\n err.message ?? `HTTP ${res.status} ${res.statusText}`,\n { status: res.status, requestId: err.request_id, apiUrl: base },\n );\n\n if (res.status !== 404 || json?.error) break;\n }\n\n throw lastError ?? new FloomError(\"INTERNAL_ERROR\" as ErrorCode, \"API request failed\");\n}\n\n// Variants for binary upload/download to Supabase Storage signed URLs (no auth header)\nexport async function rawPut(url: string, body: Buffer | Uint8Array, contentType = \"application/octet-stream\"): Promise<void> {\n // Convert to BufferSource that fetch accepts\n const u8 = body instanceof Buffer ? new Uint8Array(body) : body;\n let res: Response;\n try {\n res = await fetchWithTimeout(url, {\n method: \"PUT\",\n headers: { \"Content-Type\": contentType },\n body: u8 as BodyInit,\n });\n } catch (e) {\n throw new FloomError(\"UPLOAD_FAILED\" as ErrorCode, `Upload failed: ${(e as Error).message}`);\n }\n if (!res.ok) {\n throw new FloomError(\n \"UPLOAD_FAILED\" as ErrorCode,\n `Upload failed: HTTP ${res.status} ${res.statusText}`,\n );\n }\n}\n\nexport async function rawGet(url: string): Promise<Buffer> {\n let res: Response;\n try {\n res = await fetchWithTimeout(url);\n } catch (e) {\n throw new FloomError(\"DOWNLOAD_FAILED\" as ErrorCode, `Download failed: ${(e as Error).message}`);\n }\n if (!res.ok) {\n throw new FloomError(\n \"DOWNLOAD_FAILED\" as ErrorCode,\n `Download failed: HTTP ${res.status} ${res.statusText}`,\n );\n }\n const ab = await res.arrayBuffer();\n return Buffer.from(ab);\n}\n", "import { clearAuth, readAuth } from \"../config.js\";\nimport { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\nexport async function logoutCommand(): Promise<void> {\n const auth = await readAuth();\n if (!auth) {\n log.info(\"Not logged in.\");\n return;\n }\n try {\n await api(\"/cli/sessions/revoke\", { method: \"POST\", authRequired: true });\n } catch {\n // best effort; we still clear local token\n }\n await clearAuth();\n log.ok(\"Logged out.\");\n}\n", "import { api } from \"../api-client.js\";\nimport { readAuth } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface MeResponse {\n user: { handle: string; email: string };\n}\n\nexport async function whoamiCommand(): Promise<void> {\n const auth = await readAuth();\n const envToken = process.env.FLOOM_API_TOKEN?.trim();\n if (!auth && !envToken) {\n log.info(\"Not logged in. Run: floom login\");\n process.exitCode = 1;\n return;\n }\n let me: MeResponse;\n try {\n me = await api<MeResponse>(\"/me\", { authRequired: true });\n } catch (e) {\n log.err(`Login is not accepted by the Floom API: ${(e as Error).message}`);\n log.info(\"Run: floom login\");\n process.exitCode = 1;\n return;\n }\n log.heading(\"Logged in as:\");\n log.kv(\"handle\", `@${me.user.handle}`);\n log.kv(\"email\", me.user.email);\n log.kv(\"api url\", process.env.FLOOM_API_URL ?? auth?.apiUrl ?? \"default\");\n if (envToken) log.kv(\"auth\", \"FLOOM_API_TOKEN\");\n}\n", "import { writeFile, stat, readFile } from \"node:fs/promises\";\nimport { join, basename } from \"node:path\";\nimport prompts from \"prompts\";\nimport { isValidSlug, slugErrorMessage, type SkillManifest } from \"@floom/shared\";\nimport { log } from \"../lib/output.js\";\n\nasync function pathExists(p: string): Promise<boolean> {\n try { await stat(p); return true; } catch { return false; }\n}\n\nexport async function initCommand(): Promise<void> {\n const cwd = process.cwd();\n const folderName = basename(cwd);\n\n if (await pathExists(join(cwd, \"skill.json\"))) {\n log.err(\"skill.json already exists in this folder. Edit it directly or run from a fresh directory.\");\n process.exit(1);\n }\n\n const defaultName = folderName.toLowerCase().replace(/[^a-z0-9-]/g, \"-\").replace(/-+/g, \"-\").replace(/^-|-$/g, \"\");\n\n const answers = await prompts([\n {\n type: \"text\",\n name: \"name\",\n message: \"Skill name (lowercase, hyphens):\",\n initial: isValidSlug(defaultName) ? defaultName : \"\",\n validate: (v: string) => slugErrorMessage(v) ?? true,\n },\n {\n type: \"text\",\n name: \"title\",\n message: \"Title (human-readable):\",\n initial: (prev: string) => prev.split(\"-\").map((w: string) => w[0]?.toUpperCase() + w.slice(1)).join(\" \"),\n validate: (v: string) => v.trim().length > 0 ? true : \"title required\",\n },\n {\n type: \"text\",\n name: \"description\",\n message: \"One-line description:\",\n validate: (v: string) => v.trim().length > 0 ? true : \"description required\",\n },\n {\n type: \"text\",\n name: \"version\",\n message: \"Version:\",\n initial: \"0.1.0\",\n },\n ]);\n\n if (!answers.name) { log.err(\"Init cancelled.\"); process.exit(1); }\n\n const manifest: SkillManifest = {\n schema_version: \"0.1\",\n name: answers.name,\n title: answers.title,\n description: answers.description,\n version: answers.version,\n entrypoint: \"SKILL.md\",\n targets: [\"generic\"],\n };\n\n const skillMd = `---\nname: ${answers.name}\ndescription: ${answers.description}\n---\n\n# ${answers.title}\n\n## Purpose\n\n${answers.description}\n\n## When to use\n\n(Describe when this skill should be activated.)\n\n## Process\n\n1. (Step one)\n2. (Step two)\n\n## Output\n\n(Describe what the skill produces.)\n`;\n\n const floomIgnore = `# Floom CLI ignore patterns\n# One pattern per line, glob-style\ntmp/\ndrafts/\n*.log\n`;\n\n await writeFile(join(cwd, \"skill.json\"), JSON.stringify(manifest, null, 2) + \"\\n\", \"utf8\");\n await writeFile(join(cwd, \"SKILL.md\"), skillMd, \"utf8\");\n await writeFile(join(cwd, \".floomignore\"), floomIgnore, \"utf8\");\n\n log.blank();\n log.ok(\"Skill scaffolded.\");\n log.kv(\"skill.json\", \"manifest (edit metadata)\");\n log.kv(\"SKILL.md\", \"instructions for the agent\");\n log.kv(\".floomignore\", \"patterns to exclude from publish\");\n log.blank();\n log.info(\"Next:\");\n log.info(\" 1. Edit SKILL.md\");\n log.info(\" 2. floom validate\");\n log.info(\" 3. floom publish\");\n}\n", "import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n readManifest,\n parseSkillFrontmatter,\n validateSkillFrontmatter,\n collectBundle,\n isBlockingSecurityFinding,\n scanSkillBundleFiles,\n scanSkillMarkdown,\n} from \"@floom/shared\";\nimport { log } from \"../lib/output.js\";\n\nexport interface ValidateOptions {\n json?: boolean;\n}\n\nexport interface ValidateReport {\n ok: boolean;\n manifest: { ok: boolean; message?: string };\n skill_md: { ok: boolean; message?: string };\n name_matches: { ok: boolean; message?: string };\n bundle: { ok: boolean; message?: string; files?: number; size?: number; has_scripts?: boolean };\n security: { ok: boolean; message?: string; findings: ReturnType<typeof scanSkillMarkdown> };\n}\n\nexport async function validateSkill(dir: string): Promise<ValidateReport> {\n const report: ValidateReport = {\n ok: true,\n manifest: { ok: true },\n skill_md: { ok: true },\n name_matches: { ok: false, message: \"skipped because skill.json and SKILL.md are required\" },\n bundle: { ok: false, message: \"skipped because skill.json and SKILL.md are required\" },\n security: { ok: false, message: \"skipped because SKILL.md is required\", findings: [] },\n };\n\n // manifest\n const m = await readManifest(dir);\n if (!m.ok) {\n report.manifest = { ok: false, message: m.error };\n report.ok = false;\n }\n\n // SKILL.md presence + frontmatter\n let skillMd: string | undefined;\n try {\n skillMd = await readFile(join(dir, \"SKILL.md\"), \"utf8\");\n } catch {\n report.skill_md = { ok: false, message: \"SKILL.md not found\" };\n report.ok = false;\n }\n if (!skillMd) return report;\n\n const { meta } = parseSkillFrontmatter(skillMd);\n const fmErr = validateSkillFrontmatter(meta);\n if (fmErr) {\n report.skill_md = { ok: false, message: fmErr };\n report.ok = false;\n }\n\n if (m.ok) {\n report.name_matches = { ok: true };\n if (meta.name && meta.name !== m.manifest.name) {\n report.name_matches = {\n ok: false,\n message: `skill.json name=\"${m.manifest.name}\" but SKILL.md frontmatter name=\"${meta.name}\"`,\n };\n report.ok = false;\n }\n }\n\n // Early SKILL.md scan gives useful feedback even if bundle collection later fails.\n report.security = { ok: true, findings: [] };\n const findings = scanSkillMarkdown(skillMd);\n if (findings.length > 0) {\n const blocking = findings.filter(isBlockingSecurityFinding);\n report.security = { ok: blocking.length === 0, findings };\n if (blocking.length > 0) report.ok = false;\n }\n\n if (!m.ok) return report;\n\n // bundle (path traversal, symlinks, file/size limits)\n try {\n const bundle = await collectBundle(dir);\n const bundleFindings = await scanSkillBundleFiles(bundle.files);\n const blocking = bundleFindings.filter(isBlockingSecurityFinding);\n report.security = { ok: blocking.length === 0, findings: bundleFindings };\n if (blocking.length > 0) report.ok = false;\n report.bundle = {\n ok: true,\n files: bundle.files.length,\n size: bundle.totalUncompressedBytes,\n has_scripts: bundle.hasScripts,\n };\n } catch (e) {\n report.bundle = { ok: false, message: (e as Error).message };\n report.ok = false;\n }\n\n return report;\n}\n\nexport async function validateCommand(opts: ValidateOptions = {}): Promise<void> {\n const dir = process.cwd();\n const r = await validateSkill(dir);\n\n if (opts.json) {\n console.log(JSON.stringify(r, null, 2));\n process.exit(r.ok ? 0 : 1);\n }\n\n log.heading(\"Validating skill...\");\n const line = (ok: boolean, label: string, detail?: string) =>\n ok ? log.ok(`${label.padEnd(28)} ${detail ?? \"\"}`.trim())\n : log.err(`${label.padEnd(28)} ${detail ?? \"\"}`.trim());\n\n line(r.manifest.ok, \"manifest schema\", r.manifest.message);\n line(r.skill_md.ok, \"SKILL.md present\", r.skill_md.message);\n line(r.name_matches.ok, \"name fields match\", r.name_matches.message);\n if (r.bundle.ok) {\n line(true, \"files + size limits\", `${r.bundle.files} files, ${(r.bundle.size ?? 0) / 1024 | 0} KB`);\n } else {\n line(false, \"files + size limits\", r.bundle.message);\n }\n if (r.security.findings.length === 0) {\n line(r.security.ok, \"bundle security scan\", r.security.message ?? \"clean\");\n } else {\n const blocking = r.security.findings.filter(isBlockingSecurityFinding).length;\n const detail = blocking > 0\n ? `${r.security.findings.length} finding(s), ${blocking} blocking`\n : `${r.security.findings.length} warning(s)`;\n line(r.security.ok, \"bundle security scan\", detail);\n for (const f of r.security.findings) {\n const loc = f.path ? `${f.path}:${f.line}` : `line ${f.line}`;\n log.warn(` ${loc} [${f.severity}/${f.category}] ${f.label}: ${f.preview}`);\n }\n }\n if (r.bundle.has_scripts) {\n log.warn(\"This skill contains scripts/. Agents may execute these \u2014 review before activating.\");\n }\n log.blank();\n if (r.ok) {\n log.ok(\"Valid.\");\n } else {\n log.err(\"Invalid.\");\n process.exit(1);\n }\n}\n", "import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n readManifest,\n parseSkillFrontmatter,\n collectBundle,\n packBundle,\n FloomError,\n} from \"@floom/shared\";\nimport { api, rawPut } from \"../api-client.js\";\nimport { DEFAULT_API_URL, readAuth, trustedApiUrlOrDefault } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\nimport { validateSkill } from \"./validate.js\";\n\ninterface InitResponse {\n version_id: string;\n upload: { method: \"PUT\"; url: string; expires_at: string };\n}\n\ninterface CompleteResponse {\n ref: string;\n status: \"active\";\n install_command: string;\n}\n\ninterface MeResponse {\n user: { handle: string; email: string };\n}\n\nexport interface PublishOptions {\n dryRun?: boolean;\n workspace?: string;\n library?: string;\n}\n\nexport async function publishCommand(opts: PublishOptions = {}): Promise<void> {\n const auth = await readAuth();\n const envToken = process.env.FLOOM_API_TOKEN?.trim();\n if (!auth && !envToken && !opts.dryRun) {\n log.err(\"Not logged in. Run: floom login\");\n process.exit(1);\n }\n\n const dir = process.cwd();\n log.heading(\"Validating skill...\");\n const report = await validateSkill(dir);\n if (!report.ok) {\n log.err(\"Validation failed. Run `floom validate` for details.\");\n process.exit(1);\n }\n log.ok(\"Validation passed.\");\n\n const m = await readManifest(dir);\n if (!m.ok) {\n log.err(m.error);\n process.exit(1);\n }\n const manifest = m.manifest;\n const skillMd = await readFile(join(dir, \"SKILL.md\"), \"utf8\");\n const { meta } = parseSkillFrontmatter(skillMd);\n\n const me = !opts.dryRun && !auth && envToken\n ? await api<MeResponse>(\"/me\", { authRequired: true })\n : null;\n const handle = auth?.handle ?? me?.user.handle;\n const refRoot = opts.workspace ?? opts.library ?? handle ?? \"<your-handle>\";\n log.heading(`${opts.dryRun ? \"Dry-running\" : \"Publishing\"} ${refRoot}/${manifest.name}@${manifest.version}`);\n log.step(\"Packing bundle...\");\n const bundle = await collectBundle(dir);\n const packed = await packBundle(bundle);\n log.kv(\"files\", String(bundle.files.length));\n log.kv(\"size\", `${packed.bytes.length} bytes (${(packed.bytes.length / 1024).toFixed(1)} KB)`);\n log.kv(\"sha256\", packed.sha256);\n\n if (opts.dryRun) {\n log.blank();\n log.ok(\"Dry run passed. No upload was requested.\");\n return;\n }\n if (!handle) {\n log.err(\"Not logged in. Run: floom login\");\n process.exit(1);\n }\n\n log.step(\"Requesting upload URL...\");\n let initResp: InitResponse;\n try {\n initResp = await api<InitResponse>(`/skills/${refRoot}/${manifest.name}/versions`, {\n method: \"POST\",\n authRequired: true,\n body: {\n manifest,\n skill_md: skillMd,\n bundle: {\n sha256: packed.sha256,\n size_bytes: packed.bytes.length,\n },\n files: bundle.files.map((f: { relPath: string; sha256: string; size: number }) => ({\n path: f.relPath,\n sha256: f.sha256,\n size_bytes: f.size,\n })),\n has_scripts: bundle.hasScripts,\n },\n });\n } catch (e) {\n if (e instanceof FloomError && e.code === \"VERSION_ALREADY_EXISTS\") {\n log.err(`Version ${manifest.version} already exists for @${handle}/${manifest.name}.`);\n log.info(\"Bump the version in skill.json (e.g. 0.1.1) and try again.\");\n process.exit(1);\n }\n throw e;\n }\n\n log.step(\"Uploading bundle...\");\n await rawPut(initResp.upload.url, packed.bytes, \"application/gzip\");\n\n log.step(\"Finalizing...\");\n const complete = await api<CompleteResponse>(`/versions/${initResp.version_id}/complete`, {\n method: \"POST\",\n authRequired: true,\n body: { bundle_sha256: packed.sha256 },\n });\n\n log.blank();\n log.ok(`Published ${complete.ref}`);\n log.blank();\n log.info(\"View:\");\n const displayApiUrl = trustedApiUrlOrDefault(process.env.FLOOM_API_URL ?? auth?.apiUrl ?? DEFAULT_API_URL);\n log.kv(\"\", `${displayApiUrl.replace(\"/api/v1\", \"\")}/@${handle}/${manifest.name}`);\n log.info(\"Install:\");\n log.kv(\"\", complete.install_command);\n}\n", "import { mkdir, readdir, rm, rename } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport {\n parseSkillRef,\n formatSkillRef,\n resolveInstallDir,\n describeTargetForCli,\n isInstallTarget,\n extractBundle,\n verifyBundleHash,\n FloomError,\n type InstallTarget,\n} from \"@floom/shared\";\nimport { api, rawGet } from \"../api-client.js\";\nimport { getAppUrl, readAuth } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\nimport { readLock, writeLock, setLockEntry, hashInstalledFolder } from \"../lib/floom-lock.js\";\nimport { VERSION } from \"../version.js\";\n\nexport interface InstallOptions {\n for?: InstallTarget | string;\n to?: string;\n global?: boolean;\n force?: boolean;\n}\n\ninterface SkillResponse {\n ref: string;\n visibility: \"private\" | \"unlisted\" | \"public\";\n latest_version: string;\n has_scripts: boolean;\n min_floom_version?: string;\n}\n\ninterface DownloadResponse {\n ref: string;\n version: string;\n download: { url: string; expires_at: string };\n bundle_sha256: string;\n has_scripts: boolean;\n}\n\nconst CLI_VERSION = VERSION;\n\nfunction semverGte(a: string, b: string): boolean {\n const pa = a.split(\".\").map(Number);\n const pb = b.split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n if ((pa[i] ?? 0) > (pb[i] ?? 0)) return true;\n if ((pa[i] ?? 0) < (pb[i] ?? 0)) return false;\n }\n return true;\n}\n\nexport async function installCommand(refStr: string, opts: InstallOptions = {}): Promise<void> {\n const ref = parseSkillRef(refStr);\n if (!ref) {\n log.err(`Invalid skill ref: ${refStr}`);\n log.info(\"Expected: @owner/slug, workspace-slug/slug, or with @version suffix\");\n process.exit(1);\n }\n if (opts.for && !isInstallTarget(opts.for)) {\n log.err(`Invalid install target: ${opts.for}`);\n log.info(\"Expected: claude | codex | cursor | gemini | opencode | kimi | all\");\n process.exit(1);\n }\n const installTarget: InstallTarget = isInstallTarget(opts.for) ? opts.for : \"generic\";\n\n // Get metadata (works anonymously for public skills)\n let info: SkillResponse;\n try {\n info = await api<SkillResponse>(`/skills/${ref.owner}/${ref.slug}`);\n } catch (e) {\n if (e instanceof FloomError && e.code === \"SKILL_ACCESS_DENIED\") {\n const auth = await readAuth();\n if (!auth) {\n log.err(`Cannot access ${formatSkillRef(ref)}.`);\n log.info(\"Run `floom login` to install private or unlisted skills.\");\n process.exit(1);\n }\n log.err(`You do not have access to ${formatSkillRef(ref)}.`);\n log.info(`Ask the owner to share it with: ${auth.email}`);\n process.exit(1);\n }\n throw e;\n }\n\n if (info.min_floom_version && !semverGte(CLI_VERSION, info.min_floom_version)) {\n log.err(`This skill requires Floom CLI >= ${info.min_floom_version} (you have ${CLI_VERSION}).`);\n log.info(\"Upgrade:\");\n log.info(\" npm install -g @floomhq/skills@latest\");\n process.exit(1);\n }\n\n // Resolve install destination\n const target = resolveInstallDir({\n target: installTarget,\n to: opts.to,\n global: opts.global,\n });\n const projectDir = opts.global ? process.cwd() : process.cwd();\n const destFolder = join(target.dir, ref.slug);\n\n // Conflict check\n const lock = await readLock(projectDir);\n const refKey = formatSkillRef({ owner: ref.owner, slug: ref.slug });\n const existing = lock.skills[refKey];\n let folderExists = false;\n try {\n const entries = await readdir(destFolder);\n folderExists = entries.length > 0;\n } catch { /* not exists */ }\n\n if (folderExists) {\n if (existing && existing.path === destFolder.replace(projectDir + \"/\", \"\")) {\n // Tracked. Check local edits.\n const current = await hashInstalledFolder(destFolder);\n // For V0 we don't have file-level hashes in lock; we conservatively warn unless --force.\n if (!opts.force) {\n log.warn(`Folder already exists at ${destFolder} and may contain local edits.`);\n log.info(`Re-run with --force to overwrite, or remove the folder manually.`);\n process.exit(1);\n }\n } else if (!opts.force) {\n log.err(`Folder already exists at ${destFolder} (not tracked by floom.lock).`);\n log.info(\"Re-run with --force to overwrite, or remove the folder manually.\");\n process.exit(1);\n }\n }\n\n // Download\n log.step(\"Fetching skill metadata...\");\n const dl = await api<DownloadResponse>(`/skills/${ref.owner}/${ref.slug}/download`, {\n query: { version: ref.version },\n });\n\n log.step(\"Downloading bundle...\");\n const buf = await rawGet(dl.download.url);\n if (!verifyBundleHash(buf, dl.bundle_sha256)) {\n log.err(\"Bundle hash mismatch \u2014 refusing to extract.\");\n process.exit(1);\n }\n log.ok(`Bundle verified (${(buf.length / 1024).toFixed(1)} KB).`);\n\n // Extract to temp, then swap\n const tmp = await import(\"node:fs/promises\").then((m) =>\n m.mkdtemp(join(tmpdir(), `floom-install-${ref.slug}-`)),\n );\n try {\n await extractBundle(buf, tmp);\n await mkdir(target.dir, { recursive: true });\n if (folderExists) {\n await rm(destFolder, { recursive: true, force: true });\n }\n await rename(tmp, destFolder);\n } catch (e) {\n await rm(tmp, { recursive: true, force: true }).catch(() => {});\n throw e;\n }\n\n // Update floom.lock\n const next = setLockEntry(lock, refKey, {\n version: dl.version,\n resolved: `${getAppUrl().replace(/\\/$/, \"\")}/${refKey}`,\n bundle_sha256: dl.bundle_sha256,\n installed_at: new Date().toISOString(),\n path: destFolder.replace(projectDir + \"/\", \"\"),\n preset: installTarget,\n });\n await writeLock(projectDir, next);\n\n log.blank();\n log.ok(`Installed ${refKey}@${dl.version}`);\n log.kv(\"Path\", destFolder);\n log.kv(\"Target\", target.target);\n log.kv(\"Compatible with\", target.compatibleAgents.join(\", \"));\n if (dl.has_scripts) {\n log.blank();\n log.warn(\"This skill contains executable scripts. Floom does not run them; your agent may.\");\n log.warn(\"Review the scripts/ folder before activating.\");\n }\n}\n", "import { readFile, writeFile, mkdir, stat, readdir } from \"node:fs/promises\";\nimport { join, relative, sep, posix } from \"node:path\";\nimport { createHash } from \"node:crypto\";\n\n// SPEC \u00A711.14 \u2014 floom.lock format\nexport interface FloomLockEntry {\n version: string;\n resolved: string;\n bundle_sha256: string;\n installed_at: string;\n path: string; // relative path from project root where the skill folder lives\n preset?: string; // \"claude\" | \"codex\" | \"all\" | etc, recorded if --for was used\n}\n\nexport interface FloomLock {\n schema_version: \"0.1\";\n skills: Record<string, FloomLockEntry>;\n}\n\nexport interface FloomInstructionLockEntry {\n scope: \"account\" | \"workspace\";\n workspace?: string;\n target?: string;\n version_id: string;\n body_sha256: string;\n pulled_at: string;\n path: string;\n}\n\nexport interface FloomLockV02 {\n schema_version: \"0.2\";\n default_workspace?: string;\n target?: string;\n scope?: \"global\" | \"local\";\n last_sync_at?: string;\n instructions?: FloomInstructionLockEntry[];\n skills: Record<string, FloomLockEntry>;\n}\n\nexport type AnyFloomLock = FloomLock | FloomLockV02;\n\nconst EMPTY: FloomLock = { schema_version: \"0.1\", skills: {} };\n\nexport async function readLock(projectDir: string): Promise<AnyFloomLock> {\n try {\n const raw = await readFile(join(projectDir, \"floom.lock\"), \"utf8\");\n const parsed = JSON.parse(raw) as Partial<AnyFloomLock> & { schema_version?: unknown };\n if (parsed.schema_version === \"0.1\") return parsed as FloomLock;\n if (parsed.schema_version === \"0.2\") return parsed as FloomLockV02;\n const version = typeof parsed.schema_version === \"string\" ? parsed.schema_version : \"missing\";\n throw new Error(\n `LOCK_SCHEMA_UNSUPPORTED: floom.lock schema_version ${version} is not supported by this CLI. ` +\n \"The existing floom.lock was left unchanged; migrate it or reinstall skills with the current CLI.\",\n );\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === \"ENOENT\") return { ...EMPTY };\n throw e;\n }\n}\n\nexport async function writeLock(projectDir: string, lock: AnyFloomLock): Promise<void> {\n await mkdir(projectDir, { recursive: true });\n await writeFile(join(projectDir, \"floom.lock\"), JSON.stringify(lock, null, 2) + \"\\n\", \"utf8\");\n}\n\nexport function setLockEntry<T extends AnyFloomLock>(lock: T, ref: string, entry: FloomLockEntry): T {\n return { ...lock, skills: { ...lock.skills, [ref]: entry } };\n}\n\nexport function removeLockEntry<T extends AnyFloomLock>(lock: T, ref: string): T {\n const { [ref]: _, ...rest } = lock.skills;\n return { ...lock, skills: rest };\n}\n\nexport function upgradeLockToV02(lock: AnyFloomLock, opts: { target?: string; scope?: \"global\" | \"local\"; defaultWorkspace?: string } = {}): FloomLockV02 {\n if (lock.schema_version === \"0.2\") {\n return {\n ...lock,\n target: opts.target ?? lock.target,\n scope: opts.scope ?? lock.scope,\n default_workspace: opts.defaultWorkspace ?? lock.default_workspace,\n last_sync_at: new Date().toISOString(),\n };\n }\n return {\n schema_version: \"0.2\",\n default_workspace: opts.defaultWorkspace,\n target: opts.target,\n scope: opts.scope,\n last_sync_at: new Date().toISOString(),\n instructions: [],\n skills: lock.skills,\n };\n}\n\n// Compute hash for each file in an installed skill folder.\n// Used by `install` and `update` to detect local edits before overwriting.\nexport interface InstalledFileHash {\n relPath: string;\n sha256: string;\n size: number;\n}\n\nexport async function hashInstalledFolder(folderAbs: string): Promise<InstalledFileHash[]> {\n const out: InstalledFileHash[] = [];\n async function walk(dir: string): Promise<void> {\n let entries;\n try { entries = await readdir(dir, { withFileTypes: true }); } catch { return; }\n for (const entry of entries) {\n const abs = join(dir, entry.name);\n if (entry.isSymbolicLink()) continue;\n if (entry.isDirectory()) { await walk(abs); continue; }\n if (!entry.isFile()) continue;\n const buf = await readFile(abs);\n const rel = relative(folderAbs, abs).split(sep).join(posix.sep);\n out.push({\n relPath: rel,\n sha256: createHash(\"sha256\").update(buf).digest(\"hex\"),\n size: buf.length,\n });\n }\n }\n try {\n await stat(folderAbs);\n } catch {\n return out;\n }\n await walk(folderAbs);\n out.sort((a, b) => a.relPath.localeCompare(b.relPath));\n return out;\n}\n", "import { readLock } from \"../lib/floom-lock.js\";\nimport { log } from \"../lib/output.js\";\n\nexport interface InstalledOptions {\n json?: boolean;\n}\n\nexport async function installedCommand(opts: InstalledOptions = {}): Promise<void> {\n const lock = await readLock(process.cwd());\n const entries = Object.entries(lock.skills);\n\n if (opts.json) {\n console.log(JSON.stringify(lock, null, 2));\n return;\n }\n\n if (entries.length === 0) {\n log.info(\"No skills installed in this project.\");\n log.info(\"Get one: floom install @owner/slug\");\n return;\n }\n\n log.heading(\"Installed skills in this project\");\n for (const [ref, e] of entries) {\n console.log(` ${ref.padEnd(40)} ${e.version.padEnd(8)} ${(e.preset ?? \"-\").padEnd(8)} ${e.path}`);\n }\n log.blank();\n log.info(`${entries.length} skill${entries.length === 1 ? \"\" : \"s\"} installed.`);\n}\n", "import { api } from \"../api-client.js\";\nimport { readLock } from \"../lib/floom-lock.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface SkillInfo {\n ref: string;\n latest_version: string;\n}\n\nfunction cmpSemver(a: string, b: string): number {\n const pa = a.split(\".\").map((p) => parseInt(p, 10));\n const pb = b.split(\".\").map((p) => parseInt(p, 10));\n for (let i = 0; i < 3; i++) {\n const d = (pa[i] ?? 0) - (pb[i] ?? 0);\n if (d !== 0) return d;\n }\n return 0;\n}\n\nexport async function outdatedCommand(): Promise<void> {\n const lock = await readLock(process.cwd());\n const entries = Object.entries(lock.skills);\n if (entries.length === 0) {\n log.info(\"No skills installed.\");\n return;\n }\n\n log.heading(\"Checking for updates...\");\n const outdated: Array<{ ref: string; current: string; latest: string }> = [];\n\n for (const [ref, e] of entries) {\n const [, owner, slug] = /^@([^/]+)\\/([^@]+)/.exec(ref) ?? [];\n if (!owner || !slug) continue;\n try {\n const info = await api<SkillInfo>(`/skills/${owner}/${slug}`);\n if (cmpSemver(info.latest_version, e.version) > 0) {\n outdated.push({ ref, current: e.version, latest: info.latest_version });\n }\n } catch (err) {\n log.warn(`Could not check ${ref}: ${(err as Error).message}`);\n }\n }\n\n log.blank();\n if (outdated.length === 0) {\n log.ok(\"All installed skills are up to date.\");\n return;\n }\n\n log.heading(\"Outdated skills\");\n for (const o of outdated) {\n console.log(` ${o.ref.padEnd(40)} ${o.current.padEnd(10)} -> ${o.latest.padEnd(10)} floom update ${o.ref}`);\n }\n log.blank();\n log.info(`${outdated.length} skill${outdated.length === 1 ? \"\" : \"s\"} can be updated.`);\n process.exit(1); // useful in CI\n}\n", "import { rm, rename, mkdir } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { extractBundle, verifyBundleHash, FloomError } from \"@floom/shared\";\nimport { api, rawGet } from \"../api-client.js\";\nimport { readLock, writeLock, setLockEntry, hashInstalledFolder } from \"../lib/floom-lock.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface SkillInfo {\n ref: string;\n latest_version: string;\n}\n\ninterface DownloadResponse {\n ref: string;\n version: string;\n download: { url: string; expires_at: string };\n bundle_sha256: string;\n}\n\nfunction cmpSemver(a: string, b: string): number {\n const pa = a.split(\".\").map((p) => parseInt(p, 10));\n const pb = b.split(\".\").map((p) => parseInt(p, 10));\n for (let i = 0; i < 3; i++) {\n const d = (pa[i] ?? 0) - (pb[i] ?? 0);\n if (d !== 0) return d;\n }\n return 0;\n}\n\nexport interface UpdateOptions {\n force?: boolean;\n}\n\nexport async function updateCommand(refStr?: string, opts: UpdateOptions = {}): Promise<void> {\n const projectDir = process.cwd();\n const lock = await readLock(projectDir);\n const all = Object.entries(lock.skills);\n if (all.length === 0) {\n log.info(\"No installed skills.\");\n return;\n }\n\n const targets = refStr ? all.filter(([r]) => r === refStr) : all;\n if (refStr && targets.length === 0) {\n log.err(`Not installed: ${refStr}`);\n process.exit(1);\n }\n\n let updated = 0, skipped = 0;\n for (const [ref, entry] of targets) {\n const [, owner, slug] = /^@([^/]+)\\/([^@]+)/.exec(ref) ?? [];\n if (!owner || !slug) continue;\n\n let info: SkillInfo;\n try { info = await api<SkillInfo>(`/skills/${owner}/${slug}`); }\n catch (e) {\n log.warn(`Skip ${ref}: ${(e as Error).message}`);\n skipped++;\n continue;\n }\n\n if (cmpSemver(info.latest_version, entry.version) <= 0) {\n log.step(`${ref} is already at latest (${entry.version}).`);\n continue;\n }\n\n const installDir = resolve(projectDir, entry.path);\n\n // Detect local edits via floom-lock recorded bundle_sha256 \u2014 simplistic: we\n // re-compute on-disk content and compare collective hash to recorded bundle.\n // V0 hardening: full per-file lock would be richer; we use a simple gate.\n if (!opts.force) {\n const current = await hashInstalledFolder(installDir);\n // The recorded bundle_sha256 is the tarball hash, not folder hash, so we\n // can't compare directly. For now: if force isn't set and folder exists,\n // we proceed with confirmation in a real terminal. In V0 we just warn.\n // (Full editorial detection lands when files-table-per-version syncs.)\n log.step(`Updating ${ref}: ${entry.version} -> ${info.latest_version}`);\n }\n\n const dl = await api<DownloadResponse>(`/skills/${owner}/${slug}/download`);\n const buf = await rawGet(dl.download.url);\n if (!verifyBundleHash(buf, dl.bundle_sha256)) {\n log.err(`Bundle hash mismatch for ${ref} \u2014 skipping.`);\n skipped++;\n continue;\n }\n\n const tmp = await import(\"node:fs/promises\").then((m) =>\n m.mkdtemp(join(tmpdir(), `floom-update-${slug}-`)),\n );\n try {\n await extractBundle(buf, tmp);\n await rm(installDir, { recursive: true, force: true });\n await mkdir(installDir.replace(/\\/[^/]+$/, \"\"), { recursive: true });\n await rename(tmp, installDir);\n } catch (e) {\n await rm(tmp, { recursive: true, force: true }).catch(() => {});\n throw e;\n }\n\n const next = setLockEntry(lock, ref, {\n ...entry,\n version: dl.version,\n bundle_sha256: dl.bundle_sha256,\n installed_at: new Date().toISOString(),\n });\n await writeLock(projectDir, next);\n log.ok(`Updated ${ref}: ${entry.version} -> ${dl.version}`);\n updated++;\n }\n\n log.blank();\n log.info(`${updated} updated, ${skipped} skipped.`);\n}\n", "import { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\nexport interface ListOptions {\n query?: string;\n workspace?: string;\n library?: string;\n folder?: string;\n flat?: boolean;\n}\n\ninterface SkillRow {\n id: string;\n slug: string;\n title: string;\n description: string | null;\n visibility: \"private\" | \"unlisted\" | \"public\";\n latest_version_id: string | null;\n updated_at: string;\n library: { id: string; slug: string; name: string };\n}\n\ninterface ListResponse {\n skills: SkillRow[];\n total: number;\n}\n\nexport async function listCommand(opts: ListOptions = {}): Promise<void> {\n const resp = await api<ListResponse>(\"/skills\", {\n authRequired: true,\n query: { q: opts.query, library: opts.workspace ?? opts.library, folder: opts.folder },\n });\n\n if (resp.skills.length === 0) {\n log.info(\"No skills.\");\n return;\n }\n\n if (opts.flat) {\n for (const s of resp.skills) {\n console.log(`${s.library.slug}/${s.slug}`);\n }\n return;\n }\n\n const groups = new Map<string, SkillRow[]>();\n for (const skill of resp.skills) {\n const k = `${skill.library.slug} (${skill.library.name})`;\n const arr = groups.get(k) ?? [];\n arr.push(skill);\n groups.set(k, arr);\n }\n\n for (const [library, rows] of groups.entries()) {\n log.heading(library);\n for (const s of rows) {\n console.log(` ${`${s.library.slug}/${s.slug}`.padEnd(40)} ${s.visibility.padEnd(10)} ${s.title}`);\n }\n }\n}\n", "import { parseSkillRef } from \"@floom/shared\";\nimport { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface InfoResponse {\n ref: string;\n title: string;\n description: string;\n visibility: \"private\" | \"unlisted\" | \"public\";\n latest_version: string;\n owner: { handle: string; display_name?: string };\n has_scripts: boolean;\n declared_scripts?: Array<{ path: string; description: string }>;\n}\n\nexport async function infoCommand(refStr: string): Promise<void> {\n const ref = parseSkillRef(refStr);\n if (!ref) {\n log.err(`Invalid skill ref: ${refStr}`);\n process.exit(1);\n }\n const r = await api<InfoResponse>(`/skills/${ref.owner}/${ref.slug}`);\n\n log.heading(r.ref);\n log.kv(\"Title\", r.title);\n log.kv(\"Description\", r.description);\n log.kv(\"Latest\", r.latest_version);\n log.kv(\"Visibility\", r.visibility);\n log.kv(\"Owner\", `@${r.owner.handle}${r.owner.display_name ? ` (${r.owner.display_name})` : \"\"}`);\n if (r.has_scripts) {\n log.kv(\"Scripts\", \"yes (review before activating)\");\n }\n log.blank();\n log.info(\"Install:\");\n log.info(` floom install ${r.ref}`);\n}\n", "import { parseSkillRef } from \"@floom/shared\";\nimport { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\nexport interface ShareOptions {\n role?: \"viewer\" | \"editor\";\n}\n\ninterface GrantResponse {\n grant: { id: string; email: string; role: string; created_at: string };\n email_status?: \"queued\" | \"sent\" | \"logged\" | \"duplicate\";\n}\n\nexport async function shareCommand(refStr: string, email: string, opts: ShareOptions = {}): Promise<void> {\n const ref = parseSkillRef(refStr);\n if (!ref) { log.err(`Invalid skill ref: ${refStr}`); process.exit(1); }\n const role = opts.role ?? \"viewer\";\n const r = await api<GrantResponse>(`/skills/${ref.owner}/${ref.slug}/grants`, {\n method: \"POST\",\n authRequired: true,\n body: { email, role },\n });\n log.ok(`Shared ${refStr} with ${r.grant.email} as ${r.grant.role}.`);\n if (r.email_status) log.kv(\"email\", r.email_status);\n}\n\ninterface GrantListResponse {\n grants: Array<{ id: string; email?: string; user_handle?: string; role: string }>;\n}\n\nexport async function unshareCommand(refStr: string, email: string): Promise<void> {\n const ref = parseSkillRef(refStr);\n if (!ref) { log.err(`Invalid skill ref: ${refStr}`); process.exit(1); }\n const list = await api<GrantListResponse>(`/skills/${ref.owner}/${ref.slug}/grants`, { authRequired: true });\n const grant = list.grants.find((g) => (g.email ?? \"\").toLowerCase() === email.toLowerCase());\n if (!grant) {\n log.err(`No active grant for ${email} on ${refStr}.`);\n process.exit(1);\n }\n await api(`/skills/${ref.owner}/${ref.slug}/grants/${grant.id}`, { method: \"DELETE\", authRequired: true });\n log.ok(`Removed ${email}'s access to ${refStr}.`);\n}\n", "import { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface LibraryRow {\n id: string;\n slug: string;\n name: string;\n type: \"personal\" | \"shared\";\n role: \"viewer\" | \"editor\" | \"admin\";\n archived_at: string | null;\n}\n\nexport async function libraryListCommand(): Promise<void> {\n const resp = await api<{ libraries: LibraryRow[] }>(\"/libraries\", { authRequired: true });\n if (!resp.libraries.length) {\n log.info(\"No workspaces.\");\n return;\n }\n for (const l of resp.libraries) {\n console.log(`${l.slug.padEnd(24)} ${l.type.padEnd(8)} ${l.role.padEnd(6)} ${l.name}`);\n }\n}\n\nexport async function libraryCreateCommand(slug: string, name: string): Promise<void> {\n const resp = await api<LibraryRow>(\"/libraries\", { method: \"POST\", authRequired: true, body: { slug, name } });\n log.ok(`Created workspace ${resp.slug}`);\n}\n\nexport async function libraryInviteCommand(librarySlug: string, email: string, role = \"viewer\"): Promise<void> {\n await api(`/libraries/${librarySlug}/pending-invites`, {\n method: \"POST\",\n authRequired: true,\n body: { email, role },\n });\n log.ok(`Invited ${email} to ${librarySlug} as ${role}`);\n}\n\nexport async function libraryLeaveCommand(librarySlug: string): Promise<void> {\n await api(`/libraries/${librarySlug}/members/me`, { method: \"DELETE\", authRequired: true });\n log.ok(`Left workspace ${librarySlug}`);\n}\n", "import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { z } from \"zod\";\n\nexport const FLOOM_CONFIG_VERSION = \"0.1\";\nexport const TARGETS = [\"claude\", \"codex\", \"cursor\", \"kimi\", \"opencode\"] as const;\nexport const SCOPES = [\"global\", \"local\"] as const;\n\nexport type FloomTarget = (typeof TARGETS)[number];\nexport type FloomScope = (typeof SCOPES)[number];\n\nconst targetConfigSchema = z.object({\n active_workspaces: z.array(z.string().min(1)).default([]),\n instruction_path: z.string().min(1).optional(),\n});\n\nconst configSchema = z.object({\n version: z.literal(FLOOM_CONFIG_VERSION).default(FLOOM_CONFIG_VERSION),\n default_workspace: z.string().min(1).optional(),\n targets: z.record(z.enum(TARGETS), targetConfigSchema).default({}),\n});\n\nexport type FloomConfig = z.infer<typeof configSchema>;\n\nexport function configPath(scope: FloomScope, cwd = process.cwd()): string {\n if (scope === \"global\") return join(homedir(), \".floom\", \"config.json\");\n return join(cwd, \".floom\", \"config.json\");\n}\n\nexport async function readFloomConfig(scope: FloomScope, cwd = process.cwd()): Promise<FloomConfig> {\n try {\n const raw = await readFile(configPath(scope, cwd), \"utf8\");\n return configSchema.parse(JSON.parse(raw));\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === \"ENOENT\") return configSchema.parse({});\n throw e;\n }\n}\n\nexport async function writeFloomConfig(scope: FloomScope, config: FloomConfig, cwd = process.cwd()): Promise<void> {\n const path = configPath(scope, cwd);\n const parsed = configSchema.parse(config);\n await mkdir(dirname(path), { recursive: true, mode: 0o700 });\n await writeFile(path, JSON.stringify(parsed, null, 2) + \"\\n\", { mode: 0o600 });\n}\n\nexport function normalizeScope(value: unknown): FloomScope {\n return value === \"global\" ? \"global\" : \"local\";\n}\n\nexport function assertTarget(value: string): FloomTarget {\n if ((TARGETS as readonly string[]).includes(value)) return value as FloomTarget;\n throw new Error(`Invalid target: ${value}. Expected ${TARGETS.join(\", \")}`);\n}\n\nexport async function setDefaultWorkspace(slug: string, scope: FloomScope, cwd = process.cwd()): Promise<FloomConfig> {\n const config = await readFloomConfig(scope, cwd);\n const next = { ...config, default_workspace: slug };\n await writeFloomConfig(scope, next, cwd);\n return next;\n}\n\nexport async function setWorkspaceActive(input: {\n workspace: string;\n target: FloomTarget;\n scope: FloomScope;\n active: boolean;\n cwd?: string;\n}): Promise<FloomConfig> {\n const config = await readFloomConfig(input.scope, input.cwd);\n const current = config.targets[input.target] ?? { active_workspaces: [] };\n const set = new Set(current.active_workspaces);\n if (input.active) set.add(input.workspace);\n else set.delete(input.workspace);\n const next: FloomConfig = {\n ...config,\n targets: {\n ...config.targets,\n [input.target]: {\n ...current,\n active_workspaces: Array.from(set).sort(),\n },\n },\n };\n await writeFloomConfig(input.scope, next, input.cwd);\n return next;\n}\n", "import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\nimport { normalizeScope, readFloomConfig, type FloomScope } from \"../lib/config-file.js\";\nimport { readLock, upgradeLockToV02, writeLock } from \"../lib/floom-lock.js\";\n\nconst START = \"<!-- FLOOM START -->\";\nconst END = \"<!-- FLOOM END -->\";\nconst AGENT_INSTRUCTION_TARGETS = [\"claude\", \"codex\", \"cursor\", \"opencode\"] as const;\n\nexport type AgentInstructionTarget = (typeof AGENT_INSTRUCTION_TARGETS)[number];\nexport type PublishInstructionTarget = \"default\" | AgentInstructionTarget;\n\ninterface InstructionResponse {\n scope: \"account\" | \"workspace\";\n workspace: string | null;\n requested_target: string;\n resolved_target: string;\n instruction: null | {\n id: string;\n target: string;\n latest_version_id: string | null;\n latest?: {\n id: string;\n body_md: string;\n body_sha256: string;\n published_at: string;\n } | null;\n };\n}\n\nexport interface InstructionPullOptions {\n account?: boolean;\n workspace?: string;\n target?: string;\n scope?: string;\n path?: string;\n apply?: boolean;\n force?: boolean;\n}\n\nexport interface InstructionPushOptions {\n account?: boolean;\n workspace?: string;\n target?: string;\n changelog?: string;\n}\n\ninterface WorkspaceInfoResponse {\n role: \"viewer\" | \"editor\" | \"admin\";\n}\n\nexport function defaultInstructionPath(target: AgentInstructionTarget): string {\n if (target === \"claude\") return \"CLAUDE.md\";\n if (target === \"codex\") return \"AGENTS.md\";\n if (target === \"cursor\") return \".cursor/rules/floom.mdc\";\n if (target === \"opencode\") return \".opencode/instructions/floom.md\";\n throw new Error(`No default instruction path for target ${target}`);\n}\n\nexport function replaceManagedBlock(existing: string, blockBody: string): { content: string; hadBlock: boolean } {\n const block = `${START}\\n${blockBody.trim()}\\n${END}\\n`;\n const start = existing.indexOf(START);\n const end = existing.indexOf(END);\n if (start >= 0 && end > start) {\n const afterEnd = end + END.length;\n const prefix = existing.slice(0, start);\n const suffix = existing.slice(afterEnd).replace(/^\\n/, \"\");\n return { content: `${prefix}${block}${suffix}`, hadBlock: true };\n }\n return { content: existing.trim() ? `${existing.trimEnd()}\\n\\n${block}` : block, hadBlock: false };\n}\n\nfunction resolveScope(opts: { account?: boolean; workspace?: string }): \"account\" | \"workspace\" {\n if (opts.account && opts.workspace) throw new Error(\"Use either --account or --workspace, not both.\");\n if (opts.account) return \"account\";\n if (opts.workspace) return \"workspace\";\n throw new Error(\"Instruction command requires --account or --workspace <slug>.\");\n}\n\nfunction bodySha256(body: string): string {\n return createHash(\"sha256\").update(body, \"utf8\").digest(\"hex\");\n}\n\nasync function readUtf8FileStrict(path: string): Promise<string> {\n const bytes = await readFile(path);\n try {\n new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n } catch {\n throw new Error(`${path} is not valid UTF-8; refusing to rewrite it as a managed instruction file.`);\n }\n return bytes.toString(\"utf8\");\n}\n\nexport function assertAgentInstructionTarget(value: string): AgentInstructionTarget {\n if ((AGENT_INSTRUCTION_TARGETS as readonly string[]).includes(value)) return value as AgentInstructionTarget;\n throw new Error(`Invalid instruction target: ${value}. Expected ${AGENT_INSTRUCTION_TARGETS.join(\", \")}. Kimi uses the Floom guide skill in V0.`);\n}\n\nfunction assertPublishInstructionTarget(value: string): PublishInstructionTarget {\n if (value === \"default\") return \"default\";\n return assertAgentInstructionTarget(value);\n}\n\nexport async function fetchInstruction(input: {\n scope: \"account\" | \"workspace\";\n workspace?: string;\n target: AgentInstructionTarget;\n}): Promise<InstructionResponse> {\n return api<InstructionResponse>(\"/instructions\", {\n authRequired: true,\n query: input,\n });\n}\n\nexport function buildInstructionBlock(sections: Array<{ label: string; body_md: string }>): string {\n return [\n \"# Floom\",\n \"\",\n \"Use Floom for workspace-approved AI skills and instructions.\",\n \"\",\n ...sections.flatMap((section) => [\n `## ${section.label}`,\n \"\",\n section.body_md.trim(),\n \"\",\n ]),\n ].join(\"\\n\");\n}\n\nexport async function writeManagedInstructionFile(input: {\n path: string;\n blockBody: string;\n apply?: boolean;\n force?: boolean;\n}): Promise<{ changed: boolean; backupPath?: string }> {\n let existing = \"\";\n let existed = true;\n try { existing = await readUtf8FileStrict(input.path); } catch (e) {\n if ((e as NodeJS.ErrnoException).code === \"ENOENT\") existed = false;\n else throw e;\n }\n const next = replaceManagedBlock(existing, input.blockBody);\n if (existed && !next.hadBlock && !input.apply && !input.force) {\n log.warn(`Refusing to modify ${input.path} without an existing Floom managed block.`);\n log.info(\"Re-run with --apply to append the managed block, or --path <file> for a dedicated file.\");\n process.exit(1);\n }\n if (existed && existing === next.content) return { changed: false };\n let backupPath: string | undefined;\n if (existed && existing) {\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n backupPath = join(\".floom\", \"backups\", `${basename(input.path)}.${stamp}.bak`);\n await mkdir(dirname(backupPath), { recursive: true, mode: 0o700 });\n await writeFile(backupPath, existing, { mode: 0o600 });\n }\n await mkdir(dirname(input.path), { recursive: true });\n await writeFile(input.path, next.content, \"utf8\");\n return { changed: true, backupPath };\n}\n\nexport async function recordCliActivity(input: {\n event_type: \"workspace.activate_cli\" | \"workspace.deactivate_cli\" | \"workspace.pulled_cli\" | \"instruction.pulled_cli\";\n workspace?: string;\n target: string;\n scope?: \"account\" | \"workspace\";\n instruction_id?: string;\n version_id?: string;\n path?: string;\n resources?: Array<{ type: string; id?: string; name?: string }>;\n}): Promise<void> {\n try {\n await api(\"/cli/activity\", { method: \"POST\", authRequired: true, body: input });\n } catch (e) {\n log.warn(`Activity event not recorded: ${(e as Error).message}`);\n }\n}\n\nexport async function upsertInstructionLock(input: {\n scope: \"account\" | \"workspace\";\n workspace?: string;\n target: AgentInstructionTarget;\n path: string;\n version_id: string;\n body_sha256: string;\n configScope: FloomScope;\n defaultWorkspace?: string;\n}): Promise<void> {\n const lock = upgradeLockToV02(await readLock(process.cwd()), {\n target: input.target,\n scope: input.configScope,\n defaultWorkspace: input.defaultWorkspace,\n });\n const instructions = (lock.instructions ?? []).filter((entry) =>\n !(entry.scope === input.scope && entry.workspace === input.workspace && entry.target === input.target && entry.path === input.path)\n );\n instructions.push({\n scope: input.scope,\n workspace: input.workspace,\n target: input.target,\n version_id: input.version_id,\n body_sha256: input.body_sha256,\n pulled_at: new Date().toISOString(),\n path: input.path,\n });\n await writeLock(process.cwd(), { ...lock, instructions, last_sync_at: new Date().toISOString() });\n}\n\nexport async function instructionPullCommand(opts: InstructionPullOptions = {}): Promise<void> {\n const target = assertAgentInstructionTarget(opts.target ?? \"codex\");\n const configScope = normalizeScope(opts.scope);\n const scope = resolveScope(opts);\n const config = await readFloomConfig(configScope);\n const workspace = opts.workspace ?? (scope === \"workspace\" ? config.default_workspace : undefined);\n if (scope === \"workspace\" && !workspace) throw new Error(\"Workspace instruction pull requires --workspace <slug> or a configured default workspace.\");\n\n const path = opts.path ?? defaultInstructionPath(target);\n const resp = await fetchInstruction({ scope, workspace, target });\n if (!resp.instruction?.latest) {\n log.info(\"No remote instruction found.\");\n return;\n }\n\n const label = scope === \"account\" ? \"Account Instructions\" : `Workspace Instructions: ${workspace}`;\n const writeResult = await writeManagedInstructionFile({\n path,\n blockBody: buildInstructionBlock([{ label, body_md: resp.instruction.latest.body_md }]),\n apply: opts.apply,\n force: opts.force,\n });\n if (!writeResult.changed) {\n log.info(`${path} is already at the latest ${scope} instruction.`);\n return;\n }\n if (writeResult.backupPath) log.info(`Backed up previous instruction file to ${writeResult.backupPath}`);\n\n await upsertInstructionLock({\n scope,\n workspace,\n target,\n path,\n version_id: resp.instruction.latest.id,\n body_sha256: resp.instruction.latest.body_sha256,\n configScope,\n defaultWorkspace: config.default_workspace,\n });\n await recordCliActivity({\n event_type: \"instruction.pulled_cli\",\n scope,\n workspace,\n target,\n instruction_id: resp.instruction.id,\n version_id: resp.instruction.latest.id,\n path,\n });\n\n log.ok(`Pulled ${scope} instruction to ${path}`);\n}\n\nexport async function instructionPushCommand(file: string, opts: InstructionPushOptions = {}): Promise<void> {\n const target = assertPublishInstructionTarget(opts.target ?? \"default\");\n const scope = resolveScope(opts);\n if (scope === \"workspace\") {\n const workspace = opts.workspace!;\n const info = await api<WorkspaceInfoResponse>(`/libraries/${workspace}`, { authRequired: true });\n if (info.role !== \"admin\" && info.role !== \"editor\") {\n throw new Error(`Workspace instruction push requires editor or admin role in ${workspace}.`);\n }\n }\n const body = await readFile(file, \"utf8\");\n const resp = await api<any>(\"/instructions\", {\n method: \"POST\",\n authRequired: true,\n body: {\n scope,\n workspace: opts.workspace,\n target,\n body_md: body,\n changelog: opts.changelog ?? `Published from CLI (${file}, ${bodySha256(body).slice(0, 12)})`,\n },\n });\n log.ok(`Published ${scope} instruction ${resp.instruction?.latest?.version_seq ? `v${resp.instruction.latest.version_seq}` : \"\"}`.trim());\n}\n", "import { api } from \"../api-client.js\";\nimport { log } from \"../lib/output.js\";\nimport {\n assertTarget,\n normalizeScope,\n readFloomConfig,\n setDefaultWorkspace,\n setWorkspaceActive,\n type FloomScope,\n} from \"../lib/config-file.js\";\nimport { recordCliActivity } from \"./instruction.js\";\n\ninterface WorkspaceOptions {\n target?: string;\n scope?: string;\n}\n\nasync function assertWorkspaceExists(slug: string): Promise<void> {\n await api(`/libraries/${slug}`, { authRequired: true });\n}\n\nfunction parseOptions(opts: WorkspaceOptions): { target: ReturnType<typeof assertTarget>; scope: FloomScope } {\n return {\n target: assertTarget(opts.target ?? \"codex\"),\n scope: normalizeScope(opts.scope),\n };\n}\n\nexport async function defaultWorkspaceCommand(slug?: string, opts: { scope?: string } = {}): Promise<void> {\n const scope = normalizeScope(opts.scope);\n if (!slug) {\n const config = await readFloomConfig(scope);\n if (!config.default_workspace) {\n log.info(`No default workspace configured for ${scope} scope.`);\n return;\n }\n console.log(config.default_workspace);\n return;\n }\n await assertWorkspaceExists(slug);\n await setDefaultWorkspace(slug, scope);\n log.ok(`Default workspace (${scope}) set to ${slug}`);\n}\n\nexport async function workspaceActivateCommand(slug: string, opts: WorkspaceOptions = {}): Promise<void> {\n const parsed = parseOptions(opts);\n await assertWorkspaceExists(slug);\n await setWorkspaceActive({ workspace: slug, target: parsed.target, scope: parsed.scope, active: true });\n await recordCliActivity({ event_type: \"workspace.activate_cli\", workspace: slug, target: parsed.target });\n log.ok(`Activated ${slug} for ${parsed.target} (${parsed.scope})`);\n}\n\nexport async function workspaceDeactivateCommand(slug: string, opts: WorkspaceOptions = {}): Promise<void> {\n const parsed = parseOptions(opts);\n await setWorkspaceActive({ workspace: slug, target: parsed.target, scope: parsed.scope, active: false });\n await recordCliActivity({ event_type: \"workspace.deactivate_cli\", workspace: slug, target: parsed.target });\n log.ok(`Deactivated ${slug} for ${parsed.target} (${parsed.scope})`);\n}\n\nexport async function workspaceActiveCommand(opts: WorkspaceOptions = {}): Promise<void> {\n const parsed = parseOptions(opts);\n const config = await readFloomConfig(parsed.scope);\n const active = config.targets[parsed.target]?.active_workspaces ?? [];\n if (!active.length) {\n log.info(`No active workspaces for ${parsed.target} (${parsed.scope}).`);\n return;\n }\n for (const workspace of active) console.log(workspace);\n}\n", "import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { resolveInstallDir, type InstallTarget } from \"@floom/shared\";\nimport { api } from \"../api-client.js\";\nimport { assertTarget, normalizeScope, readFloomConfig } from \"../lib/config-file.js\";\nimport { log } from \"../lib/output.js\";\nimport {\n assertAgentInstructionTarget,\n buildInstructionBlock,\n defaultInstructionPath,\n fetchInstruction,\n recordCliActivity,\n upsertInstructionLock,\n writeManagedInstructionFile,\n type AgentInstructionTarget,\n} from \"./instruction.js\";\nimport { installCommand } from \"./install.js\";\n\ninterface SyncOptions {\n target?: string;\n scope?: string;\n apply?: boolean;\n force?: boolean;\n}\n\ninterface PinRow {\n id: string;\n skill_id: string;\n target: string;\n skill?: { slug?: string; title?: string; latest?: { version?: string } | null } | null;\n}\n\nconst ROUTER_SKILL = [\n \"# Floom Find Skills\",\n \"\",\n \"Use this router skill instead of loading every Floom skill into context.\",\n \"\",\n \"When a task may need a reusable skill:\",\n \"\",\n \"1. Call the Floom MCP `search_skills` tool with a short query.\",\n \"2. Review the compact candidate list.\",\n \"3. Call `get_skill` only for the selected candidate.\",\n \"4. Call `install_skill` only when the skill needs to be available locally.\",\n \"\",\n \"Do not enumerate the whole workspace library into model context. Keep skill bodies out of context until selected.\",\n \"\",\n].join(\"\\n\");\n\nasync function installRouter(target: string): Promise<string> {\n const install = resolveInstallDir({ target: target as InstallTarget });\n const routerDir = target === \"kimi\" ? \"floom\" : \"floom-find-skills\";\n const path = join(install.dir, routerDir, \"SKILL.md\");\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, ROUTER_SKILL, \"utf8\");\n return path;\n}\n\nasync function pullInstructions(input: {\n target: AgentInstructionTarget;\n scope: ReturnType<typeof normalizeScope>;\n defaultWorkspace?: string;\n activeWorkspaces: string[];\n apply?: boolean;\n force?: boolean;\n}): Promise<void> {\n const path = defaultInstructionPath(input.target);\n const sections: Array<{\n label: string;\n scope: \"account\" | \"workspace\";\n workspace?: string;\n instruction_id: string;\n version_id: string;\n body_sha256: string;\n body_md: string;\n }> = [];\n\n const account = await fetchInstruction({ scope: \"account\", target: input.target });\n if (account.instruction?.latest) {\n sections.push({\n label: \"Account Instructions\",\n scope: \"account\",\n instruction_id: account.instruction.id,\n version_id: account.instruction.latest.id,\n body_sha256: account.instruction.latest.body_sha256,\n body_md: account.instruction.latest.body_md,\n });\n }\n\n for (const workspace of input.activeWorkspaces) {\n const resp = await fetchInstruction({ scope: \"workspace\", workspace, target: input.target });\n if (!resp.instruction?.latest) continue;\n sections.push({\n label: `Workspace Instructions: ${workspace}`,\n scope: \"workspace\",\n workspace,\n instruction_id: resp.instruction.id,\n version_id: resp.instruction.latest.id,\n body_sha256: resp.instruction.latest.body_sha256,\n body_md: resp.instruction.latest.body_md,\n });\n }\n\n if (sections.length === 0) {\n log.info(\"No remote instructions found.\");\n return;\n }\n\n const writeResult = await writeManagedInstructionFile({\n path,\n blockBody: buildInstructionBlock(sections.map((section) => ({ label: section.label, body_md: section.body_md }))),\n apply: input.apply,\n force: input.force,\n });\n if (!writeResult.changed) {\n log.info(`${path} already contains the latest Floom instruction block.`);\n return;\n }\n if (writeResult.backupPath) log.info(`Backed up previous instruction file to ${writeResult.backupPath}`);\n\n for (const section of sections) {\n await upsertInstructionLock({\n scope: section.scope,\n workspace: section.workspace,\n target: input.target,\n path,\n version_id: section.version_id,\n body_sha256: section.body_sha256,\n configScope: input.scope,\n defaultWorkspace: input.defaultWorkspace,\n });\n await recordCliActivity({\n event_type: \"instruction.pulled_cli\",\n scope: section.scope,\n workspace: section.workspace,\n target: input.target,\n instruction_id: section.instruction_id,\n version_id: section.version_id,\n path,\n });\n }\n\n log.ok(`Pulled ${sections.length} instruction section(s) to ${path}`);\n}\n\nexport async function statusCommand(opts: SyncOptions = {}): Promise<void> {\n const target = assertTarget(opts.target ?? \"codex\");\n const scope = normalizeScope(opts.scope);\n const config = await readFloomConfig(scope);\n const active = config.targets[target]?.active_workspaces ?? [];\n\n log.heading(`Floom status for ${target} (${scope})`);\n log.kv(\"Default workspace\", config.default_workspace ?? \"(none)\");\n log.kv(\"Active workspaces\", active.length ? active.join(\", \") : \"(none)\");\n log.kv(\"Local pull policy\", \"router + pinned skills + instructions only\");\n\n for (const workspace of active) {\n const pins = await api<{ pins: PinRow[] }>(`/libraries/${workspace}/pins`, {\n authRequired: true,\n query: { target },\n });\n log.blank();\n log.info(`${workspace}: ${pins.pins.length} pinned skill(s) for ${target}`);\n for (const pin of pins.pins) {\n log.kv(\"\", `${pin.skill?.slug ?? pin.skill_id}${pin.skill?.latest?.version ? `@${pin.skill.latest.version}` : \"\"}`);\n }\n }\n}\n\nexport async function pullCommand(opts: SyncOptions = {}): Promise<void> {\n const target = assertTarget(opts.target ?? \"codex\");\n const scope = normalizeScope(opts.scope);\n const config = await readFloomConfig(scope);\n const active = config.targets[target]?.active_workspaces ?? [];\n\n const routerPath = await installRouter(target);\n log.ok(`Installed Floom router skill to ${routerPath}`);\n\n if (target === \"kimi\") {\n log.info(\"Kimi uses the Floom guide/router skill in V0; account and workspace instructions are not merged into Kimi context.\");\n } else {\n await pullInstructions({\n target: assertAgentInstructionTarget(target),\n scope,\n defaultWorkspace: config.default_workspace,\n activeWorkspaces: active,\n apply: opts.apply,\n force: opts.force,\n });\n }\n\n for (const workspace of active) {\n const pins = await api<{ pins: PinRow[] }>(`/libraries/${workspace}/pins`, {\n authRequired: true,\n query: { target },\n });\n for (const pin of pins.pins) {\n if (!pin.skill?.slug) continue;\n await installCommand(`${workspace}/${pin.skill.slug}`, { for: target as InstallTarget, force: opts.force });\n }\n await recordCliActivity({\n event_type: \"workspace.pulled_cli\",\n workspace,\n target,\n resources: pins.pins.map((pin) => ({ type: \"skill\", id: pin.skill_id, name: pin.skill?.slug ?? pin.skill_id })),\n });\n }\n\n log.blank();\n log.ok(\"Pull complete.\");\n}\n", "import { api } from \"../api-client.js\";\nimport { assertTarget, readFloomConfig } from \"../lib/config-file.js\";\nimport { log } from \"../lib/output.js\";\n\ninterface PinOptions {\n workspace?: string;\n target?: string;\n}\n\nasync function resolveWorkspace(opts: PinOptions): Promise<string> {\n if (opts.workspace) return opts.workspace;\n const config = await readFloomConfig(\"local\");\n if (config.default_workspace) return config.default_workspace;\n throw new Error(\"Pin command requires --workspace <slug> or a configured default workspace.\");\n}\n\nexport async function pinCommand(ref: string, opts: PinOptions = {}): Promise<void> {\n const target = assertTarget(opts.target ?? \"codex\");\n const workspace = await resolveWorkspace(opts);\n await api(`/libraries/${workspace}/pins`, {\n method: \"POST\",\n authRequired: true,\n body: { ref, target },\n });\n log.ok(`Pinned ${ref} for ${target} in ${workspace}`);\n}\n\nexport async function unpinCommand(ref: string, opts: PinOptions = {}): Promise<void> {\n const target = assertTarget(opts.target ?? \"codex\");\n const workspace = await resolveWorkspace(opts);\n await api(`/libraries/${workspace}/pins`, {\n method: \"DELETE\",\n authRequired: true,\n query: { ref, target },\n });\n log.ok(`Unpinned ${ref} for ${target} in ${workspace}`);\n}\n", "import { mkdtemp, mkdir, readdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { z } from \"zod\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n extractBundle,\n formatSkillRef,\n isInstallTarget,\n parseSkillRef,\n resolveInstallDir,\n verifyBundleHash,\n type InstallTarget,\n} from \"@floom/shared\";\nimport { rawGet } from \"../api-client.js\";\nimport { getApiBaseUrls, getAppUrl, readAuth } from \"../config.js\";\nimport { assertTarget, normalizeScope, readFloomConfig } from \"../lib/config-file.js\";\nimport { readLock, setLockEntry, writeLock } from \"../lib/floom-lock.js\";\nimport { VERSION } from \"../version.js\";\n\ntype MTarget = \"claude\" | \"codex\" | \"cursor\" | \"kimi\" | \"opencode\" | \"gemini\";\nconst API_TIMEOUT_MS = 20_000;\n\nfunction semverGte(a: string, b: string): boolean {\n const pa = a.split(\".\").map(Number);\n const pb = b.split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n if ((pa[i] ?? 0) > (pb[i] ?? 0)) return true;\n if ((pa[i] ?? 0) < (pb[i] ?? 0)) return false;\n }\n return true;\n}\n\nasync function fetchWithTimeout(url: string | URL, init: RequestInit = {}): Promise<Response> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), API_TIMEOUT_MS);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } catch (e) {\n if ((e as Error).name === \"AbortError\") throw new Error(`Request timed out after ${API_TIMEOUT_MS}ms`);\n throw e;\n } finally {\n clearTimeout(timer);\n }\n}\n\nasync function resolveOptionalToken(): Promise<string | null> {\n const fromEnv = process.env.FLOOM_API_TOKEN?.trim();\n if (fromEnv) return fromEnv;\n const auth = await readAuth();\n if (auth?.token) return auth.token;\n return null;\n}\n\nasync function resolveRequiredToken(): Promise<string> {\n const token = await resolveOptionalToken();\n if (token) return token;\n throw new Error(\"Authentication required. Run `floom login` or set FLOOM_API_TOKEN.\");\n}\n\nasync function apiRequest<T = unknown>(token: string | null, path: string, query?: Record<string, string>): Promise<T> {\n const auth = await readAuth();\n let lastError: Error | null = null;\n for (const base of getApiBaseUrls(auth?.apiUrl)) {\n const url = new URL(base + path);\n if (query) {\n for (const [k, v] of Object.entries(query)) url.searchParams.set(k, v);\n }\n let res: Response;\n try {\n res = await fetchWithTimeout(url, {\n headers: {\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n \"Content-Type\": \"application/json\",\n },\n });\n } catch (e) {\n lastError = new Error(`Unable to reach Floom API at ${base}: ${(e as Error).message}`);\n continue;\n }\n const body = await res.text();\n let json: any = null;\n try { json = body ? JSON.parse(body) : null; } catch { json = { raw: body }; }\n if (res.ok) return json as T;\n lastError = new Error(json?.error?.message ?? `HTTP ${res.status}`);\n if (res.status !== 404 || json?.error) break;\n }\n throw lastError ?? new Error(\"API request failed\");\n}\n\nasync function installViaApi(token: string | null, refText: string, target: MTarget, options: { force?: boolean } = {}): Promise<{ path: string; version: string; ref: string; has_scripts: boolean }> {\n const parsed = parseSkillRef(refText);\n if (!parsed) throw new Error(`Invalid ref: ${refText}`);\n if (!isInstallTarget(target)) throw new Error(`Invalid install target: ${target}`);\n const info = await apiRequest<any>(token, `/skills/${parsed.owner}/${parsed.slug}`);\n if (info.min_floom_version && !semverGte(VERSION, info.min_floom_version)) {\n throw new Error(`This skill requires Floom CLI >= ${info.min_floom_version} (you have ${VERSION}).`);\n }\n const dl = await apiRequest<any>(token, `/skills/${parsed.owner}/${parsed.slug}/download`, parsed.version ? { version: parsed.version } : undefined);\n const bundle = await rawGet(dl.download.url);\n if (!verifyBundleHash(bundle, dl.bundle_sha256)) throw new Error(\"Bundle hash mismatch\");\n\n const install = resolveInstallDir({ target: target as InstallTarget });\n await mkdir(install.dir, { recursive: true });\n const dest = join(install.dir, parsed.slug);\n const exists = await readdir(dest).then(() => true).catch(() => false);\n if (exists && !options.force) {\n throw new Error(`Folder already exists at ${dest}. Call install_skill with force=true to overwrite after reviewing local changes.`);\n }\n if (exists) await rm(dest, { recursive: true, force: true });\n const temp = await mkdtemp(join(tmpdir(), `floom-mcp-${parsed.slug}-`));\n try {\n await extractBundle(bundle, temp);\n await rename(temp, dest);\n } catch (e) {\n await rm(temp, { recursive: true, force: true }).catch(() => {});\n throw e;\n }\n\n const lock = await readLock(process.cwd());\n const ref = formatSkillRef({ owner: parsed.owner, slug: parsed.slug });\n const next = setLockEntry(lock, ref, {\n version: dl.version,\n resolved: `${getAppUrl().replace(/\\/$/, \"\")}/${ref}`,\n bundle_sha256: dl.bundle_sha256,\n installed_at: new Date().toISOString(),\n path: dest.replace(process.cwd() + \"/\", \"\"),\n preset: target,\n });\n await writeLock(process.cwd(), next);\n return { path: dest, version: dl.version, ref: info.ref ?? ref, has_scripts: !!dl.has_scripts };\n}\n\nexport interface ParsedSkillBundle {\n files: string[];\n skill_md: string;\n skill_json: unknown | null;\n}\n\nexport async function parseSkillBundle(bundle: Buffer): Promise<ParsedSkillBundle> {\n const tmp = await mkdtemp(join(tmpdir(), \"floom-mcp-read-\"));\n try {\n await extractBundle(bundle, tmp);\n const files: string[] = [];\n const walk = async (dir: string, rel = \"\"): Promise<void> => {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const nextRel = rel ? `${rel}/${entry.name}` : entry.name;\n const full = join(dir, entry.name);\n if (entry.isDirectory()) await walk(full, nextRel);\n else files.push(nextRel);\n }\n };\n await walk(tmp);\n const skillMdPath = files.find((f) => f.toUpperCase() === \"SKILL.MD\");\n const skillMd = skillMdPath ? await readFile(join(tmp, skillMdPath), \"utf8\") : \"\";\n const skillJsonPath = files.find((f) => f.toLowerCase() === \"skill.json\");\n const skillJson = skillJsonPath ? JSON.parse(await readFile(join(tmp, skillJsonPath), \"utf8\")) : null;\n return { files, skill_md: skillMd, skill_json: skillJson };\n } finally {\n await rm(tmp, { recursive: true, force: true });\n }\n}\n\nexport async function mcpCommand(): Promise<void> {\n const server = new McpServer({ name: \"floom\", version: VERSION });\n\n server.tool(\"search_skills\", { query: z.string().min(1), workspace: z.string().optional(), library: z.string().optional() }, async ({ query, workspace, library }) => {\n const token = await resolveRequiredToken();\n const workspaceSlug = workspace ?? library;\n const result = await apiRequest<any>(token, \"/skills\", { q: query, ...(workspaceSlug ? { library: workspaceSlug } : {}) });\n return { content: [{ type: \"text\", text: JSON.stringify(result) }] };\n });\n\n server.tool(\"get_skill\", { ref: z.string().min(3) }, async ({ ref }) => {\n const token = await resolveOptionalToken();\n const parsed = parseSkillRef(ref);\n if (!parsed) throw new Error(\"Invalid ref. Expected @owner/slug or workspace/slug\");\n const meta = await apiRequest<any>(token, `/skills/${parsed.owner}/${parsed.slug}`);\n const dl = await apiRequest<any>(token, `/skills/${parsed.owner}/${parsed.slug}/download`);\n const buf = await rawGet(dl.download.url);\n const parsedBundle = await parseSkillBundle(buf);\n return { content: [{ type: \"text\", text: JSON.stringify({ ref, meta, ...parsedBundle }) }] };\n });\n\n async function listWorkspaces() {\n const token = await resolveRequiredToken();\n const result = await apiRequest<any>(token, \"/libraries\");\n return { content: [{ type: \"text\" as const, text: JSON.stringify(result) }] };\n }\n\n server.tool(\"list_workspaces\", {}, listWorkspaces);\n server.tool(\"list_libraries\", {}, listWorkspaces);\n\n server.tool(\"get_floom_guide\", {}, async () => {\n return {\n content: [{\n type: \"text\",\n text: JSON.stringify({\n guide: [\n \"Use Floom to discover approved AI skills without loading every skill into context.\",\n \"Call search_skills when you need a skill that is not already installed.\",\n \"Call get_skill only after selecting a specific skill candidate.\",\n \"Call install_skill only after the user or task requires local installation.\",\n \"Use get_instruction for account/workspace guidance visible to this agent.\",\n ],\n }),\n }],\n };\n });\n\n server.tool(\"get_instruction\", {\n scope: z.enum([\"account\", \"workspace\"]).default(\"account\"),\n workspace: z.string().optional(),\n target: z.enum([\"default\", \"claude\", \"codex\", \"cursor\", \"opencode\"]).default(\"default\"),\n }, async ({ scope, workspace, target }) => {\n const token = await resolveRequiredToken();\n const result = await apiRequest<any>(token, \"/instructions\", {\n scope,\n ...(workspace ? { workspace } : {}),\n target,\n });\n return { content: [{ type: \"text\", text: JSON.stringify(result) }] };\n });\n\n server.tool(\"list_active_workspaces\", {\n target: z.enum([\"claude\", \"codex\", \"cursor\", \"kimi\", \"opencode\"]).default(\"codex\"),\n scope: z.enum([\"global\", \"local\"]).default(\"local\"),\n }, async ({ target, scope }) => {\n const config = await readFloomConfig(normalizeScope(scope));\n const active = config.targets[assertTarget(target)]?.active_workspaces ?? [];\n return { content: [{ type: \"text\", text: JSON.stringify({ target, scope, active_workspaces: active }) }] };\n });\n\n server.tool(\"list_pinned_skills\", {\n workspace: z.string().optional(),\n target: z.enum([\"claude\", \"codex\", \"cursor\", \"kimi\", \"opencode\"]).default(\"codex\"),\n }, async ({ workspace, target }) => {\n const token = await resolveRequiredToken();\n const config = await readFloomConfig(\"local\");\n const workspaceSlug = workspace ?? config.default_workspace;\n if (!workspaceSlug) throw new Error(\"workspace is required when no default workspace is configured\");\n const result = await apiRequest<any>(token, `/libraries/${workspaceSlug}/pins`, { target });\n return { content: [{ type: \"text\", text: JSON.stringify(result) }] };\n });\n\n server.tool(\"install_skill\", {\n ref: z.string().min(3),\n target: z.enum([\"claude\", \"codex\", \"cursor\", \"kimi\", \"opencode\", \"gemini\"]),\n force: z.boolean().optional().default(false),\n }, async ({ ref, target, force }) => {\n const token = await resolveOptionalToken();\n const installed = await installViaApi(token, ref, target, { force });\n return { content: [{ type: \"text\", text: JSON.stringify(installed) }] };\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nexport async function mcpSmokeCommand(): Promise<void> {\n // Writes to local file only, not stdout; used for dev checks if needed.\n await writeFile(join(tmpdir(), \"floom-mcp-smoke.txt\"), \"ok\\n\", \"utf8\");\n}\n", "import { mkdtemp, readdir, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { api } from \"../api-client.js\";\nimport { DEFAULT_API_URL, isLegacyApiUrl, normalizeApiUrl, readAuth, readRawAuth, trustedApiUrlOrDefault } from \"../config.js\";\nimport { log } from \"../lib/output.js\";\nimport { VERSION } from \"../version.js\";\n\ntype DoctorTarget = \"claude\" | \"codex\" | \"cursor\" | \"kimi\" | \"opencode\" | \"gemini\";\n\nexport interface DoctorOptions {\n freshAgent?: boolean;\n json?: boolean;\n query?: string;\n ref?: string;\n target?: DoctorTarget;\n}\n\ntype Check = { name: string; ok: boolean; detail?: string; status?: \"pass\" | \"warn\" | \"fail\" };\n\ninterface MeResponse {\n user: { handle: string; email: string };\n}\n\nfunction textOf(result: any): string {\n return String(result?.content?.[0]?.text ?? \"\");\n}\nfunction toolError(result: any): string | null {\n const text = textOf(result);\n if (result?.isError) return text || \"tool returned an MCP error\";\n if (/authentication required|forbidden|not found|invalid token/i.test(text)) return text;\n return null;\n}\nfunction jsonArrayLength(result: any, key: string): number | null {\n if (toolError(result)) return null;\n try {\n const parsed = JSON.parse(textOf(result));\n const value = parsed?.[key];\n return Array.isArray(value) ? value.length : null;\n } catch {\n return null;\n }\n}\nfunction pass(name: string, detail?: string): Check { return { name, ok: true, detail }; }\nfunction warn(name: string, detail?: string): Check { return { name, ok: true, detail, status: \"warn\" }; }\nfunction fail(name: string, detail?: string): Check { return { name, ok: false, detail }; }\n\nfunction apiUrlCheck(rawApiUrl: string | null | undefined, label = \"api_url\"): Check {\n const normalized = normalizeApiUrl(rawApiUrl);\n const trusted = trustedApiUrlOrDefault(rawApiUrl);\n if (isLegacyApiUrl(rawApiUrl)) return warn(label, `legacy URL ${rawApiUrl}; using ${DEFAULT_API_URL}`);\n if (normalized !== trusted) {\n return warn(label, `ignored untrusted API URL ${normalized}; set FLOOM_ALLOW_CUSTOM_API_URL=1 only for a trusted self-hosted Floom API`);\n }\n return pass(label, trusted);\n}\n\nasync function validateCurrentToken(token: string | undefined): Promise<Check> {\n if (!token) return warn(\"fresh_agent_auth\", \"missing token; authenticated MCP calls skipped\");\n try {\n const me = await api<MeResponse>(\"/me\", { authRequired: true });\n return pass(\"fresh_agent_auth\", `@${me.user.handle}`);\n } catch (e) {\n return warn(\"fresh_agent_auth\", `saved login rejected; authenticated MCP calls skipped: ${(e as Error).message}`);\n }\n}\n\nexport async function doctorCommand(opts: DoctorOptions = {}): Promise<void> {\n if (!opts.freshAgent) {\n const auth = await readAuth();\n const rawAuth = await readRawAuth();\n let authCheck: Check;\n const envToken = process.env.FLOOM_API_TOKEN?.trim();\n if (!auth?.token && !envToken) {\n authCheck = fail(\"auth\", \"not logged in\");\n } else {\n try {\n const me = await api<MeResponse>(\"/me\", { authRequired: true });\n const authSource = envToken ? \"FLOOM_API_TOKEN\" : \"~/.floom/auth.json\";\n authCheck = pass(\"auth\", `@${me.user.handle} via ${authSource}`);\n } catch (e) {\n authCheck = fail(\"auth\", `saved login rejected by API: ${(e as Error).message}`);\n }\n }\n const checks = [\n pass(\"cli_version\", VERSION),\n authCheck,\n process.env.FLOOM_API_URL\n ? apiUrlCheck(process.env.FLOOM_API_URL)\n : isLegacyApiUrl(rawAuth?.apiUrl)\n ? warn(\"auth_api_url\", `legacy URL in ~/.floom/auth.json; using ${DEFAULT_API_URL}`)\n : apiUrlCheck(auth?.apiUrl ?? DEFAULT_API_URL),\n ];\n emitDoctor(checks, opts.json);\n if (checks.some((check) => !check.ok)) process.exit(1);\n return;\n }\n\n const checks: Check[] = [];\n const auth = await readAuth();\n const token = process.env.FLOOM_API_TOKEN?.trim() || auth?.token;\n const authCheck = await validateCurrentToken(token);\n const hasValidToken = authCheck.ok && authCheck.status !== \"warn\" && Boolean(token);\n checks.push(authCheck);\n\n const cliPath = process.argv[1];\n if (!cliPath) {\n checks.push(fail(\"fresh_agent_cli_path\", \"process.argv[1] is empty\"));\n emitDoctor(checks, opts.json);\n process.exit(1);\n }\n\n const tmpHome = await mkdtemp(join(tmpdir(), \"floom-doctor-home-\"));\n const tmpSkills = await mkdtemp(join(tmpdir(), \"floom-doctor-skills-\"));\n const tmpProject = await mkdtemp(join(tmpdir(), \"floom-doctor-project-\"));\n const transport = new StdioClientTransport({\n command: process.execPath,\n args: [cliPath, \"mcp\"],\n cwd: tmpProject,\n env: {\n ...process.env,\n HOME: tmpHome,\n FLOOM_SKILLS_DIR: tmpSkills,\n ...(hasValidToken && token ? { FLOOM_API_TOKEN: token } : {}),\n ...(process.env.FLOOM_API_URL ? { FLOOM_API_URL: trustedApiUrlOrDefault(process.env.FLOOM_API_URL) } : auth?.apiUrl ? { FLOOM_API_URL: trustedApiUrlOrDefault(auth.apiUrl) } : {}),\n },\n stderr: \"pipe\",\n });\n const client = new Client({ name: \"floom-doctor\", version: VERSION });\n\n try {\n await client.connect(transport);\n const tools = await client.listTools();\n const toolNames = tools.tools.map((tool) => tool.name).sort();\n const expected = [\"get_skill\", \"install_skill\", \"list_libraries\", \"list_workspaces\", \"search_skills\"];\n const missing = expected.filter((name) => !toolNames.includes(name));\n checks.push(missing.length === 0 ? pass(\"mcp_tools\", toolNames.join(\", \")) : fail(\"mcp_tools\", `missing ${missing.join(\", \")}`));\n\n if (hasValidToken) {\n const workspaces = await client.callTool({ name: \"list_workspaces\", arguments: {} });\n const workspaceError = toolError(workspaces);\n const workspaceCount = jsonArrayLength(workspaces, \"libraries\");\n const workspacesOk = !workspaceError && workspaceCount !== null;\n checks.push(workspacesOk ? pass(\"mcp_list_workspaces\", `${workspaceCount} workspaces`) : fail(\"mcp_list_workspaces\", workspaceError ?? \"unexpected response shape\"));\n\n const search = await client.callTool({ name: \"search_skills\", arguments: { query: opts.query ?? \"pdf\" } });\n const searchError = toolError(search);\n const skillCount = jsonArrayLength(search, \"skills\");\n const searchOk = !searchError && skillCount !== null;\n checks.push(searchOk ? pass(\"mcp_search_skills\", `${skillCount} skills`) : fail(\"mcp_search_skills\", searchError ?? \"unexpected response shape\"));\n } else {\n checks.push(warn(\"mcp_authenticated_tools\", \"skipped list_workspaces/search_skills because no valid token is available\"));\n }\n\n if (opts.ref) {\n const skill = await client.callTool({ name: \"get_skill\", arguments: { ref: opts.ref } });\n checks.push(/SKILL\\.md/.test(textOf(skill)) ? pass(\"mcp_get_skill\", opts.ref) : fail(\"mcp_get_skill\", \"bundle did not include SKILL.md\"));\n\n const installed = await client.callTool({ name: \"install_skill\", arguments: { ref: opts.ref, target: opts.target ?? \"codex\" } });\n const entries = await readdir(tmpSkills);\n checks.push(entries.length > 0 ? pass(\"mcp_install_skill\", textOf(installed)) : fail(\"mcp_install_skill\", \"target directory is empty\"));\n } else {\n checks.push(warn(\"mcp_public_skill\", \"skipped; pass --ref <public-skill-ref> to verify get_skill/install_skill against a known public skill\"));\n }\n } catch (e) {\n checks.push(fail(\"fresh_agent_mcp\", (e as Error).message));\n } finally {\n await client.close().catch(() => {});\n await rm(tmpHome, { recursive: true, force: true });\n await rm(tmpSkills, { recursive: true, force: true });\n await rm(tmpProject, { recursive: true, force: true });\n }\n\n emitDoctor(checks, opts.json);\n if (checks.some((check) => !check.ok)) process.exit(1);\n}\n\nfunction emitDoctor(checks: Check[], json?: boolean): void {\n if (json) {\n console.log(JSON.stringify({ ok: checks.every((check) => check.ok), checks }, null, 2));\n return;\n }\n log.heading(\"Floom doctor\");\n for (const check of checks) {\n const detail = check.detail ? ` ${check.detail}` : \"\";\n if (check.status === \"warn\") log.warn(`${check.name}${detail}`);\n else if (check.ok) log.ok(`${check.name}${detail}`);\n else log.err(`${check.name}${detail}`);\n }\n}\n"],
|
|
5
|
+
"mappings": "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A,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAG;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAC/D;AAAA,QAAI;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAChE;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,Q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S;AAAA,QACT;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAChD;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",
|
|
6
|
+
"names": ["bcrypt", "random", "callback", "resolve", "salt", "utfx", "fail", "b", "err", "readFile", "join", "owner", "slug", "version", "readFile", "join", "createHash", "resolve", "promisify", "homedir", "join", "mkdir", "readFile", "join", "homedir", "mkdir", "readFile", "promisify", "writeFile", "stat", "join", "stat", "join", "writeFile", "readFile", "join", "readFile", "join", "readFile", "join", "readFile", "join", "mkdir", "readdir", "join", "readFile", "writeFile", "mkdir", "stat", "readdir", "join", "relative", "sep", "posix", "createHash", "walk", "readdir", "join", "readFile", "relative", "sep", "posix", "createHash", "stat", "join", "readdir", "mkdir", "rm", "rename", "mkdir", "tmpdir", "join", "resolve", "cmpSemver", "resolve", "join", "tmpdir", "rm", "mkdir", "rename", "mkdir", "readFile", "writeFile", "homedir", "join", "z", "z", "join", "homedir", "readFile", "mkdir", "writeFile", "mkdir", "readFile", "writeFile", "basename", "dirname", "join", "createHash", "createHash", "readFile", "join", "basename", "mkdir", "dirname", "writeFile", "mkdir", "writeFile", "dirname", "join", "join", "mkdir", "dirname", "writeFile", "mkdir", "readdir", "readFile", "rename", "rm", "writeFile", "join", "tmpdir", "z", "semverGte", "fetchWithTimeout", "mkdir", "join", "readdir", "rm", "tmpdir", "rename", "walk", "readFile", "z", "mkdtemp", "readdir", "rm", "tmpdir", "join", "auth", "authCheck", "checks", "mkdtemp", "join", "tmpdir", "readdir", "rm"]
|
|
7
7
|
}
|