chatroom-cli 1.137.2 → 1.137.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2140,7 +2140,7 @@ var require_commander = __commonJS((exports) => {
2140
2140
  exports.InvalidOptionArgumentError = InvalidArgumentError;
2141
2141
  });
2142
2142
 
2143
- // src/commands/generate/local-image-common.ts
2143
+ // src/commands/image-shared/image-preflight.ts
2144
2144
  import { createHash } from "node:crypto";
2145
2145
  function isRecord(value) {
2146
2146
  return typeof value === "object" && value !== null;
@@ -2212,14 +2212,14 @@ async function findOutputConflicts(deps, paths, sourcePaths, sourceIdentities, f
2212
2212
  return conflicts;
2213
2213
  }
2214
2214
  var SAFE_NAME, MAX_SOURCE_PIXELS = 1e8, MAX_SOURCE_BYTES, MAX_SIDECAR_BYTES, PNG_MAGIC;
2215
- var init_local_image_common = __esm(() => {
2215
+ var init_image_preflight = __esm(() => {
2216
2216
  SAFE_NAME = /^[A-Za-z0-9_][A-Za-z0-9_-]{0,63}$/;
2217
2217
  MAX_SOURCE_BYTES = 64 * 1024 * 1024;
2218
2218
  MAX_SIDECAR_BYTES = 1024 * 1024;
2219
2219
  PNG_MAGIC = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
2220
2220
  });
2221
2221
 
2222
- // src/commands/generate/fal-pricing.ts
2222
+ // src/commands/generate-image/fal-pricing.ts
2223
2223
  function listUnitPrices(endpointIds) {
2224
2224
  const prices = new Map;
2225
2225
  for (const endpointId of endpointIds) {
@@ -2351,7 +2351,7 @@ function createDefaultFalPricingDeps(env = process.env) {
2351
2351
  }
2352
2352
  var LIST_PRICES_AS_OF = "2026-10-25", LIST_PRICES, IMAGE_SIZE_PRESETS, PRICING_TIMEOUT_MS = 3000, PRICING_URL = "https://api.fal.ai/v1/models/pricing", DISPLAY_UNITS;
2353
2353
  var init_fal_pricing = __esm(() => {
2354
- init_local_image_common();
2354
+ init_image_preflight();
2355
2355
  LIST_PRICES = {
2356
2356
  "fal-ai/flux-2/flash": { unitPrice: 0.005, unit: "megapixels" },
2357
2357
  "fal-ai/flux-2/flash/edit": { unitPrice: 0.005, unit: "processed megapixels" },
@@ -2374,7 +2374,7 @@ var init_fal_pricing = __esm(() => {
2374
2374
  };
2375
2375
  });
2376
2376
 
2377
- // src/commands/generate/model-capabilities.ts
2377
+ // src/commands/generate-image/model-capabilities.ts
2378
2378
  function getModelCapability(id) {
2379
2379
  return Object.prototype.hasOwnProperty.call(MODEL_CAPABILITIES, id) ? MODEL_CAPABILITIES[id] : undefined;
2380
2380
  }
@@ -2512,7 +2512,7 @@ var init_model_capabilities = __esm(() => {
2512
2512
  };
2513
2513
  });
2514
2514
 
2515
- // src/commands/generate/image.ts
2515
+ // src/commands/generate-image/image.ts
2516
2516
  var exports_image = {};
2517
2517
  __export(exports_image, {
2518
2518
  planGenerateImage: () => planGenerateImage,
@@ -2995,8 +2995,8 @@ async function generateImage(opts, deps) {
2995
2995
  var GENERATE_IMAGE_PLATFORMS, DEFAULT_GENERATE_IMAGE_PLATFORM = "fal", GenerateImageError, LICENSING = "unverified", FAL_API_KEY_MISSING_MESSAGE = "FAL_API_KEY is not set. Set FAL_API_KEY in your environment to generate images with fal. (FAL_KEY_ID/FAL_KEY_SECRET are not supported by this command.)", EXTENSION_FORMATS, UNSUPPORTED_OUTPUT_EXTENSIONS, INPUT_DEDICATED_FLAGS, INPUT_IMAGE_CONTENT_TYPES, HTTP_URL_PATTERN, PLANNED_COST_NOTE = "fal returns no billed cost; this is computed from the planned image size.", ACTUAL_COST_NOTE = "fal returns no billed cost; check the fal dashboard for the actual bill.", EDIT_INPUT_MEGAPIXELS = 1, EDIT_INPUT_NOTE = "fal resizes the input image to 1 MP; the estimate counts 1 MP of input regardless of its dimensions.";
2996
2996
  var init_image = __esm(() => {
2997
2997
  init_fal_pricing();
2998
- init_local_image_common();
2999
2998
  init_model_capabilities();
2999
+ init_image_preflight();
3000
3000
  GENERATE_IMAGE_PLATFORMS = ["fal"];
3001
3001
  GenerateImageError = class GenerateImageError extends Error {
3002
3002
  constructor(message) {
@@ -7054,7 +7054,7 @@ var require_src = __commonJS((exports) => {
7054
7054
  }();
7055
7055
  });
7056
7056
 
7057
- // src/commands/generate/fs-helpers.ts
7057
+ // src/commands/image-shared/output-files.ts
7058
7058
  import { stat, writeFile } from "node:fs/promises";
7059
7059
  async function pathStatus(path) {
7060
7060
  try {
@@ -7083,9 +7083,9 @@ async function writeJsonFile(path, value, options = {}) {
7083
7083
  }
7084
7084
  await writeFile(path, text, "utf8");
7085
7085
  }
7086
- var init_fs_helpers = () => {};
7086
+ var init_output_files = () => {};
7087
7087
 
7088
- // src/commands/generate/package-version.ts
7088
+ // src/commands/image-shared/package-version.ts
7089
7089
  import { readFileSync } from "node:fs";
7090
7090
  import { createRequire as createRequire2 } from "node:module";
7091
7091
  import { dirname, join } from "node:path";
@@ -7103,7 +7103,7 @@ function readInstalledPackageVersion(specifier) {
7103
7103
  var UNKNOWN_VERSION = "unknown";
7104
7104
  var init_package_version = () => {};
7105
7105
 
7106
- // src/commands/generate/deps.ts
7106
+ // src/commands/generate-image/deps.ts
7107
7107
  var exports_deps = {};
7108
7108
  __export(exports_deps, {
7109
7109
  createFalRawSubscribe: () => createFalRawSubscribe,
@@ -7296,8 +7296,8 @@ function createDefaultGenerateImageDeps() {
7296
7296
  var import_client, SUBSCRIBE_TIMEOUT_SECONDS = 300;
7297
7297
  var init_deps = __esm(() => {
7298
7298
  init_fal_pricing();
7299
- init_fs_helpers();
7300
7299
  init_image();
7300
+ init_output_files();
7301
7301
  init_package_version();
7302
7302
  import_client = __toESM(require_src(), 1);
7303
7303
  });
@@ -9189,7 +9189,7 @@ var require_png = __commonJS((exports) => {
9189
9189
  };
9190
9190
  });
9191
9191
 
9192
- // src/commands/generate/slice-deps.ts
9192
+ // src/commands/slice-image/slice-deps.ts
9193
9193
  var exports_slice_deps = {};
9194
9194
  __export(exports_slice_deps, {
9195
9195
  createDefaultSliceImageDeps: () => createDefaultSliceImageDeps
@@ -9276,15 +9276,15 @@ function createDefaultSliceImageDeps() {
9276
9276
  }
9277
9277
  var import_pngjs, PNG;
9278
9278
  var init_slice_deps = __esm(() => {
9279
- init_fs_helpers();
9279
+ init_output_files();
9280
9280
  init_package_version();
9281
9281
  import_pngjs = __toESM(require_png(), 1);
9282
9282
  ({ PNG } = import_pngjs.default);
9283
9283
  });
9284
9284
 
9285
- // src/commands/generate/remove-background-deps.ts
9286
- var exports_remove_background_deps = {};
9287
- __export(exports_remove_background_deps, {
9285
+ // src/commands/remove-image-background/remove-image-background-deps.ts
9286
+ var exports_remove_image_background_deps = {};
9287
+ __export(exports_remove_image_background_deps, {
9288
9288
  createDefaultRemoveImageBackgroundDeps: () => createDefaultRemoveImageBackgroundDeps
9289
9289
  });
9290
9290
  import { readdir } from "node:fs/promises";
@@ -9294,11 +9294,11 @@ function createDefaultRemoveImageBackgroundDeps() {
9294
9294
  listDir: (dir) => readdir(dir)
9295
9295
  };
9296
9296
  }
9297
- var init_remove_background_deps = __esm(() => {
9297
+ var init_remove_image_background_deps = __esm(() => {
9298
9298
  init_slice_deps();
9299
9299
  });
9300
9300
 
9301
- // src/commands/generate/remove-background-fal.ts
9301
+ // src/commands/remove-image-background/remove-image-background-fal.ts
9302
9302
  import { basename as basename2, resolve as resolve3 } from "node:path";
9303
9303
  function validateBackgroundResult(raw, model) {
9304
9304
  const unexpected = new RemoveBackgroundFalError(`fal returned no image for ${model}`);
@@ -9494,10 +9494,10 @@ async function removeBackgroundFal(options, deps) {
9494
9494
  };
9495
9495
  }
9496
9496
  var DEFAULT_BACKGROUND_ENGINE = "bria", BACKGROUND_ENGINES, MAX_FAL_INPUT_BYTES, MAX_FAL_RESULT_BYTES, TOOL2 = "chatroom remove-image-background-fal", LICENSING2 = "unverified", RemoveBackgroundFalError, FAL_BILL_NOTE = "fal returns no billed cost; check the fal dashboard for the actual bill.", BIREFNET_RATE_REASON = "Total depends on runtime; not estimated.";
9497
- var init_remove_background_fal = __esm(() => {
9497
+ var init_remove_image_background_fal = __esm(() => {
9498
9498
  init_fal_pricing();
9499
9499
  init_image();
9500
- init_local_image_common();
9500
+ init_image_preflight();
9501
9501
  BACKGROUND_ENGINES = {
9502
9502
  bria: {
9503
9503
  model: "fal-ai/bria/background/remove",
@@ -9518,9 +9518,9 @@ var init_remove_background_fal = __esm(() => {
9518
9518
  };
9519
9519
  });
9520
9520
 
9521
- // src/commands/generate/remove-background-fal-deps.ts
9522
- var exports_remove_background_fal_deps = {};
9523
- __export(exports_remove_background_fal_deps, {
9521
+ // src/commands/remove-image-background/remove-image-background-fal-deps.ts
9522
+ var exports_remove_image_background_fal_deps = {};
9523
+ __export(exports_remove_image_background_fal_deps, {
9524
9524
  createDefaultRemoveBackgroundFalDeps: () => createDefaultRemoveBackgroundFalDeps
9525
9525
  });
9526
9526
  import { dirname as dirname4 } from "node:path";
@@ -9569,11 +9569,11 @@ function createDefaultRemoveBackgroundFalDeps() {
9569
9569
  log: (message) => console.log(message)
9570
9570
  };
9571
9571
  }
9572
- var init_remove_background_fal_deps = __esm(() => {
9572
+ var init_remove_image_background_fal_deps = __esm(() => {
9573
+ init_remove_image_background_fal();
9573
9574
  init_deps();
9574
9575
  init_fal_pricing();
9575
9576
  init_package_version();
9576
- init_remove_background_fal();
9577
9577
  init_slice_deps();
9578
9578
  });
9579
9579
 
@@ -108620,7 +108620,7 @@ var init_game_asset_designer_workflow = __esm(() => {
108620
108620
  // ../../services/backend/prompts/teams/game-asset-designer-handoff-templates.ts
108621
108621
  function getEntryPointToGameAssetDesignerHandoffTemplate(query) {
108622
108622
  const entryPoint = query.fromRole;
108623
- return `Instructions (not part of the message): Pass the asset request as a brief the designer can act on without guessing. Provide every field below; write \`Not specified.\` for a field you cannot fill and the designer will ask or apply a stated default. Give each asset a stable ID (\`A01\`, \`A02\`…). Use \`spec only\` only when you want a specification with no files; the default is \`spec and generate\`. The \`## Allowed tools\` value is fixed: \`chatroom generate-image --platform=fal --model <Model> (dry run first), chatroom slice-image, chatroom remove-image-background\`. Do not name any other generator.
108623
+ return `Instructions (not part of the message): Pass the asset request as a brief the designer can act on without guessing. Provide every field below; write \`Not specified.\` for a field you cannot fill and the designer will ask or apply a stated default. Give each asset a stable ID (\`A01\`, \`A02\`…). Use \`spec only\` only when you want a specification with no files; the default is \`spec and generate\`. The \`## Allowed tools\` value is fixed: \`chatroom generate-image --platform=fal --model <Model> (dry run first), chatroom slice-image, chatroom remove-image-background\`. Do not name any other generator. Before generating anything, the designer evaluates each \`## Free asset candidates\` entry and records a \`use\`, \`adapt\`, or \`reject\` decision; it generates only the assets that no candidate covers.
108624
108624
 
108625
108625
  ## Asset request
108626
108626
  <one to three sentences: what the assets are for and the user-visible goal>
@@ -108652,6 +108652,9 @@ function getEntryPointToGameAssetDesignerHandoffTemplate(query) {
108652
108652
  ## Existing assets
108653
108653
  <repository paths the designer must reuse or must not overwrite; or \`Not specified.\`>
108654
108654
 
108655
+ ## Free asset candidates
108656
+ <one entry per third-party pack to evaluate before generating: pack name, source URL, expected licence (for example CC0), formats, and the asset IDs it could cover; or \`None.\`. The designer checks each pack's own licence file and file sizes and gives each candidate a \`use\`, \`adapt\`, or \`reject\` decision. It fetches only the URLs named here, inspects the pack as static files, and never runs its code.>
108657
+
108655
108658
  ## Deliverable mode
108656
108659
  <\`spec and generate\` (default when you name an output location and allowed tools) or \`spec only\`>
108657
108660
 
@@ -108711,10 +108714,14 @@ ${PROOF_OF_PRINCIPLES_REPORT}
108711
108714
  - [ ] Every asset ID has a file or \`Specified only.\`
108712
108715
  - [ ] Every sliced asset was isolated with \`remove-image-background\` and \`inspected\`.
108713
108716
  - [ ] Manifests are listed in the asset manifest.
108717
+ - [ ] Every candidate in the brief has a decision with its licence and file sizes labelled \`inspected\`.
108714
108718
 
108715
108719
  ## Target and assumptions
108716
108720
  <each assumption you made and why; each deviation from the planner's target or budgets; or \`None.\`>
108717
108721
 
108722
+ ## Free asset decisions
108723
+ <one entry per candidate in the brief: pack name, licence quoted from the pack's own licence file, file sizes checked, decision (\`use\`, \`adapt\`, or \`reject\`), asset IDs covered, and the reason; for \`adapt\`, the edits made; write exactly \`None.\` if the brief named no candidates>
108724
+
108718
108725
  ## Asset manifest
108719
108726
  <one entry per asset, keyed by the planner's stable ID (\`A01\`…): name, category, file format, path (or \`Specified only.\`), dimensions/units/scale, pivot, naming, LOD list with triangle budgets, texture set with resolution, color space and channel packing, atlas/pixel grid/frame data, audio format and loudness target, import settings, dependencies and variants; for each budget, the acceptance check (exact command and expected value); for each generated file, the generator command line (\`chatroom generate-image\` with its \`--platform\`, \`--model\`, \`--seed\`, \`--input\`, and \`--input-image\` values), the sheet and tile manifests, and the isolated asset manifest path>
108720
108727
 
@@ -146804,11 +146811,11 @@ var {
146804
146811
  Help
146805
146812
  } = import__.default;
146806
146813
 
146807
- // src/commands/generate/index.ts
146814
+ // src/commands/generate-image/index.ts
146808
146815
  import { readFile as readFile2, stat as stat2 } from "node:fs/promises";
146809
146816
  init_image();
146810
- init_local_image_common();
146811
146817
  init_model_capabilities();
146818
+ init_image_preflight();
146812
146819
  var OUTPUT_FORMATS = ["png", "webp"];
146813
146820
  function parsePlatform(value) {
146814
146821
  if (!GENERATE_IMAGE_PLATFORMS.includes(value)) {
@@ -146888,11 +146895,19 @@ function registerGenerateImageCommand(program2) {
146888
146895
  program2.command("generate-image").description("Generate one image with a fal model and write a JSON manifest next to it").requiredOption("--prompt <text>", "Text prompt describing the image").requiredOption("--out <path>", "Output image path (manifest is written to <path>.json)").option("--platform <name>", "Generation platform: fal", parsePlatform, DEFAULT_GENERATE_IMAGE_PLATFORM).requiredOption("--model <id>", `fal model id (required), for example ${FLUX_2_FLASH_MODEL}, or ${FLUX_2_FLASH_EDIT_MODEL} with --input-image`).option("--aspect-ratio <ratio>", "Aspect ratio for models that take one, e.g. 1:1, 16:9 (omitted = model default). Rejected for models the CLI knows do not support it").option("--output-format <format>", "Output format: png or webp (omitted = model default)", parseOutputFormat).option("--seed <n>", "Seed for the random number generator", parseSeed).option("--input <json|@file>", "Model-specific JSON input object merged into the fal request; @file reads JSON from a file").option("--input-image <path-or-url>", `Image to edit: a local .png, .jpg, .jpeg, .webp, or .gif (uploaded to fal) or an http(s) URL. Requires an edit model such as ${FLUX_2_FLASH_EDIT_MODEL}`).option("--force", "Overwrite existing output and manifest files").option("--dry-run", "Validate and print the request, the model constraints the CLI knows, and the estimated fal cost. No upload or fal generation call is made; one read-only pricing request may be made when FAL_API_KEY is set (the key is not required)").addHelpText("after", HELP_AFTER).action(runGenerateImage);
146889
146896
  }
146890
146897
 
146891
- // src/commands/generate/remove-background.ts
146898
+ // src/commands/register-chatroom-role-command.ts
146899
+ function registerChatroomRoleCommand(program2, config) {
146900
+ program2.command(config.name).description(config.description).requiredOption("--chatroom-id <id>", "Chatroom identifier").requiredOption("--role <role>", "Your role (e.g., planner, builder)").action(async (options) => {
146901
+ await config.maybeRequireAuth();
146902
+ await config.run(options.chatroomId, { role: options.role });
146903
+ });
146904
+ }
146905
+
146906
+ // src/commands/remove-image-background/remove-image-background.ts
146892
146907
  import { basename, dirname as dirname3, extname as extname2, join as join2, resolve as resolve2 } from "node:path";
146893
146908
 
146894
- // src/commands/generate/background-key.ts
146895
- init_local_image_common();
146909
+ // src/commands/remove-image-background/background-key.ts
146910
+ init_image_preflight();
146896
146911
  var DEFAULT_TOLERANCE = 24;
146897
146912
  var DEFAULT_MIN_AREA_PERCENT = 0.5;
146898
146913
  var BORDER_NOISE_REFUSAL_RATIO = 0.02;
@@ -147207,10 +147222,7 @@ function keyBackground(image, opts) {
147207
147222
  });
147208
147223
  }
147209
147224
 
147210
- // src/commands/generate/remove-background.ts
147211
- init_local_image_common();
147212
-
147213
- // src/commands/generate/trim-crop.ts
147225
+ // src/commands/remove-image-background/trim-crop.ts
147214
147226
  var MAX_TRIM_PADDING = 64;
147215
147227
  function trimRect(contentBox, canvasWidth, canvasHeight, padding) {
147216
147228
  const x = Math.max(0, contentBox.x - padding);
@@ -147229,7 +147241,9 @@ function cropRgba(data, canvasWidth, rect) {
147229
147241
  return cropped;
147230
147242
  }
147231
147243
 
147232
- // src/commands/generate/remove-background.ts
147244
+ // src/commands/remove-image-background/remove-image-background.ts
147245
+ init_image_preflight();
147246
+
147233
147247
  class RemoveBackgroundError extends Error {
147234
147248
  constructor(message) {
147235
147249
  super(message);
@@ -147667,7 +147681,7 @@ async function removeImageBackground(opts, deps) {
147667
147681
  return result;
147668
147682
  }
147669
147683
 
147670
- // src/commands/generate/remove-background-command.ts
147684
+ // src/commands/remove-image-background/remove-image-background-command.ts
147671
147685
  var DECIMAL_INTEGER = /^\d+$/;
147672
147686
  var DECIMAL_PERCENT = /^\d+(?:\.\d+)?$/;
147673
147687
  function parseTolerance(value) {
@@ -147769,7 +147783,7 @@ function printResult(result) {
147769
147783
  function registerRemoveImageBackgroundCommand(program2) {
147770
147784
  program2.command("remove-image-background").description("Key a tile background to transparency and write an isolated PNG asset").option("--in <png>", "Single input tile PNG").option("--out <png>", "Single output PNG path (must end in .png)").option("--in-dir <dir>", "Directory of input tile PNGs").option("--out-dir <dir>", "Directory for output PNGs and manifests").option("--map <tile=name,...>", "Directory-mode tile stem to output name mapping", parseMap).option("--tolerance <1-128>", "Background colour tolerance", parseTolerance, 24).option("--min-area <percent>", "Smallest kept region as a percent of the tile", parseMinArea, 0.5).option("--allow-edge-content", "Keep artwork that touches the tile border").option("--trim", "Crop each asset to its opaque content").option("--trim-padding <px>", "Pixels kept around trimmed content (0-64, requires --trim)", parseTrimPadding).option("--force", "Overwrite existing outputs").option("--dry-run", "Report the assets without writing anything").addHelpText("after", HELP_AFTER2).action(async (options) => {
147771
147785
  try {
147772
- const { createDefaultRemoveImageBackgroundDeps: createDefaultRemoveImageBackgroundDeps2 } = await Promise.resolve().then(() => (init_remove_background_deps(), exports_remove_background_deps));
147786
+ const { createDefaultRemoveImageBackgroundDeps: createDefaultRemoveImageBackgroundDeps2 } = await Promise.resolve().then(() => (init_remove_image_background_deps(), exports_remove_image_background_deps));
147773
147787
  const removeOptions = {
147774
147788
  in: options.in,
147775
147789
  out: options.out,
@@ -147793,8 +147807,8 @@ function registerRemoveImageBackgroundCommand(program2) {
147793
147807
  });
147794
147808
  }
147795
147809
 
147796
- // src/commands/generate/remove-background-fal-command.ts
147797
- init_remove_background_fal();
147810
+ // src/commands/remove-image-background/remove-image-background-fal-command.ts
147811
+ init_remove_image_background_fal();
147798
147812
  var ENGINES = ["bria", "birefnet"];
147799
147813
  function parseEngine(value) {
147800
147814
  if (!ENGINES.includes(value)) {
@@ -147841,7 +147855,7 @@ Examples:
147841
147855
  function registerRemoveImageBackgroundFalCommand(program2) {
147842
147856
  program2.command("remove-image-background-fal").description("Remove an image background with fal.ai and write a transparent PNG").requiredOption("--in <png>", "Input PNG to cut out").requiredOption("--out <png>", "Output PNG path for the image with alpha").option("--engine <engine>", "Background model: bria (default, fal-ai/bria/background/remove) or birefnet (previous BiRefNet Matting backend, fal-ai/birefnet/v2)", parseEngine, DEFAULT_BACKGROUND_ENGINE).option("--force", "Overwrite an existing output and manifest").addHelpText("after", HELP_AFTER3).action(async (options) => {
147843
147857
  try {
147844
- const { createDefaultRemoveBackgroundFalDeps: createDefaultRemoveBackgroundFalDeps2 } = await Promise.resolve().then(() => (init_remove_background_fal_deps(), exports_remove_background_fal_deps));
147858
+ const { createDefaultRemoveBackgroundFalDeps: createDefaultRemoveBackgroundFalDeps2 } = await Promise.resolve().then(() => (init_remove_image_background_fal_deps(), exports_remove_image_background_fal_deps));
147845
147859
  const result = await removeBackgroundFal({ in: options.in, out: options.out, engine: options.engine, force: options.force }, createDefaultRemoveBackgroundFalDeps2());
147846
147860
  console.log(`Removed background ${result.outPath} (${result.bytes} bytes)`);
147847
147861
  console.log(`Manifest ${result.manifestPath}`);
@@ -147853,8 +147867,8 @@ function registerRemoveImageBackgroundFalCommand(program2) {
147853
147867
  });
147854
147868
  }
147855
147869
 
147856
- // src/commands/generate/slice.ts
147857
- init_local_image_common();
147870
+ // src/commands/slice-image/slice.ts
147871
+ init_image_preflight();
147858
147872
  import { basename as basename3, extname as extname3, join as join3, resolve as resolve4 } from "node:path";
147859
147873
  var SLICE_TOOL = "chatroom slice-image";
147860
147874
  var MAX_TILES = 256;
@@ -148350,7 +148364,7 @@ async function sliceImage(opts, deps) {
148350
148364
  return result;
148351
148365
  }
148352
148366
 
148353
- // src/commands/generate/slice-command.ts
148367
+ // src/commands/slice-image/slice-command.ts
148354
148368
  var DECIMAL_INTEGER2 = /^\d+$/;
148355
148369
  var HELP_AFTER4 = `
148356
148370
  Usage:
@@ -148450,14 +148464,6 @@ function registerSliceImageCommand(program2) {
148450
148464
  });
148451
148465
  }
148452
148466
 
148453
- // src/commands/register-chatroom-role-command.ts
148454
- function registerChatroomRoleCommand(program2, config) {
148455
- program2.command(config.name).description(config.description).requiredOption("--chatroom-id <id>", "Chatroom identifier").requiredOption("--role <role>", "Your role (e.g., planner, builder)").action(async (options) => {
148456
- await config.maybeRequireAuth();
148457
- await config.run(options.chatroomId, { role: options.role });
148458
- });
148459
- }
148460
-
148461
148467
  // src/utils/multi-value-option.ts
148462
148468
  function collectMultiValueOption(value, previous) {
148463
148469
  return previous ? [...previous, value] : [value];
@@ -149093,4 +149099,4 @@ program2.hook("preAction", async (_thisCommand, actionCommand) => {
149093
149099
  });
149094
149100
  program2.parse();
149095
149101
 
149096
- //# debugId=F8A3E4AE84EB0AE364756E2164756E21
149102
+ //# debugId=DB5E1205262551F864756E2164756E21