makefx 1.6.4 → 1.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/makefx.mjs +85 -25
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -61,4 +61,4 @@ IDs, or runs. Retired commands and aliases are not redirected.
61
61
 
62
62
  Run `makefx --help` or `makefx <noun> --help` for current options.
63
63
 
64
- Version: 1.6.4
64
+ Version: 1.6.6
package/makefx.mjs CHANGED
@@ -4442,7 +4442,7 @@ require_websocket_server();
4442
4442
  var wrapper_default = import_websocket.default;
4443
4443
  //#endregion
4444
4444
  //#region src/cli/version.ts
4445
- var CLI_VERSION = "1.6.4+0753202e927c";
4445
+ var CLI_VERSION = "1.6.6+b1c0c6d222d7";
4446
4446
  var CLI_VERSION_HEADER = "X-MakeFX-CLI-Version";
4447
4447
  function cliVersionHeaders() {
4448
4448
  return {
@@ -4460,6 +4460,7 @@ function cliVersionHeaders() {
4460
4460
  */
4461
4461
  var GENERATION_REQUEST_TIMEOUT_MS = 3e5;
4462
4462
  var VIDEO_GENERATION_REQUEST_TIMEOUT_MS = 72e4;
4463
+ var VARIANT_SYNC_POLL_INTERVAL_MS = 15e3;
4463
4464
  function getGenerationRequestTimeoutMs(mediaKind) {
4464
4465
  return mediaKind === "video" ? VIDEO_GENERATION_REQUEST_TIMEOUT_MS : GENERATION_REQUEST_TIMEOUT_MS;
4465
4466
  }
@@ -4643,35 +4644,16 @@ var WebSocketClient = class WebSocketClient {
4643
4644
  this.onChatProgress?.(progressMsg);
4644
4645
  break;
4645
4646
  }
4646
- case "generate:started": {
4647
- const startedMsg = message;
4648
- const handler = this.generateHandlers.get(startedMsg.requestId);
4649
- if (handler) {
4650
- if (handler.onStarted) handler.onStarted(startedMsg);
4651
- this.variantCompletionHandlers.set(startedMsg.variantId, {
4652
- requestId: startedMsg.requestId,
4653
- assetId: startedMsg.assetId,
4654
- assetName: startedMsg.assetName,
4655
- onResult: handler.onResult,
4656
- reject: handler.reject,
4657
- timeout: handler.timeout
4658
- });
4659
- this.generateHandlers.delete(startedMsg.requestId);
4660
- const earlyTerminal = this.earlyTerminalVariants.get(startedMsg.variantId);
4661
- if (earlyTerminal) {
4662
- this.earlyTerminalVariants.delete(startedMsg.variantId);
4663
- this.handleTerminalVariant(earlyTerminal);
4664
- }
4665
- this.clearOrphanedEarlyTerminalVariants();
4666
- }
4647
+ case "generate:started":
4648
+ this.handleGenerateStarted(message);
4667
4649
  break;
4668
- }
4669
4650
  case "generate:error": {
4670
4651
  const errorMsg = message;
4671
4652
  const handler = this.generateHandlers.get(errorMsg.requestId);
4672
4653
  if (handler) {
4673
4654
  this.generateHandlers.delete(errorMsg.requestId);
4674
4655
  clearTimeout(handler.timeout);
4656
+ if (handler.syncPoll) clearInterval(handler.syncPoll);
4675
4657
  handler.reject(new Error(formatServerErrorMessage(errorMsg.code, errorMsg.error)));
4676
4658
  this.clearOrphanedEarlyTerminalVariants();
4677
4659
  }
@@ -4688,6 +4670,25 @@ var WebSocketClient = class WebSocketClient {
4688
4670
  }
4689
4671
  case "sync:state": {
4690
4672
  const syncMsg = message;
4673
+ for (const variant of syncMsg.variants) {
4674
+ if (!variant.request_id || !this.generateHandlers.has(variant.request_id)) continue;
4675
+ const asset = syncMsg.assets.find((candidate) => candidate.id === variant.asset_id);
4676
+ this.handleGenerateStarted({
4677
+ type: "generate:started",
4678
+ requestId: variant.request_id,
4679
+ variantId: variant.id,
4680
+ runId: variant.run_id ?? "",
4681
+ status: variant.status === "uploading" ? "running" : variant.status,
4682
+ assetId: variant.asset_id,
4683
+ assetName: asset?.name ?? "asset"
4684
+ });
4685
+ }
4686
+ for (const variant of syncMsg.variants) {
4687
+ const handler = this.variantCompletionHandlers.get(variant.id);
4688
+ if (!handler) continue;
4689
+ handler.onUpdate?.(variant);
4690
+ if (variant.status === "completed" || variant.status === "failed") this.handleTerminalVariant(variant);
4691
+ }
4691
4692
  this.onSyncState?.({
4692
4693
  assets: syncMsg.assets,
4693
4694
  variants: syncMsg.variants,
@@ -4793,6 +4794,7 @@ var WebSocketClient = class WebSocketClient {
4793
4794
  if (generateHandler) {
4794
4795
  this.generateHandlers.delete(requestId);
4795
4796
  clearTimeout(generateHandler.timeout);
4797
+ if (generateHandler.syncPoll) clearInterval(generateHandler.syncPoll);
4796
4798
  generateHandler.reject(error);
4797
4799
  this.clearOrphanedEarlyTerminalVariants();
4798
4800
  return true;
@@ -4800,11 +4802,34 @@ var WebSocketClient = class WebSocketClient {
4800
4802
  for (const [variantId, handler] of this.variantCompletionHandlers) if (handler.requestId === requestId) {
4801
4803
  this.variantCompletionHandlers.delete(variantId);
4802
4804
  clearTimeout(handler.timeout);
4805
+ if (handler.syncPoll) clearInterval(handler.syncPoll);
4803
4806
  handler.reject(error);
4804
4807
  return true;
4805
4808
  }
4806
4809
  return false;
4807
4810
  }
4811
+ handleGenerateStarted(started) {
4812
+ const handler = this.generateHandlers.get(started.requestId);
4813
+ if (!handler) return;
4814
+ handler.onStarted?.(started);
4815
+ if (handler.syncPoll) clearInterval(handler.syncPoll);
4816
+ this.variantCompletionHandlers.set(started.variantId, {
4817
+ requestId: started.requestId,
4818
+ assetId: started.assetId,
4819
+ assetName: started.assetName,
4820
+ onResult: handler.onResult,
4821
+ reject: handler.reject,
4822
+ timeout: handler.timeout
4823
+ });
4824
+ this.generateHandlers.delete(started.requestId);
4825
+ this.startVariantSyncPolling(started.variantId, started.requestId);
4826
+ const earlyTerminal = this.earlyTerminalVariants.get(started.variantId);
4827
+ if (earlyTerminal) {
4828
+ this.earlyTerminalVariants.delete(started.variantId);
4829
+ this.handleTerminalVariant(earlyTerminal);
4830
+ }
4831
+ this.clearOrphanedEarlyTerminalVariants();
4832
+ }
4808
4833
  handleTerminalVariant(variant) {
4809
4834
  let handled = false;
4810
4835
  const handler = this.variantCompletionHandlers.get(variant.id);
@@ -4812,6 +4837,7 @@ var WebSocketClient = class WebSocketClient {
4812
4837
  handled = true;
4813
4838
  this.variantCompletionHandlers.delete(variant.id);
4814
4839
  clearTimeout(handler.timeout);
4840
+ if (handler.syncPoll) clearInterval(handler.syncPoll);
4815
4841
  handler.onResult({
4816
4842
  requestId: handler.requestId,
4817
4843
  variantId: variant.id,
@@ -4824,6 +4850,32 @@ var WebSocketClient = class WebSocketClient {
4824
4850
  }
4825
4851
  return handled;
4826
4852
  }
4853
+ startVariantSyncPolling(variantId, requestId) {
4854
+ const requestCurrentState = () => {
4855
+ if (this.variantCompletionHandlers.get(variantId)?.requestId !== requestId) return;
4856
+ try {
4857
+ this.requestSync();
4858
+ } catch {}
4859
+ };
4860
+ requestCurrentState();
4861
+ const syncPoll = setInterval(requestCurrentState, VARIANT_SYNC_POLL_INTERVAL_MS);
4862
+ const handler = this.variantCompletionHandlers.get(variantId);
4863
+ if (handler?.requestId === requestId) handler.syncPoll = syncPoll;
4864
+ else clearInterval(syncPoll);
4865
+ }
4866
+ startGenerateSyncPolling(requestId) {
4867
+ const requestCurrentState = () => {
4868
+ if (!this.generateHandlers.has(requestId)) return;
4869
+ try {
4870
+ this.requestSync();
4871
+ } catch {}
4872
+ };
4873
+ requestCurrentState();
4874
+ const syncPoll = setInterval(requestCurrentState, VARIANT_SYNC_POLL_INTERVAL_MS);
4875
+ const handler = this.generateHandlers.get(requestId);
4876
+ if (handler) handler.syncPoll = syncPoll;
4877
+ else clearInterval(syncPoll);
4878
+ }
4827
4879
  hasRequestsAwaitingStarted() {
4828
4880
  return this.generateHandlers.size > 0 || this.draftRunStartsAwaitingVariant.size > 0;
4829
4881
  }
@@ -5075,14 +5127,17 @@ var WebSocketClient = class WebSocketClient {
5075
5127
  const timeoutMs = getGenerationRequestTimeoutMs(params.mediaKind);
5076
5128
  return new Promise((resolve, reject) => {
5077
5129
  const timeout = setTimeout(() => {
5078
- if (this.generateHandlers.get(requestId)) {
5130
+ const requestHandler = this.generateHandlers.get(requestId);
5131
+ if (requestHandler) {
5079
5132
  this.generateHandlers.delete(requestId);
5133
+ if (requestHandler.syncPoll) clearInterval(requestHandler.syncPoll);
5080
5134
  this.clearOrphanedEarlyTerminalVariants();
5081
5135
  reject(/* @__PURE__ */ new Error("Generate request timed out"));
5082
5136
  return;
5083
5137
  }
5084
5138
  for (const [variantId, handler] of this.variantCompletionHandlers) if (handler.requestId === requestId) {
5085
5139
  this.variantCompletionHandlers.delete(variantId);
5140
+ if (handler.syncPoll) clearInterval(handler.syncPoll);
5086
5141
  reject(/* @__PURE__ */ new Error("Generate request timed out"));
5087
5142
  return;
5088
5143
  }
@@ -5125,6 +5180,7 @@ var WebSocketClient = class WebSocketClient {
5125
5180
  };
5126
5181
  try {
5127
5182
  this.send(message);
5183
+ this.startGenerateSyncPolling(requestId);
5128
5184
  } catch (err) {
5129
5185
  this.generateHandlers.delete(requestId);
5130
5186
  clearTimeout(timeout);
@@ -5138,8 +5194,10 @@ var WebSocketClient = class WebSocketClient {
5138
5194
  const timeoutMs = params.timeoutMs ?? 3e5;
5139
5195
  return new Promise((resolve, reject) => {
5140
5196
  const timeout = setTimeout(() => {
5141
- if (this.variantCompletionHandlers.get(params.variantId)?.requestId === requestId) {
5197
+ const handler = this.variantCompletionHandlers.get(params.variantId);
5198
+ if (handler?.requestId === requestId) {
5142
5199
  this.variantCompletionHandlers.delete(params.variantId);
5200
+ if (handler.syncPoll) clearInterval(handler.syncPoll);
5143
5201
  reject(/* @__PURE__ */ new Error("Follow request timed out"));
5144
5202
  }
5145
5203
  }, timeoutMs);
@@ -5152,6 +5210,7 @@ var WebSocketClient = class WebSocketClient {
5152
5210
  reject,
5153
5211
  timeout
5154
5212
  });
5213
+ this.startVariantSyncPolling(params.variantId, requestId);
5155
5214
  const earlyTerminal = this.earlyTerminalVariants.get(params.variantId);
5156
5215
  if (earlyTerminal) {
5157
5216
  this.earlyTerminalVariants.delete(params.variantId);
@@ -5165,6 +5224,7 @@ var WebSocketClient = class WebSocketClient {
5165
5224
  if (requestId && handler.requestId !== requestId) return;
5166
5225
  this.variantCompletionHandlers.delete(variantId);
5167
5226
  clearTimeout(handler.timeout);
5227
+ if (handler.syncPoll) clearInterval(handler.syncPoll);
5168
5228
  }
5169
5229
  /**
5170
5230
  * Send a describe image request and wait for response
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makefx",
3
- "version": "1.6.4",
3
+ "version": "1.6.6",
4
4
  "description": "Command-line interface for AI-assisted game asset production with Make Effects.",
5
5
  "license": "MIT",
6
6
  "type": "module",